pax_global_header00006660000000000000000000000064142037205760014520gustar00rootroot0000000000000052 comment=36663e5afb677890702a2e94386ef8fc8b05b5c1 ironclad-0.57/000077500000000000000000000000001420372057600132465ustar00rootroot00000000000000ironclad-0.57/.github/000077500000000000000000000000001420372057600146065ustar00rootroot00000000000000ironclad-0.57/.github/workflows/000077500000000000000000000000001420372057600166435ustar00rootroot00000000000000ironclad-0.57/.github/workflows/ci.yml000066400000000000000000000035151420372057600177650ustar00rootroot00000000000000name: CI on: push: pull_request: branches: [master] jobs: test: name: ${{matrix.lisp}} on ${{matrix.os}} strategy: matrix: lisp: [abcl-bin, allegro, ccl-bin, ccl-bin READTABLE_CASE_INVERT=1, ecl, sbcl-bin] os: [ubuntu-latest] fail-fast: false runs-on: ${{matrix.os}} steps: - uses: actions/checkout@v2 - name: Install Roswell shell: bash env: LISP: ${{matrix.lisp}} run: curl -L https://raw.githubusercontent.com/roswell/roswell/master/scripts/install-for-ci.sh | sh -x - name: Get Lisp info continue-on-error: true shell: bash run: | ros -e '(format t "Lisp: ~a ~a on ~a~%" (lisp-implementation-type) (lisp-implementation-version) (machine-type))' ros -e '(format t "Fixnum bits: ~a~%" (integer-length most-positive-fixnum))' ros -e '(ql:quickload "trivial-features" :silent t)' -e '(format t "Features: ~s~%" *features*)' - name: Allegro workaround # Compiling and testing can fail on Allegro CL Express Free edition # because of the 50 MB heap size limitation, so let's try to split # the work in two as a possible workaround... if: ${{matrix.lisp == 'allegro'}} shell: bash run: ros -e '(setf *debugger-hook* (lambda (&rest ignorable) (declare (ignore ignorable)) (uiop:quit 0)))' -e '(ql:quickload "ironclad/tests")' - name: Run tests shell: bash run: ros -e '(setf *debugger-hook* (lambda (&rest ignorable) (declare (ignore ignorable)) (uiop:quit -1)))' -e '(when (uiop:getenvp "READTABLE_CASE_INVERT") (format t "changing readtable-case to :invert~%") (setq *readtable* (let ((rt (copy-readtable))) (setf (readtable-case rt) :invert) rt)))' -e '(ql:quickload "ironclad/tests")' -e '(unless (rt:do-tests) (uiop:quit -1))' ironclad-0.57/.gitignore000066400000000000000000000002101420372057600152270ustar00rootroot00000000000000*.fasl *.FASL *.ufasl *.ufsl *.dx32fsl *.dx64fsl *.pfsl *.dfsl *.p64fsl *.d64fsl *.lx32fsl *.lx64fsl *.fx32fsl *.fx64fsl *.fas *.lib *~ ironclad-0.57/LICENSE000066400000000000000000000027511420372057600142600ustar00rootroot00000000000000Copyright (c) 2004-2008, Nathan Froyd All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holders nor the names of contributors to this software may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ironclad-0.57/NEWS000066400000000000000000000766211420372057600137610ustar00rootroot00000000000000-*- mode: outline -*- * Version 0.57, released 2022-02-18 ** bug fixes Fixed SHAKE128 and SHAKE256 when a big output length is requested. ** new features DIGEST-SEQUENCE can use non-simple arrays. * Version 0.56, released 2021-09-12 ** bug fixes Fixed access to /dev/urandom in saved cores. ** new features Experimental: Ironclad split in multiple systems so that users can load only what they need. * Version 0.55, released 2021-03-26 ** bug fixes Fixed compilation with CCL < 1.12 on x86-64. ** new features GCM and GMAC can use initialization vectors with a size different from 12 bytes. * Version 0.54, released 2021-01-06 ** bug fixes Fixed SB-VM package lock error with SBCL on arm64 and ppc64. * Version 0.53, released 2020-12-18 ** bug fixes Fixed compilation with SBCL > 2.0.11 on x86-64. * Version 0.52, released 2020-11-14 ** bug fixes Fixed authenticated-encryption-mode-supported-p, digest-supported-p, mac-supported-p and mode-supported-p functions so that they work correctly with either a keyword or a regular symbol as argument. ** improvements Check for AES-NI and PCLMULQDQ support on x86-64 at run time instead of compile time. It should allow a program compiled on a machine supporting these CPU instructions to run on a machine that doesn't. * Version 0.51, released 2020-09-04 ** new features The prime factors (p and q) of the modulus of a RSA private key can be retreived using the rsa-key-prime-p and rsa-key-prime-q functions. Added the Secp256k1, Secp256r1 (a.k.a. NIST P-256), Secp384r1 (a.k.a. NIST P-384) and Secp521r1 (a.k.a. NIST P-521) elliptic curves. Added the generate-signature-nonce method that can be redefined to get deterministic signature nonces instead of random ones. Added the bcrypt and bcrypt-pbkdf key derivation functions. * Version 0.50, released 2020-07-01 ** bug fixes Fixed default OS PRNG getting stuck in dumped images. Fixes/workarounds for CCL on ARM32. ** improvements Open only one stream to /dev/urandom for OS PRNGs on unix-like systems even if there are many OS PRNGs instantiated. * Version 0.49, released 2020-04-14 ** bug fixes Fixed possible file descriptor leak with OS PRNGs. Fixed compilation with recent SBCL on Windows. ** new features Public and private key types are now exported, so that users can use them to specialize their generic functions. * Version 0.48, released 2020-01-20 ** bug fixes Fixed compiling with the ':invert' readtable-case. ** new features Added the '*number-of-miller-rabin-tests*' parameter allowing to configure the number of rounds of Miller-Rabin to do in the 'prime-p' function. ** improvements Some improvements of assembly functions for CCL and ECL. Improved the probable primality test by adding a Lucas test after the Miller-Rabin tests. * Version 0.47, released 2019-09-11 ** bug fixes Allow running in ECL even if there is no C compiler available. ** new features Added the HMAC-KDF key derivation function. * Version 0.46, released 2019-06-04 ** bug fixes Allow the 'digest' parameter of the 'make-kdf' function to be a keyword. ** new features Added the Argon2d key derivation function (without parallelism). * Version 0.45, released 2019-02-18 ** bug fixes Pseudo-random number generation is now thread safe, but only when the threads are created with the bordeaux-threads library. ** new features Added the SM3 digest (GM/T 0004-2012). Added the SM4 cipher (GM/T 0002-2012). Added the SipHash MAC. * Version 0.44, released 2018-11-03 ** new features Added the EAX authenticated encryption scheme. Added support of 256, 512 and 1024 bit block ciphers to CMAC. Added the Kalyna128, Kalyna256 and Kalyna512 block ciphers (DSTU 7624:2014) Added the Kupyna and Kupyna/256 digests (DSTU 7564:2014) Some optimizations for Chacha and Salsa for ECL. Some optimizations for Poly1305 for ECL. * Version 0.43, released 2018-09-14 ** new features Added support for PKCS7, ANSI X.923 and ISO 7816-4 padding schemes when encrypting or decrypting in ECB or CBC mode. Added support for CFB, CFB8 and OFB modes to encrypting/decrypting streams. Added the GMAC authentication code. Added the GCM (Galois counter mode) and ETM (Encrypt then MAC) authenticated encryption schemes. Some optimizations for CMAC and Poly1305. Some optimizations for CBC, CFB, CTR and OFB modes. Some optimizations for Skein. * Version 0.42, released 2018-08-09 ** bug fixes Fixed loading with SBCL versions newer than 1.4.10 Fixed wrong decryption when using the decrypt-in-place function with a block cipher in CFB mode. ** new features The encrypt-message and decrypt-message methods can be used with ciphers (in addition to public or private keys). Some optimizations for ed25519 and ed448. * Version 0.41, released 2018-07-30 ** new features Added the original Keccak digests (SHA3 with a different padding). Added the Streebog digests (GOST R 34.11-2012). Added the Kuznyechik block cipher (GOST R 34.12-2015). * Version 0.40, released 2018-06-20 ** new features Add ability to get or set the current position in the key stream for block ciphers in CTR mode and stream cipher of the Chacha and Salsa20 families. * Version 0.39, released 2018-04-19 ** bug fixes Fixed Poly1305 returning a bad MAC when calling produce-mac several times. Fixed tree-hash returning a bad hash when calling produce-digest several times. * Version 0.38, released 2018-02-20 ** bug fixes Fixed possible floating point exception when using strong-random with a very large integer limit. Fixed possible array type issue when compiling +ED448-DOM+. Fixed bug where read-sequence was returning an invalid value for encrypting-input-stream and decrypting-input-stream. ** new features Optimized the Poly1305 MAC. Add a COMPATIBLE-WITH-KEY keyword to GENERATE-KEY-PAIR for Elgamal keys, to generate compatible Elgamal key pairs for a Diffie-Hellman exchange more easily. * Version 0.37, released 2017-11-23 Renamed NULL cipher to XOR. It's a better description of what it does, and it allows not having to shadow cl:null. ** new features Added the Camellia block cipher. Added the SEED block cipher. Added the ARIA block cipher. Added the Sosemanuk stream cipher. * Version 0.36, released 2017-10-02 ** bug fixes Fixed stream cryptors for Chacha and Salsa20. Some bytes of the keystream were ignored after encrypting less than 64 bytes at once. Fixed tree hash digester. It could sometimes give a wrong result when fed data incrementally. Fixed Arcfour cipher reinitialization. ** new features Added Gray streams support for ABCL, ECL and Clisp. Added encrypting streams and decrypting streams. Only stream ciphers and block ciphers in CTR mode are supported for the moment. Added authenticating streams. * Version 0.35, released 2017-09-06 ** bug fixes Fixed type checking of stream element-type in the update-digest-from-stream function. Fixed possible timing attack in the pbkdf2-check-password function. ** new features New algorithms: - Cipher: XChacha, XSalsa20 - Diffie-Hellman: Curve25519, Curve448, Elgamal - Digest: JH, Groestl - Key derivation function: Argon2i - Message authentication code: Blake2, Blake2s - Signature: Ed448 New default pseudo-random number generator (os-prng) using the operating system's PRNG. Added optimized versions of some common functions for CCL on x86-64 CPUs and for ECL. Added optimized AES functions (round keys generation, encryption and decryption) for SBCL on x86-64 CPUs with AES-NI support. Added optimized Blake2s mixing for SBCL on x86-64 CPUs. Added the constant-time-equal function to check the equality of two byte arrays (e.g. passwords, MACs) in constant time. Added the make-message, destructure-message, make-signature and destructure-signature functions allowing to manage the elements of messages and signatures returned by encrypt-message and sign-message by hand if necessary (e.g. to use a different serialization). Added the destructure-public-key and destructure-private-key functions (e.g. to store keys somewhere and reconstruct them later with make-public-key and make-private-key). Added a unified API for MACs. * Version 0.34, released 2017-03-07 ** bug fixes Padding issues in 64-bit SHA variants have been fixed. Compiling with newer versions of SBCL will no longer throw errors due to a missing SB-BIGNUM:BIGNUM-TYPE. ** new features Many new algorithms have been added, all by Guillaume LE VAILLANT: Threefish, Skein, ElGamal, ED25519, Poly1305, Serpent, SHA3, Blake2, and variants thereof. CTR mode should be faster on some implementations. (Thanks to Guillaume LE VAILLANT.) * Version 0.33, released 2014-10-15 ** bug fixes Included prng.testvec in the packaged tarball. The group parameter accessors for DSA keys have been fixed to not throw errors. (Thanks to Patrick Stein.) ** new features The convenience function WITH-DIGESTING-STREAM has been added to the IRONCLAD package. (Thanks to Samium Gromoff.) A new convenience package, IRONCLAD-TEXT, is included with this release; when loaded, IRONCLAD-TEXT exports the function WITH-DIGESTING-TEXT-STREAM from the IRONCLAD package. IRONCLAD-TEXT depends on FLEXI-STREAMS. (Thanks to Samium Gromoff.) The Salsa20 and ChaCha stream ciphers have been added, in full and reduced-round variants. The scrypt hash function's performance has been improved on x86-64 SBCL. Type checking for the PBKDF key derivation functions has been improved. * Version 0.32.1, released 2012-12-29 ** bug fixes Fixed octet-streams for Allegro versions >= 9.0. (Thanks to Elliott Johnson.) Fixed WRITE-SEQUENCE on octet-output-streams. (Thanks to Martin Nzioki.) Tweak system definition to work better with newer versions of ASDF. (Thanks to François-René Rideau.) Fixed problems with the Fortuna prng. (Thanks to Robert Uhl.) * Version 0.32, released 2012-11-13 ** bug fixes Fixed a SB!WIN32 typo. (Thanks to Leonard Huang.) Fix cipher key verification for implementations that don't provide a specialized (UNSIGNED-BYTE 8) array. (Thanks to ralcantaraperez on github.) Fix CAST5 compilation on some versions of Lispworks. Fix an invalid LOOP form in the bignum math code. (Thanks to Juan Jose Garcia Ripoll.) Fix a problem that some (all?) versions of x86-64 CCL have with the 64-bit SHA variants. ** improvements The x86oid assembly SHA expand functions have been made significantly smaller and faster. ** new features An implementation of the scrypt key derivation function has been added. Please see the documentation for details. (Thanks to Chris Howey.) * Version 0.31, released 2012-07-01 ** bug fixes Fixed a problem with digest buffering introduced in Ironclad 0.29. (Thanks to Zach Beane for the bug report.) MD5 on some versions of Lispworks works correctly again; unfortunately this change required disabling the improved MD5 implementation added in Ironclad 0.30. (Thanks to Chhi'mèd Künzang for the bug report.) Some compiler warnings on Lispworks have been fixed. (Thanks to Chhi'mèd Künzang for the bug report.) The digest functions now really check their types instead of incorrectly relying on DECLARE to provide the necessary type checks. (Thanks to dbunner-de on Github for the bug report.) ** improvements Encryption and decryption with block ciphers and small numbers of blocks should be somewhat faster. Several small improvements have been made to the digest code which may make it slightly faster when hashing short blocks of data. The modular inverse code has been made significantly faster, which should improve performance of public-key algorithms. (Thanks to Robert Uhl.) Several digest tests should no longer fail on Clozure CL. There have been reports of tests taking inordinate amounts of time on various CCL versions on various platforms, however. (CCL 1.8, for instance, works fine on Linux/x86-64, but explodes on Windows.) ** new features An implementation of the Fortuna pseudo-random number generator has been added. Please see the documentation for details. (Thanks to Robert Uhl for the implementation.) * Version 0.30, released 2012-03-27 ** bug fixes Fixed a bug in COPY-DIGEST for SHA224 and SHA384. (Thanks to Robert Uhl for noticing.) ** improvements Added a Lispworks-specific MD5 implementation. (Thanks to Pierre R. Mai for the implementation and Klaus Harbo for integrating it into Ironclad.) Fixed bugs with *PRINT-CASE* and Allegro CL's modern mode. (Thanks to Robert Uhl and Hans Huebner.) Ironclad now uses nibbles for its internal word-reffing and -setting functions. This change should speed up most operations by a small amount on x86oid SBCL platforms. SHA-512/384 should be somewhat faster on x86-64 SBCL. The copy of rt.lisp included for testing has been updated to match the version commonly in use. (Thanks to Anton Vodonosov for pointing this out.) * Version 0.29, released 2011-11-17 ** bug fixes Fixed ENCRYPTED-MESSAGE-LENGTH (not a supported interface) for ECB and CBC modes. (Thanks to Ron Garrett.) The compiler macros for the high-level digest functions now cope with the user's setting of *PRINT-CASE*. (Thanks to Robert Uhl.) ** improvements Assembler versions of several core functions have been added for x86 and x86-64 SBCL. The functions include: - octet copy loops; - SHA1's core functions; - SHA256's core expand function. You need a recent SBCL to compile Ironclad now. ** new features Added PBKDF convenience functions. (Thanks to Vladimir Sedach.) * Version 0.28, released 2010-03-26 ** bug fixes Fixed errors on 32-bit big-endian CMUCL and SBCL. (Thanks to Raymond Toy.) Fixed an error with INTEGER-TO-OCTETS :BIG-ENDIAN NIL. (Thanks to Daniel Janus.) ** improvements The code has been tweaked to generate less code for platforms that do not support inlined 32-bit arithmetic. ** new features Trees hashes are now supported, including the most common variant, Tiger tree hashes. Please see the documentation for details. (Thanks to Fare Rideau.) * Version 0.27, released 2009-03-28 ** bug fixes Fixed several issues that came up with Allegro CL 8.1. (Thanks to Utz-Uwe Haus.) Fixed compilation issues when the user had a non-standard *PRINT-CASE*. (Thanks to Gustavo.) Fixed an issue with LispWorks's recent update for conformance with DEFSTRUCT's specification. (Thanks to John Fremlin.) ** improvements HMAC-DIGEST now supports placing the produced digest into a user-provided buffer. Please see the documentation for details. HMAC now supports digests with larger block sizes than 64 bytes (such as SHA2-512). HMAC should be somewhat more efficient when producing digests. REINITIALIZE-INSTANCE is now supported on HMAC objects. Please see the documentation for details. CLEAR-OUTPUT is now supported on digesting streams. ** new features The SHA-224, SHA2-384 and SHA2-512 digest functions have been added, with tests. Key derivation functions from PKCS #5 have been added. On Gray streams-supporting implementations, WRITE-SEQUENCE is supported on several stream classes, with more to come. * Version 0.26, released 2008-05-17 ** bug fixes RC6 now compiles without error on non-x86 SBCL. (Thanks to Kevin Reid.) ** incompatible changes PRODUCE-DIGEST now *modifies* the state of the digest object passed to it. If you want to preserve that state for later, you will have to explicitly call COPY-DIGEST. ** improvements Compiler macros were added to improve the performance of DIGEST-{SEQUENCE,STREAM,FILE}. (Thanks to Attila Lendvai for motivating this.) Digest performance should be improved due to using structures; this change should bring digest performance back in line with where it was circa version 0.22. * Version 0.25, released 2008-02-24 ** bug fixes CRC32 now works properly and agrees with other CRC32 implementations. (Thanks to Todd Sabin.) The testsuite is once again included. (Thanks to Peter Graves for pointing out the missing files.) ** improvements BYTE-ARRAY-TO-HEX-STRING and ASCII-STRING-TO-BYTE-ARRAY have been optimized and should perform better. (Thanks to Attila Lendvai for the optimizations.) A compiler macro was added to improve the performance of MAKE-DIGEST. MAKE-DIGEST should also be faster in cases where the compiler macro does not apply. (Thanks to Attila Lendvai for motivating this.) ** new features The null cipher has been added to ease implementation of some security protocols. It is a block cipher with a BLOCK-LENGTH of 8 bytes. * Version 0.24, released 2008-02-09 ** bug fixes A bogus DECLAIM in Whirlpool's implementation has been fixed. ** improvements The way Whirlpool's registers are represented was changed slightly; the new representation should be slightly more efficient and silences an error in OpenMCL and LispWorks. Due to the changes, it is recommended that you compile this version of Ironclad in a fresh Lisp instance. (Thanks to Chun Tian.) Lispworks support for octet streams has been added. OpenMCL support for octet streams has been tweaked and should actually work now. (Thanks to Chun Tian.) * Version 0.23, released 31-12-2007 ** bug fixes VERIFY-SIGNATURE for DSA signatures now respects the START and END keyword arguments. (Thanks to Ildar.) ** improvements More refactoring of the internals has been performed; Ironclad should be slightly smaller as a result. Digest finalization on most digest types should cons significantly less. ** new features REINITIALIZE-INSTANCE is now supported on digest objects. CLEAR-OUTPUT is now supported on octet output streams. A compiler macro was added to improve the performance of MAKE-CIPHER. The Whirlpool digest function has been added, with tests. (Thanks to Peter Gijsels.) DIGEST-FILE, DIGEST-STREAM, and UPDATE-DIGEST with a stream to update from now accept three new keyword arguments: :BUFFER to specify a temporary buffer into which the data from the file/stream should be read, and :START and :END to specify the extent of the buffer that should be used. DIGEST-FILE, DIGEST-STREAM, and DIGEST-SEQUENCE now also accept a digest object as their first argument in addition to a digest specifier. * Version 0.22, released 12-06-2007 ** bug fixes Fixed issues with octet streams and Allegro CL. (Thanks to "quasilists".) Fixed a bug in some type declarations that was causing XCL to (rightly) complain when compiling Ironclad. (Thanks to Peter Graves.) The rsa.lisp file previously advertised to be in the distribution is now actually present. (Thanks to oudeis.) ** new features Byte-wise CFB mode (:CFB8) encryption and decryption have been added. (Thanks to Robert J. Macomber for suggesting this might be necessary for interoperating with other crypto toolkits.) UPDATE-DIGEST has new methods that can update the digest from a stream. See the documentation for details. * Version 0.21, released 21-04-2007 ** bug fixes Rewrote internal key-checking logic to provide a better error message when a :KEY argument is not provided to MAKE-CIPHER. (Thanks to Mark Carter.) Fixed LIST calls that exceeded CALL-ARGUMENTS-LIMIT. (Thanks to piso on #lisp.) Fixed tests to use RTEST nickname rather than RT to avoid name conflicts for LispWorks users. (Thanks to Sven Van Caekenberghe.) Fixed the Twofish, Blowfish, CAST5, and RC6 ciphers to work properly in LispWorks. (Thanks to Sven Van Caekenberghe.) Fixed a problem with DEFINE-DIGEST-REGISTERS. (Thanks to Sven Van Caekenberghe.) Fixed a problem with CMUCL and octet-streams. (Thanks to Raymond Toy.) * Version 0.20.1, released 21-02-2007 ** bug fixes Fixed system definition to push onto *FEATURES* correctly in CMUCL. (Thanks to Raymond Toy.) Fixed several mismatches in the documentation between the arglists and the prose that described them. (Thanks to Zach Beane.) Fixed IRONCLAD-TESTS to include the 3des test vectors. (Thanks to Raymond Toy and fe[nl]ix on #lisp who reported this.) * Version 0.20, released 20-02-2007 ** bug fixes The "counting" part of CTR mode in SBCL has been fixed. A bug in SHA-1 and SHA-256's usage of LOOP has been fixed. ** incompatible changes The interface to MAKE-CIPHER has been redone. Please see the documentation for details. ** improvements Square, TEA, and XTEA now come with test vectors. CRC24, CRC32, and Adler32 now come with test vectors. The test suite has been significantly reworked. It is now somewhat faster to execute and the compilation time for the system IRONCLAD-TESTS has been significantly reduced. Documentation for the library has been written; see doc/ironclad.html. Corrections and suggestions for improvements are much appreciated. The internals of cipher definition and ENCRYPT/DECRYPT have been rewritten. The net result is that the footprint of Ironclad has been reduced by ~25% (x86 SBCL) due to fewer methods being defined for each cipher. Furthermore, adding new ciphers will add only a few methods, rather than the large number that were created before. ** new features PRODUCE-DIGEST and DIGEST-{STREAM,SEQUENCE,FILE} can optionally place the computed digest into a preallocated user-supplied buffer. Please see the documentation for these functions for details. (Thanks to Zach Beane for suggesting this feature.) RSA encryption routines have been added. These are very "raw" routines, undoubtedly in need of some polish. Support for CMACs (NIST 800-38B and RFC 4439) has been added. (Thanks to Koga Kazuo for an initial implementation.) * Version 0.13, released 03-05-2006 ** improvements Added a (require :gray-streams) for CMUCL. (Thanks to Raymond Toy for suggesting this.) SHA-1 should now work on older versions of CLISP. (>= 2.34 or so) Tiger is now supported on all Common Lisps, not just SBCL. ** new features The ARCFOUR stream cipher has been added, with tests. A new mode for ARCFOUR and similar stream ciphers, imaginatively named :STREAM, is used when creating an ARCFOUR cipher context with MAKE-CIPHER. (Thanks to Tim Daly Jr.) {EN,DE}CRYPT-IN-PLACE have been added to make the programmer's intent clearer and to provide shorter calls for common operations. Digesting streams, which compute a specified digest of data being written, are now available on all Lisps that support octet streams. The digest of the data written so far may be retrieved with PRODUCE-DIGEST. * Version 0.12, released 30-01-2006 ** bugfixes Fixed XTEA decryption. Fixed incorrect type declarations in the Adler32 digest. (Thanks to Thas on #lisp. Thanks to Xach for permission to borrow his code from Salza.) Fixed MAKE-OCTET-INPUT-STREAM to instantiate the right class. (Thanks to Eric Marsden.) ** new features The RC2 block cipher has been added, with tests. Octet streams are now supported on Allegro CL and CMUCL. A family of functions, UB{16,32,64}REF/{BE,LE}, has been added for referencing (UNSIGNED-BYTE {16,32,64}) values of the appropriate endianness from octet vectors. These functions are SETF-able. ** improvements Exported EXPT-MOD from the IRONCLAD package. * Version 0.11, released 10-11-2005 ** bugfixes Fixed tests HMAC.0 and HMAC.1 (which would have worked had they referred to the proper ASCII-STRING-TO-BYTE-ARRAY...). (Thanks to Raymond Toy.) Fixed CBC mode decryption to match CBC mode encryption. *blush* (Thanks to Travis Cross.) Sanity checks have been added to the test suite to make this sort of thing less likely to happen in the future. Fixed the initializer for CRC24; CRC24 now works properly. Fixed a hashing bug common to MD{2,4,5}, SHA-1, SHA-256, RIPEMD-128, RIPEMD-160, and Tiger when updating the digest state with an amount of data smaller than the space remaining in the internal buffer. Tests have been added to ensure this doesn't happen again. Fixed DIGEST-SEQUENCE on SBCL and CMUCL to respect the fill-pointer of a vector. (Thanks to Steve Smith.) ** new features A new generic function to inspect supported key lengths for ciphers has been added. By no small coincidence, it is named KEY-LENGTHS. Please see its documentation string for details. (Thanks to Travis Cross.) Counter mode (:CTR) encryption and decryption has been added. Octet streams, which are like string-streams, only for octet vectors, have been added. As of this release, they only work in SBCL and OpenMCL; if your favorite implementation is not supported, patches are welcome. Asymmetric encryption routines have been included in this release; only DSA (signing and verification) routines are included. Although test vectors are not (yet) included, this release of Ironclad was signed using routines from Ironclad. IMPORTANT: Please note that DSA signing of messages is on the *digest* of the message, not the message itself. Please also note that the DSA signing routine requires *random* numbers; it currently uses CL:RANDOM for this purpose, which is probably *NOT* secure enough for your needs. Please make any changes you deem necessary to the signing routine to accommodate your security level. Feedback is sought on the interface to the routines: - MAKE-PUBLIC-KEY - MAKE-PRIVATE-KEY - SIGN-MESSAGE - VERIFY-MESSAGE DEFGENERICs for ENCRYPT-MESSAGE and DECRYPT-MESSAGE have been included. No methods on them are currently defined. Methods for RSA keys and ElGamal keys will likely be forthcoming in a future release. Feedback is also requested for those functions as well. * Version 0.10, released 01-11-2005 ** bugfixes Exported several block cipher context class names that were previously unexported. Digesting files and streams now works properly on MCL and other Lisps that "mangle" stream-element-type. (Thanks to Hoan Ton-That.) ** new features Functions ASCII-STRING-TO-BYTE-ARRAY and BYTE-ARRAY-TO-HEX-STRING were moved from the IRONCLAD-TESTS package into Ironclad itself. These functions seem useful enough to have around at all times. Please see the docstrings for these functions for usage documentation. (Thanks to kire on #lisp for suggesting this.) ** improvements The memory footprint of Ironclad should be slightly reduced. MAKE-CIPHER throws real errors for unsupported ciphers (IRONCLAD:UNSUPPORTED-CIPHER) or modes (IRONCLAD:UNSUPPORTED-MODE), rather than NO-APPLICABLE-METHOD. * Version 0.9.1, released 13-09-2005 ** bugfixes Fixed problems related to non-ANSI use of SUBSEQ on circular lists. * Version 0.9, released 13-09-2005 ** bugfixes The TripleDES block cipher now passes all included test vectors. ** new features The RC6 block cipher has been added, with tests. The MISTY1 block cipher has been added, with tests. MISTY1 is unique among the current crop of ciphers supported by Ironclad, as an implementation that uses 16-bit arithmetic rather than 32-bit is straightforward. Therefore, MISTY1's performance should be better than, say, DES or Blowfish on Common Lisp implementations that do not support unboxed 32-bit arithmetic. ** performance improvements The performance of the SHA-1 and SHA-256 hash functions should be significantly improved. * Version 0.8, released 29-08-2005 ** bugfixes Added missing :LOAD-TOPLEVEL to EVAL-WHEN in blowfish.lisp; tests now pass on ACL 7.0, Linux/x86. (Thanks to chavatar on #lisp.) Fixed a case when digesting a file would throw a TYPE-ERROR. (Thanks to Hoan Ton-That.) Test vectors have been added for TripleDES, which immediately caught several bugs in the current implementation. However, many of the TripleDES tests do not pass in the current release. Using TripleDES until all tests pass is not recommended. Test vectors have been added for SHA-1, which immediately caught a bug in the production of digests. This bug has been fixed. ** new features The RC5 cipher has been added, with tests. The SHA-256 hash function has been added, with tests. * Version 0.7.2, released 24-08-2005 ** bugfixes Fixed calls to ROL32 to only use positive arguments. This change should result in more tests (particularly the Twofish tests) passing on non-SBCL implementations. (Thanks to Raymond Toy for tracking this one down.) Fixed some ACL 6.2 (trial) warnings related to multiply-defined functions, non-EVAL-WHEN'd DEFCONSTANT forms, unused variables, and an incomplete ASDF system definition. These fixes should also eliminate warnings in other implementations as well. (Thanks to chavatar on #lisp for motivating this.) * Version 0.7.1, released 23-08-2005 ** bugfixes UPDATE-HMAC now returns the HMAC object upon which it operated, rather than internal hashing state. (Thanks to rich_holygoat on #lisp.) Condition names are now exported from the IRONCLAD package. FINALIZE-ADLER32-STATE was fixed to properly store and return the computed digest. (Thanks to Raymond Toy.) The test suite now excludes Tiger on non-SBCL Common Lisps (since Tiger is currently only supported on SBCL). (Thanks to Raymond Toy.) * Version 0.7, released 11-08-2005 ** incompatible changes Support for SBCL versions older than 0.9.0 has been removed. ** bugfixes The RIPEMD family of hash functions now passes all included test vectors. The MD4 hash function now passes all included test vectors. The CAST5 block cipher now passes all included test vectors. When appropriate, ARRAY-DIMENSION-LIMIT is now used to specify types instead of ARRAY-TOTAL-SIZE-LIMIT. A bug related to an argument-passing mismatch between the low-level hashing routines and their high-level counterparts has been fixed. ** new features TripleDES has been added. Real conditions (subclasses of IRONCLAD:IRONCLAD-ERROR) are now signaled in several exceptional situations. *** introspection changes New generic functions DIGEST-LENGTH and BLOCK-LENGTH have been added. Please see the documentation strings for these generic functions for details. * Version 0.6, released 21-02-2005 ** bugfixes Due to the addition of a real, functioning test suite, many bugs have been fixed, including an embarassing one involving decryption. While not all of the provided digest functions and ciphers pass the test suite yet, the number of fixes brought about by adding the test suite called for a new release. The AES, Twofish, IDEA, DES, and Blowfish implementations pass the test suite along with the MD5, SHA-1 and Tiger hash function implementations. ** new features The checksums Adler32, CRC24, and CRC32 have been added. The IDEA and Twofish ciphers have been added. New digest interfaces have been added. Please check the documentation strings for MAKE-DIGEST, COPY-DIGEST, UPDATE-DIGEST, and PRODUCE-DIGEST for details. Support for HMACs has been added. ** optimizations FETCH-UB32 and STORE-UB32 are now coded inline, which should eliminate bignum consing in some implementations. Better type declarations have been added to make the extraction of word-sized data from (UNSIGNED-BYTE 32) vectors less expensive. The Blowfish implementation has been optimized and should cons less. The AES implementation has been optimized and should be at least 2x faster. * Version 0.5, released 05-01-2005 ** bugfixes The Square cipher was severly broken in previous releases. This oversight has been remedied. Other ciphers were broken in similar ways (e.g. argument ordering problems) and the function definitions for the cipher operation modes were broken as well. These problems have been fixed. ** incompatible changes Strings are no longer "digestable"--you must convert the string to a byte vector before digesting it. Hex strings are no longer permitted as keys for ciphers. ** introspection changes Added functions {DIGEST,CIPHER,MODE}-SUPPORTED-P and LIST-ALL-{DIGEST,CIPHER,MODE}S so applications can determine on the fly what algorithms are supported by the package. ** test framework added Test vectors from official specifications have been added to the package and ASDF definitions for a test framework have been added as well. Note that the testing suite is not yet fully operational. :) * Version 0.4, released 27-11-2004 Cipher keys can now be specified as hexadecimal strings or as byte vectors. Various little cleanups were made. * Version 0.3, released 26-11-2004 initial release ironclad-0.57/README.org000066400000000000000000002204741420372057600147250ustar00rootroot00000000000000#+TITLE: Ironclad #+AUTHOR: The Ironclad developers #+DATE: #+EMAIL: #+LANGUAGE: en #+OPTIONS: num:nil toc:nil html-style:nil html-postamble:nil html-scripts:nil #+HTML_DOCTYPE: html5 #+HTML_HEAD: #+ATTR_HTML: :style width: 0; height: 0; padding: 0; margin: 0; border: 0; overflow: hidden; [[https://github.com/sharplispers/ironclad/workflows/CI/badge.svg?branch=master][file:https://github.com/sharplispers/ironclad/workflows/CI/badge.svg?branch=master]] Ironclad is a cryptography library written entirely in Common Lisp. It includes support for several popular [[#ciphers][ciphers]], [[#digests][digests]], [[#message-authentication-codes][MACs]] and [[#public-key-cryptography][public key cryptography]] algorithms. For several implementations that support Gray streams, support is included for convenient [[#gray-streams][stream wrappers]]. Most of the algorithms were written with efficiency for specific Common Lisp implementations in mind, although portable code is provided as an alternative in nearly all instances. The framework should be flexible enough to accommodate implementation-specific optimizations when possible. Test vectors for many of the algorithms are included to provide a level of confidence in the correctness of the implementations. #+TOC: headlines 1 * Warnings :PROPERTIES: :CUSTOM_ID: warning :END: *Ironclad should not be considered safe against side channel attacks.* Some algorithms can be safe against side channel attacks on some architectures using some Common Lisp implementations, but in the general case it can't be guaranteed. This is due to the fact that integers and arithmetic functions of Common Lisp implementations are usually not safe against side channel attacks. *Ironclad's digest, MAC and cipher objects should not be considered thread safe.* Creating a digest, a MAC or a cipher object and using it in several threads at the same time can lead to an undefined result. If you need to do that, you must put locks in your application where necessary. *Ironclad's pseudo random number generation should only be considered thread safe with bordeaux-threads.* If you have a multi-threaded application in which you want to use functions requiring some random numbers (key derivation, key generation, public key encryption, signature, etc.) in several threads, each of these threads must have its own PRNG, or they might generate the same "random" numbers. If the threads are created using the *bordeaux-threads* library (or by a library using *bordeaux-threads*, like *lparallel*), this is done automatically. However, if you are using the threading functions of your Common Lisp implementation directly, you have to bind the ~*prng*~ special variable to a new PRNG in each thread. There is an example showing how it can be done in the section about [[make-prng][make-prng]]. * Installation :PROPERTIES: :CUSTOM_ID: installation :END: The current version of Ironclad is 0.57. It can be downloaded at [[https://github.com/sharplispers/ironclad/archive/v0.57.tar.gz]]. If you are feeling adventurous, you can download a bleeding-edge version at [[https://github.com/sharplispers/ironclad]]. It comes with an ASDF system definition, so ~(asdf:load-system "ironclad")~ should be all that you need to get started. The testsuite can be run by substituting ~asdf:test-system~ for ~asdf:load-system~ in the form above. If you are using [[https://www.quicklisp.org][Quicklisp]] to manage your libraries, just use ~(ql:quickload "ironclad")~. When Ironclad is loaded, its functions are in the ~ironclad~ package (e.g. ~(ironclad:make-cipher ...)~). If you prefer, you can also use the ~crypto~ nickname (e.g. ~(crypto:make-cipher ...)~). Ironclad has been tested in the following implementations: - SBCL x86/linux, x86-64/linux (primary development platforms) - SBCL x86-64/solaris, x86/darwin - CMUCL x86/linux - ABCL with Sun's 1.5.0 JVM - Lispworks 5.0.1 x86/linux - Lispworks 5.1.2 x86-64/darwin x86/windows - Allegro 8.0 x86/linux - Allegro 8.1 x86/linux, x86-64/linux, sparc/solaris - CLISP 2.41 x86/linux, x86/cygwin - Clozure Common Lisp 1.11 x86-64/Linux - Clozure Common Lisp 1.10 x86-64/darwin - ECL 16.1.3 x86-64/linux All included tests should pass successfully. If you use a platform not listed above, please send your platform information so that it can be added to the above list. If the tests do not all pass, you have found a bug; please report it. By default, Ironclad uses some implementation dependent low-level code to make some functions run much faster (currently, some assembly for SBCL and CCL, some C code for ECL). If for some reason you want to disable these optimisations and use the generic Lisp code, it can be achieved by commenting out the ~(pushnew :ironclad-assembly *features*)~ line in the /src/package.lisp/ file. * License :PROPERTIES: :CUSTOM_ID: license :END: Ironclad is released under a MIT-like license; you can do pretty much anything you want to with the code except claim that you wrote it. * Ciphers :PROPERTIES: :CUSTOM_ID: ciphers :END: #+NAME: make-cipher #+BEGIN_SRC lisp (make-cipher name &key key mode initialization-vector padding tweak) => cipher #+END_SRC Return a cipher object suitable for use for both encryption and decryption. /name/ denotes the encryption algorithm to use. [[list-all-ciphers][list-all-ciphers]] will tell you the names of all supported ciphers. They are: - 3des - aes - arcfour (rc4) - aria - blowfish - camellia - cast5 - chacha - chacha/12 - chacha/8 - des - idea - kalyna128 - kalyna256 - kalyna512 - kuznyechik - misty1 - rc2 - rc5 - rc6 - salsa20 - salsa20/12 - salsa20/8 - seed - serpent - sm4 - sosemanuk - square - tea - threefish1024 - threefish256 - threefish512 - twofish - xchacha - xchacha/12 - xchacha/8 - xor (not a real cipher, use only for testing) - xsalsa20 - xsalsa20/12 - xsalsa20/8 - xtea /name/ can be a symbol in the ~keyword~ package or in the ~ironclad~ package; ~:aes~ for AES, ~ironclad:arcfour~ for RC4, and so forth. /mode/ describes the mode of operation for the cipher. Stream ciphers such as Arcfour can operate in only one mode, ~stream~. Block ciphers such as AES and DES can operate in several different modes: - ecb - cbc - ofb - cfb (note that Ironclad's CFB mode is /n/-bit CFB, where /n/ is the [[block-length][block-length]] of the cipher) - cfb8 (this seems to be the mode other crypto packages call CFB) - ctr /mode/ should be a symbol in the ~keyword~ or ~ironclad~ packages; ~:stream~, ~ironclad:ofb~, and so forth. An error will be signaled if /mode/ is not appropriate for the cipher /name/. /initialization-vector/ (IV) should be supplied only if /mode/ requires one. /initialization-vector/ should be a ~(simple-array (unsigned-byte 8) (*))~. The supplied IV should be the same length as the [[block-length][block-length]] of /name/. The Chacha and Salsa20 stream ciphers also use an initialization vector (nonce). It should be 8 bytes long for Chacha and Salsa20, and 24 bytes long for XChacha and XSalsa20. /key/ is, of course, the key for the cipher. /key/ should be a ~(simple-array (unsigned-byte 8) (*))~. If /padding/ is supplied, the specified padding method will be used by [[encrypt][encrypt]] and [[decrypt][decrypt]] to handle short blocks when the ~:handle-final-block~ argument is supplied. /padding/ will only be used if the mode is ECB or CBC. The possible values for /padding/ are ~:pkcs7~, ~:ansi-x923~ and ~:iso-7816-4~. If the cipher can use a tweak (e.g. threefish), it can be specified with the /tweak/ key parameter. #+NAME: encrypt #+BEGIN_SRC lisp (encrypt cipher plaintext ciphertext &key plaintext-start plaintext-end ciphertext-start handle-final-block) => n-bytes-consumed, n-bytes-produced #+END_SRC Encrypts data according to /cipher/ from /plaintext/ starting at /plaintext-start/ and continuing until /plaintext-end/. The encrypted data is placed in /ciphertext/ starting at /ciphertext-start/. #+NAME: decrypt #+BEGIN_SRC lisp (decrypt cipher ciphertext plaintext &key ciphertext-start ciphertext-end plaintext-start handle-final-block) => n-bytes-consumed, n-bytes-produced #+END_SRC Decrypts data according to /cipher/ from /ciphertext/ starting at /ciphertext-start/ and continuing until /ciphertext-end/. The decrypted data is placed in /plaintext/ starting at /plaintext-start/. #+NAME: encrypt-in-place #+BEGIN_SRC lisp (encrypt-in-place cipher text &key start end) => n-bytes-consumed, n-bytes-produced #+END_SRC #+NAME: decrypt-in-place #+BEGIN_SRC lisp (decrypt-in-place cipher text &key start end) => n-bytes-consumed, n-bytes-produced #+END_SRC Encrypts or decrypts data in /text/ between /start/ and /end/ "in-place" according to /cipher/. These functions are shorthand for: #+BEGIN_EXAMPLE (encrypt cipher text text :plaintext-start start :plaintext-end end :ciphertext-start start) (decrypt cipher text text :ciphertext-start start :ciphertext-end end :plaintext-start start) #+END_EXAMPLE _Note:_ [[encrypt-in-place][encrypt-in-place]] and [[decrypt-in-place][decrypt-in-place]] do not support a /handle-final-block/ parameter as [[encrypt][encrypt]] and [[decrypt][decrypt]] do. If you need the functionality that /handle-final-block/ provides, then you need to use [[encrypt][encrypt]] and [[decrypt][decrypt]]. _Note:_ /n-bytes-consumed/ and /n-bytes-produced/ may not always be equal to the length of the data specified in the call to [[encrypt-in-place][encrypt-in-place]] or [[decrypt-in-place][decrypt-in-place]]. This subtlely is also present in [[encrypt][encrypt]] or [[decrypt][decrypt]]. #+BEGIN_SRC lisp (encrypt-message cipher message &key start end &allow-other-keys) => encrypted-message #+END_SRC Return the /message/ between /start/ and /end/ encrypted with the /cipher/; the class of /cipher/ determines the algorithm used to encrypt the message. #+BEGIN_SRC lisp (decrypt-message cipher message &key start end &allow-other-keys) => decrypted-message #+END_SRC Return the /message/ between /start/ and /end/ decrypted by the /cipher/; the class of /cipher/ determines the algorithm used to decrypt the message. ** Inquiry functions #+NAME: list-all-ciphers #+BEGIN_SRC lisp (list-all-ciphers) => list #+END_SRC Returns a list of cipher-names that may be validly passed to [[make-cipher][make-cipher]]. #+NAME: cipher-supported-p #+BEGIN_SRC lisp (cipher-supported-p name) => boolean #+END_SRC Returns ~t~ if /name/ would be in the list returned by [[list-all-ciphers][list-all-ciphers]], ~nil~ otherwise. #+NAME: key-lengths #+BEGIN_SRC lisp (key-lengths cipher) => list #+END_SRC Return a list of valid key lengths for /cipher/. #+NAME: block-length #+BEGIN_SRC lisp (block-length cipher) => number #+END_SRC Return the number of octets /cipher/ processes at a time. This function always returns 1 for stream ciphers. ** Key stream position Block ciphers in CTR mode and some stream ciphers have the ability to change the current position within the key stream in constant time instead of having to consume all the bytes until the desired position is reached. #+NAME: keystream-position #+BEGIN_SRC lisp (keystream-position cipher &optional position) => number or boolean #+END_SRC Return or change the current /position/ within the key stream of a /cipher/. When /position/ is not supplied, [[keystream-position][keystream-position]] returns the current position in the key stream, or /nil/ if it can't be determined. When /position/ is supplied, the key stream position of the /cipher/ is set to that /position/ if possible. [[keystream-position][keystream-position]] returns /t/ if the repositioning is performed successfully, or /nil/ otherwise. [[keystream-position][keystream-position]] can be used with the following ciphers: - all the block ciphers (aes, twofish, etc.) in CTR mode - chacha - chacha/12 - chacha/8 - salsa20 - salsa20/12 - salsa20/8 - xchacha - xchacha/12 - xchacha/8 - xsalsa20 - xsalsa20/12 - xsalsa20/8 * Digests :PROPERTIES: :CUSTOM_ID: digests :END: Digest functions, also known as hash functions, produce fixed-length output (a /digest/ or /hash/) from a variable-length message. The simplest example of a digest function is one that adds up all the bytes in the message modulo 256. This digest function fails one test of a cryptographically secure hash function: it must be difficult to find a message with a given digest. It also fails the other test: it must be difficult to find two messages with the same digest. Ironclad provides several cryptographically secure digest functions and several non-cryptographically secure digest functions. _Note:_ In the functions below, messages or parts thereof are provided as octet vectors; Ironclad has no facilities for producing digests of strings. If you need to obtain the digest of a string, then you need to figure out how to convert it to an octet vector first. This is a deliberate design decision. Characters are not equivalent to bytes. See your local Unicode guru for more details. #+NAME: make-digest #+BEGIN_SRC lisp (make-digest digest-name &rest keys &key &allow-other-keys) => digester #+END_SRC Returns a digest object. /digest-name/ is a keyword naming the algorithm you wish /digester/ to use. The supported digest names can be found by calling [[list-all-digests][list-all-digests]]. They are: - adler32 - blake2 - blake2/160 - blake2/256 - blake2/384 - blake2s - blake2s/128 - blake2s/160 - blake2s/224 - crc24 - crc32 - groestl - groestl/224 - groestl/256 - groestl/384 - jh - jh/224 - jh/256 - jh/384 - keccak - keccak/224 - keccak/256 - keccak/384 - kupyna - kupyna/256 - md2 - md4 - md5 - ripemd-128 - ripemd-160 - sha1 - sha224 - sha256 - sha3 - sha3/224 - sha3/256 - sha3/384 - sha384 - sha512 - shake128 - shake256 - skein1024 - skein1024/384 - skein1024/512 - skein256 - skein256/128 - skein256/160 - skein256/224 - skein512 - skein512/128 - skein512/160 - skein512/224 - skein512/256 - skein512/384 - sm3 - streebog - streebog/256 - tiger - tree-hash - whirlpool Like for [[make-cipher][make-cipher]], /digest-name/ should be a symbol in the ~keyword~ or ~ironclad~ packages. Some algorithms (e.g. shake128 and shake256) can produce digests of any size. The size of the digest in bytes can be specified with the /output-length/ key parameter: #+BEGIN_EXAMPLE (make-digest :shake256 :output-length 123) #+END_EXAMPLE #+NAME: update-digest #+BEGIN_SRC lisp (update-digest digester thing &key &allow-other-keys) => (values) #+END_SRC Updates the internal state of /digester/ with the contents of /thing/. The exact method is determined by the type of /thing/. There are several methods defined on this generic function that take a particular digester and a ~(simple-array (unsigned-byte 8) (*))~ as well as the usual /start/ and /end/ keyword arguments. These methods update the state of /digester/ with the subsequence of the array denoted by /start/ and /end/. They are not listed here because there's one method for every type of digest that Ironclad provides, and listing them would get very tedious for no benefit. An example should suffice. #+BEGIN_EXAMPLE (let ((digester (ironclad:make-digest :sha1)) (array (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0))) ;; Update with 16 zeroes. (ironclad:update-digest digester array) ;; Update with 8 ones. (fill array 1 :start 2 :end 10) (ironclad:update-digest digester array :start 2 :end 10)) #+END_EXAMPLE #+BEGIN_SRC lisp (update-digest digester (stream stream) &key buffer start end &allow-other-keys) => digester #+END_SRC Update the internal state of /digester/ with the contents of /stream/, which must respond to ~read-byte~ or ~read-sequence~ with a ~(simple-array (unsigned-byte 8) (*))~ and return /digester/. It differs from [[digest-stream][digest-stream]], below, in that you may need to digest data before or after the contents of /stream/ (this happens, for instance, when signing the contents of some file). #+NAME: produce-digest #+BEGIN_SRC lisp (produce-digest digester &key digest digest-start) => digest #+END_SRC Return the digest of the data processed by /digester/ so far. If /digest/ is provided, the computed digest will be placed into /digest/ starting at /digest-start/. /digest/ must be a ~(simple-array (unsigned-byte 8) (*))~. An [[insufficient-buffer-space][insufficient-buffer-space]] error will be signaled if there is insufficient space in /digest/. ** High-level convenience functions Several high-level convenience functions that encapsulate common sequences of [[make-digest][make-digest]], [[update-digest][update-digest]] and [[produce-digest][produce-digest]] are provided by Ironclad as well. They come in two flavors: the first takes a digest name as would be provided to [[make-digest][make-digest]]. The second way to call these functions is to provide an actual digest object as the first argument. So one can say: #+BEGIN_EXAMPLE (ironclad:digest-sequence :md5 *buffer*) #+END_EXAMPLE or, equivalently: #+BEGIN_EXAMPLE (let ((digester (ironclad:make-digest :md5))) (ironclad:digest-sequence digester *buffer*)) #+END_EXAMPLE The second form comes in handy if you plan on [[*Miscellaneous][reusing the digest object]]. #+NAME: digest-sequence #+BEGIN_SRC lisp (digest-sequence digest-spec sequence &rest args &key start end digest digest-start) => digest #+END_SRC Returns the digest of the subsequence of /sequence/ bounded by /start/ and /end/, according to /digest-name/. /sequence/ must be a ~(vector (unsigned-byte 8))~. /digest/ and /digest-start/ are as in [[produce-digest][produce-digest]]. #+NAME: digest-stream #+BEGIN_SRC lisp (digest-stream digest-spec stream &rest args &key buffer start end digest digest-start) => digest #+END_SRC Returns the digest of the contents of the stream specified by /stream/. ~read-byte~ must be a legal operation on /stream/ and return an ~(unsigned-byte 8)~. In a similar fashion, ~read-sequence~ on /stream/ must support reading into a ~(simple-array (unsigned-byte 8) (*))~. /digest/ and /digest-start/ are as in [[produce-digest][produce-digest]]. If /buffer/ is provided, it must be a ~(simple-array (unsigned-byte 8) (*))~; the portion of /buffer/ between /start/ and /end/ will be used to read the data from the stream. #+NAME: digest-file #+BEGIN_SRC lisp (digest-file digest-spec pathname &rest args &key buffer start end digest digest-start) => digest #+END_SRC Returns the digest of the contents of the file named by /pathname/. /digest/ and /digest-start/ are as in [[produce-digest][produce-digest]]. If /buffer/ is provided, it must be a ~(simple-array (unsigned-byte 8) (*))~; the portion of /buffer/ between /start/ and /end/ will be used to read the data from the stream. ** Inquiry functions #+NAME: list-all-digests #+BEGIN_SRC lisp (list-all-digests) => list #+END_SRC Returns a list whose elements may be validly passed to [[make-digest][make-digest]]. #+NAME: digest-supported-p #+BEGIN_SRC lisp (digest-supported-p name) => boolean #+END_SRC Returns ~t~ if /name/ would be in the list returned by [[list-all-digests][list-all-digests]], ~nil~ otherwise. #+NAME: digest-length #+BEGIN_SRC lisp (digest-length digest) => number #+END_SRC Returns the length of the digest computed by /digest/, which may be a digest-name or a digest instance. ** Miscellaneous Ironclad digests are CLOS objects; the interesting thing about this for most purposes is that functions like ~reinitialize-instance~ are supported. This means one can write a fairly efficient clone of the =md5sum= program like so: #+BEGIN_EXAMPLE (defun digest-sum-files (digest-name &rest files) (unless files (error "no files given to digest")) (loop with buffer = (make-array 8192 :element-type '(unsigned-byte 8)) with digest = (make-array (ironclad:digest-length digest-name) :element-type '(unsigned-byte 8)) for file in files for digester = (ironclad:make-digest digest-name) then (reinitialize-instance digester) do (ironclad:digest-file digester file :buffer buffer :digest digest) (format t "~A ~A~%" (file-namestring file) (ironclad:byte-array-to-hex-string digest)))) #+END_EXAMPLE ** Tree hashes Ironclad supports tree hashes, as described in [[http://web.archive.org/web/20080316033726/http://www.open-content.net/specs/draft-jchapweske-thex-02.html][Tree Hash EXchange format]]. You create tree hashes as if you were creating a digest: #+BEGIN_EXAMPLE (ironclad:make-digest :tree-hash) #+END_EXAMPLE By default, this creates a tree hash that uses the Tiger digest algorithm internally and a segment size of 1024. Since using the Tiger digest algorithm is so common, a convenience function that makes your intent obvious has also been provided: #+BEGIN_EXAMPLE (ironclad:make-tiger-tree-hash) #+END_EXAMPLE You may indicate that you wish to use a different algorithm than Tiger: #+BEGIN_EXAMPLE (ironclad:make-digest '(:treehash :digest :sha256)) #+END_EXAMPLE Or you might wish to use a different segment size: #+BEGIN_EXAMPLE (ironclad:make-digest '(:tree-hash :block-length 16384)) #+END_EXAMPLE There is currently no interface for obtaining the intermediate hashes computed while computing the final tree hash. * Message authentication codes :PROPERTIES: :CUSTOM_ID: message-authentication-codes :END: A message authentication code is a cryptographic function of some data and a user-specified key. Only a person knowing the key can recompute the MAC for the given message. A MAC is useful where maintaining data integrity is required, but the secrecy of the data is not paramount. Ironclad provides different kinds of MACs: - HMAC, specified in [[http://www.ietf.org/rfc/rfc2109.txt][RFC 2104]] - CMAC, specified in [[http://www.ietf.org/rfc/rfc4493.txt][RFC 4493]] and NIST document 800-38B - GMAC, specified in NIST document 800-38D - Blake2 and Blake2s MAC - Poly1305 - SipHash - Skein MAC #+NAME: make-mac #+BEGIN_SRC lisp (make-mac mac-name key &rest args) => mac #+END_SRC Return a MAC object initialized with a secret /key/. /mac-name/ is a keyword naming the algorithm you wish /mac/ to use. The supported MACs can be found by calling [[list-all-macs][list-all-macs]]. They are: - blake2-mac - blake2s-mac - cmac - gmac - hmac - poly1305 - siphash - skein-mac Like for [[make-digest][make-digest]], /mac-name/ should be a symbol in the ~keyword~ or ~ironclad~ packages. Some MACs take extra arguments that can be specified in /args/. #+BEGIN_EXAMPLE (make-mac :blake2-mac key &key digest-length) (make-mac :blake2s-mac key &key digest-length) (make-mac :cmac key cipher-name) (make-mac :gmac key cipher-name initialization-vector) (make-mac :hmac key digest-name) (make-mac :poly1305 key) (make-mac :siphash key &key compression-rounds finalization-rounds digest-length) (make-mac :skein-mac key &key block-length digest-length) #+END_EXAMPLE When making a Blake2 MAC, the length of the /key/ passed to [[make-mac][make-mac]] must be 64 bytes. When making a Blake2s MAC, the length of the /key/ passed to [[make-mac][make-mac]] must be 32 bytes. When making a CMAC, /cipher-name/ must have a [[block-length][block-length]] of either 8, 16, 32, 64 or 128; this restriction is satisfied by many ciphers in Ironclad with the notable exception of stream ciphers. /key/ must be an acceptable key for /cipher-name/. When making a GMAC, /cipher-name/ must have a [[block-length][block-length]] of 16. /key/ must be an acceptable key for /cipher-name/. When making a Poly1305 MAC, the length of the /key/ passed to [[make-mac][make-mac]] must be 32 bytes. When making a SipHash MAC, the length of the /key/ passed to [[make-mac][make-mac]] must be 16 bytes. /digest-length/ is 8 by default, but it can also be set to 16. By default, /compression-rounds/ is 2 and /finalization-rounds/ is 4. When making a Skein MAC, /block-length/ can be 32 (to use the Skein256 hash function internally), 64 (to use Skein512) or 128 (to use Skein1024). /digest-length/ can be any length you want the computed digest to be. By default, /block-length/ is 64 and /digest-length/ is 64. MAC objects support ~reinitialize-instance~: #+BEGIN_SRC lisp (reinitialize-instance mac &rest initargs &key key &allow-other-keys) => mac #+END_SRC The /:key/ argument is the secret key, as provided to [[make-mac][make-mac]]. #+NAME: update-mac #+BEGIN_SRC lisp (update-mac mac thing &key &allow-other-keys) => (values) #+END_SRC Updates the internal state of /mac/ with the contents of /thing/. The exact method is determined by the type of /thing/. There are several methods defined on this generic function that take a particular MAC and a ~(simple-array (unsigned-byte 8) (*))~ as well as the usual /start/ and /end/ keyword arguments. These methods update the state of /mac/ with the subsequence of the array denoted by /start/ and /end/. They are not listed here because there's one method for every type of MAC that Ironclad provides, and listing them would get very tedious for no benefit. An example should suffice. #+BEGIN_EXAMPLE (let* ((key (random-data 32)) (mac (ironclad:make-mac :hmac key :sha256)) (array (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0))) ;; Update with 16 zeroes. (ironclad:update-mac mac array) ;; Update with 8 ones. (fill array 1 :start 2 :end 10) (ironclad:update-mac mac array :start 2 :end 10)) #+END_EXAMPLE #+NAME: produce-mac #+BEGIN_SRC lisp (produce-mac mac &key digest digest-start) => digest #+END_SRC Return the digest of the data processed by /mac/ so far. The internal state of /mac/ is not modified; this feature makes it possible to compute a "rolling MAC" of a document. If /digest/ is provided, the computed digest will be placed into /digest/ starting at /digest-start/. /digest/ must be a ~(simple-array (unsigned-byte 8) (*))~. An [[insufficient-buffer-space][insufficient-buffer-space]] error will be signaled if there is insufficient space in /digest/. The length of the digest returned by [[produce-mac][produce-mac]] is determined by the kind of MAC and the extra arguments passed to [[make-mac][make-mac]]: - blake2-mac: from 1 to 64 bytes (64 by default) - blake2s-mac: from 1 to 32 bytes (32 by default) - cmac: [[block-length][block-length]] of the /cipher-name/ passed to [[make-mac][make-mac]] - gmac: 16 bytes - hmac: [[digest-length][digest-length]] of the /digest-name/ passed to [[make-mac][make-mac]] - poly1305: 16 bytes - siphash: /digest-length/ passed to [[make-mac][make-mac]] (8 by default) - skein-mac: /digest-length/ passed to [[make-mac][make-mac]] (64 by default) ** Inquiry functions #+NAME: list-all-macs #+BEGIN_SRC lisp (list-all-macs) => list #+END_SRC Returns a list whose elements may be validly passed to [[make-mac][make-mac]]. #+NAME: mac-supported-p #+BEGIN_SRC lisp (mac-supported-p name) => boolean #+END_SRC Returns ~t~ if /name/ would be in the list returned by [[list-all-macs][list-all-macs]], ~nil~ otherwise. * Authenticated encryption :PROPERTIES: :CUSTOM_ID: authenticated-encryption :END: #+NAME: make-authenticated-encryption-mode #+BEGIN_SRC lisp (make-authenticated-encryption-mode name &rest args) => mode #+END_SRC Return an authenticated encryption object suitable for use for both encryption and decryption. /name/ denotes the mode to use. [[list-all-authenticated-encryption-modes][list-all-authenticated-encryption-modes]] will tell you the names of all the supported modes. They are: - eax (Encrypt then authenticate then translate) - etm (Encrypt then MAC) - gcm (Galois counter mode) /name/ can be a symbol in the ~keyword~ or ~ironclad~ packages. /args/ depends on the chosen authenticated encryption mode. #+BEGIN_EXAMPLE (make-authenticated-encryption-mode :eax &key tag cipher-name key initialization-vector) (make-authenticated-encryption-mode :etm &key tag cipher mac) (make-authenticated-encryption-mode :gcm &key tag cipher-name key initialization-vector) #+END_EXAMPLE If /tag/ is specified, it will be used at the end of decryption (when the /handle-final-block/ flag is ~t~) to check the authenticity of the data. A ~bad-authentication-tag~ error will be signaled if the data is not authentic. If you don't specify it, you will have to call [[produce-tag][produce-tag]] after decryption and check that the tags match (e.g. using [[constant-time-equal][constant-time-equal]]). When using EAX, /key/ must be a suitable key for the chosen /cipher-name/. When using ETM, /cipher/ must be a cipher object created by [[make-cipher][make-cipher]]. /mac/ must be a mac object created by [[make-mac][make-mac]]. When using GCM, /cipher-name/ must have a [[block-length][block-length]] of 16 bytes. /key/ must be a suitable key for the chosen cipher. #+NAME: process-associated-data #+BEGIN_SRC lisp (process-associated-data mode data &key start end) => (values) #+END_SRC Update the internal state of /mode/ with the contents of /data/ between /start/ and /end/ so that they are taken into consideration in the authentication tag. An authenticated encryption object can be used with the [[encrypt][encrypt]], [[decrypt][decrypt]], [[encrypt-message][encrypt-message]] and [[decrypt-message][decrypt-message]] functions. #+BEGIN_EXAMPLE (encrypt mode plaintext ciphertext &key plaintext-start plaintext-end ciphertext-start handle-final-block) (decrypt mode ciphertext plaintext &key ciphertext-start ciphertext-end plaintext-start handle-final-block) (encrypt-message mode message &key start end associated-data associated-data-start associated-data-end) (decrypt-message mode message &key start end associated-data associated-data-start associated-data-end) #+END_EXAMPLE #+NAME: produce-tag #+BEGIN_SRC lisp (produce-tag mode &key tag tag-start) => tag #+END_SRC Return the authentication tag of the data processed by /mode/ so far. If /tag/ is provided, the computed tag will be placed into /tag/ starting at /tag-start/. /tag/ must be a ~(simple-array (unsigned-byte 8) (*))~. An [[insufficient-buffer-space][insufficient-buffer-space]] error will be signaled if there is insufficient space in /tag/. ** Inquiry functions #+NAME: list-all-authenticated-encryption-modes #+BEGIN_SRC lisp (list-all-authenticated-encryption-modes) => list #+END_SRC Returns a list whose elements may be validly passed to [[make-authenticated-encryption-mode][make-authenticated-encryption-mode]]. #+NAME: authenticated-encryption-mode-supported-p #+BEGIN_SRC lisp (authenticated-encryption-mode-supported-p name) => boolean #+END_SRC Returns ~t~ if /name/ would be in the list returned by [[list-all-authenticated-encryption-modes][list-all-authenticated-encryption-modes]] ~nil~ otherwise. * Key derivation functions :PROPERTIES: :CUSTOM_ID: key-derivation-functions :END: Ironclad comes with a few key derivation functions: - Argon2 (only Argon2d and Argon2i without parallelism are implemented) - Bcrypt - Bcrypt-pbkdf - PBKDF1 - PBKDF2 - Scrypt - HMAC #+NAME: derive-key #+BEGIN_SRC lisp (derive-key kdf passphrase salt iteration-count key-length) => digest #+END_SRC Given a key derivation function object (produced by [[make-kdf][make-kdf]]), a password and salt (both must be of type ~(simple-array (unsigned-byte 8) (*))~), and number of iterations, returns the password digest as a byte array of length /key-length/. For bcrypt, the /salt/ must be 16 bytes long, the /iteration-count/ must be a power of 2 between 2^4 and 2^31, and the /key-length/ must be 24. Scrypt and HMAC ignore the /iteration-count/ parameter. For bcrypt-pbkdf, the /key-length/ must be between 1 and 1024. #+NAME: make-kdf #+BEGIN_SRC lisp (make-kdf kind &key digest n r p block-count additional-key additional-data) => kdf #+END_SRC Returns a key derivation function instance. /kind/ denotes the key derivation function to use. They are: - argon2d - argon2i - bcrypt - bcrypt-pbkdf - pbkdf1 - pbkdf2 - scrypt-kdf - hmac-kdf /kind/ can be a symbol in the ~keyword~ or ~ironclad~ packages. The Argon2 key derivations use the /block-count/, /additional-key/ and /additional-data/ parameters (/block-count/ is the number of 1 KiB memory blocks used by the function and it must be at least 8, /additional-key/ and /additional-data/ are optional). The PBKDF algorithms use /digest/. The Scrypt key derivation uses cost parameters /N/, /r/ and /p/ (/N/ is a CPU cost parameter that must be a power of 2, /r/ and /p/ are memory cost parameters that must be defined such that /r/ * /p/ <= 2^30). The default Scrypt parameters are /N/ = 4096, /r/ = 8, and /p/ = 2. Please note that depending on the values of /N/ and /r/, [[derive-key][derive-key]] may not be able to allocate sufficient space for its temporary arrays. The HMAC-KDF algorithm uses the /digest/ parameter to precise what hash function is used. It also optionally uses the /additional-data/ to precise the ~info~ vector from the [[https://tools.ietf.org/html/rfc5869][RFC]]. #+NAME: list-all-kdfs #+BEGIN_SRC lisp (list-all-kdfs) => list #+END_SRC Returns a list of KDF kinds that may be validly passed to [[make-kdf][make-kdf]]. ** PBKDF convenience functions Ironclad comes with convenience functions for using PBKDF1 and PBKDF2 to store passwords. #+NAME: pbkdf2-hash-password #+BEGIN_SRC lisp (pbkdf2-hash-password password &key salt digest iterations) => password #+END_SRC Convenience function for hashing passwords using the PBKDF2 algorithm. Returns the derived hash of the password, and the original salt, as byte vectors. #+NAME: pbkdf2-hash-password-to-combined-string #+BEGIN_SRC lisp (pbkdf2-hash-password-to-combined-string password &key salt digest iterations) => password #+END_SRC Convenience function for hashing passwords using the PBKDF2 algorithm. Returns the derived hash of the password as a single string that encodes the given salt and PBKDF2 algorithm parameters. #+NAME: pbkdf2-check-password #+BEGIN_SRC lisp (pbkdf2-check-password password combined-salt-and-digest) => boolean #+END_SRC Given a /password/ byte vector and a combined salt and digest string produced by [[pbkdf2-hash-password-to-combined-string][pbkdf2-hash-password-to-combined-string]], checks whether the password is valid. * Public key cryptography :PROPERTIES: :CUSTOM_ID: public-key-cryptography :END: Ironclad includes support for a few public key cryptography algorithms. Encryption algorithms: - Elgamal - RSA Signature algorithms: - DSA - Ed25519 - Ed448 - Elgamal - RSA - Secp256k1 - Secp256r1 (a.k.a. NIST P-256) - Secp384r1 (a.k.a. NIST P-384) - Secp521r1 (a.k.a. NIST P-521) Diffie-Hellman key exchange: - Curve25519 - Curve448 - Elgamal - Secp256k1 - Secp256r1 (a.k.a. NIST P-256) - Secp384r1 (a.k.a. NIST P-384) - Secp521r1 (a.k.a. NIST P-521) ** Key pair generation #+NAME: generate-key-pair #+BEGIN_SRC lisp (generate-key-pair kind &key num-bits &allow-other-keys) => private-key, public-key #+END_SRC Return a key pair according to /kind/. The generation of DSA, Elgamal and RSA key pairs can take some time. If /kind/ is ~:dsa~ or ~:rsa~, the /num-bits/ key argument indicating the size of the keys to generate must be specified. If /kind/ is ~:elgamal~, /num-bits/ must be specified unless /compatible-with-key/ is specified, in which case the group parameters are taken from the specified key instead of being generated. For example, if Alice wants to generate a key pair for a Diffie-Hellman exchange with Bob's Elgamal key pair: #+BEGIN_EXAMPLE (generate-key-pair :elgamal :compatible-with-key bob-public-key) #+END_EXAMPLE #+NAME: list-all-key-pair-kinds #+BEGIN_SRC lisp (list-all-key-pair-kinds) => list #+END_SRC Returns a list of key pair kinds that may be validly passed to [[generate-key-pair][generate-key-pair]]. *** Key construction #+NAME: make-public-key #+BEGIN_SRC lisp (make-public-key kind &key &allow-other-keys) => public-key #+END_SRC Return a public key according to /kind/. The /&key/ arguments vary according to /kind/. The interesting bits are in the methods that specialize on /kind/, below. #+BEGIN_EXAMPLE (make-public-key :curve25519 &key y) => public-key (make-public-key :curve448 &key y) => public-key (make-public-key :dsa &key p q g y) => public-key (make-public-key :ed25519 &key y) => public-key (make-public-key :ed448 &key y) => public-key (make-public-key :elgamal &key p g y) => public-key (make-public-key :rsa &key e n) => public-key (make-public-key :secp256k1 &key y) => public-key (make-public-key :secp256r1 &key y) => public-key (make-public-key :secp384r1 &key y) => public-key (make-public-key :secp521r1 &key y) => public-key #+END_EXAMPLE #+NAME: make-private-key #+BEGIN_SRC lisp (make-private-key kind &key &allow-other-keys) => private-key #+END_SRC Return a private key according to /kind/. The /&key/ arguments vary according to /kind/. The interesting bits are in the methods that specialize on /kind/, below. #+BEGIN_EXAMPLE (make-private-key :curve25519 &key x y) => private-key (make-private-key :curve448 &key x y) => private-key (make-private-key :dsa &key p q g y x) => private-key (make-private-key :ed25519 &key x y) => private-key (make-private-key :ed448 &key x y) => private-key (make-private-key :elgamal &key p g y x) => private-key (make-private-key :rsa &key d n p q) => private-key (make-private-key :secp256k1 &key x y) => private-key (make-private-key :secp256r1 &key x y) => private-key (make-private-key :secp384r1 &key x y) => private-key (make-private-key :secp521r1 &key x y) => private-key #+END_EXAMPLE For Curve25519, Curve448, Ed25519, Ed448 keys, Secp256k1, Secp256r1, Secp384r1 and Secp521r1, the type of the parameters is ~(simple-array (unsigned-byte 8) (*))~: - /x/, the secret key - /y/, the public key For DSA and Elgamal keys, the type of the parameters is ~integer~: - /p/, the prime number defining the DL group - /q/, the prime number defining the DL sub-group - /g/, the generator - /y/, the public key - /x/, the private key For RSA keys, the type of the parameters is ~integer~: - /n/, the modulus - /e/, the public key - /d/, the private key - /p/, the first prime factor of /n/ - /q/, the second prime factor of /n/ *** Key destructuring The [[destructure-public-key][destructure-public-key]] and [[destructure-private-key][destructure-private-key]] functions can be useful if you need to store keys somewhere for future use. #+NAME: destructure-public-key #+BEGIN_SRC lisp (destructure-public-key public-key) => plist #+END_SRC Return the elements of a public key in a plist. The indicators of the plist match the /&key/ arguments of the [[make-public-key][make-public-key]] method. #+NAME: destructure-private-key #+BEGIN_SRC lisp (destructure-private-key private-key) => plist #+END_SRC Return the elements of a private key in a plist. The indicators of the plist match the /&key/ arguments of the [[make-private-key][make-private-key]] method. ** Digital signatures #+NAME: sign-message #+BEGIN_SRC lisp (sign-message key message &key start end &allow-other-keys) => signature #+END_SRC Return a signature of /message/ between /start/ and /end/ signed with /key/; the class of /key/ determines the algorithm used to create the /signature/. _Note:_ The [[sign-message][sign-message]] does not perform the hashing of the data. You should hash your data using your favorite hash function, and then use this hash as the /message/ passed to [[sign-message][sign-message]]. #+NAME: verify-signature #+BEGIN_SRC lisp (verify-signature key message signature &key start end &allow-other-keys) => boolean #+END_SRC Verify whether /signature/ is a valid signature of /message/ between /start/ and /end/ using /key/. Return ~t~ is the signature is valid and ~nil~ otherwise. *** Padding To be secure, RSA signature requires the message to be padded. The /pss/ key parameter is provided to pad (or unpad) the message during signature (or verification) with the PSS scheme of PKCS-1. The value of the /pss/ key parameter can be either a digest name or ~t~ (which will use the sha1 digest). #+BEGIN_EXAMPLE (sign-message rsa-private-key message :pss t) => signature (verify-signature rsa-public-key message signature :pss t) => boolean #+END_EXAMPLE The functions /pss-encode/ and /pss-decode/ can also be used by hand if necessary. *** Signature nonce DSA, Elgamal and ECDSA (Secp256k1, Secp256r1, Secp384r1 and Secp521r1) signatures require the generation of a nonce. You must never sign two different messages with the same key and the same nonce, or anyone having these two signatures will be able compute your private key. Ironclad uses the [[generate-signature-nonce][generate-signature-nonce]] method which by default generates random nonces. #+NAME: generate-signature-nonce #+BEGIN_SRC lisp (generate-signature-nonce (key message &optional parameters)) => nonce #+END_SRC For DSA, /parameters/ is /q/. For Elgamal, /parameters/ is /p/. For ECDSA, /parameters/ is ~nil~. If instead of random nonces, you want to have deterministic nonces (e.g. like in RFC 6979), you will have to redefine [[generate-signature-nonce][generate-signature-nonce]]. For example, to have deterministic nonces for Secp256k1 ECDSA signatures, you could do something like: #+BEGIN_EXAMPLE (defmethod generate-signature-nonce ((key secp256k1-private-key) message &optional parameters) (declare (ignore parameters)) (compute-deterministic-nonce key message)) #+END_EXAMPLE *** Format of signatures [[sign-message][sign-message]] returns signatures as octet vectors. When the signature contains several values (e.g. the R and S values of DSA signatures), the octet vector is the concatenation of these values (e.g. the first half of the vector is the R value, the second half is the S value). You can use the [[make-signature][make-signature]] and [[destructure-signature][destructure-signature]] functions if you need access to the elements of a signature (e.g. to use a different kind of serialization). #+NAME: make-signature #+BEGIN_SRC lisp (make-signature kind &key &allow-other-keys) => signature #+END_SRC Return an octet vector representing a signature. The /&key/ arguments vary according to /kind/. The interesting bits are in the methods that specialize on /kind/, below. #+BEGIN_EXAMPLE (make-signature :dsa &key r s n-bits) => signature (make-signature :ed25519 &key r s) => signature (make-signature :ed448 &key r s) => signature (make-signature :elgamal &key r s n-bits) => signature (make-signature :rsa &key s n-bits) => signature (make-signature :secp256k1 &key r s) => signature (make-signature :secp256r1 &key r s) => signature (make-signature :secp384r1 &key r s) => signature (make-signature :secp521r1 &key r s) => signature #+END_EXAMPLE For Ed25519, Ed448, Secp256k1, Secp256r1, Secp384r1 and Secp521r1 signatures, the type of the parameters /r/ and /s/ is ~(simple-array (unsigned-byte 8) (*))~. For DSA and Elgamal signatures, the type of the parameters /r/, /s/ and /n-bits/ is ~integer~. For RSA signatures, the type of the parameters /s/ and /n-bits/ is ~integer~. #+NAME: destructure-signature #+BEGIN_SRC lisp (destructure-signature kind signature) => plist #+END_SRC Return the elements of a signature in a plist. The indicators of the plist match the /&key/ arguments of the [[make-signature][make-signature]] method. ** Encryption and decryption #+NAME: encrypt-message #+BEGIN_SRC lisp (encrypt-message key message &key start end &allow-other-keys) => encrypted-message #+END_SRC Return the /message/ between /start/ and /end/ encrypted with the /key/; the class of /key/ determines the algorithm used to encrypt the message. #+NAME: decrypt-message #+BEGIN_SRC lisp (decrypt-message key message &key start end n-bits &allow-other-keys) => decrypted-message #+END_SRC Return the /message/ between /start/ and /end/ decrypted by the /key/; the class of /key/ determines the algorithm used to decrypt the message. /n-bits/ can be used to indicate the expected size of the decrypted message (e.g. a small byte vector starting with zeros encrypted without padding, which is probably a bad idea, c.f. Padding section). *** Padding To be secure, RSA encryption requires the message to be padded. The /oaep/ key parameter is provided to pad (or unpad) the message during encryption (or decryption) with the OAEP scheme of PKCS-1. The value of the /oaep/ key parameter can be either a digest name or ~t~ (which will use the sha1 digest). #+BEGIN_EXAMPLE (encrypt-message rsa-public-key message :oaep t) => encrypted-message (decrypt-message rsa-private-key message :oaep t) => decrypted-message #+END_EXAMPLE The functions /oaep-encode/ and /oaep-decode/ can also be used by hand if necessary. *** Format of messages [[encrypt-message][encrypt-message]] returns encrypted messages as octet vectors. When the message contains several values (e.g. the C1 and C2 values of Elgamal messages), the octet vector is the concatenation of these values (e.g. the first half of the vector is the big-endian representation of the C1 value, the second half is the C2 value). You can use the [[make-message][make-message]] and [[destructure-message][destructure-message]] functions if you need access to the elements of a message (e.g. to use a different kind of serialization). #+NAME: make-message #+BEGIN_SRC lisp (make-message kind &key &allow-other-keys) => message #+END_SRC Return an octet vector representing a message. The /&key/ arguments vary according to /kind/. The interesting bits are in the methods that specialize on /kind/, below. #+BEGIN_EXAMPLE (make-message :elgamal &key c1 c2 n-bits) => message (make-message :rsa &key m n-bits) => message #+END_EXAMPLE For Elgamal messages, the type of the parameters /c1/, /c2/ and /n-bits/ is ~integer~. For RSA signatures, the type of the parameters /m/ and /n-bits/ is ~integer~. #+NAME: destructure-message #+BEGIN_SRC lisp (destructure-message kind message) => plist #+END_SRC Return the elements of a message in a plist. The indicators of the plist match the /&key/ arguments of the [[make-message][make-message]] method. ** Diffie-Hellman key exchange #+NAME: diffie-hellman #+BEGIN_SRC lisp (diffie-hellman private-key public-key) => bytes #+END_SRC Return a secret shared by two users Alice and Bob, computed from Alice's private key and Bob's public key (these keys must be compatible, i.e. have the same group parameters). * Pseudo-random number generation :PROPERTIES: :CUSTOM_ID: pseudo-random-number-generation :END: The =*prng*= special variable indicates which pseudo-random number generator is used by default by functions that need to generate some random data. It defaults to a sensible OS-specific value. The vast, vast vast number of users should just use the default ~os-prng~ (which uses =/dev/urandom= on Unix and ~CryptGenRandom~ on Windows). For users who need /deterministic/, high-quality-random-seeming numbers (e.g. for Monte Carlo simulations), ~fortuna-generator~ is provided. Finally, if you're running on a platform without a decent PRNG (these are few and far between now), you may require the full ~fortuna-prng~. When in doubt, use ~os-prng~, which is the default. #+NAME:make-prng #+BEGIN_SRC lisp (make-prng name &key seed) => prng #+END_SRC Create a pseudo-random number generator. /name/ denotes the style of PRNG to use. [[list-all-prngs][list-all-prngs]] will tell you the names of all supported PRNGs. Currently supported PRNGs are: - OS - Fortuna - Fortuna-generator /name/ can be a symbol in the ~keyword~ package or in the ~ironclad~ package. /seed/ is a *seed descriptor*. If ~nil~, the PRNG will not be seeded (which may prevent it from generating output until it is seeded, depending on the PRNG in question). If ~:random~ then the PRNG will be seeded with the OS's cryptographically-secure PRNG. If ~:urandom~ then the PRNG will be seeded with the OS's fast-but-potentially-less-secure PRNG, if available (if not, will fallback to ~:random~). If it is a pathname indicator, a seed will be read from the indicated file, then a new seed will be generated and written back to the file (over-writing the old seed). Finally, if it is a byte vector, it will be used to seed the PRNG. In single-threaded applications, you should very rarely need to call [[make-prng][make-prng]]; the default OS-provided PRNG should be appropriate in nearly all cases. In multi-threaded applications, each thread that will use functions requiring random data must have its own PRNG, or several threads might generate the same "random" data. If the threads are created using the *bordeaux-threads* library (or by a library using *bordeaux-threads*, like *lparallel*), this is done automatically. However, if you are using the threading functions of your Common Lisp implementation directly, you have to bind the ~*prng*~ special variable to a new PRNG in each thread. For example: #+BEGIN_EXAMPLE (make-thread (lambda () (let ((crypto:*prng* (crypto:make-prng :os))) (forms-for-thread-1)))) (make-thread (lambda () (let ((crypto:*prng* (crypto:make-prng :os))) (forms-for-thread-2)))) #+END_EXAMPLE #+NAME: list-all-prngs #+BEGIN_SRC lisp (list-all-prngs) => list #+END_SRC List all known PRNG types. #+NAME: random-data #+BEGIN_SRC lisp (random-data num-bytes &optional prng) => bytes #+END_SRC Generate /num-bytes/ bytes of random data from /prng/. Updates the state of the generator. #+NAME: random-bits #+BEGIN_SRC lisp (random-bits num-bits &optional prng) => integer #+END_SRC Generate an integer with /num-bits/ bits. #+NAME: strong-random #+BEGIN_SRC lisp (strong-random limit &optional prng) => number #+END_SRC A drop-in replacement for ~common-lisp:random~, [[strong-random][strong-random]] generates a number (an integer if /limit/ is an integer and a float if it is a float) between 0 and /limit/ - 1 in an unbiased fashion. #+NAME: read-os-random-seed #+BEGIN_SRC lisp (read-os-random-seed source &optional prng) => reseed-count #+END_SRC Read an OS-provided random seed (from =/dev/urandom= or =/dev/random= on Unix; ~CryptGenRandom~ on Windows) and reseed /prng/. /source/ may be ~:random~, which indicates =/dev/random= or ~:urandom~, which indicates =/dev/urandom=. On Windows, ~CryptGenRandom~ is always used. #+NAME: read-seed #+BEGIN_SRC lisp (read-seed path &optional prng) => t #+END_SRC Read enough bytes from /path/ to reseed /prng/, then generate a pseudo-random seed and write it back to /path/. If /path/ doesn't exist, calls [[read-os-random-seed][read-os-random-seed]] to get a truly random seed from the OS. Note that reseeding does *not* reset the generator's state to the seed value; rather, it *combines* the generator's state with the seed to form a new state. #+NAME: write-seed #+BEGIN_SRC lisp (write-seed path &optional prng) => t #+END_SRC Generate enough random data to reseed /prng/, then write it to /path/. ** Example #+BEGIN_EXAMPLE (crypto:random-data 16) => #(61 145 133 130 220 200 90 86 0 101 62 169 0 40 101 78) (crypto:strong-random 16) => 3 (crypto:random-bits 16) => 41546 #+END_EXAMPLE ** Fortuna You should only use the Fortuna PRNG if your OS does not provided a sufficiently-good PRNG. If you use a Unix or Unix-like OS (e.g. Linux), macOS or Windows, it does. Only use the Fortuna PRNG if you know for certain that you need it. Fortuna is a cryptographically-secure random number presented by Ferguson, Schneier and Kohno in /Cryptography Engineering/. It is built around 32 entropy pools, which are used with decreasing frequency for each reseed (e.g. pool 0 is used in each reseed, pool 1 in every other reseed, pool 2 in every fourth reseed and so forth). Pools are seeded with data from up to 256 sources. Each application should have one or more entropy sources (say, one for each OS random number source, one for the low bits of the current time, one for the output of a particular command or group of commands and so forth). A source should be used to add randomness to each pool in order, so source 0 should top up pool 0, then pool 1, and so forth up to pool 31, then loop back to pool 1 again. Be very careful to spread entropy across all 32 pools. Fortuna automatically feeds entropy from the pools back into its random state when [[random-data][random-data]] is called, using a method designed to make it resistant to various avenues of attack; even in case of generator compromise it will return to a safe state within a bounded time. For purposes of reseeding, Fortuna will not reseed until the first pool contains 128 bits of entropy; ~+min-pool-size+~ sets the number of bytes this is; it defaults to a very conservative 128, meaning that by default each byte of event is assumed to contain a single bit of randomness. It also will not reseed more than ten times per second. #+NAME: add-random-event #+BEGIN_SRC lisp (add-random-event source pool-id event &optional prng) => pool-length #+END_SRC Add entropy to /prng/. /source/ is an integer in the range 0-255 specifiying the event's application-defined source. /pool-id/ is an integer in the range 0-31 specifying the pool to top up. /event/ is up to 32 bytes of data (for longer events, hash them down or break them up into chunks). * Gray streams :PROPERTIES: :CUSTOM_ID: gray-streams :END: Ironclad includes support for several convenient stream abstractions based on Gray streams. Gray streams support in Ironclad is included for SBCL, CMUCL, OpenMCL/CCL, Lispworks, ABCL, ECL, Clisp and Allegro. ** Octet streams Octet streams are very similar to Common Lisp's ~string-stream~ except they deal in octets instead of characters. #+NAME: make-octet-input-stream #+BEGIN_SRC lisp (make-octet-input-stream buffer &optional start end) => octet-input-stream #+END_SRC As ~make-string-input-stream~, only with octets instead of characters. #+NAME: make-octet-output-stream #+BEGIN_SRC lisp (make-octet-output-stream) => octet-output-stream #+END_SRC As ~make-string-output-stream~, only with octets instead of characters. #+NAME: get-output-stream-octets #+BEGIN_SRC lisp (get-output-stream-octets stream) => octet-vector #+END_SRC As ~get-output-stream-string~, only with an octet output-steam instead of a string output-stream. #+NAME: with-octet-input-stream #+BEGIN_SRC lisp (with-octet-input-stream ((var buffer &optional (start 0) end) &body body)) #+END_SRC Within /body/, /var/ is bound to an octet input stream. Reading from /var/ gives the bytes between the indexes /start/ and /end/ of /buffer/. The result of the last form of /body/ is returned. #+NAME: with-octet-output-stream #+BEGIN_SRC lisp (with-octet-output-stream ((var) &body body)) => bytes #+END_SRC Within /body/, /var/ is bound to an octet output stream. After all the forms in /body/ have been executed, the data that has been written to /var/ (and that hasn't been consumed by a call to [[get-output-stream-octets][get-output-stream-octets]] within /body/) is returned. ** Digest streams Digest streams compute a digest of the data written to them according to a specific digest algorithm. Example: #+BEGIN_EXAMPLE (defun frobbing-function (stream) ;; We want to compute a digest of the data being written to STREAM ;; without involving our callees in the process. (let* ((digesting-stream (crypto:make-digesting-stream :sha1)) (stream (make-broadcast-stream stream digesting-stream))) ;; Feed data to STREAM. (frob-guts stream) ;; Do something with the digest computed. (... (crypto:produce-digest digesting-stream) ...) ...)) #+END_EXAMPLE #+NAME: make-digesting-stream #+BEGIN_SRC lisp (make-digesting-stream digest &rest args) => stream #+END_SRC Make a stream that computes a digest of the data written to it according to the algorithm /digest/. The parameters that can be used by some algorithms can be specified as /args/. [[produce-digest][produce-digest]] may be used to obtain a digest of all the data written to the stream. _Note:_ Calling [[produce-digest][produce-digest]] on a digest stream does not alter the internal state of the digest. #+NAME: with-digesting-stream #+BEGIN_SRC lisp (with-digesting-stream (var digest-name &rest args) &body body) => digest #+END_SRC Within /body/, /var/ is bound to a digesting stream for the /digest-name/ algorithm. After all the forms in /body/ have been executed, the digest of the data that has been written to /var/ is returned. ** Cipher streams Cipher streams encrypt or decrypt the data written to or read from them according to a specific cipher algorithm. #+NAME: make-encrypting-stream #+BEGIN_SRC lisp (make-encrypting-stream stream cipher mode key &key initialization-vector direction) => stream #+END_SRC Make a stream wrapped around the binary stream /stream/ that encrypts data according to the algorithm /cipher/ initialized with a /mode/, a /key/ and an /initialization-vector/. If /direction/ is ~:input~, the data read from the created input stream is the encryption of the data coming from /stream/. If /direction/ is ~:output~, the data written to the created output stream is encrypted before being sent to /stream/. #+NAME: make-decrypting-stream #+BEGIN_SRC lisp (make-decrypting-stream stream cipher mode key &key initialization-vector direction) => stream #+END_SRC Make a stream wrapped around the binary stream /stream/ that decrypts data according to the algorithm /cipher/ initialized with a /mode/, a /key/ and an /initialization-vector/. If /direction/ is ~:input~, the data read from the created input stream is the decryption of the data coming from /stream/. If /direction/ is ~:output~, the data written to the created output stream is decrypted before being sent to /stream/. _Note:_ Only stream ciphers and block ciphers in CTR, CFB, CFB8 or OFB mode are supported by [[make-encrypting-stream][make-encrypting-stream]] and [[make-decrypting-stream][make-decrypting-stream]]. #+NAME: with-encrypting-stream #+BEGIN_SRC lisp (with-encrypting-stream ((var stream cipher mode key &key initialization-vector direction) &body body)) #+END_SRC Within /body/, /var/ is bound to an encrypting stream. The result of the last form of /body/ is returned. #+NAME: with-decrypting-stream #+BEGIN_SRC lisp (with-decrypting-stream ((var stream cipher mode key &key initialization-vector direction) &body body)) #+END_SRC Within /body/, /var/ is bound to a decrypting stream. The result of the last form of /body/ is returned. ** MAC streams MAC streams compute a message authentication code of the data written to them according to a specific MAC algorithm. #+NAME: make-authenticating-stream #+BEGIN_SRC lisp (make-authenticating-stream mac key &rest args) => stream #+END_SRC Make a stream that computes a MAC of the data written to it according to the algorithm /mac/ initialized with a /key/. The parameters used to create the MAC can be specified as /args/. [[produce-mac][produce-mac]] may be used to obtain a MAC of all the data written to the stream. _Note:_ Calling [[produce-mac][produce-mac]] on a MAC stream does not alter the internal state of the MAC. Example: encrypt some data and compute a MAC of the ciphertext #+BEGIN_EXAMPLE (let* ((data ...) (output-stream ...) (encryption-key ...) (authentication-key ...) (iv ...) (mac-stream (make-authenticating-stream :hmac authentication-key :sha3)) (stream (make-broadcast-stream output-stream mac-stream)) (cipher-stream (make-encrypting-stream stream :chacha :stream encryption-key :initialization-vector iv))) (write-sequence data cipher-stream) ... (let ((mac (produce-mac mac-stream))) ...)) #+END_EXAMPLE #+NAME: with-authenticating-stream #+BEGIN_SRC lisp (with-authenticating-stream (var mac-name key &rest args) &body body) => mac #+END_SRC Within /body/, /var/ is bound to an authenticating stream for the /mac-name/ algorithm. After all the forms in /body/ have been executed, the message authentication code of the data that has been written to /var/ is returned. * Utility functions :PROPERTIES: :CUSTOM_ID: utility-functions :END: #+NAME: ub-ref-le #+BEGIN_SRC lisp (ub16ref/le vector index) => value (ub32ref/le vector index) => value (ub64ref/le vector index) => value #+END_SRC This family of functions accesses an unsigned 16-bit, 32-bit or 64-bit value stored in little-endian order starting at /index/ in /vector/. /vector/ must be a ~(simple-array (unsigned-byte 8) (*))~. These functions are SETFable. #+NAME: ub-ref-be #+BEGIN_SRC lisp (ub16ref/be vector index) => value (ub32ref/be vector index) => value (ub64ref/be vector index) => value #+END_SRC As the above, only the value is stored in big-endian order. #+NAME: array-hex-string #+BEGIN_SRC lisp (byte-array-to-hex-string vector &key start end element-type) => string (hex-string-to-byte-array string &key start end) => string (ascii-string-to-byte-array string &key start end) => vector #+END_SRC [[array-hex-string][byte-array-to-hex-string]] converts the bytes of /vector/ between /start/ and /end/ into a hexadecimal string. It is useful for converting digests to a more readable form. /element-type/ indicates the element-type of the returned string. [[array-hex-string][hex-string-to-byte-array]] parses a substring of /string/ delimited /start/ and /end/ of hexadecimal digits into a byte array. [[array-hex-string][ascii-string-to-byte-array]] is provided as a quick and dirty way to convert a string to a byte array suitable for feeding to [[update-digest][update-digest]] or [[encrypt][encrypt]]. Care should be taken to ensure that the provided string is actually an ASCII string. /start/ and /end/ have their usual interpretations. #+NAME: octets-integer #+BEGIN_SRC lisp (octets-to-integer octet-vec &key start end big-endian n-bits) => number (integer-to-octets bignum &key n-bits big-endian) => vector #+END_SRC [[octets-integer][octets-to-integer]] converts the bytes of /octet-vec/ between /start/ and /end/ to an integer as though the bytes denoted a number in base 256. /big-endian/ is a boolean indicating whether the bytes are to be read in big-endian or little-endian order. /n-bits/ specifies how many bits should be considered as significant in the resulting number. [[octets-integer][integer-to-octets]] is the reverse operation. #+NAME: expt-mod #+BEGIN_SRC lisp (expt-mod n exponent modulus) => number (expt-mod/unsafe n exponent modulus) => number #+END_SRC Raises /n/ to the /exponent/ power modulo /modulus/ in a more efficient fashion than ~(mod (expt n exponent) modulus)~. [[expt-mod][expt-mod]] is using the Montgomery ladder algorithm to be more robust against timing attacks. [[expt-mod][expt-mod/unsafe]] runs faster than [[expt-mod][expt-mod]] but is not safe against timing attacks; don't use it on secret data. #+NAME: prime-p #+BEGIN_SRC lisp (prime-p n &optional prng) => boolean #+END_SRC [[prime-p][prime-p]] returns ~t~ if /n/ has a high probability of being a prime number, and ~nil~ if it is a composite number. The probable primality is determined by first doing trial divisions with small primes, then running several Miller-Rabin tests with random bases, and finally doing a Lucas test. The number of Miller-Rabin tests can be configured using the ~*number-of-miller-rabin-tests*~ variable. It is 64 by default, which makes the probability of returning ~t~ for a composite number to be at most 1/2^128. #+NAME: make-random-salt #+BEGIN_SRC lisp make-random-salt &optional size => bytes #+END_SRC Generate a byte vector of /size/ (default 16) random bytes, suitable for use as a password salt. #+NAME: constant-time-equal #+BEGIN_SRC lisp constant-time-equal data1 data2 => boolean #+END_SRC Check whether the contents of the byte arrays /data1/ and /data2/ are the same. This function runs in constant time (for a given array length) to prevent timing attacks. It can be used to compare passwords or MACs. * Conditions :PROPERTIES: :CUSTOM_ID: conditions :END: #+NAME: ironclad-error #+BEGIN_SRC lisp ironclad-error #+END_SRC All errors signaled by Ironclad are of this type. This type is a direct subtype of ~simple-error~ without any extra slots or options. #+NAME: initialization-vector-not-supplied #+BEGIN_SRC lisp initialization-vector-not-supplied #+END_SRC This error is signaled by [[make-cipher][make-cipher]] when an initialization vector is not provided and the requested mode requires an initialization vector. #+NAME: invalid-initialization-vector #+BEGIN_SRC lisp invalid-initialization-vector #+END_SRC This error is signaled when an invalid initialization vector is supplied to [[make-cipher][make-cipher]] (e.g. when the length of the initialization vector does not match the block length of the cipher). #+NAME: invalid-key-length #+BEGIN_SRC lisp invalid-key-length #+END_SRC This error is signaled when the key provided to [[make-cipher][make-cipher]] is not of an acceptable length for the requested cipher. #+NAME: unsupported-cipher #+BEGIN_SRC lisp unsupported-cipher #+END_SRC This error is signaled when the /cipher-name/ provided to [[make-cipher][make-cipher]] is not [[cipher-supported-p][cipher-supported-p]]. #+NAME: unsupported-mode #+BEGIN_SRC lisp unsupported-mode #+END_SRC This error is signaled when the /mode/ provided to [[make-cipher][make-cipher]] is not /mode-supported-p/. #+NAME: unsupported-padding #+BEGIN_SRC lisp unsupported-padding #+END_SRC This error is signaled when the /padding/ provided to [[make-cipher][make-cipher]] is not supported. #+NAME: unsupported-digest #+BEGIN_SRC lisp unsupported-digest #+END_SRC This error is signaled when the /digest-name/ provided to [[make-digest][make-digest]] is not [[digest-supported-p][digest-supported-p]]. #+NAME: unsupported-mac #+BEGIN_SRC lisp unsupported-mac #+END_SRC This error is signaled when the /mac-name/ provided to [[make-mac][make-mac]] is not [[mac-supported-p][mac-supported-p]]. #+NAME: insufficient-buffer-space #+BEGIN_SRC lisp insufficient-buffer-space #+END_SRC This error is signaled when Ironclad needs to stuff some data into a buffer (e.g. when the user provides /digest/ to [[produce-digest][produce-digest]] and there is insufficient space). #+NAME: key-not-supplied #+BEGIN_SRC lisp key-not-supplied #+END_SRC This error is signaled when a /:key/ argument is not provided to [[make-cipher][make-cipher]]. #+NAME: unsupported-kdf #+BEGIN_SRC lisp unsupported-kdf #+END_SRC This error is signaled when an invalid KDF name is provided to [[make-kdf][make-kdf]]. #+NAME: unsupported-scrypt-cost-factors #+BEGIN_SRC lisp unsupported-scrypt-cost-factors #+END_SRC This error is signaled when invalid Scrypt cost factors are provided to [[make-kdf][make-kdf]]. #+NAME: unsupported-argon2-cost-factors #+BEGIN_SRC lisp unsupported-argon2-cost-factors #+END_SRC This error is signaled when invalid Argon2 parameters are provided to [[make-kdf][make-kdf]]. #+NAME: invalid-padding #+BEGIN_SRC lisp invalid-padding #+END_SRC This error is signaled when padding in a block is determined to be invalid. #+NAME: invalid-mac-parameter #+BEGIN_SRC lisp invalid-mac-parameter #+END_SRC This error is signaled when an invalid parameter is provided to [[make-mac][make-mac]]. #+NAME: invalid-signature-length #+BEGIN_SRC lisp invalid-signature-length #+END_SRC This error is signaled when a signature with an invalid length is provided to [[verify-signature][verify-signature]] or [[destructure-signature][destructure-signature]]. #+NAME: invalid-message-length #+BEGIN_SRC lisp invalid-message-length #+END_SRC This error is signaled when a message with an invalid length is provided to [[encrypt-message][encrypt-message]], [[decrypt-message][decrypt-message]] or [[destructure-message][destructure-message]]. #+NAME: missing-key-parameter #+BEGIN_SRC lisp missing-key-parameter #+END_SRC This error is signaled when it is determined that a parameter is missing in a call to [[make-public-key][make-public-key]] or [[make-private-key][make-private-key]]. #+NAME: missing-message-parameter #+BEGIN_SRC lisp missing-message-parameter #+END_SRC This error is signaled when it is determined that a parameter is missing in a call to [[make-message][make-message]]. #+NAME: missing-signature-parameter #+BEGIN_SRC lisp missing-signature-parameter #+END_SRC This error is signaled when it is determined that a parameter is missing in a call to [[make-signature][make-signature]]. #+NAME: incompatible-keys #+BEGIN_SRC lisp incompatible-keys #+END_SRC This error is signaled when incompatible keys are provided to [[diffie-hellman][diffie-hellman]]. #+NAME: invalid-curve-point #+BEGIN_SRC lisp invalid-curve-point #+END_SRC This error is signaled when trying to use an invalid curve point. #+NAME: invalid-public-key-length #+BEGIN_SRC lisp invalid-public-key-length #+END_SRC This error is signaled when a public key with an invalid length is provided to [[verify-signature][verify-signature]]. #+NAME: oaep-decoding-error #+BEGIN_SRC lisp oaep-decoding-error #+END_SRC This error is signaled when the OAEP decoding of a message fails. #+NAME: unsupported-authenticated-encryption-mode #+BEGIN_SRC lisp unsupported-authenticated-encryption-mode #+END_SRC This error is signaled when an invalid mode name is provided to [[make-authenticated-encryption-mode][make-authenticated-encryption-mode]]. #+NAME: bad-authentication-tag #+BEGIN_SRC lisp bad-authentication-tag #+END_SRC This error is signaled when the verification of authenticity of a message fails. * Subsystems (experimental) :PROPERTIES: :CUSTOM_ID: subsystems :END: Instead of loading the complete Ironclad system, you can load only the subsystems of the algorithms you need. For example if you need only AES and SHA256: #+BEGIN_EXAMPLE (asdf:load-system "ironclad/cipher/aes") (asdf:load-system "ironclad/digest/sha256") #+END_EXAMPLE ** Available subsystems - ironclad - ironclad/core - ironclad/ciphers - ironclad/cipher/aes - ironclad/cipher/arcfour - ironclad/cipher/aria - ironclad/cipher/blowfish - ironclad/cipher/camellia - ironclad/cipher/cast5 - ironclad/cipher/chacha - ironclad/cipher/des - ironclad/cipher/idea - ironclad/cipher/kalyna - ironclad/cipher/keystream - ironclad/cipher/kuznyechik - ironclad/cipher/misty1 - ironclad/cipher/rc2 - ironclad/cipher/rc5 - ironclad/cipher/rc6 - ironclad/cipher/salsa20 - ironclad/cipher/seed - ironclad/cipher/serpent - ironclad/cipher/sm4 - ironclad/cipher/sosemanuk - ironclad/cipher/square - ironclad/cipher/tea - ironclad/cipher/threefish - ironclad/cipher/twofish - ironclad/cipher/xchacha - ironclad/cipher/xor - ironclad/cipher/xsalsa20 - ironclad/cipher/xtea - ironclad/digests - ironclad/digest/adler32 - ironclad/digest/blake2 - ironclad/digest/blake2s - ironclad/digest/crc24 - ironclad/digest/crc32 - ironclad/digest/groestl - ironclad/digest/jh - ironclad/digest/kupyna - ironclad/digest/md2 - ironclad/digest/md4 - ironclad/digest/md5 - ironclad/digest/ripemd-128 - ironclad/digest/ripemd-160 - ironclad/digest/sha1 - ironclad/digest/sha256 - ironclad/digest/sha3 - ironclad/digest/sha512 - ironclad/digest/skein - ironclad/digest/sm3 - ironclad/digest/streebog - ironclad/digest/toger - ironclad/digest/tree-hash - ironclad/digest/whirlpool - ironclad/macs - ironclad/mac/blake2-mac - ironclad/mac/blake2s-mac - ironclad/mac/cmac - ironclad/mac/gmac - ironclad/mac/hmac - ironclad/mac/poly1305 - ironclad/mac/siphash - ironclad/mac/skein-mac - ironclad/prngs - ironclad/prng/fortuna - ironclad/aeads - ironclad/aead/eax - ironclad/aead/etm - ironclad/aead/gcm - ironclad/kdfs - ironclad/kdf/argon2 - ironclad/kdf/bcrypt - ironclad/kdf/hmac - ironclad/kdf/password-hash - ironclad/kdf/pkcs5 - ironclad/kdf/scrypt - ironclad/public-keys - ironclad/public-key/curve25519 - ironclad/public-key/curve448 - ironclad/public-key/dsa - ironclad/public-key/ed25519 - ironclad/public-key/ed448 - ironclad/public-key/elgamal - ironclad/public-key/rsa - ironclad/public-key/secp256k1 - ironclad/public-key/secp256r1 - ironclad/public-key/secp384r1 - ironclad/public-key/secp521r1 ironclad-0.57/TODO000066400000000000000000000150541420372057600137430ustar00rootroot00000000000000hey emacs, show me an -*- mode: outline -*- * misc ** cleanup octet-stream: positions are either INDEX or POSITION, not both The latter requires :SHADOW adjustments in Ironclad's DEFPACKAGE. * ciphers to add CAST6 MARS ...others?... * add OpenPGP functions This would involve writing some simple base64 encoding and decoding. I'm not sure how to add this and achieve the right amount of generality and functionality. Just writing an OpenPGP parser is straightforward, but determining what to do with the data is a little more complicated. * make a condition hierarchy for the library Some conditions have been added as of 0.7, but there probably need to be more, with helpful messages along the way. * remove generic function calls from inner loops ENCRYPT-WITH-MODE, by virtue of calling -ENCRYPT-BLOCK on every iteration of the loop, requires -ENCRYPT-BLOCK to repeatedly extract the cipher-specific data from the provided cipher context. No idea if this is a bottleneck (probably not). Doing this extraction on every iteration of the loop is overhead, though--unnecessary overhead compared to a C implementation. Pulling the extraction out of the loop in a clean, cipher-independent manner is probably pretty hairy, however. * figure out interface for extra cipher creation parameters RC5, for instance, is configurable in the number of rounds. The number of rounds must be fixed the way the current system works. Configuring the number of rounds for TEA and XTEA would be another example of where this is useful. Surely there are other reasons, too. * add more cipher modes of operation CBC with ciphertext stealing (CBC-CTS) (this would require some sort of ENCRYPT-FINAL-BLOCK interface so we would know when to perform the ciphertext stealing) PCBC, for all those Lispers who want to implement Kerberos 4 OpenPGP CFB * efficient 32-bit implementations of SHA2-{512,384} These digests are currently implemented with straight 64-bit arithmetic, which is elegant, but causes a lot of consing on 32-bit platforms. Is it worth spending the time to tweak these? * add other MACs The NESSIE project has a boatload of MAC recommendations with test vectors and everything. Adding other MACs would help with cleaning up the MAC interface (or lack thereof). * add other digests Are there any other reputable hash functions? * figure out interface for stream ciphers WiderWake 4+1 SEAL (intellectual property issues, although that doesn't seem to stop many other crypto libraries) * blue-sky ideas ** implementation-specific algorithm implementations Ironclad is written with implementations that are capable of performing 32-bit unboxed arithmetic in mind. However, there is no reason to leave other implementations out in the cold. I particularly have in mind ABCL, whose clean Java integration could facilitate using Java's crypto routines for many of the algorithms Ironclad provides. Using 32-bit integer arithmetic in LispWorks (SYSTEM:INT32-*) and DEF*LAPFUNCTION in ClozureCL, along with architecture-specific VOPs and/or DEF{KNOWN,OPTIMIZER,TRANSFORM} in SBCL/CMUCL are other ways of doing this. ** compilable encryption and decryption routines One trick that's commonly used in high-performance crypto libraries is unrolling inner loops of ciphers, which are generally Feistel networks of some sort. This transformation has many benefits: avoiding jumps and compiling more efficient code for structure accesses, to name two. Ironclad features unrolled loops in various places (e.g. the CAST5 and Blowfish ciphers). Unrolled loops can be particularly helpful in Common Lisp because the compiler can often optimize away things like array bounds checks. Unfortunately, this tends to limit the libraries to only handling a fixed number of rounds (or other configurable parameters of block ciphers). Accomodating variable numbers of rounds makes life easier for the truly paranoid and is more in the spirit of the ciphers as originally designed. One way of getting around this limitation would be to use Common Lisp's provision of the COMPILE function at create-the-cipher time. One could compile--on demand--specialized encryption/decryption routines that only accommodated a fixed number of rounds (or other static configuration parameters). This facility would be particularly helpful for those ciphers whose round keys are variable in the number of rounds chosen; bounds checking for accesses to these keys could be done away with entirely (except perhaps for a check to ensure the round key vector is of the proper length and type). Furthermore, the round keys could actually be compiled directly into the code--as 32-bit constant arguments on the x86, for example. Such a change would necessarily make the compiled routines key-specific, but perhaps that would be OK. (When reading the specifications for Blowfish and Twofish, the authors make much of this capability by citing screaming performance numbers for this scenario while noting that modifying the code for each individual key is difficult. In Ironclad, providing three differing levels of generality--general, n-rounds-specific, and key-specific--would be relatively easy compared to the difficulty of doing it in C.) Changes to MAKE-CIPHER--a keyword argument specifying the level of specialization--would be necessary. Extensive changes to the individual block ciphers would also be necessary. Perhaps this sort of facility need not be added to all ciphers; the common ones could come first (e.g. AES) and less-common ones would be converted as people contributed patches or needs were found for them. ** use word-aligned loads when possible The current code uses byte loads + shifts and ors to fetch (UNSIGNED-BYTE 32) values out of a (SIMPLE-ARRAY (UNSIGNED-BYTE 8) (*)). Some implementations (I have in mind particularly SBCL and CMUCL) could use a more efficient mechanism if the offset of the (UNSIGNED-BYTE 32) value was known to be four-byte aligned. Once this was done for each encryption/decryption function for a particular block cipher, the high-level generic functions could call efficient versions if possible, eliminating some overhead. There is actually some (SBCL) support for this in cipher.lisp, in the alternate definition for WITH-WORDS. It doesn't make that much of a difference--at least not in the case where WITH-WORDS needs to check for alignment and safety. It might be a win if there were several different *-ENCRYPT-BLOCK functions and the high-level ones knew which one to call, but... * add option to allow INTEGER-TO-OCTETS to output directly to a buffer This could be handy in certain internals, e.g. in GENERATE-BLOCKS. ironclad-0.57/benchmark/000077500000000000000000000000001420372057600152005ustar00rootroot00000000000000ironclad-0.57/benchmark/benchmark-implementation.lisp000066400000000000000000000205571420372057600230570ustar00rootroot00000000000000(asdf:load-system "ironclad") (defparameter *data-size* #+sbcl (expt 2 27) #+ccl (expt 2 23) #-(or sbcl ccl) (expt 2 20)) (defparameter *buffer-size* 32768) (defparameter *iterations* 100) (defparameter *implementation-result-file* "benchmark-tmp") (defparameter *result* (acons "version" (format nil "~a ~a" (lisp-implementation-type) (lisp-implementation-version)) '())) (defmacro get-speed-data (&body body) (let ((start-time (gensym)) (end-time (gensym)) (result (gensym)) (duration (gensym)) (speed (gensym))) `(let* ((,start-time (get-internal-real-time)) (,result ,@body) (,end-time (get-internal-real-time)) (,duration (/ (- ,end-time ,start-time) internal-time-units-per-second)) (,speed (round *data-size* ,duration))) (values ,speed ,result)))) (defmacro get-speed-ops (&body body) (let ((start-time (gensym)) (end-time (gensym)) (result (gensym)) (duration (gensym)) (speed (gensym))) `(let* ((,start-time (get-internal-real-time)) (,result ,@body) (,end-time (get-internal-real-time)) (,duration (/ (- ,end-time ,start-time) internal-time-units-per-second)) (,speed (round *iterations* ,duration))) (values ,speed ,result)))) (defun benchmark-ciphers () (let ((speeds '())) (dolist (cipher-name (ironclad:list-all-ciphers)) (flet ((stream-cipher-p (cipher-name) (= 1 (ironclad:block-length cipher-name)))) (let* ((key (ironclad:random-data (car (last (ironclad:key-lengths cipher-name))))) (cipher (ironclad:make-cipher cipher-name :key key :mode (if (stream-cipher-p cipher-name) :stream :ecb))) (buffer (ironclad:random-data *buffer-size*)) (speed (get-speed-data (dotimes (i (ceiling *data-size* *buffer-size*)) (ironclad:encrypt-in-place cipher buffer))))) (setf speeds (acons cipher-name speed speeds))))) (setf *result* (acons "ciphers" speeds *result*)))) (defun benchmark-digests () (let ((speeds '())) (dolist (digest-name (ironclad:list-all-digests)) (let* ((digest (ironclad:make-digest digest-name)) (buffer (ironclad:random-data *buffer-size*)) (speed (get-speed-data (dotimes (i (ceiling *data-size* *buffer-size*) (ironclad:produce-digest digest)) (ironclad:update-digest digest buffer))))) (setf speeds (acons digest-name speed speeds)))) (setf *result* (acons "digests" speeds *result*)))) (defun benchmark-macs () (let ((speeds '())) (dolist (mac-name (ironclad:list-all-macs)) (let* ((key-length (ecase mac-name (:blake2-mac 64) (:blake2s-mac 32) (:cmac 32) (:gmac 32) (:hmac 32) (:poly1305 32) (:siphash 16) (:skein-mac 64))) (key (ironclad:random-data key-length)) (iv (case mac-name (:gmac (ironclad:random-data 12)))) (extra-args (case mac-name (:cmac '(:aes)) (:gmac (list :aes iv)) (:hmac '(:sha256)))) (mac (apply #'ironclad:make-mac mac-name key extra-args)) (buffer (ironclad:random-data *buffer-size*)) (speed (get-speed-data (dotimes (i (ceiling *data-size* *buffer-size*) (ironclad:produce-mac mac)) (ironclad:update-mac mac buffer))))) (setf speeds (acons mac-name speed speeds)))) (setf *result* (acons "macs" speeds *result*)))) (defun benchmark-modes () (let ((speeds '())) (dolist (mode-name (ironclad:list-all-modes)) (let* ((cipher-name :aes) (key (ironclad:random-data (car (last (ironclad:key-lengths cipher-name))))) (iv (ironclad:random-data (ironclad:block-length cipher-name))) (cipher (ironclad:make-cipher cipher-name :mode mode-name :key key :initialization-vector iv)) (buffer (ironclad:random-data *buffer-size*)) (speed (get-speed-data (dotimes (i (ceiling *data-size* *buffer-size*)) (ironclad:encrypt-in-place cipher buffer))))) (setf speeds (acons mode-name speed speeds)))) (setf *result* (acons "modes" speeds *result*)))) (defun benchmark-diffie-hellman () (let ((speeds '())) (dolist (dh-name '(:curve25519 :curve448 :elgamal :secp256k1 :secp256r1 :secp384r1 :secp521r1)) (multiple-value-bind (private-key public-key) (if (member dh-name '(:curve25519 :curve448 :secp256k1 :secp256r1 :secp384r1 :secp521r1)) (ironclad:generate-key-pair dh-name) (ironclad:generate-key-pair dh-name :num-bits 2048)) (let ((speed (get-speed-ops (loop repeat *iterations* do (ironclad:diffie-hellman private-key public-key))))) (setf speeds (acons dh-name speed speeds))))) (setf *result* (acons "diffie-hellman" speeds *result*)))) (defun benchmark-message-encryptions () (let ((speeds '()) (message (ironclad:random-data 20))) (dolist (encryption-name '(:elgamal :rsa)) (let* ((public-key (nth-value 1 (ironclad:generate-key-pair encryption-name :num-bits 2048))) (speed (get-speed-ops (loop repeat *iterations* do (ironclad:encrypt-message public-key message))))) (setf speeds (acons encryption-name speed speeds)))) (setf *result* (acons "message-encryptions" speeds *result*)))) (defun benchmark-signatures () (let ((speeds '()) (message (ironclad:random-data 20))) (dolist (signature-name '(:dsa :ed25519 :ed448 :elgamal :rsa :secp256k1 :secp256r1 :secp384r1 :secp521r1)) (let* ((private-key (if (member signature-name '(:ed25519 :ed448 :secp256k1 :secp256r1 :secp384r1 :secp521r1)) (ironclad:generate-key-pair signature-name) (ironclad:generate-key-pair signature-name :num-bits 2048))) (speed (get-speed-ops (loop repeat *iterations* do (ironclad:sign-message private-key message))))) (setf speeds (acons signature-name speed speeds)))) (setf *result* (acons "signatures" speeds *result*)))) (defun benchmark-verifications () (let ((speeds '()) (message (ironclad:random-data 20))) (dolist (signature-name '(:dsa :ed25519 :ed448 :elgamal :rsa :secp256k1 :secp256r1 :secp384r1 :secp521r1)) (multiple-value-bind (private-key public-key) (if (member signature-name '(:ed25519 :ed448 :secp256k1 :secp256r1 :secp384r1 :secp521r1)) (ironclad:generate-key-pair signature-name) (ironclad:generate-key-pair signature-name :num-bits 2048)) (let* ((signature (ironclad:sign-message private-key message)) (speed (get-speed-ops (loop repeat *iterations* do (ironclad:verify-signature public-key message signature))))) (setf speeds (acons signature-name speed speeds))))) (setf *result* (acons "verifications" speeds *result*)))) (benchmark-ciphers) (benchmark-digests) (benchmark-macs) (benchmark-modes) (benchmark-diffie-hellman) (benchmark-message-encryptions) (benchmark-signatures) (benchmark-verifications) (with-open-file (file *implementation-result-file* :direction :output :if-exists :supersede) (write *result* :stream file)) (uiop:quit) ironclad-0.57/benchmark/benchmark.lisp000066400000000000000000000273401420372057600200310ustar00rootroot00000000000000(asdf:load-system "ironclad") (defparameter *lisp-implementations* `(("ABCL" "abcl --load benchmark-implementation.lisp") ("AllegroCL" ,(format nil "alisp -L ~a -L benchmark-implementation.lisp" (merge-pathnames ".clinit.cl" (user-homedir-pathname)))) ("ClozureCL" "ccl --load benchmark-implementation.lisp") ("Clisp" "clisp -i benchmark-implementation.lisp") ("ECL" "ecl --load benchmark-implementation.lisp") ("SBCL" "sbcl --load benchmark-implementation.lisp"))) (defparameter *implementation-result-file* "benchmark-tmp") (defparameter *result-file* "benchmark.org") ;;; results format: ;;; ;;; (("lisp1" (("version" "...") ;;; ("ciphers" (("cipher1" speed1) ;;; ("cipher2" speed2) ;;; (...))) ;;; ("digests" (("digest1" speed1) ;;; ("digest2" speed2) ;;; (...))) ;;; ("macs" (("mac1" speed1) ;;; ("mac2" speed2) ;;; (...))) ;;; ("modes" (("mode1" speed1) ;;; ("mode2" speed2) ;;; (...))) ;;; ("diffie-hellman" (("diffie-hellman1" speed1) ;;; ("diffie-hellman2" speed2) ;;; (...))) ;;; ("message-encryptions" (("encryption1" speed1) ;;; ("encryption2" speed2) ;;; (...))) ;;; ("signatures" (("signature1" speed1) ;;; ("signature2" speed2) ;;; (...))) ;;; ("verifications" (("verification1" speed1) ;;; ("verification2" speed2) ;;; (...))))) ;;; ("lisp2" ...) ;;; (...)) (defun write-result-file (results) (with-open-file (file *result-file* :direction :output :if-exists :supersede) (format file "#+TITLE: Speed benchmark of the Ironclad crypto library~%~%") (format file "Ironclad version: ~a~%~%" (asdf:component-version (asdf:find-system "ironclad"))) (format file "Processor: ~a (~a)~%" (machine-type) (machine-version)) (format file "Operating system: ~a (~a)~%~%" (software-type) (software-version)) (format file "Common Lisp implementations:~%") (dolist (implementation *lisp-implementations*) (let ((lisp (car implementation))) (format file " - ~a: ~a~%" lisp (cdr (assoc "version" (cdr (assoc lisp results :test #'string=)) :test #'string=))))) (terpri file) (let ((line "|----------------")) (dotimes (i (length *lisp-implementations*)) (setf line (concatenate 'string line "+------------"))) (setf line (concatenate 'string line "|")) (format file "* Ciphers~%~%") (format file "Encryption speed in bytes per second~%~%") (format file "~a~%" line) (format file "| |") (dolist (implementation *lisp-implementations*) (let ((lisp (car implementation))) (format file " ~10a |" lisp))) (terpri file) (format file "~a~%" line) (dolist (cipher-name (ironclad:list-all-ciphers)) (format file "| ~14a |" cipher-name) (dolist (implementation *lisp-implementations*) (let* ((lisp (car implementation)) (result (cdr (assoc "ciphers" (cdr (assoc lisp results :test #'string=)) :test #'string=))) (speed (cdr (assoc cipher-name result :test #'string=)))) (format file " ~10@a |" speed))) (terpri file)) (format file "~a~%~%" line) (format file "* Digests~%~%") (format file "Hashing speed in bytes per second~%~%") (format file "~a~%" line) (format file "| |") (dolist (implementation *lisp-implementations*) (let ((lisp (car implementation))) (format file " ~10a |" lisp))) (terpri file) (format file "~a~%" line) (dolist (digest-name (ironclad:list-all-digests)) (format file "| ~14a |" digest-name) (dolist (implementation *lisp-implementations*) (let* ((lisp (car implementation)) (result (cdr (assoc "digests" (cdr (assoc lisp results :test #'string=)) :test #'string=))) (speed (cdr (assoc digest-name result :test #'string=)))) (format file " ~10@a |" speed))) (terpri file)) (format file "~a~%~%" line) (format file "* Message authentication codes~%~%") (format file "CMAC: AES~%") (format file "GMAC: AES~%") (format file "HMAC: SHA256~%") (format file "SKEIN-MAC: SKEIN512~%~%") (format file "Hashing speed in bytes per second~%~%") (format file "~a~%" line) (format file "| |") (dolist (implementation *lisp-implementations*) (let ((lisp (car implementation))) (format file " ~10a |" lisp))) (terpri file) (format file "~a~%" line) (dolist (mac-name (ironclad:list-all-macs)) (format file "| ~14a |" mac-name) (dolist (implementation *lisp-implementations*) (let* ((lisp (car implementation)) (result (cdr (assoc "macs" (cdr (assoc lisp results :test #'string=)) :test #'string=))) (speed (cdr (assoc mac-name result :test #'string=)))) (format file " ~10@a |" speed))) (terpri file)) (format file "~a~%~%" line) (format file "* Block cipher modes~%~%") (format file "Cipher: AES~%~%") (format file "Encryption speed in bytes per second~%~%") (format file "~a~%" line) (format file "| |") (dolist (implementation *lisp-implementations*) (let ((lisp (car implementation))) (format file " ~10a |" lisp))) (terpri file) (format file "~a~%" line) (dolist (mode-name (ironclad:list-all-modes)) (format file "| ~14a |" mode-name) (dolist (implementation *lisp-implementations*) (let* ((lisp (car implementation)) (result (cdr (assoc "modes" (cdr (assoc lisp results :test #'string=)) :test #'string=))) (speed (cdr (assoc mode-name result :test #'string=)))) (format file " ~10@a |" speed))) (terpri file)) (format file "~a~%~%" line) (format file "* Diffie-Hellman key exchanges~%~%") (format file "ELGAMAL: 2048 bits~%~%") (format file "Diffie-Hellman speed in exchanges per second~%~%") (format file "~a~%" line) (format file "| |") (dolist (implementation *lisp-implementations*) (let ((lisp (car implementation))) (format file " ~10a |" lisp))) (terpri file) (format file "~a~%" line) (dolist (dh-name '(:curve25519 :curve448 :elgamal :secp256k1 :secp256r1 :secp384r1 :secp521r1)) (format file "| ~14a |" dh-name) (dolist (implementation *lisp-implementations*) (let* ((lisp (car implementation)) (result (cdr (assoc "diffie-hellman" (cdr (assoc lisp results :test #'string=)) :test #'string=))) (speed (cdr (assoc dh-name result :test #'string=)))) (format file " ~10@a |" speed))) (terpri file)) (format file "~a~%~%" line) (format file "* Message encryptions~%~%") (format file "ELGAMAL: 2048 bits~%") (format file "RSA: 2048 bits~%~%") (format file "Message encryption speed in encryptions per second~%~%") (format file "~a~%" line) (format file "| |") (dolist (implementation *lisp-implementations*) (let ((lisp (car implementation))) (format file " ~10a |" lisp))) (terpri file) (format file "~a~%" line) (dolist (encryption-name '(:elgamal :rsa)) (format file "| ~14a |" encryption-name) (dolist (implementation *lisp-implementations*) (let* ((lisp (car implementation)) (result (cdr (assoc "message-encryptions" (cdr (assoc lisp results :test #'string=)) :test #'string=))) (speed (cdr (assoc encryption-name result :test #'string=)))) (format file " ~10@a |" speed))) (terpri file)) (format file "~a~%~%" line) (format file "* Signatures~%~%") (format file "DSA: 2048 bits~%") (format file "ELGAMAL: 2048 bits~%") (format file "RSA: 2048 bits~%~%") (format file "Signature speed in signatures per second~%~%") (format file "~a~%" line) (format file "| |") (dolist (implementation *lisp-implementations*) (let ((lisp (car implementation))) (format file " ~10a |" lisp))) (terpri file) (format file "~a~%" line) (dolist (signature-name '(:dsa :ed25519 :ed448 :elgamal :rsa :secp256k1 :secp256r1 :secp384r1 :secp521r1)) (format file "| ~14a |" signature-name) (dolist (implementation *lisp-implementations*) (let* ((lisp (car implementation)) (result (cdr (assoc "signatures" (cdr (assoc lisp results :test #'string=)) :test #'string=))) (speed (cdr (assoc signature-name result :test #'string=)))) (format file " ~10@a |" speed))) (terpri file)) (format file "~a~%~%" line) (format file "* Signature verifications~%~%") (format file "DSA: 2048 bits~%") (format file "ELGAMAL: 2048 bits~%") (format file "RSA: 2048 bits~%~%") (format file "Signature verification speed in verifications per second~%~%") (format file "~a~%" line) (format file "| |") (dolist (implementation *lisp-implementations*) (let ((lisp (car implementation))) (format file " ~10a |" lisp))) (terpri file) (format file "~a~%" line) (dolist (signature-name '(:dsa :ed25519 :ed448 :elgamal :rsa :secp256k1 :secp256r1 :secp384r1 :secp521r1)) (format file "| ~14a |" signature-name) (dolist (implementation *lisp-implementations*) (let* ((lisp (car implementation)) (result (cdr (assoc "verifications" (cdr (assoc lisp results :test #'string=)) :test #'string=))) (speed (cdr (assoc signature-name result :test #'string=)))) (format file " ~10@a |" speed))) (terpri file)) (format file "~a~%~%" line)))) (defun benchmark () (let ((results '())) (dolist (implementation *lisp-implementations*) (let ((lisp (car implementation)) (command (cadr implementation))) (format t "Benchmarking ~a..." lisp) (finish-output) (let ((result (ignore-errors (uiop:run-program command) (with-open-file (file *implementation-result-file*) (setf results (acons lisp (read file) results)))))) (if (null result) (format t " FAILED~%") (format t " OK~%"))) (uiop:delete-file-if-exists *implementation-result-file*))) (write-result-file results) (format t "Benchmark result written to \"~a\"~%" *result-file*))) (benchmark) ironclad-0.57/doc/000077500000000000000000000000001420372057600140135ustar00rootroot00000000000000ironclad-0.57/doc/generate-html-doc.sh000077500000000000000000000004561420372057600176560ustar00rootroot00000000000000#!/usr/bin/env bash DIR=$(dirname $(readlink -f "$0")) emacs --batch \ --eval "(progn (package-initialize) (require (quote htmlize)) (require (quote ox-html)))" \ --file "${DIR}/../README.org" \ --funcall "org-html-export-to-html" mv "${DIR}/../README.html" "${DIR}/ironclad.html" ironclad-0.57/doc/ironclad.html000066400000000000000000003051741420372057600165060ustar00rootroot00000000000000 Ironclad

Ironclad

badge.svg?branch=master

Ironclad is a cryptography library written entirely in Common Lisp. It includes support for several popular ciphers, digests, MACs and public key cryptography algorithms. For several implementations that support Gray streams, support is included for convenient stream wrappers.

Most of the algorithms were written with efficiency for specific Common Lisp implementations in mind, although portable code is provided as an alternative in nearly all instances. The framework should be flexible enough to accommodate implementation-specific optimizations when possible.

Test vectors for many of the algorithms are included to provide a level of confidence in the correctness of the implementations.

Warnings

Ironclad should not be considered safe against side channel attacks.

Some algorithms can be safe against side channel attacks on some architectures using some Common Lisp implementations, but in the general case it can't be guaranteed. This is due to the fact that integers and arithmetic functions of Common Lisp implementations are usually not safe against side channel attacks.

Ironclad's digest, MAC and cipher objects should not be considered thread safe.

Creating a digest, a MAC or a cipher object and using it in several threads at the same time can lead to an undefined result. If you need to do that, you must put locks in your application where necessary.

Ironclad's pseudo random number generation should only be considered thread safe with bordeaux-threads.

If you have a multi-threaded application in which you want to use functions requiring some random numbers (key derivation, key generation, public key encryption, signature, etc.) in several threads, each of these threads must have its own PRNG, or they might generate the same "random" numbers. If the threads are created using the bordeaux-threads library (or by a library using bordeaux-threads, like lparallel), this is done automatically. However, if you are using the threading functions of your Common Lisp implementation directly, you have to bind the *prng* special variable to a new PRNG in each thread. There is an example showing how it can be done in the section about make-prng.

Installation

The current version of Ironclad is 0.57. It can be downloaded at https://github.com/sharplispers/ironclad/archive/v0.57.tar.gz. If you are feeling adventurous, you can download a bleeding-edge version at https://github.com/sharplispers/ironclad.

It comes with an ASDF system definition, so (asdf:load-system "ironclad") should be all that you need to get started. The testsuite can be run by substituting asdf:test-system for asdf:load-system in the form above.

If you are using Quicklisp to manage your libraries, just use (ql:quickload "ironclad").

When Ironclad is loaded, its functions are in the ironclad package (e.g. (ironclad:make-cipher ...)). If you prefer, you can also use the crypto nickname (e.g. (crypto:make-cipher ...)).

Ironclad has been tested in the following implementations:

  • SBCL x86/linux, x86-64/linux (primary development platforms)
  • SBCL x86-64/solaris, x86/darwin
  • CMUCL x86/linux
  • ABCL with Sun's 1.5.0 JVM
  • Lispworks 5.0.1 x86/linux
  • Lispworks 5.1.2 x86-64/darwin x86/windows
  • Allegro 8.0 x86/linux
  • Allegro 8.1 x86/linux, x86-64/linux, sparc/solaris
  • CLISP 2.41 x86/linux, x86/cygwin
  • Clozure Common Lisp 1.11 x86-64/Linux
  • Clozure Common Lisp 1.10 x86-64/darwin
  • ECL 16.1.3 x86-64/linux

All included tests should pass successfully. If you use a platform not listed above, please send your platform information so that it can be added to the above list. If the tests do not all pass, you have found a bug; please report it.

By default, Ironclad uses some implementation dependent low-level code to make some functions run much faster (currently, some assembly for SBCL and CCL, some C code for ECL). If for some reason you want to disable these optimisations and use the generic Lisp code, it can be achieved by commenting out the (pushnew :ironclad-assembly *features*) line in the src/package.lisp file.

License

Ironclad is released under a MIT-like license; you can do pretty much anything you want to with the code except claim that you wrote it.

Ciphers

(make-cipher name &key key mode initialization-vector padding tweak) => cipher

Return a cipher object suitable for use for both encryption and decryption.

name denotes the encryption algorithm to use. list-all-ciphers will tell you the names of all supported ciphers. They are:

  • 3des
  • aes
  • arcfour (rc4)
  • aria
  • blowfish
  • camellia
  • cast5
  • chacha
  • chacha/12
  • chacha/8
  • des
  • idea
  • kalyna128
  • kalyna256
  • kalyna512
  • kuznyechik
  • misty1
  • rc2
  • rc5
  • rc6
  • salsa20
  • salsa20/12
  • salsa20/8
  • seed
  • serpent
  • sm4
  • sosemanuk
  • square
  • tea
  • threefish1024
  • threefish256
  • threefish512
  • twofish
  • xchacha
  • xchacha/12
  • xchacha/8
  • xor (not a real cipher, use only for testing)
  • xsalsa20
  • xsalsa20/12
  • xsalsa20/8
  • xtea

name can be a symbol in the keyword package or in the ironclad package; :aes for AES, ironclad:arcfour for RC4, and so forth.

mode describes the mode of operation for the cipher. Stream ciphers such as Arcfour can operate in only one mode, stream. Block ciphers such as AES and DES can operate in several different modes:

  • ecb
  • cbc
  • ofb
  • cfb (note that Ironclad's CFB mode is n-bit CFB, where n is the block-length of the cipher)
  • cfb8 (this seems to be the mode other crypto packages call CFB)
  • ctr

mode should be a symbol in the keyword or ironclad packages; :stream, ironclad:ofb, and so forth. An error will be signaled if mode is not appropriate for the cipher name.

initialization-vector (IV) should be supplied only if mode requires one. initialization-vector should be a (simple-array (unsigned-byte 8) (*)). The supplied IV should be the same length as the block-length of name. The Chacha and Salsa20 stream ciphers also use an initialization vector (nonce). It should be 8 bytes long for Chacha and Salsa20, and 24 bytes long for XChacha and XSalsa20.

key is, of course, the key for the cipher. key should be a (simple-array (unsigned-byte 8) (*)).

If padding is supplied, the specified padding method will be used by encrypt and decrypt to handle short blocks when the :handle-final-block argument is supplied. padding will only be used if the mode is ECB or CBC. The possible values for padding are :pkcs7, :ansi-x923 and :iso-7816-4.

If the cipher can use a tweak (e.g. threefish), it can be specified with the tweak key parameter.

(encrypt cipher plaintext ciphertext &key plaintext-start plaintext-end ciphertext-start handle-final-block) => n-bytes-consumed, n-bytes-produced

Encrypts data according to cipher from plaintext starting at plaintext-start and continuing until plaintext-end. The encrypted data is placed in ciphertext starting at ciphertext-start.

(decrypt cipher ciphertext plaintext &key ciphertext-start ciphertext-end plaintext-start handle-final-block) => n-bytes-consumed, n-bytes-produced

Decrypts data according to cipher from ciphertext starting at ciphertext-start and continuing until ciphertext-end. The decrypted data is placed in plaintext starting at plaintext-start.

(encrypt-in-place cipher text &key start end) => n-bytes-consumed, n-bytes-produced
(decrypt-in-place cipher text &key start end) => n-bytes-consumed, n-bytes-produced

Encrypts or decrypts data in text between start and end "in-place" according to cipher. These functions are shorthand for:

(encrypt cipher text text :plaintext-start start :plaintext-end end :ciphertext-start start)
(decrypt cipher text text :ciphertext-start start :ciphertext-end end :plaintext-start start)

Note: encrypt-in-place and decrypt-in-place do not support a handle-final-block parameter as encrypt and decrypt do. If you need the functionality that handle-final-block provides, then you need to use encrypt and decrypt.

Note: n-bytes-consumed and n-bytes-produced may not always be equal to the length of the data specified in the call to encrypt-in-place or decrypt-in-place. This subtlely is also present in encrypt or decrypt.

(encrypt-message cipher message &key start end &allow-other-keys) => encrypted-message

Return the message between start and end encrypted with the cipher; the class of cipher determines the algorithm used to encrypt the message.

(decrypt-message cipher message &key start end &allow-other-keys) => decrypted-message

Return the message between start and end decrypted by the cipher; the class of cipher determines the algorithm used to decrypt the message.

Inquiry functions

(list-all-ciphers) => list

Returns a list of cipher-names that may be validly passed to make-cipher.

(cipher-supported-p name) => boolean

Returns t if name would be in the list returned by list-all-ciphers, nil otherwise.

(key-lengths cipher) => list

Return a list of valid key lengths for cipher.

(block-length cipher) => number

Return the number of octets cipher processes at a time. This function always returns 1 for stream ciphers.

Key stream position

Block ciphers in CTR mode and some stream ciphers have the ability to change the current position within the key stream in constant time instead of having to consume all the bytes until the desired position is reached.

(keystream-position cipher &optional position) => number or boolean

Return or change the current position within the key stream of a cipher. When position is not supplied, keystream-position returns the current position in the key stream, or nil if it can't be determined. When position is supplied, the key stream position of the cipher is set to that position if possible. keystream-position returns t if the repositioning is performed successfully, or nil otherwise.

keystream-position can be used with the following ciphers:

  • all the block ciphers (aes, twofish, etc.) in CTR mode
  • chacha
  • chacha/12
  • chacha/8
  • salsa20
  • salsa20/12
  • salsa20/8
  • xchacha
  • xchacha/12
  • xchacha/8
  • xsalsa20
  • xsalsa20/12
  • xsalsa20/8

Digests

Digest functions, also known as hash functions, produce fixed-length output (a digest or hash) from a variable-length message. The simplest example of a digest function is one that adds up all the bytes in the message modulo 256. This digest function fails one test of a cryptographically secure hash function: it must be difficult to find a message with a given digest. It also fails the other test: it must be difficult to find two messages with the same digest.

Ironclad provides several cryptographically secure digest functions and several non-cryptographically secure digest functions.

Note: In the functions below, messages or parts thereof are provided as octet vectors; Ironclad has no facilities for producing digests of strings. If you need to obtain the digest of a string, then you need to figure out how to convert it to an octet vector first. This is a deliberate design decision. Characters are not equivalent to bytes. See your local Unicode guru for more details.

(make-digest digest-name &rest keys &key &allow-other-keys) => digester

Returns a digest object. digest-name is a keyword naming the algorithm you wish digester to use. The supported digest names can be found by calling list-all-digests. They are:

  • adler32
  • blake2
  • blake2/160
  • blake2/256
  • blake2/384
  • blake2s
  • blake2s/128
  • blake2s/160
  • blake2s/224
  • crc24
  • crc32
  • groestl
  • groestl/224
  • groestl/256
  • groestl/384
  • jh
  • jh/224
  • jh/256
  • jh/384
  • keccak
  • keccak/224
  • keccak/256
  • keccak/384
  • kupyna
  • kupyna/256
  • md2
  • md4
  • md5
  • ripemd-128
  • ripemd-160
  • sha1
  • sha224
  • sha256
  • sha3
  • sha3/224
  • sha3/256
  • sha3/384
  • sha384
  • sha512
  • shake128
  • shake256
  • skein1024
  • skein1024/384
  • skein1024/512
  • skein256
  • skein256/128
  • skein256/160
  • skein256/224
  • skein512
  • skein512/128
  • skein512/160
  • skein512/224
  • skein512/256
  • skein512/384
  • sm3
  • streebog
  • streebog/256
  • tiger
  • tree-hash
  • whirlpool

Like for make-cipher, digest-name should be a symbol in the keyword or ironclad packages.

Some algorithms (e.g. shake128 and shake256) can produce digests of any size. The size of the digest in bytes can be specified with the output-length key parameter:

(make-digest :shake256 :output-length 123)
(update-digest digester thing &key &allow-other-keys) => (values)

Updates the internal state of digester with the contents of thing. The exact method is determined by the type of thing.

There are several methods defined on this generic function that take a particular digester and a (simple-array (unsigned-byte 8) (*)) as well as the usual start and end keyword arguments. These methods update the state of digester with the subsequence of the array denoted by start and end. They are not listed here because there's one method for every type of digest that Ironclad provides, and listing them would get very tedious for no benefit. An example should suffice.

(let ((digester (ironclad:make-digest :sha1))
      (array (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0)))
  ;; Update with 16 zeroes.
  (ironclad:update-digest digester array)
  ;; Update with 8 ones.
  (fill array 1 :start 2 :end 10)
  (ironclad:update-digest digester array :start 2 :end 10))
(update-digest digester (stream stream) &key buffer start end &allow-other-keys) => digester

Update the internal state of digester with the contents of stream, which must respond to read-byte or read-sequence with a (simple-array (unsigned-byte 8) (*)) and return digester. It differs from digest-stream, below, in that you may need to digest data before or after the contents of stream (this happens, for instance, when signing the contents of some file).

(produce-digest digester &key digest digest-start) => digest

Return the digest of the data processed by digester so far.

If digest is provided, the computed digest will be placed into digest starting at digest-start. digest must be a (simple-array (unsigned-byte 8) (*)). An insufficient-buffer-space error will be signaled if there is insufficient space in digest.

High-level convenience functions

Several high-level convenience functions that encapsulate common sequences of make-digest, update-digest and produce-digest are provided by Ironclad as well. They come in two flavors: the first takes a digest name as would be provided to make-digest. The second way to call these functions is to provide an actual digest object as the first argument. So one can say:

(ironclad:digest-sequence :md5 *buffer*)

or, equivalently:

(let ((digester (ironclad:make-digest :md5)))
  (ironclad:digest-sequence digester *buffer*))

The second form comes in handy if you plan on reusing the digest object.

(digest-sequence digest-spec sequence &rest args &key start end digest digest-start) => digest

Returns the digest of the subsequence of sequence bounded by start and end, according to digest-name. sequence must be a (vector (unsigned-byte 8)). digest and digest-start are as in produce-digest.

(digest-stream digest-spec stream &rest args &key buffer start end digest digest-start) => digest

Returns the digest of the contents of the stream specified by stream. read-byte must be a legal operation on stream and return an (unsigned-byte 8). In a similar fashion, read-sequence on stream must support reading into a (simple-array (unsigned-byte 8) (*)). digest and digest-start are as in produce-digest.

If buffer is provided, it must be a (simple-array (unsigned-byte 8) (*)); the portion of buffer between start and end will be used to read the data from the stream.

(digest-file digest-spec pathname &rest args &key buffer start end digest digest-start) => digest

Returns the digest of the contents of the file named by pathname. digest and digest-start are as in produce-digest.

If buffer is provided, it must be a (simple-array (unsigned-byte 8) (*)); the portion of buffer between start and end will be used to read the data from the stream.

Inquiry functions

(list-all-digests) => list

Returns a list whose elements may be validly passed to make-digest.

(digest-supported-p name) => boolean

Returns t if name would be in the list returned by list-all-digests, nil otherwise.

(digest-length digest) => number

Returns the length of the digest computed by digest, which may be a digest-name or a digest instance.

Miscellaneous

Ironclad digests are CLOS objects; the interesting thing about this for most purposes is that functions like reinitialize-instance are supported. This means one can write a fairly efficient clone of the md5sum program like so:

(defun digest-sum-files (digest-name &rest files)
  (unless files
    (error "no files given to digest"))
  (loop with buffer = (make-array 8192 :element-type '(unsigned-byte 8))
        with digest = (make-array (ironclad:digest-length digest-name)
                                  :element-type '(unsigned-byte 8))
       for file in files
       for digester = (ironclad:make-digest digest-name)
       then (reinitialize-instance digester)
       do (ironclad:digest-file digester file :buffer buffer :digest digest)
          (format t "~A ~A~%" (file-namestring file)
                  (ironclad:byte-array-to-hex-string digest))))

Tree hashes

Ironclad supports tree hashes, as described in Tree Hash EXchange format. You create tree hashes as if you were creating a digest:

(ironclad:make-digest :tree-hash)

By default, this creates a tree hash that uses the Tiger digest algorithm internally and a segment size of 1024. Since using the Tiger digest algorithm is so common, a convenience function that makes your intent obvious has also been provided:

(ironclad:make-tiger-tree-hash)

You may indicate that you wish to use a different algorithm than Tiger:

(ironclad:make-digest '(:treehash :digest :sha256))

Or you might wish to use a different segment size:

(ironclad:make-digest '(:tree-hash :block-length 16384))

There is currently no interface for obtaining the intermediate hashes computed while computing the final tree hash.

Message authentication codes

A message authentication code is a cryptographic function of some data and a user-specified key. Only a person knowing the key can recompute the MAC for the given message. A MAC is useful where maintaining data integrity is required, but the secrecy of the data is not paramount.

Ironclad provides different kinds of MACs:

  • HMAC, specified in RFC 2104
  • CMAC, specified in RFC 4493 and NIST document 800-38B
  • GMAC, specified in NIST document 800-38D
  • Blake2 and Blake2s MAC
  • Poly1305
  • SipHash
  • Skein MAC
(make-mac mac-name key &rest args) => mac

Return a MAC object initialized with a secret key. mac-name is a keyword naming the algorithm you wish mac to use. The supported MACs can be found by calling list-all-macs. They are:

  • blake2-mac
  • blake2s-mac
  • cmac
  • gmac
  • hmac
  • poly1305
  • siphash
  • skein-mac

Like for make-digest, mac-name should be a symbol in the keyword or ironclad packages.

Some MACs take extra arguments that can be specified in args.

(make-mac :blake2-mac key &key digest-length)
(make-mac :blake2s-mac key &key digest-length)
(make-mac :cmac key cipher-name)
(make-mac :gmac key cipher-name initialization-vector)
(make-mac :hmac key digest-name)
(make-mac :poly1305 key)
(make-mac :siphash key &key compression-rounds finalization-rounds digest-length)
(make-mac :skein-mac key &key block-length digest-length)

When making a Blake2 MAC, the length of the key passed to make-mac must be 64 bytes.

When making a Blake2s MAC, the length of the key passed to make-mac must be 32 bytes.

When making a CMAC, cipher-name must have a block-length of either 8, 16, 32, 64 or 128; this restriction is satisfied by many ciphers in Ironclad with the notable exception of stream ciphers. key must be an acceptable key for cipher-name.

When making a GMAC, cipher-name must have a block-length of 16. key must be an acceptable key for cipher-name.

When making a Poly1305 MAC, the length of the key passed to make-mac must be 32 bytes.

When making a SipHash MAC, the length of the key passed to make-mac must be 16 bytes. digest-length is 8 by default, but it can also be set to 16. By default, compression-rounds is 2 and finalization-rounds is 4.

When making a Skein MAC, block-length can be 32 (to use the Skein256 hash function internally), 64 (to use Skein512) or 128 (to use Skein1024). digest-length can be any length you want the computed digest to be. By default, block-length is 64 and digest-length is 64.

MAC objects support reinitialize-instance:

(reinitialize-instance mac &rest initargs &key key &allow-other-keys) => mac

The :key argument is the secret key, as provided to make-mac.

(update-mac mac thing &key &allow-other-keys) => (values)

Updates the internal state of mac with the contents of thing. The exact method is determined by the type of thing.

There are several methods defined on this generic function that take a particular MAC and a (simple-array (unsigned-byte 8) (*)) as well as the usual start and end keyword arguments. These methods update the state of mac with the subsequence of the array denoted by start and end. They are not listed here because there's one method for every type of MAC that Ironclad provides, and listing them would get very tedious for no benefit. An example should suffice.

(let* ((key (random-data 32))
       (mac (ironclad:make-mac :hmac key :sha256))
       (array (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0)))
  ;; Update with 16 zeroes.
  (ironclad:update-mac mac array)
  ;; Update with 8 ones.
  (fill array 1 :start 2 :end 10)
  (ironclad:update-mac mac array :start 2 :end 10))
(produce-mac mac &key digest digest-start) => digest

Return the digest of the data processed by mac so far. The internal state of mac is not modified; this feature makes it possible to compute a "rolling MAC" of a document.

If digest is provided, the computed digest will be placed into digest starting at digest-start. digest must be a (simple-array (unsigned-byte 8) (*)). An insufficient-buffer-space error will be signaled if there is insufficient space in digest.

The length of the digest returned by produce-mac is determined by the kind of MAC and the extra arguments passed to make-mac:

  • blake2-mac: from 1 to 64 bytes (64 by default)
  • blake2s-mac: from 1 to 32 bytes (32 by default)
  • cmac: block-length of the cipher-name passed to make-mac
  • gmac: 16 bytes
  • hmac: digest-length of the digest-name passed to make-mac
  • poly1305: 16 bytes
  • siphash: digest-length passed to make-mac (8 by default)
  • skein-mac: digest-length passed to make-mac (64 by default)

Inquiry functions

(list-all-macs) => list

Returns a list whose elements may be validly passed to make-mac.

(mac-supported-p name) => boolean

Returns t if name would be in the list returned by list-all-macs, nil otherwise.

Authenticated encryption

(make-authenticated-encryption-mode name &rest args) => mode

Return an authenticated encryption object suitable for use for both encryption and decryption.

name denotes the mode to use. list-all-authenticated-encryption-modes will tell you the names of all the supported modes. They are:

  • eax (Encrypt then authenticate then translate)
  • etm (Encrypt then MAC)
  • gcm (Galois counter mode)

name can be a symbol in the keyword or ironclad packages.

args depends on the chosen authenticated encryption mode.

(make-authenticated-encryption-mode :eax &key tag cipher-name key initialization-vector)
(make-authenticated-encryption-mode :etm &key tag cipher mac)
(make-authenticated-encryption-mode :gcm &key tag cipher-name key initialization-vector)

If tag is specified, it will be used at the end of decryption (when the handle-final-block flag is t) to check the authenticity of the data. A bad-authentication-tag error will be signaled if the data is not authentic. If you don't specify it, you will have to call produce-tag after decryption and check that the tags match (e.g. using constant-time-equal).

When using EAX, key must be a suitable key for the chosen cipher-name.

When using ETM, cipher must be a cipher object created by make-cipher. mac must be a mac object created by make-mac.

When using GCM, cipher-name must have a block-length of 16 bytes. key must be a suitable key for the chosen cipher.

(process-associated-data mode data &key start end) => (values)

Update the internal state of mode with the contents of data between start and end so that they are taken into consideration in the authentication tag.

An authenticated encryption object can be used with the encrypt, decrypt, encrypt-message and decrypt-message functions.

(encrypt mode plaintext ciphertext &key plaintext-start plaintext-end ciphertext-start handle-final-block)
(decrypt mode ciphertext plaintext &key ciphertext-start ciphertext-end plaintext-start handle-final-block)
(encrypt-message mode message &key start end associated-data associated-data-start associated-data-end)
(decrypt-message mode message &key start end associated-data associated-data-start associated-data-end)
(produce-tag mode &key tag tag-start) => tag

Return the authentication tag of the data processed by mode so far. If tag is provided, the computed tag will be placed into tag starting at tag-start. tag must be a (simple-array (unsigned-byte 8) (*)). An insufficient-buffer-space error will be signaled if there is insufficient space in tag.

Inquiry functions

(list-all-authenticated-encryption-modes) => list

Returns a list whose elements may be validly passed to make-authenticated-encryption-mode.

(authenticated-encryption-mode-supported-p name) => boolean

Returns t if name would be in the list returned by list-all-authenticated-encryption-modes nil otherwise.

Key derivation functions

Ironclad comes with a few key derivation functions:

  • Argon2 (only Argon2d and Argon2i without parallelism are implemented)
  • Bcrypt
  • Bcrypt-pbkdf
  • PBKDF1
  • PBKDF2
  • Scrypt
  • HMAC
(derive-key kdf passphrase salt iteration-count key-length) => digest

Given a key derivation function object (produced by make-kdf), a password and salt (both must be of type (simple-array (unsigned-byte 8) (*))), and number of iterations, returns the password digest as a byte array of length key-length.

For bcrypt, the salt must be 16 bytes long, the iteration-count must be a power of 2 between 24 and 231, and the key-length must be 24. Scrypt and HMAC ignore the iteration-count parameter.

For bcrypt-pbkdf, the key-length must be between 1 and 1024.

(make-kdf kind &key digest n r p block-count additional-key additional-data) => kdf

Returns a key derivation function instance.

kind denotes the key derivation function to use. They are:

  • argon2d
  • argon2i
  • bcrypt
  • bcrypt-pbkdf
  • pbkdf1
  • pbkdf2
  • scrypt-kdf
  • hmac-kdf

kind can be a symbol in the keyword or ironclad packages.

The Argon2 key derivations use the block-count, additional-key and additional-data parameters (block-count is the number of 1 KiB memory blocks used by the function and it must be at least 8, additional-key and additional-data are optional). The PBKDF algorithms use digest. The Scrypt key derivation uses cost parameters N, r and p (N is a CPU cost parameter that must be a power of 2, r and p are memory cost parameters that must be defined such that r * p <= 230).

The default Scrypt parameters are N = 4096, r = 8, and p = 2. Please note that depending on the values of N and r, derive-key may not be able to allocate sufficient space for its temporary arrays.

The HMAC-KDF algorithm uses the digest parameter to precise what hash function is used. It also optionally uses the additional-data to precise the info vector from the RFC.

(list-all-kdfs) => list

Returns a list of KDF kinds that may be validly passed to make-kdf.

PBKDF convenience functions

Ironclad comes with convenience functions for using PBKDF1 and PBKDF2 to store passwords.

(pbkdf2-hash-password password &key salt digest iterations) => password

Convenience function for hashing passwords using the PBKDF2 algorithm. Returns the derived hash of the password, and the original salt, as byte vectors.

(pbkdf2-hash-password-to-combined-string password &key salt digest iterations) => password

Convenience function for hashing passwords using the PBKDF2 algorithm. Returns the derived hash of the password as a single string that encodes the given salt and PBKDF2 algorithm parameters.

(pbkdf2-check-password password combined-salt-and-digest) => boolean

Given a password byte vector and a combined salt and digest string produced by pbkdf2-hash-password-to-combined-string, checks whether the password is valid.

Public key cryptography

Ironclad includes support for a few public key cryptography algorithms.

Encryption algorithms:

  • Elgamal
  • RSA

Signature algorithms:

  • DSA
  • Ed25519
  • Ed448
  • Elgamal
  • RSA
  • Secp256k1
  • Secp256r1 (a.k.a. NIST P-256)
  • Secp384r1 (a.k.a. NIST P-384)
  • Secp521r1 (a.k.a. NIST P-521)

Diffie-Hellman key exchange:

  • Curve25519
  • Curve448
  • Elgamal
  • Secp256k1
  • Secp256r1 (a.k.a. NIST P-256)
  • Secp384r1 (a.k.a. NIST P-384)
  • Secp521r1 (a.k.a. NIST P-521)

Key pair generation

(generate-key-pair kind &key num-bits &allow-other-keys) => private-key, public-key

Return a key pair according to kind. The generation of DSA, Elgamal and RSA key pairs can take some time. If kind is :dsa or :rsa, the num-bits key argument indicating the size of the keys to generate must be specified. If kind is :elgamal, num-bits must be specified unless compatible-with-key is specified, in which case the group parameters are taken from the specified key instead of being generated.

For example, if Alice wants to generate a key pair for a Diffie-Hellman exchange with Bob's Elgamal key pair:

(generate-key-pair :elgamal :compatible-with-key bob-public-key)
(list-all-key-pair-kinds) => list

Returns a list of key pair kinds that may be validly passed to generate-key-pair.

Key construction

(make-public-key kind &key &allow-other-keys) => public-key

Return a public key according to kind. The &key arguments vary according to kind. The interesting bits are in the methods that specialize on kind, below.

(make-public-key :curve25519 &key y) => public-key
(make-public-key :curve448 &key y) => public-key
(make-public-key :dsa &key p q g y) => public-key
(make-public-key :ed25519 &key y) => public-key
(make-public-key :ed448 &key y) => public-key
(make-public-key :elgamal &key p g y) => public-key
(make-public-key :rsa &key e n) => public-key
(make-public-key :secp256k1 &key y) => public-key
(make-public-key :secp256r1 &key y) => public-key
(make-public-key :secp384r1 &key y) => public-key
(make-public-key :secp521r1 &key y) => public-key
(make-private-key kind &key &allow-other-keys) => private-key

Return a private key according to kind. The &key arguments vary according to kind. The interesting bits are in the methods that specialize on kind, below.

(make-private-key :curve25519 &key x y) => private-key
(make-private-key :curve448 &key x y) => private-key
(make-private-key :dsa &key p q g y x) => private-key
(make-private-key :ed25519 &key x y) => private-key
(make-private-key :ed448 &key x y) => private-key
(make-private-key :elgamal &key p g y x) => private-key
(make-private-key :rsa &key d n p q) => private-key
(make-private-key :secp256k1 &key x y) => private-key
(make-private-key :secp256r1 &key x y) => private-key
(make-private-key :secp384r1 &key x y) => private-key
(make-private-key :secp521r1 &key x y) => private-key

For Curve25519, Curve448, Ed25519, Ed448 keys, Secp256k1, Secp256r1, Secp384r1 and Secp521r1, the type of the parameters is (simple-array (unsigned-byte 8) (*)):

  • x, the secret key
  • y, the public key

For DSA and Elgamal keys, the type of the parameters is integer:

  • p, the prime number defining the DL group
  • q, the prime number defining the DL sub-group
  • g, the generator
  • y, the public key
  • x, the private key

For RSA keys, the type of the parameters is integer:

  • n, the modulus
  • e, the public key
  • d, the private key
  • p, the first prime factor of n
  • q, the second prime factor of n

Key destructuring

The destructure-public-key and destructure-private-key functions can be useful if you need to store keys somewhere for future use.

(destructure-public-key public-key) => plist

Return the elements of a public key in a plist. The indicators of the plist match the &key arguments of the make-public-key method.

(destructure-private-key private-key) => plist

Return the elements of a private key in a plist. The indicators of the plist match the &key arguments of the make-private-key method.

Digital signatures

(sign-message key message &key start end &allow-other-keys) => signature

Return a signature of message between start and end signed with key; the class of key determines the algorithm used to create the signature.

Note: The sign-message does not perform the hashing of the data. You should hash your data using your favorite hash function, and then use this hash as the message passed to sign-message.

(verify-signature key message signature &key start end &allow-other-keys) => boolean

Verify whether signature is a valid signature of message between start and end using key. Return t is the signature is valid and nil otherwise.

Padding

To be secure, RSA signature requires the message to be padded. The pss key parameter is provided to pad (or unpad) the message during signature (or verification) with the PSS scheme of PKCS-1. The value of the pss key parameter can be either a digest name or t (which will use the sha1 digest).

(sign-message rsa-private-key message :pss t) => signature
(verify-signature rsa-public-key message signature :pss t) => boolean

The functions pss-encode and pss-decode can also be used by hand if necessary.

Signature nonce

DSA, Elgamal and ECDSA (Secp256k1, Secp256r1, Secp384r1 and Secp521r1) signatures require the generation of a nonce. You must never sign two different messages with the same key and the same nonce, or anyone having these two signatures will be able compute your private key. Ironclad uses the generate-signature-nonce method which by default generates random nonces.

(generate-signature-nonce (key message &optional parameters)) => nonce

For DSA, parameters is q. For Elgamal, parameters is p. For ECDSA, parameters is nil.

If instead of random nonces, you want to have deterministic nonces (e.g. like in RFC 6979), you will have to redefine generate-signature-nonce. For example, to have deterministic nonces for Secp256k1 ECDSA signatures, you could do something like:

(defmethod generate-signature-nonce ((key secp256k1-private-key) message &optional parameters)
  (declare (ignore parameters))
  (compute-deterministic-nonce key message))

Format of signatures

sign-message returns signatures as octet vectors. When the signature contains several values (e.g. the R and S values of DSA signatures), the octet vector is the concatenation of these values (e.g. the first half of the vector is the R value, the second half is the S value). You can use the make-signature and destructure-signature functions if you need access to the elements of a signature (e.g. to use a different kind of serialization).

(make-signature kind &key &allow-other-keys) => signature

Return an octet vector representing a signature. The &key arguments vary according to kind. The interesting bits are in the methods that specialize on kind, below.

(make-signature :dsa &key r s n-bits) => signature
(make-signature :ed25519 &key r s) => signature
(make-signature :ed448 &key r s) => signature
(make-signature :elgamal &key r s n-bits) => signature
(make-signature :rsa &key s n-bits) => signature
(make-signature :secp256k1 &key r s) => signature
(make-signature :secp256r1 &key r s) => signature
(make-signature :secp384r1 &key r s) => signature
(make-signature :secp521r1 &key r s) => signature

For Ed25519, Ed448, Secp256k1, Secp256r1, Secp384r1 and Secp521r1 signatures, the type of the parameters r and s is (simple-array (unsigned-byte 8) (*)).

For DSA and Elgamal signatures, the type of the parameters r, s and n-bits is integer.

For RSA signatures, the type of the parameters s and n-bits is integer.

(destructure-signature kind signature) => plist

Return the elements of a signature in a plist. The indicators of the plist match the &key arguments of the make-signature method.

Encryption and decryption

(encrypt-message key message &key start end &allow-other-keys) => encrypted-message

Return the message between start and end encrypted with the key; the class of key determines the algorithm used to encrypt the message.

(decrypt-message key message &key start end n-bits &allow-other-keys) => decrypted-message

Return the message between start and end decrypted by the key; the class of key determines the algorithm used to decrypt the message. n-bits can be used to indicate the expected size of the decrypted message (e.g. a small byte vector starting with zeros encrypted without padding, which is probably a bad idea, c.f. Padding section).

Padding

To be secure, RSA encryption requires the message to be padded. The oaep key parameter is provided to pad (or unpad) the message during encryption (or decryption) with the OAEP scheme of PKCS-1. The value of the oaep key parameter can be either a digest name or t (which will use the sha1 digest).

(encrypt-message rsa-public-key message :oaep t) => encrypted-message
(decrypt-message rsa-private-key message :oaep t) => decrypted-message

The functions oaep-encode and oaep-decode can also be used by hand if necessary.

Format of messages

encrypt-message returns encrypted messages as octet vectors. When the message contains several values (e.g. the C1 and C2 values of Elgamal messages), the octet vector is the concatenation of these values (e.g. the first half of the vector is the big-endian representation of the C1 value, the second half is the C2 value). You can use the make-message and destructure-message functions if you need access to the elements of a message (e.g. to use a different kind of serialization).

(make-message kind &key &allow-other-keys) => message

Return an octet vector representing a message. The &key arguments vary according to kind. The interesting bits are in the methods that specialize on kind, below.

(make-message :elgamal &key c1 c2 n-bits) => message
(make-message :rsa &key m n-bits) => message

For Elgamal messages, the type of the parameters c1, c2 and n-bits is integer.

For RSA signatures, the type of the parameters m and n-bits is integer.

(destructure-message kind message) => plist

Return the elements of a message in a plist. The indicators of the plist match the &key arguments of the make-message method.

Diffie-Hellman key exchange

(diffie-hellman private-key public-key) => bytes

Return a secret shared by two users Alice and Bob, computed from Alice's private key and Bob's public key (these keys must be compatible, i.e. have the same group parameters).

Pseudo-random number generation

The *prng* special variable indicates which pseudo-random number generator is used by default by functions that need to generate some random data. It defaults to a sensible OS-specific value.

The vast, vast vast number of users should just use the default os-prng (which uses /dev/urandom on Unix and CryptGenRandom on Windows). For users who need deterministic, high-quality-random-seeming numbers (e.g. for Monte Carlo simulations), fortuna-generator is provided. Finally, if you're running on a platform without a decent PRNG (these are few and far between now), you may require the full fortuna-prng. When in doubt, use os-prng, which is the default.

(make-prng name &key seed) => prng

Create a pseudo-random number generator.

name denotes the style of PRNG to use. list-all-prngs will tell you the names of all supported PRNGs. Currently supported PRNGs are:

  • OS
  • Fortuna
  • Fortuna-generator

name can be a symbol in the keyword package or in the ironclad package.

seed is a seed descriptor. If nil, the PRNG will not be seeded (which may prevent it from generating output until it is seeded, depending on the PRNG in question). If :random then the PRNG will be seeded with the OS's cryptographically-secure PRNG. If :urandom then the PRNG will be seeded with the OS's fast-but-potentially-less-secure PRNG, if available (if not, will fallback to :random). If it is a pathname indicator, a seed will be read from the indicated file, then a new seed will be generated and written back to the file (over-writing the old seed). Finally, if it is a byte vector, it will be used to seed the PRNG.

In single-threaded applications, you should very rarely need to call make-prng; the default OS-provided PRNG should be appropriate in nearly all cases.

In multi-threaded applications, each thread that will use functions requiring random data must have its own PRNG, or several threads might generate the same "random" data. If the threads are created using the bordeaux-threads library (or by a library using bordeaux-threads, like lparallel), this is done automatically. However, if you are using the threading functions of your Common Lisp implementation directly, you have to bind the *prng* special variable to a new PRNG in each thread. For example:

(make-thread (lambda ()
               (let ((crypto:*prng* (crypto:make-prng :os)))
                 (forms-for-thread-1))))

(make-thread (lambda ()
               (let ((crypto:*prng* (crypto:make-prng :os)))
                 (forms-for-thread-2))))
(list-all-prngs) => list

List all known PRNG types.

(random-data num-bytes &optional prng) => bytes

Generate num-bytes bytes of random data from prng. Updates the state of the generator.

(random-bits num-bits &optional prng) => integer

Generate an integer with num-bits bits.

(strong-random limit &optional prng) => number

A drop-in replacement for common-lisp:random, strong-random generates a number (an integer if limit is an integer and a float if it is a float) between 0 and limit - 1 in an unbiased fashion.

(read-os-random-seed source &optional prng) => reseed-count

Read an OS-provided random seed (from /dev/urandom or /dev/random on Unix; CryptGenRandom on Windows) and reseed prng.

source may be :random, which indicates /dev/random or :urandom, which indicates /dev/urandom. On Windows, CryptGenRandom is always used.

(read-seed path &optional prng) => t

Read enough bytes from path to reseed prng, then generate a pseudo-random seed and write it back to path. If path doesn't exist, calls read-os-random-seed to get a truly random seed from the OS. Note that reseeding does not reset the generator's state to the seed value; rather, it combines the generator's state with the seed to form a new state.

(write-seed path &optional prng) => t

Generate enough random data to reseed prng, then write it to path.

Example

(crypto:random-data 16)
=> #(61 145 133 130 220 200 90 86 0 101 62 169 0 40 101 78)

(crypto:strong-random 16)
=> 3

(crypto:random-bits 16)
=> 41546

Fortuna

You should only use the Fortuna PRNG if your OS does not provided a sufficiently-good PRNG. If you use a Unix or Unix-like OS (e.g. Linux), macOS or Windows, it does. Only use the Fortuna PRNG if you know for certain that you need it.

Fortuna is a cryptographically-secure random number presented by Ferguson, Schneier and Kohno in Cryptography Engineering. It is built around 32 entropy pools, which are used with decreasing frequency for each reseed (e.g. pool 0 is used in each reseed, pool 1 in every other reseed, pool 2 in every fourth reseed and so forth). Pools are seeded with data from up to 256 sources.

Each application should have one or more entropy sources (say, one for each OS random number source, one for the low bits of the current time, one for the output of a particular command or group of commands and so forth). A source should be used to add randomness to each pool in order, so source 0 should top up pool 0, then pool 1, and so forth up to pool 31, then loop back to pool 1 again. Be very careful to spread entropy across all 32 pools.

Fortuna automatically feeds entropy from the pools back into its random state when random-data is called, using a method designed to make it resistant to various avenues of attack; even in case of generator compromise it will return to a safe state within a bounded time.

For purposes of reseeding, Fortuna will not reseed until the first pool contains 128 bits of entropy; +min-pool-size+ sets the number of bytes this is; it defaults to a very conservative 128, meaning that by default each byte of event is assumed to contain a single bit of randomness.

It also will not reseed more than ten times per second.

(add-random-event source pool-id event &optional prng) => pool-length

Add entropy to prng.

source is an integer in the range 0-255 specifiying the event's application-defined source.

pool-id is an integer in the range 0-31 specifying the pool to top up.

event is up to 32 bytes of data (for longer events, hash them down or break them up into chunks).

Gray streams

Ironclad includes support for several convenient stream abstractions based on Gray streams. Gray streams support in Ironclad is included for SBCL, CMUCL, OpenMCL/CCL, Lispworks, ABCL, ECL, Clisp and Allegro.

Octet streams

Octet streams are very similar to Common Lisp's string-stream except they deal in octets instead of characters.

(make-octet-input-stream buffer &optional start end) => octet-input-stream

As make-string-input-stream, only with octets instead of characters.

(make-octet-output-stream) => octet-output-stream

As make-string-output-stream, only with octets instead of characters.

(get-output-stream-octets stream) => octet-vector

As get-output-stream-string, only with an octet output-steam instead of a string output-stream.

(with-octet-input-stream ((var buffer &optional (start 0) end) &body body))

Within body, var is bound to an octet input stream. Reading from var gives the bytes between the indexes start and end of buffer. The result of the last form of body is returned.

(with-octet-output-stream ((var) &body body)) => bytes

Within body, var is bound to an octet output stream. After all the forms in body have been executed, the data that has been written to var (and that hasn't been consumed by a call to get-output-stream-octets within body) is returned.

Digest streams

Digest streams compute a digest of the data written to them according to a specific digest algorithm.

Example:

(defun frobbing-function (stream)
  ;; We want to compute a digest of the data being written to STREAM
  ;; without involving our callees in the process.
  (let* ((digesting-stream (crypto:make-digesting-stream :sha1))
         (stream (make-broadcast-stream stream digesting-stream)))
    ;; Feed data to STREAM.
    (frob-guts stream)
    ;; Do something with the digest computed.
    (... (crypto:produce-digest digesting-stream) ...)
    ...))
(make-digesting-stream digest &rest args) => stream

Make a stream that computes a digest of the data written to it according to the algorithm digest. The parameters that can be used by some algorithms can be specified as args. produce-digest may be used to obtain a digest of all the data written to the stream.

Note: Calling produce-digest on a digest stream does not alter the internal state of the digest.

(with-digesting-stream (var digest-name &rest args) &body body) => digest

Within body, var is bound to a digesting stream for the digest-name algorithm. After all the forms in body have been executed, the digest of the data that has been written to var is returned.

Cipher streams

Cipher streams encrypt or decrypt the data written to or read from them according to a specific cipher algorithm.

(make-encrypting-stream stream cipher mode key &key initialization-vector direction) => stream

Make a stream wrapped around the binary stream stream that encrypts data according to the algorithm cipher initialized with a mode, a key and an initialization-vector. If direction is :input, the data read from the created input stream is the encryption of the data coming from stream. If direction is :output, the data written to the created output stream is encrypted before being sent to stream.

(make-decrypting-stream stream cipher mode key &key initialization-vector direction) => stream

Make a stream wrapped around the binary stream stream that decrypts data according to the algorithm cipher initialized with a mode, a key and an initialization-vector. If direction is :input, the data read from the created input stream is the decryption of the data coming from stream. If direction is :output, the data written to the created output stream is decrypted before being sent to stream.

Note: Only stream ciphers and block ciphers in CTR, CFB, CFB8 or OFB mode are supported by make-encrypting-stream and make-decrypting-stream.

(with-encrypting-stream ((var stream cipher mode key &key initialization-vector direction) &body body))

Within body, var is bound to an encrypting stream. The result of the last form of body is returned.

(with-decrypting-stream ((var stream cipher mode key &key initialization-vector direction) &body body))

Within body, var is bound to a decrypting stream. The result of the last form of body is returned.

MAC streams

MAC streams compute a message authentication code of the data written to them according to a specific MAC algorithm.

(make-authenticating-stream mac key &rest args) => stream

Make a stream that computes a MAC of the data written to it according to the algorithm mac initialized with a key. The parameters used to create the MAC can be specified as args. produce-mac may be used to obtain a MAC of all the data written to the stream.

Note: Calling produce-mac on a MAC stream does not alter the internal state of the MAC.

Example: encrypt some data and compute a MAC of the ciphertext

(let* ((data ...)
       (output-stream ...)
       (encryption-key ...)
       (authentication-key ...)
       (iv ...)
       (mac-stream (make-authenticating-stream :hmac
                                               authentication-key
                                               :sha3))
       (stream (make-broadcast-stream output-stream mac-stream))
       (cipher-stream (make-encrypting-stream stream
                                              :chacha
                                              :stream
                                              encryption-key
                                              :initialization-vector iv)))
  (write-sequence data cipher-stream)
  ...
  (let ((mac (produce-mac mac-stream)))
    ...))
(with-authenticating-stream (var mac-name key &rest args) &body body) => mac

Within body, var is bound to an authenticating stream for the mac-name algorithm. After all the forms in body have been executed, the message authentication code of the data that has been written to var is returned.

Utility functions

(ub16ref/le vector index) => value
(ub32ref/le vector index) => value
(ub64ref/le vector index) => value

This family of functions accesses an unsigned 16-bit, 32-bit or 64-bit value stored in little-endian order starting at index in vector. vector must be a (simple-array (unsigned-byte 8) (*)). These functions are SETFable.

(ub16ref/be vector index) => value
(ub32ref/be vector index) => value
(ub64ref/be vector index) => value

As the above, only the value is stored in big-endian order.

(byte-array-to-hex-string vector &key start end element-type) => string
(hex-string-to-byte-array string &key start end) => string
(ascii-string-to-byte-array string &key start end) => vector

byte-array-to-hex-string converts the bytes of vector between start and end into a hexadecimal string. It is useful for converting digests to a more readable form. element-type indicates the element-type of the returned string.

hex-string-to-byte-array parses a substring of string delimited start and end of hexadecimal digits into a byte array.

ascii-string-to-byte-array is provided as a quick and dirty way to convert a string to a byte array suitable for feeding to update-digest or encrypt. Care should be taken to ensure that the provided string is actually an ASCII string. start and end have their usual interpretations.

(octets-to-integer octet-vec &key start end big-endian n-bits) => number
(integer-to-octets bignum &key n-bits big-endian) => vector

octets-to-integer converts the bytes of octet-vec between start and end to an integer as though the bytes denoted a number in base 256. big-endian is a boolean indicating whether the bytes are to be read in big-endian or little-endian order. n-bits specifies how many bits should be considered as significant in the resulting number.

integer-to-octets is the reverse operation.

(expt-mod n exponent modulus) => number
(expt-mod/unsafe n exponent modulus) => number

Raises n to the exponent power modulo modulus in a more efficient fashion than (mod (expt n exponent) modulus). expt-mod is using the Montgomery ladder algorithm to be more robust against timing attacks. expt-mod/unsafe runs faster than expt-mod but is not safe against timing attacks; don't use it on secret data.

(prime-p n &optional prng) => boolean

prime-p returns t if n has a high probability of being a prime number, and nil if it is a composite number. The probable primality is determined by first doing trial divisions with small primes, then running several Miller-Rabin tests with random bases, and finally doing a Lucas test. The number of Miller-Rabin tests can be configured using the *number-of-miller-rabin-tests* variable. It is 64 by default, which makes the probability of returning t for a composite number to be at most 1/2128.

make-random-salt &optional size => bytes

Generate a byte vector of size (default 16) random bytes, suitable for use as a password salt.

constant-time-equal data1 data2 => boolean

Check whether the contents of the byte arrays data1 and data2 are the same. This function runs in constant time (for a given array length) to prevent timing attacks. It can be used to compare passwords or MACs.

Conditions

ironclad-error

All errors signaled by Ironclad are of this type. This type is a direct subtype of simple-error without any extra slots or options.

initialization-vector-not-supplied

This error is signaled by make-cipher when an initialization vector is not provided and the requested mode requires an initialization vector.

invalid-initialization-vector

This error is signaled when an invalid initialization vector is supplied to make-cipher (e.g. when the length of the initialization vector does not match the block length of the cipher).

invalid-key-length

This error is signaled when the key provided to make-cipher is not of an acceptable length for the requested cipher.

unsupported-cipher

This error is signaled when the cipher-name provided to make-cipher is not cipher-supported-p.

unsupported-mode

This error is signaled when the mode provided to make-cipher is not mode-supported-p.

unsupported-padding

This error is signaled when the padding provided to make-cipher is not supported.

unsupported-digest

This error is signaled when the digest-name provided to make-digest is not digest-supported-p.

unsupported-mac

This error is signaled when the mac-name provided to make-mac is not mac-supported-p.

insufficient-buffer-space

This error is signaled when Ironclad needs to stuff some data into a buffer (e.g. when the user provides digest to produce-digest and there is insufficient space).

key-not-supplied

This error is signaled when a :key argument is not provided to make-cipher.

unsupported-kdf

This error is signaled when an invalid KDF name is provided to make-kdf.

unsupported-scrypt-cost-factors

This error is signaled when invalid Scrypt cost factors are provided to make-kdf.

unsupported-argon2-cost-factors

This error is signaled when invalid Argon2 parameters are provided to make-kdf.

invalid-padding

This error is signaled when padding in a block is determined to be invalid.

invalid-mac-parameter

This error is signaled when an invalid parameter is provided to make-mac.

invalid-signature-length

This error is signaled when a signature with an invalid length is provided to verify-signature or destructure-signature.

invalid-message-length

This error is signaled when a message with an invalid length is provided to encrypt-message, decrypt-message or destructure-message.

missing-key-parameter

This error is signaled when it is determined that a parameter is missing in a call to make-public-key or make-private-key.

missing-message-parameter

This error is signaled when it is determined that a parameter is missing in a call to make-message.

missing-signature-parameter

This error is signaled when it is determined that a parameter is missing in a call to make-signature.

incompatible-keys

This error is signaled when incompatible keys are provided to diffie-hellman.

invalid-curve-point

This error is signaled when trying to use an invalid curve point.

invalid-public-key-length

This error is signaled when a public key with an invalid length is provided to verify-signature.

oaep-decoding-error

This error is signaled when the OAEP decoding of a message fails.

unsupported-authenticated-encryption-mode

This error is signaled when an invalid mode name is provided to make-authenticated-encryption-mode.

bad-authentication-tag

This error is signaled when the verification of authenticity of a message fails.

Subsystems (experimental)

Instead of loading the complete Ironclad system, you can load only the subsystems of the algorithms you need.

For example if you need only AES and SHA256:

(asdf:load-system "ironclad/cipher/aes")
(asdf:load-system "ironclad/digest/sha256")

Available subsystems

  • ironclad
    • ironclad/core
    • ironclad/ciphers
      • ironclad/cipher/aes
      • ironclad/cipher/arcfour
      • ironclad/cipher/aria
      • ironclad/cipher/blowfish
      • ironclad/cipher/camellia
      • ironclad/cipher/cast5
      • ironclad/cipher/chacha
      • ironclad/cipher/des
      • ironclad/cipher/idea
      • ironclad/cipher/kalyna
      • ironclad/cipher/keystream
      • ironclad/cipher/kuznyechik
      • ironclad/cipher/misty1
      • ironclad/cipher/rc2
      • ironclad/cipher/rc5
      • ironclad/cipher/rc6
      • ironclad/cipher/salsa20
      • ironclad/cipher/seed
      • ironclad/cipher/serpent
      • ironclad/cipher/sm4
      • ironclad/cipher/sosemanuk
      • ironclad/cipher/square
      • ironclad/cipher/tea
      • ironclad/cipher/threefish
      • ironclad/cipher/twofish
      • ironclad/cipher/xchacha
      • ironclad/cipher/xor
      • ironclad/cipher/xsalsa20
      • ironclad/cipher/xtea
    • ironclad/digests
      • ironclad/digest/adler32
      • ironclad/digest/blake2
      • ironclad/digest/blake2s
      • ironclad/digest/crc24
      • ironclad/digest/crc32
      • ironclad/digest/groestl
      • ironclad/digest/jh
      • ironclad/digest/kupyna
      • ironclad/digest/md2
      • ironclad/digest/md4
      • ironclad/digest/md5
      • ironclad/digest/ripemd-128
      • ironclad/digest/ripemd-160
      • ironclad/digest/sha1
      • ironclad/digest/sha256
      • ironclad/digest/sha3
      • ironclad/digest/sha512
      • ironclad/digest/skein
      • ironclad/digest/sm3
      • ironclad/digest/streebog
      • ironclad/digest/toger
      • ironclad/digest/tree-hash
      • ironclad/digest/whirlpool
    • ironclad/macs
      • ironclad/mac/blake2-mac
      • ironclad/mac/blake2s-mac
      • ironclad/mac/cmac
      • ironclad/mac/gmac
      • ironclad/mac/hmac
      • ironclad/mac/poly1305
      • ironclad/mac/siphash
      • ironclad/mac/skein-mac
    • ironclad/prngs
      • ironclad/prng/fortuna
    • ironclad/aeads
      • ironclad/aead/eax
      • ironclad/aead/etm
      • ironclad/aead/gcm
    • ironclad/kdfs
      • ironclad/kdf/argon2
      • ironclad/kdf/bcrypt
      • ironclad/kdf/hmac
      • ironclad/kdf/password-hash
      • ironclad/kdf/pkcs5
      • ironclad/kdf/scrypt
    • ironclad/public-keys
      • ironclad/public-key/curve25519
      • ironclad/public-key/curve448
      • ironclad/public-key/dsa
      • ironclad/public-key/ed25519
      • ironclad/public-key/ed448
      • ironclad/public-key/elgamal
      • ironclad/public-key/rsa
      • ironclad/public-key/secp256k1
      • ironclad/public-key/secp256r1
      • ironclad/public-key/secp384r1
      • ironclad/public-key/secp521r1
ironclad-0.57/ironclad-text.asd000066400000000000000000000003631420372057600165160ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (asdf:defsystem :ironclad-text :components ((:module :src :serial t :components ((:file "text") ))) :depends-on (:ironclad :flexi-streams)) ironclad-0.57/ironclad.asd000066400000000000000000000505271420372057600155430ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (cl:defpackage #:ironclad-system (:use :cl :asdf)) (cl:in-package #:ironclad-system) (defclass ironclad-source-file (cl-source-file) ()) (defclass ironclad-system (system) () (:default-initargs :version "0.57" :author "Nathan Froyd " :maintainer "Guillaume LE VAILLANT " :description "A cryptographic toolkit written in pure Common Lisp" :license "BSD 3-Clause" :default-component-class 'ironclad-source-file)) (defmacro define-ironclad-subsystems (aggregate-system kind path &body components) (let ((subsystems (loop for spec in (mapcar #'uiop:ensure-list components) collect (format nil "ironclad/~a/~a" kind (first spec))))) `(progn ,@(loop for (component . options) in (mapcar #'uiop:ensure-list components) for subsystem in subsystems collect `(defsystem ,subsystem :class ironclad-system :description ,(format nil "Ironclad ~a: ~a" kind component) :depends-on ,(cons "ironclad/core" (getf options :depends-on)) :pathname ,path :serial t :components ,(or (getf options :components) `((:file ,component))))) (defsystem ,aggregate-system :class ironclad-system :depends-on ("ironclad/core" ,@subsystems))))) (defsystem "ironclad/core" :class ironclad-system :depends-on (#+sbcl "sb-rotate-byte" #+sbcl "sb-posix" "bordeaux-threads") :serial t :components ((:static-file "LICENSE") (:static-file "NEWS") (:static-file "README.org") (:static-file "TODO") (:module "doc" :components ((:html-file "ironclad"))) (:module "src" :serial t :components ((:file "package") (:file "conditions") (:file "generic") (:file "macro-utils") (:file "util") (:module "opt" :serial t :components ((:module "ccl" :if-feature :ccl :components ((:file "x86oid-vm"))) (:module "ecl" :if-feature :ecl :components ((:file "c-functions"))) (:module "sbcl" :if-feature :sbcl :serial t :components ((:file "fndb") (:file "x86oid-vm") (:file "cpu-features"))))) (:file "common") (:module "ciphers" :serial t :components ((:file "cipher") (:file "padding") (:file "make-cipher") (:file "modes"))) (:module "digests" :serial t :components ((:file "digest"))) (:module "macs" :serial t :components ((:file "mac"))) (:module "prng" :serial t :components ((:file "prng") (:file "os-prng"))) (:file "math") #+(or lispworks sbcl openmcl cmu allegro abcl ecl clisp) (:file "octet-stream") (:module "aead" :serial t :components ((:file "aead"))) (:module "kdf" :serial t :components ((:file "kdf"))) (:module "public-key" :serial t :components ((:file "public-key") (:file "pkcs1") (:file "elliptic-curve"))))))) (define-ironclad-subsystems "ironclad/ciphers" "cipher" #p"src/ciphers/" "aes" "arcfour" "aria" "blowfish" "camellia" "cast5" "chacha" ("xchacha" :depends-on ("ironclad/cipher/chacha")) "des" "idea" "kalyna" ("keystream" :depends-on ("ironclad/cipher/chacha" "ironclad/cipher/salsa20")) "kuznyechik" "misty1" "rc2" "rc5" "rc6" "salsa20" ("xsalsa20" :depends-on ("ironclad/cipher/salsa20")) "seed" "serpent" "sm4" "sosemanuk" "square" "tea" "threefish" "twofish" "xor" "xtea") (define-ironclad-subsystems "ironclad/digests" "digest" #p"src/digests/" "adler32" "blake2" "blake2s" "crc24" "crc32" "groestl" "jh" ("kupyna" :depends-on ("ironclad/cipher/kalyna")) "md2" "md4" ("md5" :components ((:file "md5") (:file "md5-lispworks-int32"))) "ripemd-128" "ripemd-160" "sha1" "sha256" "sha3" "sha512" ("skein" :depends-on ("ironclad/cipher/threefish")) "sm3" "streebog" "tiger" ("tree-hash" :depends-on ("ironclad/digest/tiger")) "whirlpool") (define-ironclad-subsystems "ironclad/macs" "mac" #p"src/macs/" ("blake2-mac" :depends-on ("ironclad/digest/blake2")) ("blake2s-mac" :depends-on ("ironclad/digest/blake2s")) "cmac" "hmac" "gmac" "poly1305" "siphash" ("skein-mac" :depends-on ("ironclad/cipher/threefish" "ironclad/digest/skein"))) (define-ironclad-subsystems "ironclad/prngs" "prng" #p"src/prng/" ("fortuna" :depends-on ("ironclad/cipher/aes" "ironclad/digest/sha256") :components ((:file "generator") (:file "fortuna")))) (define-ironclad-subsystems "ironclad/aeads" "aead" #p"src/aead/" ("eax" :depends-on ("ironclad/mac/cmac")) "etm" ("gcm" :depends-on ("ironclad/mac/gmac"))) (define-ironclad-subsystems "ironclad/kdfs" "kdf" #p"src/kdf/" ("argon2" :depends-on ("ironclad/mac/blake2-mac")) ("bcrypt" :depends-on ("ironclad/cipher/blowfish" "ironclad/digest/sha512")) ("hmac" :depends-on ("ironclad/mac/hmac")) "pkcs5" ("password-hash" :depends-on ("ironclad/digest/sha256")) ("scrypt" :depends-on ("ironclad/cipher/salsa20" "ironclad/digest/sha256" "ironclad/kdf/pkcs5"))) (define-ironclad-subsystems "ironclad/public-keys" "public-key" #p"src/public-key/" "dsa" "rsa" "elgamal" "curve25519" "curve448" ("ed25519" :depends-on ("ironclad/digest/sha512")) ("ed448" :depends-on ("ironclad/digest/sha3")) "secp256k1" "secp256r1" "secp384r1" "secp521r1") (defsystem "ironclad" :class ironclad-system :in-order-to ((test-op (test-op "ironclad/tests"))) :depends-on ("ironclad/core" "ironclad/ciphers" "ironclad/digests" "ironclad/macs" "ironclad/prngs" "ironclad/aeads" "ironclad/kdfs" "ironclad/public-keys")) (macrolet ((do-silently (&body body) `(handler-bind ((style-warning #'muffle-warning) ;; It's about as fast as we can make it, ;; and a number of the notes relate to code ;; that we're running at compile time, ;; which we don't care about the speed of ;; anyway... #+sbcl (sb-ext:compiler-note #'muffle-warning)) ,@body))) (defmethod perform :around ((op compile-op) (c ironclad-source-file)) (let ((*print-base* 10) ; INTERN'ing FORMAT'd symbols (*print-case* :upcase) #+sbcl (sb-ext:*inline-expansion-limit* (max sb-ext:*inline-expansion-limit* 1000)) #+cmu (ext:*inline-expansion-limit* (max ext:*inline-expansion-limit* 1000))) (do-silently (call-next-method)))) (defmethod perform :around ((op load-op) (c ironclad-source-file)) (do-silently (call-next-method)))) (defmethod perform :after ((op load-op) (c (eql (find-system "ironclad")))) (provide :ironclad)) ;;; testing (defclass test-vector-file (static-file) ((type :initform "testvec"))) (defpackage :ironclad-tests (:nicknames :crypto-tests) (:use :cl)) (defsystem "ironclad/tests" :depends-on ("ironclad" "rt") :version "0.57" :in-order-to ((test-op (load-op "ironclad/tests"))) :perform (test-op (o s) (or (funcall (intern "DO-TESTS" (find-package "RTEST"))) (error "TEST-OP failed for IRONCLAD/TESTS"))) :components ((:module "testing" :components ((:file "testfuns") (:module "test-vectors" :depends-on ("testfuns") :components ((:file "ironclad") (:file "padding") ;; aead (:file "aead") (:test-vector-file "eax") (:test-vector-file "etm") (:test-vector-file "gcm") ;; ciphers (:file "ciphers") (:file "modes") (:test-vector-file "3des") (:test-vector-file "aes") (:test-vector-file "arcfour") (:test-vector-file "aria") (:test-vector-file "blowfish") (:test-vector-file "camellia") (:test-vector-file "cast5") (:test-vector-file "cbc") (:test-vector-file "cfb") (:test-vector-file "cfb8") (:test-vector-file "chacha") (:test-vector-file "chacha-12") (:test-vector-file "chacha-8") (:test-vector-file "ctr") (:test-vector-file "des") (:test-vector-file "idea") (:test-vector-file "kalyna128") (:test-vector-file "kalyna256") (:test-vector-file "kalyna512") (:test-vector-file "kuznyechik") (:test-vector-file "misty1") (:test-vector-file "xor") (:test-vector-file "ofb") (:test-vector-file "rc2") (:test-vector-file "rc5") (:test-vector-file "rc6") (:test-vector-file "salsa20") (:test-vector-file "salsa20-12") (:test-vector-file "salsa20-8") (:test-vector-file "seed") (:test-vector-file "serpent") (:test-vector-file "sm4") (:test-vector-file "sosemanuk") (:test-vector-file "square") (:test-vector-file "tea") (:test-vector-file "threefish1024") (:test-vector-file "threefish256") (:test-vector-file "threefish512") (:test-vector-file "twofish") (:test-vector-file "xchacha") (:test-vector-file "xchacha-12") (:test-vector-file "xchacha-8") (:test-vector-file "xsalsa20") (:test-vector-file "xsalsa20-12") (:test-vector-file "xsalsa20-8") (:test-vector-file "xtea") ;; digests (:file "digests") (:test-vector-file "adler32") (:test-vector-file "blake2") (:test-vector-file "blake2-160") (:test-vector-file "blake2-256") (:test-vector-file "blake2-384") (:test-vector-file "blake2s") (:test-vector-file "blake2s-128") (:test-vector-file "blake2s-160") (:test-vector-file "blake2s-224") (:test-vector-file "crc24") (:test-vector-file "crc32") (:test-vector-file "groestl") (:test-vector-file "groestl-224") (:test-vector-file "groestl-256") (:test-vector-file "groestl-384") (:test-vector-file "jh") (:test-vector-file "jh-224") (:test-vector-file "jh-256") (:test-vector-file "jh-384") (:test-vector-file "keccak") (:test-vector-file "keccak-224") (:test-vector-file "keccak-256") (:test-vector-file "keccak-384") (:test-vector-file "kupyna") (:test-vector-file "kupyna-256") (:test-vector-file "md2") (:test-vector-file "md4") (:test-vector-file "md5") (:test-vector-file "ripemd-128") (:test-vector-file "ripemd-160") (:test-vector-file "sha1") (:test-vector-file "sha224") (:test-vector-file "sha256") (:test-vector-file "sha3") (:test-vector-file "sha3-224") (:test-vector-file "sha3-256") (:test-vector-file "sha3-384") (:test-vector-file "sha384") (:test-vector-file "sha512") (:test-vector-file "shake128") (:test-vector-file "shake256") (:test-vector-file "skein1024") (:test-vector-file "skein1024-384") (:test-vector-file "skein1024-512") (:test-vector-file "skein256") (:test-vector-file "skein256-128") (:test-vector-file "skein256-160") (:test-vector-file "skein256-224") (:test-vector-file "skein512") (:test-vector-file "skein512-128") (:test-vector-file "skein512-160") (:test-vector-file "skein512-224") (:test-vector-file "skein512-256") (:test-vector-file "skein512-384") (:test-vector-file "sm3") (:test-vector-file "streebog") (:test-vector-file "streebog-256") (:test-vector-file "tiger") (:test-vector-file "tree-hash") (:test-vector-file "whirlpool") ;; kdf (:file "pkcs5") (:file "argon2d") (:file "argon2i") (:file "bcrypt") (:file "scrypt") (:file "hmac-kdf") ;; macs (:file "macs") (:test-vector-file "blake2-mac") (:test-vector-file "blake2s-mac") (:test-vector-file "cmac") (:test-vector-file "hmac") (:test-vector-file "gmac") (:test-vector-file "poly1305") (:test-vector-file "siphash") (:test-vector-file "skein-mac") ;; prng (:file "prng-tests") (:test-vector-file "prng") ;; public key (:file "public-key") (:test-vector-file "curve25519") (:test-vector-file "curve448") (:test-vector-file "dsa") (:test-vector-file "ed25519") (:test-vector-file "ed448") (:test-vector-file "elgamal-dh") (:test-vector-file "elgamal-enc") (:test-vector-file "elgamal-sig") (:test-vector-file "rsa-enc") (:test-vector-file "rsa-sig") (:test-vector-file "secp256k1-dh") (:test-vector-file "secp256k1-sig") (:test-vector-file "secp256r1-dh") (:test-vector-file "secp256r1-sig") (:test-vector-file "secp384r1-dh") (:test-vector-file "secp384r1-sig") (:test-vector-file "secp521r1-dh") (:test-vector-file "secp521r1-sig"))))))) ironclad-0.57/src/000077500000000000000000000000001420372057600140355ustar00rootroot00000000000000ironclad-0.57/src/aead/000077500000000000000000000000001420372057600147275ustar00rootroot00000000000000ironclad-0.57/src/aead/aead.lisp000066400000000000000000000032161420372057600165140ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; aead.lisp -- authenticated encryption with associated data (in-package :crypto) (defclass aead-mode () ((encryption-started :accessor encryption-started-p :initform nil :type boolean) (tag :accessor tag))) (defmethod shared-initialize :after ((mode aead-mode) slot-names &rest initargs &key tag &allow-other-keys) (declare (ignore slot-names initargs)) (setf (encryption-started-p mode) nil (tag mode) (copy-seq tag)) mode) (defun aeadp (name) (get name 'aead)) (defun list-all-authenticated-encryption-modes () "Returns a list whose elements may be validly passed to make-authenticated-encryption-mode." (loop for symbol being each external-symbol of (find-package :ironclad) if (aeadp symbol) collect (intern (symbol-name symbol) :keyword) into ciphers finally (return (sort ciphers #'string<)))) (defun authenticated-encryption-mode-supported-p (name) "Returns T if NAME would be in the list returned by list-all-authenticated-encryption-modes NIL otherwise." (and (symbolp name) (aeadp (massage-symbol name)))) (defmacro defaead (name) `(setf (get ',name 'aead) t)) (defun make-authenticated-encryption-mode (name &rest args) "Return an authenticated encryption object suitable for use for both encryption and decryption." (typecase name (symbol (let ((name (massage-symbol name))) (if (aeadp name) (apply #'make-instance name args) (error 'unsupported-authenticated-encryption-mode :name name)))) (t (error 'type-error :datum name :expected-type 'symbol)))) ironclad-0.57/src/aead/eax.lisp000066400000000000000000000134551420372057600164050ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; eax.lisp -- Encrypt then authenticate then translate (in-package :crypto) (defclass eax (aead-mode) ((cipher :accessor eax-cipher :initform nil) (mac-n :accessor eax-mac-n :initform nil) (mac-h :accessor eax-mac-h :initform nil) (mac-c :accessor eax-mac-c :initform nil))) (defmethod shared-initialize :after ((mode eax) slot-names &rest initargs &key key cipher-name initialization-vector &allow-other-keys) (declare (ignore slot-names initargs)) (let* ((mac-n (if (or (null (eax-mac-n mode)) cipher-name) (make-mac :cmac key cipher-name) (reinitialize-instance (eax-mac-n mode) :key key))) (mac-h (if (or (null (eax-mac-h mode)) cipher-name) (make-mac :cmac key cipher-name) (reinitialize-instance (eax-mac-h mode) :key key))) (mac-c (if (or (null (eax-mac-c mode)) cipher-name) (make-mac :cmac key cipher-name) (reinitialize-instance (eax-mac-c mode) :key key))) (block-length (block-length (or cipher-name (eax-cipher mode)))) (buffer (make-array block-length :element-type '(unsigned-byte 8) :initial-element 0))) (update-mac mac-n buffer) (update-mac mac-n initialization-vector) (setf (aref buffer (1- (length buffer))) 1) (update-mac mac-h buffer) (setf (aref buffer (1- (length buffer))) 2) (update-mac mac-c buffer) (let* ((n (produce-mac mac-n)) (cipher (if (or (null (eax-cipher mode)) cipher-name) (make-cipher cipher-name :key key :mode :ctr :initialization-vector n) (reinitialize-instance (eax-cipher mode) :key key :mode :ctr :initialization-vector n)))) (setf (eax-mac-n mode) mac-n (eax-mac-h mode) mac-h (eax-mac-c mode) mac-c (eax-cipher mode) cipher))) mode) (defmethod process-associated-data ((mode eax) data &key (start 0) end) (let* ((end (or end (length data)))) (update-mac (eax-mac-h mode) data :start start :end end))) (defmethod produce-tag ((mode eax) &key tag (tag-start 0)) (let* ((n (produce-mac (eax-mac-n mode))) (h (produce-mac (eax-mac-h mode))) (c (produce-mac (eax-mac-c mode))) (block-length (length c))) (etypecase tag (simple-octet-vector (when (> block-length (- (length tag) tag-start)) (error 'insufficient-buffer-space :buffer tag :start tag-start :length block-length)) (xor-block block-length n 0 c 0 c 0) (xor-block block-length h 0 c 0 tag tag-start) tag) (null (xor-block block-length n 0 c 0 c 0) (xor-block block-length h 0 c 0 c 0) c)))) (defmethod encrypt ((mode eax) plaintext ciphertext &key (plaintext-start 0) plaintext-end (ciphertext-start 0) handle-final-block) (declare (ignore handle-final-block)) (let ((cipher (eax-cipher mode)) (mac-c (eax-mac-c mode)) (plaintext-end (or plaintext-end (length plaintext)))) (multiple-value-bind (consumed-bytes produced-bytes) (encrypt cipher plaintext ciphertext :plaintext-start plaintext-start :plaintext-end plaintext-end :ciphertext-start ciphertext-start) (update-mac mac-c ciphertext :start ciphertext-start :end (+ ciphertext-start produced-bytes)) (values consumed-bytes produced-bytes)))) (defmethod decrypt ((mode eax) ciphertext plaintext &key (ciphertext-start 0) ciphertext-end (plaintext-start 0) handle-final-block) (let ((cipher (eax-cipher mode)) (mac-c (eax-mac-c mode)) (ciphertext-end (or ciphertext-end (length ciphertext)))) (update-mac mac-c ciphertext :start ciphertext-start :end ciphertext-end) (multiple-value-bind (consumed-bytes produced-bytes) (decrypt cipher ciphertext plaintext :ciphertext-start ciphertext-start :ciphertext-end ciphertext-end :plaintext-start plaintext-start) (when (and handle-final-block (tag mode)) (let ((correct-tag (tag mode)) (tag (produce-tag mode))) (unless (constant-time-equal tag correct-tag) (error 'bad-authentication-tag)))) (values consumed-bytes produced-bytes)))) (defmethod encrypt-message ((mode eax) message &key (start 0) end associated-data (associated-data-start 0) associated-data-end &allow-other-keys) (let* ((length (- (or end (length message)) start)) (encrypted-message (make-array length :element-type '(unsigned-byte 8)))) (when associated-data (process-associated-data mode associated-data :start associated-data-start :end associated-data-end)) (encrypt mode message encrypted-message :plaintext-start start :plaintext-end end) encrypted-message)) (defmethod decrypt-message ((mode eax) message &key (start 0) end associated-data (associated-data-start 0) associated-data-end &allow-other-keys) (let* ((length (- (or end (length message)) start)) (decrypted-message (make-array length :element-type '(unsigned-byte 8)))) (when associated-data (process-associated-data mode associated-data :start associated-data-start :end associated-data-end)) (decrypt mode message decrypted-message :plaintext-start start :plaintext-end end :handle-final-block t) decrypted-message)) (defaead eax) ironclad-0.57/src/aead/etm.lisp000066400000000000000000000105361420372057600164120ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; etm.lisp -- Encrypt then MAC (in-package :crypto) (defclass etm (aead-mode) ((cipher :accessor etm-cipher :initform nil) (mac :accessor etm-mac :initform nil))) (defmethod shared-initialize :after ((mode etm) slot-names &rest initargs &key cipher mac &allow-other-keys) (declare (ignore slot-names initargs)) (when (or (null (etm-cipher mode)) cipher) (check-type cipher cipher) (setf (etm-cipher mode) cipher)) (when (or (null (etm-mac mode)) mac) (check-type mac mac) (setf (etm-mac mode) mac)) mode) (defmethod process-associated-data ((mode etm) data &key (start 0) end) (if (encryption-started-p mode) (error 'ironclad-error :format-control "All associated data must be processed before the encryption begins.") (let* ((end (or end (length data)))) (update-mac (etm-mac mode) data :start start :end end)))) (defmethod produce-tag ((mode etm) &key tag (tag-start 0)) (produce-mac (etm-mac mode) :digest tag :digest-start tag-start)) (defmethod encrypt ((mode etm) plaintext ciphertext &key (plaintext-start 0) plaintext-end (ciphertext-start 0) handle-final-block) (let ((cipher (etm-cipher mode)) (mac (etm-mac mode)) (plaintext-end (or plaintext-end (length plaintext)))) (unless (encryption-started-p mode) (setf (encryption-started-p mode) t)) (multiple-value-bind (consumed-bytes produced-bytes) (encrypt cipher plaintext ciphertext :plaintext-start plaintext-start :plaintext-end plaintext-end :ciphertext-start ciphertext-start :handle-final-block handle-final-block) (update-mac mac ciphertext :start ciphertext-start :end (+ ciphertext-start produced-bytes)) (values consumed-bytes produced-bytes)))) (defmethod decrypt ((mode etm) ciphertext plaintext &key (ciphertext-start 0) ciphertext-end (plaintext-start 0) handle-final-block) (let ((cipher (etm-cipher mode)) (mac (etm-mac mode)) (ciphertext-end (or ciphertext-end (length ciphertext)))) (unless (encryption-started-p mode) (setf (encryption-started-p mode) t)) (update-mac mac ciphertext :start ciphertext-start :end ciphertext-end) (multiple-value-bind (consumed-bytes produced-bytes) (decrypt cipher ciphertext plaintext :ciphertext-start ciphertext-start :ciphertext-end ciphertext-end :plaintext-start plaintext-start :handle-final-block handle-final-block) (when (and handle-final-block (tag mode)) (let ((correct-tag (tag mode)) (tag (produce-mac mac))) (unless (constant-time-equal tag correct-tag) (error 'bad-authentication-tag)))) (values consumed-bytes produced-bytes)))) (defmethod encrypt-message ((mode etm) message &key (start 0) end associated-data (associated-data-start 0) associated-data-end &allow-other-keys) (let* ((length (- (or end (length message)) start)) (cipher (etm-cipher mode)) (encrypted-length (encrypted-message-length cipher (mode cipher) length t)) (encrypted-message (make-array encrypted-length :element-type '(unsigned-byte 8)))) (when associated-data (process-associated-data mode associated-data :start associated-data-start :end associated-data-end)) (encrypt mode message encrypted-message :plaintext-start start :plaintext-end end :handle-final-block t) encrypted-message)) (defmethod decrypt-message ((mode etm) message &key (start 0) end associated-data (associated-data-start 0) associated-data-end &allow-other-keys) (let* ((length (- (or end (length message)) start)) (decrypted-message (make-array length :element-type '(unsigned-byte 8)))) (when associated-data (process-associated-data mode associated-data :start associated-data-start :end associated-data-end)) (multiple-value-bind (consumed-bytes produced-bytes) (decrypt mode message decrypted-message :plaintext-start start :plaintext-end end :handle-final-block t) (declare (ignore consumed-bytes)) (if (< produced-bytes length) (subseq decrypted-message 0 produced-bytes) decrypted-message)))) (defaead etm) ironclad-0.57/src/aead/gcm.lisp000066400000000000000000000162631420372057600163760ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; gcm.lisp -- Galois counter mode ;; See nistspecialpublication800-38d.pdf about GCM and GMAC. (in-package :crypto) (defclass gcm (aead-mode) ((cipher :accessor gcm-cipher :initform nil) (mac :accessor gcm-mac :initform nil) (associated-data-length :accessor gcm-ad-length :initform 0 :type (integer 0 *)) (encrypted-data-length :accessor gcm-ed-length :initform 0 :type (integer 0 *)))) (defmethod shared-initialize :after ((mode gcm) slot-names &rest initargs &key key cipher-name initialization-vector &allow-other-keys) (declare (ignore slot-names initargs) (type simple-octet-vector key initialization-vector)) (let* ((mac (if (or (null (gcm-mac mode)) cipher-name) (make-mac :gmac key cipher-name initialization-vector) (reinitialize-instance (gcm-mac mode) :key key :initialization-vector initialization-vector))) (iv (let* ((iv (gmac-j0 mac)) (counter (subseq iv 12))) (increment-counter-block-1 4 counter) (replace iv counter :start1 12))) (cipher (if (or (null (gcm-cipher mode)) cipher-name) (make-cipher cipher-name :key key :mode :ctr :initialization-vector iv) (reinitialize-instance (gcm-cipher mode) :key key :mode :ctr :initialization-vector iv)))) (setf (gcm-mac mode) mac (gcm-cipher mode) cipher (gcm-ad-length mode) 0 (gcm-ed-length mode) 0)) mode) (defmethod process-associated-data ((mode gcm) data &key (start 0) end) (if (encryption-started-p mode) (error 'ironclad-error :format-control "All associated data must be processed before the encryption begins.") (let* ((end (or end (length data))) (length (- end start))) (incf (gcm-ad-length mode) length) (update-mac (gcm-mac mode) data :start start :end end)))) (defmethod produce-tag ((mode gcm) &key tag (tag-start 0)) (let* ((encrypted-data-length (gcm-ed-length mode)) (mac (gcm-mac mode)) (mac-digest (gmac-digest mac encrypted-data-length)) (digest-size (length mac-digest))) (etypecase tag (simple-octet-vector (if (<= digest-size (- (length tag) tag-start)) (replace tag mac-digest :start1 tag-start) (error 'insufficient-buffer-space :buffer tag :start tag-start :length digest-size))) (null mac-digest)))) (defmethod encrypt ((mode gcm) plaintext ciphertext &key (plaintext-start 0) plaintext-end (ciphertext-start 0) handle-final-block) (declare (ignore handle-final-block)) (let ((cipher (gcm-cipher mode)) (mac (gcm-mac mode)) (plaintext-end (or plaintext-end (length plaintext))) (consumed-bytes 0) (produced-bytes 0)) (when (< plaintext-start plaintext-end) (unless (encryption-started-p mode) (let* ((associated-data-length (gcm-ad-length mode)) (remaining (mod associated-data-length 16)) (padding-length (if (zerop remaining) 0 (- 16 remaining))) (padding (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0))) (declare (dynamic-extent padding)) (update-mac mac padding :end padding-length) (decf (gmac-total-length mac) padding-length)) (setf (encryption-started-p mode) t)) (multiple-value-setq (consumed-bytes produced-bytes) (encrypt cipher plaintext ciphertext :plaintext-start plaintext-start :plaintext-end plaintext-end :ciphertext-start ciphertext-start)) (incf (gcm-ed-length mode) produced-bytes) (update-mac mac ciphertext :start ciphertext-start :end (+ ciphertext-start produced-bytes))) (values consumed-bytes produced-bytes))) (defmethod decrypt ((mode gcm) ciphertext plaintext &key (ciphertext-start 0) ciphertext-end (plaintext-start 0) handle-final-block) (let ((cipher (gcm-cipher mode)) (mac (gcm-mac mode)) (ciphertext-end (or ciphertext-end (length ciphertext))) (consumed-bytes 0) (produced-bytes 0)) (when (< ciphertext-start ciphertext-end) (unless (encryption-started-p mode) (let* ((associated-data-length (gcm-ad-length mode)) (remaining (mod associated-data-length 16)) (padding-length (if (zerop remaining) 0 (- 16 remaining))) (padding (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0))) (declare (dynamic-extent padding)) (update-mac mac padding :end padding-length) (decf (gmac-total-length mac) padding-length)) (setf (encryption-started-p mode) t)) (update-mac mac ciphertext :start ciphertext-start :end ciphertext-end) (multiple-value-setq (consumed-bytes produced-bytes) (decrypt cipher ciphertext plaintext :ciphertext-start ciphertext-start :ciphertext-end ciphertext-end :plaintext-start plaintext-start)) (incf (gcm-ed-length mode) consumed-bytes)) (when (and handle-final-block (tag mode)) (let* ((correct-tag (tag mode)) (encrypted-data-length (gcm-ed-length mode)) (full-tag (gmac-digest mac encrypted-data-length)) (tag (if (< (length correct-tag) (length full-tag)) (subseq full-tag 0 (length correct-tag)) full-tag))) (unless (constant-time-equal tag correct-tag) (error 'bad-authentication-tag)))) (values consumed-bytes produced-bytes))) (defmethod encrypt-message ((mode gcm) message &key (start 0) end associated-data (associated-data-start 0) associated-data-end &allow-other-keys) (let* ((length (- (or end (length message)) start)) (encrypted-message (make-array length :element-type '(unsigned-byte 8)))) (when associated-data (process-associated-data mode associated-data :start associated-data-start :end associated-data-end)) (encrypt mode message encrypted-message :plaintext-start start :plaintext-end end) encrypted-message)) (defmethod decrypt-message ((mode gcm) message &key (start 0) end associated-data (associated-data-start 0) associated-data-end &allow-other-keys) (let* ((length (- (or end (length message)) start)) (decrypted-message (make-array length :element-type '(unsigned-byte 8)))) (when associated-data (process-associated-data mode associated-data :start associated-data-start :end associated-data-end)) (decrypt mode message decrypted-message :plaintext-start start :plaintext-end end :handle-final-block t) decrypted-message)) (defaead gcm) ironclad-0.57/src/ciphers/000077500000000000000000000000001420372057600154725ustar00rootroot00000000000000ironclad-0.57/src/ciphers/aes.lisp000066400000000000000000001341111420372057600171340ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; aes.lisp -- implementation of the Rijndael block cipher ;;; ;;; Currently limited to 128-bit block sizes, although the full range of ;;; key sizes is supported. (in-package :crypto) (in-ironclad-readtable) ;;; FIXME: is it work it to combine these into one large array and ;;; subscript into that rather than having separate arrays? CMUCL ;;; and SBCL don't seem to want to keep the constant in a register, ;;; preferring to reload it at every reference, so a single large ;;; array scheme might not be the best for them (yet) (declaim (type (simple-array (unsigned-byte 32) (256)) Te0 Te1 Te2 Te3 Te4 Td0 Td1 Td2 Td3 Td4)) (defconst Te0 #32@(#xc66363a5 #xf87c7c84 #xee777799 #xf67b7b8d #xfff2f20d #xd66b6bbd #xde6f6fb1 #x91c5c554 #x60303050 #x02010103 #xce6767a9 #x562b2b7d #xe7fefe19 #xb5d7d762 #x4dababe6 #xec76769a #x8fcaca45 #x1f82829d #x89c9c940 #xfa7d7d87 #xeffafa15 #xb25959eb #x8e4747c9 #xfbf0f00b #x41adadec #xb3d4d467 #x5fa2a2fd #x45afafea #x239c9cbf #x53a4a4f7 #xe4727296 #x9bc0c05b #x75b7b7c2 #xe1fdfd1c #x3d9393ae #x4c26266a #x6c36365a #x7e3f3f41 #xf5f7f702 #x83cccc4f #x6834345c #x51a5a5f4 #xd1e5e534 #xf9f1f108 #xe2717193 #xabd8d873 #x62313153 #x2a15153f #x0804040c #x95c7c752 #x46232365 #x9dc3c35e #x30181828 #x379696a1 #x0a05050f #x2f9a9ab5 #x0e070709 #x24121236 #x1b80809b #xdfe2e23d #xcdebeb26 #x4e272769 #x7fb2b2cd #xea75759f #x1209091b #x1d83839e #x582c2c74 #x341a1a2e #x361b1b2d #xdc6e6eb2 #xb45a5aee #x5ba0a0fb #xa45252f6 #x763b3b4d #xb7d6d661 #x7db3b3ce #x5229297b #xdde3e33e #x5e2f2f71 #x13848497 #xa65353f5 #xb9d1d168 #x00000000 #xc1eded2c #x40202060 #xe3fcfc1f #x79b1b1c8 #xb65b5bed #xd46a6abe #x8dcbcb46 #x67bebed9 #x7239394b #x944a4ade #x984c4cd4 #xb05858e8 #x85cfcf4a #xbbd0d06b #xc5efef2a #x4faaaae5 #xedfbfb16 #x864343c5 #x9a4d4dd7 #x66333355 #x11858594 #x8a4545cf #xe9f9f910 #x04020206 #xfe7f7f81 #xa05050f0 #x783c3c44 #x259f9fba #x4ba8a8e3 #xa25151f3 #x5da3a3fe #x804040c0 #x058f8f8a #x3f9292ad #x219d9dbc #x70383848 #xf1f5f504 #x63bcbcdf #x77b6b6c1 #xafdada75 #x42212163 #x20101030 #xe5ffff1a #xfdf3f30e #xbfd2d26d #x81cdcd4c #x180c0c14 #x26131335 #xc3ecec2f #xbe5f5fe1 #x359797a2 #x884444cc #x2e171739 #x93c4c457 #x55a7a7f2 #xfc7e7e82 #x7a3d3d47 #xc86464ac #xba5d5de7 #x3219192b #xe6737395 #xc06060a0 #x19818198 #x9e4f4fd1 #xa3dcdc7f #x44222266 #x542a2a7e #x3b9090ab #x0b888883 #x8c4646ca #xc7eeee29 #x6bb8b8d3 #x2814143c #xa7dede79 #xbc5e5ee2 #x160b0b1d #xaddbdb76 #xdbe0e03b #x64323256 #x743a3a4e #x140a0a1e #x924949db #x0c06060a #x4824246c #xb85c5ce4 #x9fc2c25d #xbdd3d36e #x43acacef #xc46262a6 #x399191a8 #x319595a4 #xd3e4e437 #xf279798b #xd5e7e732 #x8bc8c843 #x6e373759 #xda6d6db7 #x018d8d8c #xb1d5d564 #x9c4e4ed2 #x49a9a9e0 #xd86c6cb4 #xac5656fa #xf3f4f407 #xcfeaea25 #xca6565af #xf47a7a8e #x47aeaee9 #x10080818 #x6fbabad5 #xf0787888 #x4a25256f #x5c2e2e72 #x381c1c24 #x57a6a6f1 #x73b4b4c7 #x97c6c651 #xcbe8e823 #xa1dddd7c #xe874749c #x3e1f1f21 #x964b4bdd #x61bdbddc #x0d8b8b86 #x0f8a8a85 #xe0707090 #x7c3e3e42 #x71b5b5c4 #xcc6666aa #x904848d8 #x06030305 #xf7f6f601 #x1c0e0e12 #xc26161a3 #x6a35355f #xae5757f9 #x69b9b9d0 #x17868691 #x99c1c158 #x3a1d1d27 #x279e9eb9 #xd9e1e138 #xebf8f813 #x2b9898b3 #x22111133 #xd26969bb #xa9d9d970 #x078e8e89 #x339494a7 #x2d9b9bb6 #x3c1e1e22 #x15878792 #xc9e9e920 #x87cece49 #xaa5555ff #x50282878 #xa5dfdf7a #x038c8c8f #x59a1a1f8 #x09898980 #x1a0d0d17 #x65bfbfda #xd7e6e631 #x844242c6 #xd06868b8 #x824141c3 #x299999b0 #x5a2d2d77 #x1e0f0f11 #x7bb0b0cb #xa85454fc #x6dbbbbd6 #x2c16163a)) (defconst Te1 #32@(#xa5c66363 #x84f87c7c #x99ee7777 #x8df67b7b #x0dfff2f2 #xbdd66b6b #xb1de6f6f #x5491c5c5 #x50603030 #x03020101 #xa9ce6767 #x7d562b2b #x19e7fefe #x62b5d7d7 #xe64dabab #x9aec7676 #x458fcaca #x9d1f8282 #x4089c9c9 #x87fa7d7d #x15effafa #xebb25959 #xc98e4747 #x0bfbf0f0 #xec41adad #x67b3d4d4 #xfd5fa2a2 #xea45afaf #xbf239c9c #xf753a4a4 #x96e47272 #x5b9bc0c0 #xc275b7b7 #x1ce1fdfd #xae3d9393 #x6a4c2626 #x5a6c3636 #x417e3f3f #x02f5f7f7 #x4f83cccc #x5c683434 #xf451a5a5 #x34d1e5e5 #x08f9f1f1 #x93e27171 #x73abd8d8 #x53623131 #x3f2a1515 #x0c080404 #x5295c7c7 #x65462323 #x5e9dc3c3 #x28301818 #xa1379696 #x0f0a0505 #xb52f9a9a #x090e0707 #x36241212 #x9b1b8080 #x3ddfe2e2 #x26cdebeb #x694e2727 #xcd7fb2b2 #x9fea7575 #x1b120909 #x9e1d8383 #x74582c2c #x2e341a1a #x2d361b1b #xb2dc6e6e #xeeb45a5a #xfb5ba0a0 #xf6a45252 #x4d763b3b #x61b7d6d6 #xce7db3b3 #x7b522929 #x3edde3e3 #x715e2f2f #x97138484 #xf5a65353 #x68b9d1d1 #x00000000 #x2cc1eded #x60402020 #x1fe3fcfc #xc879b1b1 #xedb65b5b #xbed46a6a #x468dcbcb #xd967bebe #x4b723939 #xde944a4a #xd4984c4c #xe8b05858 #x4a85cfcf #x6bbbd0d0 #x2ac5efef #xe54faaaa #x16edfbfb #xc5864343 #xd79a4d4d #x55663333 #x94118585 #xcf8a4545 #x10e9f9f9 #x06040202 #x81fe7f7f #xf0a05050 #x44783c3c #xba259f9f #xe34ba8a8 #xf3a25151 #xfe5da3a3 #xc0804040 #x8a058f8f #xad3f9292 #xbc219d9d #x48703838 #x04f1f5f5 #xdf63bcbc #xc177b6b6 #x75afdada #x63422121 #x30201010 #x1ae5ffff #x0efdf3f3 #x6dbfd2d2 #x4c81cdcd #x14180c0c #x35261313 #x2fc3ecec #xe1be5f5f #xa2359797 #xcc884444 #x392e1717 #x5793c4c4 #xf255a7a7 #x82fc7e7e #x477a3d3d #xacc86464 #xe7ba5d5d #x2b321919 #x95e67373 #xa0c06060 #x98198181 #xd19e4f4f #x7fa3dcdc #x66442222 #x7e542a2a #xab3b9090 #x830b8888 #xca8c4646 #x29c7eeee #xd36bb8b8 #x3c281414 #x79a7dede #xe2bc5e5e #x1d160b0b #x76addbdb #x3bdbe0e0 #x56643232 #x4e743a3a #x1e140a0a #xdb924949 #x0a0c0606 #x6c482424 #xe4b85c5c #x5d9fc2c2 #x6ebdd3d3 #xef43acac #xa6c46262 #xa8399191 #xa4319595 #x37d3e4e4 #x8bf27979 #x32d5e7e7 #x438bc8c8 #x596e3737 #xb7da6d6d #x8c018d8d #x64b1d5d5 #xd29c4e4e #xe049a9a9 #xb4d86c6c #xfaac5656 #x07f3f4f4 #x25cfeaea #xafca6565 #x8ef47a7a #xe947aeae #x18100808 #xd56fbaba #x88f07878 #x6f4a2525 #x725c2e2e #x24381c1c #xf157a6a6 #xc773b4b4 #x5197c6c6 #x23cbe8e8 #x7ca1dddd #x9ce87474 #x213e1f1f #xdd964b4b #xdc61bdbd #x860d8b8b #x850f8a8a #x90e07070 #x427c3e3e #xc471b5b5 #xaacc6666 #xd8904848 #x05060303 #x01f7f6f6 #x121c0e0e #xa3c26161 #x5f6a3535 #xf9ae5757 #xd069b9b9 #x91178686 #x5899c1c1 #x273a1d1d #xb9279e9e #x38d9e1e1 #x13ebf8f8 #xb32b9898 #x33221111 #xbbd26969 #x70a9d9d9 #x89078e8e #xa7339494 #xb62d9b9b #x223c1e1e #x92158787 #x20c9e9e9 #x4987cece #xffaa5555 #x78502828 #x7aa5dfdf #x8f038c8c #xf859a1a1 #x80098989 #x171a0d0d #xda65bfbf #x31d7e6e6 #xc6844242 #xb8d06868 #xc3824141 #xb0299999 #x775a2d2d #x111e0f0f #xcb7bb0b0 #xfca85454 #xd66dbbbb #x3a2c1616)) (defconst Te2 #32@(#x63a5c663 #x7c84f87c #x7799ee77 #x7b8df67b #xf20dfff2 #x6bbdd66b #x6fb1de6f #xc55491c5 #x30506030 #x01030201 #x67a9ce67 #x2b7d562b #xfe19e7fe #xd762b5d7 #xabe64dab #x769aec76 #xca458fca #x829d1f82 #xc94089c9 #x7d87fa7d #xfa15effa #x59ebb259 #x47c98e47 #xf00bfbf0 #xadec41ad #xd467b3d4 #xa2fd5fa2 #xafea45af #x9cbf239c #xa4f753a4 #x7296e472 #xc05b9bc0 #xb7c275b7 #xfd1ce1fd #x93ae3d93 #x266a4c26 #x365a6c36 #x3f417e3f #xf702f5f7 #xcc4f83cc #x345c6834 #xa5f451a5 #xe534d1e5 #xf108f9f1 #x7193e271 #xd873abd8 #x31536231 #x153f2a15 #x040c0804 #xc75295c7 #x23654623 #xc35e9dc3 #x18283018 #x96a13796 #x050f0a05 #x9ab52f9a #x07090e07 #x12362412 #x809b1b80 #xe23ddfe2 #xeb26cdeb #x27694e27 #xb2cd7fb2 #x759fea75 #x091b1209 #x839e1d83 #x2c74582c #x1a2e341a #x1b2d361b #x6eb2dc6e #x5aeeb45a #xa0fb5ba0 #x52f6a452 #x3b4d763b #xd661b7d6 #xb3ce7db3 #x297b5229 #xe33edde3 #x2f715e2f #x84971384 #x53f5a653 #xd168b9d1 #x00000000 #xed2cc1ed #x20604020 #xfc1fe3fc #xb1c879b1 #x5bedb65b #x6abed46a #xcb468dcb #xbed967be #x394b7239 #x4ade944a #x4cd4984c #x58e8b058 #xcf4a85cf #xd06bbbd0 #xef2ac5ef #xaae54faa #xfb16edfb #x43c58643 #x4dd79a4d #x33556633 #x85941185 #x45cf8a45 #xf910e9f9 #x02060402 #x7f81fe7f #x50f0a050 #x3c44783c #x9fba259f #xa8e34ba8 #x51f3a251 #xa3fe5da3 #x40c08040 #x8f8a058f #x92ad3f92 #x9dbc219d #x38487038 #xf504f1f5 #xbcdf63bc #xb6c177b6 #xda75afda #x21634221 #x10302010 #xff1ae5ff #xf30efdf3 #xd26dbfd2 #xcd4c81cd #x0c14180c #x13352613 #xec2fc3ec #x5fe1be5f #x97a23597 #x44cc8844 #x17392e17 #xc45793c4 #xa7f255a7 #x7e82fc7e #x3d477a3d #x64acc864 #x5de7ba5d #x192b3219 #x7395e673 #x60a0c060 #x81981981 #x4fd19e4f #xdc7fa3dc #x22664422 #x2a7e542a #x90ab3b90 #x88830b88 #x46ca8c46 #xee29c7ee #xb8d36bb8 #x143c2814 #xde79a7de #x5ee2bc5e #x0b1d160b #xdb76addb #xe03bdbe0 #x32566432 #x3a4e743a #x0a1e140a #x49db9249 #x060a0c06 #x246c4824 #x5ce4b85c #xc25d9fc2 #xd36ebdd3 #xacef43ac #x62a6c462 #x91a83991 #x95a43195 #xe437d3e4 #x798bf279 #xe732d5e7 #xc8438bc8 #x37596e37 #x6db7da6d #x8d8c018d #xd564b1d5 #x4ed29c4e #xa9e049a9 #x6cb4d86c #x56faac56 #xf407f3f4 #xea25cfea #x65afca65 #x7a8ef47a #xaee947ae #x08181008 #xbad56fba #x7888f078 #x256f4a25 #x2e725c2e #x1c24381c #xa6f157a6 #xb4c773b4 #xc65197c6 #xe823cbe8 #xdd7ca1dd #x749ce874 #x1f213e1f #x4bdd964b #xbddc61bd #x8b860d8b #x8a850f8a #x7090e070 #x3e427c3e #xb5c471b5 #x66aacc66 #x48d89048 #x03050603 #xf601f7f6 #x0e121c0e #x61a3c261 #x355f6a35 #x57f9ae57 #xb9d069b9 #x86911786 #xc15899c1 #x1d273a1d #x9eb9279e #xe138d9e1 #xf813ebf8 #x98b32b98 #x11332211 #x69bbd269 #xd970a9d9 #x8e89078e #x94a73394 #x9bb62d9b #x1e223c1e #x87921587 #xe920c9e9 #xce4987ce #x55ffaa55 #x28785028 #xdf7aa5df #x8c8f038c #xa1f859a1 #x89800989 #x0d171a0d #xbfda65bf #xe631d7e6 #x42c68442 #x68b8d068 #x41c38241 #x99b02999 #x2d775a2d #x0f111e0f #xb0cb7bb0 #x54fca854 #xbbd66dbb #x163a2c16)) (defconst Te3 #32@(#x6363a5c6 #x7c7c84f8 #x777799ee #x7b7b8df6 #xf2f20dff #x6b6bbdd6 #x6f6fb1de #xc5c55491 #x30305060 #x01010302 #x6767a9ce #x2b2b7d56 #xfefe19e7 #xd7d762b5 #xababe64d #x76769aec #xcaca458f #x82829d1f #xc9c94089 #x7d7d87fa #xfafa15ef #x5959ebb2 #x4747c98e #xf0f00bfb #xadadec41 #xd4d467b3 #xa2a2fd5f #xafafea45 #x9c9cbf23 #xa4a4f753 #x727296e4 #xc0c05b9b #xb7b7c275 #xfdfd1ce1 #x9393ae3d #x26266a4c #x36365a6c #x3f3f417e #xf7f702f5 #xcccc4f83 #x34345c68 #xa5a5f451 #xe5e534d1 #xf1f108f9 #x717193e2 #xd8d873ab #x31315362 #x15153f2a #x04040c08 #xc7c75295 #x23236546 #xc3c35e9d #x18182830 #x9696a137 #x05050f0a #x9a9ab52f #x0707090e #x12123624 #x80809b1b #xe2e23ddf #xebeb26cd #x2727694e #xb2b2cd7f #x75759fea #x09091b12 #x83839e1d #x2c2c7458 #x1a1a2e34 #x1b1b2d36 #x6e6eb2dc #x5a5aeeb4 #xa0a0fb5b #x5252f6a4 #x3b3b4d76 #xd6d661b7 #xb3b3ce7d #x29297b52 #xe3e33edd #x2f2f715e #x84849713 #x5353f5a6 #xd1d168b9 #x00000000 #xeded2cc1 #x20206040 #xfcfc1fe3 #xb1b1c879 #x5b5bedb6 #x6a6abed4 #xcbcb468d #xbebed967 #x39394b72 #x4a4ade94 #x4c4cd498 #x5858e8b0 #xcfcf4a85 #xd0d06bbb #xefef2ac5 #xaaaae54f #xfbfb16ed #x4343c586 #x4d4dd79a #x33335566 #x85859411 #x4545cf8a #xf9f910e9 #x02020604 #x7f7f81fe #x5050f0a0 #x3c3c4478 #x9f9fba25 #xa8a8e34b #x5151f3a2 #xa3a3fe5d #x4040c080 #x8f8f8a05 #x9292ad3f #x9d9dbc21 #x38384870 #xf5f504f1 #xbcbcdf63 #xb6b6c177 #xdada75af #x21216342 #x10103020 #xffff1ae5 #xf3f30efd #xd2d26dbf #xcdcd4c81 #x0c0c1418 #x13133526 #xecec2fc3 #x5f5fe1be #x9797a235 #x4444cc88 #x1717392e #xc4c45793 #xa7a7f255 #x7e7e82fc #x3d3d477a #x6464acc8 #x5d5de7ba #x19192b32 #x737395e6 #x6060a0c0 #x81819819 #x4f4fd19e #xdcdc7fa3 #x22226644 #x2a2a7e54 #x9090ab3b #x8888830b #x4646ca8c #xeeee29c7 #xb8b8d36b #x14143c28 #xdede79a7 #x5e5ee2bc #x0b0b1d16 #xdbdb76ad #xe0e03bdb #x32325664 #x3a3a4e74 #x0a0a1e14 #x4949db92 #x06060a0c #x24246c48 #x5c5ce4b8 #xc2c25d9f #xd3d36ebd #xacacef43 #x6262a6c4 #x9191a839 #x9595a431 #xe4e437d3 #x79798bf2 #xe7e732d5 #xc8c8438b #x3737596e #x6d6db7da #x8d8d8c01 #xd5d564b1 #x4e4ed29c #xa9a9e049 #x6c6cb4d8 #x5656faac #xf4f407f3 #xeaea25cf #x6565afca #x7a7a8ef4 #xaeaee947 #x08081810 #xbabad56f #x787888f0 #x25256f4a #x2e2e725c #x1c1c2438 #xa6a6f157 #xb4b4c773 #xc6c65197 #xe8e823cb #xdddd7ca1 #x74749ce8 #x1f1f213e #x4b4bdd96 #xbdbddc61 #x8b8b860d #x8a8a850f #x707090e0 #x3e3e427c #xb5b5c471 #x6666aacc #x4848d890 #x03030506 #xf6f601f7 #x0e0e121c #x6161a3c2 #x35355f6a #x5757f9ae #xb9b9d069 #x86869117 #xc1c15899 #x1d1d273a #x9e9eb927 #xe1e138d9 #xf8f813eb #x9898b32b #x11113322 #x6969bbd2 #xd9d970a9 #x8e8e8907 #x9494a733 #x9b9bb62d #x1e1e223c #x87879215 #xe9e920c9 #xcece4987 #x5555ffaa #x28287850 #xdfdf7aa5 #x8c8c8f03 #xa1a1f859 #x89898009 #x0d0d171a #xbfbfda65 #xe6e631d7 #x4242c684 #x6868b8d0 #x4141c382 #x9999b029 #x2d2d775a #x0f0f111e #xb0b0cb7b #x5454fca8 #xbbbbd66d #x16163a2c)) (defconst Te4 #32@(#x63636363 #x7c7c7c7c #x77777777 #x7b7b7b7b #xf2f2f2f2 #x6b6b6b6b #x6f6f6f6f #xc5c5c5c5 #x30303030 #x01010101 #x67676767 #x2b2b2b2b #xfefefefe #xd7d7d7d7 #xabababab #x76767676 #xcacacaca #x82828282 #xc9c9c9c9 #x7d7d7d7d #xfafafafa #x59595959 #x47474747 #xf0f0f0f0 #xadadadad #xd4d4d4d4 #xa2a2a2a2 #xafafafaf #x9c9c9c9c #xa4a4a4a4 #x72727272 #xc0c0c0c0 #xb7b7b7b7 #xfdfdfdfd #x93939393 #x26262626 #x36363636 #x3f3f3f3f #xf7f7f7f7 #xcccccccc #x34343434 #xa5a5a5a5 #xe5e5e5e5 #xf1f1f1f1 #x71717171 #xd8d8d8d8 #x31313131 #x15151515 #x04040404 #xc7c7c7c7 #x23232323 #xc3c3c3c3 #x18181818 #x96969696 #x05050505 #x9a9a9a9a #x07070707 #x12121212 #x80808080 #xe2e2e2e2 #xebebebeb #x27272727 #xb2b2b2b2 #x75757575 #x09090909 #x83838383 #x2c2c2c2c #x1a1a1a1a #x1b1b1b1b #x6e6e6e6e #x5a5a5a5a #xa0a0a0a0 #x52525252 #x3b3b3b3b #xd6d6d6d6 #xb3b3b3b3 #x29292929 #xe3e3e3e3 #x2f2f2f2f #x84848484 #x53535353 #xd1d1d1d1 #x00000000 #xedededed #x20202020 #xfcfcfcfc #xb1b1b1b1 #x5b5b5b5b #x6a6a6a6a #xcbcbcbcb #xbebebebe #x39393939 #x4a4a4a4a #x4c4c4c4c #x58585858 #xcfcfcfcf #xd0d0d0d0 #xefefefef #xaaaaaaaa #xfbfbfbfb #x43434343 #x4d4d4d4d #x33333333 #x85858585 #x45454545 #xf9f9f9f9 #x02020202 #x7f7f7f7f #x50505050 #x3c3c3c3c #x9f9f9f9f #xa8a8a8a8 #x51515151 #xa3a3a3a3 #x40404040 #x8f8f8f8f #x92929292 #x9d9d9d9d #x38383838 #xf5f5f5f5 #xbcbcbcbc #xb6b6b6b6 #xdadadada #x21212121 #x10101010 #xffffffff #xf3f3f3f3 #xd2d2d2d2 #xcdcdcdcd #x0c0c0c0c #x13131313 #xecececec #x5f5f5f5f #x97979797 #x44444444 #x17171717 #xc4c4c4c4 #xa7a7a7a7 #x7e7e7e7e #x3d3d3d3d #x64646464 #x5d5d5d5d #x19191919 #x73737373 #x60606060 #x81818181 #x4f4f4f4f #xdcdcdcdc #x22222222 #x2a2a2a2a #x90909090 #x88888888 #x46464646 #xeeeeeeee #xb8b8b8b8 #x14141414 #xdededede #x5e5e5e5e #x0b0b0b0b #xdbdbdbdb #xe0e0e0e0 #x32323232 #x3a3a3a3a #x0a0a0a0a #x49494949 #x06060606 #x24242424 #x5c5c5c5c #xc2c2c2c2 #xd3d3d3d3 #xacacacac #x62626262 #x91919191 #x95959595 #xe4e4e4e4 #x79797979 #xe7e7e7e7 #xc8c8c8c8 #x37373737 #x6d6d6d6d #x8d8d8d8d #xd5d5d5d5 #x4e4e4e4e #xa9a9a9a9 #x6c6c6c6c #x56565656 #xf4f4f4f4 #xeaeaeaea #x65656565 #x7a7a7a7a #xaeaeaeae #x08080808 #xbabababa #x78787878 #x25252525 #x2e2e2e2e #x1c1c1c1c #xa6a6a6a6 #xb4b4b4b4 #xc6c6c6c6 #xe8e8e8e8 #xdddddddd #x74747474 #x1f1f1f1f #x4b4b4b4b #xbdbdbdbd #x8b8b8b8b #x8a8a8a8a #x70707070 #x3e3e3e3e #xb5b5b5b5 #x66666666 #x48484848 #x03030303 #xf6f6f6f6 #x0e0e0e0e #x61616161 #x35353535 #x57575757 #xb9b9b9b9 #x86868686 #xc1c1c1c1 #x1d1d1d1d #x9e9e9e9e #xe1e1e1e1 #xf8f8f8f8 #x98989898 #x11111111 #x69696969 #xd9d9d9d9 #x8e8e8e8e #x94949494 #x9b9b9b9b #x1e1e1e1e #x87878787 #xe9e9e9e9 #xcececece #x55555555 #x28282828 #xdfdfdfdf #x8c8c8c8c #xa1a1a1a1 #x89898989 #x0d0d0d0d #xbfbfbfbf #xe6e6e6e6 #x42424242 #x68686868 #x41414141 #x99999999 #x2d2d2d2d #x0f0f0f0f #xb0b0b0b0 #x54545454 #xbbbbbbbb #x16161616)) (defconst Td0 #32@(#x51f4a750 #x7e416553 #x1a17a4c3 #x3a275e96 #x3bab6bcb #x1f9d45f1 #xacfa58ab #x4be30393 #x2030fa55 #xad766df6 #x88cc7691 #xf5024c25 #x4fe5d7fc #xc52acbd7 #x26354480 #xb562a38f #xdeb15a49 #x25ba1b67 #x45ea0e98 #x5dfec0e1 #xc32f7502 #x814cf012 #x8d4697a3 #x6bd3f9c6 #x038f5fe7 #x15929c95 #xbf6d7aeb #x955259da #xd4be832d #x587421d3 #x49e06929 #x8ec9c844 #x75c2896a #xf48e7978 #x99583e6b #x27b971dd #xbee14fb6 #xf088ad17 #xc920ac66 #x7dce3ab4 #x63df4a18 #xe51a3182 #x97513360 #x62537f45 #xb16477e0 #xbb6bae84 #xfe81a01c #xf9082b94 #x70486858 #x8f45fd19 #x94de6c87 #x527bf8b7 #xab73d323 #x724b02e2 #xe31f8f57 #x6655ab2a #xb2eb2807 #x2fb5c203 #x86c57b9a #xd33708a5 #x302887f2 #x23bfa5b2 #x02036aba #xed16825c #x8acf1c2b #xa779b492 #xf307f2f0 #x4e69e2a1 #x65daf4cd #x0605bed5 #xd134621f #xc4a6fe8a #x342e539d #xa2f355a0 #x058ae132 #xa4f6eb75 #x0b83ec39 #x4060efaa #x5e719f06 #xbd6e1051 #x3e218af9 #x96dd063d #xdd3e05ae #x4de6bd46 #x91548db5 #x71c45d05 #x0406d46f #x605015ff #x1998fb24 #xd6bde997 #x894043cc #x67d99e77 #xb0e842bd #x07898b88 #xe7195b38 #x79c8eedb #xa17c0a47 #x7c420fe9 #xf8841ec9 #x00000000 #x09808683 #x322bed48 #x1e1170ac #x6c5a724e #xfd0efffb #x0f853856 #x3daed51e #x362d3927 #x0a0fd964 #x685ca621 #x9b5b54d1 #x24362e3a #x0c0a67b1 #x9357e70f #xb4ee96d2 #x1b9b919e #x80c0c54f #x61dc20a2 #x5a774b69 #x1c121a16 #xe293ba0a #xc0a02ae5 #x3c22e043 #x121b171d #x0e090d0b #xf28bc7ad #x2db6a8b9 #x141ea9c8 #x57f11985 #xaf75074c #xee99ddbb #xa37f60fd #xf701269f #x5c72f5bc #x44663bc5 #x5bfb7e34 #x8b432976 #xcb23c6dc #xb6edfc68 #xb8e4f163 #xd731dcca #x42638510 #x13972240 #x84c61120 #x854a247d #xd2bb3df8 #xaef93211 #xc729a16d #x1d9e2f4b #xdcb230f3 #x0d8652ec #x77c1e3d0 #x2bb3166c #xa970b999 #x119448fa #x47e96422 #xa8fc8cc4 #xa0f03f1a #x567d2cd8 #x223390ef #x87494ec7 #xd938d1c1 #x8ccaa2fe #x98d40b36 #xa6f581cf #xa57ade28 #xdab78e26 #x3fadbfa4 #x2c3a9de4 #x5078920d #x6a5fcc9b #x547e4662 #xf68d13c2 #x90d8b8e8 #x2e39f75e #x82c3aff5 #x9f5d80be #x69d0937c #x6fd52da9 #xcf2512b3 #xc8ac993b #x10187da7 #xe89c636e #xdb3bbb7b #xcd267809 #x6e5918f4 #xec9ab701 #x834f9aa8 #xe6956e65 #xaaffe67e #x21bccf08 #xef15e8e6 #xbae79bd9 #x4a6f36ce #xea9f09d4 #x29b07cd6 #x31a4b2af #x2a3f2331 #xc6a59430 #x35a266c0 #x744ebc37 #xfc82caa6 #xe090d0b0 #x33a7d815 #xf104984a #x41ecdaf7 #x7fcd500e #x1791f62f #x764dd68d #x43efb04d #xccaa4d54 #xe49604df #x9ed1b5e3 #x4c6a881b #xc12c1fb8 #x4665517f #x9d5eea04 #x018c355d #xfa877473 #xfb0b412e #xb3671d5a #x92dbd252 #xe9105633 #x6dd64713 #x9ad7618c #x37a10c7a #x59f8148e #xeb133c89 #xcea927ee #xb761c935 #xe11ce5ed #x7a47b13c #x9cd2df59 #x55f2733f #x1814ce79 #x73c737bf #x53f7cdea #x5ffdaa5b #xdf3d6f14 #x7844db86 #xcaaff381 #xb968c43e #x3824342c #xc2a3405f #x161dc372 #xbce2250c #x283c498b #xff0d9541 #x39a80171 #x080cb3de #xd8b4e49c #x6456c190 #x7bcb8461 #xd532b670 #x486c5c74 #xd0b85742)) (defconst Td1 #32@(#x5051f4a7 #x537e4165 #xc31a17a4 #x963a275e #xcb3bab6b #xf11f9d45 #xabacfa58 #x934be303 #x552030fa #xf6ad766d #x9188cc76 #x25f5024c #xfc4fe5d7 #xd7c52acb #x80263544 #x8fb562a3 #x49deb15a #x6725ba1b #x9845ea0e #xe15dfec0 #x02c32f75 #x12814cf0 #xa38d4697 #xc66bd3f9 #xe7038f5f #x9515929c #xebbf6d7a #xda955259 #x2dd4be83 #xd3587421 #x2949e069 #x448ec9c8 #x6a75c289 #x78f48e79 #x6b99583e #xdd27b971 #xb6bee14f #x17f088ad #x66c920ac #xb47dce3a #x1863df4a #x82e51a31 #x60975133 #x4562537f #xe0b16477 #x84bb6bae #x1cfe81a0 #x94f9082b #x58704868 #x198f45fd #x8794de6c #xb7527bf8 #x23ab73d3 #xe2724b02 #x57e31f8f #x2a6655ab #x07b2eb28 #x032fb5c2 #x9a86c57b #xa5d33708 #xf2302887 #xb223bfa5 #xba02036a #x5ced1682 #x2b8acf1c #x92a779b4 #xf0f307f2 #xa14e69e2 #xcd65daf4 #xd50605be #x1fd13462 #x8ac4a6fe #x9d342e53 #xa0a2f355 #x32058ae1 #x75a4f6eb #x390b83ec #xaa4060ef #x065e719f #x51bd6e10 #xf93e218a #x3d96dd06 #xaedd3e05 #x464de6bd #xb591548d #x0571c45d #x6f0406d4 #xff605015 #x241998fb #x97d6bde9 #xcc894043 #x7767d99e #xbdb0e842 #x8807898b #x38e7195b #xdb79c8ee #x47a17c0a #xe97c420f #xc9f8841e #x00000000 #x83098086 #x48322bed #xac1e1170 #x4e6c5a72 #xfbfd0eff #x560f8538 #x1e3daed5 #x27362d39 #x640a0fd9 #x21685ca6 #xd19b5b54 #x3a24362e #xb10c0a67 #x0f9357e7 #xd2b4ee96 #x9e1b9b91 #x4f80c0c5 #xa261dc20 #x695a774b #x161c121a #x0ae293ba #xe5c0a02a #x433c22e0 #x1d121b17 #x0b0e090d #xadf28bc7 #xb92db6a8 #xc8141ea9 #x8557f119 #x4caf7507 #xbbee99dd #xfda37f60 #x9ff70126 #xbc5c72f5 #xc544663b #x345bfb7e #x768b4329 #xdccb23c6 #x68b6edfc #x63b8e4f1 #xcad731dc #x10426385 #x40139722 #x2084c611 #x7d854a24 #xf8d2bb3d #x11aef932 #x6dc729a1 #x4b1d9e2f #xf3dcb230 #xec0d8652 #xd077c1e3 #x6c2bb316 #x99a970b9 #xfa119448 #x2247e964 #xc4a8fc8c #x1aa0f03f #xd8567d2c #xef223390 #xc787494e #xc1d938d1 #xfe8ccaa2 #x3698d40b #xcfa6f581 #x28a57ade #x26dab78e #xa43fadbf #xe42c3a9d #x0d507892 #x9b6a5fcc #x62547e46 #xc2f68d13 #xe890d8b8 #x5e2e39f7 #xf582c3af #xbe9f5d80 #x7c69d093 #xa96fd52d #xb3cf2512 #x3bc8ac99 #xa710187d #x6ee89c63 #x7bdb3bbb #x09cd2678 #xf46e5918 #x01ec9ab7 #xa8834f9a #x65e6956e #x7eaaffe6 #x0821bccf #xe6ef15e8 #xd9bae79b #xce4a6f36 #xd4ea9f09 #xd629b07c #xaf31a4b2 #x312a3f23 #x30c6a594 #xc035a266 #x37744ebc #xa6fc82ca #xb0e090d0 #x1533a7d8 #x4af10498 #xf741ecda #x0e7fcd50 #x2f1791f6 #x8d764dd6 #x4d43efb0 #x54ccaa4d #xdfe49604 #xe39ed1b5 #x1b4c6a88 #xb8c12c1f #x7f466551 #x049d5eea #x5d018c35 #x73fa8774 #x2efb0b41 #x5ab3671d #x5292dbd2 #x33e91056 #x136dd647 #x8c9ad761 #x7a37a10c #x8e59f814 #x89eb133c #xeecea927 #x35b761c9 #xede11ce5 #x3c7a47b1 #x599cd2df #x3f55f273 #x791814ce #xbf73c737 #xea53f7cd #x5b5ffdaa #x14df3d6f #x867844db #x81caaff3 #x3eb968c4 #x2c382434 #x5fc2a340 #x72161dc3 #x0cbce225 #x8b283c49 #x41ff0d95 #x7139a801 #xde080cb3 #x9cd8b4e4 #x906456c1 #x617bcb84 #x70d532b6 #x74486c5c #x42d0b857)) (defconst Td2 #32@(#xa75051f4 #x65537e41 #xa4c31a17 #x5e963a27 #x6bcb3bab #x45f11f9d #x58abacfa #x03934be3 #xfa552030 #x6df6ad76 #x769188cc #x4c25f502 #xd7fc4fe5 #xcbd7c52a #x44802635 #xa38fb562 #x5a49deb1 #x1b6725ba #x0e9845ea #xc0e15dfe #x7502c32f #xf012814c #x97a38d46 #xf9c66bd3 #x5fe7038f #x9c951592 #x7aebbf6d #x59da9552 #x832dd4be #x21d35874 #x692949e0 #xc8448ec9 #x896a75c2 #x7978f48e #x3e6b9958 #x71dd27b9 #x4fb6bee1 #xad17f088 #xac66c920 #x3ab47dce #x4a1863df #x3182e51a #x33609751 #x7f456253 #x77e0b164 #xae84bb6b #xa01cfe81 #x2b94f908 #x68587048 #xfd198f45 #x6c8794de #xf8b7527b #xd323ab73 #x02e2724b #x8f57e31f #xab2a6655 #x2807b2eb #xc2032fb5 #x7b9a86c5 #x08a5d337 #x87f23028 #xa5b223bf #x6aba0203 #x825ced16 #x1c2b8acf #xb492a779 #xf2f0f307 #xe2a14e69 #xf4cd65da #xbed50605 #x621fd134 #xfe8ac4a6 #x539d342e #x55a0a2f3 #xe132058a #xeb75a4f6 #xec390b83 #xefaa4060 #x9f065e71 #x1051bd6e #x8af93e21 #x063d96dd #x05aedd3e #xbd464de6 #x8db59154 #x5d0571c4 #xd46f0406 #x15ff6050 #xfb241998 #xe997d6bd #x43cc8940 #x9e7767d9 #x42bdb0e8 #x8b880789 #x5b38e719 #xeedb79c8 #x0a47a17c #x0fe97c42 #x1ec9f884 #x00000000 #x86830980 #xed48322b #x70ac1e11 #x724e6c5a #xfffbfd0e #x38560f85 #xd51e3dae #x3927362d #xd9640a0f #xa621685c #x54d19b5b #x2e3a2436 #x67b10c0a #xe70f9357 #x96d2b4ee #x919e1b9b #xc54f80c0 #x20a261dc #x4b695a77 #x1a161c12 #xba0ae293 #x2ae5c0a0 #xe0433c22 #x171d121b #x0d0b0e09 #xc7adf28b #xa8b92db6 #xa9c8141e #x198557f1 #x074caf75 #xddbbee99 #x60fda37f #x269ff701 #xf5bc5c72 #x3bc54466 #x7e345bfb #x29768b43 #xc6dccb23 #xfc68b6ed #xf163b8e4 #xdccad731 #x85104263 #x22401397 #x112084c6 #x247d854a #x3df8d2bb #x3211aef9 #xa16dc729 #x2f4b1d9e #x30f3dcb2 #x52ec0d86 #xe3d077c1 #x166c2bb3 #xb999a970 #x48fa1194 #x642247e9 #x8cc4a8fc #x3f1aa0f0 #x2cd8567d #x90ef2233 #x4ec78749 #xd1c1d938 #xa2fe8cca #x0b3698d4 #x81cfa6f5 #xde28a57a #x8e26dab7 #xbfa43fad #x9de42c3a #x920d5078 #xcc9b6a5f #x4662547e #x13c2f68d #xb8e890d8 #xf75e2e39 #xaff582c3 #x80be9f5d #x937c69d0 #x2da96fd5 #x12b3cf25 #x993bc8ac #x7da71018 #x636ee89c #xbb7bdb3b #x7809cd26 #x18f46e59 #xb701ec9a #x9aa8834f #x6e65e695 #xe67eaaff #xcf0821bc #xe8e6ef15 #x9bd9bae7 #x36ce4a6f #x09d4ea9f #x7cd629b0 #xb2af31a4 #x23312a3f #x9430c6a5 #x66c035a2 #xbc37744e #xcaa6fc82 #xd0b0e090 #xd81533a7 #x984af104 #xdaf741ec #x500e7fcd #xf62f1791 #xd68d764d #xb04d43ef #x4d54ccaa #x04dfe496 #xb5e39ed1 #x881b4c6a #x1fb8c12c #x517f4665 #xea049d5e #x355d018c #x7473fa87 #x412efb0b #x1d5ab367 #xd25292db #x5633e910 #x47136dd6 #x618c9ad7 #x0c7a37a1 #x148e59f8 #x3c89eb13 #x27eecea9 #xc935b761 #xe5ede11c #xb13c7a47 #xdf599cd2 #x733f55f2 #xce791814 #x37bf73c7 #xcdea53f7 #xaa5b5ffd #x6f14df3d #xdb867844 #xf381caaf #xc43eb968 #x342c3824 #x405fc2a3 #xc372161d #x250cbce2 #x498b283c #x9541ff0d #x017139a8 #xb3de080c #xe49cd8b4 #xc1906456 #x84617bcb #xb670d532 #x5c74486c #x5742d0b8)) (defconst Td3 #32@(#xf4a75051 #x4165537e #x17a4c31a #x275e963a #xab6bcb3b #x9d45f11f #xfa58abac #xe303934b #x30fa5520 #x766df6ad #xcc769188 #x024c25f5 #xe5d7fc4f #x2acbd7c5 #x35448026 #x62a38fb5 #xb15a49de #xba1b6725 #xea0e9845 #xfec0e15d #x2f7502c3 #x4cf01281 #x4697a38d #xd3f9c66b #x8f5fe703 #x929c9515 #x6d7aebbf #x5259da95 #xbe832dd4 #x7421d358 #xe0692949 #xc9c8448e #xc2896a75 #x8e7978f4 #x583e6b99 #xb971dd27 #xe14fb6be #x88ad17f0 #x20ac66c9 #xce3ab47d #xdf4a1863 #x1a3182e5 #x51336097 #x537f4562 #x6477e0b1 #x6bae84bb #x81a01cfe #x082b94f9 #x48685870 #x45fd198f #xde6c8794 #x7bf8b752 #x73d323ab #x4b02e272 #x1f8f57e3 #x55ab2a66 #xeb2807b2 #xb5c2032f #xc57b9a86 #x3708a5d3 #x2887f230 #xbfa5b223 #x036aba02 #x16825ced #xcf1c2b8a #x79b492a7 #x07f2f0f3 #x69e2a14e #xdaf4cd65 #x05bed506 #x34621fd1 #xa6fe8ac4 #x2e539d34 #xf355a0a2 #x8ae13205 #xf6eb75a4 #x83ec390b #x60efaa40 #x719f065e #x6e1051bd #x218af93e #xdd063d96 #x3e05aedd #xe6bd464d #x548db591 #xc45d0571 #x06d46f04 #x5015ff60 #x98fb2419 #xbde997d6 #x4043cc89 #xd99e7767 #xe842bdb0 #x898b8807 #x195b38e7 #xc8eedb79 #x7c0a47a1 #x420fe97c #x841ec9f8 #x00000000 #x80868309 #x2bed4832 #x1170ac1e #x5a724e6c #x0efffbfd #x8538560f #xaed51e3d #x2d392736 #x0fd9640a #x5ca62168 #x5b54d19b #x362e3a24 #x0a67b10c #x57e70f93 #xee96d2b4 #x9b919e1b #xc0c54f80 #xdc20a261 #x774b695a #x121a161c #x93ba0ae2 #xa02ae5c0 #x22e0433c #x1b171d12 #x090d0b0e #x8bc7adf2 #xb6a8b92d #x1ea9c814 #xf1198557 #x75074caf #x99ddbbee #x7f60fda3 #x01269ff7 #x72f5bc5c #x663bc544 #xfb7e345b #x4329768b #x23c6dccb #xedfc68b6 #xe4f163b8 #x31dccad7 #x63851042 #x97224013 #xc6112084 #x4a247d85 #xbb3df8d2 #xf93211ae #x29a16dc7 #x9e2f4b1d #xb230f3dc #x8652ec0d #xc1e3d077 #xb3166c2b #x70b999a9 #x9448fa11 #xe9642247 #xfc8cc4a8 #xf03f1aa0 #x7d2cd856 #x3390ef22 #x494ec787 #x38d1c1d9 #xcaa2fe8c #xd40b3698 #xf581cfa6 #x7ade28a5 #xb78e26da #xadbfa43f #x3a9de42c #x78920d50 #x5fcc9b6a #x7e466254 #x8d13c2f6 #xd8b8e890 #x39f75e2e #xc3aff582 #x5d80be9f #xd0937c69 #xd52da96f #x2512b3cf #xac993bc8 #x187da710 #x9c636ee8 #x3bbb7bdb #x267809cd #x5918f46e #x9ab701ec #x4f9aa883 #x956e65e6 #xffe67eaa #xbccf0821 #x15e8e6ef #xe79bd9ba #x6f36ce4a #x9f09d4ea #xb07cd629 #xa4b2af31 #x3f23312a #xa59430c6 #xa266c035 #x4ebc3774 #x82caa6fc #x90d0b0e0 #xa7d81533 #x04984af1 #xecdaf741 #xcd500e7f #x91f62f17 #x4dd68d76 #xefb04d43 #xaa4d54cc #x9604dfe4 #xd1b5e39e #x6a881b4c #x2c1fb8c1 #x65517f46 #x5eea049d #x8c355d01 #x877473fa #x0b412efb #x671d5ab3 #xdbd25292 #x105633e9 #xd647136d #xd7618c9a #xa10c7a37 #xf8148e59 #x133c89eb #xa927eece #x61c935b7 #x1ce5ede1 #x47b13c7a #xd2df599c #xf2733f55 #x14ce7918 #xc737bf73 #xf7cdea53 #xfdaa5b5f #x3d6f14df #x44db8678 #xaff381ca #x68c43eb9 #x24342c38 #xa3405fc2 #x1dc37216 #xe2250cbc #x3c498b28 #x0d9541ff #xa8017139 #x0cb3de08 #xb4e49cd8 #x56c19064 #xcb84617b #x32b670d5 #x6c5c7448 #xb85742d0)) (defconst Td4 #32@(#x52525252 #x09090909 #x6a6a6a6a #xd5d5d5d5 #x30303030 #x36363636 #xa5a5a5a5 #x38383838 #xbfbfbfbf #x40404040 #xa3a3a3a3 #x9e9e9e9e #x81818181 #xf3f3f3f3 #xd7d7d7d7 #xfbfbfbfb #x7c7c7c7c #xe3e3e3e3 #x39393939 #x82828282 #x9b9b9b9b #x2f2f2f2f #xffffffff #x87878787 #x34343434 #x8e8e8e8e #x43434343 #x44444444 #xc4c4c4c4 #xdededede #xe9e9e9e9 #xcbcbcbcb #x54545454 #x7b7b7b7b #x94949494 #x32323232 #xa6a6a6a6 #xc2c2c2c2 #x23232323 #x3d3d3d3d #xeeeeeeee #x4c4c4c4c #x95959595 #x0b0b0b0b #x42424242 #xfafafafa #xc3c3c3c3 #x4e4e4e4e #x08080808 #x2e2e2e2e #xa1a1a1a1 #x66666666 #x28282828 #xd9d9d9d9 #x24242424 #xb2b2b2b2 #x76767676 #x5b5b5b5b #xa2a2a2a2 #x49494949 #x6d6d6d6d #x8b8b8b8b #xd1d1d1d1 #x25252525 #x72727272 #xf8f8f8f8 #xf6f6f6f6 #x64646464 #x86868686 #x68686868 #x98989898 #x16161616 #xd4d4d4d4 #xa4a4a4a4 #x5c5c5c5c #xcccccccc #x5d5d5d5d #x65656565 #xb6b6b6b6 #x92929292 #x6c6c6c6c #x70707070 #x48484848 #x50505050 #xfdfdfdfd #xedededed #xb9b9b9b9 #xdadadada #x5e5e5e5e #x15151515 #x46464646 #x57575757 #xa7a7a7a7 #x8d8d8d8d #x9d9d9d9d #x84848484 #x90909090 #xd8d8d8d8 #xabababab #x00000000 #x8c8c8c8c #xbcbcbcbc #xd3d3d3d3 #x0a0a0a0a #xf7f7f7f7 #xe4e4e4e4 #x58585858 #x05050505 #xb8b8b8b8 #xb3b3b3b3 #x45454545 #x06060606 #xd0d0d0d0 #x2c2c2c2c #x1e1e1e1e #x8f8f8f8f #xcacacaca #x3f3f3f3f #x0f0f0f0f #x02020202 #xc1c1c1c1 #xafafafaf #xbdbdbdbd #x03030303 #x01010101 #x13131313 #x8a8a8a8a #x6b6b6b6b #x3a3a3a3a #x91919191 #x11111111 #x41414141 #x4f4f4f4f #x67676767 #xdcdcdcdc #xeaeaeaea #x97979797 #xf2f2f2f2 #xcfcfcfcf #xcececece #xf0f0f0f0 #xb4b4b4b4 #xe6e6e6e6 #x73737373 #x96969696 #xacacacac #x74747474 #x22222222 #xe7e7e7e7 #xadadadad #x35353535 #x85858585 #xe2e2e2e2 #xf9f9f9f9 #x37373737 #xe8e8e8e8 #x1c1c1c1c #x75757575 #xdfdfdfdf #x6e6e6e6e #x47474747 #xf1f1f1f1 #x1a1a1a1a #x71717171 #x1d1d1d1d #x29292929 #xc5c5c5c5 #x89898989 #x6f6f6f6f #xb7b7b7b7 #x62626262 #x0e0e0e0e #xaaaaaaaa #x18181818 #xbebebebe #x1b1b1b1b #xfcfcfcfc #x56565656 #x3e3e3e3e #x4b4b4b4b #xc6c6c6c6 #xd2d2d2d2 #x79797979 #x20202020 #x9a9a9a9a #xdbdbdbdb #xc0c0c0c0 #xfefefefe #x78787878 #xcdcdcdcd #x5a5a5a5a #xf4f4f4f4 #x1f1f1f1f #xdddddddd #xa8a8a8a8 #x33333333 #x88888888 #x07070707 #xc7c7c7c7 #x31313131 #xb1b1b1b1 #x12121212 #x10101010 #x59595959 #x27272727 #x80808080 #xecececec #x5f5f5f5f #x60606060 #x51515151 #x7f7f7f7f #xa9a9a9a9 #x19191919 #xb5b5b5b5 #x4a4a4a4a #x0d0d0d0d #x2d2d2d2d #xe5e5e5e5 #x7a7a7a7a #x9f9f9f9f #x93939393 #xc9c9c9c9 #x9c9c9c9c #xefefefef #xa0a0a0a0 #xe0e0e0e0 #x3b3b3b3b #x4d4d4d4d #xaeaeaeae #x2a2a2a2a #xf5f5f5f5 #xb0b0b0b0 #xc8c8c8c8 #xebebebeb #xbbbbbbbb #x3c3c3c3c #x83838383 #x53535353 #x99999999 #x61616161 #x17171717 #x2b2b2b2b #x04040404 #x7e7e7e7e #xbabababa #x77777777 #xd6d6d6d6 #x26262626 #xe1e1e1e1 #x69696969 #x14141414 #x63636363 #x55555555 #x21212121 #x0c0c0c0c #x7d7d7d7d)) (declaim (type (simple-array (unsigned-byte 32) (10)) round-constants)) (defconst round-constants #32@(#x01000000 #x02000000 #x04000000 #x08000000 #x10000000 #x20000000 #x40000000 #x80000000 #x1B000000 #x36000000)) ;;; the actual AES implementation ;;; waste a little space for "common" 128-bit keys, but is anybody really ;;; going to notice? (deftype aes-round-keys () '(simple-array (unsigned-byte 32) (60))) (defclass aes (cipher 16-byte-block-mixin) ((encryption-round-keys :accessor encryption-round-keys :type aes-round-keys) (decryption-round-keys :accessor decryption-round-keys :type aes-round-keys) (n-rounds :accessor n-rounds))) (defun allocate-round-keys (key) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (ecase (length key) ((16 24 32) (make-array 60 :element-type '(unsigned-byte 32) :initial-element 0)))) (defun generate-128-bit-round-keys (round-keys key) (declare (type aes-round-keys round-keys) (type (simple-array (unsigned-byte 8) (16)) key) (optimize (speed 3) (space 0) (debug 0))) (let ((round-key-offset 0)) (declare (type (integer 0 43) round-key-offset)) (macrolet ((rk-ref (x) `(aref round-keys (+ ,x round-key-offset)))) (dotimes (i 4) (setf (rk-ref i) (ub32ref/be key (* 4 i)))) (dotimes (i 10 (values round-keys 10)) (declare (type (integer 0 10) i)) (let ((tmp (rk-ref 3))) (declare (type (unsigned-byte 32) tmp)) (setf (rk-ref 4) (logxor (rk-ref 0) (logand (aref Te4 (third-byte tmp)) #xff000000) (logand (aref Te4 (second-byte tmp)) #x00ff0000) (logand (aref Te4 (first-byte tmp)) #x0000ff00) (logand (aref Te4 (fourth-byte tmp)) #x000000ff) (aref round-constants i)) (rk-ref 5) (logxor (rk-ref 1) (rk-ref 4)) (rk-ref 6) (logxor (rk-ref 2) (rk-ref 5)) (rk-ref 7) (logxor (rk-ref 3) (rk-ref 6))) (incf round-key-offset 4)))))) (defun generate-192-bit-round-keys (round-keys key) (declare (type aes-round-keys round-keys) (type (simple-array (unsigned-byte 8) (24)) key) (optimize (speed 3) (space 0) (debug 0))) (let ((round-key-offset 0)) (declare (type (integer 0 51) round-key-offset)) (macrolet ((rk-ref (x) `(aref round-keys (+ ,x round-key-offset)))) (dotimes (i 6) (setf (rk-ref i) (ub32ref/be key (* 4 i)))) (dotimes (i 8) (let ((tmp (rk-ref 5))) (declare (type (unsigned-byte 32) tmp)) (setf (rk-ref 6) (logxor (rk-ref 0) (logand (aref Te4 (third-byte tmp)) #xff000000) (logand (aref Te4 (second-byte tmp)) #x00ff0000) (logand (aref Te4 (first-byte tmp)) #x0000ff00) (logand (aref Te4 (fourth-byte tmp)) #x000000ff) (aref round-constants i)) (rk-ref 7) (logxor (rk-ref 1) (rk-ref 6)) (rk-ref 8) (logxor (rk-ref 2) (rk-ref 7)) (rk-ref 9) (logxor (rk-ref 3) (rk-ref 8))) (when (= 8 (1+ i)) (return-from generate-192-bit-round-keys (values round-keys 12))) (setf (rk-ref 10) (logxor (rk-ref 4) (rk-ref 9)) (rk-ref 11) (logxor (rk-ref 5) (rk-ref 10))) (incf round-key-offset 6)))))) (defun generate-256-bit-round-keys (round-keys key) (declare (type aes-round-keys round-keys) (type (simple-array (unsigned-byte 8) (32)) key) (optimize (speed 3) (space 0) (debug 0))) (let ((round-key-offset 0)) (declare (type (integer 0 59) round-key-offset)) (macrolet ((rk-ref (x) `(aref round-keys (+ ,x round-key-offset)))) (dotimes (i 8) (setf (rk-ref i) (ub32ref/be key (* 4 i)))) (dotimes (i 7) (let ((tmp (rk-ref 7))) (declare (type (unsigned-byte 32) tmp)) (setf (rk-ref 8) (logxor (rk-ref 0) (logand (aref Te4 (third-byte tmp)) #xff000000) (logand (aref Te4 (second-byte tmp)) #x00ff0000) (logand (aref Te4 (first-byte tmp)) #x0000ff00) (logand (aref Te4 (fourth-byte tmp)) #x000000ff) (aref round-constants i)) (rk-ref 9) (logxor (rk-ref 1) (rk-ref 8)) (rk-ref 10) (logxor (rk-ref 2) (rk-ref 9)) (rk-ref 11) (logxor (rk-ref 3) (rk-ref 10))) (when (= 7 (1+ i)) (return-from generate-256-bit-round-keys (values round-keys 14)))) (let ((tmp (rk-ref 11))) (declare (type (unsigned-byte 32) tmp)) (setf (rk-ref 12) (logxor (rk-ref 4) (logand (aref Te4 (fourth-byte tmp)) #xff000000) (logand (aref Te4 (third-byte tmp)) #x00ff0000) (logand (aref Te4 (second-byte tmp)) #x0000ff00) (logand (aref Te4 (first-byte tmp)) #x000000ff)) (rk-ref 13) (logxor (rk-ref 5) (rk-ref 12)) (rk-ref 14) (logxor (rk-ref 6) (rk-ref 13)) (rk-ref 15) (logxor (rk-ref 7) (rk-ref 14))) (incf round-key-offset 8)))))) (defun generate-round-keys-for-encryption (key round-keys) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (ecase (length key) (16 (generate-128-bit-round-keys round-keys key)) (24 (generate-192-bit-round-keys round-keys key)) (32 (generate-256-bit-round-keys round-keys key)))) (defun generate-round-keys-for-decryption (round-keys n-rounds) (declare (type aes-round-keys round-keys) (type (unsigned-byte 16) n-rounds)) ;; invert the order of the round keys (do ((i 0 (+ 4 i)) (j (* 4 n-rounds) (- j 4))) ((>= i j)) (declare (type (unsigned-byte 16) i j)) (rotatef (aref round-keys i) (aref round-keys j)) (rotatef (aref round-keys (+ 1 i)) (aref round-keys (+ 1 j))) (rotatef (aref round-keys (+ 2 i)) (aref round-keys (+ 2 j))) (rotatef (aref round-keys (+ 3 i)) (aref round-keys (+ 3 j)))) ;; apply inverse MixColumn transform to all round keys but the first (macrolet ((rk-ref (x) `(aref round-keys (+ ,x round-keys-offset)))) (do ((i 1 (+ 1 i)) (round-keys-offset 4 (+ 4 round-keys-offset))) ((>= i n-rounds) (values round-keys n-rounds)) (declare (type (unsigned-byte 16) round-keys-offset)) (macrolet ((mix-column (x) `(let ((column (rk-ref ,x))) (declare (type (unsigned-byte 32) column)) (setf (rk-ref ,x) (logxor (aref Td0 (first-byte (aref Te4 (fourth-byte column)))) (aref Td1 (first-byte (aref Te4 (third-byte column)))) (aref Td2 (first-byte (aref Te4 (second-byte column)))) (aref Td3 (first-byte (aref Te4 (first-byte column))))))))) (mix-column 0) (mix-column 1) (mix-column 2) (mix-column 3))))) (macrolet ((mix (rk a0 a1 a2 a3 sym0 sym1 sym2 sym3) `(logxor (aref ,a0 (fourth-byte ,sym0)) (aref ,a1 (third-byte ,sym1)) (aref ,a2 (second-byte ,sym2)) (aref ,a3 (first-byte ,sym3)) (rk-ref ,rk))) (mix-s-into-t-encrypting (offset) `(setf t0 (mix ,offset Te0 Te1 Te2 Te3 s0 s1 s2 s3) t1 (mix (1+ ,offset) Te0 Te1 Te2 Te3 s1 s2 s3 s0) t2 (mix (+ ,offset 2) Te0 Te1 Te2 Te3 s2 s3 s0 s1) t3 (mix (+ ,offset 3) Te0 Te1 Te2 Te3 s3 s0 s1 s2))) (mix-t-into-s-encrypting (offset) `(setf s0 (mix ,offset Te0 Te1 Te2 Te3 t0 t1 t2 t3) s1 (mix (1+ ,offset) Te0 Te1 Te2 Te3 t1 t2 t3 t0) s2 (mix (+ ,offset 2) Te0 Te1 Te2 Te3 t2 t3 t0 t1) s3 (mix (+ ,offset 3) Te0 Te1 Te2 Te3 t3 t0 t1 t2))) (mix-s-into-t-decrypting (offset) `(setf t0 (mix ,offset Td0 Td1 Td2 Td3 s0 s3 s2 s1) t1 (mix (1+ ,offset) Td0 Td1 Td2 Td3 s1 s0 s3 s2) t2 (mix (+ ,offset 2) Td0 Td1 Td2 Td3 s2 s1 s0 s3) t3 (mix (+ ,offset 3) Td0 Td1 Td2 Td3 s3 s2 s1 s0))) (mix-t-into-s-decrypting (offset) `(setf s0 (mix ,offset Td0 Td1 Td2 Td3 t0 t3 t2 t1) s1 (mix (1+ ,offset) Td0 Td1 Td2 Td3 t1 t0 t3 t2) s2 (mix (+ ,offset 2) Td0 Td1 Td2 Td3 t2 t1 t0 t3) s3 (mix (+ ,offset 3) Td0 Td1 Td2 Td3 t3 t2 t1 t0))) (rk-ref (x) `(aref round-keys (+ ,x round-key-offset))) #+nil (rk-ref (x) `(aref round-keys (+ ,x 0)))) (define-block-encryptor aes 16 (let ((round-keys (encryption-round-keys context)) (n-rounds (n-rounds context))) (declare (type aes-round-keys round-keys)) (declare (type (integer 0 14) n-rounds)) (if #+(and sbcl x86-64 ironclad-assembly) (aes-ni-supported-p) #-(and sbcl x86-64 ironclad-assembly) nil #+(and sbcl x86-64 ironclad-assembly) (aes-ni-encrypt plaintext plaintext-start ciphertext ciphertext-start round-keys n-rounds) #-(and sbcl x86-64 ironclad-assembly) nil (with-words ((s0 s1 s2 s3) plaintext plaintext-start) ;; the "optimized implementation" also had a fully unrolled version ;; of this loop hanging around. it might be worthwhile to translate ;; it and see if it actually gains us anything. a wizard would do ;; this with a macro which allows one to easily switch between ;; unrolled and non-unrolled versions. I am not a wizard. (let ((t0 0) (t1 0) (t2 0) (t3 0) (round-key-offset 0)) (declare (type (unsigned-byte 32) t0 t1 t2 t3)) (declare (type (unsigned-byte 16) round-key-offset)) ;; initial whitening (setf s0 (logxor s0 (aref round-keys 0)) s1 (logxor s1 (aref round-keys 1)) s2 (logxor s2 (aref round-keys 2)) s3 (logxor s3 (aref round-keys 3))) (do ((round (truncate n-rounds 2) (1- round))) ((zerop round)) (declare (type (unsigned-byte 16) round)) (mix-s-into-t-encrypting 4) (incf round-key-offset 8) (when (= round 1) (return-from nil (values))) (mix-t-into-s-encrypting 0)) ;; apply last round and dump cipher state into the ciphertext (flet ((apply-round (round-key u0 u1 u2 u3) (declare (type (unsigned-byte 32) round-key u0 u1 u2 u3)) (logxor (logand (aref Te4 (fourth-byte u0)) #xff000000) (logand (aref Te4 (third-byte u1)) #x00ff0000) (logand (aref Te4 (second-byte u2)) #x0000ff00) (logand (aref Te4 (first-byte u3)) #x000000ff) round-key))) (declare (inline apply-round)) (store-words ciphertext ciphertext-start (apply-round (rk-ref 0) t0 t1 t2 t3) (apply-round (rk-ref 1) t1 t2 t3 t0) (apply-round (rk-ref 2) t2 t3 t0 t1) (apply-round (rk-ref 3) t3 t0 t1 t2)))))))) (define-block-decryptor aes 16 (let ((round-keys (decryption-round-keys context)) (n-rounds (n-rounds context))) (declare (type aes-round-keys round-keys)) (declare (type (unsigned-byte 16) n-rounds)) (if #+(and sbcl x86-64 ironclad-assembly) (aes-ni-supported-p) #-(and sbcl x86-64 ironclad-assembly) nil #+(and sbcl x86-64 ironclad-assembly) (aes-ni-decrypt ciphertext ciphertext-start plaintext plaintext-start round-keys n-rounds) #-(and sbcl x86-64 ironclad-assembly) nil (with-words ((s0 s1 s2 s3) ciphertext ciphertext-start) (let ((t0 0) (t1 0) (t2 0) (t3 0) (round-key-offset 0)) (declare (type (unsigned-byte 32) t0 t1 t2 t3)) (declare (type (unsigned-byte 16) round-key-offset)) ;; initial whitening (setf s0 (logxor s0 (aref round-keys 0)) s1 (logxor s1 (aref round-keys 1)) s2 (logxor s2 (aref round-keys 2)) s3 (logxor s3 (aref round-keys 3))) (do ((round (truncate n-rounds 2) (1- round))) ((zerop round)) (declare (type (unsigned-byte 16) round)) (mix-s-into-t-decrypting 4) (incf round-key-offset 8) (when (= round 1) (return-from nil (values))) (mix-t-into-s-decrypting 0)) ;; apply last round and dump cipher state into plaintext (flet ((apply-round (round-key u0 u1 u2 u3) (declare (type (unsigned-byte 32) round-key u0 u1 u2 u3)) (logxor (logand (aref Td4 (fourth-byte u0)) #xff000000) (logand (aref Td4 (third-byte u1)) #x00ff0000) (logand (aref Td4 (second-byte u2)) #x0000ff00) (logand (aref Td4 (first-byte u3)) #x000000ff) round-key))) (declare (inline apply-round)) (store-words plaintext plaintext-start (apply-round (rk-ref 0) t0 t3 t2 t1) (apply-round (rk-ref 1) t1 t0 t3 t2) (apply-round (rk-ref 2) t2 t1 t0 t3) (apply-round (rk-ref 3) t3 t2 t1 t0)))))))) ) ; MACROLET (defmethod schedule-key ((cipher aes) key) (if #+(and sbcl x86-64 ironclad-assembly) (aes-ni-supported-p) #-(and sbcl x86-64 ironclad-assembly) nil (let ((encryption-keys (allocate-round-keys key)) (decryption-keys (allocate-round-keys key)) (n-rounds (ecase (length key) (16 10) (24 12) (32 14)))) (declare (type aes-round-keys encryption-keys decryption-keys)) #+(and sbcl x86-64 ironclad-assembly) (aes-ni-generate-round-keys key (length key) encryption-keys decryption-keys) (setf (encryption-round-keys cipher) encryption-keys (decryption-round-keys cipher) decryption-keys (n-rounds cipher) n-rounds) cipher) (multiple-value-bind (encryption-keys n-rounds) (generate-round-keys-for-encryption key (allocate-round-keys key)) (declare (type aes-round-keys encryption-keys)) (let ((decryption-keys (copy-seq encryption-keys))) (generate-round-keys-for-decryption decryption-keys n-rounds) (setf (encryption-round-keys cipher) encryption-keys (decryption-round-keys cipher) decryption-keys (n-rounds cipher) n-rounds) cipher)))) (defcipher aes (:encrypt-function aes-encrypt-block) (:decrypt-function aes-decrypt-block) (:block-length 16) (:key-length (:fixed 16 24 32))) ironclad-0.57/src/ciphers/arcfour.lisp000066400000000000000000000042071420372057600200270ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; arcfour.lisp -- implementation of the alleged RC4 stream cipher (in-package :crypto) ;;; This is a rewrite of a C program by Christophe Devine. Thanks, ;;; Mr. Devine. This version is Copyright (C) 2005 Tim Daly Jr. ;;; ;;; Code modified for Ironclad by Nathan Froyd. (deftype arcfour-sbox () '(simple-array (unsigned-byte 8) (256))) (defclass arcfour (stream-cipher) ((x :accessor arcfour-x :initform 0 :type fixnum) (y :accessor arcfour-y :initform 0 :type fixnum) (m :accessor arcfour-sbox :initform (make-array 256 :element-type '(unsigned-byte 8)) :type arcfour-sbox))) (defun arcfour-keyify (context key) (declare (type arcfour context)) (let ((m (arcfour-sbox context))) (declare (type arcfour-sbox m)) (setf (arcfour-x context) 0 (arcfour-y context) 0) (dotimes (i 256) (setf (aref m i) i)) (let ((a 0) (j 0) (k 0) (key-length (length key))) (dotimes (i 256) (setf a (aref m i) j (ldb (byte 8 0) (+ j a (aref key k))) (aref m i) (aref m j) (aref m j) a) (when (>= (incf k) key-length) (setf k 0)))))) (define-stream-cryptor arcfour (let* ((m (arcfour-sbox context)) (x (arcfour-x context)) (y (arcfour-y context)) (a 0) (b 0)) (declare (type arcfour-sbox m) (type fixnum x y a b)) (dotimes (i length (progn (setf (arcfour-x context) x (arcfour-y context) y) (values))) (setf x (ldb (byte 8 0) (1+ x)) a (aref m x) y (ldb (byte 8 0) (+ y a)) b (aref m y) (aref m x) b (aref m y) a) (setf (aref ciphertext (+ ciphertext-start i)) (logxor (aref plaintext (+ plaintext-start i)) (aref m (ldb (byte 8 0) (+ a b)))))))) (defmethod schedule-key ((cipher arcfour) key) (arcfour-keyify cipher key) cipher) (defcipher arcfour (:mode :stream) (:crypt-function arcfour-crypt) (:key-length (:variable 1 256 1))) ironclad-0.57/src/ciphers/aria.lisp000066400000000000000000001023641420372057600173050ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; aria.lisp - implementation of the ARIA block cipher (in-package :crypto) (defconst +aria-s1+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#x00636363 #x007c7c7c #x00777777 #x007b7b7b #x00f2f2f2 #x006b6b6b #x006f6f6f #x00c5c5c5 #x00303030 #x00010101 #x00676767 #x002b2b2b #x00fefefe #x00d7d7d7 #x00ababab #x00767676 #x00cacaca #x00828282 #x00c9c9c9 #x007d7d7d #x00fafafa #x00595959 #x00474747 #x00f0f0f0 #x00adadad #x00d4d4d4 #x00a2a2a2 #x00afafaf #x009c9c9c #x00a4a4a4 #x00727272 #x00c0c0c0 #x00b7b7b7 #x00fdfdfd #x00939393 #x00262626 #x00363636 #x003f3f3f #x00f7f7f7 #x00cccccc #x00343434 #x00a5a5a5 #x00e5e5e5 #x00f1f1f1 #x00717171 #x00d8d8d8 #x00313131 #x00151515 #x00040404 #x00c7c7c7 #x00232323 #x00c3c3c3 #x00181818 #x00969696 #x00050505 #x009a9a9a #x00070707 #x00121212 #x00808080 #x00e2e2e2 #x00ebebeb #x00272727 #x00b2b2b2 #x00757575 #x00090909 #x00838383 #x002c2c2c #x001a1a1a #x001b1b1b #x006e6e6e #x005a5a5a #x00a0a0a0 #x00525252 #x003b3b3b #x00d6d6d6 #x00b3b3b3 #x00292929 #x00e3e3e3 #x002f2f2f #x00848484 #x00535353 #x00d1d1d1 #x00000000 #x00ededed #x00202020 #x00fcfcfc #x00b1b1b1 #x005b5b5b #x006a6a6a #x00cbcbcb #x00bebebe #x00393939 #x004a4a4a #x004c4c4c #x00585858 #x00cfcfcf #x00d0d0d0 #x00efefef #x00aaaaaa #x00fbfbfb #x00434343 #x004d4d4d #x00333333 #x00858585 #x00454545 #x00f9f9f9 #x00020202 #x007f7f7f #x00505050 #x003c3c3c #x009f9f9f #x00a8a8a8 #x00515151 #x00a3a3a3 #x00404040 #x008f8f8f #x00929292 #x009d9d9d #x00383838 #x00f5f5f5 #x00bcbcbc #x00b6b6b6 #x00dadada #x00212121 #x00101010 #x00ffffff #x00f3f3f3 #x00d2d2d2 #x00cdcdcd #x000c0c0c #x00131313 #x00ececec #x005f5f5f #x00979797 #x00444444 #x00171717 #x00c4c4c4 #x00a7a7a7 #x007e7e7e #x003d3d3d #x00646464 #x005d5d5d #x00191919 #x00737373 #x00606060 #x00818181 #x004f4f4f #x00dcdcdc #x00222222 #x002a2a2a #x00909090 #x00888888 #x00464646 #x00eeeeee #x00b8b8b8 #x00141414 #x00dedede #x005e5e5e #x000b0b0b #x00dbdbdb #x00e0e0e0 #x00323232 #x003a3a3a #x000a0a0a #x00494949 #x00060606 #x00242424 #x005c5c5c #x00c2c2c2 #x00d3d3d3 #x00acacac #x00626262 #x00919191 #x00959595 #x00e4e4e4 #x00797979 #x00e7e7e7 #x00c8c8c8 #x00373737 #x006d6d6d #x008d8d8d #x00d5d5d5 #x004e4e4e #x00a9a9a9 #x006c6c6c #x00565656 #x00f4f4f4 #x00eaeaea #x00656565 #x007a7a7a #x00aeaeae #x00080808 #x00bababa #x00787878 #x00252525 #x002e2e2e #x001c1c1c #x00a6a6a6 #x00b4b4b4 #x00c6c6c6 #x00e8e8e8 #x00dddddd #x00747474 #x001f1f1f #x004b4b4b #x00bdbdbd #x008b8b8b #x008a8a8a #x00707070 #x003e3e3e #x00b5b5b5 #x00666666 #x00484848 #x00030303 #x00f6f6f6 #x000e0e0e #x00616161 #x00353535 #x00575757 #x00b9b9b9 #x00868686 #x00c1c1c1 #x001d1d1d #x009e9e9e #x00e1e1e1 #x00f8f8f8 #x00989898 #x00111111 #x00696969 #x00d9d9d9 #x008e8e8e #x00949494 #x009b9b9b #x001e1e1e #x00878787 #x00e9e9e9 #x00cecece #x00555555 #x00282828 #x00dfdfdf #x008c8c8c #x00a1a1a1 #x00898989 #x000d0d0d #x00bfbfbf #x00e6e6e6 #x00424242 #x00686868 #x00414141 #x00999999 #x002d2d2d #x000f0f0f #x00b0b0b0 #x00545454 #x00bbbbbb #x00161616))) (defconst +aria-s2+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#xe200e2e2 #x4e004e4e #x54005454 #xfc00fcfc #x94009494 #xc200c2c2 #x4a004a4a #xcc00cccc #x62006262 #x0d000d0d #x6a006a6a #x46004646 #x3c003c3c #x4d004d4d #x8b008b8b #xd100d1d1 #x5e005e5e #xfa00fafa #x64006464 #xcb00cbcb #xb400b4b4 #x97009797 #xbe00bebe #x2b002b2b #xbc00bcbc #x77007777 #x2e002e2e #x03000303 #xd300d3d3 #x19001919 #x59005959 #xc100c1c1 #x1d001d1d #x06000606 #x41004141 #x6b006b6b #x55005555 #xf000f0f0 #x99009999 #x69006969 #xea00eaea #x9c009c9c #x18001818 #xae00aeae #x63006363 #xdf00dfdf #xe700e7e7 #xbb00bbbb #x00000000 #x73007373 #x66006666 #xfb00fbfb #x96009696 #x4c004c4c #x85008585 #xe400e4e4 #x3a003a3a #x09000909 #x45004545 #xaa00aaaa #x0f000f0f #xee00eeee #x10001010 #xeb00ebeb #x2d002d2d #x7f007f7f #xf400f4f4 #x29002929 #xac00acac #xcf00cfcf #xad00adad #x91009191 #x8d008d8d #x78007878 #xc800c8c8 #x95009595 #xf900f9f9 #x2f002f2f #xce00cece #xcd00cdcd #x08000808 #x7a007a7a #x88008888 #x38003838 #x5c005c5c #x83008383 #x2a002a2a #x28002828 #x47004747 #xdb00dbdb #xb800b8b8 #xc700c7c7 #x93009393 #xa400a4a4 #x12001212 #x53005353 #xff00ffff #x87008787 #x0e000e0e #x31003131 #x36003636 #x21002121 #x58005858 #x48004848 #x01000101 #x8e008e8e #x37003737 #x74007474 #x32003232 #xca00caca #xe900e9e9 #xb100b1b1 #xb700b7b7 #xab00abab #x0c000c0c #xd700d7d7 #xc400c4c4 #x56005656 #x42004242 #x26002626 #x07000707 #x98009898 #x60006060 #xd900d9d9 #xb600b6b6 #xb900b9b9 #x11001111 #x40004040 #xec00ecec #x20002020 #x8c008c8c #xbd00bdbd #xa000a0a0 #xc900c9c9 #x84008484 #x04000404 #x49004949 #x23002323 #xf100f1f1 #x4f004f4f #x50005050 #x1f001f1f #x13001313 #xdc00dcdc #xd800d8d8 #xc000c0c0 #x9e009e9e #x57005757 #xe300e3e3 #xc300c3c3 #x7b007b7b #x65006565 #x3b003b3b #x02000202 #x8f008f8f #x3e003e3e #xe800e8e8 #x25002525 #x92009292 #xe500e5e5 #x15001515 #xdd00dddd #xfd00fdfd #x17001717 #xa900a9a9 #xbf00bfbf #xd400d4d4 #x9a009a9a #x7e007e7e #xc500c5c5 #x39003939 #x67006767 #xfe00fefe #x76007676 #x9d009d9d #x43004343 #xa700a7a7 #xe100e1e1 #xd000d0d0 #xf500f5f5 #x68006868 #xf200f2f2 #x1b001b1b #x34003434 #x70007070 #x05000505 #xa300a3a3 #x8a008a8a #xd500d5d5 #x79007979 #x86008686 #xa800a8a8 #x30003030 #xc600c6c6 #x51005151 #x4b004b4b #x1e001e1e #xa600a6a6 #x27002727 #xf600f6f6 #x35003535 #xd200d2d2 #x6e006e6e #x24002424 #x16001616 #x82008282 #x5f005f5f #xda00dada #xe600e6e6 #x75007575 #xa200a2a2 #xef00efef #x2c002c2c #xb200b2b2 #x1c001c1c #x9f009f9f #x5d005d5d #x6f006f6f #x80008080 #x0a000a0a #x72007272 #x44004444 #x9b009b9b #x6c006c6c #x90009090 #x0b000b0b #x5b005b5b #x33003333 #x7d007d7d #x5a005a5a #x52005252 #xf300f3f3 #x61006161 #xa100a1a1 #xf700f7f7 #xb000b0b0 #xd600d6d6 #x3f003f3f #x7c007c7c #x6d006d6d #xed00eded #x14001414 #xe000e0e0 #xa500a5a5 #x3d003d3d #x22002222 #xb300b3b3 #xf800f8f8 #x89008989 #xde00dede #x71007171 #x1a001a1a #xaf00afaf #xba00baba #xb500b5b5 #x81008181))) (defconst +aria-x1+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#x52520052 #x09090009 #x6a6a006a #xd5d500d5 #x30300030 #x36360036 #xa5a500a5 #x38380038 #xbfbf00bf #x40400040 #xa3a300a3 #x9e9e009e #x81810081 #xf3f300f3 #xd7d700d7 #xfbfb00fb #x7c7c007c #xe3e300e3 #x39390039 #x82820082 #x9b9b009b #x2f2f002f #xffff00ff #x87870087 #x34340034 #x8e8e008e #x43430043 #x44440044 #xc4c400c4 #xdede00de #xe9e900e9 #xcbcb00cb #x54540054 #x7b7b007b #x94940094 #x32320032 #xa6a600a6 #xc2c200c2 #x23230023 #x3d3d003d #xeeee00ee #x4c4c004c #x95950095 #x0b0b000b #x42420042 #xfafa00fa #xc3c300c3 #x4e4e004e #x08080008 #x2e2e002e #xa1a100a1 #x66660066 #x28280028 #xd9d900d9 #x24240024 #xb2b200b2 #x76760076 #x5b5b005b #xa2a200a2 #x49490049 #x6d6d006d #x8b8b008b #xd1d100d1 #x25250025 #x72720072 #xf8f800f8 #xf6f600f6 #x64640064 #x86860086 #x68680068 #x98980098 #x16160016 #xd4d400d4 #xa4a400a4 #x5c5c005c #xcccc00cc #x5d5d005d #x65650065 #xb6b600b6 #x92920092 #x6c6c006c #x70700070 #x48480048 #x50500050 #xfdfd00fd #xeded00ed #xb9b900b9 #xdada00da #x5e5e005e #x15150015 #x46460046 #x57570057 #xa7a700a7 #x8d8d008d #x9d9d009d #x84840084 #x90900090 #xd8d800d8 #xabab00ab #x00000000 #x8c8c008c #xbcbc00bc #xd3d300d3 #x0a0a000a #xf7f700f7 #xe4e400e4 #x58580058 #x05050005 #xb8b800b8 #xb3b300b3 #x45450045 #x06060006 #xd0d000d0 #x2c2c002c #x1e1e001e #x8f8f008f #xcaca00ca #x3f3f003f #x0f0f000f #x02020002 #xc1c100c1 #xafaf00af #xbdbd00bd #x03030003 #x01010001 #x13130013 #x8a8a008a #x6b6b006b #x3a3a003a #x91910091 #x11110011 #x41410041 #x4f4f004f #x67670067 #xdcdc00dc #xeaea00ea #x97970097 #xf2f200f2 #xcfcf00cf #xcece00ce #xf0f000f0 #xb4b400b4 #xe6e600e6 #x73730073 #x96960096 #xacac00ac #x74740074 #x22220022 #xe7e700e7 #xadad00ad #x35350035 #x85850085 #xe2e200e2 #xf9f900f9 #x37370037 #xe8e800e8 #x1c1c001c #x75750075 #xdfdf00df #x6e6e006e #x47470047 #xf1f100f1 #x1a1a001a #x71710071 #x1d1d001d #x29290029 #xc5c500c5 #x89890089 #x6f6f006f #xb7b700b7 #x62620062 #x0e0e000e #xaaaa00aa #x18180018 #xbebe00be #x1b1b001b #xfcfc00fc #x56560056 #x3e3e003e #x4b4b004b #xc6c600c6 #xd2d200d2 #x79790079 #x20200020 #x9a9a009a #xdbdb00db #xc0c000c0 #xfefe00fe #x78780078 #xcdcd00cd #x5a5a005a #xf4f400f4 #x1f1f001f #xdddd00dd #xa8a800a8 #x33330033 #x88880088 #x07070007 #xc7c700c7 #x31310031 #xb1b100b1 #x12120012 #x10100010 #x59590059 #x27270027 #x80800080 #xecec00ec #x5f5f005f #x60600060 #x51510051 #x7f7f007f #xa9a900a9 #x19190019 #xb5b500b5 #x4a4a004a #x0d0d000d #x2d2d002d #xe5e500e5 #x7a7a007a #x9f9f009f #x93930093 #xc9c900c9 #x9c9c009c #xefef00ef #xa0a000a0 #xe0e000e0 #x3b3b003b #x4d4d004d #xaeae00ae #x2a2a002a #xf5f500f5 #xb0b000b0 #xc8c800c8 #xebeb00eb #xbbbb00bb #x3c3c003c #x83830083 #x53530053 #x99990099 #x61610061 #x17170017 #x2b2b002b #x04040004 #x7e7e007e #xbaba00ba #x77770077 #xd6d600d6 #x26260026 #xe1e100e1 #x69690069 #x14140014 #x63630063 #x55550055 #x21210021 #x0c0c000c #x7d7d007d))) (defconst +aria-x2+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#x30303000 #x68686800 #x99999900 #x1b1b1b00 #x87878700 #xb9b9b900 #x21212100 #x78787800 #x50505000 #x39393900 #xdbdbdb00 #xe1e1e100 #x72727200 #x09090900 #x62626200 #x3c3c3c00 #x3e3e3e00 #x7e7e7e00 #x5e5e5e00 #x8e8e8e00 #xf1f1f100 #xa0a0a000 #xcccccc00 #xa3a3a300 #x2a2a2a00 #x1d1d1d00 #xfbfbfb00 #xb6b6b600 #xd6d6d600 #x20202000 #xc4c4c400 #x8d8d8d00 #x81818100 #x65656500 #xf5f5f500 #x89898900 #xcbcbcb00 #x9d9d9d00 #x77777700 #xc6c6c600 #x57575700 #x43434300 #x56565600 #x17171700 #xd4d4d400 #x40404000 #x1a1a1a00 #x4d4d4d00 #xc0c0c000 #x63636300 #x6c6c6c00 #xe3e3e300 #xb7b7b700 #xc8c8c800 #x64646400 #x6a6a6a00 #x53535300 #xaaaaaa00 #x38383800 #x98989800 #x0c0c0c00 #xf4f4f400 #x9b9b9b00 #xededed00 #x7f7f7f00 #x22222200 #x76767600 #xafafaf00 #xdddddd00 #x3a3a3a00 #x0b0b0b00 #x58585800 #x67676700 #x88888800 #x06060600 #xc3c3c300 #x35353500 #x0d0d0d00 #x01010100 #x8b8b8b00 #x8c8c8c00 #xc2c2c200 #xe6e6e600 #x5f5f5f00 #x02020200 #x24242400 #x75757500 #x93939300 #x66666600 #x1e1e1e00 #xe5e5e500 #xe2e2e200 #x54545400 #xd8d8d800 #x10101000 #xcecece00 #x7a7a7a00 #xe8e8e800 #x08080800 #x2c2c2c00 #x12121200 #x97979700 #x32323200 #xababab00 #xb4b4b400 #x27272700 #x0a0a0a00 #x23232300 #xdfdfdf00 #xefefef00 #xcacaca00 #xd9d9d900 #xb8b8b800 #xfafafa00 #xdcdcdc00 #x31313100 #x6b6b6b00 #xd1d1d100 #xadadad00 #x19191900 #x49494900 #xbdbdbd00 #x51515100 #x96969600 #xeeeeee00 #xe4e4e400 #xa8a8a800 #x41414100 #xdadada00 #xffffff00 #xcdcdcd00 #x55555500 #x86868600 #x36363600 #xbebebe00 #x61616100 #x52525200 #xf8f8f800 #xbbbbbb00 #x0e0e0e00 #x82828200 #x48484800 #x69696900 #x9a9a9a00 #xe0e0e000 #x47474700 #x9e9e9e00 #x5c5c5c00 #x04040400 #x4b4b4b00 #x34343400 #x15151500 #x79797900 #x26262600 #xa7a7a700 #xdedede00 #x29292900 #xaeaeae00 #x92929200 #xd7d7d700 #x84848400 #xe9e9e900 #xd2d2d200 #xbababa00 #x5d5d5d00 #xf3f3f300 #xc5c5c500 #xb0b0b000 #xbfbfbf00 #xa4a4a400 #x3b3b3b00 #x71717100 #x44444400 #x46464600 #x2b2b2b00 #xfcfcfc00 #xebebeb00 #x6f6f6f00 #xd5d5d500 #xf6f6f600 #x14141400 #xfefefe00 #x7c7c7c00 #x70707000 #x5a5a5a00 #x7d7d7d00 #xfdfdfd00 #x2f2f2f00 #x18181800 #x83838300 #x16161600 #xa5a5a500 #x91919100 #x1f1f1f00 #x05050500 #x95959500 #x74747400 #xa9a9a900 #xc1c1c100 #x5b5b5b00 #x4a4a4a00 #x85858500 #x6d6d6d00 #x13131300 #x07070700 #x4f4f4f00 #x4e4e4e00 #x45454500 #xb2b2b200 #x0f0f0f00 #xc9c9c900 #x1c1c1c00 #xa6a6a600 #xbcbcbc00 #xececec00 #x73737300 #x90909000 #x7b7b7b00 #xcfcfcf00 #x59595900 #x8f8f8f00 #xa1a1a100 #xf9f9f900 #x2d2d2d00 #xf2f2f200 #xb1b1b100 #x00000000 #x94949400 #x37373700 #x9f9f9f00 #xd0d0d000 #x2e2e2e00 #x9c9c9c00 #x6e6e6e00 #x28282800 #x3f3f3f00 #x80808000 #xf0f0f000 #x3d3d3d00 #xd3d3d300 #x25252500 #x8a8a8a00 #xb5b5b500 #xe7e7e700 #x42424200 #xb3b3b300 #xc7c7c700 #xeaeaea00 #xf7f7f700 #x4c4c4c00 #x11111100 #x33333300 #x03030300 #xa2a2a200 #xacacac00 #x60606000))) (defconst +aria-c1+ (make-array 4 :element-type '(unsigned-byte 32) :initial-contents '(#x517cc1b7 #x27220a94 #xfe13abe8 #xfa9a6ee0))) (defconst +aria-c2+ (make-array 4 :element-type '(unsigned-byte 32) :initial-contents '(#x6db14acc #x9e21c820 #xff28b1d5 #xef5de2b0))) (defconst +aria-c3+ (make-array 4 :element-type '(unsigned-byte 32) :initial-contents '(#xdb92371d #x2126e970 #x03249775 #x04e8c90e))) (defmacro aria-brf (x y) `(logand (ash ,x ,(- (* 8 y))) 255)) (defmacro aria-kxl (x0 x1 x2 x3 keys n) `(setf ,x0 (logxor ,x0 (aref ,keys ,(* 4 n))) ,x1 (logxor ,x1 (aref ,keys ,(+ (* 4 n) 1))) ,x2 (logxor ,x2 (aref ,keys ,(+ (* 4 n) 2))) ,x3 (logxor ,x3 (aref ,keys ,(+ (* 4 n) 3))))) (defmacro aria-sbl1-m (x0 x1 x2 x3) `(setf ,x0 (logxor (aref +aria-s1+ (aria-brf ,x0 3)) (aref +aria-s2+ (aria-brf ,x0 2)) (aref +aria-x1+ (aria-brf ,x0 1)) (aref +aria-x2+ (aria-brf ,x0 0))) ,x1 (logxor (aref +aria-s1+ (aria-brf ,x1 3)) (aref +aria-s2+ (aria-brf ,x1 2)) (aref +aria-x1+ (aria-brf ,x1 1)) (aref +aria-x2+ (aria-brf ,x1 0))) ,x2 (logxor (aref +aria-s1+ (aria-brf ,x2 3)) (aref +aria-s2+ (aria-brf ,x2 2)) (aref +aria-x1+ (aria-brf ,x2 1)) (aref +aria-x2+ (aria-brf ,x2 0))) ,x3 (logxor (aref +aria-s1+ (aria-brf ,x3 3)) (aref +aria-s2+ (aria-brf ,x3 2)) (aref +aria-x1+ (aria-brf ,x3 1)) (aref +aria-x2+ (aria-brf ,x3 0))))) (defmacro aria-sbl2-m (x0 x1 x2 x3) `(setf ,x0 (logxor (aref +aria-x1+ (aria-brf ,x0 3)) (aref +aria-x2+ (aria-brf ,x0 2)) (aref +aria-s1+ (aria-brf ,x0 1)) (aref +aria-s2+ (aria-brf ,x0 0))) ,x1 (logxor (aref +aria-x1+ (aria-brf ,x1 3)) (aref +aria-x2+ (aria-brf ,x1 2)) (aref +aria-s1+ (aria-brf ,x1 1)) (aref +aria-s2+ (aria-brf ,x1 0))) ,x2 (logxor (aref +aria-x1+ (aria-brf ,x2 3)) (aref +aria-x2+ (aria-brf ,x2 2)) (aref +aria-s1+ (aria-brf ,x2 1)) (aref +aria-s2+ (aria-brf ,x2 0))) ,x3 (logxor (aref +aria-x1+ (aria-brf ,x3 3)) (aref +aria-x2+ (aria-brf ,x3 2)) (aref +aria-s1+ (aria-brf ,x3 1)) (aref +aria-s2+ (aria-brf ,x3 0))))) (defmacro aria-p (x0 x1 x2 x3) (declare (ignorable x0)) `(setf ,x1 (logxor (logand (mod32ash ,x1 8) #xff00ff00) (logand (mod32ash ,x1 -8) #x00ff00ff)) ,x2 (ror32 ,x2 16) ,x3 (logxor (mod32ash ,x3 -24) (logand (mod32ash ,x3 -8) #x0000ff00) (logand (mod32ash ,x3 8) #x00ff0000) (mod32ash ,x3 24)))) (defmacro aria-m (x y) `(setf ,y (logxor (mod32ash ,x 8) (mod32ash ,x -8) (mod32ash ,x 16) (mod32ash ,x -16) (mod32ash ,x 24) (mod32ash ,x -24)))) (defmacro aria-mm (x0 x1 x2 x3) `(setf ,x1 (logxor ,x1 ,x2) ,x2 (logxor ,x2 ,x3) ,x0 (logxor ,x0 ,x1) ,x3 (logxor ,x3 ,x1) ,x2 (logxor ,x2 ,x0) ,x1 (logxor ,x1 ,x2))) (defmacro aria-fo (x0 x1 x2 x3) `(progn (aria-sbl1-m ,x0 ,x1 ,x2 ,x3) (aria-mm ,x0 ,x1 ,x2 ,x3) (aria-p ,x0 ,x1 ,x2 ,x3) (aria-mm ,x0 ,x1 ,x2 ,x3))) (defmacro aria-fe (x0 x1 x2 x3) `(progn (aria-sbl2-m ,x0 ,x1 ,x2 ,x3) (aria-mm ,x0 ,x1 ,x2 ,x3) (aria-p ,x2 ,x3 ,x0 ,x1) (aria-mm ,x0 ,x1 ,x2 ,x3))) (defun aria-gsrk (x y n keys k) (declare (type (simple-array (unsigned-byte 32) (*)) x y keys) (type (integer 0) n k)) (let ((q (- 4 (floor n 32))) (r (mod n 32))) (setf (aref keys (* 4 k)) (logxor (aref x 0) (mod32ash (aref y (mod q 4)) (- r)) (mod32ash (aref y (mod (+ q 3) 4)) (- 32 r))) (aref keys (+ (* 4 k) 1)) (logxor (aref x 1) (mod32ash (aref y (mod (+ q 1) 4)) (- r)) (mod32ash (aref y (mod q 4)) (- 32 r))) (aref keys (+ (* 4 k) 2)) (logxor (aref x 2) (mod32ash (aref y (mod (+ q 2) 4)) (- r)) (mod32ash (aref y (mod (+ q 1) 4)) (- 32 r))) (aref keys (+ (* 4 k) 3)) (logxor (aref x 3) (mod32ash (aref y (mod (+ q 3) 4)) (- r)) (mod32ash (aref y (mod (+ q 2) 4)) (- 32 r)))))) (defun aria-process-block (in in-start out out-start keys rounds) (declare (type (simple-array (unsigned-byte 8) (*)) in out) (type (simple-array (unsigned-byte 32) (68)) keys) (type fixnum in-start out-start rounds) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((x0 (ub32ref/be in in-start)) (x1 (ub32ref/be in (+ in-start 4))) (x2 (ub32ref/be in (+ in-start 8))) (x3 (ub32ref/be in (+ in-start 12)))) (declare (type (unsigned-byte 32) x0 x1 x2 x3)) (aria-kxl x0 x1 x2 x3 keys 0) (aria-fo x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 1) (aria-fe x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 2) (aria-fo x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 3) (aria-fe x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 4) (aria-fo x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 5) (aria-fe x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 6) (aria-fo x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 7) (aria-fe x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 8) (aria-fo x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 9) (aria-fe x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 10) (aria-fo x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 11) (when (> rounds 12) (aria-fe x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 12) (aria-fo x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 13)) (when (> rounds 14) (aria-fe x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 14) (aria-fo x0 x1 x2 x3) (aria-kxl x0 x1 x2 x3 keys 15)) (setf x0 (logxor (mod32ash (aref +aria-x1+ (aria-brf x0 3)) 24) (logand (mod32ash (aref +aria-x2+ (aria-brf x0 2)) 8) #x00ff0000) (logand (mod32ash (aref +aria-s1+ (aria-brf x0 1)) 8) #x0000ff00) (logand (aref +aria-s2+ (aria-brf x0 0)) #x000000ff)) x1 (logxor (mod32ash (aref +aria-x1+ (aria-brf x1 3)) 24) (logand (mod32ash (aref +aria-x2+ (aria-brf x1 2)) 8) #x00ff0000) (logand (mod32ash (aref +aria-s1+ (aria-brf x1 1)) 8) #x0000ff00) (logand (aref +aria-s2+ (aria-brf x1 0)) #x000000ff)) x2 (logxor (mod32ash (aref +aria-x1+ (aria-brf x2 3)) 24) (logand (mod32ash (aref +aria-x2+ (aria-brf x2 2)) 8) #x00ff0000) (logand (mod32ash (aref +aria-s1+ (aria-brf x2 1)) 8) #x0000ff00) (logand (aref +aria-s2+ (aria-brf x2 0)) #x000000ff)) x3 (logxor (mod32ash (aref +aria-x1+ (aria-brf x3 3)) 24) (logand (mod32ash (aref +aria-x2+ (aria-brf x3 2)) 8) #x00ff0000) (logand (mod32ash (aref +aria-s1+ (aria-brf x3 1)) 8) #x0000ff00) (logand (aref +aria-s2+ (aria-brf x3 0)) #x000000ff))) (case rounds ((12) (aria-kxl x0 x1 x2 x3 keys 12)) ((14) (aria-kxl x0 x1 x2 x3 keys 14)) ((16) (aria-kxl x0 x1 x2 x3 keys 16))) (setf (ub32ref/be out out-start) x0 (ub32ref/be out (+ out-start 4)) x1 (ub32ref/be out (+ out-start 8)) x2 (ub32ref/be out (+ out-start 12)) x3)) (values)) (defclass aria (cipher 16-byte-block-mixin) ((rounds :accessor rounds :type (integer 12 16)) (encryption-round-keys :accessor encryption-round-keys :type (simple-array (unsigned-byte 32) (68))) (decryption-round-keys :accessor decryption-round-keys :type (simple-array (unsigned-byte 32) (68))))) (defmethod schedule-key ((cipher aria) key) (let* ((key-length (length key)) (rounds (ecase key-length ((16) 12) ((24) 14) ((32) 16))) (ck1 (ecase key-length ((16) +aria-c1+) ((24) +aria-c2+) ((32) +aria-c3+))) (ck2 (ecase key-length ((16) +aria-c2+) ((24) +aria-c3+) ((32) +aria-c1+))) (ck3 (ecase key-length ((16) +aria-c3+) ((24) +aria-c1+) ((32) +aria-c2+))) (encryption-keys (make-array 68 :element-type '(unsigned-byte 32))) (decryption-keys (make-array 68 :element-type '(unsigned-byte 32))) (k0 (ub32ref/be key 0)) (k1 (ub32ref/be key 4)) (k2 (ub32ref/be key 8)) (k3 (ub32ref/be key 12)) (w0 (make-array 4 :element-type '(unsigned-byte 32))) (w1 (make-array 4 :element-type '(unsigned-byte 32))) (w2 (make-array 4 :element-type '(unsigned-byte 32))) (w3 (make-array 4 :element-type '(unsigned-byte 32)))) (declare (type (unsigned-byte 32) k0 k1 k2 k3) (type (simple-array (unsigned-byte 32) (4)) w0 w1 w2 w3)) (setf (aref w0 0) k0 (aref w0 1) k1 (aref w0 2) k2 (aref w0 3) k3) (setf k0 (logxor k0 (aref ck1 0)) k1 (logxor k1 (aref ck1 1)) k2 (logxor k2 (aref ck1 2)) k3 (logxor k3 (aref ck1 3))) (aria-fo k0 k1 k2 k3) (setf k0 (logxor k0 (if (> key-length 16) (ub32ref/be key 16) 0)) k1 (logxor k1 (if (> key-length 16) (ub32ref/be key 20) 0)) k2 (logxor k2 (if (> key-length 24) (ub32ref/be key 24) 0)) k3 (logxor k3 (if (> key-length 24) (ub32ref/be key 28) 0))) (setf (aref w1 0) k0 (aref w1 1) k1 (aref w1 2) k2 (aref w1 3) k3) (setf k0 (logxor k0 (aref ck2 0)) k1 (logxor k1 (aref ck2 1)) k2 (logxor k2 (aref ck2 2)) k3 (logxor k3 (aref ck2 3))) (aria-fe k0 k1 k2 k3) (setf k0 (logxor k0 (aref w0 0)) k1 (logxor k1 (aref w0 1)) k2 (logxor k2 (aref w0 2)) k3 (logxor k3 (aref w0 3))) (setf (aref w2 0) k0 (aref w2 1) k1 (aref w2 2) k2 (aref w2 3) k3) (setf k0 (logxor k0 (aref ck3 0)) k1 (logxor k1 (aref ck3 1)) k2 (logxor k2 (aref ck3 2)) k3 (logxor k3 (aref ck3 3))) (aria-fo k0 k1 k2 k3) (setf (aref w3 0) (logxor k0 (aref w1 0)) (aref w3 1) (logxor k1 (aref w1 1)) (aref w3 2) (logxor k2 (aref w1 2)) (aref w3 3) (logxor k3 (aref w1 3))) (aria-gsrk w0 w1 19 encryption-keys 0) (aria-gsrk w1 w2 19 encryption-keys 1) (aria-gsrk w2 w3 19 encryption-keys 2) (aria-gsrk w3 w0 19 encryption-keys 3) (aria-gsrk w0 w1 31 encryption-keys 4) (aria-gsrk w1 w2 31 encryption-keys 5) (aria-gsrk w2 w3 31 encryption-keys 6) (aria-gsrk w3 w0 31 encryption-keys 7) (aria-gsrk w0 w1 67 encryption-keys 8) (aria-gsrk w1 w2 67 encryption-keys 9) (aria-gsrk w2 w3 67 encryption-keys 10) (aria-gsrk w3 w0 67 encryption-keys 11) (aria-gsrk w0 w1 97 encryption-keys 12) (when (> rounds 12) (aria-gsrk w1 w2 97 encryption-keys 13) (aria-gsrk w2 w3 97 encryption-keys 14)) (when (> rounds 14) (aria-gsrk w3 w0 97 encryption-keys 15) (aria-gsrk w0 w1 109 encryption-keys 16)) (loop for i from (* 4 rounds) downto 0 by 4 for j from 0 by 4 do (progn (replace decryption-keys encryption-keys :start1 j :start2 i :end2 (+ i 4)) (unless (or (zerop i) (zerop j)) (aria-m (aref encryption-keys i) k0) (aria-m (aref encryption-keys (+ i 1)) k1) (aria-m (aref encryption-keys (+ i 2)) k2) (aria-m (aref encryption-keys (+ i 3)) k3) (aria-mm k0 k1 k2 k3) (aria-p k0 k1 k2 k3) (aria-mm k0 k1 k2 k3) (setf (aref decryption-keys j) k0 (aref decryption-keys (+ j 1)) k1 (aref decryption-keys (+ j 2)) k2 (aref decryption-keys (+ j 3)) k3)))) (setf (rounds cipher) rounds (encryption-round-keys cipher) encryption-keys (decryption-round-keys cipher) decryption-keys) cipher)) (define-block-encryptor aria 16 (aria-process-block plaintext plaintext-start ciphertext ciphertext-start (encryption-round-keys context) (rounds context))) (define-block-decryptor aria 16 (aria-process-block ciphertext ciphertext-start plaintext plaintext-start (decryption-round-keys context) (rounds context))) (defcipher aria (:encrypt-function aria-encrypt-block) (:decrypt-function aria-decrypt-block) (:block-length 16) (:key-length (:fixed 16 24 32))) ironclad-0.57/src/ciphers/blowfish.lisp000066400000000000000000000451211420372057600202030ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; blowfish.lisp -- implementation of Bruce Schneier's Blowfish block cipher (in-package :crypto) (in-ironclad-readtable) (defconst +blowfish-n-rounds+ 16) (declaim (type (simple-array (unsigned-byte 32) (18)) +p-array+)) (defconst +p-array+ #32@(#x243f6a88 #x85a308d3 #x13198a2e #x03707344 #xa4093822 #x299f31d0 #x082efa98 #xec4e6c89 #x452821e6 #x38d01377 #xbe5466cf #x34e90c6c #xc0ac29b7 #xc97c50dd #x3f84d5b5 #xb5470917 #x9216d5d9 #x8979fb1b)) (declaim (type (simple-array (unsigned-byte 32) (256)) +s-box-0+ +s-box-1+ +s-box-2+ +s-box-3+)) (defconst +s-box-0+ #32@(#xd1310ba6 #x98dfb5ac #x2ffd72db #xd01adfb7 #xb8e1afed #x6a267e96 #xba7c9045 #xf12c7f99 #x24a19947 #xb3916cf7 #x0801f2e2 #x858efc16 #x636920d8 #x71574e69 #xa458fea3 #xf4933d7e #x0d95748f #x728eb658 #x718bcd58 #x82154aee #x7b54a41d #xc25a59b5 #x9c30d539 #x2af26013 #xc5d1b023 #x286085f0 #xca417918 #xb8db38ef #x8e79dcb0 #x603a180e #x6c9e0e8b #xb01e8a3e #xd71577c1 #xbd314b27 #x78af2fda #x55605c60 #xe65525f3 #xaa55ab94 #x57489862 #x63e81440 #x55ca396a #x2aab10b6 #xb4cc5c34 #x1141e8ce #xa15486af #x7c72e993 #xb3ee1411 #x636fbc2a #x2ba9c55d #x741831f6 #xce5c3e16 #x9b87931e #xafd6ba33 #x6c24cf5c #x7a325381 #x28958677 #x3b8f4898 #x6b4bb9af #xc4bfe81b #x66282193 #x61d809cc #xfb21a991 #x487cac60 #x5dec8032 #xef845d5d #xe98575b1 #xdc262302 #xeb651b88 #x23893e81 #xd396acc5 #x0f6d6ff3 #x83f44239 #x2e0b4482 #xa4842004 #x69c8f04a #x9e1f9b5e #x21c66842 #xf6e96c9a #x670c9c61 #xabd388f0 #x6a51a0d2 #xd8542f68 #x960fa728 #xab5133a3 #x6eef0b6c #x137a3be4 #xba3bf050 #x7efb2a98 #xa1f1651d #x39af0176 #x66ca593e #x82430e88 #x8cee8619 #x456f9fb4 #x7d84a5c3 #x3b8b5ebe #xe06f75d8 #x85c12073 #x401a449f #x56c16aa6 #x4ed3aa62 #x363f7706 #x1bfedf72 #x429b023d #x37d0d724 #xd00a1248 #xdb0fead3 #x49f1c09b #x075372c9 #x80991b7b #x25d479d8 #xf6e8def7 #xe3fe501a #xb6794c3b #x976ce0bd #x04c006ba #xc1a94fb6 #x409f60c4 #x5e5c9ec2 #x196a2463 #x68fb6faf #x3e6c53b5 #x1339b2eb #x3b52ec6f #x6dfc511f #x9b30952c #xcc814544 #xaf5ebd09 #xbee3d004 #xde334afd #x660f2807 #x192e4bb3 #xc0cba857 #x45c8740f #xd20b5f39 #xb9d3fbdb #x5579c0bd #x1a60320a #xd6a100c6 #x402c7279 #x679f25fe #xfb1fa3cc #x8ea5e9f8 #xdb3222f8 #x3c7516df #xfd616b15 #x2f501ec8 #xad0552ab #x323db5fa #xfd238760 #x53317b48 #x3e00df82 #x9e5c57bb #xca6f8ca0 #x1a87562e #xdf1769db #xd542a8f6 #x287effc3 #xac6732c6 #x8c4f5573 #x695b27b0 #xbbca58c8 #xe1ffa35d #xb8f011a0 #x10fa3d98 #xfd2183b8 #x4afcb56c #x2dd1d35b #x9a53e479 #xb6f84565 #xd28e49bc #x4bfb9790 #xe1ddf2da #xa4cb7e33 #x62fb1341 #xcee4c6e8 #xef20cada #x36774c01 #xd07e9efe #x2bf11fb4 #x95dbda4d #xae909198 #xeaad8e71 #x6b93d5a0 #xd08ed1d0 #xafc725e0 #x8e3c5b2f #x8e7594b7 #x8ff6e2fb #xf2122b64 #x8888b812 #x900df01c #x4fad5ea0 #x688fc31c #xd1cff191 #xb3a8c1ad #x2f2f2218 #xbe0e1777 #xea752dfe #x8b021fa1 #xe5a0cc0f #xb56f74e8 #x18acf3d6 #xce89e299 #xb4a84fe0 #xfd13e0b7 #x7cc43b81 #xd2ada8d9 #x165fa266 #x80957705 #x93cc7314 #x211a1477 #xe6ad2065 #x77b5fa86 #xc75442f5 #xfb9d35cf #xebcdaf0c #x7b3e89a0 #xd6411bd3 #xae1e7e49 #x00250e2d #x2071b35e #x226800bb #x57b8e0af #x2464369b #xf009b91e #x5563911d #x59dfa6aa #x78c14389 #xd95a537f #x207d5ba2 #x02e5b9c5 #x83260376 #x6295cfa9 #x11c81968 #x4e734a41 #xb3472dca #x7b14a94a #x1b510052 #x9a532915 #xd60f573f #xbc9bc6e4 #x2b60a476 #x81e67400 #x08ba6fb5 #x571be91f #xf296ec6b #x2a0dd915 #xb6636521 #xe7b9f9b6 #xff34052e #xc5855664 #x53b02d5d #xa99f8fa1 #x08ba4799 #x6e85076a)) (defconst +s-box-1+ #32@(#x4b7a70e9 #xb5b32944 #xdb75092e #xc4192623 #xad6ea6b0 #x49a7df7d #x9cee60b8 #x8fedb266 #xecaa8c71 #x699a17ff #x5664526c #xc2b19ee1 #x193602a5 #x75094c29 #xa0591340 #xe4183a3e #x3f54989a #x5b429d65 #x6b8fe4d6 #x99f73fd6 #xa1d29c07 #xefe830f5 #x4d2d38e6 #xf0255dc1 #x4cdd2086 #x8470eb26 #x6382e9c6 #x021ecc5e #x09686b3f #x3ebaefc9 #x3c971814 #x6b6a70a1 #x687f3584 #x52a0e286 #xb79c5305 #xaa500737 #x3e07841c #x7fdeae5c #x8e7d44ec #x5716f2b8 #xb03ada37 #xf0500c0d #xf01c1f04 #x0200b3ff #xae0cf51a #x3cb574b2 #x25837a58 #xdc0921bd #xd19113f9 #x7ca92ff6 #x94324773 #x22f54701 #x3ae5e581 #x37c2dadc #xc8b57634 #x9af3dda7 #xa9446146 #x0fd0030e #xecc8c73e #xa4751e41 #xe238cd99 #x3bea0e2f #x3280bba1 #x183eb331 #x4e548b38 #x4f6db908 #x6f420d03 #xf60a04bf #x2cb81290 #x24977c79 #x5679b072 #xbcaf89af #xde9a771f #xd9930810 #xb38bae12 #xdccf3f2e #x5512721f #x2e6b7124 #x501adde6 #x9f84cd87 #x7a584718 #x7408da17 #xbc9f9abc #xe94b7d8c #xec7aec3a #xdb851dfa #x63094366 #xc464c3d2 #xef1c1847 #x3215d908 #xdd433b37 #x24c2ba16 #x12a14d43 #x2a65c451 #x50940002 #x133ae4dd #x71dff89e #x10314e55 #x81ac77d6 #x5f11199b #x043556f1 #xd7a3c76b #x3c11183b #x5924a509 #xf28fe6ed #x97f1fbfa #x9ebabf2c #x1e153c6e #x86e34570 #xeae96fb1 #x860e5e0a #x5a3e2ab3 #x771fe71c #x4e3d06fa #x2965dcb9 #x99e71d0f #x803e89d6 #x5266c825 #x2e4cc978 #x9c10b36a #xc6150eba #x94e2ea78 #xa5fc3c53 #x1e0a2df4 #xf2f74ea7 #x361d2b3d #x1939260f #x19c27960 #x5223a708 #xf71312b6 #xebadfe6e #xeac31f66 #xe3bc4595 #xa67bc883 #xb17f37d1 #x018cff28 #xc332ddef #xbe6c5aa5 #x65582185 #x68ab9802 #xeecea50f #xdb2f953b #x2aef7dad #x5b6e2f84 #x1521b628 #x29076170 #xecdd4775 #x619f1510 #x13cca830 #xeb61bd96 #x0334fe1e #xaa0363cf #xb5735c90 #x4c70a239 #xd59e9e0b #xcbaade14 #xeecc86bc #x60622ca7 #x9cab5cab #xb2f3846e #x648b1eaf #x19bdf0ca #xa02369b9 #x655abb50 #x40685a32 #x3c2ab4b3 #x319ee9d5 #xc021b8f7 #x9b540b19 #x875fa099 #x95f7997e #x623d7da8 #xf837889a #x97e32d77 #x11ed935f #x16681281 #x0e358829 #xc7e61fd6 #x96dedfa1 #x7858ba99 #x57f584a5 #x1b227263 #x9b83c3ff #x1ac24696 #xcdb30aeb #x532e3054 #x8fd948e4 #x6dbc3128 #x58ebf2ef #x34c6ffea #xfe28ed61 #xee7c3c73 #x5d4a14d9 #xe864b7e3 #x42105d14 #x203e13e0 #x45eee2b6 #xa3aaabea #xdb6c4f15 #xfacb4fd0 #xc742f442 #xef6abbb5 #x654f3b1d #x41cd2105 #xd81e799e #x86854dc7 #xe44b476a #x3d816250 #xcf62a1f2 #x5b8d2646 #xfc8883a0 #xc1c7b6a3 #x7f1524c3 #x69cb7492 #x47848a0b #x5692b285 #x095bbf00 #xad19489d #x1462b174 #x23820e00 #x58428d2a #x0c55f5ea #x1dadf43e #x233f7061 #x3372f092 #x8d937e41 #xd65fecf1 #x6c223bdb #x7cde3759 #xcbee7460 #x4085f2a7 #xce77326e #xa6078084 #x19f8509e #xe8efd855 #x61d99735 #xa969a7aa #xc50c06c2 #x5a04abfc #x800bcadc #x9e447a2e #xc3453484 #xfdd56705 #x0e1e9ec9 #xdb73dbd3 #x105588cd #x675fda79 #xe3674340 #xc5c43465 #x713e38d8 #x3d28f89e #xf16dff20 #x153e21e7 #x8fb03d4a #xe6e39f2b #xdb83adf7)) (defconst +s-box-2+ #32@(#xe93d5a68 #x948140f7 #xf64c261c #x94692934 #x411520f7 #x7602d4f7 #xbcf46b2e #xd4a20068 #xd4082471 #x3320f46a #x43b7d4b7 #x500061af #x1e39f62e #x97244546 #x14214f74 #xbf8b8840 #x4d95fc1d #x96b591af #x70f4ddd3 #x66a02f45 #xbfbc09ec #x03bd9785 #x7fac6dd0 #x31cb8504 #x96eb27b3 #x55fd3941 #xda2547e6 #xabca0a9a #x28507825 #x530429f4 #x0a2c86da #xe9b66dfb #x68dc1462 #xd7486900 #x680ec0a4 #x27a18dee #x4f3ffea2 #xe887ad8c #xb58ce006 #x7af4d6b6 #xaace1e7c #xd3375fec #xce78a399 #x406b2a42 #x20fe9e35 #xd9f385b9 #xee39d7ab #x3b124e8b #x1dc9faf7 #x4b6d1856 #x26a36631 #xeae397b2 #x3a6efa74 #xdd5b4332 #x6841e7f7 #xca7820fb #xfb0af54e #xd8feb397 #x454056ac #xba489527 #x55533a3a #x20838d87 #xfe6ba9b7 #xd096954b #x55a867bc #xa1159a58 #xcca92963 #x99e1db33 #xa62a4a56 #x3f3125f9 #x5ef47e1c #x9029317c #xfdf8e802 #x04272f70 #x80bb155c #x05282ce3 #x95c11548 #xe4c66d22 #x48c1133f #xc70f86dc #x07f9c9ee #x41041f0f #x404779a4 #x5d886e17 #x325f51eb #xd59bc0d1 #xf2bcc18f #x41113564 #x257b7834 #x602a9c60 #xdff8e8a3 #x1f636c1b #x0e12b4c2 #x02e1329e #xaf664fd1 #xcad18115 #x6b2395e0 #x333e92e1 #x3b240b62 #xeebeb922 #x85b2a20e #xe6ba0d99 #xde720c8c #x2da2f728 #xd0127845 #x95b794fd #x647d0862 #xe7ccf5f0 #x5449a36f #x877d48fa #xc39dfd27 #xf33e8d1e #x0a476341 #x992eff74 #x3a6f6eab #xf4f8fd37 #xa812dc60 #xa1ebddf8 #x991be14c #xdb6e6b0d #xc67b5510 #x6d672c37 #x2765d43b #xdcd0e804 #xf1290dc7 #xcc00ffa3 #xb5390f92 #x690fed0b #x667b9ffb #xcedb7d9c #xa091cf0b #xd9155ea3 #xbb132f88 #x515bad24 #x7b9479bf #x763bd6eb #x37392eb3 #xcc115979 #x8026e297 #xf42e312d #x6842ada7 #xc66a2b3b #x12754ccc #x782ef11c #x6a124237 #xb79251e7 #x06a1bbe6 #x4bfb6350 #x1a6b1018 #x11caedfa #x3d25bdd8 #xe2e1c3c9 #x44421659 #x0a121386 #xd90cec6e #xd5abea2a #x64af674e #xda86a85f #xbebfe988 #x64e4c3fe #x9dbc8057 #xf0f7c086 #x60787bf8 #x6003604d #xd1fd8346 #xf6381fb0 #x7745ae04 #xd736fccc #x83426b33 #xf01eab71 #xb0804187 #x3c005e5f #x77a057be #xbde8ae24 #x55464299 #xbf582e61 #x4e58f48f #xf2ddfda2 #xf474ef38 #x8789bdc2 #x5366f9c3 #xc8b38e74 #xb475f255 #x46fcd9b9 #x7aeb2661 #x8b1ddf84 #x846a0e79 #x915f95e2 #x466e598e #x20b45770 #x8cd55591 #xc902de4c #xb90bace1 #xbb8205d0 #x11a86248 #x7574a99e #xb77f19b6 #xe0a9dc09 #x662d09a1 #xc4324633 #xe85a1f02 #x09f0be8c #x4a99a025 #x1d6efe10 #x1ab93d1d #x0ba5a4df #xa186f20f #x2868f169 #xdcb7da83 #x573906fe #xa1e2ce9b #x4fcd7f52 #x50115e01 #xa70683fa #xa002b5c4 #x0de6d027 #x9af88c27 #x773f8641 #xc3604c06 #x61a806b5 #xf0177a28 #xc0f586e0 #x006058aa #x30dc7d62 #x11e69ed7 #x2338ea63 #x53c2dd94 #xc2c21634 #xbbcbee56 #x90bcb6de #xebfc7da1 #xce591d76 #x6f05e409 #x4b7c0188 #x39720a3d #x7c927c24 #x86e3725f #x724d9db9 #x1ac15bb4 #xd39eb8fc #xed545578 #x08fca5b5 #xd83d7cd3 #x4dad0fc4 #x1e50ef5e #xb161e6f8 #xa28514d9 #x6c51133c #x6fd5c7e7 #x56e14ec4 #x362abfce #xddc6c837 #xd79a3234 #x92638212 #x670efa8e #x406000e0)) (defconst +s-box-3+ #32@(#x3a39ce37 #xd3faf5cf #xabc27737 #x5ac52d1b #x5cb0679e #x4fa33742 #xd3822740 #x99bc9bbe #xd5118e9d #xbf0f7315 #xd62d1c7e #xc700c47b #xb78c1b6b #x21a19045 #xb26eb1be #x6a366eb4 #x5748ab2f #xbc946e79 #xc6a376d2 #x6549c2c8 #x530ff8ee #x468dde7d #xd5730a1d #x4cd04dc6 #x2939bbdb #xa9ba4650 #xac9526e8 #xbe5ee304 #xa1fad5f0 #x6a2d519a #x63ef8ce2 #x9a86ee22 #xc089c2b8 #x43242ef6 #xa51e03aa #x9cf2d0a4 #x83c061ba #x9be96a4d #x8fe51550 #xba645bd6 #x2826a2f9 #xa73a3ae1 #x4ba99586 #xef5562e9 #xc72fefd3 #xf752f7da #x3f046f69 #x77fa0a59 #x80e4a915 #x87b08601 #x9b09e6ad #x3b3ee593 #xe990fd5a #x9e34d797 #x2cf0b7d9 #x022b8b51 #x96d5ac3a #x017da67d #xd1cf3ed6 #x7c7d2d28 #x1f9f25cf #xadf2b89b #x5ad6b472 #x5a88f54c #xe029ac71 #xe019a5e6 #x47b0acfd #xed93fa9b #xe8d3c48d #x283b57cc #xf8d56629 #x79132e28 #x785f0191 #xed756055 #xf7960e44 #xe3d35e8c #x15056dd4 #x88f46dba #x03a16125 #x0564f0bd #xc3eb9e15 #x3c9057a2 #x97271aec #xa93a072a #x1b3f6d9b #x1e6321f5 #xf59c66fb #x26dcf319 #x7533d928 #xb155fdf5 #x03563482 #x8aba3cbb #x28517711 #xc20ad9f8 #xabcc5167 #xccad925f #x4de81751 #x3830dc8e #x379d5862 #x9320f991 #xea7a90c2 #xfb3e7bce #x5121ce64 #x774fbe32 #xa8b6e37e #xc3293d46 #x48de5369 #x6413e680 #xa2ae0810 #xdd6db224 #x69852dfd #x09072166 #xb39a460a #x6445c0dd #x586cdecf #x1c20c8ae #x5bbef7dd #x1b588d40 #xccd2017f #x6bb4e3bb #xdda26a7e #x3a59ff45 #x3e350a44 #xbcb4cdd5 #x72eacea8 #xfa6484bb #x8d6612ae #xbf3c6f47 #xd29be463 #x542f5d9e #xaec2771b #xf64e6370 #x740e0d8d #xe75b1357 #xf8721671 #xaf537d5d #x4040cb08 #x4eb4e2cc #x34d2466a #x0115af84 #xe1b00428 #x95983a1d #x06b89fb4 #xce6ea048 #x6f3f3b82 #x3520ab82 #x011a1d4b #x277227f8 #x611560b1 #xe7933fdc #xbb3a792b #x344525bd #xa08839e1 #x51ce794b #x2f32c9b7 #xa01fbac9 #xe01cc87e #xbcc7d1f6 #xcf0111c3 #xa1e8aac7 #x1a908749 #xd44fbd9a #xd0dadecb #xd50ada38 #x0339c32a #xc6913667 #x8df9317c #xe0b12b4f #xf79e59b7 #x43f5bb3a #xf2d519ff #x27d9459c #xbf97222c #x15e6fc2a #x0f91fc71 #x9b941525 #xfae59361 #xceb69ceb #xc2a86459 #x12baa8d1 #xb6c1075e #xe3056a0c #x10d25065 #xcb03a442 #xe0ec6e0e #x1698db3b #x4c98a0be #x3278e964 #x9f1f9532 #xe0d392df #xd3a0342b #x8971f21e #x1b0a7441 #x4ba3348c #xc5be7120 #xc37632d8 #xdf359f8d #x9b992f2e #xe60b6f47 #x0fe3f11d #xe54cda54 #x1edad891 #xce6279cf #xcd3e7e6f #x1618b166 #xfd2c1d05 #x848fd2c5 #xf6fb2299 #xf523f357 #xa6327623 #x93a83531 #x56cccd02 #xacf08162 #x5a75ebb5 #x6e163697 #x88d273cc #xde966292 #x81b949d0 #x4c50901b #x71c65614 #xe6c6c7bd #x327a140a #x45e1d006 #xc3f27b9a #xc9aa53fd #x62a80f00 #xbb25bfe2 #x35bdd2f6 #x71126905 #xb2040222 #xb6cbcf7c #xcd769c2b #x53113ec0 #x1640e3d3 #x38abbd60 #x2547adf0 #xba38209c #xf746ce76 #x77afa1c5 #x20756060 #x85cbfe4e #x8ae88dd8 #x7aaaf9b0 #x4cf9aa7e #x1948c25c #x02fb8a8c #x01c36ae4 #xd6ebe1f9 #x90d4f869 #xa65cdea0 #x3f09252d #xc208e69f #xb74e6132 #xce77e25b #x578fdfe3 #x3ac372e6)) ;;; the actual Blowfish implementation (eval-when (:compile-toplevel :load-toplevel) (deftype blowfish-p-array () '(simple-array (unsigned-byte 32) (18))) (deftype blowfish-s-boxes () '(simple-array (unsigned-byte 32) (1024))) ) (defclass blowfish (cipher 8-byte-block-mixin) ((p-array :accessor p-array :type blowfish-p-array) (s-boxes :accessor s-boxes :type blowfish-s-boxes))) (macrolet ((s-box (s-boxes which index) `(aref ,s-boxes (+ (* 256 ,which) ,index))) (s-box-0 (s-boxes index) `(s-box ,s-boxes 0 ,index)) (s-box-1 (s-boxes index) `(s-box ,s-boxes 1 ,index)) (s-box-2 (s-boxes index) `(s-box ,s-boxes 2 ,index)) (s-box-3 (s-boxes index) `(s-box ,s-boxes 3 ,index))) (declaim (inline blowfish-f)) (defun blowfish-f (block s-boxes) (declare (type (unsigned-byte 32) block)) (declare (type blowfish-s-boxes s-boxes)) (mod32+ (s-box-3 s-boxes (first-byte block)) (logxor (s-box-2 s-boxes (second-byte block)) (mod32+ (s-box-1 s-boxes (third-byte block)) (s-box-0 s-boxes (fourth-byte block)))))) (declaim (inline blowfish-encrypt-block*)) (defun blowfish-encrypt-block* (p-array s-boxes plaintext plaintext-start ciphertext ciphertext-start) (declare (type (simple-array (unsigned-byte 8) (*)) plaintext ciphertext)) (declare (type (integer 0 #.(- array-dimension-limit 8)) plaintext-start ciphertext-start)) (declare (type blowfish-p-array p-array)) (declare (type blowfish-s-boxes s-boxes)) (with-words ((left right) plaintext plaintext-start) #.(loop for i from 0 below 16 if (evenp i) collect `(setf left (logxor left (aref p-array ,i)) right (logxor right (blowfish-f left s-boxes))) into forms else collect `(setf right (logxor right (aref p-array ,i)) left (logxor left (blowfish-f right s-boxes))) into forms finally (return `(progn ,@forms))) (setf left (logxor left (aref p-array 16)) right (logxor right (aref p-array 17))) (store-words ciphertext ciphertext-start right left))) (defun initialize-blowfish-vectors (key p-array s-boxes) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (declare (type blowfish-p-array p-array)) (declare (type blowfish-s-boxes s-boxes)) (mix-p-array key p-array) (let ((data (make-array 8 :element-type '(unsigned-byte 8) :initial-element 0))) (declare (type (simple-array (unsigned-byte 8) (8)) data)) (do ((i 0 (+ i 2))) ((= i (+ +blowfish-n-rounds+ 2))) (blowfish-encrypt-block* p-array s-boxes data 0 data 0) (setf (aref p-array i) (ub32ref/be data 0) (aref p-array (1+ i)) (ub32ref/be data 4))) (dotimes (i 4) (do ((j 0 (+ j 2))) ((= j 256)) (blowfish-encrypt-block* p-array s-boxes data 0 data 0) (setf (s-box s-boxes i j) (ub32ref/be data 0) (s-box s-boxes i (1+ j)) (ub32ref/be data 4)))))) (declaim (notinline blowfish-encrypt-block*)) (define-block-encryptor blowfish 8 (declare (inline blowfish-encrypt-block*)) (blowfish-encrypt-block* (p-array context) (s-boxes context) plaintext plaintext-start ciphertext ciphertext-start)) (declaim (inline blowfish-decrypt-block*)) (defun blowfish-decrypt-block* (p-array s-boxes ciphertext ciphertext-start plaintext plaintext-start) (declare (type (simple-array (unsigned-byte 8) (*)) plaintext ciphertext)) (declare (type (integer 0 #.(- array-dimension-limit 8)) ciphertext-start plaintext-start)) (declare (type blowfish-p-array p-array)) (declare (type blowfish-s-boxes s-boxes)) (with-words ((left right) ciphertext ciphertext-start) #.(loop for i from 17 above 1 if (oddp i) collect `(setf left (logxor left (aref p-array ,i)) right (logxor right (blowfish-f left s-boxes))) into forms else collect `(setf right (logxor right (aref p-array ,i)) left (logxor left (blowfish-f right s-boxes))) into forms finally (return `(progn ,@forms))) (setf left (logxor left (aref p-array 1)) right (logxor right (aref p-array 0))) (store-words plaintext plaintext-start right left))) (declaim (notinline blowfish-decrypt-block*)) (define-block-decryptor blowfish 8 (declare (inline blowfish-decrypt-block*)) (blowfish-decrypt-block* (p-array context) (s-boxes context) ciphertext ciphertext-start plaintext plaintext-start)) (defun mix-p-array (key p-array) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (declare (type blowfish-p-array p-array)) (let ((n-key-bytes (length key)) (j 0)) (dotimes (i (+ +blowfish-n-rounds+ 2)) (let ((data 0)) (declare (type (unsigned-byte 32) data)) (dotimes (k 4) (setf data (logior (mod32ash data 8) (aref key j))) (incf j) (when (>= j n-key-bytes) (setf j 0))) (setf (aref p-array i) (logxor (aref p-array i) data)))))) (defmethod schedule-key ((cipher blowfish) key) (let ((p-array (copy-seq +p-array+)) (s-boxes (make-array 1024 :element-type '(unsigned-byte 32)))) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (declare (type blowfish-p-array p-array)) (declare (type blowfish-s-boxes s-boxes)) (dotimes (i 256) (setf (aref s-boxes i) (aref +s-box-0+ i) (aref s-boxes (+ 256 i)) (aref +s-box-1+ i) (aref s-boxes (+ 512 i)) (aref +s-box-2+ i) (aref s-boxes (+ 768 i)) (aref +s-box-3+ i))) (initialize-blowfish-vectors key p-array s-boxes) (setf (p-array cipher) p-array (s-boxes cipher) s-boxes) cipher)) ) ; MACROLET (defcipher blowfish (:encrypt-function blowfish-encrypt-block) (:decrypt-function blowfish-decrypt-block) (:block-length 8) (:key-length (:variable 1 56 1))) ironclad-0.57/src/ciphers/camellia.lisp000066400000000000000000001004631420372057600201360ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; camellia.lisp - implementation of the Camellia block cipher (in-package :crypto) (defconst +camellia-sbox1+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#x70707000 #x82828200 #x2c2c2c00 #xececec00 #xb3b3b300 #x27272700 #xc0c0c000 #xe5e5e500 #xe4e4e400 #x85858500 #x57575700 #x35353500 #xeaeaea00 #x0c0c0c00 #xaeaeae00 #x41414100 #x23232300 #xefefef00 #x6b6b6b00 #x93939300 #x45454500 #x19191900 #xa5a5a500 #x21212100 #xededed00 #x0e0e0e00 #x4f4f4f00 #x4e4e4e00 #x1d1d1d00 #x65656500 #x92929200 #xbdbdbd00 #x86868600 #xb8b8b800 #xafafaf00 #x8f8f8f00 #x7c7c7c00 #xebebeb00 #x1f1f1f00 #xcecece00 #x3e3e3e00 #x30303000 #xdcdcdc00 #x5f5f5f00 #x5e5e5e00 #xc5c5c500 #x0b0b0b00 #x1a1a1a00 #xa6a6a600 #xe1e1e100 #x39393900 #xcacaca00 #xd5d5d500 #x47474700 #x5d5d5d00 #x3d3d3d00 #xd9d9d900 #x01010100 #x5a5a5a00 #xd6d6d600 #x51515100 #x56565600 #x6c6c6c00 #x4d4d4d00 #x8b8b8b00 #x0d0d0d00 #x9a9a9a00 #x66666600 #xfbfbfb00 #xcccccc00 #xb0b0b000 #x2d2d2d00 #x74747400 #x12121200 #x2b2b2b00 #x20202000 #xf0f0f000 #xb1b1b100 #x84848400 #x99999900 #xdfdfdf00 #x4c4c4c00 #xcbcbcb00 #xc2c2c200 #x34343400 #x7e7e7e00 #x76767600 #x05050500 #x6d6d6d00 #xb7b7b700 #xa9a9a900 #x31313100 #xd1d1d100 #x17171700 #x04040400 #xd7d7d700 #x14141400 #x58585800 #x3a3a3a00 #x61616100 #xdedede00 #x1b1b1b00 #x11111100 #x1c1c1c00 #x32323200 #x0f0f0f00 #x9c9c9c00 #x16161600 #x53535300 #x18181800 #xf2f2f200 #x22222200 #xfefefe00 #x44444400 #xcfcfcf00 #xb2b2b200 #xc3c3c300 #xb5b5b500 #x7a7a7a00 #x91919100 #x24242400 #x08080800 #xe8e8e800 #xa8a8a800 #x60606000 #xfcfcfc00 #x69696900 #x50505000 #xaaaaaa00 #xd0d0d000 #xa0a0a000 #x7d7d7d00 #xa1a1a100 #x89898900 #x62626200 #x97979700 #x54545400 #x5b5b5b00 #x1e1e1e00 #x95959500 #xe0e0e000 #xffffff00 #x64646400 #xd2d2d200 #x10101000 #xc4c4c400 #x00000000 #x48484800 #xa3a3a300 #xf7f7f700 #x75757500 #xdbdbdb00 #x8a8a8a00 #x03030300 #xe6e6e600 #xdadada00 #x09090900 #x3f3f3f00 #xdddddd00 #x94949400 #x87878700 #x5c5c5c00 #x83838300 #x02020200 #xcdcdcd00 #x4a4a4a00 #x90909000 #x33333300 #x73737300 #x67676700 #xf6f6f600 #xf3f3f300 #x9d9d9d00 #x7f7f7f00 #xbfbfbf00 #xe2e2e200 #x52525200 #x9b9b9b00 #xd8d8d800 #x26262600 #xc8c8c800 #x37373700 #xc6c6c600 #x3b3b3b00 #x81818100 #x96969600 #x6f6f6f00 #x4b4b4b00 #x13131300 #xbebebe00 #x63636300 #x2e2e2e00 #xe9e9e900 #x79797900 #xa7a7a700 #x8c8c8c00 #x9f9f9f00 #x6e6e6e00 #xbcbcbc00 #x8e8e8e00 #x29292900 #xf5f5f500 #xf9f9f900 #xb6b6b600 #x2f2f2f00 #xfdfdfd00 #xb4b4b400 #x59595900 #x78787800 #x98989800 #x06060600 #x6a6a6a00 #xe7e7e700 #x46464600 #x71717100 #xbababa00 #xd4d4d400 #x25252500 #xababab00 #x42424200 #x88888800 #xa2a2a200 #x8d8d8d00 #xfafafa00 #x72727200 #x07070700 #xb9b9b900 #x55555500 #xf8f8f800 #xeeeeee00 #xacacac00 #x0a0a0a00 #x36363600 #x49494900 #x2a2a2a00 #x68686800 #x3c3c3c00 #x38383800 #xf1f1f100 #xa4a4a400 #x40404000 #x28282800 #xd3d3d300 #x7b7b7b00 #xbbbbbb00 #xc9c9c900 #x43434300 #xc1c1c100 #x15151500 #xe3e3e300 #xadadad00 #xf4f4f400 #x77777700 #xc7c7c700 #x80808000 #x9e9e9e00))) (defconst +camellia-sbox2+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#x00e0e0e0 #x00050505 #x00585858 #x00d9d9d9 #x00676767 #x004e4e4e #x00818181 #x00cbcbcb #x00c9c9c9 #x000b0b0b #x00aeaeae #x006a6a6a #x00d5d5d5 #x00181818 #x005d5d5d #x00828282 #x00464646 #x00dfdfdf #x00d6d6d6 #x00272727 #x008a8a8a #x00323232 #x004b4b4b #x00424242 #x00dbdbdb #x001c1c1c #x009e9e9e #x009c9c9c #x003a3a3a #x00cacaca #x00252525 #x007b7b7b #x000d0d0d #x00717171 #x005f5f5f #x001f1f1f #x00f8f8f8 #x00d7d7d7 #x003e3e3e #x009d9d9d #x007c7c7c #x00606060 #x00b9b9b9 #x00bebebe #x00bcbcbc #x008b8b8b #x00161616 #x00343434 #x004d4d4d #x00c3c3c3 #x00727272 #x00959595 #x00ababab #x008e8e8e #x00bababa #x007a7a7a #x00b3b3b3 #x00020202 #x00b4b4b4 #x00adadad #x00a2a2a2 #x00acacac #x00d8d8d8 #x009a9a9a #x00171717 #x001a1a1a #x00353535 #x00cccccc #x00f7f7f7 #x00999999 #x00616161 #x005a5a5a #x00e8e8e8 #x00242424 #x00565656 #x00404040 #x00e1e1e1 #x00636363 #x00090909 #x00333333 #x00bfbfbf #x00989898 #x00979797 #x00858585 #x00686868 #x00fcfcfc #x00ececec #x000a0a0a #x00dadada #x006f6f6f #x00535353 #x00626262 #x00a3a3a3 #x002e2e2e #x00080808 #x00afafaf #x00282828 #x00b0b0b0 #x00747474 #x00c2c2c2 #x00bdbdbd #x00363636 #x00222222 #x00383838 #x00646464 #x001e1e1e #x00393939 #x002c2c2c #x00a6a6a6 #x00303030 #x00e5e5e5 #x00444444 #x00fdfdfd #x00888888 #x009f9f9f #x00656565 #x00878787 #x006b6b6b #x00f4f4f4 #x00232323 #x00484848 #x00101010 #x00d1d1d1 #x00515151 #x00c0c0c0 #x00f9f9f9 #x00d2d2d2 #x00a0a0a0 #x00555555 #x00a1a1a1 #x00414141 #x00fafafa #x00434343 #x00131313 #x00c4c4c4 #x002f2f2f #x00a8a8a8 #x00b6b6b6 #x003c3c3c #x002b2b2b #x00c1c1c1 #x00ffffff #x00c8c8c8 #x00a5a5a5 #x00202020 #x00898989 #x00000000 #x00909090 #x00474747 #x00efefef #x00eaeaea #x00b7b7b7 #x00151515 #x00060606 #x00cdcdcd #x00b5b5b5 #x00121212 #x007e7e7e #x00bbbbbb #x00292929 #x000f0f0f #x00b8b8b8 #x00070707 #x00040404 #x009b9b9b #x00949494 #x00212121 #x00666666 #x00e6e6e6 #x00cecece #x00ededed #x00e7e7e7 #x003b3b3b #x00fefefe #x007f7f7f #x00c5c5c5 #x00a4a4a4 #x00373737 #x00b1b1b1 #x004c4c4c #x00919191 #x006e6e6e #x008d8d8d #x00767676 #x00030303 #x002d2d2d #x00dedede #x00969696 #x00262626 #x007d7d7d #x00c6c6c6 #x005c5c5c #x00d3d3d3 #x00f2f2f2 #x004f4f4f #x00191919 #x003f3f3f #x00dcdcdc #x00797979 #x001d1d1d #x00525252 #x00ebebeb #x00f3f3f3 #x006d6d6d #x005e5e5e #x00fbfbfb #x00696969 #x00b2b2b2 #x00f0f0f0 #x00313131 #x000c0c0c #x00d4d4d4 #x00cfcfcf #x008c8c8c #x00e2e2e2 #x00757575 #x00a9a9a9 #x004a4a4a #x00575757 #x00848484 #x00111111 #x00454545 #x001b1b1b #x00f5f5f5 #x00e4e4e4 #x000e0e0e #x00737373 #x00aaaaaa #x00f1f1f1 #x00dddddd #x00595959 #x00141414 #x006c6c6c #x00929292 #x00545454 #x00d0d0d0 #x00787878 #x00707070 #x00e3e3e3 #x00494949 #x00808080 #x00505050 #x00a7a7a7 #x00f6f6f6 #x00777777 #x00939393 #x00868686 #x00838383 #x002a2a2a #x00c7c7c7 #x005b5b5b #x00e9e9e9 #x00eeeeee #x008f8f8f #x00010101 #x003d3d3d))) (defconst +camellia-sbox3+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#x38003838 #x41004141 #x16001616 #x76007676 #xd900d9d9 #x93009393 #x60006060 #xf200f2f2 #x72007272 #xc200c2c2 #xab00abab #x9a009a9a #x75007575 #x06000606 #x57005757 #xa000a0a0 #x91009191 #xf700f7f7 #xb500b5b5 #xc900c9c9 #xa200a2a2 #x8c008c8c #xd200d2d2 #x90009090 #xf600f6f6 #x07000707 #xa700a7a7 #x27002727 #x8e008e8e #xb200b2b2 #x49004949 #xde00dede #x43004343 #x5c005c5c #xd700d7d7 #xc700c7c7 #x3e003e3e #xf500f5f5 #x8f008f8f #x67006767 #x1f001f1f #x18001818 #x6e006e6e #xaf00afaf #x2f002f2f #xe200e2e2 #x85008585 #x0d000d0d #x53005353 #xf000f0f0 #x9c009c9c #x65006565 #xea00eaea #xa300a3a3 #xae00aeae #x9e009e9e #xec00ecec #x80008080 #x2d002d2d #x6b006b6b #xa800a8a8 #x2b002b2b #x36003636 #xa600a6a6 #xc500c5c5 #x86008686 #x4d004d4d #x33003333 #xfd00fdfd #x66006666 #x58005858 #x96009696 #x3a003a3a #x09000909 #x95009595 #x10001010 #x78007878 #xd800d8d8 #x42004242 #xcc00cccc #xef00efef #x26002626 #xe500e5e5 #x61006161 #x1a001a1a #x3f003f3f #x3b003b3b #x82008282 #xb600b6b6 #xdb00dbdb #xd400d4d4 #x98009898 #xe800e8e8 #x8b008b8b #x02000202 #xeb00ebeb #x0a000a0a #x2c002c2c #x1d001d1d #xb000b0b0 #x6f006f6f #x8d008d8d #x88008888 #x0e000e0e #x19001919 #x87008787 #x4e004e4e #x0b000b0b #xa900a9a9 #x0c000c0c #x79007979 #x11001111 #x7f007f7f #x22002222 #xe700e7e7 #x59005959 #xe100e1e1 #xda00dada #x3d003d3d #xc800c8c8 #x12001212 #x04000404 #x74007474 #x54005454 #x30003030 #x7e007e7e #xb400b4b4 #x28002828 #x55005555 #x68006868 #x50005050 #xbe00bebe #xd000d0d0 #xc400c4c4 #x31003131 #xcb00cbcb #x2a002a2a #xad00adad #x0f000f0f #xca00caca #x70007070 #xff00ffff #x32003232 #x69006969 #x08000808 #x62006262 #x00000000 #x24002424 #xd100d1d1 #xfb00fbfb #xba00baba #xed00eded #x45004545 #x81008181 #x73007373 #x6d006d6d #x84008484 #x9f009f9f #xee00eeee #x4a004a4a #xc300c3c3 #x2e002e2e #xc100c1c1 #x01000101 #xe600e6e6 #x25002525 #x48004848 #x99009999 #xb900b9b9 #xb300b3b3 #x7b007b7b #xf900f9f9 #xce00cece #xbf00bfbf #xdf00dfdf #x71007171 #x29002929 #xcd00cdcd #x6c006c6c #x13001313 #x64006464 #x9b009b9b #x63006363 #x9d009d9d #xc000c0c0 #x4b004b4b #xb700b7b7 #xa500a5a5 #x89008989 #x5f005f5f #xb100b1b1 #x17001717 #xf400f4f4 #xbc00bcbc #xd300d3d3 #x46004646 #xcf00cfcf #x37003737 #x5e005e5e #x47004747 #x94009494 #xfa00fafa #xfc00fcfc #x5b005b5b #x97009797 #xfe00fefe #x5a005a5a #xac00acac #x3c003c3c #x4c004c4c #x03000303 #x35003535 #xf300f3f3 #x23002323 #xb800b8b8 #x5d005d5d #x6a006a6a #x92009292 #xd500d5d5 #x21002121 #x44004444 #x51005151 #xc600c6c6 #x7d007d7d #x39003939 #x83008383 #xdc00dcdc #xaa00aaaa #x7c007c7c #x77007777 #x56005656 #x05000505 #x1b001b1b #xa400a4a4 #x15001515 #x34003434 #x1e001e1e #x1c001c1c #xf800f8f8 #x52005252 #x20002020 #x14001414 #xe900e9e9 #xbd00bdbd #xdd00dddd #xe400e4e4 #xa100a1a1 #xe000e0e0 #x8a008a8a #xf100f1f1 #xd600d6d6 #x7a007a7a #xbb00bbbb #xe300e3e3 #x40004040 #x4f004f4f))) (defconst +camellia-sbox4+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#x70700070 #x2c2c002c #xb3b300b3 #xc0c000c0 #xe4e400e4 #x57570057 #xeaea00ea #xaeae00ae #x23230023 #x6b6b006b #x45450045 #xa5a500a5 #xeded00ed #x4f4f004f #x1d1d001d #x92920092 #x86860086 #xafaf00af #x7c7c007c #x1f1f001f #x3e3e003e #xdcdc00dc #x5e5e005e #x0b0b000b #xa6a600a6 #x39390039 #xd5d500d5 #x5d5d005d #xd9d900d9 #x5a5a005a #x51510051 #x6c6c006c #x8b8b008b #x9a9a009a #xfbfb00fb #xb0b000b0 #x74740074 #x2b2b002b #xf0f000f0 #x84840084 #xdfdf00df #xcbcb00cb #x34340034 #x76760076 #x6d6d006d #xa9a900a9 #xd1d100d1 #x04040004 #x14140014 #x3a3a003a #xdede00de #x11110011 #x32320032 #x9c9c009c #x53530053 #xf2f200f2 #xfefe00fe #xcfcf00cf #xc3c300c3 #x7a7a007a #x24240024 #xe8e800e8 #x60600060 #x69690069 #xaaaa00aa #xa0a000a0 #xa1a100a1 #x62620062 #x54540054 #x1e1e001e #xe0e000e0 #x64640064 #x10100010 #x00000000 #xa3a300a3 #x75750075 #x8a8a008a #xe6e600e6 #x09090009 #xdddd00dd #x87870087 #x83830083 #xcdcd00cd #x90900090 #x73730073 #xf6f600f6 #x9d9d009d #xbfbf00bf #x52520052 #xd8d800d8 #xc8c800c8 #xc6c600c6 #x81810081 #x6f6f006f #x13130013 #x63630063 #xe9e900e9 #xa7a700a7 #x9f9f009f #xbcbc00bc #x29290029 #xf9f900f9 #x2f2f002f #xb4b400b4 #x78780078 #x06060006 #xe7e700e7 #x71710071 #xd4d400d4 #xabab00ab #x88880088 #x8d8d008d #x72720072 #xb9b900b9 #xf8f800f8 #xacac00ac #x36360036 #x2a2a002a #x3c3c003c #xf1f100f1 #x40400040 #xd3d300d3 #xbbbb00bb #x43430043 #x15150015 #xadad00ad #x77770077 #x80800080 #x82820082 #xecec00ec #x27270027 #xe5e500e5 #x85850085 #x35350035 #x0c0c000c #x41410041 #xefef00ef #x93930093 #x19190019 #x21210021 #x0e0e000e #x4e4e004e #x65650065 #xbdbd00bd #xb8b800b8 #x8f8f008f #xebeb00eb #xcece00ce #x30300030 #x5f5f005f #xc5c500c5 #x1a1a001a #xe1e100e1 #xcaca00ca #x47470047 #x3d3d003d #x01010001 #xd6d600d6 #x56560056 #x4d4d004d #x0d0d000d #x66660066 #xcccc00cc #x2d2d002d #x12120012 #x20200020 #xb1b100b1 #x99990099 #x4c4c004c #xc2c200c2 #x7e7e007e #x05050005 #xb7b700b7 #x31310031 #x17170017 #xd7d700d7 #x58580058 #x61610061 #x1b1b001b #x1c1c001c #x0f0f000f #x16160016 #x18180018 #x22220022 #x44440044 #xb2b200b2 #xb5b500b5 #x91910091 #x08080008 #xa8a800a8 #xfcfc00fc #x50500050 #xd0d000d0 #x7d7d007d #x89890089 #x97970097 #x5b5b005b #x95950095 #xffff00ff #xd2d200d2 #xc4c400c4 #x48480048 #xf7f700f7 #xdbdb00db #x03030003 #xdada00da #x3f3f003f #x94940094 #x5c5c005c #x02020002 #x4a4a004a #x33330033 #x67670067 #xf3f300f3 #x7f7f007f #xe2e200e2 #x9b9b009b #x26260026 #x37370037 #x3b3b003b #x96960096 #x4b4b004b #xbebe00be #x2e2e002e #x79790079 #x8c8c008c #x6e6e006e #x8e8e008e #xf5f500f5 #xb6b600b6 #xfdfd00fd #x59590059 #x98980098 #x6a6a006a #x46460046 #xbaba00ba #x25250025 #x42420042 #xa2a200a2 #xfafa00fa #x07070007 #x55550055 #xeeee00ee #x0a0a000a #x49490049 #x68680068 #x38380038 #xa4a400a4 #x28280028 #x7b7b007b #xc9c900c9 #xc1c100c1 #xe3e300e3 #xf4f400f4 #xc7c700c7 #x9e9e009e))) (defconst +camellia-sigma+ (make-array 12 :element-type '(unsigned-byte 32) :initial-contents '(#xa09e667f #x3bcc908b #xb67ae858 #x4caa73b2 #xc6ef372f #xe94f82be #x54ff53a5 #xf1d36f1c #x10e527fa #xde682d1d #xb05688c2 #xb3e6c1fd))) (defconst +camellia-ksft1+ (make-array 26 :element-type '(unsigned-byte 7) :initial-contents '(0 64 0 64 15 79 15 79 30 94 45 109 45 124 60 124 77 13 94 30 94 30 111 47 111 47))) (defconst +camellia-kidx1+ (make-array 26 :element-type '(unsigned-byte 4) :initial-contents '(0 0 8 8 0 0 8 8 8 8 0 0 8 0 8 8 0 0 0 0 8 8 0 0 8 8))) (defconst +camellia-ksft2+ (make-array 34 :element-type '(unsigned-byte 7) :initial-contents '(0 64 0 64 15 79 15 79 30 94 30 94 45 109 45 109 60 124 60 124 60 124 77 13 77 13 94 30 94 30 111 47 111 47))) (defconst +camellia-kidx2+ (make-array 34 :element-type '(unsigned-byte 4) :initial-contents '(0 0 12 12 4 4 8 8 4 4 12 12 0 0 8 8 0 0 4 4 12 12 0 0 8 8 4 4 8 8 0 0 12 12))) (declaim (ftype (function ((simple-array (unsigned-byte 32) (*)) fixnum (simple-array (unsigned-byte 32) (*)) fixnum fixnum)) camellia-feistel) (inline camellia-feistel)) (defun camellia-feistel (data data-start keys keys-start key-offset) (declare (type (simple-array (unsigned-byte 32) (*)) data keys) (type fixnum data-start keys-start key-offset) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (macrolet ((sbox1 (n) `(aref +camellia-sbox1+ (logand ,n 255))) (sbox2 (n) `(aref +camellia-sbox2+ (logand ,n 255))) (sbox3 (n) `(aref +camellia-sbox3+ (logand ,n 255))) (sbox4 (n) `(aref +camellia-sbox4+ (logand ,n 255)))) (let ((d 0) (u 0) (s1 0) (s2 0)) (declare (type (unsigned-byte 32) d u s1 s2)) (setf s1 (logxor (aref data data-start) (aref keys keys-start)) u (logxor (sbox4 s1) (sbox3 (mod32ash s1 -8)) (sbox2 (mod32ash s1 -16)) (sbox1 (mod32ash s1 -24))) s2 (logxor (aref data (+ data-start 1)) (aref keys (+ keys-start 1))) d (logxor (sbox1 s2) (sbox4 (mod32ash s2 -8)) (sbox3 (mod32ash s2 -16)) (sbox2 (mod32ash s2 -24)))) (setf (aref data (+ data-start 2)) (logxor (aref data (+ data-start 2)) d u) (aref data (+ data-start 3)) (logxor (aref data (+ data-start 3)) d u (ror32 u 8))) (setf s1 (logxor (aref data (+ data-start 2)) (aref keys (+ keys-start key-offset))) u (logxor (sbox4 s1) (sbox3 (mod32ash s1 -8)) (sbox2 (mod32ash s1 -16)) (sbox1 (mod32ash s1 -24))) s2 (logxor (aref data (+ data-start 3)) (aref keys (+ keys-start key-offset 1))) d (logxor (sbox1 s2) (sbox4 (mod32ash s2 -8)) (sbox3 (mod32ash s2 -16)) (sbox2 (mod32ash s2 -24)))) (setf (aref data data-start) (logxor (aref data data-start) d u) (aref data (+ data-start 1)) (logxor (aref data (+ data-start 1)) d u (ror32 u 8))) (values)))) (defclass camellia (cipher 16-byte-block-mixin) ((round-keys :accessor round-keys :type (simple-array (unsigned-byte 32) (68))) (grand-rounds :accessor grand-rounds :type (integer 3 4)))) (defmethod schedule-key ((cipher camellia) key) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (let ((round-keys (make-array 68 :element-type '(unsigned-byte 32))) (data (make-array 16 :element-type '(unsigned-byte 32)))) (declare (type (simple-array (unsigned-byte 32) (*)) round-keys data) (dynamic-extent data)) (ecase (length key) ((16) (dotimes (i 4) (setf (aref data i) (ub32ref/be key (* 4 i)))) (fill data 0 :start 4 :end 8)) ((24) (dotimes (i 6) (setf (aref data i) (ub32ref/be key (* 4 i)))) (setf (aref data 6) (mod32lognot (aref data 4)) (aref data 7) (mod32lognot (aref data 5)))) ((32) (dotimes (i 8) (setf (aref data i) (ub32ref/be key (* 4 i)))))) (dotimes (i 4) (setf (aref data (+ i 8)) (logxor (aref data i) (aref data (+ i 4))))) (camellia-feistel data 8 +camellia-sigma+ 0 2) (dotimes (i 4) (setf (aref data (+ i 8)) (logxor (aref data (+ i 8)) (aref data i)))) (camellia-feistel data 8 +camellia-sigma+ 4 2) (flet ((rotblock (in in-start out out-start n) (let* ((r (logand n 31)) (idx (ash n -5)) (idx1 (logand (1+ idx) 3)) (idx2 (logand (1+ idx1) 3))) (setf (aref out out-start) (logior (mod32ash (aref in (+ in-start idx)) r) (mod32ash (aref in (+ in-start idx1)) (- r 32))) (aref out (+ out-start 1)) (logior (mod32ash (aref in (+ in-start idx1)) r) (mod32ash (aref in (+ in-start idx2)) (- r 32)))) (values)))) (if (= 16 (length key)) (progn (setf (grand-rounds cipher) 3) (replace round-keys data :end2 4) (replace round-keys data :start1 4 :start2 8 :end2 12) (loop for i from 4 below 26 by 2 do (rotblock data (aref +camellia-kidx1+ i) round-keys (* 2 i) (aref +camellia-ksft1+ i)) (rotblock data (aref +camellia-kidx1+ (1+ i)) round-keys (+ (* 2 i) 2) (aref +camellia-ksft1+ (1+ i))))) (progn (setf (grand-rounds cipher) 4) (dotimes (i 4) (setf (aref data (+ i 12)) (logxor (aref data (+ i 8)) (aref data (+ i 4))))) (camellia-feistel data 12 +camellia-sigma+ 8 2) (replace round-keys data :end2 4) (replace round-keys data :start1 4 :start2 12 :end2 16) (loop for i from 4 below 34 by 2 do (rotblock data (aref +camellia-kidx2+ i) round-keys (* 2 i) (aref +camellia-ksft2+ i)) (rotblock data (aref +camellia-kidx2+ (1+ i)) round-keys (+ (* 2 i) 2) (aref +camellia-ksft2+ (1+ i))))))) (setf (round-keys cipher) round-keys) cipher)) (define-block-encryptor camellia 16 (let ((round-keys (round-keys context)) (keys-start 4) (grand-rounds (grand-rounds context)) (data (make-array 4 :element-type '(unsigned-byte 32)))) (declare (type (simple-array (unsigned-byte 32) (*)) round-keys data) (type fixnum keys-start grand-rounds) (dynamic-extent data)) (setf (aref data 0) (logxor (ub32ref/be plaintext plaintext-start) (aref round-keys 0)) (aref data 1) (logxor (ub32ref/be plaintext (+ plaintext-start 4)) (aref round-keys 1)) (aref data 2) (logxor (ub32ref/be plaintext (+ plaintext-start 8)) (aref round-keys 2)) (aref data 3) (logxor (ub32ref/be plaintext (+ plaintext-start 12)) (aref round-keys 3))) (dotimes (i grand-rounds) (dotimes (j 3) (camellia-feistel data 0 round-keys keys-start 2) (incf keys-start 4)) (when (< i (1- grand-rounds)) (setf (aref data 1) (logxor (aref data 1) (rol32 (logand (aref data 0) (aref round-keys keys-start)) 1)) (aref data 0) (logxor (aref data 0) (logior (aref data 1) (aref round-keys (+ keys-start 1)))) (aref data 2) (logxor (aref data 2) (logior (aref data 3) (aref round-keys (+ keys-start 3)))) (aref data 3) (logxor (aref data 3) (rol32 (logand (aref data 2) (aref round-keys (+ keys-start 2))) 1))) (incf keys-start 4))) (rotatef (aref data 0) (aref data 2)) (rotatef (aref data 1) (aref data 3)) (setf (ub32ref/be ciphertext ciphertext-start) (logxor (aref data 0) (aref round-keys keys-start))) (setf (ub32ref/be ciphertext (+ ciphertext-start 4)) (logxor (aref data 1) (aref round-keys (+ keys-start 1)))) (setf (ub32ref/be ciphertext (+ ciphertext-start 8)) (logxor (aref data 2) (aref round-keys (+ keys-start 2)))) (setf (ub32ref/be ciphertext (+ ciphertext-start 12)) (logxor (aref data 3) (aref round-keys (+ keys-start 3)))))) (define-block-decryptor camellia 16 (let* ((round-keys (round-keys context)) (grand-rounds (grand-rounds context)) (keys-start (if (= 3 grand-rounds) 48 64)) (data (make-array 4 :element-type '(unsigned-byte 32)))) (declare (type (simple-array (unsigned-byte 32) (*)) round-keys data) (type fixnum keys-start grand-rounds) (dynamic-extent data)) (setf (aref data 0) (logxor (ub32ref/be ciphertext ciphertext-start) (aref round-keys keys-start)) (aref data 1) (logxor (ub32ref/be ciphertext (+ ciphertext-start 4)) (aref round-keys (+ keys-start 1))) (aref data 2) (logxor (ub32ref/be ciphertext (+ ciphertext-start 8)) (aref round-keys (+ keys-start 2))) (aref data 3) (logxor (ub32ref/be ciphertext (+ ciphertext-start 12)) (aref round-keys (+ keys-start 3)))) (decf keys-start 2) (dotimes (i grand-rounds) (dotimes (j 3) (camellia-feistel data 0 round-keys keys-start -2) (decf keys-start 4)) (when (< i (1- grand-rounds)) (setf (aref data 1) (logxor (aref data 1) (rol32 (logand (aref data 0) (aref round-keys keys-start)) 1)) (aref data 0) (logxor (aref data 0) (logior (aref data 1) (aref round-keys (+ keys-start 1)))) (aref data 2) (logxor (aref data 2) (logior (aref data 3) (aref round-keys (- keys-start 1)))) (aref data 3) (logxor (aref data 3) (rol32 (logand (aref data 2) (aref round-keys (- keys-start 2))) 1))) (decf keys-start 4))) (decf keys-start 2) (rotatef (aref data 0) (aref data 2)) (rotatef (aref data 1) (aref data 3)) (setf (ub32ref/be plaintext plaintext-start) (logxor (aref data 0) (aref round-keys keys-start))) (setf (ub32ref/be plaintext (+ plaintext-start 4)) (logxor (aref data 1) (aref round-keys (+ keys-start 1)))) (setf (ub32ref/be plaintext (+ plaintext-start 8)) (logxor (aref data 2) (aref round-keys (+ keys-start 2)))) (setf (ub32ref/be plaintext (+ plaintext-start 12)) (logxor (aref data 3) (aref round-keys (+ keys-start 3)))))) (defcipher camellia (:encrypt-function camellia-encrypt-block) (:decrypt-function camellia-decrypt-block) (:block-length 16) (:key-length (:fixed 16 24 32))) ironclad-0.57/src/ciphers/cast5.lisp000066400000000000000000001256771420372057600174240ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; cast5.lisp -- implementation of rfc2144 CAST5 algorithm (in-package :crypto) (in-ironclad-readtable) ;;; s-boxes (declaim (type (simple-array (unsigned-byte 32) (256)) +cast5-sbox0+ +cast5-sbox1+ +cast5-sbox2+ +cast5-sbox3+ +cast5-sbox4+ +cast5-sbox5+ +cast5-sbox6+ +cast5-sbox7+)) (defconst +cast5-sbox0+ #32@(#x30fb40d4 #x9fa0ff0b #x6beccd2f #x3f258c7a #x1e213f2f #x9c004dd3 #x6003e540 #xcf9fc949 #xbfd4af27 #x88bbbdb5 #xe2034090 #x98d09675 #x6e63a0e0 #x15c361d2 #xc2e7661d #x22d4ff8e #x28683b6f #xc07fd059 #xff2379c8 #x775f50e2 #x43c340d3 #xdf2f8656 #x887ca41a #xa2d2bd2d #xa1c9e0d6 #x346c4819 #x61b76d87 #x22540f2f #x2abe32e1 #xaa54166b #x22568e3a #xa2d341d0 #x66db40c8 #xa784392f #x004dff2f #x2db9d2de #x97943fac #x4a97c1d8 #x527644b7 #xb5f437a7 #xb82cbaef #xd751d159 #x6ff7f0ed #x5a097a1f #x827b68d0 #x90ecf52e #x22b0c054 #xbc8e5935 #x4b6d2f7f #x50bb64a2 #xd2664910 #xbee5812d #xb7332290 #xe93b159f #xb48ee411 #x4bff345d #xfd45c240 #xad31973f #xc4f6d02e #x55fc8165 #xd5b1caad #xa1ac2dae #xa2d4b76d #xc19b0c50 #x882240f2 #x0c6e4f38 #xa4e4bfd7 #x4f5ba272 #x564c1d2f #xc59c5319 #xb949e354 #xb04669fe #xb1b6ab8a #xc71358dd #x6385c545 #x110f935d #x57538ad5 #x6a390493 #xe63d37e0 #x2a54f6b3 #x3a787d5f #x6276a0b5 #x19a6fcdf #x7a42206a #x29f9d4d5 #xf61b1891 #xbb72275e #xaa508167 #x38901091 #xc6b505eb #x84c7cb8c #x2ad75a0f #x874a1427 #xa2d1936b #x2ad286af #xaa56d291 #xd7894360 #x425c750d #x93b39e26 #x187184c9 #x6c00b32d #x73e2bb14 #xa0bebc3c #x54623779 #x64459eab #x3f328b82 #x7718cf82 #x59a2cea6 #x04ee002e #x89fe78e6 #x3fab0950 #x325ff6c2 #x81383f05 #x6963c5c8 #x76cb5ad6 #xd49974c9 #xca180dcf #x380782d5 #xc7fa5cf6 #x8ac31511 #x35e79e13 #x47da91d0 #xf40f9086 #xa7e2419e #x31366241 #x051ef495 #xaa573b04 #x4a805d8d #x548300d0 #x00322a3c #xbf64cddf #xba57a68e #x75c6372b #x50afd341 #xa7c13275 #x915a0bf5 #x6b54bfab #x2b0b1426 #xab4cc9d7 #x449ccd82 #xf7fbf265 #xab85c5f3 #x1b55db94 #xaad4e324 #xcfa4bd3f #x2deaa3e2 #x9e204d02 #xc8bd25ac #xeadf55b3 #xd5bd9e98 #xe31231b2 #x2ad5ad6c #x954329de #xadbe4528 #xd8710f69 #xaa51c90f #xaa786bf6 #x22513f1e #xaa51a79b #x2ad344cc #x7b5a41f0 #xd37cfbad #x1b069505 #x41ece491 #xb4c332e6 #x032268d4 #xc9600acc #xce387e6d #xbf6bb16c #x6a70fb78 #x0d03d9c9 #xd4df39de #xe01063da #x4736f464 #x5ad328d8 #xb347cc96 #x75bb0fc3 #x98511bfb #x4ffbcc35 #xb58bcf6a #xe11f0abc #xbfc5fe4a #xa70aec10 #xac39570a #x3f04442f #x6188b153 #xe0397a2e #x5727cb79 #x9ceb418f #x1cacd68d #x2ad37c96 #x0175cb9d #xc69dff09 #xc75b65f0 #xd9db40d8 #xec0e7779 #x4744ead4 #xb11c3274 #xdd24cb9e #x7e1c54bd #xf01144f9 #xd2240eb1 #x9675b3fd #xa3ac3755 #xd47c27af #x51c85f4d #x56907596 #xa5bb15e6 #x580304f0 #xca042cf1 #x011a37ea #x8dbfaadb #x35ba3e4a #x3526ffa0 #xc37b4d09 #xbc306ed9 #x98a52666 #x5648f725 #xff5e569d #x0ced63d0 #x7c63b2cf #x700b45e1 #xd5ea50f1 #x85a92872 #xaf1fbda7 #xd4234870 #xa7870bf3 #x2d3b4d79 #x42e04198 #x0cd0ede7 #x26470db8 #xf881814c #x474d6ad7 #x7c0c5e5c #xd1231959 #x381b7298 #xf5d2f4db #xab838653 #x6e2f1e23 #x83719c9e #xbd91e046 #x9a56456e #xdc39200c #x20c8c571 #x962bda1c #xe1e696ff #xb141ab08 #x7cca89b9 #x1a69e783 #x02cc4843 #xa2f7c579 #x429ef47d #x427b169c #x5ac9f049 #xdd8f0f00 #x5c8165bf)) (defconst +cast5-sbox1+ #32@(#x1f201094 #xef0ba75b #x69e3cf7e #x393f4380 #xfe61cf7a #xeec5207a #x55889c94 #x72fc0651 #xada7ef79 #x4e1d7235 #xd55a63ce #xde0436ba #x99c430ef #x5f0c0794 #x18dcdb7d #xa1d6eff3 #xa0b52f7b #x59e83605 #xee15b094 #xe9ffd909 #xdc440086 #xef944459 #xba83ccb3 #xe0c3cdfb #xd1da4181 #x3b092ab1 #xf997f1c1 #xa5e6cf7b #x01420ddb #xe4e7ef5b #x25a1ff41 #xe180f806 #x1fc41080 #x179bee7a #xd37ac6a9 #xfe5830a4 #x98de8b7f #x77e83f4e #x79929269 #x24fa9f7b #xe113c85b #xacc40083 #xd7503525 #xf7ea615f #x62143154 #x0d554b63 #x5d681121 #xc866c359 #x3d63cf73 #xcee234c0 #xd4d87e87 #x5c672b21 #x071f6181 #x39f7627f #x361e3084 #xe4eb573b #x602f64a4 #xd63acd9c #x1bbc4635 #x9e81032d #x2701f50c #x99847ab4 #xa0e3df79 #xba6cf38c #x10843094 #x2537a95e #xf46f6ffe #xa1ff3b1f #x208cfb6a #x8f458c74 #xd9e0a227 #x4ec73a34 #xfc884f69 #x3e4de8df #xef0e0088 #x3559648d #x8a45388c #x1d804366 #x721d9bfd #xa58684bb #xe8256333 #x844e8212 #x128d8098 #xfed33fb4 #xce280ae1 #x27e19ba5 #xd5a6c252 #xe49754bd #xc5d655dd #xeb667064 #x77840b4d #xa1b6a801 #x84db26a9 #xe0b56714 #x21f043b7 #xe5d05860 #x54f03084 #x066ff472 #xa31aa153 #xdadc4755 #xb5625dbf #x68561be6 #x83ca6b94 #x2d6ed23b #xeccf01db #xa6d3d0ba #xb6803d5c #xaf77a709 #x33b4a34c #x397bc8d6 #x5ee22b95 #x5f0e5304 #x81ed6f61 #x20e74364 #xb45e1378 #xde18639b #x881ca122 #xb96726d1 #x8049a7e8 #x22b7da7b #x5e552d25 #x5272d237 #x79d2951c #xc60d894c #x488cb402 #x1ba4fe5b #xa4b09f6b #x1ca815cf #xa20c3005 #x8871df63 #xb9de2fcb #x0cc6c9e9 #x0beeff53 #xe3214517 #xb4542835 #x9f63293c #xee41e729 #x6e1d2d7c #x50045286 #x1e6685f3 #xf33401c6 #x30a22c95 #x31a70850 #x60930f13 #x73f98417 #xa1269859 #xec645c44 #x52c877a9 #xcdff33a6 #xa02b1741 #x7cbad9a2 #x2180036f #x50d99c08 #xcb3f4861 #xc26bd765 #x64a3f6ab #x80342676 #x25a75e7b #xe4e6d1fc #x20c710e6 #xcdf0b680 #x17844d3b #x31eef84d #x7e0824e4 #x2ccb49eb #x846a3bae #x8ff77888 #xee5d60f6 #x7af75673 #x2fdd5cdb #xa11631c1 #x30f66f43 #xb3faec54 #x157fd7fa #xef8579cc #xd152de58 #xdb2ffd5e #x8f32ce19 #x306af97a #x02f03ef8 #x99319ad5 #xc242fa0f #xa7e3ebb0 #xc68e4906 #xb8da230c #x80823028 #xdcdef3c8 #xd35fb171 #x088a1bc8 #xbec0c560 #x61a3c9e8 #xbca8f54d #xc72feffa #x22822e99 #x82c570b4 #xd8d94e89 #x8b1c34bc #x301e16e6 #x273be979 #xb0ffeaa6 #x61d9b8c6 #x00b24869 #xb7ffce3f #x08dc283b #x43daf65a #xf7e19798 #x7619b72f #x8f1c9ba4 #xdc8637a0 #x16a7d3b1 #x9fc393b7 #xa7136eeb #xc6bcc63e #x1a513742 #xef6828bc #x520365d6 #x2d6a77ab #x3527ed4b #x821fd216 #x095c6e2e #xdb92f2fb #x5eea29cb #x145892f5 #x91584f7f #x5483697b #x2667a8cc #x85196048 #x8c4bacea #x833860d4 #x0d23e0f9 #x6c387e8a #x0ae6d249 #xb284600c #xd835731d #xdcb1c647 #xac4c56ea #x3ebd81b3 #x230eabb0 #x6438bc87 #xf0b5b1fa #x8f5ea2b3 #xfc184642 #x0a036b7a #x4fb089bd #x649da589 #xa345415e #x5c038323 #x3e5d3bb9 #x43d79572 #x7e6dd07c #x06dfdf1e #x6c6cc4ef #x7160a539 #x73bfbe70 #x83877605 #x4523ecf1)) (defconst +cast5-sbox2+ #32@(#x8defc240 #x25fa5d9f #xeb903dbf #xe810c907 #x47607fff #x369fe44b #x8c1fc644 #xaececa90 #xbeb1f9bf #xeefbcaea #xe8cf1950 #x51df07ae #x920e8806 #xf0ad0548 #xe13c8d83 #x927010d5 #x11107d9f #x07647db9 #xb2e3e4d4 #x3d4f285e #xb9afa820 #xfade82e0 #xa067268b #x8272792e #x553fb2c0 #x489ae22b #xd4ef9794 #x125e3fbc #x21fffcee #x825b1bfd #x9255c5ed #x1257a240 #x4e1a8302 #xbae07fff #x528246e7 #x8e57140e #x3373f7bf #x8c9f8188 #xa6fc4ee8 #xc982b5a5 #xa8c01db7 #x579fc264 #x67094f31 #xf2bd3f5f #x40fff7c1 #x1fb78dfc #x8e6bd2c1 #x437be59b #x99b03dbf #xb5dbc64b #x638dc0e6 #x55819d99 #xa197c81c #x4a012d6e #xc5884a28 #xccc36f71 #xb843c213 #x6c0743f1 #x8309893c #x0feddd5f #x2f7fe850 #xd7c07f7e #x02507fbf #x5afb9a04 #xa747d2d0 #x1651192e #xaf70bf3e #x58c31380 #x5f98302e #x727cc3c4 #x0a0fb402 #x0f7fef82 #x8c96fdad #x5d2c2aae #x8ee99a49 #x50da88b8 #x8427f4a0 #x1eac5790 #x796fb449 #x8252dc15 #xefbd7d9b #xa672597d #xada840d8 #x45f54504 #xfa5d7403 #xe83ec305 #x4f91751a #x925669c2 #x23efe941 #xa903f12e #x60270df2 #x0276e4b6 #x94fd6574 #x927985b2 #x8276dbcb #x02778176 #xf8af918d #x4e48f79e #x8f616ddf #xe29d840e #x842f7d83 #x340ce5c8 #x96bbb682 #x93b4b148 #xef303cab #x984faf28 #x779faf9b #x92dc560d #x224d1e20 #x8437aa88 #x7d29dc96 #x2756d3dc #x8b907cee #xb51fd240 #xe7c07ce3 #xe566b4a1 #xc3e9615e #x3cf8209d #x6094d1e3 #xcd9ca341 #x5c76460e #x00ea983b #xd4d67881 #xfd47572c #xf76cedd9 #xbda8229c #x127dadaa #x438a074e #x1f97c090 #x081bdb8a #x93a07ebe #xb938ca15 #x97b03cff #x3dc2c0f8 #x8d1ab2ec #x64380e51 #x68cc7bfb #xd90f2788 #x12490181 #x5de5ffd4 #xdd7ef86a #x76a2e214 #xb9a40368 #x925d958f #x4b39fffa #xba39aee9 #xa4ffd30b #xfaf7933b #x6d498623 #x193cbcfa #x27627545 #x825cf47a #x61bd8ba0 #xd11e42d1 #xcead04f4 #x127ea392 #x10428db7 #x8272a972 #x9270c4a8 #x127de50b #x285ba1c8 #x3c62f44f #x35c0eaa5 #xe805d231 #x428929fb #xb4fcdf82 #x4fb66a53 #x0e7dc15b #x1f081fab #x108618ae #xfcfd086d #xf9ff2889 #x694bcc11 #x236a5cae #x12deca4d #x2c3f8cc5 #xd2d02dfe #xf8ef5896 #xe4cf52da #x95155b67 #x494a488c #xb9b6a80c #x5c8f82bc #x89d36b45 #x3a609437 #xec00c9a9 #x44715253 #x0a874b49 #xd773bc40 #x7c34671c #x02717ef6 #x4feb5536 #xa2d02fff #xd2bf60c4 #xd43f03c0 #x50b4ef6d #x07478cd1 #x006e1888 #xa2e53f55 #xb9e6d4bc #xa2048016 #x97573833 #xd7207d67 #xde0f8f3d #x72f87b33 #xabcc4f33 #x7688c55d #x7b00a6b0 #x947b0001 #x570075d2 #xf9bb88f8 #x8942019e #x4264a5ff #x856302e0 #x72dbd92b #xee971b69 #x6ea22fde #x5f08ae2b #xaf7a616d #xe5c98767 #xcf1febd2 #x61efc8c2 #xf1ac2571 #xcc8239c2 #x67214cb8 #xb1e583d1 #xb7dc3e62 #x7f10bdce #xf90a5c38 #x0ff0443d #x606e6dc6 #x60543a49 #x5727c148 #x2be98a1d #x8ab41738 #x20e1be24 #xaf96da0f #x68458425 #x99833be5 #x600d457d #x282f9350 #x8334b362 #xd91d1120 #x2b6d8da0 #x642b1e31 #x9c305a00 #x52bce688 #x1b03588a #xf7baefd5 #x4142ed9c #xa4315c11 #x83323ec5 #xdfef4636 #xa133c501 #xe9d3531c #xee353783)) (defconst +cast5-sbox3+ #32@(#x9db30420 #x1fb6e9de #xa7be7bef #xd273a298 #x4a4f7bdb #x64ad8c57 #x85510443 #xfa020ed1 #x7e287aff #xe60fb663 #x095f35a1 #x79ebf120 #xfd059d43 #x6497b7b1 #xf3641f63 #x241e4adf #x28147f5f #x4fa2b8cd #xc9430040 #x0cc32220 #xfdd30b30 #xc0a5374f #x1d2d00d9 #x24147b15 #xee4d111a #x0fca5167 #x71ff904c #x2d195ffe #x1a05645f #x0c13fefe #x081b08ca #x05170121 #x80530100 #xe83e5efe #xac9af4f8 #x7fe72701 #xd2b8ee5f #x06df4261 #xbb9e9b8a #x7293ea25 #xce84ffdf #xf5718801 #x3dd64b04 #xa26f263b #x7ed48400 #x547eebe6 #x446d4ca0 #x6cf3d6f5 #x2649abdf #xaea0c7f5 #x36338cc1 #x503f7e93 #xd3772061 #x11b638e1 #x72500e03 #xf80eb2bb #xabe0502e #xec8d77de #x57971e81 #xe14f6746 #xc9335400 #x6920318f #x081dbb99 #xffc304a5 #x4d351805 #x7f3d5ce3 #xa6c866c6 #x5d5bcca9 #xdaec6fea #x9f926f91 #x9f46222f #x3991467d #xa5bf6d8e #x1143c44f #x43958302 #xd0214eeb #x022083b8 #x3fb6180c #x18f8931e #x281658e6 #x26486e3e #x8bd78a70 #x7477e4c1 #xb506e07c #xf32d0a25 #x79098b02 #xe4eabb81 #x28123b23 #x69dead38 #x1574ca16 #xdf871b62 #x211c40b7 #xa51a9ef9 #x0014377b #x041e8ac8 #x09114003 #xbd59e4d2 #xe3d156d5 #x4fe876d5 #x2f91a340 #x557be8de #x00eae4a7 #x0ce5c2ec #x4db4bba6 #xe756bdff #xdd3369ac #xec17b035 #x06572327 #x99afc8b0 #x56c8c391 #x6b65811c #x5e146119 #x6e85cb75 #xbe07c002 #xc2325577 #x893ff4ec #x5bbfc92d #xd0ec3b25 #xb7801ab7 #x8d6d3b24 #x20c763ef #xc366a5fc #x9c382880 #x0ace3205 #xaac9548a #xeca1d7c7 #x041afa32 #x1d16625a #x6701902c #x9b757a54 #x31d477f7 #x9126b031 #x36cc6fdb #xc70b8b46 #xd9e66a48 #x56e55a79 #x026a4ceb #x52437eff #x2f8f76b4 #x0df980a5 #x8674cde3 #xedda04eb #x17a9be04 #x2c18f4df #xb7747f9d #xab2af7b4 #xefc34d20 #x2e096b7c #x1741a254 #xe5b6a035 #x213d42f6 #x2c1c7c26 #x61c2f50f #x6552daf9 #xd2c231f8 #x25130f69 #xd8167fa2 #x0418f2c8 #x001a96a6 #x0d1526ab #x63315c21 #x5e0a72ec #x49bafefd #x187908d9 #x8d0dbd86 #x311170a7 #x3e9b640c #xcc3e10d7 #xd5cad3b6 #x0caec388 #xf73001e1 #x6c728aff #x71eae2a1 #x1f9af36e #xcfcbd12f #xc1de8417 #xac07be6b #xcb44a1d8 #x8b9b0f56 #x013988c3 #xb1c52fca #xb4be31cd #xd8782806 #x12a3a4e2 #x6f7de532 #x58fd7eb6 #xd01ee900 #x24adffc2 #xf4990fc5 #x9711aac5 #x001d7b95 #x82e5e7d2 #x109873f6 #x00613096 #xc32d9521 #xada121ff #x29908415 #x7fbb977f #xaf9eb3db #x29c9ed2a #x5ce2a465 #xa730f32c #xd0aa3fe8 #x8a5cc091 #xd49e2ce7 #x0ce454a9 #xd60acd86 #x015f1919 #x77079103 #xdea03af6 #x78a8565e #xdee356df #x21f05cbe #x8b75e387 #xb3c50651 #xb8a5c3ef #xd8eeb6d2 #xe523be77 #xc2154529 #x2f69efdf #xafe67afb #xf470c4b2 #xf3e0eb5b #xd6cc9876 #x39e4460c #x1fda8538 #x1987832f #xca007367 #xa99144f8 #x296b299e #x492fc295 #x9266beab #xb5676e69 #x9bd3ddda #xdf7e052f #xdb25701c #x1b5e51ee #xf65324e6 #x6afce36c #x0316cc04 #x8644213e #xb7dc59d0 #x7965291f #xccd6fd43 #x41823979 #x932bcdf6 #xb657c34d #x4edfd282 #x7ae5290c #x3cb9536b #x851e20fe #x9833557e #x13ecf0b0 #xd3ffb372 #x3f85c5c1 #x0aef7ed2)) (defconst +cast5-sbox4+ #32@(#x7ec90c04 #x2c6e74b9 #x9b0e66df #xa6337911 #xb86a7fff #x1dd358f5 #x44dd9d44 #x1731167f #x08fbf1fa #xe7f511cc #xd2051b00 #x735aba00 #x2ab722d8 #x386381cb #xacf6243a #x69befd7a #xe6a2e77f #xf0c720cd #xc4494816 #xccf5c180 #x38851640 #x15b0a848 #xe68b18cb #x4caadeff #x5f480a01 #x0412b2aa #x259814fc #x41d0efe2 #x4e40b48d #x248eb6fb #x8dba1cfe #x41a99b02 #x1a550a04 #xba8f65cb #x7251f4e7 #x95a51725 #xc106ecd7 #x97a5980a #xc539b9aa #x4d79fe6a #xf2f3f763 #x68af8040 #xed0c9e56 #x11b4958b #xe1eb5a88 #x8709e6b0 #xd7e07156 #x4e29fea7 #x6366e52d #x02d1c000 #xc4ac8e05 #x9377f571 #x0c05372a #x578535f2 #x2261be02 #xd642a0c9 #xdf13a280 #x74b55bd2 #x682199c0 #xd421e5ec #x53fb3ce8 #xc8adedb3 #x28a87fc9 #x3d959981 #x5c1ff900 #xfe38d399 #x0c4eff0b #x062407ea #xaa2f4fb1 #x4fb96976 #x90c79505 #xb0a8a774 #xef55a1ff #xe59ca2c2 #xa6b62d27 #xe66a4263 #xdf65001f #x0ec50966 #xdfdd55bc #x29de0655 #x911e739a #x17af8975 #x32c7911c #x89f89468 #x0d01e980 #x524755f4 #x03b63cc9 #x0cc844b2 #xbcf3f0aa #x87ac36e9 #xe53a7426 #x01b3d82b #x1a9e7449 #x64ee2d7e #xcddbb1da #x01c94910 #xb868bf80 #x0d26f3fd #x9342ede7 #x04a5c284 #x636737b6 #x50f5b616 #xf24766e3 #x8eca36c1 #x136e05db #xfef18391 #xfb887a37 #xd6e7f7d4 #xc7fb7dc9 #x3063fcdf #xb6f589de #xec2941da #x26e46695 #xb7566419 #xf654efc5 #xd08d58b7 #x48925401 #xc1bacb7f #xe5ff550f #xb6083049 #x5bb5d0e8 #x87d72e5a #xab6a6ee1 #x223a66ce #xc62bf3cd #x9e0885f9 #x68cb3e47 #x086c010f #xa21de820 #xd18b69de #xf3f65777 #xfa02c3f6 #x407edac3 #xcbb3d550 #x1793084d #xb0d70eba #x0ab378d5 #xd951fb0c #xded7da56 #x4124bbe4 #x94ca0b56 #x0f5755d1 #xe0e1e56e #x6184b5be #x580a249f #x94f74bc0 #xe327888e #x9f7b5561 #xc3dc0280 #x05687715 #x646c6bd7 #x44904db3 #x66b4f0a3 #xc0f1648a #x697ed5af #x49e92ff6 #x309e374f #x2cb6356a #x85808573 #x4991f840 #x76f0ae02 #x083be84d #x28421c9a #x44489406 #x736e4cb8 #xc1092910 #x8bc95fc6 #x7d869cf4 #x134f616f #x2e77118d #xb31b2be1 #xaa90b472 #x3ca5d717 #x7d161bba #x9cad9010 #xaf462ba2 #x9fe459d2 #x45d34559 #xd9f2da13 #xdbc65487 #xf3e4f94e #x176d486f #x097c13ea #x631da5c7 #x445f7382 #x175683f4 #xcdc66a97 #x70be0288 #xb3cdcf72 #x6e5dd2f3 #x20936079 #x459b80a5 #xbe60e2db #xa9c23101 #xeba5315c #x224e42f2 #x1c5c1572 #xf6721b2c #x1ad2fff3 #x8c25404e #x324ed72f #x4067b7fd #x0523138e #x5ca3bc78 #xdc0fd66e #x75922283 #x784d6b17 #x58ebb16e #x44094f85 #x3f481d87 #xfcfeae7b #x77b5ff76 #x8c2302bf #xaaf47556 #x5f46b02a #x2b092801 #x3d38f5f7 #x0ca81f36 #x52af4a8a #x66d5e7c0 #xdf3b0874 #x95055110 #x1b5ad7a8 #xf61ed5ad #x6cf6e479 #x20758184 #xd0cefa65 #x88f7be58 #x4a046826 #x0ff6f8f3 #xa09c7f70 #x5346aba0 #x5ce96c28 #xe176eda3 #x6bac307f #x376829d2 #x85360fa9 #x17e3fe2a #x24b79767 #xf5a96b20 #xd6cd2595 #x68ff1ebf #x7555442c #xf19f06be #xf9e0659a #xeeb9491d #x34010718 #xbb30cab8 #xe822fe15 #x88570983 #x750e6249 #xda627e55 #x5e76ffa8 #xb1534546 #x6d47de08 #xefe9e7d4)) (defconst +cast5-sbox5+ #32@(#xf6fa8f9d #x2cac6ce1 #x4ca34867 #xe2337f7c #x95db08e7 #x016843b4 #xeced5cbc #x325553ac #xbf9f0960 #xdfa1e2ed #x83f0579d #x63ed86b9 #x1ab6a6b8 #xde5ebe39 #xf38ff732 #x8989b138 #x33f14961 #xc01937bd #xf506c6da #xe4625e7e #xa308ea99 #x4e23e33c #x79cbd7cc #x48a14367 #xa3149619 #xfec94bd5 #xa114174a #xeaa01866 #xa084db2d #x09a8486f #xa888614a #x2900af98 #x01665991 #xe1992863 #xc8f30c60 #x2e78ef3c #xd0d51932 #xcf0fec14 #xf7ca07d2 #xd0a82072 #xfd41197e #x9305a6b0 #xe86be3da #x74bed3cd #x372da53c #x4c7f4448 #xdab5d440 #x6dba0ec3 #x083919a7 #x9fbaeed9 #x49dbcfb0 #x4e670c53 #x5c3d9c01 #x64bdb941 #x2c0e636a #xba7dd9cd #xea6f7388 #xe70bc762 #x35f29adb #x5c4cdd8d #xf0d48d8c #xb88153e2 #x08a19866 #x1ae2eac8 #x284caf89 #xaa928223 #x9334be53 #x3b3a21bf #x16434be3 #x9aea3906 #xefe8c36e #xf890cdd9 #x80226dae #xc340a4a3 #xdf7e9c09 #xa694a807 #x5b7c5ecc #x221db3a6 #x9a69a02f #x68818a54 #xceb2296f #x53c0843a #xfe893655 #x25bfe68a #xb4628abc #xcf222ebf #x25ac6f48 #xa9a99387 #x53bddb65 #xe76ffbe7 #xe967fd78 #x0ba93563 #x8e342bc1 #xe8a11be9 #x4980740d #xc8087dfc #x8de4bf99 #xa11101a0 #x7fd37975 #xda5a26c0 #xe81f994f #x9528cd89 #xfd339fed #xb87834bf #x5f04456d #x22258698 #xc9c4c83b #x2dc156be #x4f628daa #x57f55ec5 #xe2220abe #xd2916ebf #x4ec75b95 #x24f2c3c0 #x42d15d99 #xcd0d7fa0 #x7b6e27ff #xa8dc8af0 #x7345c106 #xf41e232f #x35162386 #xe6ea8926 #x3333b094 #x157ec6f2 #x372b74af #x692573e4 #xe9a9d848 #xf3160289 #x3a62ef1d #xa787e238 #xf3a5f676 #x74364853 #x20951063 #x4576698d #xb6fad407 #x592af950 #x36f73523 #x4cfb6e87 #x7da4cec0 #x6c152daa #xcb0396a8 #xc50dfe5d #xfcd707ab #x0921c42f #x89dff0bb #x5fe2be78 #x448f4f33 #x754613c9 #x2b05d08d #x48b9d585 #xdc049441 #xc8098f9b #x7dede786 #xc39a3373 #x42410005 #x6a091751 #x0ef3c8a6 #x890072d6 #x28207682 #xa9a9f7be #xbf32679d #xd45b5b75 #xb353fd00 #xcbb0e358 #x830f220a #x1f8fb214 #xd372cf08 #xcc3c4a13 #x8cf63166 #x061c87be #x88c98f88 #x6062e397 #x47cf8e7a #xb6c85283 #x3cc2acfb #x3fc06976 #x4e8f0252 #x64d8314d #xda3870e3 #x1e665459 #xc10908f0 #x513021a5 #x6c5b68b7 #x822f8aa0 #x3007cd3e #x74719eef #xdc872681 #x073340d4 #x7e432fd9 #x0c5ec241 #x8809286c #xf592d891 #x08a930f6 #x957ef305 #xb7fbffbd #xc266e96f #x6fe4ac98 #xb173ecc0 #xbc60b42a #x953498da #xfba1ae12 #x2d4bd736 #x0f25faab #xa4f3fceb #xe2969123 #x257f0c3d #x9348af49 #x361400bc #xe8816f4a #x3814f200 #xa3f94043 #x9c7a54c2 #xbc704f57 #xda41e7f9 #xc25ad33a #x54f4a084 #xb17f5505 #x59357cbe #xedbd15c8 #x7f97c5ab #xba5ac7b5 #xb6f6deaf #x3a479c3a #x5302da25 #x653d7e6a #x54268d49 #x51a477ea #x5017d55b #xd7d25d88 #x44136c76 #x0404a8c8 #xb8e5a121 #xb81a928a #x60ed5869 #x97c55b96 #xeaec991b #x29935913 #x01fdb7f1 #x088e8dfa #x9ab6f6f5 #x3b4cbf9f #x4a5de3ab #xe6051d35 #xa0e1d855 #xd36b4cf1 #xf544edeb #xb0e93524 #xbebb8fbd #xa2d762cf #x49c92f54 #x38b5f331 #x7128a454 #x48392905 #xa65b1db8 #x851c97bd #xd675cf2f)) (defconst +cast5-sbox6+ #32@(#x85e04019 #x332bf567 #x662dbfff #xcfc65693 #x2a8d7f6f #xab9bc912 #xde6008a1 #x2028da1f #x0227bce7 #x4d642916 #x18fac300 #x50f18b82 #x2cb2cb11 #xb232e75c #x4b3695f2 #xb28707de #xa05fbcf6 #xcd4181e9 #xe150210c #xe24ef1bd #xb168c381 #xfde4e789 #x5c79b0d8 #x1e8bfd43 #x4d495001 #x38be4341 #x913cee1d #x92a79c3f #x089766be #xbaeeadf4 #x1286becf #xb6eacb19 #x2660c200 #x7565bde4 #x64241f7a #x8248dca9 #xc3b3ad66 #x28136086 #x0bd8dfa8 #x356d1cf2 #x107789be #xb3b2e9ce #x0502aa8f #x0bc0351e #x166bf52a #xeb12ff82 #xe3486911 #xd34d7516 #x4e7b3aff #x5f43671b #x9cf6e037 #x4981ac83 #x334266ce #x8c9341b7 #xd0d854c0 #xcb3a6c88 #x47bc2829 #x4725ba37 #xa66ad22b #x7ad61f1e #x0c5cbafa #x4437f107 #xb6e79962 #x42d2d816 #x0a961288 #xe1a5c06e #x13749e67 #x72fc081a #xb1d139f7 #xf9583745 #xcf19df58 #xbec3f756 #xc06eba30 #x07211b24 #x45c28829 #xc95e317f #xbc8ec511 #x38bc46e9 #xc6e6fa14 #xbae8584a #xad4ebc46 #x468f508b #x7829435f #xf124183b #x821dba9f #xaff60ff4 #xea2c4e6d #x16e39264 #x92544a8b #x009b4fc3 #xaba68ced #x9ac96f78 #x06a5b79a #xb2856e6e #x1aec3ca9 #xbe838688 #x0e0804e9 #x55f1be56 #xe7e5363b #xb3a1f25d #xf7debb85 #x61fe033c #x16746233 #x3c034c28 #xda6d0c74 #x79aac56c #x3ce4e1ad #x51f0c802 #x98f8f35a #x1626a49f #xeed82b29 #x1d382fe3 #x0c4fb99a #xbb325778 #x3ec6d97b #x6e77a6a9 #xcb658b5c #xd45230c7 #x2bd1408b #x60c03eb7 #xb9068d78 #xa33754f4 #xf430c87d #xc8a71302 #xb96d8c32 #xebd4e7be #xbe8b9d2d #x7979fb06 #xe7225308 #x8b75cf77 #x11ef8da4 #xe083c858 #x8d6b786f #x5a6317a6 #xfa5cf7a0 #x5dda0033 #xf28ebfb0 #xf5b9c310 #xa0eac280 #x08b9767a #xa3d9d2b0 #x79d34217 #x021a718d #x9ac6336a #x2711fd60 #x438050e3 #x069908a8 #x3d7fedc4 #x826d2bef #x4eeb8476 #x488dcf25 #x36c9d566 #x28e74e41 #xc2610aca #x3d49a9cf #xbae3b9df #xb65f8de6 #x92aeaf64 #x3ac7d5e6 #x9ea80509 #xf22b017d #xa4173f70 #xdd1e16c3 #x15e0d7f9 #x50b1b887 #x2b9f4fd5 #x625aba82 #x6a017962 #x2ec01b9c #x15488aa9 #xd716e740 #x40055a2c #x93d29a22 #xe32dbf9a #x058745b9 #x3453dc1e #xd699296e #x496cff6f #x1c9f4986 #xdfe2ed07 #xb87242d1 #x19de7eae #x053e561a #x15ad6f8c #x66626c1c #x7154c24c #xea082b2a #x93eb2939 #x17dcb0f0 #x58d4f2ae #x9ea294fb #x52cf564c #x9883fe66 #x2ec40581 #x763953c3 #x01d6692e #xd3a0c108 #xa1e7160e #xe4f2dfa6 #x693ed285 #x74904698 #x4c2b0edd #x4f757656 #x5d393378 #xa132234f #x3d321c5d #xc3f5e194 #x4b269301 #xc79f022f #x3c997e7e #x5e4f9504 #x3ffafbbd #x76f7ad0e #x296693f4 #x3d1fce6f #xc61e45be #xd3b5ab34 #xf72bf9b7 #x1b0434c0 #x4e72b567 #x5592a33d #xb5229301 #xcfd2a87f #x60aeb767 #x1814386b #x30bcc33d #x38a0c07d #xfd1606f2 #xc363519b #x589dd390 #x5479f8e6 #x1cb8d647 #x97fd61a9 #xea7759f4 #x2d57539d #x569a58cf #xe84e63ad #x462e1b78 #x6580f87e #xf3817914 #x91da55f4 #x40a230f3 #xd1988f35 #xb6e318d2 #x3ffa50bc #x3d40f021 #xc3c0bdae #x4958c24c #x518f36b2 #x84b1d370 #x0fedce83 #x878ddada #xf2a279c7 #x94e01be8 #x90716f4b #x954b8aa3)) (defconst +cast5-sbox7+ #32@(#xe216300d #xbbddfffc #xa7ebdabd #x35648095 #x7789f8b7 #xe6c1121b #x0e241600 #x052ce8b5 #x11a9cfb0 #xe5952f11 #xece7990a #x9386d174 #x2a42931c #x76e38111 #xb12def3a #x37ddddfc #xde9adeb1 #x0a0cc32c #xbe197029 #x84a00940 #xbb243a0f #xb4d137cf #xb44e79f0 #x049eedfd #x0b15a15d #x480d3168 #x8bbbde5a #x669ded42 #xc7ece831 #x3f8f95e7 #x72df191b #x7580330d #x94074251 #x5c7dcdfa #xabbe6d63 #xaa402164 #xb301d40a #x02e7d1ca #x53571dae #x7a3182a2 #x12a8ddec #xfdaa335d #x176f43e8 #x71fb46d4 #x38129022 #xce949ad4 #xb84769ad #x965bd862 #x82f3d055 #x66fb9767 #x15b80b4e #x1d5b47a0 #x4cfde06f #xc28ec4b8 #x57e8726e #x647a78fc #x99865d44 #x608bd593 #x6c200e03 #x39dc5ff6 #x5d0b00a3 #xae63aff2 #x7e8bd632 #x70108c0c #xbbd35049 #x2998df04 #x980cf42a #x9b6df491 #x9e7edd53 #x06918548 #x58cb7e07 #x3b74ef2e #x522fffb1 #xd24708cc #x1c7e27cd #xa4eb215b #x3cf1d2e2 #x19b47a38 #x424f7618 #x35856039 #x9d17dee7 #x27eb35e6 #xc9aff67b #x36baf5b8 #x09c467cd #xc18910b1 #xe11dbf7b #x06cd1af8 #x7170c608 #x2d5e3354 #xd4de495a #x64c6d006 #xbcc0c62c #x3dd00db3 #x708f8f34 #x77d51b42 #x264f620f #x24b8d2bf #x15c1b79e #x46a52564 #xf8d7e54e #x3e378160 #x7895cda5 #x859c15a5 #xe6459788 #xc37bc75f #xdb07ba0c #x0676a3ab #x7f229b1e #x31842e7b #x24259fd7 #xf8bef472 #x835ffcb8 #x6df4c1f2 #x96f5b195 #xfd0af0fc #xb0fe134c #xe2506d3d #x4f9b12ea #xf215f225 #xa223736f #x9fb4c428 #x25d04979 #x34c713f8 #xc4618187 #xea7a6e98 #x7cd16efc #x1436876c #xf1544107 #xbedeee14 #x56e9af27 #xa04aa441 #x3cf7c899 #x92ecbae6 #xdd67016d #x151682eb #xa842eedf #xfdba60b4 #xf1907b75 #x20e3030f #x24d8c29e #xe139673b #xefa63fb8 #x71873054 #xb6f2cf3b #x9f326442 #xcb15a4cc #xb01a4504 #xf1e47d8d #x844a1be5 #xbae7dfdc #x42cbda70 #xcd7dae0a #x57e85b7a #xd53f5af6 #x20cf4d8c #xcea4d428 #x79d130a4 #x3486ebfb #x33d3cddc #x77853b53 #x37effcb5 #xc5068778 #xe580b3e6 #x4e68b8f4 #xc5c8b37e #x0d809ea2 #x398feb7c #x132a4f94 #x43b7950e #x2fee7d1c #x223613bd #xdd06caa2 #x37df932b #xc4248289 #xacf3ebc3 #x5715f6b7 #xef3478dd #xf267616f #xc148cbe4 #x9052815e #x5e410fab #xb48a2465 #x2eda7fa4 #xe87b40e4 #xe98ea084 #x5889e9e1 #xefd390fc #xdd07d35b #xdb485694 #x38d7e5b2 #x57720101 #x730edebc #x5b643113 #x94917e4f #x503c2fba #x646f1282 #x7523d24a #xe0779695 #xf9c17a8f #x7a5b2121 #xd187b896 #x29263a4d #xba510cdf #x81f47c9f #xad1163ed #xea7b5965 #x1a00726e #x11403092 #x00da6d77 #x4a0cdd61 #xad1f4603 #x605bdfb0 #x9eedc364 #x22ebe6a8 #xcee7d28a #xa0e736a0 #x5564a6b9 #x10853209 #xc7eb8f37 #x2de705ca #x8951570f #xdf09822b #xbd691a6c #xaa12e4f2 #x87451c0f #xe0f6a27a #x3ada4819 #x4cf1764f #x0d771c2b #x67cdb156 #x350d8384 #x5938fa0f #x42399ef3 #x36997b07 #x0e84093d #x4aa93e61 #x8360d87b #x1fa98b0c #x1149382c #xe97625a5 #x0614d1b7 #x0e25244b #x0c768347 #x589e8d82 #x0d2059d1 #xa466bb1e #xf8da0a82 #x04f19130 #xba6e4ec0 #x99265164 #x1ee7230d #x50b2ad80 #xeaee6801 #x8db2a283 #xea8bf59e)) ;;; the actual CAST5 implementation (deftype cast5-mask-vector () '(simple-array (unsigned-byte 32) (16))) (deftype cast5-rotate-vector () '(simple-array (unsigned-byte 8) (16))) (defclass cast5 (cipher 8-byte-block-mixin) ((mask-vector :accessor mask-vector :type cast5-mask-vector) (rotate-vector :accessor rotate-vector :type cast5-rotate-vector) (n-rounds :accessor n-rounds))) (declaim (inline cast5-f1 cast5-f2 cast5-f3)) (macrolet ((cast5-s-box (s-box-index index) `(aref ,(intern (format nil "+~A~A+" '#:cast5-sbox s-box-index)) ,index))) (defun cast5-f1 (input mask rotate) (declare (type (unsigned-byte 32) input mask)) (declare (type (unsigned-byte 5) rotate)) (let ((value (rol32 (mod32+ input mask) rotate))) (declare (type (unsigned-byte 32) value)) (mod32+ (cast5-s-box 3 (first-byte value)) (mod32- (logxor (cast5-s-box 1 (third-byte value)) (cast5-s-box 0 (fourth-byte value))) (cast5-s-box 2 (second-byte value)))))) (defun cast5-f2 (input mask rotate) (declare (type (unsigned-byte 32) input mask)) (declare (type (unsigned-byte 5) rotate)) (let ((value (rol32 (logxor input mask) rotate))) (declare (type (unsigned-byte 32) value)) (logxor (cast5-s-box 3 (first-byte value)) (mod32+ (cast5-s-box 2 (second-byte value)) (mod32- (cast5-s-box 0 (fourth-byte value)) (cast5-s-box 1 (third-byte value))))))) (defun cast5-f3 (input mask rotate) (declare (type (unsigned-byte 32) input mask)) (declare (type (unsigned-byte 5) rotate)) (let ((value (rol32 (mod32- mask input) rotate))) (declare (type (unsigned-byte 32) value)) (mod32- (logxor (cast5-s-box 2 (second-byte value)) (mod32+ (cast5-s-box 1 (third-byte value)) (cast5-s-box 0 (fourth-byte value)))) (cast5-s-box 3 (first-byte value))))) (define-block-encryptor cast5 8 (let ((mask-vector (mask-vector context)) (rotate-vector (rotate-vector context)) (n-rounds (n-rounds context))) (declare (type cast5-mask-vector mask-vector)) (declare (type cast5-rotate-vector rotate-vector)) (declare (type (or (integer 12 12) (integer 16 16)) n-rounds)) (with-words ((l0 r0) plaintext plaintext-start) #.(loop for i from 0 below 16 for round-function = (ecase i ((0 3 6 9 12 15) 'cast5-f1) ((1 4 7 10 13) 'cast5-f2) ((2 5 8 11 14) 'cast5-f3)) collect `(let ((x (logxor l0 (,round-function r0 (aref mask-vector ,i) (aref rotate-vector ,i))))) (declare (type (unsigned-byte 32) x)) (setf l0 r0 r0 x)) into forms finally (return `(progn ,@(subseq forms 0 12) (when (= n-rounds 16) ,@(subseq forms 12))))) (store-words ciphertext ciphertext-start r0 l0)))) (define-block-decryptor cast5 8 (let ((mask-vector (mask-vector context)) (rotate-vector (rotate-vector context)) (n-rounds (n-rounds context))) (declare (type cast5-mask-vector mask-vector)) (declare (type cast5-rotate-vector rotate-vector)) (declare (type (or (integer 12 12) (integer 16 16)) n-rounds)) (with-words ((l0 r0) ciphertext ciphertext-start) #.(loop for i from 15 downto 0 for round-function = (ecase i ((0 3 6 9 12 15) 'cast5-f1) ((1 4 7 10 13) 'cast5-f2) ((2 5 8 11 14) 'cast5-f3)) collect `(let ((x (logxor l0 (,round-function r0 (aref mask-vector ,i) (aref rotate-vector ,i))))) (declare (type (unsigned-byte 32) x)) (setf l0 r0 r0 x)) into forms finally (return `(progn (when (= n-rounds 16) ,@(subseq forms 0 4)) ,@(subseq forms 4)))) (store-words plaintext plaintext-start r0 l0)))) ) ; MACROLET (defun generate-cast5-key-schedule (key) (declare (type (simple-array (unsigned-byte 8) (16)) key)) (with-words ((x0 x4 x8 xc) key 0) (let* ((mask-vector (make-array 16 :element-type '(unsigned-byte 32))) (rotate-vector (make-array 16 :element-type '(unsigned-byte 8))) (z0 0) (z4 0) (z8 0) (zc 0)) (declare (type (unsigned-byte 32) z0 z4 z8 zc)) ;;; generate mask material (setf z0 (logxor x0 (aref +cast5-sbox4+ (third-byte xc)) (aref +cast5-sbox5+ (first-byte xc)) (aref +cast5-sbox6+ (fourth-byte xc)) (aref +cast5-sbox7+ (second-byte xc)) (aref +cast5-sbox6+ (fourth-byte x8)))) (setf z4 (logxor x8 (aref +cast5-sbox4+ (fourth-byte z0)) (aref +cast5-sbox5+ (second-byte z0)) (aref +cast5-sbox6+ (third-byte z0)) (aref +cast5-sbox7+ (first-byte z0)) (aref +cast5-sbox7+ (second-byte x8)))) (setf z8 (logxor xc (aref +cast5-sbox4+ (first-byte z4)) (aref +cast5-sbox5+ (second-byte z4)) (aref +cast5-sbox6+ (third-byte z4)) (aref +cast5-sbox7+ (fourth-byte z4)) (aref +cast5-sbox4+ (third-byte x8)))) (setf zc (logxor x4 (aref +cast5-sbox4+ (second-byte z8)) (aref +cast5-sbox5+ (third-byte z8)) (aref +cast5-sbox6+ (first-byte z8)) (aref +cast5-sbox7+ (fourth-byte z8)) (aref +cast5-sbox5+ (first-byte x8)))) (setf (aref mask-vector (- 1 1)) (logxor (aref +cast5-sbox4+ (fourth-byte z8)) (aref +cast5-sbox5+ (third-byte z8)) (aref +cast5-sbox6+ (first-byte z4)) (aref +cast5-sbox7+ (second-byte z4)) (aref +cast5-sbox4+ (second-byte z0)))) (setf (aref mask-vector (- 2 1)) (logxor (aref +cast5-sbox4+ (second-byte z8)) (aref +cast5-sbox5+ (first-byte z8)) (aref +cast5-sbox6+ (third-byte z4)) (aref +cast5-sbox7+ (fourth-byte z4)) (aref +cast5-sbox5+ (second-byte z4)))) (setf (aref mask-vector (- 3 1)) (logxor (aref +cast5-sbox4+ (fourth-byte zc)) (aref +cast5-sbox5+ (third-byte zc)) (aref +cast5-sbox6+ (first-byte z0)) (aref +cast5-sbox7+ (second-byte z0)) (aref +cast5-sbox6+ (third-byte z8)))) (setf (aref mask-vector (- 4 1)) (logxor (aref +cast5-sbox4+ (second-byte zc)) (aref +cast5-sbox5+ (first-byte zc)) (aref +cast5-sbox6+ (third-byte z0)) (aref +cast5-sbox7+ (fourth-byte z0)) (aref +cast5-sbox7+ (fourth-byte zc)))) (setf x0 (logxor z8 (aref +cast5-sbox4+ (third-byte z4)) (aref +cast5-sbox5+ (first-byte z4)) (aref +cast5-sbox6+ (fourth-byte z4)) (aref +cast5-sbox7+ (second-byte z4)) (aref +cast5-sbox6+ (fourth-byte z0)))) (setf x4 (logxor z0 (aref +cast5-sbox4+ (fourth-byte x0)) (aref +cast5-sbox5+ (second-byte x0)) (aref +cast5-sbox6+ (third-byte x0)) (aref +cast5-sbox7+ (first-byte x0)) (aref +cast5-sbox7+ (second-byte z0)))) (setf x8 (logxor z4 (aref +cast5-sbox4+ (first-byte x4)) (aref +cast5-sbox5+ (second-byte x4)) (aref +cast5-sbox6+ (third-byte x4)) (aref +cast5-sbox7+ (fourth-byte x4)) (aref +cast5-sbox4+ (third-byte z0)))) (setf xc (logxor zc (aref +cast5-sbox4+ (second-byte x8)) (aref +cast5-sbox5+ (third-byte x8)) (aref +cast5-sbox6+ (first-byte x8)) (aref +cast5-sbox7+ (fourth-byte x8)) (aref +cast5-sbox5+ (first-byte z0)))) (setf (aref mask-vector (- 5 1)) (logxor (aref +cast5-sbox4+ (first-byte x0)) (aref +cast5-sbox5+ (second-byte x0)) (aref +cast5-sbox6+ (fourth-byte xc)) (aref +cast5-sbox7+ (third-byte xc)) (aref +cast5-sbox4+ (fourth-byte x8)))) (setf (aref mask-vector (- 6 1)) (logxor (aref +cast5-sbox4+ (third-byte x0)) (aref +cast5-sbox5+ (fourth-byte x0)) (aref +cast5-sbox6+ (second-byte xc)) (aref +cast5-sbox7+ (first-byte xc)) (aref +cast5-sbox5+ (third-byte xc)))) (setf (aref mask-vector (- 7 1)) (logxor (aref +cast5-sbox4+ (first-byte x4)) (aref +cast5-sbox5+ (second-byte x4)) (aref +cast5-sbox6+ (fourth-byte x8)) (aref +cast5-sbox7+ (third-byte x8)) (aref +cast5-sbox6+ (first-byte x0)))) (setf (aref mask-vector (- 8 1)) (logxor (aref +cast5-sbox4+ (third-byte x4)) (aref +cast5-sbox5+ (fourth-byte x4)) (aref +cast5-sbox6+ (second-byte x8)) (aref +cast5-sbox7+ (first-byte x8)) (aref +cast5-sbox7+ (first-byte x4)))) (setf z0 (logxor x0 (aref +cast5-sbox4+ (third-byte xc)) (aref +cast5-sbox5+ (first-byte xc)) (aref +cast5-sbox6+ (fourth-byte xc)) (aref +cast5-sbox7+ (second-byte xc)) (aref +cast5-sbox6+ (fourth-byte x8)))) (setf z4 (logxor x8 (aref +cast5-sbox4+ (fourth-byte z0)) (aref +cast5-sbox5+ (second-byte z0)) (aref +cast5-sbox6+ (third-byte z0)) (aref +cast5-sbox7+ (first-byte z0)) (aref +cast5-sbox7+ (second-byte x8)))) (setf z8 (logxor xc (aref +cast5-sbox4+ (first-byte z4)) (aref +cast5-sbox5+ (second-byte z4)) (aref +cast5-sbox6+ (third-byte z4)) (aref +cast5-sbox7+ (fourth-byte z4)) (aref +cast5-sbox4+ (third-byte x8)))) (setf zc (logxor x4 (aref +cast5-sbox4+ (second-byte z8)) (aref +cast5-sbox5+ (third-byte z8)) (aref +cast5-sbox6+ (first-byte z8)) (aref +cast5-sbox7+ (fourth-byte z8)) (aref +cast5-sbox5+ (first-byte x8)))) (setf (aref mask-vector (- 9 1)) (logxor (aref +cast5-sbox4+ (first-byte z0)) (aref +cast5-sbox5+ (second-byte z0)) (aref +cast5-sbox6+ (fourth-byte zc)) (aref +cast5-sbox7+ (third-byte zc)) (aref +cast5-sbox4+ (third-byte z8)))) (setf (aref mask-vector (- 10 1)) (logxor (aref +cast5-sbox4+ (third-byte z0)) (aref +cast5-sbox5+ (fourth-byte z0)) (aref +cast5-sbox6+ (second-byte zc)) (aref +cast5-sbox7+ (first-byte zc)) (aref +cast5-sbox5+ (fourth-byte zc)))) (setf (aref mask-vector (- 11 1)) (logxor (aref +cast5-sbox4+ (first-byte z4)) (aref +cast5-sbox5+ (second-byte z4)) (aref +cast5-sbox6+ (fourth-byte z8)) (aref +cast5-sbox7+ (third-byte z8)) (aref +cast5-sbox6+ (second-byte z0)))) (setf (aref mask-vector (- 12 1)) (logxor (aref +cast5-sbox4+ (third-byte z4)) (aref +cast5-sbox5+ (fourth-byte z4)) (aref +cast5-sbox6+ (second-byte z8)) (aref +cast5-sbox7+ (first-byte z8)) (aref +cast5-sbox7+ (second-byte z4)))) (setf x0 (logxor z8 (aref +cast5-sbox4+ (third-byte z4)) (aref +cast5-sbox5+ (first-byte z4)) (aref +cast5-sbox6+ (fourth-byte z4)) (aref +cast5-sbox7+ (second-byte z4)) (aref +cast5-sbox6+ (fourth-byte z0)))) (setf x4 (logxor z0 (aref +cast5-sbox4+ (fourth-byte x0)) (aref +cast5-sbox5+ (second-byte x0)) (aref +cast5-sbox6+ (third-byte x0)) (aref +cast5-sbox7+ (first-byte x0)) (aref +cast5-sbox7+ (second-byte z0)))) (setf x8 (logxor z4 (aref +cast5-sbox4+ (first-byte x4)) (aref +cast5-sbox5+ (second-byte x4)) (aref +cast5-sbox6+ (third-byte x4)) (aref +cast5-sbox7+ (fourth-byte x4)) (aref +cast5-sbox4+ (third-byte z0)))) (setf xc (logxor zc (aref +cast5-sbox4+ (second-byte x8)) (aref +cast5-sbox5+ (third-byte x8)) (aref +cast5-sbox6+ (first-byte x8)) (aref +cast5-sbox7+ (fourth-byte x8)) (aref +cast5-sbox5+ (first-byte z0)))) (setf (aref mask-vector (- 13 1)) (logxor (aref +cast5-sbox4+ (fourth-byte x8)) (aref +cast5-sbox5+ (third-byte x8)) (aref +cast5-sbox6+ (first-byte x4)) (aref +cast5-sbox7+ (second-byte x4)) (aref +cast5-sbox4+ (first-byte x0)))) (setf (aref mask-vector (- 14 1)) (logxor (aref +cast5-sbox4+ (second-byte x8)) (aref +cast5-sbox5+ (first-byte x8)) (aref +cast5-sbox6+ (third-byte x4)) (aref +cast5-sbox7+ (fourth-byte x4)) (aref +cast5-sbox5+ (first-byte x4)))) (setf (aref mask-vector (- 15 1)) (logxor (aref +cast5-sbox4+ (fourth-byte xc)) (aref +cast5-sbox5+ (third-byte xc)) (aref +cast5-sbox6+ (first-byte x0)) (aref +cast5-sbox7+ (second-byte x0)) (aref +cast5-sbox6+ (fourth-byte x8)))) (setf (aref mask-vector (- 16 1)) (logxor (aref +cast5-sbox4+ (second-byte xc)) (aref +cast5-sbox5+ (first-byte xc)) (aref +cast5-sbox6+ (third-byte x0)) (aref +cast5-sbox7+ (fourth-byte x0)) (aref +cast5-sbox7+ (third-byte xc)))) ;;; generate shift amounts (setf z0 (logxor x0 (aref +cast5-sbox4+ (third-byte xc)) (aref +cast5-sbox5+ (first-byte xc)) (aref +cast5-sbox6+ (fourth-byte xc)) (aref +cast5-sbox7+ (second-byte xc)) (aref +cast5-sbox6+ (fourth-byte x8)))) (setf z4 (logxor x8 (aref +cast5-sbox4+ (fourth-byte z0)) (aref +cast5-sbox5+ (second-byte z0)) (aref +cast5-sbox6+ (third-byte z0)) (aref +cast5-sbox7+ (first-byte z0)) (aref +cast5-sbox7+ (second-byte x8)))) (setf z8 (logxor xc (aref +cast5-sbox4+ (first-byte z4)) (aref +cast5-sbox5+ (second-byte z4)) (aref +cast5-sbox6+ (third-byte z4)) (aref +cast5-sbox7+ (fourth-byte z4)) (aref +cast5-sbox4+ (third-byte x8)))) (setf zc (logxor x4 (aref +cast5-sbox4+ (second-byte z8)) (aref +cast5-sbox5+ (third-byte z8)) (aref +cast5-sbox6+ (first-byte z8)) (aref +cast5-sbox7+ (fourth-byte z8)) (aref +cast5-sbox5+ (first-byte x8)))) (setf (aref rotate-vector (- 17 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (fourth-byte z8)) (aref +cast5-sbox5+ (third-byte z8)) (aref +cast5-sbox6+ (first-byte z4)) (aref +cast5-sbox7+ (second-byte z4)) (aref +cast5-sbox4+ (second-byte z0))))) (setf (aref rotate-vector (- 18 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (second-byte z8)) (aref +cast5-sbox5+ (first-byte z8)) (aref +cast5-sbox6+ (third-byte z4)) (aref +cast5-sbox7+ (fourth-byte z4)) (aref +cast5-sbox5+ (second-byte z4))))) (setf (aref rotate-vector (- 19 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (fourth-byte zc)) (aref +cast5-sbox5+ (third-byte zc)) (aref +cast5-sbox6+ (first-byte z0)) (aref +cast5-sbox7+ (second-byte z0)) (aref +cast5-sbox6+ (third-byte z8))))) (setf (aref rotate-vector (- 20 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (second-byte zc)) (aref +cast5-sbox5+ (first-byte zc)) (aref +cast5-sbox6+ (third-byte z0)) (aref +cast5-sbox7+ (fourth-byte z0)) (aref +cast5-sbox7+ (fourth-byte zc))))) (setf x0 (logxor z8 (aref +cast5-sbox4+ (third-byte z4)) (aref +cast5-sbox5+ (first-byte z4)) (aref +cast5-sbox6+ (fourth-byte z4)) (aref +cast5-sbox7+ (second-byte z4)) (aref +cast5-sbox6+ (fourth-byte z0)))) (setf x4 (logxor z0 (aref +cast5-sbox4+ (fourth-byte x0)) (aref +cast5-sbox5+ (second-byte x0)) (aref +cast5-sbox6+ (third-byte x0)) (aref +cast5-sbox7+ (first-byte x0)) (aref +cast5-sbox7+ (second-byte z0)))) (setf x8 (logxor z4 (aref +cast5-sbox4+ (first-byte x4)) (aref +cast5-sbox5+ (second-byte x4)) (aref +cast5-sbox6+ (third-byte x4)) (aref +cast5-sbox7+ (fourth-byte x4)) (aref +cast5-sbox4+ (third-byte z0)))) (setf xc (logxor zc (aref +cast5-sbox4+ (second-byte x8)) (aref +cast5-sbox5+ (third-byte x8)) (aref +cast5-sbox6+ (first-byte x8)) (aref +cast5-sbox7+ (fourth-byte x8)) (aref +cast5-sbox5+ (first-byte z0)))) (setf (aref rotate-vector (- 21 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (first-byte x0)) (aref +cast5-sbox5+ (second-byte x0)) (aref +cast5-sbox6+ (fourth-byte xc)) (aref +cast5-sbox7+ (third-byte xc)) (aref +cast5-sbox4+ (fourth-byte x8))))) (setf (aref rotate-vector (- 22 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (third-byte x0)) (aref +cast5-sbox5+ (fourth-byte x0)) (aref +cast5-sbox6+ (second-byte xc)) (aref +cast5-sbox7+ (first-byte xc)) (aref +cast5-sbox5+ (third-byte xc))))) (setf (aref rotate-vector (- 23 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (first-byte x4)) (aref +cast5-sbox5+ (second-byte x4)) (aref +cast5-sbox6+ (fourth-byte x8)) (aref +cast5-sbox7+ (third-byte x8)) (aref +cast5-sbox6+ (first-byte x0))))) (setf (aref rotate-vector (- 24 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (third-byte x4)) (aref +cast5-sbox5+ (fourth-byte x4)) (aref +cast5-sbox6+ (second-byte x8)) (aref +cast5-sbox7+ (first-byte x8)) (aref +cast5-sbox7+ (first-byte x4))))) (setf z0 (logxor x0 (aref +cast5-sbox4+ (third-byte xc)) (aref +cast5-sbox5+ (first-byte xc)) (aref +cast5-sbox6+ (fourth-byte xc)) (aref +cast5-sbox7+ (second-byte xc)) (aref +cast5-sbox6+ (fourth-byte x8)))) (setf z4 (logxor x8 (aref +cast5-sbox4+ (fourth-byte z0)) (aref +cast5-sbox5+ (second-byte z0)) (aref +cast5-sbox6+ (third-byte z0)) (aref +cast5-sbox7+ (first-byte z0)) (aref +cast5-sbox7+ (second-byte x8)))) (setf z8 (logxor xc (aref +cast5-sbox4+ (first-byte z4)) (aref +cast5-sbox5+ (second-byte z4)) (aref +cast5-sbox6+ (third-byte z4)) (aref +cast5-sbox7+ (fourth-byte z4)) (aref +cast5-sbox4+ (third-byte x8)))) (setf zc (logxor x4 (aref +cast5-sbox4+ (second-byte z8)) (aref +cast5-sbox5+ (third-byte z8)) (aref +cast5-sbox6+ (first-byte z8)) (aref +cast5-sbox7+ (fourth-byte z8)) (aref +cast5-sbox5+ (first-byte x8)))) (setf (aref rotate-vector (- 25 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (first-byte z0)) (aref +cast5-sbox5+ (second-byte z0)) (aref +cast5-sbox6+ (fourth-byte zc)) (aref +cast5-sbox7+ (third-byte zc)) (aref +cast5-sbox4+ (third-byte z8))))) (setf (aref rotate-vector (- 26 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (third-byte z0)) (aref +cast5-sbox5+ (fourth-byte z0)) (aref +cast5-sbox6+ (second-byte zc)) (aref +cast5-sbox7+ (first-byte zc)) (aref +cast5-sbox5+ (fourth-byte zc))))) (setf (aref rotate-vector (- 27 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (first-byte z4)) (aref +cast5-sbox5+ (second-byte z4)) (aref +cast5-sbox6+ (fourth-byte z8)) (aref +cast5-sbox7+ (third-byte z8)) (aref +cast5-sbox6+ (second-byte z0))))) (setf (aref rotate-vector (- 28 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (third-byte z4)) (aref +cast5-sbox5+ (fourth-byte z4)) (aref +cast5-sbox6+ (second-byte z8)) (aref +cast5-sbox7+ (first-byte z8)) (aref +cast5-sbox7+ (second-byte z4))))) (setf x0 (logxor z8 (aref +cast5-sbox4+ (third-byte z4)) (aref +cast5-sbox5+ (first-byte z4)) (aref +cast5-sbox6+ (fourth-byte z4)) (aref +cast5-sbox7+ (second-byte z4)) (aref +cast5-sbox6+ (fourth-byte z0)))) (setf x4 (logxor z0 (aref +cast5-sbox4+ (fourth-byte x0)) (aref +cast5-sbox5+ (second-byte x0)) (aref +cast5-sbox6+ (third-byte x0)) (aref +cast5-sbox7+ (first-byte x0)) (aref +cast5-sbox7+ (second-byte z0)))) (setf x8 (logxor z4 (aref +cast5-sbox4+ (first-byte x4)) (aref +cast5-sbox5+ (second-byte x4)) (aref +cast5-sbox6+ (third-byte x4)) (aref +cast5-sbox7+ (fourth-byte x4)) (aref +cast5-sbox4+ (third-byte z0)))) (setf xc (logxor zc (aref +cast5-sbox4+ (second-byte x8)) (aref +cast5-sbox5+ (third-byte x8)) (aref +cast5-sbox6+ (first-byte x8)) (aref +cast5-sbox7+ (fourth-byte x8)) (aref +cast5-sbox5+ (first-byte z0)))) (setf (aref rotate-vector (- 29 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (fourth-byte x8)) (aref +cast5-sbox5+ (third-byte x8)) (aref +cast5-sbox6+ (first-byte x4)) (aref +cast5-sbox7+ (second-byte x4)) (aref +cast5-sbox4+ (first-byte x0))))) (setf (aref rotate-vector (- 30 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (second-byte x8)) (aref +cast5-sbox5+ (first-byte x8)) (aref +cast5-sbox6+ (third-byte x4)) (aref +cast5-sbox7+ (fourth-byte x4)) (aref +cast5-sbox5+ (first-byte x4))))) (setf (aref rotate-vector (- 31 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (fourth-byte xc)) (aref +cast5-sbox5+ (third-byte xc)) (aref +cast5-sbox6+ (first-byte x0)) (aref +cast5-sbox7+ (second-byte x0)) (aref +cast5-sbox6+ (fourth-byte x8))))) (setf (aref rotate-vector (- 32 17)) (ldb (byte 5 0) (logxor (aref +cast5-sbox4+ (second-byte xc)) (aref +cast5-sbox5+ (first-byte xc)) (aref +cast5-sbox6+ (third-byte x0)) (aref +cast5-sbox7+ (fourth-byte x0)) (aref +cast5-sbox7+ (third-byte xc))))) (values mask-vector rotate-vector)))) (defmethod schedule-key ((cipher cast5) key) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (let ((length (length key)) (key (if (= (length key) 16) ;; no padding necessary key (let ((tmp (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0))) (replace tmp key))))) (declare (type (simple-array (unsigned-byte 8) (16)) key)) (multiple-value-bind (mask-vector rotate-vector) (generate-cast5-key-schedule key) (let ((n-rounds (if (<= length 10) 12 16))) (setf (mask-vector cipher) mask-vector (rotate-vector cipher) rotate-vector (n-rounds cipher) n-rounds) cipher)))) (defcipher cast5 (:encrypt-function cast5-encrypt-block) (:decrypt-function cast5-decrypt-block) (:block-length 8) (:key-length (:variable 5 16 1))) ironclad-0.57/src/ciphers/chacha.lisp000066400000000000000000000167641420372057600176100ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;; chacha.lisp --implementation of the ChaCha stream cipher (in-package :crypto) (declaim (type (simple-octet-vector 16) chacha-sigma chacha-tau)) (defconst chacha-sigma #.(coerce (map 'vector #'char-code "expand 32-byte k") 'simple-octet-vector)) (defconst chacha-tau #.(coerce (map 'vector #'char-code "expand 16-byte k") 'simple-octet-vector)) (deftype chacha-state () '(simple-array (unsigned-byte 32) (16))) (deftype chacha-keystream-buffer () '(simple-octet-vector 64)) (declaim (inline chacha-core)) (defun chacha-core (n-rounds buffer state) (declare (type chacha-keystream-buffer buffer)) (declare (type chacha-state state)) (declare (optimize speed)) #+(or (and ecl ironclad-assembly) (and sbcl x86-64 ironclad-assembly)) (x-chacha-core n-rounds buffer state) #-(or (and ecl ironclad-assembly) (and sbcl x86-64 ironclad-assembly)) (let ((x (make-array 16 :element-type '(unsigned-byte 32)))) (declare (dynamic-extent x)) (replace x state) (macrolet ((combine (x y shift) `(rol32 (logxor ,x ,y) ,shift)) (ref (i) `(aref x ,i)) (quarter-round (y0 y1 y2 y3) `(setf (ref ,y0) (mod32+ (ref ,y0) (ref ,y1)) (ref ,y3) (combine (ref ,y3) (ref ,y0) 16) (ref ,y2) (mod32+ (ref ,y2) (ref ,y3)) (ref ,y1) (combine (ref ,y1) (ref ,y2) 12) (ref ,y0) (mod32+ (ref ,y0) (ref ,y1)) (ref ,y3) (combine (ref ,y3) (ref ,y0) 8) (ref ,y2) (mod32+ (ref ,y2) (ref ,y3)) (ref ,y1) (combine (ref ,y1) (ref ,y2) 7)))) (dotimes (i n-rounds) (quarter-round 0 4 8 12) (quarter-round 1 5 9 13) (quarter-round 2 6 10 14) (quarter-round 3 7 11 15) (quarter-round 0 5 10 15) (quarter-round 1 6 11 12) (quarter-round 2 7 8 13) (quarter-round 3 4 9 14)) (dotimes (i 16) (setf (ub32ref/le buffer (* i 4)) (mod32+ (aref x i) (aref state i)))))) (values)) (defun chacha/8-core (buffer state) (declare (type chacha-keystream-buffer buffer)) (declare (type chacha-state state)) (chacha-core 4 buffer state)) (defun chacha/12-core (buffer state) (declare (type chacha-keystream-buffer buffer)) (declare (type chacha-state state)) (chacha-core 6 buffer state)) (defun chacha/20-core (buffer state) (declare (type chacha-keystream-buffer buffer)) (declare (type chacha-state state)) (chacha-core 10 buffer state)) (defclass chacha (stream-cipher) ((state :reader chacha-state :initform (make-array 16 :element-type '(unsigned-byte 32) :initial-element 0) :type chacha-state) (keystream-buffer :reader chacha-keystream-buffer :initform (make-array 64 :element-type '(unsigned-byte 8)) :type chacha-keystream-buffer) (keystream-buffer-remaining :accessor chacha-keystream-buffer-remaining :initform 0 :type (integer 0 64)) (core-function :reader chacha-core-function :initarg :core-function :type function)) (:default-initargs :core-function #'chacha/20-core)) (defclass chacha/12 (chacha) () (:default-initargs :core-function #'chacha/12-core)) (defclass chacha/8 (chacha) () (:default-initargs :core-function #'chacha/8-core)) (defun chacha-keyify (cipher key) (declare (type chacha cipher)) (let ((state (chacha-state cipher))) (declare (type chacha-state state)) (multiple-value-bind (constants offset) (if (= (length key) 16) (values chacha-tau 0) (values chacha-sigma 16)) (setf (aref state 4) (ub32ref/le key 0) (aref state 5) (ub32ref/le key 4) (aref state 6) (ub32ref/le key 8) (aref state 7) (ub32ref/le key 12)) (setf (aref state 8) (ub32ref/le key (+ offset 0)) (aref state 9) (ub32ref/le key (+ offset 4)) (aref state 10) (ub32ref/le key (+ offset 8)) (aref state 11) (ub32ref/le key (+ offset 12))) (setf (aref state 0) (ub32ref/le constants 0) (aref state 1) (ub32ref/le constants 4) (aref state 2) (ub32ref/le constants 8) (aref state 3) (ub32ref/le constants 12)) (values)))) (defmethod shared-initialize :after ((cipher chacha) slot-names &rest initargs &key (key nil key-p) (initialization-vector nil iv-p) &allow-other-keys) (declare (ignore initargs key key-p iv-p)) (setf (chacha-keystream-buffer-remaining cipher) 0) (when initialization-vector (when (< (length initialization-vector) 8) (error 'invalid-initialization-vector :cipher (class-name (class-of cipher)) :block-length 8)) (let ((state (chacha-state cipher))) (declare (type chacha-state state)) (setf (aref state 12) 0 (aref state 13) 0 (aref state 14) (ub32ref/le initialization-vector 0) (aref state 15) (ub32ref/le initialization-vector 4)))) cipher) (defmethod schedule-key ((cipher chacha) key) (chacha-keyify cipher key) cipher) (define-stream-cryptor chacha (let ((state (chacha-state context)) (keystream-buffer (chacha-keystream-buffer context)) (keystream-buffer-remaining (chacha-keystream-buffer-remaining context)) (core-function (chacha-core-function context))) (declare (type chacha-state state) (type chacha-keystream-buffer keystream-buffer) (type (integer 0 64) keystream-buffer-remaining) (type function core-function)) (unless (zerop length) (unless (zerop keystream-buffer-remaining) (let ((size (min length keystream-buffer-remaining))) (declare (type (integer 0 64) size)) (xor-block size keystream-buffer (- 64 keystream-buffer-remaining) plaintext plaintext-start ciphertext ciphertext-start) (decf keystream-buffer-remaining size) (decf length size) (incf ciphertext-start size) (incf plaintext-start size))) (unless (zerop length) (loop (funcall core-function keystream-buffer state) (when (zerop (setf (aref state 12) (mod32+ (aref state 12) 1))) (setf (aref state 13) (mod32+ (aref state 13) 1))) (when (<= length 64) (xor-block length keystream-buffer 0 plaintext plaintext-start ciphertext ciphertext-start) (setf (chacha-keystream-buffer-remaining context) (- 64 length)) (return-from chacha-crypt (values))) (xor-block 64 keystream-buffer 0 plaintext plaintext-start ciphertext ciphertext-start) (decf length 64) (incf ciphertext-start 64) (incf plaintext-start 64))) (setf (chacha-keystream-buffer-remaining context) keystream-buffer-remaining)) (values))) (defcipher chacha (:mode :stream) (:crypt-function chacha-crypt) (:key-length (:fixed 16 32))) (defcipher chacha/12 (:mode :stream) (:crypt-function chacha-crypt) (:key-length (:fixed 16 32))) (defcipher chacha/8 (:mode :stream) (:crypt-function chacha-crypt) (:key-length (:fixed 16 32))) ironclad-0.57/src/ciphers/cipher.lisp000066400000000000000000000415401420372057600176410ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; cipher.lisp -- generic functions for symmetric encryption (in-package :crypto) (defclass cipher () ((mode :initarg :mode :accessor mode) (mode-name :reader mode-name) (initialized-p :initform nil :accessor initialized-p))) ;;; Block ciphers are denoted by the use of the {8,16,32,64,128}-byte-block-mixin. (defclass stream-cipher (cipher) ()) (defmethod encrypt ((cipher cipher) plaintext ciphertext &key (plaintext-start 0) plaintext-end (ciphertext-start 0) handle-final-block &allow-other-keys) (check-type plaintext vector) (let ((plaintext-end (or plaintext-end (length plaintext)))) (funcall (slot-value (mode cipher) 'encrypt-function) plaintext ciphertext plaintext-start plaintext-end ciphertext-start handle-final-block))) (defmethod decrypt ((cipher cipher) ciphertext plaintext &key (ciphertext-start 0) ciphertext-end (plaintext-start 0) handle-final-block &allow-other-keys) (check-type ciphertext vector) (let ((ciphertext-end (or ciphertext-end (length ciphertext)))) (funcall (slot-value (mode cipher) 'decrypt-function) ciphertext plaintext ciphertext-start ciphertext-end plaintext-start handle-final-block))) (defun encrypt-in-place (cipher text &key (start 0) end) (encrypt cipher text text :plaintext-start start :plaintext-end end :ciphertext-start start)) (defun decrypt-in-place (cipher text &key (start 0) end) (decrypt cipher text text :ciphertext-start start :ciphertext-end end :plaintext-start start)) ;;; utilities for wordwise fetches and stores ;;; we attempt to make this as efficient as possible. the first check we ;;; do is to see whether or not the range ;;; [INITIAL-OFFSET, INITIAL-OFFSET + BLOCK-SIZE) is within the bounds of ;;; the array. if not, then we do the fetches as normal. if so, then we ;;; can either (DECLARE (SAFETY 0)) to avoid the bounds-checking on the ;;; fetches, or we can do full-word fetches if INITIAL-OFFSET is ;;; word-addressable and the implementation supports it. #+nil (defmacro with-words (((&rest word-vars) array initial-offset &key (size 4) (big-endian t)) &body body) (let ((ref-sym (ubref-fun-name (* size 8) big-endian)) (n-bytes (* (length word-vars) size))) (flet ((generate-fetches (n-fetches) (loop for offset from 0 by size below (* n-fetches size) collect `(,ref-sym ,array (+ ,initial-offset ,offset))))) `(multiple-value-bind ,word-vars (let ((length (length ,array))) (cond ((<= ,initial-offset (- length ,n-bytes)) ,(if (and (member :sbcl *features*) (= size 4) (or (and big-endian (member :big-endian *features*)) (and (not big-endian) (member :little-endian *features*)))) `(if (logtest ,initial-offset (1- ,size)) ;; do FETCH-UB* way (locally (declare (optimize (safety 0))) (values ,@(generate-fetches (length word-vars)))) (let ((word-offset (truncate ,initial-offset 4))) (values ,@(loop for offset from 0 below (length word-vars) collect `(sb-kernel:%vector-raw-bits ,array (+ word-offset ,offset)))))) `(locally (declare (optimize (safety 0))) (values ,@(generate-fetches (length word-vars)))))) (t (values ,@(generate-fetches (length word-vars)))))) (declare (type (unsigned-byte ,(* size 8)) ,@word-vars)) (macrolet ((store-words (buffer buffer-offset &rest word-vars) (loop for word-var in word-vars for offset from 0 by ,size collect `(setf (,',ref-sym ,buffer (+ ,buffer-offset ,offset)) ,word-var) into stores finally (return `(progn ,@stores))))) ,@body))))) (defmacro with-words (((&rest word-vars) array initial-offset &key (size 4) (big-endian t)) &body body) (let ((ref-sym (ubref-fun-name (* size 8) big-endian))) (loop for word-var in word-vars for offset from 0 by size collect `(,word-var (,ref-sym ,array (+ ,initial-offset ,offset))) into let-bindings finally (return `(macrolet ((store-words (buffer buffer-offset &rest word-vars) (loop for word-var in word-vars for offset from 0 by ,size collect `(setf (,',ref-sym ,buffer (+ ,buffer-offset ,offset)) ,word-var) into stores finally (return `(progn ,@stores))))) (let ,let-bindings (declare (type (unsigned-byte ,(* size 8)) ,@word-vars)) ,@body)))))) ;;; mixins for dispatching (defclass 8-byte-block-mixin () ()) (defclass 16-byte-block-mixin () ()) (defclass 32-byte-block-mixin () ()) (defclass 64-byte-block-mixin () ()) (defclass 128-byte-block-mixin () ()) ;;; defining ciphers ;;; the idea behind this is that one only has to implement encryption ;;; and decryption of a block for a particular cipher (and perhaps ;;; some key generation) and then "define" the cipher with some ;;; parameters. necessary interface functions will be auto-generated ;;; with this macro. ;;; possible things to go in INITARGS ;;; ;;; * (:encrypt-function #'cipher-encrypt-block) ;;; * (:decrypt-function #'cipher-decrypt-block) ;;; * (:key-length (:fixed &rest lengths)) ;;; * (:key-length (:variable low high increment)) ;;; * (:constructor #'create-cipher-context) (defmacro defcipher (name &rest initargs) (%defcipher name initargs)) ;;; KLUDGE: we add the blocksize to these two forms so that we can declare ;;; the type of the *-START parameters correctly. That is, good Lisp ;;; implementations will see that references into the plaintext and ;;; ciphertext can never overflow into bignum land; shorter code should ;;; then be generated. This is a kludge, however, because we're putting ;;; the blocksize in three different places: once in the encryptor, once ;;; in the decryptor, and once in the DEFCIPHER form. It would be nice ;;; if there was one single place to put everything. (defmacro define-block-encryptor (algorithm blocksize &body body) `(defun ,(read-from-string (format nil "~A-~A" algorithm '#:encrypt-block)) (context plaintext plaintext-start ciphertext ciphertext-start) (declare (optimize (speed 3) (debug 0) (space 0))) (declare (type simple-octet-vector plaintext ciphertext) (type (integer 0 ,(- array-dimension-limit blocksize)) plaintext-start ciphertext-start)) ,@body)) (defmacro define-block-decryptor (algorithm blocksize &body body) `(defun ,(read-from-string (format nil "~A-~A" algorithm '#:decrypt-block)) (context ciphertext ciphertext-start plaintext plaintext-start) (declare (optimize (speed 3) (debug 0) (space 0))) (declare (type simple-octet-vector ciphertext plaintext) (type (integer 0 ,(- array-dimension-limit blocksize)) ciphertext-start plaintext-start)) ,@body)) (defmacro define-stream-cryptor (algorithm &body body) `(defun ,(read-from-string (format nil "~A-~A" algorithm '#:crypt)) (context plaintext plaintext-start ciphertext ciphertext-start length) (declare (optimize (speed 3) (debug 0) (space 0))) (declare (type simple-octet-vector plaintext ciphertext)) (declare (type index plaintext-start ciphertext-start length)) ,@body)) ;; Catch various errors. (defmethod verify-key (cipher key) ;; check the key first (when (null key) (error 'key-not-supplied :cipher cipher)) (unless (typep key '(vector (unsigned-byte 8))) (error 'type-error :datum key :expected-type '(vector (unsigned-byte 8)))) ;; hmmm, the key looks OK. what about the cipher? (unless (member cipher (list-all-ciphers)) (error 'unsupported-cipher :name cipher))) (defmethod schedule-key :before ((cipher cipher) key) (verify-key cipher key)) ;;; introspection (defclass cipher-info () ((class-name :reader %class-name :initarg :class-name) (name :reader cipher :initarg :cipher) (block-length :reader %block-length :initarg :block-length) (key-lengths :reader %key-lengths :initarg :key-lengths))) (defmethod print-object ((object cipher-info) stream) (print-unreadable-object (object stream :type t) (format stream "~A" (cipher object)))) (defun %find-cipher (name) (and (symbolp name) (let ((name (massage-symbol name))) (and name (get name '%cipher-info))))) (defun (setf %find-cipher) (cipher-info name) (setf (get (massage-symbol name) '%cipher-info) cipher-info)) (defmethod key-lengths (cipher) (let ((cipher-info (%find-cipher cipher))) (and cipher-info (%key-lengths cipher-info)))) (defmethod key-lengths ((cipher cipher)) (key-lengths (class-name (class-of cipher)))) (defmethod block-length ((cipher symbol)) (let ((cipher-info (%find-cipher (massage-symbol cipher)))) (and cipher-info (%block-length cipher-info)))) (defmethod block-length ((cipher cipher)) (block-length (class-name (class-of cipher)))) (defmethod block-length ((cipher 8-byte-block-mixin)) 8) (defmethod block-length ((cipher 16-byte-block-mixin)) 16) (defmethod block-length ((cipher 32-byte-block-mixin)) 32) (defmethod block-length ((cipher 64-byte-block-mixin)) 64) (defmethod block-length ((cipher 128-byte-block-mixin)) 128) (defun list-all-ciphers () (loop for symbol being each external-symbol of (find-package :ironclad) if (%find-cipher symbol) collect (intern (symbol-name symbol) :keyword) into ciphers finally (return (sort ciphers #'string<)))) (defun cipher-supported-p (name) "Return T if the cipher NAME is supported as an argument to MAKE-CIPHER." (not (null (%find-cipher name)))) (defun acceptable-key-lengths* (key-length-spec) (ecase (car key-length-spec) (:fixed (loop for length in (cdr key-length-spec) collect `(= length ,length) into forms finally (return `(or ,@forms)))) (:variable (destructuring-bind (low high increment) (cdr key-length-spec) (if (= increment 1) `(<= ,low length ,high) ;; Punt. It'd be a weird cipher implemented otherwise. (error 'ironclad-error :format-control "Need to implement the (/= INCREMENT 1) case")))))) (defun acceptable-key-lengths (key-length-spec) (ecase (car key-length-spec) (:fixed (cdr key-length-spec)) (:variable (destructuring-bind (low high increment) (cdr key-length-spec) (loop for i from low to high by increment collect i))))) (defun generate-key-verifier-methods (name key-length-spec) (let ((acceptable-key-lengths (acceptable-key-lengths key-length-spec))) `(defmethod verify-key ((cipher ,name) (key vector)) (check-type key (array (unsigned-byte 8) (*))) (let ((length (length key))) (cond (,(acceptable-key-lengths* key-length-spec) (copy-seq key)) (t (error 'invalid-key-length :cipher ',name :accepted-lengths ',acceptable-key-lengths))))))) (defun generate-common-cipher-methods (name block-length key-length-spec) `(progn ;; make sure we pass in valid keys ,(generate-key-verifier-methods name key-length-spec) (setf (%find-cipher ',name) (make-instance 'cipher-info :class-name ',name :cipher ',name :block-length ,block-length :key-lengths ',(acceptable-key-lengths key-length-spec))))) (defun generate-block-cipher-forms (name key-length-spec encrypt-function decrypt-function) (declare (ignorable key-length-spec)) `(progn (defmethod encrypt-function ((cipher ,name)) #',encrypt-function) (defmethod decrypt-function ((cipher ,name)) #',decrypt-function))) (defun generate-stream-cipher-forms (name key-length-spec crypt-function) (declare (ignorable key-length-spec)) `(progn (defmethod encrypt-function ((cipher ,name)) #',crypt-function) (defmethod decrypt-function ((cipher ,name)) #',crypt-function))) (defun %defcipher (name initargs) (let ((encrypt-function nil) (decrypt-function nil) (crypt-function nil) (block-length nil) (mode :block) (key-length-spec nil) (constructor nil)) (declare (ignorable constructor)) (loop for (arg value) in initargs do (case arg (:encrypt-function (if (not encrypt-function) (setf encrypt-function value) (error 'ironclad-error :format-control "Specified :ENCRYPT-FUNCTION multiple times."))) (:decrypt-function (if (not decrypt-function) (setf decrypt-function value) (error 'ironclad-error :format-control "Specified :DECRYPT-FUNCTION multiple times."))) (:crypt-function (if (not crypt-function) (setf crypt-function value) (error 'ironclad-error :format-control "Specified :CRYPT-FUNCTION multiple times."))) (:mode (setf mode value)) (:block-length (cond (block-length (error 'ironclad-error :format-control "Specified :BLOCK-LENGTH multiple times.")) ((or (not (integerp value)) (not (plusp value))) (error 'ironclad-error :format-control ":BLOCK-LENGTH must be a positive, integral number.")) (t (setf block-length value)))) (:key-length (cond (key-length-spec (error 'ironclad-error :format-control "Specified :KEY-LENGTH multiple times.")) ((not (consp value)) (error 'ironclad-error :format-control ":KEY-LENGTH value must be a list.")) ((and (not (eq :fixed (car value))) (not (eq :variable (car value)))) (error 'ironclad-error :format-control "First element of :KEY-LENGTH spec must be either :FIXED or :VARIABLE.")) ((eq :fixed (car value)) (if (and (cdr value) (every #'integerp (cdr value)) (every #'plusp (cdr value))) (setf key-length-spec value) ;;; FIXME: better error message (error 'ironclad-error :format-control "bad :FIXED specification for :KEY-LENGTH."))) ((eq :variable (car value)) (if (and (null (nthcdr 4 value)) (every #'integerp (cdr value)) (every #'plusp (cdr value)) (< (cadr value) (caddr value))) (setf key-length-spec value) (error 'ironclad-error :format-control "bad :VARIABLE specification for :KEY-LENGTH.")))))) finally (cond ((and (eq mode :block) key-length-spec encrypt-function decrypt-function) (return `(progn ,(generate-common-cipher-methods name block-length key-length-spec) ,(generate-block-cipher-forms name key-length-spec encrypt-function decrypt-function)))) ((and (eq mode :stream) crypt-function key-length-spec) (return `(progn ,(generate-common-cipher-methods name 1 key-length-spec) ,(generate-stream-cipher-forms name key-length-spec crypt-function)))) (t (error 'ironclad-error :format-control "Didn't specify all required fields for DEFCIPHER")))))) ironclad-0.57/src/ciphers/des.lisp000066400000000000000000000436151420372057600171470ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; des.lisp -- implementation of DES ;;; converted from the C code appearing in _Applied Cryptography_ by ;;; Bruce Schneier to Common Lisp. Unfortunately, a lot of C-isms ;;; remain, so this is not the prettiest Common Lisp code ever. (in-package :crypto) (in-ironclad-readtable) ;;; the sboxes of DES (declaim (type (simple-array (unsigned-byte 32) (64)) des-sbox0 des-sbox1 des-sbox2 des-sbox3 des-sbox4 des-sbox5 des-sbox6 des-sbox7)) (defconst des-sbox0 #32@( #x01010400 #x00000000 #x00010000 #x01010404 #x01010004 #x00010404 #x00000004 #x00010000 #x00000400 #x01010400 #x01010404 #x00000400 #x01000404 #x01010004 #x01000000 #x00000004 #x00000404 #x01000400 #x01000400 #x00010400 #x00010400 #x01010000 #x01010000 #x01000404 #x00010004 #x01000004 #x01000004 #x00010004 #x00000000 #x00000404 #x00010404 #x01000000 #x00010000 #x01010404 #x00000004 #x01010000 #x01010400 #x01000000 #x01000000 #x00000400 #x01010004 #x00010000 #x00010400 #x01000004 #x00000400 #x00000004 #x01000404 #x00010404 #x01010404 #x00010004 #x01010000 #x01000404 #x01000004 #x00000404 #x00010404 #x01010400 #x00000404 #x01000400 #x01000400 #x00000000 #x00010004 #x00010400 #x00000000 #x01010004 )) (defconst des-sbox1 #32@( #x80108020 #x80008000 #x00008000 #x00108020 #x00100000 #x00000020 #x80100020 #x80008020 #x80000020 #x80108020 #x80108000 #x80000000 #x80008000 #x00100000 #x00000020 #x80100020 #x00108000 #x00100020 #x80008020 #x00000000 #x80000000 #x00008000 #x00108020 #x80100000 #x00100020 #x80000020 #x00000000 #x00108000 #x00008020 #x80108000 #x80100000 #x00008020 #x00000000 #x00108020 #x80100020 #x00100000 #x80008020 #x80100000 #x80108000 #x00008000 #x80100000 #x80008000 #x00000020 #x80108020 #x00108020 #x00000020 #x00008000 #x80000000 #x00008020 #x80108000 #x00100000 #x80000020 #x00100020 #x80008020 #x80000020 #x00100020 #x00108000 #x00000000 #x80008000 #x00008020 #x80000000 #x80100020 #x80108020 #x00108000 )) (defconst des-sbox2 #32@( #x00000208 #x08020200 #x00000000 #x08020008 #x08000200 #x00000000 #x00020208 #x08000200 #x00020008 #x08000008 #x08000008 #x00020000 #x08020208 #x00020008 #x08020000 #x00000208 #x08000000 #x00000008 #x08020200 #x00000200 #x00020200 #x08020000 #x08020008 #x00020208 #x08000208 #x00020200 #x00020000 #x08000208 #x00000008 #x08020208 #x00000200 #x08000000 #x08020200 #x08000000 #x00020008 #x00000208 #x00020000 #x08020200 #x08000200 #x00000000 #x00000200 #x00020008 #x08020208 #x08000200 #x08000008 #x00000200 #x00000000 #x08020008 #x08000208 #x00020000 #x08000000 #x08020208 #x00000008 #x00020208 #x00020200 #x08000008 #x08020000 #x08000208 #x00000208 #x08020000 #x00020208 #x00000008 #x08020008 #x00020200 )) (defconst des-sbox3 #32@( #x00802001 #x00002081 #x00002081 #x00000080 #x00802080 #x00800081 #x00800001 #x00002001 #x00000000 #x00802000 #x00802000 #x00802081 #x00000081 #x00000000 #x00800080 #x00800001 #x00000001 #x00002000 #x00800000 #x00802001 #x00000080 #x00800000 #x00002001 #x00002080 #x00800081 #x00000001 #x00002080 #x00800080 #x00002000 #x00802080 #x00802081 #x00000081 #x00800080 #x00800001 #x00802000 #x00802081 #x00000081 #x00000000 #x00000000 #x00802000 #x00002080 #x00800080 #x00800081 #x00000001 #x00802001 #x00002081 #x00002081 #x00000080 #x00802081 #x00000081 #x00000001 #x00002000 #x00800001 #x00002001 #x00802080 #x00800081 #x00002001 #x00002080 #x00800000 #x00802001 #x00000080 #x00800000 #x00002000 #x00802080 )) (defconst des-sbox4 #32@( #x00000100 #x02080100 #x02080000 #x42000100 #x00080000 #x00000100 #x40000000 #x02080000 #x40080100 #x00080000 #x02000100 #x40080100 #x42000100 #x42080000 #x00080100 #x40000000 #x02000000 #x40080000 #x40080000 #x00000000 #x40000100 #x42080100 #x42080100 #x02000100 #x42080000 #x40000100 #x00000000 #x42000000 #x02080100 #x02000000 #x42000000 #x00080100 #x00080000 #x42000100 #x00000100 #x02000000 #x40000000 #x02080000 #x42000100 #x40080100 #x02000100 #x40000000 #x42080000 #x02080100 #x40080100 #x00000100 #x02000000 #x42080000 #x42080100 #x00080100 #x42000000 #x42080100 #x02080000 #x00000000 #x40080000 #x42000000 #x00080100 #x02000100 #x40000100 #x00080000 #x00000000 #x40080000 #x02080100 #x40000100 )) (defconst des-sbox5 #32@( #x20000010 #x20400000 #x00004000 #x20404010 #x20400000 #x00000010 #x20404010 #x00400000 #x20004000 #x00404010 #x00400000 #x20000010 #x00400010 #x20004000 #x20000000 #x00004010 #x00000000 #x00400010 #x20004010 #x00004000 #x00404000 #x20004010 #x00000010 #x20400010 #x20400010 #x00000000 #x00404010 #x20404000 #x00004010 #x00404000 #x20404000 #x20000000 #x20004000 #x00000010 #x20400010 #x00404000 #x20404010 #x00400000 #x00004010 #x20000010 #x00400000 #x20004000 #x20000000 #x00004010 #x20000010 #x20404010 #x00404000 #x20400000 #x00404010 #x20404000 #x00000000 #x20400010 #x00000010 #x00004000 #x20400000 #x00404010 #x00004000 #x00400010 #x20004010 #x00000000 #x20404000 #x20000000 #x00400010 #x20004010 )) (defconst des-sbox6 #32@( #x00200000 #x04200002 #x04000802 #x00000000 #x00000800 #x04000802 #x00200802 #x04200800 #x04200802 #x00200000 #x00000000 #x04000002 #x00000002 #x04000000 #x04200002 #x00000802 #x04000800 #x00200802 #x00200002 #x04000800 #x04000002 #x04200000 #x04200800 #x00200002 #x04200000 #x00000800 #x00000802 #x04200802 #x00200800 #x00000002 #x04000000 #x00200800 #x04000000 #x00200800 #x00200000 #x04000802 #x04000802 #x04200002 #x04200002 #x00000002 #x00200002 #x04000000 #x04000800 #x00200000 #x04200800 #x00000802 #x00200802 #x04200800 #x00000802 #x04000002 #x04200802 #x04200000 #x00200800 #x00000000 #x00000002 #x04200802 #x00000000 #x00200802 #x04200000 #x00000800 #x04000002 #x04000800 #x00000800 #x00200002 )) (defconst des-sbox7 #32@( #x10001040 #x00001000 #x00040000 #x10041040 #x10000000 #x10001040 #x00000040 #x10000000 #x00040040 #x10040000 #x10041040 #x00041000 #x10041000 #x00041040 #x00001000 #x00000040 #x10040000 #x10000040 #x10001000 #x00001040 #x00041000 #x00040040 #x10040040 #x10041000 #x00001040 #x00000000 #x00000000 #x10040040 #x10000040 #x10001000 #x00041040 #x00040000 #x00041040 #x00040000 #x10041000 #x00001000 #x00000040 #x10040040 #x00001000 #x00041040 #x10001000 #x00000040 #x10000040 #x10040000 #x10040040 #x10000000 #x00040000 #x10001040 #x00000000 #x10041040 #x00040040 #x10000040 #x10040000 #x10001000 #x10001040 #x00000000 #x10041040 #x00041000 #x00041000 #x00001040 #x00001040 #x00040040 #x10000000 #x10041000 )) ;;; permutations and rotations for the key schedule (defconst permutation1 (make-array 56 :element-type '(unsigned-byte 8) :initial-contents (list 56 48 40 32 24 16 8 0 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 60 52 44 36 28 20 12 4 27 19 11 3))) (defconst total-rotations (make-array 16 :element-type '(unsigned-byte 5) :initial-contents (list 1 2 4 6 8 10 12 14 15 17 19 21 23 25 27 28))) (defconst permutation2 (make-array 48 :element-type '(unsigned-byte 8) :initial-contents (list 13 16 10 23 0 4 2 27 14 5 20 9 22 18 11 3 25 7 15 6 26 19 12 1 40 51 30 36 46 54 29 39 50 44 32 47 43 48 38 55 33 52 45 41 49 35 28 31))) ;;; actual encryption and decryption guts (deftype des-round-keys () '(simple-array (unsigned-byte 32) (32))) (macrolet ((frob (left right shift-amount constant) `(setf work (logand (logxor (mod32ash ,left ,shift-amount) ,right) ,constant) ,right (logxor ,right work) ,left (logxor (mod32ash work ,(- shift-amount)) ,left))) (6-bits (val offset) `(ldb (byte 6 ,offset) ,val)) (sbox-subst (val sbox0 sbox1 sbox2 sbox3) `(logior (aref ,sbox0 (6-bits ,val 0)) (aref ,sbox1 (6-bits ,val 8)) (aref ,sbox2 (6-bits ,val 16)) (aref ,sbox3 (6-bits ,val 24)))) (des-round (left right keys index) `(let* ((work (logxor (rol32 ,right 28) (aref ,keys ,index))) (fval (sbox-subst work des-sbox6 des-sbox4 des-sbox2 des-sbox0))) (declare (type (unsigned-byte 32) work fval)) (setf work (logxor ,right (aref ,keys (1+ ,index))) fval (logior fval (sbox-subst work des-sbox7 des-sbox5 des-sbox3 des-sbox1)) ,left (logxor ,left fval)))) (des-initial-permutation (left right) `(progn (frob ,left ,right -4 #x0f0f0f0f) (frob ,left ,right -16 #x0000ffff) (frob ,right ,left -2 #x33333333) (frob ,right ,left -8 #x00ff00ff) (setf ,right (rol32 ,right 1) work (logand (logxor ,left ,right) #xaaaaaaaa) ,left (logxor ,left work) ,right (logxor ,right work) ,left (rol32 ,left 1)))) (des-final-permutation (left right) `(progn (setf ,right (rol32 ,right 31) work (logand (logxor ,left ,right) #xaaaaaaaa) ,left (logxor ,left work) ,right (logxor ,right work) ,left (rol32 ,left 31)) (frob ,left ,right -8 #x00ff00ff) (frob ,left ,right -2 #x33333333) (frob ,right ,left -16 #x0000ffff) (frob ,right ,left -4 #x0f0f0f0f))) (des-munge-core (left right keys) `(do ((round 0 (1+ round)) (key-index 0 (+ key-index 4))) ((>= round 8)) (des-round ,left ,right ,keys key-index) (des-round ,right ,left ,keys (+ key-index 2))))) (defun des-munge-block (input input-start output output-start keys) (declare (type (simple-array (unsigned-byte 8) (*)) input output)) (declare (type (integer 0 #.(- array-dimension-limit 8)) input-start output-start)) (declare (type des-round-keys keys)) (with-words ((left right) input input-start) (let ((work 0)) (declare (type (unsigned-byte 32) work)) (des-initial-permutation left right) ;; now the real work begins (des-munge-core left right keys) (des-final-permutation left right) (store-words output output-start right left)))) (defun 3des-munge-block (input input-start output output-start k1 k2 k3) (declare (type (simple-array (unsigned-byte 8) (*)) input output)) (declare (type (integer 0 #.(- array-dimension-limit 8)) input-start output-start)) (declare (type des-round-keys k1 k2 k3)) (with-words ((left right) input input-start) (let ((work 0)) (declare (type (unsigned-byte 32) work)) (des-initial-permutation left right) ;; now the real work begins (des-munge-core left right k1) (des-munge-core right left k2) (des-munge-core left right k3) (des-final-permutation left right) (store-words output output-start right left)))) ) ; MACROLET ;;; ECB mode encryption and decryption (defclass des (cipher 8-byte-block-mixin) ((encryption-keys :accessor encryption-keys :type des-round-keys) (decryption-keys :accessor decryption-keys :type des-round-keys))) (define-block-encryptor des 8 (des-munge-block plaintext plaintext-start ciphertext ciphertext-start (encryption-keys context))) (define-block-decryptor des 8 (des-munge-block ciphertext ciphertext-start plaintext plaintext-start (decryption-keys context))) (defclass 3des (cipher 8-byte-block-mixin) ((encryption-keys-1 :accessor encryption-keys-1 :type des-round-keys) (decryption-keys-1 :accessor decryption-keys-1 :type des-round-keys) (encryption-keys-2 :accessor encryption-keys-2 :type des-round-keys) (decryption-keys-2 :accessor decryption-keys-2 :type des-round-keys) (encryption-keys-3 :accessor encryption-keys-3 :type des-round-keys) (decryption-keys-3 :accessor decryption-keys-3 :type des-round-keys))) (define-block-encryptor 3des 8 (3des-munge-block plaintext plaintext-start ciphertext ciphertext-start (encryption-keys-1 context) (decryption-keys-2 context) (encryption-keys-3 context))) (define-block-decryptor 3des 8 (3des-munge-block ciphertext ciphertext-start plaintext plaintext-start (decryption-keys-3 context) (encryption-keys-2 context) (decryption-keys-1 context))) ;;; key scheduling ;;; `dough' being a cute pun from Schiener's code. (defun des-cook-key-schedule (dough) (let ((schedule (make-array 32 :element-type '(unsigned-byte 32) :initial-element 0))) (declare (type des-round-keys dough schedule)) (do ((dough-index 0 (+ dough-index 2)) (schedule-index 0 (+ schedule-index 2))) ((>= dough-index 32) schedule) (declare (optimize (debug 3))) (let ((schedule-index+1 (1+ schedule-index)) (dough-index+1 (1+ dough-index))) (setf (aref schedule schedule-index) (let ((dough0 (aref dough dough-index)) (dough1 (aref dough dough-index+1))) (logior (mod32ash (mask-field (byte 6 18) dough0) 6) (mod32ash (mask-field (byte 6 6) dough0) 10) (mod32ash (mask-field (byte 6 18) dough1) -10) (mod32ash (mask-field (byte 6 6) dough1) -6))) (aref schedule schedule-index+1) (let ((dough0 (aref dough dough-index)) (dough1 (aref dough dough-index+1))) (logior (mod32ash (mask-field (byte 6 12) dough0) 12) (mod32ash (mask-field (byte 6 0) dough0) 16) (mod32ash (mask-field (byte 6 12) dough1) -4) (mask-field (byte 6 0) dough1)))))))) (defun compute-des-encryption-keys (key) (declare (type (simple-array (unsigned-byte 8) (8)) key)) (let ((pc1m (make-array 56 :element-type '(unsigned-byte 8) :initial-element 0)) (pcr (make-array 56 :element-type '(unsigned-byte 8) :initial-element 0)) (kn (make-array 32 :element-type '(unsigned-byte 32) :initial-element 0))) (dotimes (j 56) (let* ((l (aref permutation1 j)) (m (logand l #x7))) (setf (aref pc1m j) (logand (aref key (ldb (byte 4 3) l)) (ash 1 (- 7 m)))))) (dotimes (i 16) (let* ((m (ash i 1)) (n (1+ m))) (dotimes (j 28) (let ((l (+ j (aref total-rotations i)))) (if (< l 28) (setf (aref pcr j) (aref pc1m l)) (setf (aref pcr j) (aref pc1m (- l 28)))))) (do ((j 28 (1+ j))) ((= j 56)) (let ((l (+ j (aref total-rotations i)))) (if (< l 56) (setf (aref pcr j) (aref pc1m l)) (setf (aref pcr j) (aref pc1m (- l 28)))))) (dotimes (j 24) (unless (zerop (aref pcr (aref permutation2 j))) (setf (aref kn m) (logior (aref kn m) (ash 1 (- 24 (1+ j)))))) (unless (zerop (aref pcr (aref permutation2 (+ j 24)))) (setf (aref kn n) (logior (aref kn n) (ash 1 (- 24 (1+ j))))))))) (des-cook-key-schedule kn))) (defun compute-round-keys-for-des-key (key) (let ((encryption-keys (compute-des-encryption-keys key)) (decryption-keys (make-array 32 :element-type '(unsigned-byte 32)))) (declare (type des-round-keys encryption-keys decryption-keys)) (do ((i 0 (+ i 2))) ((= i 32) (values encryption-keys decryption-keys)) (setf (aref decryption-keys (1+ i)) (aref encryption-keys (- 31 i)) (aref decryption-keys i) (aref encryption-keys (- 31 (1+ i))))))) (defmethod schedule-key ((cipher des) key) (multiple-value-bind (encryption-keys decryption-keys) (compute-round-keys-for-des-key key) (setf (encryption-keys cipher) encryption-keys (decryption-keys cipher) decryption-keys) cipher)) (defmethod schedule-key ((cipher 3des) key) (multiple-value-bind (ek1 dk1) (compute-round-keys-for-des-key (subseq key 0 8)) (multiple-value-bind (ek2 dk2) (compute-round-keys-for-des-key (subseq key 8 16)) (multiple-value-bind (ek3 dk3) (let ((length (length key))) (cond ((= length 16) (compute-round-keys-for-des-key (subseq key 0 8))) ((= length 24) (compute-round-keys-for-des-key (subseq key 16 24))))) (setf (encryption-keys-1 cipher) ek1 (decryption-keys-1 cipher) dk1 (encryption-keys-2 cipher) ek2 (decryption-keys-2 cipher) dk2 (encryption-keys-3 cipher) ek3 (decryption-keys-3 cipher) dk3) cipher)))) (defcipher des (:encrypt-function des-encrypt-block) (:decrypt-function des-decrypt-block) (:block-length 8) (:key-length (:fixed 8))) (defcipher 3des (:encrypt-function 3des-encrypt-block) (:decrypt-function 3des-decrypt-block) (:block-length 8) (:key-length (:fixed 16 24))) ironclad-0.57/src/ciphers/idea.lisp000066400000000000000000000137241420372057600172740ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; idea.lisp -- implementation of the IDEA block cipher ;;; converted mostly from the C code appearing in _Applied Cryptography_ ;;; by Bruce Schneier to Common Lisp. Beware the C-isms. (in-package :crypto) (defun idea-mul (a b) (declare (type (unsigned-byte 16) a b)) (cond ((zerop a) (ldb (byte 16 0) (- 1 b))) ((zerop b) (ldb (byte 16 0) (- 1 a))) (t (let* ((product (ldb (byte 32 0) (* a b))) (x (ldb (byte 16 16) product)) (y (ldb (byte 16 0) product))) (ldb (byte 16 0) (+ (- y x) (if (< y x) 1 0))))))) (defun idea-mul-inv (x) (declare (type (unsigned-byte 16) x)) (let ((t1 1)) (declare (type (unsigned-byte 16) t1)) (when (<= x 1) (return-from idea-mul-inv x)) (multiple-value-bind (t0 y) (truncate 65537 x) (declare (type (unsigned-byte 16) t0 y)) (loop until (= y 1) do (let ((q (truncate x y))) (declare (type (unsigned-byte 16) q)) (setf x (mod x y)) (incf t1 (ldb (byte 16 0) (* q t0))) (when (= x 1) (return-from idea-mul-inv t1)) (setf q (truncate y x)) (setf y (mod y x)) (incf t0 (ldb (byte 16 0) (* q t1)))) finally (return (ldb (byte 16 0) (- 1 t0))))))) (deftype idea-round-keys () '(simple-array (unsigned-byte 16) (52))) (defun idea-munge-block (input input-start output output-start keys) (declare (type (simple-array (unsigned-byte 8) (*)) input output)) (declare (type (integer 0 #.(- array-dimension-limit 8)) input-start output-start)) (declare (type idea-round-keys keys)) (with-words ((x1 x2 x3 x4) input input-start :size 2) (do ((i 0 (+ i 6))) ((>= i 48) ;; final round (setf x1 (idea-mul x1 (aref keys 48)) x2 (ldb (byte 16 0) (+ x2 (aref keys 50))) x3 (ldb (byte 16 0) (+ x3 (aref keys 49))) x4 (idea-mul x4 (aref keys 51))) (store-words output output-start x1 x3 x2 x4)) (setf x1 (idea-mul x1 (aref keys i)) x2 (ldb (byte 16 0) (+ x2 (aref keys (+ i 1)))) x3 (ldb (byte 16 0) (+ x3 (aref keys (+ i 2)))) x4 (idea-mul x4 (aref keys (+ i 3)))) (let ((t1 x3) (t0 x2)) (setf x3 (idea-mul (logxor x3 x1) (aref keys (+ i 4))) x2 (idea-mul (ldb (byte 16 0) (+ (logxor x2 x4) x3)) (aref keys (+ i 5)))) (setf x3 (ldb (byte 16 0) (+ x3 x2)) x1 (logxor x1 x2) x4 (logxor x4 x3) x2 (logxor x2 t1) x3 (logxor x3 t0)))))) (defclass idea (cipher 8-byte-block-mixin) ((encryption-keys :accessor encryption-keys) (decryption-keys :accessor decryption-keys))) (define-block-encryptor idea 8 (idea-munge-block plaintext plaintext-start ciphertext ciphertext-start (encryption-keys context))) (define-block-decryptor idea 8 (idea-munge-block ciphertext ciphertext-start plaintext plaintext-start (decryption-keys context))) (defun idea-invert-key (encryption-keys decryption-keys) (declare (type idea-round-keys encryption-keys decryption-keys)) (setf (aref decryption-keys 51) (idea-mul-inv (aref encryption-keys 3)) (aref decryption-keys 50) (ldb (byte 16 0) (- (aref encryption-keys 2))) (aref decryption-keys 49) (ldb (byte 16 0) (- (aref encryption-keys 1))) (aref decryption-keys 48) (idea-mul-inv (aref encryption-keys 0))) (do ((i 1 (1+ i)) (k 4 (+ k 6)) (counter 47)) ((>= i 8) (setf (aref decryption-keys 5) (aref encryption-keys 47) (aref decryption-keys 4) (aref encryption-keys 46) (aref decryption-keys 3) (idea-mul-inv (aref encryption-keys 51)) (aref decryption-keys 2) (ldb (byte 16 0) (- (aref encryption-keys 50))) (aref decryption-keys 1) (ldb (byte 16 0) (- (aref encryption-keys 49))) (aref decryption-keys 0) (idea-mul-inv (aref encryption-keys 48))) decryption-keys) (flet ((set-decryption-key (x) (setf (aref decryption-keys counter) x) (decf counter))) (declare (inline set-decryption-key)) (set-decryption-key (aref encryption-keys (+ k 1))) (set-decryption-key (aref encryption-keys k)) (set-decryption-key (idea-mul-inv (aref encryption-keys (+ k 5)))) (set-decryption-key (ldb (byte 16 0) (- (aref encryption-keys (+ k 3))))) (set-decryption-key (ldb (byte 16 0) (- (aref encryption-keys (+ k 4))))) (set-decryption-key (idea-mul-inv (aref encryption-keys (+ k 2))))))) (defun idea-key-schedule (key) (declare (type (simple-array (unsigned-byte 8) (16)) key)) (let ((encryption-keys (make-array 52 :element-type '(unsigned-byte 16))) (decryption-keys (make-array 52 :element-type '(unsigned-byte 16)))) (declare (type idea-round-keys encryption-keys decryption-keys)) (dotimes (i 8) (setf (aref encryption-keys i) (ub16ref/be key (* i 2)))) (do ((j 1 (1+ (mod j 8))) (k 8 (1+ k)) (offset 0)) ((>= k 52) (values encryption-keys (idea-invert-key encryption-keys decryption-keys))) (setf (aref encryption-keys (+ j 7 offset)) (ldb (byte 16 0) (logior (ash (aref encryption-keys (+ (mod j 8) offset)) 9) (ash (aref encryption-keys (+ (mod (1+ j) 8) offset)) -7)))) (incf offset (if (= j 8) 8 0))))) (defmethod schedule-key ((cipher idea) key) (declare (type (simple-array (unsigned-byte 8) (16)) key)) (multiple-value-bind (encryption-keys decryption-keys) (idea-key-schedule key) (setf (encryption-keys cipher) encryption-keys (decryption-keys cipher) decryption-keys) cipher)) (defcipher idea (:encrypt-function idea-encrypt-block) (:decrypt-function idea-decrypt-block) (:block-length 8) (:key-length (:fixed 16))) ironclad-0.57/src/ciphers/kalyna.lisp000066400000000000000000006765071420372057600176670ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; kalyna.lisp -- implementation of the Kalyna block ciphers (DSTU 7624:2014) (in-package :crypto) ;;; ;;; Constants ;;; (eval-when (:compile-toplevel :load-toplevel :execute) (defconst +kalyna-t+ (make-array '(8 256) :element-type '(unsigned-byte 64) :initial-contents '((#xa832a829d77f9aa8 #x4352432297d41143 #x5f3e5fc2df80615f #x061e063014121806 #x6bda6b7f670cb16b #x75bc758f2356c975 #x6cc16c477519ad6c #x592059f2cb927959 #x71a871af3b4ad971 #xdf84dfb6f8275bdf #x87a1874c35b22687 #x95fb95dc59cc6e95 #x174b17b872655c17 #xf017f0d31aeae7f0 #xd89fd88eea3247d8 #x092d0948363f2409 #x6dc46d4f731ea96d #xf318f3cb10e3ebf3 #x1d691de84e53741d #xcbc0cb16804b0bcb #xc9cac9068c4503c9 #x4d644d52b3fe294d #x2c9c2c7de8c4b02c #xaf29af11c56a86af #x798079ef0b72f979 #xe047e0537a9aa7e0 #x97f197cc55c26697 #xfd2efdbb34c9d3fd #x6fce6f5f7f10a16f #x4b7a4b62a7ec314b #x454c451283c60945 #x39dd39d596afe439 #x3ec63eed84baf83e #xdd8edda6f42953dd #xa315a371ed4eb6a3 #x4f6e4f42bff0214f #xb45eb4c99f2beab4 #xb654b6d99325e2b6 #x9ac89aa47be1529a #x0e360e70242a380e #x1f631ff8425d7c1f #xbf79bf91a51ac6bf #x154115a87e6b5415 #xe142e15b7c9da3e1 #x49704972abe23949 #xd2bdd2ded6046fd2 #x93e593ec4dde7693 #xc6f9c67eae683fc6 #x92e092e44bd97292 #x72a772b73143d572 #x9edc9e8463fd429e #x61f8612f5b3a9961 #xd1b2d1c6dc0d63d1 #x63f2633f57349163 #xfa35fa8326dccffa #xee71ee235eb09fee #xf403f4f302f6f7f4 #x197d19c8564f6419 #xd5a6d5e6c41173d5 #xad23ad01c9648ead #x582558facd957d58 #xa40ea449ff5baaa4 #xbb6dbbb1bd06d6bb #xa11fa161e140bea1 #xdc8bdcaef22e57dc #xf21df2c316e4eff2 #x83b5836c2dae3683 #x37eb37a5b285dc37 #x4257422a91d31542 #xe453e4736286b7e4 #x7a8f7af7017bf57a #x32fa328dac9ec832 #x9cd69c946ff34a9c #xccdbcc2e925e17cc #xab3dab31dd7696ab #x4a7f4a6aa1eb354a #x8f898f0c058a068f #x6ecb6e577917a56e #x04140420181c1004 #x27bb2725d2f59c27 #x2e962e6de4cab82e #xe75ce76b688fbbe7 #xe24de2437694afe2 #x5a2f5aeac19b755a #x96f496c453c56296 #x164e16b074625816 #x23af2305cae98c23 #x2b872b45fad1ac2b #xc2edc25eb6742fc2 #x65ec650f43268965 #x66e36617492f8566 #x0f330f78222d3c0f #xbc76bc89af13cabc #xa937a921d1789ea9 #x474647028fc80147 #x415841329bda1941 #x34e434bdb88cd034 #x4875487aade53d48 #xfc2bfcb332ced7fc #xb751b7d19522e6b7 #x6adf6a77610bb56a #x88928834179f1a88 #xa50ba541f95caea5 #x530253a2f7a45153 #x86a4864433b52286 #xf93af99b2cd5c3f9 #x5b2a5be2c79c715b #xdb90db96e03b4bdb #x38d838dd90a8e038 #x7b8a7bff077cf17b #xc3e8c356b0732bc3 #x1e661ef0445a781e #x22aa220dccee8822 #x33ff3385aa99cc33 #x24b4243dd8fc9024 #x2888285df0d8a028 #x36ee36adb482d836 #xc7fcc776a86f3bc7 #xb240b2f98b39f2b2 #x3bd73bc59aa1ec3b #x8e8c8e04038d028e #x77b6779f2f58c177 #xba68bab9bb01d2ba #xf506f5fb04f1f3f5 #x144414a0786c5014 #x9fd99f8c65fa469f #x0828084030382008 #x551c5592e3b64955 #x9bcd9bac7de6569b #x4c614c5ab5f92d4c #xfe21fea33ec0dffe #x60fd60275d3d9d60 #x5c315cdad5896d5c #xda95da9ee63c4fda #x187818c050486018 #x4643460a89cf0546 #xcddecd26945913cd #x7d947dcf136ee97d #x21a52115c6e78421 #xb04ab0e98737fab0 #x3fc33fe582bdfc3f #x1b771bd85a416c1b #x8997893c11981e89 #xff24ffab38c7dbff #xeb60eb0b40ab8beb #x84ae84543fbb2a84 #x69d0696f6b02b969 #x3ad23acd9ca6e83a #x9dd39d9c69f44e9d #xd7acd7f6c81f7bd7 #xd3b8d3d6d0036bd3 #x70ad70a73d4ddd70 #x67e6671f4f288167 #x405d403a9ddd1d40 #xb55bb5c1992ceeb5 #xde81debefe205fde #x5d345dd2d38e695d #x30f0309da090c030 #x91ef91fc41d07e91 #xb14fb1e18130feb1 #x788578e70d75fd78 #x1155118866774411 #x0105010806070401 #xe556e57b6481b3e5 #x0000000000000000 #x68d568676d05bd68 #x98c298b477ef5a98 #xa01aa069e747baa0 #xc5f6c566a46133c5 #x020a02100c0e0802 #xa604a659f355a2a6 #x74b974872551cd74 #x2d992d75eec3b42d #x0b270b583a312c0b #xa210a279eb49b2a2 #x76b37697295fc576 #xb345b3f18d3ef6b3 #xbe7cbe99a31dc2be #xced1ce3e9e501fce #xbd73bd81a914cebd #xae2cae19c36d82ae #xe96ae91b4ca583e9 #x8a988a241b91128a #x31f53195a697c431 #x1c6c1ce04854701c #xec7bec3352be97ec #xf112f1db1cede3f1 #x99c799bc71e85e99 #x94fe94d45fcb6a94 #xaa38aa39db7192aa #xf609f6e30ef8fff6 #x26be262dd4f29826 #x2f932f65e2cdbc2f #xef74ef2b58b79bef #xe86fe8134aa287e8 #x8c868c140f830a8c #x35e135b5be8bd435 #x030f03180a090c03 #xd4a3d4eec21677d4 #x7f9e7fdf1f60e17f #xfb30fb8b20dbcbfb #x051105281e1b1405 #xc1e2c146bc7d23c1 #x5e3b5ecad987655e #x90ea90f447d77a90 #x20a0201dc0e08020 #x3dc93df58eb3f43d #x82b082642ba93282 #xf70cf7eb08fffbf7 #xea65ea0346ac8fea #x0a220a503c36280a #x0d390d682e23340d #x7e9b7ed71967e57e #xf83ff8932ad2c7f8 #x500d50bafdad5d50 #x1a721ad05c46681a #xc4f3c46ea26637c4 #x071b073812151c07 #x57165782efb84157 #xb862b8a9b70fdab8 #x3ccc3cfd88b4f03c #x62f7623751339562 #xe348e34b7093abe3 #xc8cfc80e8a4207c8 #xac26ac09cf638aac #x520752aaf1a35552 #x64e9640745218d64 #x1050108060704010 #xd0b7d0ceda0a67d0 #xd99ad986ec3543d9 #x135f13986a794c13 #x0c3c0c602824300c #x125a12906c7e4812 #x298d2955f6dfa429 #x510851b2fbaa5951 #xb967b9a1b108deb9 #xcfd4cf3698571bcf #xd6a9d6fece187fd6 #x73a273bf3744d173 #x8d838d1c09840e8d #x81bf817c21a03e81 #x5419549ae5b14d54 #xc0e7c04eba7a27c0 #xed7eed3b54b993ed #x4e6b4e4ab9f7254e #x4449441a85c10d44 #xa701a751f552a6a7 #x2a822a4dfcd6a82a #x85ab855c39bc2e85 #x25b12535defb9425 #xe659e6636e88bfe6 #xcac5ca1e864c0fca #x7c917cc71569ed7c #x8b9d8b2c1d96168b #x5613568ae9bf4556 #x80ba807427a73a80) (#xd1ce3e9e501fcece #x6dbbb1bd06d6bbbb #x60eb0b40ab8bebeb #xe092e44bd9729292 #x65ea0346ac8feaea #xc0cb16804b0bcbcb #x5f13986a794c1313 #xe2c146bc7d23c1c1 #x6ae91b4ca583e9e9 #xd23acd9ca6e83a3a #xa9d6fece187fd6d6 #x40b2f98b39f2b2b2 #xbdd2ded6046fd2d2 #xea90f447d77a9090 #x4b17b872655c1717 #x3ff8932ad2c7f8f8 #x57422a91d3154242 #x4115a87e6b541515 #x13568ae9bf455656 #x5eb4c99f2beab4b4 #xec650f4326896565 #x6c1ce04854701c1c #x928834179f1a8888 #x52432297d4114343 #xf6c566a46133c5c5 #x315cdad5896d5c5c #xee36adb482d83636 #x68bab9bb01d2baba #x06f5fb04f1f3f5f5 #x165782efb8415757 #xe6671f4f28816767 #x838d1c09840e8d8d #xf53195a697c43131 #x09f6e30ef8fff6f6 #xe9640745218d6464 #x2558facd957d5858 #xdc9e8463fd429e9e #x03f4f302f6f7f4f4 #xaa220dccee882222 #x38aa39db7192aaaa #xbc758f2356c97575 #x330f78222d3c0f0f #x0a02100c0e080202 #x4fb1e18130feb1b1 #x84dfb6f8275bdfdf #xc46d4f731ea96d6d #xa273bf3744d17373 #x644d52b3fe294d4d #x917cc71569ed7c7c #xbe262dd4f2982626 #x962e6de4cab82e2e #x0cf7eb08fffbf7f7 #x2808403038200808 #x345dd2d38e695d5d #x49441a85c10d4444 #xc63eed84baf83e3e #xd99f8c65fa469f9f #x4414a0786c501414 #xcfc80e8a4207c8c8 #x2cae19c36d82aeae #x19549ae5b14d5454 #x5010806070401010 #x9fd88eea3247d8d8 #x76bc89af13cabcbc #x721ad05c46681a1a #xda6b7f670cb16b6b #xd0696f6b02b96969 #x18f3cb10e3ebf3f3 #x73bd81a914cebdbd #xff3385aa99cc3333 #x3dab31dd7696abab #x35fa8326dccffafa #xb2d1c6dc0d63d1d1 #xcd9bac7de6569b9b #xd568676d05bd6868 #x6b4e4ab9f7254e4e #x4e16b07462581616 #xfb95dc59cc6e9595 #xef91fc41d07e9191 #x71ee235eb09feeee #x614c5ab5f92d4c4c #xf2633f5734916363 #x8c8e04038d028e8e #x2a5be2c79c715b5b #xdbcc2e925e17cccc #xcc3cfd88b4f03c3c #x7d19c8564f641919 #x1fa161e140bea1a1 #xbf817c21a03e8181 #x704972abe2394949 #x8a7bff077cf17b7b #x9ad986ec3543d9d9 #xce6f5f7f10a16f6f #xeb37a5b285dc3737 #xfd60275d3d9d6060 #xc5ca1e864c0fcaca #x5ce76b688fbbe7e7 #x872b45fad1ac2b2b #x75487aade53d4848 #x2efdbb34c9d3fdfd #xf496c453c5629696 #x4c451283c6094545 #x2bfcb332ced7fcfc #x5841329bda194141 #x5a12906c7e481212 #x390d682e23340d0d #x8079ef0b72f97979 #x56e57b6481b3e5e5 #x97893c11981e8989 #x868c140f830a8c8c #x48e34b7093abe3e3 #xa0201dc0e0802020 #xf0309da090c03030 #x8bdcaef22e57dcdc #x51b7d19522e6b7b7 #xc16c477519ad6c6c #x7f4a6aa1eb354a4a #x5bb5c1992ceeb5b5 #xc33fe582bdfc3f3f #xf197cc55c2669797 #xa3d4eec21677d4d4 #xf762375133956262 #x992d75eec3b42d2d #x1e06301412180606 #x0ea449ff5baaa4a4 #x0ba541f95caea5a5 #xb5836c2dae368383 #x3e5fc2df80615f5f #x822a4dfcd6a82a2a #x95da9ee63c4fdada #xcac9068c4503c9c9 #x0000000000000000 #x9b7ed71967e57e7e #x10a279eb49b2a2a2 #x1c5592e3b6495555 #x79bf91a51ac6bfbf #x5511886677441111 #xa6d5e6c41173d5d5 #xd69c946ff34a9c9c #xd4cf3698571bcfcf #x360e70242a380e0e #x220a503c36280a0a #xc93df58eb3f43d3d #x0851b2fbaa595151 #x947dcf136ee97d7d #xe593ec4dde769393 #x771bd85a416c1b1b #x21fea33ec0dffefe #xf3c46ea26637c4c4 #x4647028fc8014747 #x2d0948363f240909 #xa4864433b5228686 #x270b583a312c0b0b #x898f0c058a068f8f #xd39d9c69f44e9d9d #xdf6a77610bb56a6a #x1b073812151c0707 #x67b9a1b108deb9b9 #x4ab0e98737fab0b0 #xc298b477ef5a9898 #x7818c05048601818 #xfa328dac9ec83232 #xa871af3b4ad97171 #x7a4b62a7ec314b4b #x74ef2b58b79befef #xd73bc59aa1ec3b3b #xad70a73d4ddd7070 #x1aa069e747baa0a0 #x53e4736286b7e4e4 #x5d403a9ddd1d4040 #x24ffab38c7dbffff #xe8c356b0732bc3c3 #x37a921d1789ea9a9 #x59e6636e88bfe6e6 #x8578e70d75fd7878 #x3af99b2cd5c3f9f9 #x9d8b2c1d96168b8b #x43460a89cf054646 #xba807427a73a8080 #x661ef0445a781e1e #xd838dd90a8e03838 #x42e15b7c9da3e1e1 #x62b8a9b70fdab8b8 #x32a829d77f9aa8a8 #x47e0537a9aa7e0e0 #x3c0c602824300c0c #xaf2305cae98c2323 #xb37697295fc57676 #x691de84e53741d1d #xb12535defb942525 #xb4243dd8fc902424 #x1105281e1b140505 #x12f1db1cede3f1f1 #xcb6e577917a56e6e #xfe94d45fcb6a9494 #x88285df0d8a02828 #xc89aa47be1529a9a #xae84543fbb2a8484 #x6fe8134aa287e8e8 #x15a371ed4eb6a3a3 #x6e4f42bff0214f4f #xb6779f2f58c17777 #xb8d3d6d0036bd3d3 #xab855c39bc2e8585 #x4de2437694afe2e2 #x0752aaf1a3555252 #x1df2c316e4eff2f2 #xb082642ba9328282 #x0d50bafdad5d5050 #x8f7af7017bf57a7a #x932f65e2cdbc2f2f #xb974872551cd7474 #x0253a2f7a4515353 #x45b3f18d3ef6b3b3 #xf8612f5b3a996161 #x29af11c56a86afaf #xdd39d596afe43939 #xe135b5be8bd43535 #x81debefe205fdede #xdecd26945913cdcd #x631ff8425d7c1f1f #xc799bc71e85e9999 #x26ac09cf638aacac #x23ad01c9648eadad #xa772b73143d57272 #x9c2c7de8c4b02c2c #x8edda6f42953dddd #xb7d0ceda0a67d0d0 #xa1874c35b2268787 #x7cbe99a31dc2bebe #x3b5ecad987655e5e #x04a659f355a2a6a6 #x7bec3352be97ecec #x140420181c100404 #xf9c67eae683fc6c6 #x0f03180a090c0303 #xe434bdb88cd03434 #x30fb8b20dbcbfbfb #x90db96e03b4bdbdb #x2059f2cb92795959 #x54b6d99325e2b6b6 #xedc25eb6742fc2c2 #x0501080607040101 #x17f0d31aeae7f0f0 #x2f5aeac19b755a5a #x7eed3b54b993eded #x01a751f552a6a7a7 #xe36617492f856666 #xa52115c6e7842121 #x9e7fdf1f60e17f7f #x988a241b91128a8a #xbb2725d2f59c2727 #xfcc776a86f3bc7c7 #xe7c04eba7a27c0c0 #x8d2955f6dfa42929 #xacd7f6c81f7bd7d7) (#x93ec4dde769393e5 #xd986ec3543d9d99a #x9aa47be1529a9ac8 #xb5c1992ceeb5b55b #x98b477ef5a9898c2 #x220dccee882222aa #x451283c60945454c #xfcb332ced7fcfc2b #xbab9bb01d2baba68 #x6a77610bb56a6adf #xdfb6f8275bdfdf84 #x02100c0e0802020a #x9f8c65fa469f9fd9 #xdcaef22e57dcdc8b #x51b2fbaa59515108 #x59f2cb9279595920 #x4a6aa1eb354a4a7f #x17b872655c17174b #x2b45fad1ac2b2b87 #xc25eb6742fc2c2ed #x94d45fcb6a9494fe #xf4f302f6f7f4f403 #xbbb1bd06d6bbbb6d #xa371ed4eb6a3a315 #x62375133956262f7 #xe4736286b7e4e453 #x71af3b4ad97171a8 #xd4eec21677d4d4a3 #xcd26945913cdcdde #x70a73d4ddd7070ad #x16b074625816164e #xe15b7c9da3e1e142 #x4972abe239494970 #x3cfd88b4f03c3ccc #xc04eba7a27c0c0e7 #xd88eea3247d8d89f #x5cdad5896d5c5c31 #x9bac7de6569b9bcd #xad01c9648eadad23 #x855c39bc2e8585ab #x53a2f7a451535302 #xa161e140bea1a11f #x7af7017bf57a7a8f #xc80e8a4207c8c8cf #x2d75eec3b42d2d99 #xe0537a9aa7e0e047 #xd1c6dc0d63d1d1b2 #x72b73143d57272a7 #xa659f355a2a6a604 #x2c7de8c4b02c2c9c #xc46ea26637c4c4f3 #xe34b7093abe3e348 #x7697295fc57676b3 #x78e70d75fd787885 #xb7d19522e6b7b751 #xb4c99f2beab4b45e #x0948363f2409092d #x3bc59aa1ec3b3bd7 #x0e70242a380e0e36 #x41329bda19414158 #x4c5ab5f92d4c4c61 #xdebefe205fdede81 #xb2f98b39f2b2b240 #x90f447d77a9090ea #x2535defb942525b1 #xa541f95caea5a50b #xd7f6c81f7bd7d7ac #x03180a090c03030f #x1188667744111155 #x0000000000000000 #xc356b0732bc3c3e8 #x2e6de4cab82e2e96 #x92e44bd9729292e0 #xef2b58b79befef74 #x4e4ab9f7254e4e6b #x12906c7e4812125a #x9d9c69f44e9d9dd3 #x7dcf136ee97d7d94 #xcb16804b0bcbcbc0 #x35b5be8bd43535e1 #x1080607040101050 #xd5e6c41173d5d5a6 #x4f42bff0214f4f6e #x9e8463fd429e9edc #x4d52b3fe294d4d64 #xa921d1789ea9a937 #x5592e3b64955551c #xc67eae683fc6c6f9 #xd0ceda0a67d0d0b7 #x7bff077cf17b7b8a #x18c0504860181878 #x97cc55c2669797f1 #xd3d6d0036bd3d3b8 #x36adb482d83636ee #xe6636e88bfe6e659 #x487aade53d484875 #x568ae9bf45565613 #x817c21a03e8181bf #x8f0c058a068f8f89 #x779f2f58c17777b6 #xcc2e925e17ccccdb #x9c946ff34a9c9cd6 #xb9a1b108deb9b967 #xe2437694afe2e24d #xac09cf638aacac26 #xb8a9b70fdab8b862 #x2f65e2cdbc2f2f93 #x15a87e6b54151541 #xa449ff5baaa4a40e #x7cc71569ed7c7c91 #xda9ee63c4fdada95 #x38dd90a8e03838d8 #x1ef0445a781e1e66 #x0b583a312c0b0b27 #x05281e1b14050511 #xd6fece187fd6d6a9 #x14a0786c50141444 #x6e577917a56e6ecb #x6c477519ad6c6cc1 #x7ed71967e57e7e9b #x6617492f856666e3 #xfdbb34c9d3fdfd2e #xb1e18130feb1b14f #xe57b6481b3e5e556 #x60275d3d9d6060fd #xaf11c56a86afaf29 #x5ecad987655e5e3b #x3385aa99cc3333ff #x874c35b2268787a1 #xc9068c4503c9c9ca #xf0d31aeae7f0f017 #x5dd2d38e695d5d34 #x6d4f731ea96d6dc4 #x3fe582bdfc3f3fc3 #x8834179f1a888892 #x8d1c09840e8d8d83 #xc776a86f3bc7c7fc #xf7eb08fffbf7f70c #x1de84e53741d1d69 #xe91b4ca583e9e96a #xec3352be97ecec7b #xed3b54b993eded7e #x807427a73a8080ba #x2955f6dfa429298d #x2725d2f59c2727bb #xcf3698571bcfcfd4 #x99bc71e85e9999c7 #xa829d77f9aa8a832 #x50bafdad5d50500d #x0f78222d3c0f0f33 #x37a5b285dc3737eb #x243dd8fc902424b4 #x285df0d8a0282888 #x309da090c03030f0 #x95dc59cc6e9595fb #xd2ded6046fd2d2bd #x3eed84baf83e3ec6 #x5be2c79c715b5b2a #x403a9ddd1d40405d #x836c2dae368383b5 #xb3f18d3ef6b3b345 #x696f6b02b96969d0 #x5782efb841575716 #x1ff8425d7c1f1f63 #x073812151c07071b #x1ce04854701c1c6c #x8a241b91128a8a98 #xbc89af13cabcbc76 #x201dc0e0802020a0 #xeb0b40ab8bebeb60 #xce3e9e501fceced1 #x8e04038d028e8e8c #xab31dd7696abab3d #xee235eb09feeee71 #x3195a697c43131f5 #xa279eb49b2a2a210 #x73bf3744d17373a2 #xf99b2cd5c3f9f93a #xca1e864c0fcacac5 #x3acd9ca6e83a3ad2 #x1ad05c46681a1a72 #xfb8b20dbcbfbfb30 #x0d682e23340d0d39 #xc146bc7d23c1c1e2 #xfea33ec0dffefe21 #xfa8326dccffafa35 #xf2c316e4eff2f21d #x6f5f7f10a16f6fce #xbd81a914cebdbd73 #x96c453c5629696f4 #xdda6f42953dddd8e #x432297d411434352 #x52aaf1a355525207 #xb6d99325e2b6b654 #x0840303820080828 #xf3cb10e3ebf3f318 #xae19c36d82aeae2c #xbe99a31dc2bebe7c #x19c8564f6419197d #x893c11981e898997 #x328dac9ec83232fa #x262dd4f2982626be #xb0e98737fab0b04a #xea0346ac8feaea65 #x4b62a7ec314b4b7a #x640745218d6464e9 #x84543fbb2a8484ae #x82642ba9328282b0 #x6b7f670cb16b6bda #xf5fb04f1f3f5f506 #x79ef0b72f9797980 #xbf91a51ac6bfbf79 #x0108060704010105 #x5fc2df80615f5f3e #x758f2356c97575bc #x633f5734916363f2 #x1bd85a416c1b1b77 #x2305cae98c2323af #x3df58eb3f43d3dc9 #x68676d05bd6868d5 #x2a4dfcd6a82a2a82 #x650f4326896565ec #xe8134aa287e8e86f #x91fc41d07e9191ef #xf6e30ef8fff6f609 #xffab38c7dbffff24 #x13986a794c13135f #x58facd957d585825 #xf1db1cede3f1f112 #x47028fc801474746 #x0a503c36280a0a22 #x7fdf1f60e17f7f9e #xc566a46133c5c5f6 #xa751f552a6a7a701 #xe76b688fbbe7e75c #x612f5b3a996161f8 #x5aeac19b755a5a2f #x063014121806061e #x460a89cf05464643 #x441a85c10d444449 #x422a91d315424257 #x0420181c10040414 #xa069e747baa0a01a #xdb96e03b4bdbdb90 #x39d596afe43939dd #x864433b5228686a4 #x549ae5b14d545419 #xaa39db7192aaaa38 #x8c140f830a8c8c86 #x34bdb88cd03434e4 #x2115c6e7842121a5 #x8b2c1d96168b8b9d #xf8932ad2c7f8f83f #x0c602824300c0c3c #x74872551cd7474b9 #x671f4f28816767e6) (#x676d05bd6868d568 #x1c09840e8d8d838d #x1e864c0fcacac5ca #x52b3fe294d4d644d #xbf3744d17373a273 #x62a7ec314b4b7a4b #x4ab9f7254e4e6b4e #x4dfcd6a82a2a822a #xeec21677d4d4a3d4 #xaaf1a35552520752 #x2dd4f2982626be26 #xf18d3ef6b3b345b3 #x9ae5b14d54541954 #xf0445a781e1e661e #xc8564f6419197d19 #xf8425d7c1f1f631f #x0dccee882222aa22 #x180a090c03030f03 #x0a89cf0546464346 #xf58eb3f43d3dc93d #x75eec3b42d2d992d #x6aa1eb354a4a7f4a #xa2f7a45153530253 #x6c2dae368383b583 #x986a794c13135f13 #x241b91128a8a988a #xd19522e6b7b751b7 #xe6c41173d5d5a6d5 #x35defb942525b125 #xef0b72f979798079 #xfb04f1f3f5f506f5 #x81a914cebdbd73bd #xfacd957d58582558 #x65e2cdbc2f2f932f #x682e23340d0d390d #x100c0e0802020a02 #x3b54b993eded7eed #xb2fbaa5951510851 #x8463fd429e9edc9e #x8866774411115511 #xc316e4eff2f21df2 #xed84baf83e3ec63e #x92e3b64955551c55 #xcad987655e5e3b5e #xc6dc0d63d1d1b2d1 #xb074625816164e16 #xfd88b4f03c3ccc3c #x17492f856666e366 #xa73d4ddd7070ad70 #xd2d38e695d5d345d #xcb10e3ebf3f318f3 #x1283c60945454c45 #x3a9ddd1d40405d40 #x2e925e17ccccdbcc #x134aa287e8e86fe8 #xd45fcb6a9494fe94 #x8ae9bf4556561356 #x4030382008082808 #x3e9e501fceced1ce #xd05c46681a1a721a #xcd9ca6e83a3ad23a #xded6046fd2d2bdd2 #x5b7c9da3e1e142e1 #xb6f8275bdfdf84df #xc1992ceeb5b55bb5 #xdd90a8e03838d838 #x577917a56e6ecb6e #x70242a380e0e360e #x7b6481b3e5e556e5 #xf302f6f7f4f403f4 #x9b2cd5c3f9f93af9 #x4433b5228686a486 #x1b4ca583e9e96ae9 #x42bff0214f4f6e4f #xfece187fd6d6a9d6 #x5c39bc2e8585ab85 #x05cae98c2323af23 #x3698571bcfcfd4cf #x8dac9ec83232fa32 #xbc71e85e9999c799 #x95a697c43131f531 #xa0786c5014144414 #x19c36d82aeae2cae #x235eb09feeee71ee #x0e8a4207c8c8cfc8 #x7aade53d48487548 #xd6d0036bd3d3b8d3 #x9da090c03030f030 #x61e140bea1a11fa1 #xe44bd9729292e092 #x329bda1941415841 #xe18130feb1b14fb1 #xc050486018187818 #x6ea26637c4c4f3c4 #x7de8c4b02c2c9c2c #xaf3b4ad97171a871 #xb73143d57272a772 #x1a85c10d44444944 #xa87e6b5415154115 #xbb34c9d3fdfd2efd #xa5b285dc3737eb37 #x99a31dc2bebe7cbe #xc2df80615f5f3e5f #x39db7192aaaa38aa #xac7de6569b9bcd9b #x34179f1a88889288 #x8eea3247d8d89fd8 #x31dd7696abab3dab #x3c11981e89899789 #x946ff34a9c9cd69c #x8326dccffafa35fa #x275d3d9d6060fd60 #x0346ac8feaea65ea #x89af13cabcbc76bc #x375133956262f762 #x602824300c0c3c0c #x3dd8fc902424b424 #x59f355a2a6a604a6 #x29d77f9aa8a832a8 #x3352be97ecec7bec #x1f4f28816767e667 #x1dc0e0802020a020 #x96e03b4bdbdb90db #xc71569ed7c7c917c #x5df0d8a028288828 #xa6f42953dddd8edd #x09cf638aacac26ac #xe2c79c715b5b2a5b #xbdb88cd03434e434 #xd71967e57e7e9b7e #x8060704010105010 #xdb1cede3f1f112f1 #xff077cf17b7b8a7b #x0c058a068f8f898f #x3f5734916363f263 #x69e747baa0a01aa0 #x281e1b1405051105 #xa47be1529a9ac89a #x2297d41143435243 #x9f2f58c17777b677 #x15c6e7842121a521 #x91a51ac6bfbf79bf #x25d2f59c2727bb27 #x48363f2409092d09 #x56b0732bc3c3e8c3 #x8c65fa469f9fd99f #xd99325e2b6b654b6 #xf6c81f7bd7d7acd7 #x55f6dfa429298d29 #x5eb6742fc2c2edc2 #x0b40ab8bebeb60eb #x4eba7a27c0c0e7c0 #x49ff5baaa4a40ea4 #x2c1d96168b8b9d8b #x140f830a8c8c868c #xe84e53741d1d691d #x8b20dbcbfbfb30fb #xab38c7dbffff24ff #x46bc7d23c1c1e2c1 #xf98b39f2b2b240b2 #xcc55c2669797f197 #x6de4cab82e2e962e #x932ad2c7f8f83ff8 #x0f4326896565ec65 #xe30ef8fff6f609f6 #x8f2356c97575bc75 #x3812151c07071b07 #x20181c1004041404 #x72abe23949497049 #x85aa99cc3333ff33 #x736286b7e4e453e4 #x86ec3543d9d99ad9 #xa1b108deb9b967b9 #xceda0a67d0d0b7d0 #x2a91d31542425742 #x76a86f3bc7c7fcc7 #x477519ad6c6cc16c #xf447d77a9090ea90 #x0000000000000000 #x04038d028e8e8c8e #x5f7f10a16f6fce6f #xbafdad5d50500d50 #x0806070401010501 #x66a46133c5c5f6c5 #x9ee63c4fdada95da #x028fc80147474647 #xe582bdfc3f3fc33f #x26945913cdcddecd #x6f6b02b96969d069 #x79eb49b2a2a210a2 #x437694afe2e24de2 #xf7017bf57a7a8f7a #x51f552a6a7a701a7 #x7eae683fc6c6f9c6 #xec4dde769393e593 #x78222d3c0f0f330f #x503c36280a0a220a #x3014121806061e06 #x636e88bfe6e659e6 #x45fad1ac2b2b872b #xc453c5629696f496 #x71ed4eb6a3a315a3 #xe04854701c1c6c1c #x11c56a86afaf29af #x77610bb56a6adf6a #x906c7e4812125a12 #x543fbb2a8484ae84 #xd596afe43939dd39 #x6b688fbbe7e75ce7 #xe98737fab0b04ab0 #x642ba9328282b082 #xeb08fffbf7f70cf7 #xa33ec0dffefe21fe #x9c69f44e9d9dd39d #x4c35b2268787a187 #xdad5896d5c5c315c #x7c21a03e8181bf81 #xb5be8bd43535e135 #xbefe205fdede81de #xc99f2beab4b45eb4 #x41f95caea5a50ba5 #xb332ced7fcfc2bfc #x7427a73a8080ba80 #x2b58b79befef74ef #x16804b0bcbcbc0cb #xb1bd06d6bbbb6dbb #x7f670cb16b6bda6b #x97295fc57676b376 #xb9bb01d2baba68ba #xeac19b755a5a2f5a #xcf136ee97d7d947d #xe70d75fd78788578 #x583a312c0b0b270b #xdc59cc6e9595fb95 #x4b7093abe3e348e3 #x01c9648eadad23ad #x872551cd7474b974 #xb477ef5a9898c298 #xc59aa1ec3b3bd73b #xadb482d83636ee36 #x0745218d6464e964 #x4f731ea96d6dc46d #xaef22e57dcdc8bdc #xd31aeae7f0f017f0 #xf2cb927959592059 #x21d1789ea9a937a9 #x5ab5f92d4c4c614c #xb872655c17174b17 #xdf1f60e17f7f9e7f #xfc41d07e9191ef91 #xa9b70fdab8b862b8 #x068c4503c9c9cac9 #x82efb84157571657 #xd85a416c1b1b771b #x537a9aa7e0e047e0 #x2f5b3a996161f861) (#xd77f9aa8a832a829 #x97d4114343524322 #xdf80615f5f3e5fc2 #x14121806061e0630 #x670cb16b6bda6b7f #x2356c97575bc758f #x7519ad6c6cc16c47 #xcb927959592059f2 #x3b4ad97171a871af #xf8275bdfdf84dfb6 #x35b2268787a1874c #x59cc6e9595fb95dc #x72655c17174b17b8 #x1aeae7f0f017f0d3 #xea3247d8d89fd88e #x363f2409092d0948 #x731ea96d6dc46d4f #x10e3ebf3f318f3cb #x4e53741d1d691de8 #x804b0bcbcbc0cb16 #x8c4503c9c9cac906 #xb3fe294d4d644d52 #xe8c4b02c2c9c2c7d #xc56a86afaf29af11 #x0b72f979798079ef #x7a9aa7e0e047e053 #x55c2669797f197cc #x34c9d3fdfd2efdbb #x7f10a16f6fce6f5f #xa7ec314b4b7a4b62 #x83c60945454c4512 #x96afe43939dd39d5 #x84baf83e3ec63eed #xf42953dddd8edda6 #xed4eb6a3a315a371 #xbff0214f4f6e4f42 #x9f2beab4b45eb4c9 #x9325e2b6b654b6d9 #x7be1529a9ac89aa4 #x242a380e0e360e70 #x425d7c1f1f631ff8 #xa51ac6bfbf79bf91 #x7e6b5415154115a8 #x7c9da3e1e142e15b #xabe2394949704972 #xd6046fd2d2bdd2de #x4dde769393e593ec #xae683fc6c6f9c67e #x4bd9729292e092e4 #x3143d57272a772b7 #x63fd429e9edc9e84 #x5b3a996161f8612f #xdc0d63d1d1b2d1c6 #x5734916363f2633f #x26dccffafa35fa83 #x5eb09feeee71ee23 #x02f6f7f4f403f4f3 #x564f6419197d19c8 #xc41173d5d5a6d5e6 #xc9648eadad23ad01 #xcd957d58582558fa #xff5baaa4a40ea449 #xbd06d6bbbb6dbbb1 #xe140bea1a11fa161 #xf22e57dcdc8bdcae #x16e4eff2f21df2c3 #x2dae368383b5836c #xb285dc3737eb37a5 #x91d315424257422a #x6286b7e4e453e473 #x017bf57a7a8f7af7 #xac9ec83232fa328d #x6ff34a9c9cd69c94 #x925e17ccccdbcc2e #xdd7696abab3dab31 #xa1eb354a4a7f4a6a #x058a068f8f898f0c #x7917a56e6ecb6e57 #x181c100404140420 #xd2f59c2727bb2725 #xe4cab82e2e962e6d #x688fbbe7e75ce76b #x7694afe2e24de243 #xc19b755a5a2f5aea #x53c5629696f496c4 #x74625816164e16b0 #xcae98c2323af2305 #xfad1ac2b2b872b45 #xb6742fc2c2edc25e #x4326896565ec650f #x492f856666e36617 #x222d3c0f0f330f78 #xaf13cabcbc76bc89 #xd1789ea9a937a921 #x8fc8014747464702 #x9bda194141584132 #xb88cd03434e434bd #xade53d484875487a #x32ced7fcfc2bfcb3 #x9522e6b7b751b7d1 #x610bb56a6adf6a77 #x179f1a8888928834 #xf95caea5a50ba541 #xf7a45153530253a2 #x33b5228686a48644 #x2cd5c3f9f93af99b #xc79c715b5b2a5be2 #xe03b4bdbdb90db96 #x90a8e03838d838dd #x077cf17b7b8a7bff #xb0732bc3c3e8c356 #x445a781e1e661ef0 #xccee882222aa220d #xaa99cc3333ff3385 #xd8fc902424b4243d #xf0d8a0282888285d #xb482d83636ee36ad #xa86f3bc7c7fcc776 #x8b39f2b2b240b2f9 #x9aa1ec3b3bd73bc5 #x038d028e8e8c8e04 #x2f58c17777b6779f #xbb01d2baba68bab9 #x04f1f3f5f506f5fb #x786c5014144414a0 #x65fa469f9fd99f8c #x3038200808280840 #xe3b64955551c5592 #x7de6569b9bcd9bac #xb5f92d4c4c614c5a #x3ec0dffefe21fea3 #x5d3d9d6060fd6027 #xd5896d5c5c315cda #xe63c4fdada95da9e #x50486018187818c0 #x89cf05464643460a #x945913cdcddecd26 #x136ee97d7d947dcf #xc6e7842121a52115 #x8737fab0b04ab0e9 #x82bdfc3f3fc33fe5 #x5a416c1b1b771bd8 #x11981e898997893c #x38c7dbffff24ffab #x40ab8bebeb60eb0b #x3fbb2a8484ae8454 #x6b02b96969d0696f #x9ca6e83a3ad23acd #x69f44e9d9dd39d9c #xc81f7bd7d7acd7f6 #xd0036bd3d3b8d3d6 #x3d4ddd7070ad70a7 #x4f28816767e6671f #x9ddd1d40405d403a #x992ceeb5b55bb5c1 #xfe205fdede81debe #xd38e695d5d345dd2 #xa090c03030f0309d #x41d07e9191ef91fc #x8130feb1b14fb1e1 #x0d75fd78788578e7 #x6677441111551188 #x0607040101050108 #x6481b3e5e556e57b #x0000000000000000 #x6d05bd6868d56867 #x77ef5a9898c298b4 #xe747baa0a01aa069 #xa46133c5c5f6c566 #x0c0e0802020a0210 #xf355a2a6a604a659 #x2551cd7474b97487 #xeec3b42d2d992d75 #x3a312c0b0b270b58 #xeb49b2a2a210a279 #x295fc57676b37697 #x8d3ef6b3b345b3f1 #xa31dc2bebe7cbe99 #x9e501fceced1ce3e #xa914cebdbd73bd81 #xc36d82aeae2cae19 #x4ca583e9e96ae91b #x1b91128a8a988a24 #xa697c43131f53195 #x4854701c1c6c1ce0 #x52be97ecec7bec33 #x1cede3f1f112f1db #x71e85e9999c799bc #x5fcb6a9494fe94d4 #xdb7192aaaa38aa39 #x0ef8fff6f609f6e3 #xd4f2982626be262d #xe2cdbc2f2f932f65 #x58b79befef74ef2b #x4aa287e8e86fe813 #x0f830a8c8c868c14 #xbe8bd43535e135b5 #x0a090c03030f0318 #xc21677d4d4a3d4ee #x1f60e17f7f9e7fdf #x20dbcbfbfb30fb8b #x1e1b140505110528 #xbc7d23c1c1e2c146 #xd987655e5e3b5eca #x47d77a9090ea90f4 #xc0e0802020a0201d #x8eb3f43d3dc93df5 #x2ba9328282b08264 #x08fffbf7f70cf7eb #x46ac8feaea65ea03 #x3c36280a0a220a50 #x2e23340d0d390d68 #x1967e57e7e9b7ed7 #x2ad2c7f8f83ff893 #xfdad5d50500d50ba #x5c46681a1a721ad0 #xa26637c4c4f3c46e #x12151c07071b0738 #xefb8415757165782 #xb70fdab8b862b8a9 #x88b4f03c3ccc3cfd #x5133956262f76237 #x7093abe3e348e34b #x8a4207c8c8cfc80e #xcf638aacac26ac09 #xf1a35552520752aa #x45218d6464e96407 #x6070401010501080 #xda0a67d0d0b7d0ce #xec3543d9d99ad986 #x6a794c13135f1398 #x2824300c0c3c0c60 #x6c7e4812125a1290 #xf6dfa429298d2955 #xfbaa5951510851b2 #xb108deb9b967b9a1 #x98571bcfcfd4cf36 #xce187fd6d6a9d6fe #x3744d17373a273bf #x09840e8d8d838d1c #x21a03e8181bf817c #xe5b14d545419549a #xba7a27c0c0e7c04e #x54b993eded7eed3b #xb9f7254e4e6b4e4a #x85c10d444449441a #xf552a6a7a701a751 #xfcd6a82a2a822a4d #x39bc2e8585ab855c #xdefb942525b12535 #x6e88bfe6e659e663 #x864c0fcacac5ca1e #x1569ed7c7c917cc7 #x1d96168b8b9d8b2c #xe9bf45565613568a #x27a73a8080ba8074) (#x501fceced1ce3e9e #x06d6bbbb6dbbb1bd #xab8bebeb60eb0b40 #xd9729292e092e44b #xac8feaea65ea0346 #x4b0bcbcbc0cb1680 #x794c13135f13986a #x7d23c1c1e2c146bc #xa583e9e96ae91b4c #xa6e83a3ad23acd9c #x187fd6d6a9d6fece #x39f2b2b240b2f98b #x046fd2d2bdd2ded6 #xd77a9090ea90f447 #x655c17174b17b872 #xd2c7f8f83ff8932a #xd315424257422a91 #x6b5415154115a87e #xbf45565613568ae9 #x2beab4b45eb4c99f #x26896565ec650f43 #x54701c1c6c1ce048 #x9f1a888892883417 #xd411434352432297 #x6133c5c5f6c566a4 #x896d5c5c315cdad5 #x82d83636ee36adb4 #x01d2baba68bab9bb #xf1f3f5f506f5fb04 #xb8415757165782ef #x28816767e6671f4f #x840e8d8d838d1c09 #x97c43131f53195a6 #xf8fff6f609f6e30e #x218d6464e9640745 #x957d58582558facd #xfd429e9edc9e8463 #xf6f7f4f403f4f302 #xee882222aa220dcc #x7192aaaa38aa39db #x56c97575bc758f23 #x2d3c0f0f330f7822 #x0e0802020a02100c #x30feb1b14fb1e181 #x275bdfdf84dfb6f8 #x1ea96d6dc46d4f73 #x44d17373a273bf37 #xfe294d4d644d52b3 #x69ed7c7c917cc715 #xf2982626be262dd4 #xcab82e2e962e6de4 #xfffbf7f70cf7eb08 #x3820080828084030 #x8e695d5d345dd2d3 #xc10d444449441a85 #xbaf83e3ec63eed84 #xfa469f9fd99f8c65 #x6c5014144414a078 #x4207c8c8cfc80e8a #x6d82aeae2cae19c3 #xb14d545419549ae5 #x7040101050108060 #x3247d8d89fd88eea #x13cabcbc76bc89af #x46681a1a721ad05c #x0cb16b6bda6b7f67 #x02b96969d0696f6b #xe3ebf3f318f3cb10 #x14cebdbd73bd81a9 #x99cc3333ff3385aa #x7696abab3dab31dd #xdccffafa35fa8326 #x0d63d1d1b2d1c6dc #xe6569b9bcd9bac7d #x05bd6868d568676d #xf7254e4e6b4e4ab9 #x625816164e16b074 #xcc6e9595fb95dc59 #xd07e9191ef91fc41 #xb09feeee71ee235e #xf92d4c4c614c5ab5 #x34916363f2633f57 #x8d028e8e8c8e0403 #x9c715b5b2a5be2c7 #x5e17ccccdbcc2e92 #xb4f03c3ccc3cfd88 #x4f6419197d19c856 #x40bea1a11fa161e1 #xa03e8181bf817c21 #xe2394949704972ab #x7cf17b7b8a7bff07 #x3543d9d99ad986ec #x10a16f6fce6f5f7f #x85dc3737eb37a5b2 #x3d9d6060fd60275d #x4c0fcacac5ca1e86 #x8fbbe7e75ce76b68 #xd1ac2b2b872b45fa #xe53d484875487aad #xc9d3fdfd2efdbb34 #xc5629696f496c453 #xc60945454c451283 #xced7fcfc2bfcb332 #xda1941415841329b #x7e4812125a12906c #x23340d0d390d682e #x72f979798079ef0b #x81b3e5e556e57b64 #x981e898997893c11 #x830a8c8c868c140f #x93abe3e348e34b70 #xe0802020a0201dc0 #x90c03030f0309da0 #x2e57dcdc8bdcaef2 #x22e6b7b751b7d195 #x19ad6c6cc16c4775 #xeb354a4a7f4a6aa1 #x2ceeb5b55bb5c199 #xbdfc3f3fc33fe582 #xc2669797f197cc55 #x1677d4d4a3d4eec2 #x33956262f7623751 #xc3b42d2d992d75ee #x121806061e063014 #x5baaa4a40ea449ff #x5caea5a50ba541f9 #xae368383b5836c2d #x80615f5f3e5fc2df #xd6a82a2a822a4dfc #x3c4fdada95da9ee6 #x4503c9c9cac9068c #x0000000000000000 #x67e57e7e9b7ed719 #x49b2a2a210a279eb #xb64955551c5592e3 #x1ac6bfbf79bf91a5 #x7744111155118866 #x1173d5d5a6d5e6c4 #xf34a9c9cd69c946f #x571bcfcfd4cf3698 #x2a380e0e360e7024 #x36280a0a220a503c #xb3f43d3dc93df58e #xaa5951510851b2fb #x6ee97d7d947dcf13 #xde769393e593ec4d #x416c1b1b771bd85a #xc0dffefe21fea33e #x6637c4c4f3c46ea2 #xc80147474647028f #x3f2409092d094836 #xb5228686a4864433 #x312c0b0b270b583a #x8a068f8f898f0c05 #xf44e9d9dd39d9c69 #x0bb56a6adf6a7761 #x151c07071b073812 #x08deb9b967b9a1b1 #x37fab0b04ab0e987 #xef5a9898c298b477 #x486018187818c050 #x9ec83232fa328dac #x4ad97171a871af3b #xec314b4b7a4b62a7 #xb79befef74ef2b58 #xa1ec3b3bd73bc59a #x4ddd7070ad70a73d #x47baa0a01aa069e7 #x86b7e4e453e47362 #xdd1d40405d403a9d #xc7dbffff24ffab38 #x732bc3c3e8c356b0 #x789ea9a937a921d1 #x88bfe6e659e6636e #x75fd78788578e70d #xd5c3f9f93af99b2c #x96168b8b9d8b2c1d #xcf05464643460a89 #xa73a8080ba807427 #x5a781e1e661ef044 #xa8e03838d838dd90 #x9da3e1e142e15b7c #x0fdab8b862b8a9b7 #x7f9aa8a832a829d7 #x9aa7e0e047e0537a #x24300c0c3c0c6028 #xe98c2323af2305ca #x5fc57676b3769729 #x53741d1d691de84e #xfb942525b12535de #xfc902424b4243dd8 #x1b1405051105281e #xede3f1f112f1db1c #x17a56e6ecb6e5779 #xcb6a9494fe94d45f #xd8a0282888285df0 #xe1529a9ac89aa47b #xbb2a8484ae84543f #xa287e8e86fe8134a #x4eb6a3a315a371ed #xf0214f4f6e4f42bf #x58c17777b6779f2f #x036bd3d3b8d3d6d0 #xbc2e8585ab855c39 #x94afe2e24de24376 #xa35552520752aaf1 #xe4eff2f21df2c316 #xa9328282b082642b #xad5d50500d50bafd #x7bf57a7a8f7af701 #xcdbc2f2f932f65e2 #x51cd7474b9748725 #xa45153530253a2f7 #x3ef6b3b345b3f18d #x3a996161f8612f5b #x6a86afaf29af11c5 #xafe43939dd39d596 #x8bd43535e135b5be #x205fdede81debefe #x5913cdcddecd2694 #x5d7c1f1f631ff842 #xe85e9999c799bc71 #x638aacac26ac09cf #x648eadad23ad01c9 #x43d57272a772b731 #xc4b02c2c9c2c7de8 #x2953dddd8edda6f4 #x0a67d0d0b7d0ceda #xb2268787a1874c35 #x1dc2bebe7cbe99a3 #x87655e5e3b5ecad9 #x55a2a6a604a659f3 #xbe97ecec7bec3352 #x1c10040414042018 #x683fc6c6f9c67eae #x090c03030f03180a #x8cd03434e434bdb8 #xdbcbfbfb30fb8b20 #x3b4bdbdb90db96e0 #x927959592059f2cb #x25e2b6b654b6d993 #x742fc2c2edc25eb6 #x0704010105010806 #xeae7f0f017f0d31a #x9b755a5a2f5aeac1 #xb993eded7eed3b54 #x52a6a7a701a751f5 #x2f856666e3661749 #xe7842121a52115c6 #x60e17f7f9e7fdf1f #x91128a8a988a241b #xf59c2727bb2725d2 #x6f3bc7c7fcc776a8 #x7a27c0c0e7c04eba #xdfa429298d2955f6 #x1f7bd7d7acd7f6c8) (#x769393e593ec4dde #x43d9d99ad986ec35 #x529a9ac89aa47be1 #xeeb5b55bb5c1992c #x5a9898c298b477ef #x882222aa220dccee #x0945454c451283c6 #xd7fcfc2bfcb332ce #xd2baba68bab9bb01 #xb56a6adf6a77610b #x5bdfdf84dfb6f827 #x0802020a02100c0e #x469f9fd99f8c65fa #x57dcdc8bdcaef22e #x5951510851b2fbaa #x7959592059f2cb92 #x354a4a7f4a6aa1eb #x5c17174b17b87265 #xac2b2b872b45fad1 #x2fc2c2edc25eb674 #x6a9494fe94d45fcb #xf7f4f403f4f302f6 #xd6bbbb6dbbb1bd06 #xb6a3a315a371ed4e #x956262f762375133 #xb7e4e453e4736286 #xd97171a871af3b4a #x77d4d4a3d4eec216 #x13cdcddecd269459 #xdd7070ad70a73d4d #x5816164e16b07462 #xa3e1e142e15b7c9d #x394949704972abe2 #xf03c3ccc3cfd88b4 #x27c0c0e7c04eba7a #x47d8d89fd88eea32 #x6d5c5c315cdad589 #x569b9bcd9bac7de6 #x8eadad23ad01c964 #x2e8585ab855c39bc #x5153530253a2f7a4 #xbea1a11fa161e140 #xf57a7a8f7af7017b #x07c8c8cfc80e8a42 #xb42d2d992d75eec3 #xa7e0e047e0537a9a #x63d1d1b2d1c6dc0d #xd57272a772b73143 #xa2a6a604a659f355 #xb02c2c9c2c7de8c4 #x37c4c4f3c46ea266 #xabe3e348e34b7093 #xc57676b37697295f #xfd78788578e70d75 #xe6b7b751b7d19522 #xeab4b45eb4c99f2b #x2409092d0948363f #xec3b3bd73bc59aa1 #x380e0e360e70242a #x1941415841329bda #x2d4c4c614c5ab5f9 #x5fdede81debefe20 #xf2b2b240b2f98b39 #x7a9090ea90f447d7 #x942525b12535defb #xaea5a50ba541f95c #x7bd7d7acd7f6c81f #x0c03030f03180a09 #x4411115511886677 #x0000000000000000 #x2bc3c3e8c356b073 #xb82e2e962e6de4ca #x729292e092e44bd9 #x9befef74ef2b58b7 #x254e4e6b4e4ab9f7 #x4812125a12906c7e #x4e9d9dd39d9c69f4 #xe97d7d947dcf136e #x0bcbcbc0cb16804b #xd43535e135b5be8b #x4010105010806070 #x73d5d5a6d5e6c411 #x214f4f6e4f42bff0 #x429e9edc9e8463fd #x294d4d644d52b3fe #x9ea9a937a921d178 #x4955551c5592e3b6 #x3fc6c6f9c67eae68 #x67d0d0b7d0ceda0a #xf17b7b8a7bff077c #x6018187818c05048 #x669797f197cc55c2 #x6bd3d3b8d3d6d003 #xd83636ee36adb482 #xbfe6e659e6636e88 #x3d484875487aade5 #x45565613568ae9bf #x3e8181bf817c21a0 #x068f8f898f0c058a #xc17777b6779f2f58 #x17ccccdbcc2e925e #x4a9c9cd69c946ff3 #xdeb9b967b9a1b108 #xafe2e24de2437694 #x8aacac26ac09cf63 #xdab8b862b8a9b70f #xbc2f2f932f65e2cd #x5415154115a87e6b #xaaa4a40ea449ff5b #xed7c7c917cc71569 #x4fdada95da9ee63c #xe03838d838dd90a8 #x781e1e661ef0445a #x2c0b0b270b583a31 #x1405051105281e1b #x7fd6d6a9d6fece18 #x5014144414a0786c #xa56e6ecb6e577917 #xad6c6cc16c477519 #xe57e7e9b7ed71967 #x856666e36617492f #xd3fdfd2efdbb34c9 #xfeb1b14fb1e18130 #xb3e5e556e57b6481 #x9d6060fd60275d3d #x86afaf29af11c56a #x655e5e3b5ecad987 #xcc3333ff3385aa99 #x268787a1874c35b2 #x03c9c9cac9068c45 #xe7f0f017f0d31aea #x695d5d345dd2d38e #xa96d6dc46d4f731e #xfc3f3fc33fe582bd #x1a8888928834179f #x0e8d8d838d1c0984 #x3bc7c7fcc776a86f #xfbf7f70cf7eb08ff #x741d1d691de84e53 #x83e9e96ae91b4ca5 #x97ecec7bec3352be #x93eded7eed3b54b9 #x3a8080ba807427a7 #xa429298d2955f6df #x9c2727bb2725d2f5 #x1bcfcfd4cf369857 #x5e9999c799bc71e8 #x9aa8a832a829d77f #x5d50500d50bafdad #x3c0f0f330f78222d #xdc3737eb37a5b285 #x902424b4243dd8fc #xa0282888285df0d8 #xc03030f0309da090 #x6e9595fb95dc59cc #x6fd2d2bdd2ded604 #xf83e3ec63eed84ba #x715b5b2a5be2c79c #x1d40405d403a9ddd #x368383b5836c2dae #xf6b3b345b3f18d3e #xb96969d0696f6b02 #x415757165782efb8 #x7c1f1f631ff8425d #x1c07071b07381215 #x701c1c6c1ce04854 #x128a8a988a241b91 #xcabcbc76bc89af13 #x802020a0201dc0e0 #x8bebeb60eb0b40ab #x1fceced1ce3e9e50 #x028e8e8c8e04038d #x96abab3dab31dd76 #x9feeee71ee235eb0 #xc43131f53195a697 #xb2a2a210a279eb49 #xd17373a273bf3744 #xc3f9f93af99b2cd5 #x0fcacac5ca1e864c #xe83a3ad23acd9ca6 #x681a1a721ad05c46 #xcbfbfb30fb8b20db #x340d0d390d682e23 #x23c1c1e2c146bc7d #xdffefe21fea33ec0 #xcffafa35fa8326dc #xeff2f21df2c316e4 #xa16f6fce6f5f7f10 #xcebdbd73bd81a914 #x629696f496c453c5 #x53dddd8edda6f429 #x11434352432297d4 #x5552520752aaf1a3 #xe2b6b654b6d99325 #x2008082808403038 #xebf3f318f3cb10e3 #x82aeae2cae19c36d #xc2bebe7cbe99a31d #x6419197d19c8564f #x1e898997893c1198 #xc83232fa328dac9e #x982626be262dd4f2 #xfab0b04ab0e98737 #x8feaea65ea0346ac #x314b4b7a4b62a7ec #x8d6464e964074521 #x2a8484ae84543fbb #x328282b082642ba9 #xb16b6bda6b7f670c #xf3f5f506f5fb04f1 #xf979798079ef0b72 #xc6bfbf79bf91a51a #x0401010501080607 #x615f5f3e5fc2df80 #xc97575bc758f2356 #x916363f2633f5734 #x6c1b1b771bd85a41 #x8c2323af2305cae9 #xf43d3dc93df58eb3 #xbd6868d568676d05 #xa82a2a822a4dfcd6 #x896565ec650f4326 #x87e8e86fe8134aa2 #x7e9191ef91fc41d0 #xfff6f609f6e30ef8 #xdbffff24ffab38c7 #x4c13135f13986a79 #x7d58582558facd95 #xe3f1f112f1db1ced #x0147474647028fc8 #x280a0a220a503c36 #xe17f7f9e7fdf1f60 #x33c5c5f6c566a461 #xa6a7a701a751f552 #xbbe7e75ce76b688f #x996161f8612f5b3a #x755a5a2f5aeac19b #x1806061e06301412 #x05464643460a89cf #x0d444449441a85c1 #x15424257422a91d3 #x100404140420181c #xbaa0a01aa069e747 #x4bdbdb90db96e03b #xe43939dd39d596af #x228686a4864433b5 #x4d545419549ae5b1 #x92aaaa38aa39db71 #x0a8c8c868c140f83 #xd03434e434bdb88c #x842121a52115c6e7 #x168b8b9d8b2c1d96 #xc7f8f83ff8932ad2 #x300c0c3c0c602824 #xcd7474b974872551 #x816767e6671f4f28) (#x6868d568676d05bd #x8d8d838d1c09840e #xcacac5ca1e864c0f #x4d4d644d52b3fe29 #x7373a273bf3744d1 #x4b4b7a4b62a7ec31 #x4e4e6b4e4ab9f725 #x2a2a822a4dfcd6a8 #xd4d4a3d4eec21677 #x52520752aaf1a355 #x2626be262dd4f298 #xb3b345b3f18d3ef6 #x545419549ae5b14d #x1e1e661ef0445a78 #x19197d19c8564f64 #x1f1f631ff8425d7c #x2222aa220dccee88 #x03030f03180a090c #x464643460a89cf05 #x3d3dc93df58eb3f4 #x2d2d992d75eec3b4 #x4a4a7f4a6aa1eb35 #x53530253a2f7a451 #x8383b5836c2dae36 #x13135f13986a794c #x8a8a988a241b9112 #xb7b751b7d19522e6 #xd5d5a6d5e6c41173 #x2525b12535defb94 #x79798079ef0b72f9 #xf5f506f5fb04f1f3 #xbdbd73bd81a914ce #x58582558facd957d #x2f2f932f65e2cdbc #x0d0d390d682e2334 #x02020a02100c0e08 #xeded7eed3b54b993 #x51510851b2fbaa59 #x9e9edc9e8463fd42 #x1111551188667744 #xf2f21df2c316e4ef #x3e3ec63eed84baf8 #x55551c5592e3b649 #x5e5e3b5ecad98765 #xd1d1b2d1c6dc0d63 #x16164e16b0746258 #x3c3ccc3cfd88b4f0 #x6666e36617492f85 #x7070ad70a73d4ddd #x5d5d345dd2d38e69 #xf3f318f3cb10e3eb #x45454c451283c609 #x40405d403a9ddd1d #xccccdbcc2e925e17 #xe8e86fe8134aa287 #x9494fe94d45fcb6a #x565613568ae9bf45 #x0808280840303820 #xceced1ce3e9e501f #x1a1a721ad05c4668 #x3a3ad23acd9ca6e8 #xd2d2bdd2ded6046f #xe1e142e15b7c9da3 #xdfdf84dfb6f8275b #xb5b55bb5c1992cee #x3838d838dd90a8e0 #x6e6ecb6e577917a5 #x0e0e360e70242a38 #xe5e556e57b6481b3 #xf4f403f4f302f6f7 #xf9f93af99b2cd5c3 #x8686a4864433b522 #xe9e96ae91b4ca583 #x4f4f6e4f42bff021 #xd6d6a9d6fece187f #x8585ab855c39bc2e #x2323af2305cae98c #xcfcfd4cf3698571b #x3232fa328dac9ec8 #x9999c799bc71e85e #x3131f53195a697c4 #x14144414a0786c50 #xaeae2cae19c36d82 #xeeee71ee235eb09f #xc8c8cfc80e8a4207 #x484875487aade53d #xd3d3b8d3d6d0036b #x3030f0309da090c0 #xa1a11fa161e140be #x9292e092e44bd972 #x41415841329bda19 #xb1b14fb1e18130fe #x18187818c0504860 #xc4c4f3c46ea26637 #x2c2c9c2c7de8c4b0 #x7171a871af3b4ad9 #x7272a772b73143d5 #x444449441a85c10d #x15154115a87e6b54 #xfdfd2efdbb34c9d3 #x3737eb37a5b285dc #xbebe7cbe99a31dc2 #x5f5f3e5fc2df8061 #xaaaa38aa39db7192 #x9b9bcd9bac7de656 #x8888928834179f1a #xd8d89fd88eea3247 #xabab3dab31dd7696 #x898997893c11981e #x9c9cd69c946ff34a #xfafa35fa8326dccf #x6060fd60275d3d9d #xeaea65ea0346ac8f #xbcbc76bc89af13ca #x6262f76237513395 #x0c0c3c0c60282430 #x2424b4243dd8fc90 #xa6a604a659f355a2 #xa8a832a829d77f9a #xecec7bec3352be97 #x6767e6671f4f2881 #x2020a0201dc0e080 #xdbdb90db96e03b4b #x7c7c917cc71569ed #x282888285df0d8a0 #xdddd8edda6f42953 #xacac26ac09cf638a #x5b5b2a5be2c79c71 #x3434e434bdb88cd0 #x7e7e9b7ed71967e5 #x1010501080607040 #xf1f112f1db1cede3 #x7b7b8a7bff077cf1 #x8f8f898f0c058a06 #x6363f2633f573491 #xa0a01aa069e747ba #x05051105281e1b14 #x9a9ac89aa47be152 #x434352432297d411 #x7777b6779f2f58c1 #x2121a52115c6e784 #xbfbf79bf91a51ac6 #x2727bb2725d2f59c #x09092d0948363f24 #xc3c3e8c356b0732b #x9f9fd99f8c65fa46 #xb6b654b6d99325e2 #xd7d7acd7f6c81f7b #x29298d2955f6dfa4 #xc2c2edc25eb6742f #xebeb60eb0b40ab8b #xc0c0e7c04eba7a27 #xa4a40ea449ff5baa #x8b8b9d8b2c1d9616 #x8c8c868c140f830a #x1d1d691de84e5374 #xfbfb30fb8b20dbcb #xffff24ffab38c7db #xc1c1e2c146bc7d23 #xb2b240b2f98b39f2 #x9797f197cc55c266 #x2e2e962e6de4cab8 #xf8f83ff8932ad2c7 #x6565ec650f432689 #xf6f609f6e30ef8ff #x7575bc758f2356c9 #x07071b073812151c #x0404140420181c10 #x4949704972abe239 #x3333ff3385aa99cc #xe4e453e4736286b7 #xd9d99ad986ec3543 #xb9b967b9a1b108de #xd0d0b7d0ceda0a67 #x424257422a91d315 #xc7c7fcc776a86f3b #x6c6cc16c477519ad #x9090ea90f447d77a #x0000000000000000 #x8e8e8c8e04038d02 #x6f6fce6f5f7f10a1 #x50500d50bafdad5d #x0101050108060704 #xc5c5f6c566a46133 #xdada95da9ee63c4f #x47474647028fc801 #x3f3fc33fe582bdfc #xcdcddecd26945913 #x6969d0696f6b02b9 #xa2a210a279eb49b2 #xe2e24de2437694af #x7a7a8f7af7017bf5 #xa7a701a751f552a6 #xc6c6f9c67eae683f #x9393e593ec4dde76 #x0f0f330f78222d3c #x0a0a220a503c3628 #x06061e0630141218 #xe6e659e6636e88bf #x2b2b872b45fad1ac #x9696f496c453c562 #xa3a315a371ed4eb6 #x1c1c6c1ce0485470 #xafaf29af11c56a86 #x6a6adf6a77610bb5 #x12125a12906c7e48 #x8484ae84543fbb2a #x3939dd39d596afe4 #xe7e75ce76b688fbb #xb0b04ab0e98737fa #x8282b082642ba932 #xf7f70cf7eb08fffb #xfefe21fea33ec0df #x9d9dd39d9c69f44e #x8787a1874c35b226 #x5c5c315cdad5896d #x8181bf817c21a03e #x3535e135b5be8bd4 #xdede81debefe205f #xb4b45eb4c99f2bea #xa5a50ba541f95cae #xfcfc2bfcb332ced7 #x8080ba807427a73a #xefef74ef2b58b79b #xcbcbc0cb16804b0b #xbbbb6dbbb1bd06d6 #x6b6bda6b7f670cb1 #x7676b37697295fc5 #xbaba68bab9bb01d2 #x5a5a2f5aeac19b75 #x7d7d947dcf136ee9 #x78788578e70d75fd #x0b0b270b583a312c #x9595fb95dc59cc6e #xe3e348e34b7093ab #xadad23ad01c9648e #x7474b974872551cd #x9898c298b477ef5a #x3b3bd73bc59aa1ec #x3636ee36adb482d8 #x6464e9640745218d #x6d6dc46d4f731ea9 #xdcdc8bdcaef22e57 #xf0f017f0d31aeae7 #x59592059f2cb9279 #xa9a937a921d1789e #x4c4c614c5ab5f92d #x17174b17b872655c #x7f7f9e7fdf1f60e1 #x9191ef91fc41d07e #xb8b862b8a9b70fda #xc9c9cac9068c4503 #x5757165782efb841 #x1b1b771bd85a416c #xe0e047e0537a9aa7 #x6161f8612f5b3a99)))) (defconst +kalyna-it+ (make-array '(8 256) :element-type '(unsigned-byte 64) :initial-contents '((#x7826942b9f5f8a9a #x210f43c934970c53 #x5f028fdd9d0551b8 #x14facd82b494c83b #x2b72ab886edd68c0 #xa6a87e5bff19d9b4 #xa29ae571db6443ea #x039b2c911be8e5b6 #xd9275dcb5fd32cc6 #x10c856a890e95265 #x7d96e085b27ab85d #x31c71561a47e5e36 #x74702455f3d83978 #xe8e048aafbad72f0 #x9b39db4437e03460 #x75f2cbd1fa8091e1 #x1ab5bee9caa336f6 #x8395a6b8eff34fb9 #x64b872fd63316b1d #xe1068c7aba0ff3d5 #xeecb1095cd60a581 #xbc1dc0b235baef42 #xf04c355623be0929 #xb252b3d94b8d118f #x18ac7dfcd8137bd9 #xbbb477090a2f90aa #x8625d216c2d67d7e #x66a1b1e871812632 #x6f4775383023a717 #x92df1f947642b545 #xe962a72ef2f5da69 #x8bf18deca7096605 #xc86de4e7c662d63a #xaafece25939e6a56 #x5c99a34c86edb40e #x52d6d027f8da4ac3 #x6b75ee12145e3d49 #x54fd8818ce179db2 #xa3180af5d23ceb73 #xbe0403a7270aa26d #xfe03463d5d89f7e4 #xf1cedad22ae6a1b0 #xd143769f1729057a #xc7a07808b10d806e #xfc1a85284f39bacb #xa4b1bd4eeda9949b #x0bff07c55312cc0a #xef49ff11c4380d18 #xc392e32295701a30 #x7f8f2390a0caf572 #x62932ac255fcbc6c #xc9ef0b63cf3a7ea3 #xf9aaf186621c880c #x818c65adfd430296 #x325c39f0bf96bb80 #x0c56b07e6c87b3e2 #x4bf8425f29919983 #xb5fb046274186e67 #x462c1da54c4e82f8 #x90c6dc8164f2f86a #xf8281e026b442095 #x6af701961d0695d0 #x5766a489d5ff7804 #xf3d719c73856ec9f #xad57799eac0b15be #x1b37516dc3fb9e6f #xc009cfb38e98ff86 #x9576a82f49d7caad #xe6af3bc1859a8c3d #x208dac4d3dcfa4ca #x8ddad5d391c4b174 #x8e41f9428a2c54c2 #x6cdc59a92bcb42a1 #xe53417509e72698b #xd0c1991b1e71ade3 #x8217493ce6abe720 #xd4f302313a0c37bd #x5e806059945df921 #x73d993eecc4d4690 #xf5fc41f80e9b3bee #x13537a398b01b7d3 #x53543fa3f182e25a #x2d59f3b75810bfb1 #x35f58e4b8003c468 #x886aa17dbce183b3 #x4c51f5e41604e66b #x98a2f7d52c08d1d6 #xa101c9e0c08ca65c #x4007459a7a835589 #xcc5f7fcde21f4c64 #xa965e2b488768fe0 #x12d195bd82591f4a #x2f4030a24aa0f29e #x56e44b0ddca7d09d #x914433056daa50f3 #x37ec4d5e92b38947 #xe31f4f6fa8bfbefa #x50cf1332ea6a07ec #x6d5eb62d2293ea38 #x09e6c4d041a28125 #x8fc316c68374fc5b #x421e868f683318a6 #xe08463feb3575b4c #x3821d1b1e5dcdf13 #xed503c04d6884037 #xd35ab58a05994855 #x976f6b3a5b678782 #x6ec59abc397b0f8e #x5929d7e2abc886c9 #xa53352cae4f13c02 #x89e84ef9b5b92b2a #x1761e113af7c2d8d #x28e9871975358d76 #xdc97296572f61e01 #x67235e6c78d98eab #x3d91a51fc8f9edd4 #x68eec2830fb6d8ff #xfbb3329370acc523 #x062b583f36cdd771 #x15782206bdcc60a2 #x16e30e97a6248514 #x79a47baf96072203 #xf7e582ed1c2b76c1 #xde8eea706046532e #xaf4eba8bbebb5891 #x08642b5448fa29bc #x24bf376719b23e94 #x231680dc2627417c #x0dd45ffa65df1b7b #x1d1c0952f536491e #xff81a9b954d15f7d #x992018512550794f #x71c050fbdefd0bbf #xc18b203787c0571f #x253dd8e310ea960d #xeb7b643be0459746 #x0219c31512b04d2f #xc43b5499aae565d8 #xeaf98bbfe91d3fdf #x3a3812a4f76c923c #x4dd31a601f5c4ef2 #xa8e70d30812e2779 #x800e8a29f41baa0f #x1c9ee6d6fc6ee187 #x5d1b4cc88fb51c97 #x610806534e1459da #xf255f643310e4406 #xd2d85a0e0cc1e0cc #x0182ef840958a899 #x7e0dcc14a9925deb #x653a9d796a69c384 #x4e4836f104b4ab44 #x4fcad9750dec03dd #xcddd9049eb47e4fd #x0e4f736b7e37fecd #x4185aa1e73dbfd10 #x725b7c6ac515ee09 #x8a736268ae51ce9c #xc5b9bb1da3bdcd41 #x7bbdb8ba84b76f2c #xdabc715a443bc970 #xe29da0eba1e71663 #x935df0107f1a1ddc #x608ae9d7474cf143 #xd571edb533549f24 #xa0832664c9d40ec5 #xfd986aac46611252 #x4435deb05efecfd7 #x0000000000000000 #x2cdb1c3351481728 #x94f447ab408f6234 #x45b7313457a6674e #xb82f5b9811c7751c #x8c583a57989c19ed #xdd15c6e17baeb698 #x696c2d0706ee7066 #x3f88660ada49a0fb #xf47eae7c07c39377 #x05b074ae2d2532c7 #xb3d05c5d42d5b916 #x39a33e35ec84778a #x0fcd9cef776f5654 #xacd5961aa553bd27 #x5b3014f7b978cbe6 #x347761cf895b6cf1 #xc622978cb85528f7 #xb7e2c77766a82348 #x77eb08c4e830dcce #xb9adb41c189fdd85 #x114ab92c99b1fafc #x26a6f4720b0273bb #x1e8725c3eedeaca8 #x2af0440c6785c059 #x04329b2a247d9a5e #xd7682ea021e4d20b #x7c140f01bb2210c4 #x96ed84be523f2f1b #xca7427f2d4d29b15 #x47aef22145162a61 #xa72a91dff641712d #x5ab2fb73b020637f #xcbf6c876dd8a338c #x6311c5465ca414f5 #x07a9b7bb3f957fe8 #xe72dd4458cc224a4 #x9d12837b012de311 #x843c1103d0663051 #x0a7de8415a4a6493 #xd6eac12428bc7a92 #x9c906cff08754b88 #x7042bf7fd7a5a326 #xbd9f2f363ce247db #xb66028f36ff08bd1 #x192e9278d14bd340 #x9f0b406e139dae3e #x1f05ca47e7860431 #x85befe87d93e98c8 #x439c690b616bb03f #xba36988d03773833 #x87a73d92cb8ed5e7 #xaecc550fb7e3f008 #xc2100ca69c28b2a9 #x9abb34c03eb89cf9 #x49e1814a3b21d4ac #xecd2d380dfd0e8ae #x296b689d7c6d25ef #x3c134a9bc1a1454d #xcfc4535cf9f7a9d2 #x557f679cc74f352b #xb479ebe67d40c6fe #xf6676d691573de58 #x9e89afea1ac506a7 #xd8a5b24f568b845f #x48636ece32797c35 #xdf0c05f4691efbb7 #xe4b6f8d4972ac112 #xfa31dd1779f46dba #xbf86ec232e520af4 #x3e0a898ed3110862 #x7a3f573e8defc7b5 #x27241bf6025adb22 #x58ab3866a2902e50 #x3bbafd20fe343aa5 #x3045fae5ad26f6af #x2ec2df2643f85a07 #x22946f582f7fe9e5 #x366ea2da9beb21de #x4a7aaddb20c9311a #xb1c99f485065f439 #xb04b70cc593d5ca0 #xab7c21a19ac6c2cf #x33ded674b6ce1319 #xce46bcd8f0af014b #xdb3e9ede4d6361e9 #x7669e740e1687457 #x514dfcb6e332af75) (#x1f4f6fa8bfbefae3 #xf0440c6785c0592a #x1dc0b235baef42bc #x22978cb85528f7c6 #xcedad22ae6a1b0f1 #x180af5d23ceb73a3 #x946f582f7fe9e522 #xe44b0ddca7d09d56 #x906cff08754b889c #x9f2f363ce247dbbd #xa1b1e87181263266 #x21d1b1e5dcdf1338 #x31dd1779f46dbafa #x4b70cc593d5ca0b0 #xd719c73856ec9ff3 #x8725c3eedeaca81e #x71edb533549f24d5 #x12837b012de3119d #x3dd8e310ea960d25 #x29d7e2abc886c959 #xb477090a2f90aabb #x45fae5ad26f6af30 #x9ee6d6fc6ee1871c #xbefe87d93e98c885 #xe30e97a624851416 #xd6d027f8da4ac352 #xcc550fb7e3f008ae #x5ab58a05994855d3 #x806059945df9215e #x82ef840958a89901 #x4ab92c99b1fafc11 #x281e026b442095f8 #x62a72ef2f5da69e9 #x8b203787c0571fc1 #x4f736b7e37fecd0e #xab3866a2902e5058 #x6ea2da9beb21de36 #xf447ab408f623494 #x235e6c78d98eab67 #x11c5465ca414f563 #xd31a601f5c4ef24d #xa2f7d52c08d1d698 #x85aa1e73dbfd1041 #xdc59a92bcb42a16c #x59f3b75810bfb12d #xe2c77766a82348b7 #xb9bb1da3bdcd41c5 #x96e085b27ab85d7d #x99a34c86edb40e5c #x66a489d5ff780457 #x95a6b8eff34fb983 #x7f679cc74f352b55 #x7de8415a4a64930a #x9b2c911be8e5b603 #x4836f104b4ab444e #xdb1c33514817282c #x15c6e17baeb698dd #xed84be523f2f1b96 #xe1814a3b21d4ac49 #x503c04d6884037ed #x4c355623be0929f0 #x3b5499aae565d8c4 #x0a898ed31108623e #xb074ae2d2532c705 #x028fdd9d0551b85f #xf58e4b8003c46835 #x3352cae4f13c02a5 #x6c2d0706ee706669 #x7c21a19ac6c2cfab #x19c31512b04d2f02 #xa6f4720b0273bb26 #x05ca47e78604311f #x46bcd8f0af014bce #x1e868f683318a642 #x5c39f0bf96bb8032 #x79ebe67d40c6feb4 #xff07c55312cc0a0b #xaef22145162a6147 #xc1991b1e71ade3d0 #xded674b6ce131933 #x7aaddb20c9311a4a #x4dfcb6e332af7551 #x6de4e7c662d63ac8 #xbf376719b23e9424 #x07459a7a83558940 #xac7dfcd8137bd918 #xdf1f947642b54592 #x17493ce6abe72082 #xfc41f80e9b3beef5 #xe70d30812e2779a8 #xd993eecc4d469073 #x65e2b488768fe0a9 #xd2d380dfd0e8aeec #xe6c4d041a2812509 #x068c7aba0ff3d5e1 #x51f5e41604e66b4c #x41f9428a2c54c28e #x537a398b01b7d313 #x782206bdcc60a215 #x89afea1ac506a79e #x8ae9d7474cf14360 #xf6c876dd8a338ccb #x43769f1729057ad1 #x8dac4d3dcfa4ca20 #xb7313457a6674e45 #x2018512550794f99 #xbb34c03eb89cf99a #xbafd20fe343aa53b #x03463d5d89f7e4fe #x42bf7fd7a5a32670 #x3f573e8defc7b57a #xadb41c189fdd85b9 #xcad9750dec03dd4f #x0f43c934970c5321 #x2f5b9811c7751cb8 #xd85a0e0cc1e0ccd2 #xe048aafbad72f0e8 #xf18deca70966058b #xdd9049eb47e4fdcd #xa87e5bff19d9b4a6 #x5df0107f1a1ddc93 #xd195bd82591f4a12 #x0c05f4691efbb7df #x8463feb3575b4ce0 #x55f643310e4406f2 #xb6f8d4972ac112e4 #x4030a24aa0f29e2f #xfd8818ce179db254 #x3c1103d066305184 #x682ea021e4d20bd7 #x81a9b954d15f7dff #x275dcb5fd32cc6d9 #xfacd82b494c83b14 #x4433056daa50f391 #xe9871975358d7628 #xeac12428bc7a92d6 #x1a85284f39bacbfc #xf8425f299199834b #x676d691573de58f6 #xd05c5d42d5b916b3 #x8eea706046532ede #xfb046274186e67b5 #x134a9bc1a1454d3c #x57799eac0b15bead #x241bf6025adb2227 #x72ab886edd68c02b #x9ae571db6443eaa2 #xc050fbdefd0bbf71 #xa5b24f568b845fd8 #xe84ef9b5b92b2a89 #x6f6b3a5b67878297 #xc6dc8164f2f86a90 #x7eae7c07c39377f4 #x5eb62d2293ea386d #x8c65adfd43029681 #x2dd4458cc224a4e7 #xfece25939e6a56aa #xcd9cef776f56540f #xa33e35ec84778a39 #xc2df2643f85a072e #xbc715a443bc970da #xa07808b10d806ec7 #x36988d03773833ba #x1680dc2627417c23 #xcb1095cd60a581ee #xbdb8ba84b76f2c7b #x702455f3d8397874 #x35deb05efecfd744 #x8f2390a0caf5727f #xb1bd4eeda9949ba4 #x39db4437e034609b #xe582ed1c2b76c1f7 #xc4535cf9f7a9d2cf #xb2fb73b020637f5a #x583a57989c19ed8c #x25d216c2d67d7e86 #x0806534e1459da61 #x6b689d7c6d25ef29 #x0dcc14a9925deb7e #xc99f485065f439b1 #xa9b7bb3f957fe807 #x2a91dff641712da7 #x1c0952f536491e1d #x75ee12145e3d496b #xf98bbfe91d3fdfea #x92e32295701a30c3 #x3e9ede4d6361e9db #x76a82f49d7caad95 #x9da0eba1e71663e2 #x09cfb38e98ff86c0 #x9c690b616bb03f43 #xdad5d391c4b1748d #x3812a4f76c923c3a #x5f7fcde21f4c64cc #x6aa17dbce183b388 #xeec2830fb6d8ff68 #x736268ae51ce9c8a #xa47baf9607220379 #x543fa3f182e25a53 #x4eba8bbebb5891af #x2e9278d14bd34019 #x69e740e168745776 #x37516dc3fb9e6f1b #xb3329370acc523fb #x3a9d796a69c38465 #x7761cf895b6cf134 #x0000000000000000 #x88660ada49a0fb3f #xb5bee9caa336f61a #x5b7c6ac515ee0972 #x52b3d94b8d118fb2 #x329b2a247d9a5e04 #x0e8a29f41baa0f80 #x642b5448fa29bc08 #x7b643be0459746eb #xd45ffa65df1b7b0d #xeb08c4e830dcce77 #xf2cbd1fa8091e175 #xf302313a0c37bdd4 #x91a51fc8f9edd43d #xef0b63cf3a7ea3c9 #xc316c68374fc5b8f #x01c9e0c08ca65ca1 #x3417509e72698be5 #x4775383023a7176f #x636ece32797c3548 #x1b4cc88fb51c975d #x140f01bb2210c47c #x7427f2d4d29b15ca #xa73d92cb8ed5e787 #xc71561a47e5e3631 #xaaf186621c880cf9 #x6028f36ff08bd1b6 #x97296572f61e01dc #xc59abc397b0f8e6e #xec4d5e92b3894737 #xb872fd63316b1d64 #xaf3bc1859a8c3de6 #x0403a7270aa26dbe #x26942b9f5f8a9a78 #x86ec232e520af4bf #x49ff11c4380d18ef #xf701961d0695d06a #x56b07e6c87b3e20c #xd5961aa553bd27ac #x61e113af7c2d8d17 #x100ca69c28b2a9c2 #xcf1332ea6a07ec50 #xc856a890e9526510 #x2b583f36cdd77106 #x932ac255fcbc6c62 #x0b406e139dae3e9f #x832664c9d40ec5a0 #x3014f7b978cbe65b #x2c1da54c4e82f846 #x986aac46611252fd) (#x679cc74f352b557f #x376719b23e9424bf #xcc14a9925deb7e0d #xb07e6c87b3e20c56 #xa17dbce183b3886a #xee12145e3d496b75 #x406e139dae3e9f0b #x942b9f5f8a9a7826 #xb24f568b845fd8a5 #xdf2643f85a072ec2 #x8c7aba0ff3d5e106 #x0b63cf3a7ea3c9ef #x12a4f76c923c3a38 #x8bbfe91d3fdfeaf9 #x9278d14bd340192e #xca47e78604311f05 #x07c55312cc0a0bff #xcfb38e98ff86c009 #x991b1e71ade3d0c1 #x16c68374fc5b8fc3 #x39f0bf96bb80325c #x3d92cb8ed5e787a7 #xac4d3dcfa4ca208d #xfae5ad26f6af3045 #x63feb3575b4ce084 #x28f36ff08bd1b660 #xc6e17baeb698dd15 #x84be523f2f1b96ed #x3c04d6884037ed50 #xce25939e6a56aafe #xa34c86edb40e5c99 #xebe67d40c6feb479 #x27f2d4d29b15ca74 #x6d691573de58f667 #x329370acc523fbb3 #x2c911be8e5b6039b #x871975358d7628e9 #x550fb7e3f008aecc #x7e5bff19d9b4a6a8 #xf8d4972ac112e4b6 #xd1b1e5dcdf133821 #xfcb6e332af75514d #x1e026b442095f828 #x1f947642b54592df #x5e6c78d98eab6723 #x17509e72698be534 #x2ac255fcbc6c6293 #x95bd82591f4a12d1 #x799eac0b15bead57 #xf0107f1a1ddc935d #xd674b6ce131933de #xf5e41604e66b4c51 #x8818ce179db254fd #x03a7270aa26dbe04 #x1c33514817282cdb #x2f363ce247dbbd9f #xa72ef2f5da69e962 #x93eecc4d469073d9 #xb92c99b1fafc114a #x77090a2f90aabbb4 #x0ca69c28b2a9c210 #xc9e0c08ca65ca101 #x4b0ddca7d09d56e4 #x988d03773833ba36 #x06534e1459da6108 #x3a57989c19ed8c58 #x0952f536491e1d1c #x0af5d23ceb73a318 #x0d30812e2779a8e7 #xd7e2abc886c95929 #xa51fc8f9edd43d91 #x690b616bb03f439c #x516dc3fb9e6f1b37 #xa489d5ff78045766 #x52cae4f13c02a533 #x4cc88fb51c975d1b #x459a7a8355894007 #x9d796a69c384653a #x313457a6674e45b7 #x4a9bc1a1454d3c13 #x6268ae51ce9c8a73 #xfe87d93e98c885be #xff11c4380d18ef49 #x8deca70966058bf1 #xdeb05efecfd74435 #xd027f8da4ac352d6 #xf186621c880cf9aa #x43c934970c53210f #xbee9caa336f61ab5 #x56a890e9526510c8 #xe8415a4a64930a7d #xe32295701a30c392 #x3e35ec84778a39a3 #x4f6fa8bfbefae31f #x5dcb5fd32cc6d927 #x9f485065f439b1c9 #x1095cd60a581eecb #x978cb85528f7c622 #x7baf9607220379a4 #xd216c2d67d7e8625 #xe4e7c662d63ac86d #xb62d2293ea386d5e #x8a29f41baa0f800e #x5ffa65df1b7b0dd4 #x61cf895b6cf13477 #xa6b8eff34fb98395 #x814a3b21d4ac49e1 #xaddb20c9311a4a7a #x74ae2d2532c705b0 #x30a24aa0f29e2f40 #x91dff641712da72a #x9049eb47e4fdcddd #x493ce6abe7208217 #x36f104b4ab444e48 #xf22145162a6147ae #x5c5d42d5b916b3d0 #xf7d52c08d1d698a2 #x7a398b01b7d31353 #x6cff08754b889c90 #x14f7b978cbe65b30 #xc4d041a2812509e6 #xe085b27ab85d7d96 #xc0b235baef42bc1d #x868f683318a6421e #xea706046532ede8e #x4ef9b5b92b2a89e8 #xdc8164f2f86a90c6 #x2455f3d839787470 #x5499aae565d8c43b #x59a92bcb42a16cdc #xa9b954d15f7dff81 #xae7c07c39377f47e #x01961d0695d06af7 #xdb4437e034609b39 #x3bc1859a8c3de6af #xaa1e73dbfd104185 #x7dfcd8137bd918ac #x80dc2627417c2316 #xd9750dec03dd4fca #xc5465ca414f56311 #x203787c0571fc18b #xd5d391c4b1748dda #xc2830fb6d8ff68ee #xbcd8f0af014bce46 #xa0eba1e71663e29d #xfb73b020637f5ab2 #x7c6ac515ee09725b #x0000000000000000 #xc876dd8a338ccbf6 #x9cef776f56540fcd #x47ab408f623494f4 #xcbd1fa8091e175f2 #x9abc397b0f8e6ec5 #xb58a05994855d35a #x4d5e92b3894737ec #x961aa553bd27acd5 #xc31512b04d2f0219 #xe6d6fc6ee1871c9e #xe2b488768fe0a965 #xb3d94b8d118fb252 #x440c6785c0592af0 #x25c3eedeaca81e87 #x583f36cdd771062b #x2d0706ee7066696c #x425f299199834bf8 #xfd20fe343aa53bba #xf643310e4406f255 #xdad22ae6a1b0f1ce #x1da54c4e82f8462c #x355623be0929f04c #x769f1729057ad143 #xbd4eeda9949ba4b1 #xd8e310ea960d253d #x736b7e37fecd0e4f #x65adfd430296818c #xb8ba84b76f2c7bbd #x9b2a247d9a5e0432 #xc77766a82348b7e2 #x08c4e830dcce77eb #x0e97a624851416e3 #x898ed31108623e0a #xe571db6443eaa29a #x573e8defc7b57a3f #x21a19ac6c2cfab7c #x70cc593d5ca0b04b #x2664c9d40ec5a083 #x296572f61e01dc97 #x85284f39bacbfc1a #x715a443bc970dabc #xef840958a8990182 #xcd82b494c83b14fa #x48aafbad72f0e8e0 #xe9d7474cf143608a #x2390a0caf5727f8f #xb7bb3f957fe807a9 #x82ed1c2b76c1f7e5 #xbb1da3bdcd41c5b9 #x72fd63316b1d64b8 #x7808b10d806ec7a0 #x837b012de3119d12 #x689d7c6d25ef296b #x02313a0c37bdd4f3 #x1103d0663051843c #xab886edd68c02b72 #x6b3a5b678782976f #xe113af7c2d8d1761 #x6aac46611252fd98 #x50fbdefd0bbf71c0 #x2ea021e4d20bd768 #x5a0e0cc1e0ccd2d8 #x34c03eb89cf99abb #xb41c189fdd85b9ad #x9ede4d6361e9db3e #xafea1ac506a79e89 #x463d5d89f7e4fe03 #x18512550794f9920 #x41f80e9b3beef5fc #xa82f49d7caad9576 #x0f01bb2210c47c14 #xec232e520af4bf86 #x1bf6025adb222724 #xa2da9beb21de366e #xedb533549f24d571 #x643be0459746eb7b #xbf7fd7a5a3267042 #x046274186e67b5fb #x8e4b8003c46835f5 #x1332ea6a07ec50cf #xd380dfd0e8aeecd2 #x6f582f7fe9e52294 #xf9428a2c54c28e41 #x3fa3f182e25a5354 #x535cf9f7a9d2cfc4 #x660ada49a0fb3f88 #x33056daa50f39144 #x8fdd9d0551b85f02 #x19c73856ec9ff3d7 #xb1e87181263266a1 #x1561a47e5e3631c7 #xd4458cc224a4e72d #xe740e16874577669 #xc12428bc7a92d6ea #x3866a2902e5058ab #x1a601f5c4ef24dd3 #x6059945df9215e80 #x05f4691efbb7df0c #x5b9811c7751cb82f #x2b5448fa29bc0864 #xba8bbebb5891af4e #xf4720b0273bb26a6 #xdd1779f46dbafa31 #x6ece32797c354863 #x7fcde21f4c64cc5f #x2206bdcc60a21578 #x75383023a7176f47 #xf3b75810bfb12d59) (#x03d0663051843c11 #xbfe91d3fdfeaf98b #xf80e9b3beef5fc41 #xe5ad26f6af3045fa #x5a443bc970dabc71 #x7b012de3119d1283 #x82b494c83b14facd #x750dec03dd4fcad9 #x090a2f90aabbb477 #xb6e332af75514dfc #xadfd430296818c65 #xfd63316b1d64b872 #x3d5d89f7e4fe0346 #xd7474cf143608ae9 #x7e6c87b3e20c56b0 #x601f5c4ef24dd31a #x40e16874577669e7 #x4437e034609b39db #xe7c662d63ac86de4 #xaf9607220379a47b #xea1ac506a79e89af #xd8f0af014bce46bc #x7fd7a5a3267042bf #x9f1729057ad14376 #x1c189fdd85b9adb4 #x87d93e98c885befe #x57989c19ed8c583a #xa4f76c923c3a3812 #x2a247d9a5e04329b #xc03eb89cf99abb34 #xf6025adb2227241b #xa890e9526510c856 #x06bdcc60a2157822 #xc73856ec9ff3d719 #xcae4f13c02a53352 #xd6fc6ee1871c9ee6 #xf0bf96bb80325c39 #x13af7c2d8d1761e1 #x3be0459746eb7b64 #x99aae565d8c43b54 #x95cd60a581eecb10 #x68ae51ce9c8a7362 #xcde21f4c64cc5f7f #xdc2627417c231680 #x428a2c54c28e41f9 #x76dd8a338ccbf6c8 #xb8eff34fb98395a6 #xa69c28b2a9c2100c #x08b10d806ec7a078 #xc55312cc0a0bff07 #x886edd68c02b72ab #xdd9d0551b85f028f #x1e73dbfd104185aa #x911be8e5b6039b2c #x30812e2779a8e70d #x3a5b678782976f6b #x20fe343aa53bbafd #xb954d15f7dff81a9 #x9a7a835589400745 #x1fc8f9edd43d91a5 #x0e0cc1e0ccd2d85a #xbb3f957fe807a9b7 #xc3eedeaca81e8725 #x66a2902e5058ab38 #xff08754b889c906c #xfeb3575b4ce08463 #x107f1a1ddc935df0 #x25939e6a56aafece #xa92bcb42a16cdc59 #x32ea6a07ec50cf13 #x947642b54592df1f #x1779f46dbafa31dd #x5623be0929f04c35 #xf2d4d29b15ca7427 #x59945df9215e8060 #x9370acc523fbb332 #xb05efecfd74435de #x71db6443eaa29ae5 #xe2abc886c95929d7 #x458cc224a4e72dd4 #xce32797c3548636e #x1aa553bd27acd596 #x4a3b21d4ac49e181 #x284f39bacbfc1a85 #xd94b8d118fb252b3 #xb235baef42bc1dc0 #x2643f85a072ec2df #x8bbebb5891af4eba #x89d5ff78045766a4 #xeecc4d469073d993 #x0b616bb03f439c69 #xe41604e66b4c51f5 #x16c2d67d7e8625d2 #x6c78d98eab67235e #x9d7c6d25ef296b68 #x64c9d40ec5a08326 #x2ef2f5da69e962a7 #xfa65df1b7b0dd45f #x12145e3d496b75ee #xfcd8137bd918ac7d #x52f536491e1d1c09 #xe67d40c6feb479eb #x2145162a6147aef2 #x29f41baa0f800e8a #x0000000000000000 #x840958a8990182ef #xc88fb51c975d1b4c #xc68374fc5b8fc316 #x5d42d5b916b3d05c #x7dbce183b3886aa1 #x512550794f992018 #xe17baeb698dd15c6 #x43310e4406f255f6 #x6dc3fb9e6f1b3751 #x86621c880cf9aaf1 #xbc397b0f8e6ec59a #x415a4a64930a7de8 #x04d6884037ed503c #xe9caa336f61ab5be #x0ada49a0fb3f8866 #x55f3d83978747024 #x3ce6abe720821749 #xf5d23ceb73a3180a #xa24aa0f29e2f4030 #x582f7fe9e522946f #x7aba0ff3d5e1068c #x313a0c37bdd4f302 #x3787c0571fc18b20 #x5cf9f7a9d2cfc453 #xbe523f2f1b96ed84 #x85b27ab85d7d96e0 #x0706ee7066696c2d #x961d0695d06af701 #x1b1e71ade3d0c199 #xc255fcbc6c62932a #x398b01b7d313537a #xcc593d5ca0b04b70 #x5f299199834bf842 #x80dfd0e8aeecd2d3 #x9eac0b15bead5779 #xef776f56540fcd9c #x2f49d7caad9576a8 #x2c99b1fafc114ab9 #x8d03773833ba3698 #x720b0273bb26a6f4 #x18ce179db254fd88 #x8f683318a6421e86 #x4f568b845fd8a5b2 #x8ed31108623e0a89 #xd22ae6a1b0f1ceda #x74b6ce131933ded6 #x97a624851416e30e #x6e139dae3e9f0b40 #xa7270aa26dbe0403 #x5448fa29bc08642b #xe310ea960d253dd8 #x706046532ede8eea #x485065f439b1c99f #x6b7e37fecd0e4f73 #xfbdefd0bbf71c050 #xd391c4b1748ddad5 #xa021e4d20bd7682e #xab408f623494f447 #x5bff19d9b4a6a87e #xb1e5dcdf133821d1 #x026b442095f8281e #xdff641712da72a91 #x11c4380d18ef49ff #xae2d2532c705b074 #xc1859a8c3de6af3b #x4b8003c46835f58e #x92cb8ed5e787a73d #xcb5fd32cc6d9275d #x8cb85528f7c62297 #x9bc1a1454d3c134a #x056daa50f3914433 #xf4691efbb7df0c05 #xd1fa8091e175f2cb #x7c07c39377f47eae #x14a9925deb7e0dcc #xcf895b6cf1347761 #x0fb7e3f008aecc55 #x8a05994855d35ab5 #xf104b4ab444e4836 #x691573de58f6676d #x4eeda9949ba4b1bd #x2428bc7a92d6eac1 #xb75810bfb12d59f3 #x63cf3a7ea3c9ef0b #x6274186e67b5fb04 #x1512b04d2f0219c3 #xe87181263266a1b1 #x1975358d7628e987 #x534e1459da610806 #x47e78604311f05ca #xd4972ac112e4b6f8 #x33514817282cdb1c #x90a0caf5727f8f23 #x3e8defc7b57a3f57 #x3f36cdd771062b58 #x796a69c384653a9d #x465ca414f56311c5 #x5e92b3894737ec4d #x9811c7751cb82f5b #xd041a2812509e6c4 #x49eb47e4fdcddd90 #x78d14bd340192e92 #xf9b5b92b2a89e84e #x61a47e5e3631c715 #x509e72698be53417 #xb533549f24d571ed #x27f8da4ac352d6d0 #x6572f61e01dc9729 #xde4d6361e9db3e9e #x3457a6674e45b731 #xa54c4e82f8462c1d #xbd82591f4a12d195 #x830fb6d8ff68eec2 #x383023a7176f4775 #x7766a82348b7e2c7 #x0c6785c0592af044 #xba84b76f2c7bbdb8 #xe0c08ca65ca101c9 #xeba1e71663e29da0 #xd52c08d1d698a2f7 #xc4e830dcce77eb08 #xda9beb21de366ea2 #xa3f182e25a53543f #xac46611252fd986a #xb38e98ff86c009cf #xf36ff08bd1b66028 #xdb20c9311a4a7aad #xa19ac6c2cfab7c21 #x6ac515ee09725b7c #x4c86edb40e5c99a3 #x363ce247dbbd9f2f #x8164f2f86a90c6dc #x35ec84778a39a33e #xb488768fe0a965e2 #x73b020637f5ab2fb #x232e520af4bf86ec #x6fa8bfbefae31f4f #xeca70966058bf18d #x1da3bdcd41c5b9bb #x9cc74f352b557f67 #x4d3dcfa4ca208dac #x2b9f5f8a9a782694 #xaafbad72f0e8e048 #xc934970c53210f43 #xed1c2b76c1f7e582 #x01bb2210c47c140f #x0ddca7d09d56e44b #x2d2293ea386d5eb6 #xf7b978cbe65b3014 #x6719b23e9424bf37 #x2295701a30c392e3) (#x9f5f8a9a7826942b #x34970c53210f43c9 #x9d0551b85f028fdd #xb494c83b14facd82 #x6edd68c02b72ab88 #xff19d9b4a6a87e5b #xdb6443eaa29ae571 #x1be8e5b6039b2c91 #x5fd32cc6d9275dcb #x90e9526510c856a8 #xb27ab85d7d96e085 #xa47e5e3631c71561 #xf3d8397874702455 #xfbad72f0e8e048aa #x37e034609b39db44 #xfa8091e175f2cbd1 #xcaa336f61ab5bee9 #xeff34fb98395a6b8 #x63316b1d64b872fd #xba0ff3d5e1068c7a #xcd60a581eecb1095 #x35baef42bc1dc0b2 #x23be0929f04c3556 #x4b8d118fb252b3d9 #xd8137bd918ac7dfc #x0a2f90aabbb47709 #xc2d67d7e8625d216 #x7181263266a1b1e8 #x3023a7176f477538 #x7642b54592df1f94 #xf2f5da69e962a72e #xa70966058bf18dec #xc662d63ac86de4e7 #x939e6a56aafece25 #x86edb40e5c99a34c #xf8da4ac352d6d027 #x145e3d496b75ee12 #xce179db254fd8818 #xd23ceb73a3180af5 #x270aa26dbe0403a7 #x5d89f7e4fe03463d #x2ae6a1b0f1cedad2 #x1729057ad143769f #xb10d806ec7a07808 #x4f39bacbfc1a8528 #xeda9949ba4b1bd4e #x5312cc0a0bff07c5 #xc4380d18ef49ff11 #x95701a30c392e322 #xa0caf5727f8f2390 #x55fcbc6c62932ac2 #xcf3a7ea3c9ef0b63 #x621c880cf9aaf186 #xfd430296818c65ad #xbf96bb80325c39f0 #x6c87b3e20c56b07e #x299199834bf8425f #x74186e67b5fb0462 #x4c4e82f8462c1da5 #x64f2f86a90c6dc81 #x6b442095f8281e02 #x1d0695d06af70196 #xd5ff78045766a489 #x3856ec9ff3d719c7 #xac0b15bead57799e #xc3fb9e6f1b37516d #x8e98ff86c009cfb3 #x49d7caad9576a82f #x859a8c3de6af3bc1 #x3dcfa4ca208dac4d #x91c4b1748ddad5d3 #x8a2c54c28e41f942 #x2bcb42a16cdc59a9 #x9e72698be5341750 #x1e71ade3d0c1991b #xe6abe7208217493c #x3a0c37bdd4f30231 #x945df9215e806059 #xcc4d469073d993ee #x0e9b3beef5fc41f8 #x8b01b7d313537a39 #xf182e25a53543fa3 #x5810bfb12d59f3b7 #x8003c46835f58e4b #xbce183b3886aa17d #x1604e66b4c51f5e4 #x2c08d1d698a2f7d5 #xc08ca65ca101c9e0 #x7a8355894007459a #xe21f4c64cc5f7fcd #x88768fe0a965e2b4 #x82591f4a12d195bd #x4aa0f29e2f4030a2 #xdca7d09d56e44b0d #x6daa50f391443305 #x92b3894737ec4d5e #xa8bfbefae31f4f6f #xea6a07ec50cf1332 #x2293ea386d5eb62d #x41a2812509e6c4d0 #x8374fc5b8fc316c6 #x683318a6421e868f #xb3575b4ce08463fe #xe5dcdf133821d1b1 #xd6884037ed503c04 #x05994855d35ab58a #x5b678782976f6b3a #x397b0f8e6ec59abc #xabc886c95929d7e2 #xe4f13c02a53352ca #xb5b92b2a89e84ef9 #xaf7c2d8d1761e113 #x75358d7628e98719 #x72f61e01dc972965 #x78d98eab67235e6c #xc8f9edd43d91a51f #x0fb6d8ff68eec283 #x70acc523fbb33293 #x36cdd771062b583f #xbdcc60a215782206 #xa624851416e30e97 #x9607220379a47baf #x1c2b76c1f7e582ed #x6046532ede8eea70 #xbebb5891af4eba8b #x48fa29bc08642b54 #x19b23e9424bf3767 #x2627417c231680dc #x65df1b7b0dd45ffa #xf536491e1d1c0952 #x54d15f7dff81a9b9 #x2550794f99201851 #xdefd0bbf71c050fb #x87c0571fc18b2037 #x10ea960d253dd8e3 #xe0459746eb7b643b #x12b04d2f0219c315 #xaae565d8c43b5499 #xe91d3fdfeaf98bbf #xf76c923c3a3812a4 #x1f5c4ef24dd31a60 #x812e2779a8e70d30 #xf41baa0f800e8a29 #xfc6ee1871c9ee6d6 #x8fb51c975d1b4cc8 #x4e1459da61080653 #x310e4406f255f643 #x0cc1e0ccd2d85a0e #x0958a8990182ef84 #xa9925deb7e0dcc14 #x6a69c384653a9d79 #x04b4ab444e4836f1 #x0dec03dd4fcad975 #xeb47e4fdcddd9049 #x7e37fecd0e4f736b #x73dbfd104185aa1e #xc515ee09725b7c6a #xae51ce9c8a736268 #xa3bdcd41c5b9bb1d #x84b76f2c7bbdb8ba #x443bc970dabc715a #xa1e71663e29da0eb #x7f1a1ddc935df010 #x474cf143608ae9d7 #x33549f24d571edb5 #xc9d40ec5a0832664 #x46611252fd986aac #x5efecfd74435deb0 #x0000000000000000 #x514817282cdb1c33 #x408f623494f447ab #x57a6674e45b73134 #x11c7751cb82f5b98 #x989c19ed8c583a57 #x7baeb698dd15c6e1 #x06ee7066696c2d07 #xda49a0fb3f88660a #x07c39377f47eae7c #x2d2532c705b074ae #x42d5b916b3d05c5d #xec84778a39a33e35 #x776f56540fcd9cef #xa553bd27acd5961a #xb978cbe65b3014f7 #x895b6cf1347761cf #xb85528f7c622978c #x66a82348b7e2c777 #xe830dcce77eb08c4 #x189fdd85b9adb41c #x99b1fafc114ab92c #x0b0273bb26a6f472 #xeedeaca81e8725c3 #x6785c0592af0440c #x247d9a5e04329b2a #x21e4d20bd7682ea0 #xbb2210c47c140f01 #x523f2f1b96ed84be #xd4d29b15ca7427f2 #x45162a6147aef221 #xf641712da72a91df #xb020637f5ab2fb73 #xdd8a338ccbf6c876 #x5ca414f56311c546 #x3f957fe807a9b7bb #x8cc224a4e72dd445 #x012de3119d12837b #xd0663051843c1103 #x5a4a64930a7de841 #x28bc7a92d6eac124 #x08754b889c906cff #xd7a5a3267042bf7f #x3ce247dbbd9f2f36 #x6ff08bd1b66028f3 #xd14bd340192e9278 #x139dae3e9f0b406e #xe78604311f05ca47 #xd93e98c885befe87 #x616bb03f439c690b #x03773833ba36988d #xcb8ed5e787a73d92 #xb7e3f008aecc550f #x9c28b2a9c2100ca6 #x3eb89cf99abb34c0 #x3b21d4ac49e1814a #xdfd0e8aeecd2d380 #x7c6d25ef296b689d #xc1a1454d3c134a9b #xf9f7a9d2cfc4535c #xc74f352b557f679c #x7d40c6feb479ebe6 #x1573de58f6676d69 #x1ac506a79e89afea #x568b845fd8a5b24f #x32797c3548636ece #x691efbb7df0c05f4 #x972ac112e4b6f8d4 #x79f46dbafa31dd17 #x2e520af4bf86ec23 #xd31108623e0a898e #x8defc7b57a3f573e #x025adb2227241bf6 #xa2902e5058ab3866 #xfe343aa53bbafd20 #xad26f6af3045fae5 #x43f85a072ec2df26 #x2f7fe9e522946f58 #x9beb21de366ea2da #x20c9311a4a7aaddb #x5065f439b1c99f48 #x593d5ca0b04b70cc #x9ac6c2cfab7c21a1 #xb6ce131933ded674 #xf0af014bce46bcd8 #x4d6361e9db3e9ede #xe16874577669e740 #xe332af75514dfcb6) (#xbfbefae31f4f6fa8 #x85c0592af0440c67 #xbaef42bc1dc0b235 #x5528f7c622978cb8 #xe6a1b0f1cedad22a #x3ceb73a3180af5d2 #x7fe9e522946f582f #xa7d09d56e44b0ddc #x754b889c906cff08 #xe247dbbd9f2f363c #x81263266a1b1e871 #xdcdf133821d1b1e5 #xf46dbafa31dd1779 #x3d5ca0b04b70cc59 #x56ec9ff3d719c738 #xdeaca81e8725c3ee #x549f24d571edb533 #x2de3119d12837b01 #xea960d253dd8e310 #xc886c95929d7e2ab #x2f90aabbb477090a #x26f6af3045fae5ad #x6ee1871c9ee6d6fc #x3e98c885befe87d9 #x24851416e30e97a6 #xda4ac352d6d027f8 #xe3f008aecc550fb7 #x994855d35ab58a05 #x5df9215e80605994 #x58a8990182ef8409 #xb1fafc114ab92c99 #x442095f8281e026b #xf5da69e962a72ef2 #xc0571fc18b203787 #x37fecd0e4f736b7e #x902e5058ab3866a2 #xeb21de366ea2da9b #x8f623494f447ab40 #xd98eab67235e6c78 #xa414f56311c5465c #x5c4ef24dd31a601f #x08d1d698a2f7d52c #xdbfd104185aa1e73 #xcb42a16cdc59a92b #x10bfb12d59f3b758 #xa82348b7e2c77766 #xbdcd41c5b9bb1da3 #x7ab85d7d96e085b2 #xedb40e5c99a34c86 #xff78045766a489d5 #xf34fb98395a6b8ef #x4f352b557f679cc7 #x4a64930a7de8415a #xe8e5b6039b2c911b #xb4ab444e4836f104 #x4817282cdb1c3351 #xaeb698dd15c6e17b #x3f2f1b96ed84be52 #x21d4ac49e1814a3b #x884037ed503c04d6 #xbe0929f04c355623 #xe565d8c43b5499aa #x1108623e0a898ed3 #x2532c705b074ae2d #x0551b85f028fdd9d #x03c46835f58e4b80 #xf13c02a53352cae4 #xee7066696c2d0706 #xc6c2cfab7c21a19a #xb04d2f0219c31512 #x0273bb26a6f4720b #x8604311f05ca47e7 #xaf014bce46bcd8f0 #x3318a6421e868f68 #x96bb80325c39f0bf #x40c6feb479ebe67d #x12cc0a0bff07c553 #x162a6147aef22145 #x71ade3d0c1991b1e #xce131933ded674b6 #xc9311a4a7aaddb20 #x32af75514dfcb6e3 #x62d63ac86de4e7c6 #xb23e9424bf376719 #x8355894007459a7a #x137bd918ac7dfcd8 #x42b54592df1f9476 #xabe7208217493ce6 #x9b3beef5fc41f80e #x2e2779a8e70d3081 #x4d469073d993eecc #x768fe0a965e2b488 #xd0e8aeecd2d380df #xa2812509e6c4d041 #x0ff3d5e1068c7aba #x04e66b4c51f5e416 #x2c54c28e41f9428a #x01b7d313537a398b #xcc60a215782206bd #xc506a79e89afea1a #x4cf143608ae9d747 #x8a338ccbf6c876dd #x29057ad143769f17 #xcfa4ca208dac4d3d #xa6674e45b7313457 #x50794f9920185125 #xb89cf99abb34c03e #x343aa53bbafd20fe #x89f7e4fe03463d5d #xa5a3267042bf7fd7 #xefc7b57a3f573e8d #x9fdd85b9adb41c18 #xec03dd4fcad9750d #x970c53210f43c934 #xc7751cb82f5b9811 #xc1e0ccd2d85a0e0c #xad72f0e8e048aafb #x0966058bf18deca7 #x47e4fdcddd9049eb #x19d9b4a6a87e5bff #x1a1ddc935df0107f #x591f4a12d195bd82 #x1efbb7df0c05f469 #x575b4ce08463feb3 #x0e4406f255f64331 #x2ac112e4b6f8d497 #xa0f29e2f4030a24a #x179db254fd8818ce #x663051843c1103d0 #xe4d20bd7682ea021 #xd15f7dff81a9b954 #xd32cc6d9275dcb5f #x94c83b14facd82b4 #xaa50f3914433056d #x358d7628e9871975 #xbc7a92d6eac12428 #x39bacbfc1a85284f #x9199834bf8425f29 #x73de58f6676d6915 #xd5b916b3d05c5d42 #x46532ede8eea7060 #x186e67b5fb046274 #xa1454d3c134a9bc1 #x0b15bead57799eac #x5adb2227241bf602 #xdd68c02b72ab886e #x6443eaa29ae571db #xfd0bbf71c050fbde #x8b845fd8a5b24f56 #xb92b2a89e84ef9b5 #x678782976f6b3a5b #xf2f86a90c6dc8164 #xc39377f47eae7c07 #x93ea386d5eb62d22 #x430296818c65adfd #xc224a4e72dd4458c #x9e6a56aafece2593 #x6f56540fcd9cef77 #x84778a39a33e35ec #xf85a072ec2df2643 #x3bc970dabc715a44 #x0d806ec7a07808b1 #x773833ba36988d03 #x27417c231680dc26 #x60a581eecb1095cd #xb76f2c7bbdb8ba84 #xd8397874702455f3 #xfecfd74435deb05e #xcaf5727f8f2390a0 #xa9949ba4b1bd4eed #xe034609b39db4437 #x2b76c1f7e582ed1c #xf7a9d2cfc4535cf9 #x20637f5ab2fb73b0 #x9c19ed8c583a5798 #xd67d7e8625d216c2 #x1459da610806534e #x6d25ef296b689d7c #x925deb7e0dcc14a9 #x65f439b1c99f4850 #x957fe807a9b7bb3f #x41712da72a91dff6 #x36491e1d1c0952f5 #x5e3d496b75ee1214 #x1d3fdfeaf98bbfe9 #x701a30c392e32295 #x6361e9db3e9ede4d #xd7caad9576a82f49 #xe71663e29da0eba1 #x98ff86c009cfb38e #x6bb03f439c690b61 #xc4b1748ddad5d391 #x6c923c3a3812a4f7 #x1f4c64cc5f7fcde2 #xe183b3886aa17dbc #xb6d8ff68eec2830f #x51ce9c8a736268ae #x07220379a47baf96 #x82e25a53543fa3f1 #xbb5891af4eba8bbe #x4bd340192e9278d1 #x6874577669e740e1 #xfb9e6f1b37516dc3 #xacc523fbb3329370 #x69c384653a9d796a #x5b6cf1347761cf89 #x0000000000000000 #x49a0fb3f88660ada #xa336f61ab5bee9ca #x15ee09725b7c6ac5 #x8d118fb252b3d94b #x7d9a5e04329b2a24 #x1baa0f800e8a29f4 #xfa29bc08642b5448 #x459746eb7b643be0 #xdf1b7b0dd45ffa65 #x30dcce77eb08c4e8 #x8091e175f2cbd1fa #x0c37bdd4f302313a #xf9edd43d91a51fc8 #x3a7ea3c9ef0b63cf #x74fc5b8fc316c683 #x8ca65ca101c9e0c0 #x72698be53417509e #x23a7176f47753830 #x797c3548636ece32 #xb51c975d1b4cc88f #x2210c47c140f01bb #xd29b15ca7427f2d4 #x8ed5e787a73d92cb #x7e5e3631c71561a4 #x1c880cf9aaf18662 #xf08bd1b66028f36f #xf61e01dc97296572 #x7b0f8e6ec59abc39 #xb3894737ec4d5e92 #x316b1d64b872fd63 #x9a8c3de6af3bc185 #x0aa26dbe0403a727 #x5f8a9a7826942b9f #x520af4bf86ec232e #x380d18ef49ff11c4 #x0695d06af701961d #x87b3e20c56b07e6c #x53bd27acd5961aa5 #x7c2d8d1761e113af #x28b2a9c2100ca69c #x6a07ec50cf1332ea #xe9526510c856a890 #xcdd771062b583f36 #xfcbc6c62932ac255 #x9dae3e9f0b406e13 #xd40ec5a0832664c9 #x78cbe65b3014f7b9 #x4e82f8462c1da54c #x611252fd986aac46) (#x352b557f679cc74f #x3e9424bf376719b2 #x5deb7e0dcc14a992 #xb3e20c56b07e6c87 #x83b3886aa17dbce1 #x3d496b75ee12145e #xae3e9f0b406e139d #x8a9a7826942b9f5f #x845fd8a5b24f568b #x5a072ec2df2643f8 #xf3d5e1068c7aba0f #x7ea3c9ef0b63cf3a #x923c3a3812a4f76c #x3fdfeaf98bbfe91d #xd340192e9278d14b #x04311f05ca47e786 #xcc0a0bff07c55312 #xff86c009cfb38e98 #xade3d0c1991b1e71 #xfc5b8fc316c68374 #xbb80325c39f0bf96 #xd5e787a73d92cb8e #xa4ca208dac4d3dcf #xf6af3045fae5ad26 #x5b4ce08463feb357 #x8bd1b66028f36ff0 #xb698dd15c6e17bae #x2f1b96ed84be523f #x4037ed503c04d688 #x6a56aafece25939e #xb40e5c99a34c86ed #xc6feb479ebe67d40 #x9b15ca7427f2d4d2 #xde58f6676d691573 #xc523fbb3329370ac #xe5b6039b2c911be8 #x8d7628e987197535 #xf008aecc550fb7e3 #xd9b4a6a87e5bff19 #xc112e4b6f8d4972a #xdf133821d1b1e5dc #xaf75514dfcb6e332 #x2095f8281e026b44 #xb54592df1f947642 #x8eab67235e6c78d9 #x698be53417509e72 #xbc6c62932ac255fc #x1f4a12d195bd8259 #x15bead57799eac0b #x1ddc935df0107f1a #x131933ded674b6ce #xe66b4c51f5e41604 #x9db254fd8818ce17 #xa26dbe0403a7270a #x17282cdb1c335148 #x47dbbd9f2f363ce2 #xda69e962a72ef2f5 #x469073d993eecc4d #xfafc114ab92c99b1 #x90aabbb477090a2f #xb2a9c2100ca69c28 #xa65ca101c9e0c08c #xd09d56e44b0ddca7 #x3833ba36988d0377 #x59da610806534e14 #x19ed8c583a57989c #x491e1d1c0952f536 #xeb73a3180af5d23c #x2779a8e70d30812e #x86c95929d7e2abc8 #xedd43d91a51fc8f9 #xb03f439c690b616b #x9e6f1b37516dc3fb #x78045766a489d5ff #x3c02a53352cae4f1 #x1c975d1b4cc88fb5 #x55894007459a7a83 #xc384653a9d796a69 #x674e45b7313457a6 #x454d3c134a9bc1a1 #xce9c8a736268ae51 #x98c885befe87d93e #x0d18ef49ff11c438 #x66058bf18deca709 #xcfd74435deb05efe #x4ac352d6d027f8da #x880cf9aaf186621c #x0c53210f43c93497 #x36f61ab5bee9caa3 #x526510c856a890e9 #x64930a7de8415a4a #x1a30c392e3229570 #x778a39a33e35ec84 #xbefae31f4f6fa8bf #x2cc6d9275dcb5fd3 #xf439b1c99f485065 #xa581eecb1095cd60 #x28f7c622978cb855 #x220379a47baf9607 #x7d7e8625d216c2d6 #xd63ac86de4e7c662 #xea386d5eb62d2293 #xaa0f800e8a29f41b #x1b7b0dd45ffa65df #x6cf1347761cf895b #x4fb98395a6b8eff3 #xd4ac49e1814a3b21 #x311a4a7aaddb20c9 #x32c705b074ae2d25 #xf29e2f4030a24aa0 #x712da72a91dff641 #xe4fdcddd9049eb47 #xe7208217493ce6ab #xab444e4836f104b4 #x2a6147aef2214516 #xb916b3d05c5d42d5 #xd1d698a2f7d52c08 #xb7d313537a398b01 #x4b889c906cff0875 #xcbe65b3014f7b978 #x812509e6c4d041a2 #xb85d7d96e085b27a #xef42bc1dc0b235ba #x18a6421e868f6833 #x532ede8eea706046 #x2b2a89e84ef9b5b9 #xf86a90c6dc8164f2 #x397874702455f3d8 #x65d8c43b5499aae5 #x42a16cdc59a92bcb #x5f7dff81a9b954d1 #x9377f47eae7c07c3 #x95d06af701961d06 #x34609b39db4437e0 #x8c3de6af3bc1859a #xfd104185aa1e73db #x7bd918ac7dfcd813 #x417c231680dc2627 #x03dd4fcad9750dec #x14f56311c5465ca4 #x571fc18b203787c0 #xb1748ddad5d391c4 #xd8ff68eec2830fb6 #x014bce46bcd8f0af #x1663e29da0eba1e7 #x637f5ab2fb73b020 #xee09725b7c6ac515 #x0000000000000000 #x338ccbf6c876dd8a #x56540fcd9cef776f #x623494f447ab408f #x91e175f2cbd1fa80 #x0f8e6ec59abc397b #x4855d35ab58a0599 #x894737ec4d5e92b3 #xbd27acd5961aa553 #x4d2f0219c31512b0 #xe1871c9ee6d6fc6e #x8fe0a965e2b48876 #x118fb252b3d94b8d #xc0592af0440c6785 #xaca81e8725c3eede #xd771062b583f36cd #x7066696c2d0706ee #x99834bf8425f2991 #x3aa53bbafd20fe34 #x4406f255f643310e #xa1b0f1cedad22ae6 #x82f8462c1da54c4e #x0929f04c355623be #x057ad143769f1729 #x949ba4b1bd4eeda9 #x960d253dd8e310ea #xfecd0e4f736b7e37 #x0296818c65adfd43 #x6f2c7bbdb8ba84b7 #x9a5e04329b2a247d #x2348b7e2c77766a8 #xdcce77eb08c4e830 #x851416e30e97a624 #x08623e0a898ed311 #x43eaa29ae571db64 #xc7b57a3f573e8def #xc2cfab7c21a19ac6 #x5ca0b04b70cc593d #x0ec5a0832664c9d4 #x1e01dc97296572f6 #xbacbfc1a85284f39 #xc970dabc715a443b #xa8990182ef840958 #xc83b14facd82b494 #x72f0e8e048aafbad #xf143608ae9d7474c #xf5727f8f2390a0ca #x7fe807a9b7bb3f95 #x76c1f7e582ed1c2b #xcd41c5b9bb1da3bd #x6b1d64b872fd6331 #x806ec7a07808b10d #xe3119d12837b012d #x25ef296b689d7c6d #x37bdd4f302313a0c #x3051843c1103d066 #x68c02b72ab886edd #x8782976f6b3a5b67 #x2d8d1761e113af7c #x1252fd986aac4661 #x0bbf71c050fbdefd #xd20bd7682ea021e4 #xe0ccd2d85a0e0cc1 #x9cf99abb34c03eb8 #xdd85b9adb41c189f #x61e9db3e9ede4d63 #x06a79e89afea1ac5 #xf7e4fe03463d5d89 #x794f992018512550 #x3beef5fc41f80e9b #xcaad9576a82f49d7 #x10c47c140f01bb22 #x0af4bf86ec232e52 #xdb2227241bf6025a #x21de366ea2da9beb #x9f24d571edb53354 #x9746eb7b643be045 #xa3267042bf7fd7a5 #x6e67b5fb04627418 #xc46835f58e4b8003 #x07ec50cf1332ea6a #xe8aeecd2d380dfd0 #xe9e522946f582f7f #x54c28e41f9428a2c #xe25a53543fa3f182 #xa9d2cfc4535cf9f7 #xa0fb3f88660ada49 #x50f3914433056daa #x51b85f028fdd9d05 #xec9ff3d719c73856 #x263266a1b1e87181 #x5e3631c71561a47e #x24a4e72dd4458cc2 #x74577669e740e168 #x7a92d6eac12428bc #x2e5058ab3866a290 #x4ef24dd31a601f5c #xf9215e806059945d #xfbb7df0c05f4691e #x751cb82f5b9811c7 #x29bc08642b5448fa #x5891af4eba8bbebb #x73bb26a6f4720b02 #x6dbafa31dd1779f4 #x7c3548636ece3279 #x4c64cc5f7fcde21f #x60a215782206bdcc #xa7176f4775383023 #xbfb12d59f3b75810) (#x51843c1103d06630 #xdfeaf98bbfe91d3f #xeef5fc41f80e9b3b #xaf3045fae5ad26f6 #x70dabc715a443bc9 #x119d12837b012de3 #x3b14facd82b494c8 #xdd4fcad9750dec03 #xaabbb477090a2f90 #x75514dfcb6e332af #x96818c65adfd4302 #x1d64b872fd63316b #xe4fe03463d5d89f7 #x43608ae9d7474cf1 #xe20c56b07e6c87b3 #xf24dd31a601f5c4e #x577669e740e16874 #x609b39db4437e034 #x3ac86de4e7c662d6 #x0379a47baf960722 #xa79e89afea1ac506 #x4bce46bcd8f0af01 #x267042bf7fd7a5a3 #x7ad143769f172905 #x85b9adb41c189fdd #xc885befe87d93e98 #xed8c583a57989c19 #x3c3a3812a4f76c92 #x5e04329b2a247d9a #xf99abb34c03eb89c #x2227241bf6025adb #x6510c856a890e952 #xa215782206bdcc60 #x9ff3d719c73856ec #x02a53352cae4f13c #x871c9ee6d6fc6ee1 #x80325c39f0bf96bb #x8d1761e113af7c2d #x46eb7b643be04597 #xd8c43b5499aae565 #x81eecb1095cd60a5 #x9c8a736268ae51ce #x64cc5f7fcde21f4c #x7c231680dc262741 #xc28e41f9428a2c54 #x8ccbf6c876dd8a33 #xb98395a6b8eff34f #xa9c2100ca69c28b2 #x6ec7a07808b10d80 #x0a0bff07c55312cc #xc02b72ab886edd68 #xb85f028fdd9d0551 #x104185aa1e73dbfd #xb6039b2c911be8e5 #x79a8e70d30812e27 #x82976f6b3a5b6787 #xa53bbafd20fe343a #x7dff81a9b954d15f #x894007459a7a8355 #xd43d91a51fc8f9ed #xccd2d85a0e0cc1e0 #xe807a9b7bb3f957f #xa81e8725c3eedeac #x5058ab3866a2902e #x889c906cff08754b #x4ce08463feb3575b #xdc935df0107f1a1d #x56aafece25939e6a #xa16cdc59a92bcb42 #xec50cf1332ea6a07 #x4592df1f947642b5 #xbafa31dd1779f46d #x29f04c355623be09 #x15ca7427f2d4d29b #x215e806059945df9 #x23fbb3329370acc5 #xd74435deb05efecf #xeaa29ae571db6443 #xc95929d7e2abc886 #xa4e72dd4458cc224 #x3548636ece32797c #x27acd5961aa553bd #xac49e1814a3b21d4 #xcbfc1a85284f39ba #x8fb252b3d94b8d11 #x42bc1dc0b235baef #x072ec2df2643f85a #x91af4eba8bbebb58 #x045766a489d5ff78 #x9073d993eecc4d46 #x3f439c690b616bb0 #x6b4c51f5e41604e6 #x7e8625d216c2d67d #xab67235e6c78d98e #xef296b689d7c6d25 #xc5a0832664c9d40e #x69e962a72ef2f5da #x7b0dd45ffa65df1b #x496b75ee12145e3d #xd918ac7dfcd8137b #x1e1d1c0952f53649 #xfeb479ebe67d40c6 #x6147aef22145162a #x0f800e8a29f41baa #x0000000000000000 #x990182ef840958a8 #x975d1b4cc88fb51c #x5b8fc316c68374fc #x16b3d05c5d42d5b9 #xb3886aa17dbce183 #x4f99201851255079 #x98dd15c6e17baeb6 #x06f255f643310e44 #x6f1b37516dc3fb9e #x0cf9aaf186621c88 #x8e6ec59abc397b0f #x930a7de8415a4a64 #x37ed503c04d68840 #xf61ab5bee9caa336 #xfb3f88660ada49a0 #x7874702455f3d839 #x208217493ce6abe7 #x73a3180af5d23ceb #x9e2f4030a24aa0f2 #xe522946f582f7fe9 #xd5e1068c7aba0ff3 #xbdd4f302313a0c37 #x1fc18b203787c057 #xd2cfc4535cf9f7a9 #x1b96ed84be523f2f #x5d7d96e085b27ab8 #x66696c2d0706ee70 #xd06af701961d0695 #xe3d0c1991b1e71ad #x6c62932ac255fcbc #xd313537a398b01b7 #xa0b04b70cc593d5c #x834bf8425f299199 #xaeecd2d380dfd0e8 #xbead57799eac0b15 #x540fcd9cef776f56 #xad9576a82f49d7ca #xfc114ab92c99b1fa #x33ba36988d037738 #xbb26a6f4720b0273 #xb254fd8818ce179d #xa6421e868f683318 #x5fd8a5b24f568b84 #x623e0a898ed31108 #xb0f1cedad22ae6a1 #x1933ded674b6ce13 #x1416e30e97a62485 #x3e9f0b406e139dae #x6dbe0403a7270aa2 #xbc08642b5448fa29 #x0d253dd8e310ea96 #x2ede8eea70604653 #x39b1c99f485065f4 #xcd0e4f736b7e37fe #xbf71c050fbdefd0b #x748ddad5d391c4b1 #x0bd7682ea021e4d2 #x3494f447ab408f62 #xb4a6a87e5bff19d9 #x133821d1b1e5dcdf #x95f8281e026b4420 #x2da72a91dff64171 #x18ef49ff11c4380d #xc705b074ae2d2532 #x3de6af3bc1859a8c #x6835f58e4b8003c4 #xe787a73d92cb8ed5 #xc6d9275dcb5fd32c #xf7c622978cb85528 #x4d3c134a9bc1a145 #xf3914433056daa50 #xb7df0c05f4691efb #xe175f2cbd1fa8091 #x77f47eae7c07c393 #xeb7e0dcc14a9925d #xf1347761cf895b6c #x08aecc550fb7e3f0 #x55d35ab58a059948 #x444e4836f104b4ab #x58f6676d691573de #x9ba4b1bd4eeda994 #x92d6eac12428bc7a #xb12d59f3b75810bf #xa3c9ef0b63cf3a7e #x67b5fb046274186e #x2f0219c31512b04d #x3266a1b1e8718126 #x7628e9871975358d #xda610806534e1459 #x311f05ca47e78604 #x12e4b6f8d4972ac1 #x282cdb1c33514817 #x727f8f2390a0caf5 #xb57a3f573e8defc7 #x71062b583f36cdd7 #x84653a9d796a69c3 #xf56311c5465ca414 #x4737ec4d5e92b389 #x1cb82f5b9811c775 #x2509e6c4d041a281 #xfdcddd9049eb47e4 #x40192e9278d14bd3 #x2a89e84ef9b5b92b #x3631c71561a47e5e #x8be53417509e7269 #x24d571edb533549f #xc352d6d027f8da4a #x01dc97296572f61e #xe9db3e9ede4d6361 #x4e45b7313457a667 #xf8462c1da54c4e82 #x4a12d195bd82591f #xff68eec2830fb6d8 #x176f4775383023a7 #x48b7e2c77766a823 #x592af0440c6785c0 #x2c7bbdb8ba84b76f #x5ca101c9e0c08ca6 #x63e29da0eba1e716 #xd698a2f7d52c08d1 #xce77eb08c4e830dc #xde366ea2da9beb21 #x5a53543fa3f182e2 #x52fd986aac466112 #x86c009cfb38e98ff #xd1b66028f36ff08b #x1a4a7aaddb20c931 #xcfab7c21a19ac6c2 #x09725b7c6ac515ee #x0e5c99a34c86edb4 #xdbbd9f2f363ce247 #x6a90c6dc8164f2f8 #x8a39a33e35ec8477 #xe0a965e2b488768f #x7f5ab2fb73b02063 #xf4bf86ec232e520a #xfae31f4f6fa8bfbe #x058bf18deca70966 #x41c5b9bb1da3bdcd #x2b557f679cc74f35 #xca208dac4d3dcfa4 #x9a7826942b9f5f8a #xf0e8e048aafbad72 #x53210f43c934970c #xc1f7e582ed1c2b76 #xc47c140f01bb2210 #x9d56e44b0ddca7d0 #x386d5eb62d2293ea #xe65b3014f7b978cb #x9424bf376719b23e #x30c392e32295701a)))) (defconst +kalyna-s+ (make-array '(4 256) :element-type '(unsigned-byte 8) :initial-contents '((#xa8 #x43 #x5f #x06 #x6b #x75 #x6c #x59 #x71 #xdf #x87 #x95 #x17 #xf0 #xd8 #x09 #x6d #xf3 #x1d #xcb #xc9 #x4d #x2c #xaf #x79 #xe0 #x97 #xfd #x6f #x4b #x45 #x39 #x3e #xdd #xa3 #x4f #xb4 #xb6 #x9a #x0e #x1f #xbf #x15 #xe1 #x49 #xd2 #x93 #xc6 #x92 #x72 #x9e #x61 #xd1 #x63 #xfa #xee #xf4 #x19 #xd5 #xad #x58 #xa4 #xbb #xa1 #xdc #xf2 #x83 #x37 #x42 #xe4 #x7a #x32 #x9c #xcc #xab #x4a #x8f #x6e #x04 #x27 #x2e #xe7 #xe2 #x5a #x96 #x16 #x23 #x2b #xc2 #x65 #x66 #x0f #xbc #xa9 #x47 #x41 #x34 #x48 #xfc #xb7 #x6a #x88 #xa5 #x53 #x86 #xf9 #x5b #xdb #x38 #x7b #xc3 #x1e #x22 #x33 #x24 #x28 #x36 #xc7 #xb2 #x3b #x8e #x77 #xba #xf5 #x14 #x9f #x08 #x55 #x9b #x4c #xfe #x60 #x5c #xda #x18 #x46 #xcd #x7d #x21 #xb0 #x3f #x1b #x89 #xff #xeb #x84 #x69 #x3a #x9d #xd7 #xd3 #x70 #x67 #x40 #xb5 #xde #x5d #x30 #x91 #xb1 #x78 #x11 #x01 #xe5 #x00 #x68 #x98 #xa0 #xc5 #x02 #xa6 #x74 #x2d #x0b #xa2 #x76 #xb3 #xbe #xce #xbd #xae #xe9 #x8a #x31 #x1c #xec #xf1 #x99 #x94 #xaa #xf6 #x26 #x2f #xef #xe8 #x8c #x35 #x03 #xd4 #x7f #xfb #x05 #xc1 #x5e #x90 #x20 #x3d #x82 #xf7 #xea #x0a #x0d #x7e #xf8 #x50 #x1a #xc4 #x07 #x57 #xb8 #x3c #x62 #xe3 #xc8 #xac #x52 #x64 #x10 #xd0 #xd9 #x13 #x0c #x12 #x29 #x51 #xb9 #xcf #xd6 #x73 #x8d #x81 #x54 #xc0 #xed #x4e #x44 #xa7 #x2a #x85 #x25 #xe6 #xca #x7c #x8b #x56 #x80) (#xce #xbb #xeb #x92 #xea #xcb #x13 #xc1 #xe9 #x3a #xd6 #xb2 #xd2 #x90 #x17 #xf8 #x42 #x15 #x56 #xb4 #x65 #x1c #x88 #x43 #xc5 #x5c #x36 #xba #xf5 #x57 #x67 #x8d #x31 #xf6 #x64 #x58 #x9e #xf4 #x22 #xaa #x75 #x0f #x02 #xb1 #xdf #x6d #x73 #x4d #x7c #x26 #x2e #xf7 #x08 #x5d #x44 #x3e #x9f #x14 #xc8 #xae #x54 #x10 #xd8 #xbc #x1a #x6b #x69 #xf3 #xbd #x33 #xab #xfa #xd1 #x9b #x68 #x4e #x16 #x95 #x91 #xee #x4c #x63 #x8e #x5b #xcc #x3c #x19 #xa1 #x81 #x49 #x7b #xd9 #x6f #x37 #x60 #xca #xe7 #x2b #x48 #xfd #x96 #x45 #xfc #x41 #x12 #x0d #x79 #xe5 #x89 #x8c #xe3 #x20 #x30 #xdc #xb7 #x6c #x4a #xb5 #x3f #x97 #xd4 #x62 #x2d #x06 #xa4 #xa5 #x83 #x5f #x2a #xda #xc9 #x00 #x7e #xa2 #x55 #xbf #x11 #xd5 #x9c #xcf #x0e #x0a #x3d #x51 #x7d #x93 #x1b #xfe #xc4 #x47 #x09 #x86 #x0b #x8f #x9d #x6a #x07 #xb9 #xb0 #x98 #x18 #x32 #x71 #x4b #xef #x3b #x70 #xa0 #xe4 #x40 #xff #xc3 #xa9 #xe6 #x78 #xf9 #x8b #x46 #x80 #x1e #x38 #xe1 #xb8 #xa8 #xe0 #x0c #x23 #x76 #x1d #x25 #x24 #x05 #xf1 #x6e #x94 #x28 #x9a #x84 #xe8 #xa3 #x4f #x77 #xd3 #x85 #xe2 #x52 #xf2 #x82 #x50 #x7a #x2f #x74 #x53 #xb3 #x61 #xaf #x39 #x35 #xde #xcd #x1f #x99 #xac #xad #x72 #x2c #xdd #xd0 #x87 #xbe #x5e #xa6 #xec #x04 #xc6 #x03 #x34 #xfb #xdb #x59 #xb6 #xc2 #x01 #xf0 #x5a #xed #xa7 #x66 #x21 #x7f #x8a #x27 #xc7 #xc0 #x29 #xd7) (#x93 #xd9 #x9a #xb5 #x98 #x22 #x45 #xfc #xba #x6a #xdf #x02 #x9f #xdc #x51 #x59 #x4a #x17 #x2b #xc2 #x94 #xf4 #xbb #xa3 #x62 #xe4 #x71 #xd4 #xcd #x70 #x16 #xe1 #x49 #x3c #xc0 #xd8 #x5c #x9b #xad #x85 #x53 #xa1 #x7a #xc8 #x2d #xe0 #xd1 #x72 #xa6 #x2c #xc4 #xe3 #x76 #x78 #xb7 #xb4 #x09 #x3b #x0e #x41 #x4c #xde #xb2 #x90 #x25 #xa5 #xd7 #x03 #x11 #x00 #xc3 #x2e #x92 #xef #x4e #x12 #x9d #x7d #xcb #x35 #x10 #xd5 #x4f #x9e #x4d #xa9 #x55 #xc6 #xd0 #x7b #x18 #x97 #xd3 #x36 #xe6 #x48 #x56 #x81 #x8f #x77 #xcc #x9c #xb9 #xe2 #xac #xb8 #x2f #x15 #xa4 #x7c #xda #x38 #x1e #x0b #x05 #xd6 #x14 #x6e #x6c #x7e #x66 #xfd #xb1 #xe5 #x60 #xaf #x5e #x33 #x87 #xc9 #xf0 #x5d #x6d #x3f #x88 #x8d #xc7 #xf7 #x1d #xe9 #xec #xed #x80 #x29 #x27 #xcf #x99 #xa8 #x50 #x0f #x37 #x24 #x28 #x30 #x95 #xd2 #x3e #x5b #x40 #x83 #xb3 #x69 #x57 #x1f #x07 #x1c #x8a #xbc #x20 #xeb #xce #x8e #xab #xee #x31 #xa2 #x73 #xf9 #xca #x3a #x1a #xfb #x0d #xc1 #xfe #xfa #xf2 #x6f #xbd #x96 #xdd #x43 #x52 #xb6 #x08 #xf3 #xae #xbe #x19 #x89 #x32 #x26 #xb0 #xea #x4b #x64 #x84 #x82 #x6b #xf5 #x79 #xbf #x01 #x5f #x75 #x63 #x1b #x23 #x3d #x68 #x2a #x65 #xe8 #x91 #xf6 #xff #x13 #x58 #xf1 #x47 #x0a #x7f #xc5 #xa7 #xe7 #x61 #x5a #x06 #x46 #x44 #x42 #x04 #xa0 #xdb #x39 #x86 #x54 #xaa #x8c #x34 #x21 #x8b #xf8 #x0c #x74 #x67) (#x68 #x8d #xca #x4d #x73 #x4b #x4e #x2a #xd4 #x52 #x26 #xb3 #x54 #x1e #x19 #x1f #x22 #x03 #x46 #x3d #x2d #x4a #x53 #x83 #x13 #x8a #xb7 #xd5 #x25 #x79 #xf5 #xbd #x58 #x2f #x0d #x02 #xed #x51 #x9e #x11 #xf2 #x3e #x55 #x5e #xd1 #x16 #x3c #x66 #x70 #x5d #xf3 #x45 #x40 #xcc #xe8 #x94 #x56 #x08 #xce #x1a #x3a #xd2 #xe1 #xdf #xb5 #x38 #x6e #x0e #xe5 #xf4 #xf9 #x86 #xe9 #x4f #xd6 #x85 #x23 #xcf #x32 #x99 #x31 #x14 #xae #xee #xc8 #x48 #xd3 #x30 #xa1 #x92 #x41 #xb1 #x18 #xc4 #x2c #x71 #x72 #x44 #x15 #xfd #x37 #xbe #x5f #xaa #x9b #x88 #xd8 #xab #x89 #x9c #xfa #x60 #xea #xbc #x62 #x0c #x24 #xa6 #xa8 #xec #x67 #x20 #xdb #x7c #x28 #xdd #xac #x5b #x34 #x7e #x10 #xf1 #x7b #x8f #x63 #xa0 #x05 #x9a #x43 #x77 #x21 #xbf #x27 #x09 #xc3 #x9f #xb6 #xd7 #x29 #xc2 #xeb #xc0 #xa4 #x8b #x8c #x1d #xfb #xff #xc1 #xb2 #x97 #x2e #xf8 #x65 #xf6 #x75 #x07 #x04 #x49 #x33 #xe4 #xd9 #xb9 #xd0 #x42 #xc7 #x6c #x90 #x00 #x8e #x6f #x50 #x01 #xc5 #xda #x47 #x3f #xcd #x69 #xa2 #xe2 #x7a #xa7 #xc6 #x93 #x0f #x0a #x06 #xe6 #x2b #x96 #xa3 #x1c #xaf #x6a #x12 #x84 #x39 #xe7 #xb0 #x82 #xf7 #xfe #x9d #x87 #x5c #x81 #x35 #xde #xb4 #xa5 #xfc #x80 #xef #xcb #xbb #x6b #x76 #xba #x5a #x7d #x78 #x0b #x95 #xe3 #xad #x74 #x98 #x3b #x36 #x64 #x6d #xdc #xf0 #x59 #xa9 #x4c #x17 #x7f #x91 #xb8 #xc9 #x57 #x1b #xe0 #x61)))) (defconst +kalyna-is+ (make-array '(4 256) :element-type '(unsigned-byte 8) :initial-contents '((#xa4 #xa2 #xa9 #xc5 #x4e #xc9 #x03 #xd9 #x7e #x0f #xd2 #xad #xe7 #xd3 #x27 #x5b #xe3 #xa1 #xe8 #xe6 #x7c #x2a #x55 #x0c #x86 #x39 #xd7 #x8d #xb8 #x12 #x6f #x28 #xcd #x8a #x70 #x56 #x72 #xf9 #xbf #x4f #x73 #xe9 #xf7 #x57 #x16 #xac #x50 #xc0 #x9d #xb7 #x47 #x71 #x60 #xc4 #x74 #x43 #x6c #x1f #x93 #x77 #xdc #xce #x20 #x8c #x99 #x5f #x44 #x01 #xf5 #x1e #x87 #x5e #x61 #x2c #x4b #x1d #x81 #x15 #xf4 #x23 #xd6 #xea #xe1 #x67 #xf1 #x7f #xfe #xda #x3c #x07 #x53 #x6a #x84 #x9c #xcb #x02 #x83 #x33 #xdd #x35 #xe2 #x59 #x5a #x98 #xa5 #x92 #x64 #x04 #x06 #x10 #x4d #x1c #x97 #x08 #x31 #xee #xab #x05 #xaf #x79 #xa0 #x18 #x46 #x6d #xfc #x89 #xd4 #xc7 #xff #xf0 #xcf #x42 #x91 #xf8 #x68 #x0a #x65 #x8e #xb6 #xfd #xc3 #xef #x78 #x4c #xcc #x9e #x30 #x2e #xbc #x0b #x54 #x1a #xa6 #xbb #x26 #x80 #x48 #x94 #x32 #x7d #xa7 #x3f #xae #x22 #x3d #x66 #xaa #xf6 #x00 #x5d #xbd #x4a #xe0 #x3b #xb4 #x17 #x8b #x9f #x76 #xb0 #x24 #x9a #x25 #x63 #xdb #xeb #x7a #x3e #x5c #xb3 #xb1 #x29 #xf2 #xca #x58 #x6e #xd8 #xa8 #x2f #x75 #xdf #x14 #xfb #x13 #x49 #x88 #xb2 #xec #xe4 #x34 #x2d #x96 #xc6 #x3a #xed #x95 #x0e #xe5 #x85 #x6b #x40 #x21 #x9b #x09 #x19 #x2b #x52 #xde #x45 #xa3 #xfa #x51 #xc2 #xb5 #xd1 #x90 #xb9 #xf3 #x37 #xc1 #x0d #xba #x41 #x11 #x38 #x7b #xbe #xd0 #xd5 #x69 #x36 #xc8 #x62 #x1b #x82 #x8f) (#x83 #xf2 #x2a #xeb #xe9 #xbf #x7b #x9c #x34 #x96 #x8d #x98 #xb9 #x69 #x8c #x29 #x3d #x88 #x68 #x06 #x39 #x11 #x4c #x0e #xa0 #x56 #x40 #x92 #x15 #xbc #xb3 #xdc #x6f #xf8 #x26 #xba #xbe #xbd #x31 #xfb #xc3 #xfe #x80 #x61 #xe1 #x7a #x32 #xd2 #x70 #x20 #xa1 #x45 #xec #xd9 #x1a #x5d #xb4 #xd8 #x09 #xa5 #x55 #x8e #x37 #x76 #xa9 #x67 #x10 #x17 #x36 #x65 #xb1 #x95 #x62 #x59 #x74 #xa3 #x50 #x2f #x4b #xc8 #xd0 #x8f #xcd #xd4 #x3c #x86 #x12 #x1d #x23 #xef #xf4 #x53 #x19 #x35 #xe6 #x7f #x5e #xd6 #x79 #x51 #x22 #x14 #xf7 #x1e #x4a #x42 #x9b #x41 #x73 #x2d #xc1 #x5c #xa6 #xa2 #xe0 #x2e #xd3 #x28 #xbb #xc9 #xae #x6a #xd1 #x5a #x30 #x90 #x84 #xf9 #xb2 #x58 #xcf #x7e #xc5 #xcb #x97 #xe4 #x16 #x6c #xfa #xb0 #x6d #x1f #x52 #x99 #x0d #x4e #x03 #x91 #xc2 #x4d #x64 #x77 #x9f #xdd #xc4 #x49 #x8a #x9a #x24 #x38 #xa7 #x57 #x85 #xc7 #x7c #x7d #xe7 #xf6 #xb7 #xac #x27 #x46 #xde #xdf #x3b #xd7 #x9e #x2b #x0b #xd5 #x13 #x75 #xf0 #x72 #xb6 #x9d #x1b #x01 #x3f #x44 #xe5 #x87 #xfd #x07 #xf1 #xab #x94 #x18 #xea #xfc #x3a #x82 #x5f #x05 #x54 #xdb #x00 #x8b #xe3 #x48 #x0c #xca #x78 #x89 #x0a #xff #x3e #x5b #x81 #xee #x71 #xe2 #xda #x2c #xb8 #xb5 #xcc #x6e #xa8 #x6b #xad #x60 #xc6 #x08 #x04 #x02 #xe8 #xf5 #x4f #xa4 #xf3 #xc0 #xce #x43 #x25 #x1c #x21 #x33 #x0f #xaf #x47 #xed #x66 #x63 #x93 #xaa) (#x45 #xd4 #x0b #x43 #xf1 #x72 #xed #xa4 #xc2 #x38 #xe6 #x71 #xfd #xb6 #x3a #x95 #x50 #x44 #x4b #xe2 #x74 #x6b #x1e #x11 #x5a #xc6 #xb4 #xd8 #xa5 #x8a #x70 #xa3 #xa8 #xfa #x05 #xd9 #x97 #x40 #xc9 #x90 #x98 #x8f #xdc #x12 #x31 #x2c #x47 #x6a #x99 #xae #xc8 #x7f #xf9 #x4f #x5d #x96 #x6f #xf4 #xb3 #x39 #x21 #xda #x9c #x85 #x9e #x3b #xf0 #xbf #xef #x06 #xee #xe5 #x5f #x20 #x10 #xcc #x3c #x54 #x4a #x52 #x94 #x0e #xc0 #x28 #xf6 #x56 #x60 #xa2 #xe3 #x0f #xec #x9d #x24 #x83 #x7e #xd5 #x7c #xeb #x18 #xd7 #xcd #xdd #x78 #xff #xdb #xa1 #x09 #xd0 #x76 #x84 #x75 #xbb #x1d #x1a #x2f #xb0 #xfe #xd6 #x34 #x63 #x35 #xd2 #x2a #x59 #x6d #x4d #x77 #xe7 #x8e #x61 #xcf #x9f #xce #x27 #xf5 #x80 #x86 #xc7 #xa6 #xfb #xf8 #x87 #xab #x62 #x3f #xdf #x48 #x00 #x14 #x9a #xbd #x5b #x04 #x92 #x02 #x25 #x65 #x4c #x53 #x0c #xf2 #x29 #xaf #x17 #x6c #x41 #x30 #xe9 #x93 #x55 #xf7 #xac #x68 #x26 #xc4 #x7d #xca #x7a #x3e #xa0 #x37 #x03 #xc1 #x36 #x69 #x66 #x08 #x16 #xa7 #xbc #xc5 #xd3 #x22 #xb7 #x13 #x46 #x32 #xe8 #x57 #x88 #x2b #x81 #xb2 #x4e #x64 #x1c #xaa #x91 #x58 #x2e #x9b #x5c #x1b #x51 #x73 #x42 #x23 #x01 #x6e #xf3 #x0d #xbe #x3d #x0a #x2d #x1f #x67 #x33 #x19 #x7b #x5e #xea #xde #x8b #xcb #xa9 #x8c #x8d #xad #x49 #x82 #xe4 #xba #xc3 #x15 #xd1 #xe0 #x89 #xfc #xb1 #xb9 #xb5 #x07 #x79 #xb8 #xe1) (#xb2 #xb6 #x23 #x11 #xa7 #x88 #xc5 #xa6 #x39 #x8f #xc4 #xe8 #x73 #x22 #x43 #xc3 #x82 #x27 #xcd #x18 #x51 #x62 #x2d #xf7 #x5c #x0e #x3b #xfd #xca #x9b #x0d #x0f #x79 #x8c #x10 #x4c #x74 #x1c #x0a #x8e #x7c #x94 #x07 #xc7 #x5e #x14 #xa1 #x21 #x57 #x50 #x4e #xa9 #x80 #xd9 #xef #x64 #x41 #xcf #x3c #xee #x2e #x13 #x29 #xba #x34 #x5a #xae #x8a #x61 #x33 #x12 #xb9 #x55 #xa8 #x15 #x05 #xf6 #x03 #x06 #x49 #xb5 #x25 #x09 #x16 #x0c #x2a #x38 #xfc #x20 #xf4 #xe5 #x7f #xd7 #x31 #x2b #x66 #x6f #xff #x72 #x86 #xf0 #xa3 #x2f #x78 #x00 #xbc #xcc #xe2 #xb0 #xf1 #x42 #xb4 #x30 #x5f #x60 #x04 #xec #xa5 #xe3 #x8b #xe7 #x1d #xbf #x84 #x7b #xe6 #x81 #xf8 #xde #xd8 #xd2 #x17 #xce #x4b #x47 #xd6 #x69 #x6c #x19 #x99 #x9a #x01 #xb3 #x85 #xb1 #xf9 #x59 #xc2 #x37 #xe9 #xc8 #xa0 #xed #x4f #x89 #x68 #x6d #xd5 #x26 #x91 #x87 #x58 #xbd #xc9 #x98 #xdc #x75 #xc0 #x76 #xf5 #x67 #x6b #x7e #xeb #x52 #xcb #xd1 #x5b #x9f #x0b #xdb #x40 #x92 #x1a #xfa #xac #xe4 #xe1 #x71 #x1f #x65 #x8d #x97 #x9e #x95 #x90 #x5d #xb7 #xc1 #xaf #x54 #xfb #x02 #xe0 #x35 #xbb #x3a #x4d #xad #x2c #x3d #x56 #x08 #x1b #x4a #x93 #x6a #xab #xb8 #x7a #xf2 #x7d #xda #x3f #xfe #x3e #xbe #xea #xaa #x44 #xc6 #xd0 #x36 #x48 #x70 #x96 #x77 #x24 #x53 #xdf #xf3 #x83 #x28 #x32 #x45 #x1e #xa4 #xd3 #xa2 #x46 #x6e #x9c #xdd #x63 #xd4 #x9d))))) (declaim (type (simple-array (unsigned-byte 64) (8 256)) +kalyna-t+ +kalyna-it+) (type (simple-array (unsigned-byte 8) (4 256)) +kalyna-s+ +kalyna-is+)) ;;; ;;; Common functions and macros ;;; (declaim (inline kalyna-make-odd-key)) (defun kalyna-make-odd-key (n ek ek-start ok ok-start) (declare (type (integer 0 8) n) (type (simple-array (unsigned-byte 64) (*)) ek ok) (type (integer 0 144) ek-start ok-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c d e) `(setf (aref ok (+ ok-start ,a)) (logior (mod64ash (aref ek (+ ek-start ,b)) ,c) (mod64ash (aref ek (+ ek-start ,d)) ,e))))) (ecase n (2 (m 0 1 8 0 -56) (m 1 0 8 1 -56)) (4 (m 0 2 40 1 -24) (m 1 3 40 2 -24) (m 2 0 40 3 -24) (m 3 1 40 0 -24)) (8 (m 0 3 40 2 -24) (m 1 4 40 3 -24) (m 2 5 40 4 -24) (m 3 6 40 5 -24) (m 4 7 40 6 -24) (m 5 0 40 7 -24) (m 6 1 40 0 -24) (m 7 2 40 1 -24)))) (values)) (declaim (inline kalyna-swap-blocks)) (defun kalyna-swap-blocks (n k) (declare (type (integer 0 8) n) (type (simple-array (unsigned-byte 64) (*)) k) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (ecase n (2 (rotatef (aref k 0) (aref k 1))) (4 (rotatef (aref k 0) (aref k 1) (aref k 2) (aref k 3))) (8 (rotatef (aref k 0) (aref k 1) (aref k 2) (aref k 3) (aref k 4) (aref k 5) (aref k 6) (aref k 7)))) (values)) (defmacro kalyna-add-key (n x x-start y k) `(dotimes-unrolled (i ,n) (setf (aref ,y i) (mod64+ (aref ,x (+ ,x-start i)) (aref ,k i))))) (defmacro kalyna-sub-key (n x y k k-start) `(dotimes-unrolled (i ,n) (setf (aref ,y i) (mod64- (aref ,x i) (aref ,k (+ ,k-start i)))))) (defmacro kalyna-add-constant (n x y c) `(dotimes-unrolled (i ,n) (setf (aref ,y i) (mod64+ (aref ,x i) ,c)))) ;;; ;;; Kalyna128 ;;; (declaim (inline kalyna-g0128)) (defun kalyna-g0128 (x y) (declare (type (simple-array (unsigned-byte 64) (*)) x y) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y 0) (logxor (m 0 0 0) (m 1 0 -8) (m 2 0 -16) (m 3 0 -24) (m 4 1 -32) (m 5 1 -40) (m 6 1 -48) (m 7 1 -56))) (setf (aref y 1) (logxor (m 0 1 0) (m 1 1 -8) (m 2 1 -16) (m 3 1 -24) (m 4 0 -32) (m 5 0 -40) (m 6 0 -48)(m 7 0 -56)))) (values)) (declaim (inline kalyna-gl128)) (defun kalyna-gl128 (x y y-start k k-start) (declare (type (simple-array (unsigned-byte 64) (*)) x y k) (type (integer 0 30) y-start k-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y (+ y-start 0)) (mod64+ (aref k (+ k-start 0)) (logxor (m 0 0 0) (m 1 0 -8) (m 2 0 -16) (m 3 0 -24) (m 4 1 -32) (m 5 1 -40) (m 6 1 -48) (m 7 1 -56)))) (setf (aref y (+ y-start 1)) (mod64+ (aref k (+ k-start 1)) (logxor (m 0 1 0) (m 1 1 -8) (m 2 1 -16) (m 3 1 -24) (m 4 0 -32) (m 5 0 -40) (m 6 0 -48) (m 7 0 -56))))) (values)) (declaim (inline kalyna-imc128)) (defun kalyna-imc128 (x x-start) (declare (type (simple-array (unsigned-byte 64) (*)) x) (type (integer 0 30) x-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c d) `(aref +kalyna-it+ ,a (aref +kalyna-s+ ,b (logand (mod64ash (aref x (+ x-start ,c)) ,d) #xff))))) (setf (aref x (+ x-start 0)) (logxor (m 0 0 0 0) (m 1 1 0 -8) (m 2 2 0 -16) (m 3 3 0 -24) (m 4 0 0 -32) (m 5 1 0 -40) (m 6 2 0 -48) (m 7 3 0 -56))) (setf (aref x (+ x-start 1)) (logxor (m 0 0 1 0) (m 1 1 1 -8) (m 2 2 1 -16) (m 3 3 1 -24) (m 4 0 1 -32) (m 5 1 1 -40) (m 6 2 1 -48) (m 7 3 1 -56)))) (values)) (declaim (inline kalyna-ig128)) (defun kalyna-ig128 (x y k k-start) (declare (type (simple-array (unsigned-byte 64) (*)) x y k) (type (integer 0 30) k-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kalyna-it+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y 0) (logxor (aref k (+ k-start 0)) (m 0 0 0) (m 1 0 -8) (m 2 0 -16) (m 3 0 -24) (m 4 1 -32) (m 5 1 -40) (m 6 1 -48) (m 7 1 -56))) (setf (aref y 1) (logxor (aref k (+ k-start 1)) (m 0 1 0) (m 1 1 -8) (m 2 1 -16) (m 3 1 -24) (m 4 0 -32) (m 5 0 -40) (m 6 0 -48) (m 7 0 -56)))) (values)) (declaim (inline kalyna-igl128)) (defun kalyna-igl128 (x y k k-start) (declare (type (simple-array (unsigned-byte 64) (*)) x y k) (type (integer 0 30) k-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c d) `(mod64ash (aref +kalyna-is+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)) ,d))) (setf (aref y 0) (mod64- (logxor (m 0 0 0 0) (m 1 0 -8 8) (m 2 0 -16 16) (m 3 0 -24 24) (m 0 1 -32 32) (m 1 1 -40 40) (m 2 1 -48 48) (m 3 1 -56 56)) (aref k (+ k-start 0)))) (setf (aref y 1) (mod64- (logxor (m 0 1 0 0) (m 1 1 -8 8) (m 2 1 -16 16) (m 3 1 -24 24) (m 0 0 -32 32) (m 1 0 -40 40) (m 2 0 -48 48) (m 3 0 -56 56)) (aref k (+ k-start 1))))) (values)) (declaim (inline kalyna-g128)) (defun kalyna-g128 (x y k k-start) (declare (type (simple-array (unsigned-byte 64) (*)) x y k) (type (integer 0 30) k-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y 0) (logxor (aref k (+ k-start 0)) (m 0 0 0) (m 1 0 -8) (m 2 0 -16) (m 3 0 -24) (m 4 1 -32) (m 5 1 -40) (m 6 1 -48) (m 7 1 -56))) (setf (aref y 1) (logxor (aref k (+ k-start 1)) (m 0 1 0) (m 1 1 -8) (m 2 1 -16) (m 3 1 -24) (m 4 0 -32) (m 5 0 -40) (m 6 0 -48) (m 7 0 -56)))) (values)) (defclass kalyna128 (cipher 16-byte-block-mixin) ((encryption-round-keys :accessor encryption-round-keys :initform (make-array 30 :element-type '(unsigned-byte 64)) :type (simple-array (unsigned-byte 64) (30))) (decryption-round-keys :accessor decryption-round-keys :initform (make-array 30 :element-type '(unsigned-byte 64)) :type (simple-array (unsigned-byte 64) (30))) (n-rounds :accessor n-rounds))) (defmethod schedule-key ((cipher kalyna128) key) (let ((encryption-round-keys (encryption-round-keys cipher)) (decryption-round-keys (decryption-round-keys cipher))) (declare (type (simple-array (unsigned-byte 64) (30)) encryption-round-keys) (type (simple-array (unsigned-byte 64) (30)) decryption-round-keys)) (ecase (length key) (16 (let ((key (make-array 2 :element-type '(unsigned-byte 64) :initial-contents (list (ub64ref/le key 0) (ub64ref/le key 8)))) (ks (make-array 2 :element-type '(unsigned-byte 64))) (ksc (make-array 2 :element-type '(unsigned-byte 64))) (t1 (make-array 2 :element-type '(unsigned-byte 64))) (t2 (make-array 2 :element-type '(unsigned-byte 64))) (k (make-array 2 :element-type '(unsigned-byte 64))) (kswapped (make-array 2 :element-type '(unsigned-byte 64))) (constant #x0001000100010001)) (declare (type (simple-array (unsigned-byte 64) (2)) key ks ksc t1 t2 k kswapped) (dynamic-extent key ks ksc t1 t2 k kswapped) (type (unsigned-byte 64) constant)) (setf (n-rounds cipher) 10) (setf (aref t1 0) (/ (+ 128 128 64) 64) (aref t1 1) 0) (kalyna-add-key 2 t1 0 t2 key) (kalyna-g128 t2 t1 key 0) (kalyna-gl128 t1 t2 0 key 0) (kalyna-g0128 t2 ks) ;; Round 0 (replace k key) (setf (aref kswapped 1) (aref k 0) (aref kswapped 0) (aref k 1)) (kalyna-add-constant 2 ks ksc constant) (kalyna-add-key 2 k 0 t2 ksc) (kalyna-g128 t2 t1 ksc 0) (kalyna-gl128 t1 encryption-round-keys 0 ksc 0) (kalyna-make-odd-key 2 encryption-round-keys 0 encryption-round-keys 2) ;; Rounds 2 to 9 (flet ((r (v n) (setf constant (mod64ash constant 1)) (kalyna-add-constant 2 ks ksc constant) (kalyna-add-key 2 v 0 t2 ksc) (kalyna-g128 t2 t1 ksc 0) (kalyna-gl128 t1 encryption-round-keys n ksc 0) (kalyna-make-odd-key 2 encryption-round-keys n encryption-round-keys (+ n 2)))) (r kswapped 4) (r k 8) (r kswapped 12) (r k 16)) ;; Round 10 (setf constant (mod64ash constant 1)) (kalyna-add-constant 2 ks ksc constant) (kalyna-add-key 2 kswapped 0 t2 ksc) (kalyna-g128 t2 t1 ksc 0) (kalyna-gl128 t1 encryption-round-keys 20 ksc 0) (replace decryption-round-keys encryption-round-keys) (loop for n from 18 downto 2 by 2 do (kalyna-imc128 decryption-round-keys n)))) (32 (let ((key (make-array 4 :element-type '(unsigned-byte 64) :initial-contents (list (ub64ref/le key 0) (ub64ref/le key 8) (ub64ref/le key 16) (ub64ref/le key 24)))) (ks (make-array 2 :element-type '(unsigned-byte 64))) (ksc (make-array 2 :element-type '(unsigned-byte 64))) (t1 (make-array 2 :element-type '(unsigned-byte 64))) (t2 (make-array 2 :element-type '(unsigned-byte 64))) (k (make-array 4 :element-type '(unsigned-byte 64))) (ka (make-array 2 :element-type '(unsigned-byte 64))) (ko (make-array 2 :element-type '(unsigned-byte 64))) (constant #x0001000100010001)) (declare (type (simple-array (unsigned-byte 64) (4)) key k) (type (simple-array (unsigned-byte 64) (2)) ks ksc t1 t2 ka ko) (dynamic-extent key ks ksc t1 t2 k ka ko) (type (unsigned-byte 64) constant)) (setf (n-rounds cipher) 14) (setf (aref t1 0) (/ (+ 128 256 64) 64) (aref t1 1) 0) (replace ka key :end2 2) (replace ko key :start2 2) (kalyna-add-key 2 t1 0 t2 ka) (kalyna-g128 t2 t1 ko 0) (kalyna-gl128 t1 t2 0 ka 0) (kalyna-g0128 t2 ks) ;; Round 0 (replace k key) (kalyna-add-constant 2 ks ksc constant) (kalyna-add-key 2 k 0 t2 ksc) (kalyna-g128 t2 t1 ksc 0) (kalyna-gl128 t1 encryption-round-keys 0 ksc 0) (kalyna-make-odd-key 2 encryption-round-keys 0 encryption-round-keys 2) ;; Rounds 2 to 13 (flet ((r (v n) (when (zerop v) (kalyna-swap-blocks 4 k)) (setf constant (mod64ash constant 1)) (kalyna-add-constant 2 ks ksc constant) (kalyna-add-key 2 k v t2 ksc) (kalyna-g128 t2 t1 ksc 0) (kalyna-gl128 t1 encryption-round-keys n ksc 0) (kalyna-make-odd-key 2 encryption-round-keys n encryption-round-keys (+ n 2)))) (r 2 4) (r 0 8) (r 2 12) (r 0 16) (r 2 20) (r 0 24)) ;; Round 14 (setf constant (mod64ash constant 1)) (kalyna-add-constant 2 ks ksc constant) (kalyna-add-key 2 k 2 t2 ksc) (kalyna-g128 t2 t1 ksc 0) (kalyna-gl128 t1 encryption-round-keys 28 ksc 0) (replace decryption-round-keys encryption-round-keys) (loop for n from 26 downto 2 by 2 do (kalyna-imc128 decryption-round-keys n))))) cipher)) (define-block-encryptor kalyna128 16 (let ((encryption-round-keys (encryption-round-keys context)) (t1 (make-array 2 :element-type '(unsigned-byte 64))) (t2 (make-array 2 :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (30)) encryption-round-keys) (type (simple-array (unsigned-byte 64) (2)) t1 t2) (dynamic-extent t1 t2)) (setf (aref t2 0) (ub64ref/le plaintext plaintext-start) (aref t2 1) (ub64ref/le plaintext (+ plaintext-start 8))) (kalyna-add-key 2 t2 0 t1 encryption-round-keys) (kalyna-g128 t1 t2 encryption-round-keys 2) (kalyna-g128 t2 t1 encryption-round-keys 4) (kalyna-g128 t1 t2 encryption-round-keys 6) (kalyna-g128 t2 t1 encryption-round-keys 8) (kalyna-g128 t1 t2 encryption-round-keys 10) (kalyna-g128 t2 t1 encryption-round-keys 12) (kalyna-g128 t1 t2 encryption-round-keys 14) (kalyna-g128 t2 t1 encryption-round-keys 16) (kalyna-g128 t1 t2 encryption-round-keys 18) (ecase (n-rounds context) (10 (kalyna-gl128 t2 t1 0 encryption-round-keys 20)) (14 (kalyna-g128 t2 t1 encryption-round-keys 20) (kalyna-g128 t1 t2 encryption-round-keys 22) (kalyna-g128 t2 t1 encryption-round-keys 24) (kalyna-g128 t1 t2 encryption-round-keys 26) (kalyna-gl128 t2 t1 0 encryption-round-keys 28))) (setf (ub64ref/le ciphertext ciphertext-start) (aref t1 0) (ub64ref/le ciphertext (+ ciphertext-start 8)) (aref t1 1)) (values))) (define-block-decryptor kalyna128 16 (let ((decryption-round-keys (decryption-round-keys context)) (t1 (make-array 2 :element-type '(unsigned-byte 64))) (t2 (make-array 2 :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (30)) decryption-round-keys) (type (simple-array (unsigned-byte 64) (2)) t1 t2) (dynamic-extent t1 t2)) (setf (aref t2 0) (ub64ref/le ciphertext ciphertext-start) (aref t2 1) (ub64ref/le ciphertext (+ ciphertext-start 8))) (ecase (n-rounds context) (10 (kalyna-sub-key 2 t2 t1 decryption-round-keys 20) (kalyna-imc128 t1 0)) (14 (kalyna-sub-key 2 t2 t1 decryption-round-keys 28) (kalyna-imc128 t1 0) (kalyna-ig128 t1 t2 decryption-round-keys 26) (kalyna-ig128 t2 t1 decryption-round-keys 24) (kalyna-ig128 t1 t2 decryption-round-keys 22) (kalyna-ig128 t2 t1 decryption-round-keys 20))) (kalyna-ig128 t1 t2 decryption-round-keys 18) (kalyna-ig128 t2 t1 decryption-round-keys 16) (kalyna-ig128 t1 t2 decryption-round-keys 14) (kalyna-ig128 t2 t1 decryption-round-keys 12) (kalyna-ig128 t1 t2 decryption-round-keys 10) (kalyna-ig128 t2 t1 decryption-round-keys 8) (kalyna-ig128 t1 t2 decryption-round-keys 6) (kalyna-ig128 t2 t1 decryption-round-keys 4) (kalyna-ig128 t1 t2 decryption-round-keys 2) (kalyna-igl128 t2 t1 decryption-round-keys 0) (setf (ub64ref/le plaintext plaintext-start) (aref t1 0) (ub64ref/le plaintext (+ plaintext-start 8)) (aref t1 1)) (values))) (defcipher kalyna128 (:encrypt-function kalyna128-encrypt-block) (:decrypt-function kalyna128-decrypt-block) (:block-length 16) (:key-length (:fixed 16 32))) ;;; ;;; Kalyna256 ;;; (declaim (inline kalyna-g0256)) (defun kalyna-g0256 (x y) (declare (type (simple-array (unsigned-byte 64) (*)) x y) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y 0) (logxor (m 0 0 0) (m 1 0 -8) (m 2 3 -16) (m 3 3 -24) (m 4 2 -32) (m 5 2 -40) (m 6 1 -48) (m 7 1 -56))) (setf (aref y 1) (logxor (m 0 1 0) (m 1 1 -8) (m 2 0 -16) (m 3 0 -24) (m 4 3 -32) (m 5 3 -40) (m 6 2 -48) (m 7 2 -56))) (setf (aref y 2) (logxor (m 0 2 0) (m 1 2 -8) (m 2 1 -16) (m 3 1 -24) (m 4 0 -32) (m 5 0 -40) (m 6 3 -48) (m 7 3 -56))) (setf (aref y 3) (logxor (m 0 3 0) (m 1 3 -8) (m 2 2 -16) (m 3 2 -24) (m 4 1 -32) (m 5 1 -40) (m 6 0 -48) (m 7 0 -56)))) (values)) (declaim (inline kalyna-gl256)) (defun kalyna-gl256 (x y y-start k k-start) (declare (type (simple-array (unsigned-byte 64) (*)) x y k) (type (integer 0 76) y-start k-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y (+ y-start 0)) (mod64+ (aref k (+ k-start 0)) (logxor (m 0 0 0) (m 1 0 -8) (m 2 3 -16) (m 3 3 -24) (m 4 2 -32) (m 5 2 -40) (m 6 1 -48) (m 7 1 -56)))) (setf (aref y (+ y-start 1)) (mod64+ (aref k (+ k-start 1)) (logxor (m 0 1 0) (m 1 1 -8) (m 2 0 -16) (m 3 0 -24) (m 4 3 -32) (m 5 3 -40) (m 6 2 -48) (m 7 2 -56)))) (setf (aref y (+ y-start 2)) (mod64+ (aref k (+ k-start 2)) (logxor (m 0 2 0) (m 1 2 -8) (m 2 1 -16) (m 3 1 -24) (m 4 0 -32) (m 5 0 -40) (m 6 3 -48) (m 7 3 -56)))) (setf (aref y (+ y-start 3)) (mod64+ (aref k (+ k-start 3)) (logxor (m 0 3 0) (m 1 3 -8) (m 2 2 -16) (m 3 2 -24) (m 4 1 -32) (m 5 1 -40) (m 6 0 -48) (m 7 0 -56))))) (values)) (declaim (inline kalyna-imc256)) (defun kalyna-imc256 (x x-start) (declare (type (simple-array (unsigned-byte 64) (*)) x) (type (integer 0 76) x-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c d) `(aref +kalyna-it+ ,a (aref +kalyna-s+ ,b (logand (mod64ash (aref x (+ x-start ,c)) ,d) #xff))))) (setf (aref x (+ x-start 0)) (logxor (m 0 0 0 0) (m 1 1 0 -8) (m 2 2 0 -16) (m 3 3 0 -24) (m 4 0 0 -32) (m 5 1 0 -40) (m 6 2 0 -48) (m 7 3 0 -56))) (setf (aref x (+ x-start 1)) (logxor (m 0 0 1 0) (m 1 1 1 -8) (m 2 2 1 -16) (m 3 3 1 -24) (m 4 0 1 -32) (m 5 1 1 -40) (m 6 2 1 -48) (m 7 3 1 -56))) (setf (aref x (+ x-start 2)) (logxor (m 0 0 2 0) (m 1 1 2 -8) (m 2 2 2 -16) (m 3 3 2 -24) (m 4 0 2 -32) (m 5 1 2 -40) (m 6 2 2 -48) (m 7 3 2 -56))) (setf (aref x (+ x-start 3)) (logxor (m 0 0 3 0) (m 1 1 3 -8) (m 2 2 3 -16) (m 3 3 3 -24) (m 4 0 3 -32) (m 5 1 3 -40) (m 6 2 3 -48) (m 7 3 3 -56)))) (values)) (declaim (inline kalyna-ig256)) (defun kalyna-ig256 (x y k k-start) (declare (type (simple-array (unsigned-byte 64) (*)) x y k) (type (integer 0 76) k-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kalyna-it+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y 0) (logxor (aref k (+ k-start 0)) (m 0 0 0) (m 1 0 -8) (m 2 1 -16) (m 3 1 -24) (m 4 2 -32) (m 5 2 -40) (m 6 3 -48) (m 7 3 -56))) (setf (aref y 1) (logxor (aref k (+ k-start 1)) (m 0 1 0) (m 1 1 -8) (m 2 2 -16) (m 3 2 -24) (m 4 3 -32) (m 5 3 -40) (m 6 0 -48) (m 7 0 -56))) (setf (aref y 2) (logxor (aref k (+ k-start 2)) (m 0 2 0) (m 1 2 -8) (m 2 3 -16) (m 3 3 -24) (m 4 0 -32) (m 5 0 -40) (m 6 1 -48) (m 7 1 -56))) (setf (aref y 3) (logxor (aref k (+ k-start 3)) (m 0 3 0) (m 1 3 -8) (m 2 0 -16) (m 3 0 -24) (m 4 1 -32) (m 5 1 -40) (m 6 2 -48) (m 7 2 -56)))) (values)) (declaim (inline kalyna-igl256)) (defun kalyna-igl256 (x y k k-start) (declare (type (simple-array (unsigned-byte 64) (*)) x y k) (type (integer 0 76) k-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c d) `(mod64ash (aref +kalyna-is+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)) ,d))) (setf (aref y 0) (mod64- (logxor (m 0 0 0 0) (m 1 0 -8 8) (m 2 1 -16 16) (m 3 1 -24 24) (m 0 2 -32 32) (m 1 2 -40 40) (m 2 3 -48 48) (m 3 3 -56 56)) (aref k (+ k-start 0)))) (setf (aref y 1) (mod64- (logxor (m 0 1 0 0) (m 1 1 -8 8) (m 2 2 -16 16) (m 3 2 -24 24) (m 0 3 -32 32) (m 1 3 -40 40) (m 2 0 -48 48) (m 3 0 -56 56)) (aref k (+ k-start 1)))) (setf (aref y 2) (mod64- (logxor (m 0 2 0 0) (m 1 2 -8 8) (m 2 3 -16 16) (m 3 3 -24 24) (m 0 0 -32 32) (m 1 0 -40 40) (m 2 1 -48 48) (m 3 1 -56 56)) (aref k (+ k-start 2)))) (setf (aref y 3) (mod64- (logxor (m 0 3 0 0) (m 1 3 -8 8) (m 2 0 -16 16) (m 3 0 -24 24) (m 0 1 -32 32) (m 1 1 -40 40) (m 2 2 -48 48) (m 3 2 -56 56)) (aref k (+ k-start 3))))) (values)) (declaim (inline kalyna-g256)) (defun kalyna-g256 (x y k k-start) (declare (type (simple-array (unsigned-byte 64) (*)) x y k) (type (integer 0 76) k-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y 0) (logxor (aref k (+ k-start 0)) (m 0 0 0) (m 1 0 -8) (m 2 3 -16) (m 3 3 -24) (m 4 2 -32) (m 5 2 -40) (m 6 1 -48) (m 7 1 -56))) (setf (aref y 1) (logxor (aref k (+ k-start 1)) (m 0 1 0) (m 1 1 -8) (m 2 0 -16) (m 3 0 -24) (m 4 3 -32) (m 5 3 -40) (m 6 2 -48) (m 7 2 -56))) (setf (aref y 2) (logxor (aref k (+ k-start 2)) (m 0 2 0) (m 1 2 -8) (m 2 1 -16) (m 3 1 -24) (m 4 0 -32) (m 5 0 -40) (m 6 3 -48) (m 7 3 -56))) (setf (aref y 3) (logxor (aref k (+ k-start 3)) (m 0 3 0) (m 1 3 -8) (m 2 2 -16) (m 3 2 -24) (m 4 1 -32) (m 5 1 -40) (m 6 0 -48) (m 7 0 -56)))) (values)) (defclass kalyna256 (cipher 32-byte-block-mixin) ((encryption-round-keys :accessor encryption-round-keys :initform (make-array 76 :element-type '(unsigned-byte 64)) :type (simple-array (unsigned-byte 64) (76))) (decryption-round-keys :accessor decryption-round-keys :initform (make-array 76 :element-type '(unsigned-byte 64)) :type (simple-array (unsigned-byte 64) (76))) (n-rounds :accessor n-rounds))) (defmethod schedule-key ((cipher kalyna256) key) (let ((encryption-round-keys (encryption-round-keys cipher)) (decryption-round-keys (decryption-round-keys cipher))) (declare (type (simple-array (unsigned-byte 64) (76)) encryption-round-keys) (type (simple-array (unsigned-byte 64) (76)) decryption-round-keys)) (ecase (length key) (32 (let ((key (make-array 4 :element-type '(unsigned-byte 64) :initial-contents (list (ub64ref/le key 0) (ub64ref/le key 8) (ub64ref/le key 16) (ub64ref/le key 24)))) (ks (make-array 4 :element-type '(unsigned-byte 64))) (ksc (make-array 4 :element-type '(unsigned-byte 64))) (t1 (make-array 4 :element-type '(unsigned-byte 64))) (t2 (make-array 4 :element-type '(unsigned-byte 64))) (k (make-array 4 :element-type '(unsigned-byte 64))) (constant #x0001000100010001)) (declare (type (simple-array (unsigned-byte 64) (4)) key ks ksc t1 t2 k) (dynamic-extent key ks ksc t1 t2 k) (type (unsigned-byte 64) constant)) (setf (n-rounds cipher) 14) (fill t1 0) (setf (aref t1 0) (/ (+ 256 256 64) 64)) (kalyna-add-key 4 t1 0 t2 key) (kalyna-g256 t2 t1 key 0) (kalyna-gl256 t1 t2 0 key 0) (kalyna-g0256 t2 ks) ;; Round 0 (replace k key) (kalyna-add-constant 4 ks ksc constant) (kalyna-add-key 4 k 0 t2 ksc) (kalyna-g256 t2 t1 ksc 0) (kalyna-gl256 t1 encryption-round-keys 0 ksc 0) (kalyna-make-odd-key 4 encryption-round-keys 0 encryption-round-keys 4) ;; Rounds 2 to 13 (flet ((r (n) (kalyna-swap-blocks 4 k) (setf constant (mod64ash constant 1)) (kalyna-add-constant 4 ks ksc constant) (kalyna-add-key 4 k 0 t2 ksc) (kalyna-g256 t2 t1 ksc 0) (kalyna-gl256 t1 encryption-round-keys n ksc 0) (kalyna-make-odd-key 4 encryption-round-keys n encryption-round-keys (+ n 4)))) (r 8) (r 16) (r 24) (r 32) (r 40) (r 48)) ;; Round 14 (kalyna-swap-blocks 4 k) (setf constant (mod64ash constant 1)) (kalyna-add-constant 4 ks ksc constant) (kalyna-add-key 4 k 0 t2 ksc) (kalyna-g256 t2 t1 ksc 0) (kalyna-gl256 t1 encryption-round-keys 56 ksc 0) (replace decryption-round-keys encryption-round-keys) (loop for n from 52 downto 4 by 4 do (kalyna-imc256 decryption-round-keys n)))) (64 (let ((key (make-array 8 :element-type '(unsigned-byte 64) :initial-contents (list (ub64ref/le key 0) (ub64ref/le key 8) (ub64ref/le key 16) (ub64ref/le key 24) (ub64ref/le key 32) (ub64ref/le key 40) (ub64ref/le key 48) (ub64ref/le key 56)))) (ks (make-array 4 :element-type '(unsigned-byte 64))) (ksc (make-array 4 :element-type '(unsigned-byte 64))) (t1 (make-array 4 :element-type '(unsigned-byte 64))) (t2 (make-array 4 :element-type '(unsigned-byte 64))) (k (make-array 8 :element-type '(unsigned-byte 64))) (ko (make-array 4 :element-type '(unsigned-byte 64))) (ka (make-array 4 :element-type '(unsigned-byte 64))) (constant #x0001000100010001)) (declare (type (simple-array (unsigned-byte 64) (8)) key k) (type (simple-array (unsigned-byte 64) (4)) ks ksc t1 t2 ko ka) (dynamic-extent key ks ksc t1 t2 k ko ka) (type (unsigned-byte 64) constant)) (setf (n-rounds cipher) 18) (fill t1 0) (setf (aref t1 0) (/ (+ 512 256 64) 64)) (replace ka key :end2 4) (replace ko key :start2 4) (kalyna-add-key 4 t1 0 t2 ka) (kalyna-g256 t2 t1 ko 0) (kalyna-gl256 t1 t2 0 ka 0) (kalyna-g0256 t2 ks) ;; Round 0 (replace k key) (kalyna-add-constant 4 ks ksc constant) (kalyna-add-key 4 k 0 t2 ksc) (kalyna-g256 t2 t1 ksc 0) (kalyna-gl256 t1 encryption-round-keys 0 ksc 0) (kalyna-make-odd-key 4 encryption-round-keys 0 encryption-round-keys 4) ;; Rounds 2 to 17 (flet ((r (v n) (when (zerop v) (kalyna-swap-blocks 8 k)) (setf constant (mod64ash constant 1)) (kalyna-add-constant 4 ks ksc constant) (kalyna-add-key 4 k v t2 ksc) (kalyna-g256 t2 t1 ksc 0) (kalyna-gl256 t1 encryption-round-keys n ksc 0) (kalyna-make-odd-key 4 encryption-round-keys n encryption-round-keys (+ n 4)))) (r 4 8) (r 0 16) (r 4 24) (r 0 32) (r 4 40) (r 0 48) (r 4 56) (r 0 64)) ;; Round 18 (setf constant (mod64ash constant 1)) (kalyna-add-constant 4 ks ksc constant) (kalyna-add-key 4 k 4 t2 ksc) (kalyna-g256 t2 t1 ksc 0) (kalyna-gl256 t1 encryption-round-keys 72 ksc 0) (replace decryption-round-keys encryption-round-keys) (loop for n from 68 downto 4 by 4 do (kalyna-imc256 decryption-round-keys n))))) cipher)) (define-block-encryptor kalyna256 32 (let ((encryption-round-keys (encryption-round-keys context)) (t1 (make-array 4 :element-type '(unsigned-byte 64))) (t2 (make-array 4 :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (76)) encryption-round-keys) (type (simple-array (unsigned-byte 64) (4)) t1 t2) (dynamic-extent t1 t2)) (setf (aref t2 0) (ub64ref/le plaintext plaintext-start) (aref t2 1) (ub64ref/le plaintext (+ plaintext-start 8)) (aref t2 2) (ub64ref/le plaintext (+ plaintext-start 16)) (aref t2 3) (ub64ref/le plaintext (+ plaintext-start 24))) (kalyna-add-key 4 t2 0 t1 encryption-round-keys) (kalyna-g256 t1 t2 encryption-round-keys 4) (kalyna-g256 t2 t1 encryption-round-keys 8) (kalyna-g256 t1 t2 encryption-round-keys 12) (kalyna-g256 t2 t1 encryption-round-keys 16) (kalyna-g256 t1 t2 encryption-round-keys 20) (kalyna-g256 t2 t1 encryption-round-keys 24) (kalyna-g256 t1 t2 encryption-round-keys 28) (kalyna-g256 t2 t1 encryption-round-keys 32) (kalyna-g256 t1 t2 encryption-round-keys 36) (kalyna-g256 t2 t1 encryption-round-keys 40) (kalyna-g256 t1 t2 encryption-round-keys 44) (kalyna-g256 t2 t1 encryption-round-keys 48) (kalyna-g256 t1 t2 encryption-round-keys 52) (ecase (n-rounds context) (14 (kalyna-gl256 t2 t1 0 encryption-round-keys 56)) (18 (kalyna-g256 t2 t1 encryption-round-keys 56) (kalyna-g256 t1 t2 encryption-round-keys 60) (kalyna-g256 t2 t1 encryption-round-keys 64) (kalyna-g256 t1 t2 encryption-round-keys 68) (kalyna-gl256 t2 t1 0 encryption-round-keys 72))) (setf (ub64ref/le ciphertext ciphertext-start) (aref t1 0) (ub64ref/le ciphertext (+ ciphertext-start 8)) (aref t1 1) (ub64ref/le ciphertext (+ ciphertext-start 16)) (aref t1 2) (ub64ref/le ciphertext (+ ciphertext-start 24)) (aref t1 3)) (values))) (define-block-decryptor kalyna256 32 (let ((decryption-round-keys (decryption-round-keys context)) (t1 (make-array 4 :element-type '(unsigned-byte 64))) (t2 (make-array 4 :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (76)) decryption-round-keys) (type (simple-array (unsigned-byte 64) (4)) t1 t2) (dynamic-extent t1 t2)) (setf (aref t2 0) (ub64ref/le ciphertext ciphertext-start) (aref t2 1) (ub64ref/le ciphertext (+ ciphertext-start 8)) (aref t2 2) (ub64ref/le ciphertext (+ ciphertext-start 16)) (aref t2 3) (ub64ref/le ciphertext (+ ciphertext-start 24))) (ecase (n-rounds context) (14 (kalyna-sub-key 4 t2 t1 decryption-round-keys 56) (kalyna-imc256 t1 0)) (18 (kalyna-sub-key 4 t2 t1 decryption-round-keys 72) (kalyna-imc256 t1 0) (kalyna-ig256 t1 t2 decryption-round-keys 68) (kalyna-ig256 t2 t1 decryption-round-keys 64) (kalyna-ig256 t1 t2 decryption-round-keys 60) (kalyna-ig256 t2 t1 decryption-round-keys 56))) (kalyna-ig256 t1 t2 decryption-round-keys 52) (kalyna-ig256 t2 t1 decryption-round-keys 48) (kalyna-ig256 t1 t2 decryption-round-keys 44) (kalyna-ig256 t2 t1 decryption-round-keys 40) (kalyna-ig256 t1 t2 decryption-round-keys 36) (kalyna-ig256 t2 t1 decryption-round-keys 32) (kalyna-ig256 t1 t2 decryption-round-keys 28) (kalyna-ig256 t2 t1 decryption-round-keys 24) (kalyna-ig256 t1 t2 decryption-round-keys 20) (kalyna-ig256 t2 t1 decryption-round-keys 16) (kalyna-ig256 t1 t2 decryption-round-keys 12) (kalyna-ig256 t2 t1 decryption-round-keys 8) (kalyna-ig256 t1 t2 decryption-round-keys 4) (kalyna-igl256 t2 t1 decryption-round-keys 0) (setf (ub64ref/le plaintext plaintext-start) (aref t1 0) (ub64ref/le plaintext (+ plaintext-start 8)) (aref t1 1) (ub64ref/le plaintext (+ plaintext-start 16)) (aref t1 2) (ub64ref/le plaintext (+ plaintext-start 24)) (aref t1 3)) (values))) (defcipher kalyna256 (:encrypt-function kalyna256-encrypt-block) (:decrypt-function kalyna256-decrypt-block) (:block-length 32) (:key-length (:fixed 32 64))) ;;; ;;; Kalyna512 ;;; (declaim (inline kalyna-g0512)) (defun kalyna-g0512 (x y) (declare (type (simple-array (unsigned-byte 64) (*)) x y) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y 0) (logxor (m 0 0 0) (m 1 7 -8) (m 2 6 -16) (m 3 5 -24) (m 4 4 -32) (m 5 3 -40) (m 6 2 -48) (m 7 1 -56))) (setf (aref y 1) (logxor (m 0 1 0) (m 1 0 -8) (m 2 7 -16) (m 3 6 -24) (m 4 5 -32) (m 5 4 -40) (m 6 3 -48) (m 7 2 -56))) (setf (aref y 2) (logxor (m 0 2 0) (m 1 1 -8) (m 2 0 -16) (m 3 7 -24) (m 4 6 -32) (m 5 5 -40) (m 6 4 -48) (m 7 3 -56))) (setf (aref y 3) (logxor (m 0 3 0) (m 1 2 -8) (m 2 1 -16) (m 3 0 -24) (m 4 7 -32) (m 5 6 -40) (m 6 5 -48) (m 7 4 -56))) (setf (aref y 4) (logxor (m 0 4 0) (m 1 3 -8) (m 2 2 -16) (m 3 1 -24) (m 4 0 -32) (m 5 7 -40) (m 6 6 -48) (m 7 5 -56))) (setf (aref y 5) (logxor (m 0 5 0) (m 1 4 -8) (m 2 3 -16) (m 3 2 -24) (m 4 1 -32) (m 5 0 -40) (m 6 7 -48) (m 7 6 -56))) (setf (aref y 6) (logxor (m 0 6 0) (m 1 5 -8) (m 2 4 -16) (m 3 3 -24) (m 4 2 -32) (m 5 1 -40) (m 6 0 -48) (m 7 7 -56))) (setf (aref y 7) (logxor (m 0 7 0) (m 1 6 -8) (m 2 5 -16) (m 3 4 -24) (m 4 3 -32) (m 5 2 -40) (m 6 1 -48) (m 7 0 -56)))) (values)) (declaim (inline kalyna-gl512)) (defun kalyna-gl512 (x y y-start k k-start) (declare (type (simple-array (unsigned-byte 64) (*)) x y k) (type (integer 0 152) y-start k-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y (+ y-start 0)) (mod64+ (aref k (+ k-start 0)) (logxor (m 0 0 0) (m 1 7 -8) (m 2 6 -16) (m 3 5 -24) (m 4 4 -32) (m 5 3 -40) (m 6 2 -48) (m 7 1 -56)))) (setf (aref y (+ y-start 1)) (mod64+ (aref k (+ k-start 1)) (logxor (m 0 1 0) (m 1 0 -8) (m 2 7 -16) (m 3 6 -24) (m 4 5 -32) (m 5 4 -40) (m 6 3 -48) (m 7 2 -56)))) (setf (aref y (+ y-start 2)) (mod64+ (aref k (+ k-start 2)) (logxor (m 0 2 0) (m 1 1 -8) (m 2 0 -16) (m 3 7 -24) (m 4 6 -32) (m 5 5 -40) (m 6 4 -48) (m 7 3 -56)))) (setf (aref y (+ y-start 3)) (mod64+ (aref k (+ k-start 3)) (logxor (m 0 3 0) (m 1 2 -8) (m 2 1 -16) (m 3 0 -24) (m 4 7 -32) (m 5 6 -40) (m 6 5 -48) (m 7 4 -56)))) (setf (aref y (+ y-start 4)) (mod64+ (aref k (+ k-start 4)) (logxor (m 0 4 0) (m 1 3 -8) (m 2 2 -16) (m 3 1 -24) (m 4 0 -32) (m 5 7 -40) (m 6 6 -48) (m 7 5 -56)))) (setf (aref y (+ y-start 5)) (mod64+ (aref k (+ k-start 5)) (logxor (m 0 5 0) (m 1 4 -8) (m 2 3 -16) (m 3 2 -24) (m 4 1 -32) (m 5 0 -40) (m 6 7 -48) (m 7 6 -56)))) (setf (aref y (+ y-start 6)) (mod64+ (aref k (+ k-start 6)) (logxor (m 0 6 0) (m 1 5 -8) (m 2 4 -16) (m 3 3 -24) (m 4 2 -32) (m 5 1 -40) (m 6 0 -48) (m 7 7 -56)))) (setf (aref y (+ y-start 7)) (mod64+ (aref k (+ k-start 7)) (logxor (m 0 7 0) (m 1 6 -8) (m 2 5 -16) (m 3 4 -24) (m 4 3 -32) (m 5 2 -40) (m 6 1 -48) (m 7 0 -56))))) (values)) (declaim (inline kalyna-imc512)) (defun kalyna-imc512 (x x-start) (declare (type (simple-array (unsigned-byte 64) (*)) x) (type (integer 0 152) x-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c d) `(aref +kalyna-it+ ,a (aref +kalyna-s+ ,b (logand (mod64ash (aref x (+ x-start ,c)) ,d) #xff))))) (setf (aref x (+ x-start 0)) (logxor (m 0 0 0 0) (m 1 1 0 -8) (m 2 2 0 -16) (m 3 3 0 -24) (m 4 0 0 -32) (m 5 1 0 -40) (m 6 2 0 -48) (m 7 3 0 -56))) (setf (aref x (+ x-start 1)) (logxor (m 0 0 1 0) (m 1 1 1 -8) (m 2 2 1 -16) (m 3 3 1 -24) (m 4 0 1 -32) (m 5 1 1 -40) (m 6 2 1 -48) (m 7 3 1 -56))) (setf (aref x (+ x-start 2)) (logxor (m 0 0 2 0) (m 1 1 2 -8) (m 2 2 2 -16) (m 3 3 2 -24) (m 4 0 2 -32) (m 5 1 2 -40) (m 6 2 2 -48) (m 7 3 2 -56))) (setf (aref x (+ x-start 3)) (logxor (m 0 0 3 0) (m 1 1 3 -8) (m 2 2 3 -16) (m 3 3 3 -24) (m 4 0 3 -32) (m 5 1 3 -40) (m 6 2 3 -48) (m 7 3 3 -56))) (setf (aref x (+ x-start 4)) (logxor (m 0 0 4 0) (m 1 1 4 -8) (m 2 2 4 -16) (m 3 3 4 -24) (m 4 0 4 -32) (m 5 1 4 -40) (m 6 2 4 -48) (m 7 3 4 -56))) (setf (aref x (+ x-start 5)) (logxor (m 0 0 5 0) (m 1 1 5 -8) (m 2 2 5 -16) (m 3 3 5 -24) (m 4 0 5 -32) (m 5 1 5 -40) (m 6 2 5 -48) (m 7 3 5 -56))) (setf (aref x (+ x-start 6)) (logxor (m 0 0 6 0) (m 1 1 6 -8) (m 2 2 6 -16) (m 3 3 6 -24) (m 4 0 6 -32) (m 5 1 6 -40) (m 6 2 6 -48) (m 7 3 6 -56))) (setf (aref x (+ x-start 7)) (logxor (m 0 0 7 0) (m 1 1 7 -8) (m 2 2 7 -16) (m 3 3 7 -24) (m 4 0 7 -32) (m 5 1 7 -40) (m 6 2 7 -48) (m 7 3 7 -56)))) (values)) (declaim (inline kalyna-ig512)) (defun kalyna-ig512 (x y k k-start) (declare (type (simple-array (unsigned-byte 64) (*)) x y k) (type (integer 0 152) k-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kalyna-it+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y 0) (logxor (aref k (+ k-start 0)) (m 0 0 0) (m 1 1 -8) (m 2 2 -16) (m 3 3 -24) (m 4 4 -32) (m 5 5 -40) (m 6 6 -48) (m 7 7 -56))) (setf (aref y 1) (logxor (aref k (+ k-start 1)) (m 0 1 0) (m 1 2 -8) (m 2 3 -16) (m 3 4 -24) (m 4 5 -32) (m 5 6 -40) (m 6 7 -48) (m 7 0 -56))) (setf (aref y 2) (logxor (aref k (+ k-start 2)) (m 0 2 0) (m 1 3 -8) (m 2 4 -16) (m 3 5 -24) (m 4 6 -32) (m 5 7 -40) (m 6 0 -48) (m 7 1 -56))) (setf (aref y 3) (logxor (aref k (+ k-start 3)) (m 0 3 0) (m 1 4 -8) (m 2 5 -16) (m 3 6 -24) (m 4 7 -32) (m 5 0 -40) (m 6 1 -48) (m 7 2 -56))) (setf (aref y 4) (logxor (aref k (+ k-start 4)) (m 0 4 0) (m 1 5 -8) (m 2 6 -16) (m 3 7 -24) (m 4 0 -32) (m 5 1 -40) (m 6 2 -48) (m 7 3 -56))) (setf (aref y 5) (logxor (aref k (+ k-start 5)) (m 0 5 0) (m 1 6 -8) (m 2 7 -16) (m 3 0 -24) (m 4 1 -32) (m 5 2 -40) (m 6 3 -48) (m 7 4 -56))) (setf (aref y 6) (logxor (aref k (+ k-start 6)) (m 0 6 0) (m 1 7 -8) (m 2 0 -16) (m 3 1 -24) (m 4 2 -32) (m 5 3 -40) (m 6 4 -48) (m 7 5 -56))) (setf (aref y 7) (logxor (aref k (+ k-start 7)) (m 0 7 0) (m 1 0 -8) (m 2 1 -16) (m 3 2 -24) (m 4 3 -32) (m 5 4 -40) (m 6 5 -48) (m 7 6 -56)))) (values)) (declaim (inline kalyna-igl512)) (defun kalyna-igl512 (x y k k-start) (declare (type (simple-array (unsigned-byte 64) (*)) x y k) (type (integer 0 152) k-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c d) `(mod64ash (aref +kalyna-is+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)) ,d))) (setf (aref y 0) (mod64- (logxor (m 0 0 0 0) (m 1 1 -8 8) (m 2 2 -16 16) (m 3 3 -24 24) (m 0 4 -32 32) (m 1 5 -40 40) (m 2 6 -48 48) (m 3 7 -56 56)) (aref k (+ k-start 0)))) (setf (aref y 1) (mod64- (logxor (m 0 1 0 0) (m 1 2 -8 8) (m 2 3 -16 16) (m 3 4 -24 24) (m 0 5 -32 32) (m 1 6 -40 40) (m 2 7 -48 48) (m 3 0 -56 56)) (aref k (+ k-start 1)))) (setf (aref y 2) (mod64- (logxor (m 0 2 0 0) (m 1 3 -8 8) (m 2 4 -16 16) (m 3 5 -24 24) (m 0 6 -32 32) (m 1 7 -40 40) (m 2 0 -48 48) (m 3 1 -56 56)) (aref k (+ k-start 2)))) (setf (aref y 3) (mod64- (logxor (m 0 3 0 0) (m 1 4 -8 8) (m 2 5 -16 16) (m 3 6 -24 24) (m 0 7 -32 32) (m 1 0 -40 40) (m 2 1 -48 48) (m 3 2 -56 56)) (aref k (+ k-start 3)))) (setf (aref y 4) (mod64- (logxor (m 0 4 0 0) (m 1 5 -8 8) (m 2 6 -16 16) (m 3 7 -24 24) (m 0 0 -32 32) (m 1 1 -40 40) (m 2 2 -48 48) (m 3 3 -56 56)) (aref k (+ k-start 4)))) (setf (aref y 5) (mod64- (logxor (m 0 5 0 0) (m 1 6 -8 8) (m 2 7 -16 16) (m 3 0 -24 24) (m 0 1 -32 32) (m 1 2 -40 40) (m 2 3 -48 48) (m 3 4 -56 56)) (aref k (+ k-start 5)))) (setf (aref y 6) (mod64- (logxor (m 0 6 0 0) (m 1 7 -8 8) (m 2 0 -16 16) (m 3 1 -24 24) (m 0 2 -32 32) (m 1 3 -40 40) (m 2 4 -48 48) (m 3 5 -56 56)) (aref k (+ k-start 6)))) (setf (aref y 7) (mod64- (logxor (m 0 7 0 0) (m 1 0 -8 8) (m 2 1 -16 16) (m 3 2 -24 24) (m 0 3 -32 32) (m 1 4 -40 40) (m 2 5 -48 48) (m 3 6 -56 56)) (aref k (+ k-start 7))))) (values)) (declaim (inline kalyna-g512)) (defun kalyna-g512 (x y k k-start) (declare (type (simple-array (unsigned-byte 64) (*)) x y k) (type (integer 0 152) k-start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kalyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y 0) (logxor (aref k (+ k-start 0)) (m 0 0 0) (m 1 7 -8) (m 2 6 -16) (m 3 5 -24) (m 4 4 -32) (m 5 3 -40) (m 6 2 -48) (m 7 1 -56))) (setf (aref y 1) (logxor (aref k (+ k-start 1)) (m 0 1 0) (m 1 0 -8) (m 2 7 -16) (m 3 6 -24) (m 4 5 -32) (m 5 4 -40) (m 6 3 -48) (m 7 2 -56))) (setf (aref y 2) (logxor (aref k (+ k-start 2)) (m 0 2 0) (m 1 1 -8) (m 2 0 -16) (m 3 7 -24) (m 4 6 -32) (m 5 5 -40) (m 6 4 -48) (m 7 3 -56))) (setf (aref y 3) (logxor (aref k (+ k-start 3)) (m 0 3 0) (m 1 2 -8) (m 2 1 -16) (m 3 0 -24) (m 4 7 -32) (m 5 6 -40) (m 6 5 -48) (m 7 4 -56))) (setf (aref y 4) (logxor (aref k (+ k-start 4)) (m 0 4 0) (m 1 3 -8) (m 2 2 -16) (m 3 1 -24) (m 4 0 -32) (m 5 7 -40) (m 6 6 -48) (m 7 5 -56))) (setf (aref y 5) (logxor (aref k (+ k-start 5)) (m 0 5 0) (m 1 4 -8) (m 2 3 -16) (m 3 2 -24) (m 4 1 -32) (m 5 0 -40) (m 6 7 -48) (m 7 6 -56))) (setf (aref y 6) (logxor (aref k (+ k-start 6)) (m 0 6 0) (m 1 5 -8) (m 2 4 -16) (m 3 3 -24) (m 4 2 -32) (m 5 1 -40) (m 6 0 -48) (m 7 7 -56))) (setf (aref y 7) (logxor (aref k (+ k-start 7)) (m 0 7 0) (m 1 6 -8) (m 2 5 -16) (m 3 4 -24) (m 4 3 -32) (m 5 2 -40) (m 6 1 -48) (m 7 0 -56)))) (values)) (defclass kalyna512 (cipher 64-byte-block-mixin) ((encryption-round-keys :accessor encryption-round-keys :initform (make-array 152 :element-type '(unsigned-byte 64)) :type (simple-array (unsigned-byte 64) (152))) (decryption-round-keys :accessor decryption-round-keys :initform (make-array 152 :element-type '(unsigned-byte 64)) :type (simple-array (unsigned-byte 64) (152))) (n-rounds :accessor n-rounds))) (defmethod schedule-key ((cipher kalyna512) key) (let ((encryption-round-keys (encryption-round-keys cipher)) (decryption-round-keys (decryption-round-keys cipher)) (key (make-array 8 :element-type '(unsigned-byte 64) :initial-contents (list (ub64ref/le key 0) (ub64ref/le key 8) (ub64ref/le key 16) (ub64ref/le key 24) (ub64ref/le key 32) (ub64ref/le key 40) (ub64ref/le key 48) (ub64ref/le key 56)))) (ks (make-array 8 :element-type '(unsigned-byte 64))) (ksc (make-array 8 :element-type '(unsigned-byte 64))) (t1 (make-array 8 :element-type '(unsigned-byte 64))) (t2 (make-array 8 :element-type '(unsigned-byte 64))) (k (make-array 8 :element-type '(unsigned-byte 64))) (constant #x0001000100010001)) (declare (type (simple-array (unsigned-byte 64) (152)) encryption-round-keys) (type (simple-array (unsigned-byte 64) (152)) decryption-round-keys) (type (simple-array (unsigned-byte 64) (8)) key ks ksc t1 t2 k) (dynamic-extent key ks ksc t1 t2 k) (type (unsigned-byte 64) constant)) (setf (n-rounds cipher) 18) (fill t1 0) (setf (aref t1 0) (/ (+ 512 512 64) 64)) (kalyna-add-key 8 t1 0 t2 key) (kalyna-g512 t2 t1 key 0) (kalyna-gl512 t1 t2 0 key 0) (kalyna-g0512 t2 ks) ;; Round 0 (replace k key) (kalyna-add-constant 8 ks ksc constant) (kalyna-add-key 8 k 0 t2 ksc) (kalyna-g512 t2 t1 ksc 0) (kalyna-gl512 t1 encryption-round-keys 0 ksc 0) (kalyna-make-odd-key 8 encryption-round-keys 0 encryption-round-keys 8) ;; Rounds 2 to 17 (flet ((r (n) (kalyna-swap-blocks 8 k) (setf constant (mod64ash constant 1)) (kalyna-add-constant 8 ks ksc constant) (kalyna-add-key 8 k 0 t2 ksc) (kalyna-g512 t2 t1 ksc 0) (kalyna-gl512 t1 encryption-round-keys n ksc 0) (kalyna-make-odd-key 8 encryption-round-keys n encryption-round-keys (+ n 8)))) (r 16) (r 32) (r 48) (r 64) (r 80) (r 96) (r 112) (r 128)) ;; Round 18 (kalyna-swap-blocks 8 k) (setf constant (mod64ash constant 1)) (kalyna-add-constant 8 ks ksc constant) (kalyna-add-key 8 k 0 t2 ksc) (kalyna-g512 t2 t1 ksc 0) (kalyna-gl512 t1 encryption-round-keys 144 ksc 0) (replace decryption-round-keys encryption-round-keys) (loop for n from 136 downto 8 by 8 do (kalyna-imc512 decryption-round-keys n)) cipher)) (define-block-encryptor kalyna512 64 (let ((encryption-round-keys (encryption-round-keys context)) (t1 (make-array 8 :element-type '(unsigned-byte 64))) (t2 (make-array 8 :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (152)) encryption-round-keys) (type (simple-array (unsigned-byte 64) (8)) t1 t2) (dynamic-extent t1 t2)) (setf (aref t2 0) (ub64ref/le plaintext plaintext-start) (aref t2 1) (ub64ref/le plaintext (+ plaintext-start 8)) (aref t2 2) (ub64ref/le plaintext (+ plaintext-start 16)) (aref t2 3) (ub64ref/le plaintext (+ plaintext-start 24)) (aref t2 4) (ub64ref/le plaintext (+ plaintext-start 32)) (aref t2 5) (ub64ref/le plaintext (+ plaintext-start 40)) (aref t2 6) (ub64ref/le plaintext (+ plaintext-start 48)) (aref t2 7) (ub64ref/le plaintext (+ plaintext-start 56))) (kalyna-add-key 8 t2 0 t1 encryption-round-keys) (kalyna-g512 t1 t2 encryption-round-keys 8) (kalyna-g512 t2 t1 encryption-round-keys 16) (kalyna-g512 t1 t2 encryption-round-keys 24) (kalyna-g512 t2 t1 encryption-round-keys 32) (kalyna-g512 t1 t2 encryption-round-keys 40) (kalyna-g512 t2 t1 encryption-round-keys 48) (kalyna-g512 t1 t2 encryption-round-keys 56) (kalyna-g512 t2 t1 encryption-round-keys 64) (kalyna-g512 t1 t2 encryption-round-keys 72) (kalyna-g512 t2 t1 encryption-round-keys 80) (kalyna-g512 t1 t2 encryption-round-keys 88) (kalyna-g512 t2 t1 encryption-round-keys 96) (kalyna-g512 t1 t2 encryption-round-keys 104) (kalyna-g512 t2 t1 encryption-round-keys 112) (kalyna-g512 t1 t2 encryption-round-keys 120) (kalyna-g512 t2 t1 encryption-round-keys 128) (kalyna-g512 t1 t2 encryption-round-keys 136) (kalyna-gl512 t2 t1 0 encryption-round-keys 144) (setf (ub64ref/le ciphertext ciphertext-start) (aref t1 0) (ub64ref/le ciphertext (+ ciphertext-start 8)) (aref t1 1) (ub64ref/le ciphertext (+ ciphertext-start 16)) (aref t1 2) (ub64ref/le ciphertext (+ ciphertext-start 24)) (aref t1 3) (ub64ref/le ciphertext (+ ciphertext-start 32)) (aref t1 4) (ub64ref/le ciphertext (+ ciphertext-start 40)) (aref t1 5) (ub64ref/le ciphertext (+ ciphertext-start 48)) (aref t1 6) (ub64ref/le ciphertext (+ ciphertext-start 56)) (aref t1 7)) (values))) (define-block-decryptor kalyna512 64 (let ((decryption-round-keys (decryption-round-keys context)) (t1 (make-array 8 :element-type '(unsigned-byte 64))) (t2 (make-array 8 :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (152)) decryption-round-keys) (type (simple-array (unsigned-byte 64) (8)) t1 t2) (dynamic-extent t1 t2)) (setf (aref t2 0) (ub64ref/le ciphertext ciphertext-start) (aref t2 1) (ub64ref/le ciphertext (+ ciphertext-start 8)) (aref t2 2) (ub64ref/le ciphertext (+ ciphertext-start 16)) (aref t2 3) (ub64ref/le ciphertext (+ ciphertext-start 24)) (aref t2 4) (ub64ref/le ciphertext (+ ciphertext-start 32)) (aref t2 5) (ub64ref/le ciphertext (+ ciphertext-start 40)) (aref t2 6) (ub64ref/le ciphertext (+ ciphertext-start 48)) (aref t2 7) (ub64ref/le ciphertext (+ ciphertext-start 56))) (kalyna-sub-key 8 t2 t1 decryption-round-keys 144) (kalyna-imc512 t1 0) (kalyna-ig512 t1 t2 decryption-round-keys 136) (kalyna-ig512 t2 t1 decryption-round-keys 128) (kalyna-ig512 t1 t2 decryption-round-keys 120) (kalyna-ig512 t2 t1 decryption-round-keys 112) (kalyna-ig512 t1 t2 decryption-round-keys 104) (kalyna-ig512 t2 t1 decryption-round-keys 96) (kalyna-ig512 t1 t2 decryption-round-keys 88) (kalyna-ig512 t2 t1 decryption-round-keys 80) (kalyna-ig512 t1 t2 decryption-round-keys 72) (kalyna-ig512 t2 t1 decryption-round-keys 64) (kalyna-ig512 t1 t2 decryption-round-keys 56) (kalyna-ig512 t2 t1 decryption-round-keys 48) (kalyna-ig512 t1 t2 decryption-round-keys 40) (kalyna-ig512 t2 t1 decryption-round-keys 32) (kalyna-ig512 t1 t2 decryption-round-keys 24) (kalyna-ig512 t2 t1 decryption-round-keys 16) (kalyna-ig512 t1 t2 decryption-round-keys 8) (kalyna-igl512 t2 t1 decryption-round-keys 0) (setf (ub64ref/le plaintext plaintext-start) (aref t1 0) (ub64ref/le plaintext (+ plaintext-start 8)) (aref t1 1) (ub64ref/le plaintext (+ plaintext-start 16)) (aref t1 2) (ub64ref/le plaintext (+ plaintext-start 24)) (aref t1 3) (ub64ref/le plaintext (+ plaintext-start 32)) (aref t1 4) (ub64ref/le plaintext (+ plaintext-start 40)) (aref t1 5) (ub64ref/le plaintext (+ plaintext-start 48)) (aref t1 6) (ub64ref/le plaintext (+ plaintext-start 56)) (aref t1 7)) (values))) (defcipher kalyna512 (:encrypt-function kalyna512-encrypt-block) (:decrypt-function kalyna512-decrypt-block) (:block-length 64) (:key-length (:fixed 64))) ironclad-0.57/src/ciphers/keystream.lisp000066400000000000000000000052731420372057600203760ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; keystream.lisp (in-package :crypto) (defun keystream-position (cipher &optional position) "Return or change the current POSITION within the key stream of a CIPHER." (let ((mode (mode cipher))) (cond ((typep mode 'ctr-mode) (let ((block-length (block-length cipher)) (iv-position (iv-position mode)) (keystream-blocks (keystream-blocks mode))) (if (null position) (if (zerop iv-position) (* block-length keystream-blocks) (+ (* block-length (1- keystream-blocks)) iv-position)) (let ((iv (iv mode)) (buffer (make-array block-length :element-type '(unsigned-byte 8)))) (multiple-value-bind (q r) (truncate position block-length) (if (< q keystream-blocks) (decrement-counter-block iv (- keystream-blocks q)) (increment-counter-block iv (- q keystream-blocks))) (setf (keystream-blocks mode) q) (setf (iv-position mode) 0) (encrypt-in-place cipher buffer :end r) t))))) ((typep cipher 'chacha) (let ((state (chacha-state cipher))) (if (null position) (let ((counter (+ (aref state 12) (ash (aref state 13) 32)))) (- (* 64 counter) (chacha-keystream-buffer-remaining cipher))) (let ((buffer (make-array 64 :element-type '(unsigned-byte 8)))) (declare (dynamic-extent buffer)) (multiple-value-bind (q r) (truncate position 64) (setf (aref state 12) (logand q #xffffffff)) (setf (aref state 13) (logand (ash q -32) #xffffffff)) (setf (chacha-keystream-buffer-remaining cipher) 0) (encrypt-in-place cipher buffer :end r) t))))) ((typep cipher 'salsa20) (let ((state (salsa20-state cipher))) (if (null position) (let ((counter (+ (aref state 8) (ash (aref state 9) 32)))) (- (* 64 counter) (salsa20-keystream-buffer-remaining cipher))) (let ((buffer (make-array 64 :element-type '(unsigned-byte 8)))) (declare (dynamic-extent buffer)) (multiple-value-bind (q r) (truncate position 64) (setf (aref state 8) (logand q #xffffffff)) (setf (aref state 9) (logand (ash q -32) #xffffffff)) (setf (salsa20-keystream-buffer-remaining cipher) 0) (encrypt-in-place cipher buffer :end r) t))))) (t nil)))) ironclad-0.57/src/ciphers/kuznyechik.lisp000066400000000000000000023613521420372057600205630ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; kuznyechik.lisp -- implementation of the Kuznyechik block cipher (GOST R 34.12-2015) (in-package :crypto) (in-ironclad-readtable) ;;; ;;; Constants ;;; (eval-when (:compile-toplevel :load-toplevel :execute) (defconst +kuznyechik-s+ #8@(252 238 221 17 207 110 49 22 251 196 250 218 35 197 4 77 233 119 240 219 147 46 153 186 23 54 241 187 20 205 95 193 249 24 101 90 226 92 239 33 129 28 60 66 139 1 142 79 5 132 2 174 227 106 143 160 6 11 237 152 127 212 211 31 235 52 44 81 234 200 72 171 242 42 104 162 253 58 206 204 181 112 14 86 8 12 118 18 191 114 19 71 156 183 93 135 21 161 150 41 16 123 154 199 243 145 120 111 157 158 178 177 50 117 25 61 255 53 138 126 109 84 198 128 195 189 13 87 223 245 36 169 62 168 67 201 215 121 214 246 124 34 185 3 224 15 236 222 122 148 176 188 220 232 40 80 78 51 10 74 167 151 96 115 30 0 98 68 26 184 56 130 100 159 38 65 173 69 70 146 39 94 85 47 140 163 165 125 105 213 149 59 7 88 179 64 134 172 29 247 48 55 107 228 136 217 231 137 225 27 131 73 76 63 248 254 141 83 170 144 202 216 133 97 32 113 103 164 45 43 9 91 203 155 37 208 190 229 108 82 89 166 116 210 230 244 180 192 209 102 175 194 57 75 99 182)) (defconst +kuznyechik-is+ #8@(165 45 50 143 14 48 56 192 84 230 158 57 85 126 82 145 100 3 87 90 28 96 7 24 33 114 168 209 41 198 164 63 224 39 141 12 130 234 174 180 154 99 73 229 66 228 21 183 200 6 112 157 65 117 25 201 170 252 77 191 42 115 132 213 195 175 43 134 167 177 178 91 70 211 159 253 212 15 156 47 155 67 239 217 121 182 83 127 193 240 35 231 37 94 181 30 162 223 166 254 172 34 249 226 74 188 53 202 238 120 5 107 81 225 89 163 242 113 86 17 106 137 148 101 140 187 119 60 123 40 171 210 49 222 196 95 204 207 118 44 184 216 46 54 219 105 179 20 149 190 98 161 59 22 102 233 92 108 109 173 55 97 75 185 227 186 241 160 133 131 218 71 197 176 51 250 150 111 110 194 246 80 255 93 169 142 23 27 151 125 236 88 247 31 251 124 9 13 122 103 69 135 220 232 79 29 78 4 235 248 243 62 61 189 138 136 221 205 11 19 152 2 147 128 144 208 36 52 203 237 244 206 153 16 68 64 146 58 1 38 18 26 72 104 245 129 139 199 214 32 10 8 0 76 215 116)) (defconst +kuznyechik-t+ (make-array '(16 256 2) :element-type '(unsigned-byte 64) :initial-contents '(((#x9680c07a0cd5fbe9 #xb5aec91b93871119) (#xce1a17b28ce00819 #x0af2fef8abfc327b) (#x77dcb250a2d0cbbf #x89c7884eefcabdc0) (#xd642635e1a104162 #xc01393d33c12c469) (#x2f46659822e5384f #x369bbfadd7b19ea2) (#xe74a6f116a39b338 #xefc0cb2f2997703c) (#x4d567d06c2b71ffb #x68fe0f96fd783508) (#x7379a4c39bf8884a #xaa09c5a389e794c7) (#x33bb07e78d3d32c1 #xdfb49f6b267241b7) (#xf79b37188e997c6a #x637e3c1d7223d420) (#x49f36b95fb9f5c0e #x4b30427b9b551c0f) (#xd2e775cd23380297 #xe3ddde3e5a3fed6e) (#x15ccaace4282ec0b #xd7a23875c503166a) (#x8dd35b6af83b12a5 #xf7fae10dcf048998) (#x2be3730b1bcd7bba #x1555f240b19cb7a5) (#xf286c5df28bb5f33 #x3862f35aec946656) (#x6b21d02f0d08c131 #x60e8a8881e0962d5) (#x670dea59467004ed #x05797f7cb47e19dc) (#xeb665567214176e4 #x8a511cdb83e00b35) (#xa8af19bf559a6c58 #x7759032ee718b0d6) (#x0b82c319104e261e #xceeadf2407373c9d) (#x126253a119b40fc9 #x7cd930a5684351fe) (#xa917fdebca900cf4 #x0f8b81841f822ba7) (#xbcdb57258812e0ff #xd829b9f1da813dcd) (#x0931c8b1ed5ae685 #x3e8d18b334c0c97f) (#xe86dba9b435fd6d3 #x02e459e6488d65a6) (#x912e391557e3182b #x1ed5c1cb3ec7568d) (#xc6933b57feb08e30 #x4cad64e167a66075) (#x87e97c27777f5417 #x41c2bc8330a92e74) (#xdbd6bd7cce62e412 #xdd50c68d6eff2411) (#xaa1c1217a88eacc3 #x873ec4b9d4ef4534) (#xa6302861e3f6691f #xe2af134d7e983e3d) (#xc72bdf0361baee9c #x347fe64b9f3cfb04) (#xfa0fe93a5aebd91a #x7e3d694320ce3458) (#x3f973d91c645f71d #xba25489f8c053abe) (#xfbb70d6ec5e1b9b6 #x06efebe9d854af29) (#xb3fc82afa1748514 #x350d2b38bb9b2857) (#x24c4a68132ab1e51 #xf8716089d086a23f) (#xb4527bc0fa4266d6 #x9e7623e816db6fc3) (#xe15c722aae053056 #x3c6941557c4dacd9) (#x531814d1907bd5ee #x71b6e8c73f4c1fff) (#xd1ec9a314126a2a0 #x6b689b03915283fd) (#x4af884699981fc39 #xc38507465038729c) (#x01b8e4549f0a60ac #x78d282aaf89a9b71) (#xf18d2a234aa5ff04 #xb0d7b66727f908c5) (#x7a486c7276a26ecf #x9484dd10bd275db8) (#xa026355a27caea71 #x310699372b42e2d8) (#x06161d3bc43c836e #xd3a98a7a55dadce5) (#x51ab1f796d6f1575 #x81d12f500cbbea1d) (#x02b30ba8fd14c09b #xf067c79733f7f5e2) (#xf490d8e4ec87dc5d #xebcb7920b94ebab3) (#x3b322b02ff6db4e8 #x99eb0572ea2813b9) (#xc9b4eeddd7d6ebdb #xa189f62806bc75ef) (#xcca91c1a71f4c882 #xfa95396f980bc799) (#xda6e5928516884be #xa58244279665bf60) (#xb24466fb3e7ee5b8 #x4ddfa9924301b326) (#xdf73abeff74aa7e7 #xfe9e8b6008d20d16) (#xd8dd5280ac7c4425 #x55e583b0a5924a82) (#x40c2a32416c5ba8b #x75bd5ac8af95d570) (#xd35f9199bc32623b #x9b0f5c94a2a5761f) (#x31080c4f7029f25a #x2fd358fc1585b455) (#x5b913834e22b53c7 #x37e972def3164df1) (#xfeaaffa963c39aef #x5df324ae46e31d5f) (#x5f342ea7db031032 #x14273f33953b64f6) (#x9fb108cbe18f1d6c #x8b23d1a8a747d866) (#x1cfd627fafd80a8e #xe92f20c6f1c3df15) (#xe6f28b45f533d394 #x97124985d10deb4d) (#x236a5fee699dfd93 #x530a68597dc6e5ab) (#xe5f964b9972d73a3 #x1fa70cb81a6085de) (#x8a7da205a30df167 #x5c81e9dd6244ce0c) (#xa32ddaa645d44a46 #xb9b3dc0ae02f8c4b) (#x6a99347b9202a19d #x183a2a22e693f9a4) (#x1ff68d83cdc6aab9 #x619a65fb3aaeb186) (#x398120aa02797473 #x698cc2e5d9dfe65b) (#x3839c4fe9d7314df #x115e404f21457d2a) (#x46d4be1fd2f939e5 #xa614d0b2fa4f0995) (#xecc8ac087a779526 #x212a140b2ea04ca1) (#x958b2f866ecb5bde #x3d1b8c2658ea7f8a) (#x550e09ea54475680 #xa21f62bd6a96c31a) (#xa19ed10eb8c08add #x49d41b9dd3d879a9) (#x4fe576ae3fa3df60 #x9899c801ce8fc0ea) (#xc2362dc4c798cdc5 #x6f63290c018b4972) (#x89764df9c1135150 #xd434ace0a929a09f) (#x86519873e87534bb #x39103e29c833b505) (#x5605e6163659f6b7 #x2aaa2780a1fbad89) (#x7de6951d2d948d0d #x3fffd5c010671a2c) (#x1d45862b30d26a22 #x91fda26c09594464) (#x589ad7c88035f3f0 #xbf5c37e3387b2362) (#xed70485ce57df58a #x59f896a1d63ad7d0) (#x36a6f5202b1f1198 #x84a8502cb8c5f3c1) (#x22d2bbbaf6979d3f #x2bd8eaf3855c7eda) (#x5013fb2df26575d9 #xf903adfaf421716c) (#xf8bce292a7ff1981 #x8e5aaed41339c1ba) (#xbb75ae4ad324033d #x7352b12177c17a59) (#x5e8ccaf34409709e #x6cf5bd996da1ff87) (#x8c6bbf3e67317209 #x8f2863a7379e12e9) (#xfda1105501dd3ad8 #xd54661938d8e73cc) (#xc80c0a8948dc8b77 #xd95b7482fe26ee9e) (#x5a29dc607d21336b #x4f3bf0740b8cd680) (#xb759943c985cc6e1 #x16c366d5ddb60150) (#xac0a0f2c6cb22fad #x54974ec3813599d1) (#x1aeb7f446be489e0 #x3a86aabca41903f0) (#x27cf497d50b5be66 #x70c425b41bebccac) (#x7943838e14bccef8 #x1c31982d764a332b) (#x65bee1f1bb64c476 #xf51eb8eb8789ec3e) (#xff121bfdfcc9fa43 #x2521a604be79862e) (#x9433cbd2f1c13b72 #x45c90e8ca070e4fb) (#x9d0203631c9bddf7 #x7b44163f94b02d84) (#x82f48ee0d15d774e #x1ade73c4ae1e9c02) (#x0c2c3a764b78c5dc #x6591d7f4aa777b09) (#xeadeb133be4b1648 #xf2839e717b7a9044) (#x640605a5246ea4da #x8dcc3a417f13774f) (#xc38ec9905892ad69 #x17b1aba6f911d203) (#x939d32bdaaf7d8b0 #xeeb2065c0d30a36f) (#x804785482c49b7d5 #xeab9b4539de969e0) (#x30b0e81bef2392f6 #x5701da56ed1f2f24) (#x185874ec96f0497b #xcae16d2b97eef612) (#x66b50e0dd97a6441 #x7dabfdd64ce482ad) (#x8bc546513c0791cb #x24536b779ade557d) (#x4b40603d068b9c95 #xbb5785eca8a2e9ed) (#x6992db87f01c01aa #x908f6f1f2dfe9737) (#x72c1409704f2e8e6 #xd2db4709717d0fb6) (#x030beffc621ea037 #x88b5453dcb6d6e93) (#x295078a3e6d9bb21 #xe53235d7826b4247) (#x52a0f0850f71b542 #x09646a6dc7d6848e) (#x19e090b809fa29d7 #xb233ef816f746d63) (#x07aef96f5b36e3c2 #xab7b08d0ad404794) (#xfc19f4019ed75a74 #xad94e3397514e8bd) (#x834c6ab44e5717e2 #x620cf16e56840773) (#xbacd4a1e4c2e6391 #x0b80338b8f5be128) (#xb0f76d53c36a2523 #xbdb86e0570f646c4) (#x9e09ec9f7e857dc0 #xf3f153025fdd4317) (#xbe685c8d75062064 #x284e7e66e976c82f) (#xe44180ed0827130f #x67758e12e2fa1eaf) (#x7bf08826e9a80e63 #xec565fba45bdc6c9) (#xf035ce77d5af9fa8 #xc80534cddf6393b4) (#xd5498ca2780ee155 #x48a6d6eef77faafa) (#xee7ba7a0876355bd #xd14dd39c1d57b943) (#xaf01e0d00eac8f9a #xdc220bfe4a58f742) (#x3415fe88d60bd103 #x74cf97bb8b320623) (#xbfd0b8d9ea0c40c8 #x509cfccc11ec535e) (#x6f84c6bc342082c4 #x4326e56578244bd2) (#x3203e3b31237526d #xa7661dc1dee8dac6) (#x8ed8b4969a25b292 #x7f4fa4300469e70b) (#x476c5a4b4df35949 #xdec6521802d592e4) (#xf33e218bb7b13f9f #x40b071f0140efd27) (#x3a8acf566067d444 #xe13987d812b288c8) (#xf90406c638f5792d #xf6882c7eeba35acb) (#x60a313361d46e72f #xae0277ac193e5e48) (#xaeb9048491a6ef36 #xa4f08954b2c26c33) (#x1e4e69d752ccca15 #x1948e751c2342af7) (#x63a8fcca7f584718 #x26b73291d25330db) (#x0d94de22d472a570 #x1d43555e52ede078) (#x1169bc5d7baaaffe #xf46c7598a32e3f6d) (#xcd11f84eeefea82e #x8247bbc560915ce8) (#x5922339c1f3f935c #xc78eb549c0e1b813) (#x7c5e7149b29eeda1 #x472d576ae8fd815d) (#xb9c6a5e22e30c3a6 #x833576b644368fbb) (#xa2953ef2dade2aea #xc1615ea018b5173a) (#x57bd0242a953961b #x5278a52a596136f8) (#x177fa166bf962c90 #x27c5ffe2f6f4e388) (#x2061b0120b835da4 #xdbbf2d64b6ab8b38) (#x6e3c22e8ab2ae268 #x3bf467cf80bed0a3) (#x4cee99525dbd7f57 #x102c8d3c05e2ae79) (#x257c42d5ada17efd #x80a3e223281c394e) (#x0000000000000000 #x0000000000000000) (#x9aacfa0c47ad3e35 #xd03f1eef39f06a10) (#xdecb4fbb6840c74b #x864c09caf0489667) (#x0e9f31deb66c0547 #x95f6106399808eeb) (#x484b8fc164953ca2 #x33e2c0d163cf877e) (#x611bf762824c8783 #xd6d0f506e1a4c539) (#xddc0a0470a5e677c #x0ef94cf73b25f8f4) (#x45df51e3b0e799d2 #x2ea1958f31226706) (#x766456043ddaab13 #xf1150ae4175026b1) (#x4467b5b72fedf97e #x56731725c9b8fc77) (#x8f6050c2052fd23e #x079d269afcf37c7a) (#xb5ea9f946548067a #xe6a4a142ee41f4b2) (#xa48323c91ee2a984 #x12c8d4da4d6fcbdf) (#x2a5b975f84c71b16 #x6d8770ea49062cd4) (#x71caaf6b66ec48d1 #x5a6e0234ba106125) (#x3e2fd9c5594f97b1 #xc2f7ca35749fa1cf) (#xd0547e65de2cc20c #x13ba19a969c8188c) (#x08892ce572508629 #x465f9a19cc5a520e) (#x682a3fd36f166106 #xe85dedb5d5640c46) (#x54b6edbecb4d362c #xdacde017920c586b) (#x3c9cd26da45b572a #x32900da24768542d) (#xe3ef79825311f0cd #xcc0e86c24fba593b) (#xc598d4ab9cae2e07 #xc41821dcaccb0ee6) (#x4271a88cebd17a10 #x85da9d5f9c622092) (#x21d9544694893d08 #xa36dafce4e311049) (#xd4f168f6e70481f9 #x307454440fe5318b) (#xefc343f418693511 #xa99f5136e5cd2232) (#xa53bc79d81e8c928 #x6a1a5670b5f550ae) (#x0f27d58a296665eb #xed2492c9611a159a) (#x9096dd41c8e97887 #x66074361c65dcdfc) (#xf5283cb0738dbcf1 #x9319fb8a41d421c2) (#xf623d34c11931cc6 #x1bacbeb78ab94f51) (#xcfa2f3e613ea68b5 #x72207c525366a90a) (#xaba4f6433784cc6f #xffec46132c75de45) (#x4e5d92faa0a9bfcc #xe04b4aab36155b9b) (#x371e1174b4157134 #xfc7ad286405f68b0) (#x9225d6e935fdb81c #x966084f6f5aa381e) (#xb6e170680756a64d #x6e11e47f252c9a21) (#x6c8f2940563e22f3 #xcb93a058b3492541) (#x7f559eb5d0804d96 #xcf9812572390efce) (#x5c3fc15bb91db005 #x9c927a0e5e560a65) (#xe2579dd6cc1b9061 #xb4dc0468b720c24a) (#x051df2c7a6222359 #x5b1ccf479eb7b276) (#x3d2436393b513786 #x4a428f08bff2cf5c) (#x74d75dacc0ce6b88 #x0172cd7324a7d353) (#xa788cc357cfc09b3 #x9a7d91e78602a54c) (#xd965b6d433762489 #x2d37011a5d08d1f3) (#x88cea9ad5e1931fc #xace62e4a51b33bee) (#xc42030ff03a44eab #xbccaa37654519597) (#xbd63b37117188053 #xa0fb3b5b221ba6bc) (#x6210189ee05227b4 #x5e65b03b2ac9abaa) (#x2efe81ccbdef58e3 #x4e493d072f2b05d3) (#xd7fa870a851a21ce #xb8c11179c4885f18) (#x10d15809e4a0cf52 #x8cbef7325bb4a41c) (#x855a778f8a6b948c #xb1a57b14035edb96) (#x7eed7ae14f8a2d3a #xb74a90fddb0a74bf) (#x2677ad29cfbfdeca #x0816a71ee37157dd) (#x78fb67da8bb6ae54 #x64e31a878ed0a85a) (#x14744e9add888ca7 #xaf70badf3d998d1b) (#x9b141e58d8a75e99 #xa8ed9c45c16af161) (#xb87e41b6b13aa30a #xfbe7f41cbcac14ca) (#xcb07e5752ac22b40 #x51ee31bf354b800d) (#x99a715f025b39e02 #x588a5bd2f29d0483) (#x9cbae7378391bd5b #x039694956c2ab6f5) (#x43c94cd874db1abc #xfd081ff564f8bbe3) (#x2c4d8a6440fb9878 #xbe2efa901cdcf031) (#x81ff611cb343d779 #x926b36f96573f291) (#x04a51693392843f5 #x23ce4ded662d2907) (#x5d87250f2617d0a9 #xe440f8a4a6cc9114) (#xcabf0121b5c84bec #x293cb315cdd11b7c) (#x70724b3ff9e6287d #x22bc809e428afa54) (#x9738242e93df9b45 #xcd7c4bb16b1d8a68) (#x16c74532209c4c3c #x5f177d480e6e78f9) (#x13dab7f586be6f65 #x040bb20f90d9ca8f) (#xadb2eb78f3b84f01 #x2c45cc6979af02a0) (#x756fb9f85fc40b24 #x79a04fd9dc3d4822) (#x6d37cd14c934425f #xb34122f24bd3be30) (#xe9d55ecfdc55b67f #x7a36db4cb017fed7) (#x84e293db1561f420 #xc977f9befbc440e7) (#x981ff1a4bab9feae #x2058d9780a079ff2) (#xc085266c3a8c0d5e #x9f04ee9b327cbc90) (#x35ad1adc4901b1af #x0c1d151173a89d52) (#xdc784413955407d0 #x762bce5dc3bf6385) (#x0a3a274d8f4446b2 #xb6385d8effada7ec) (#xb14f89075c60458f #xc56aecaf886cddb5) (#x417a477089cfda27 #x0d6fd862570f4e01) (#x28e89cf779d3db8d #x9de0b77d7af1d936) (#x1b539b10f4eee94c #x425428165c839881) (#x2df56e30dff1f8d4 #xc6fc783ae4466b40) (#xe0e4967e310f50fa #x44bbc3ff84d737a8) (#xc13dc238a5866df2 #xe7d66c31cae627e1)) ((#xcf250ca2ea58362f #x3650d392499ed97c) (#xb8828c7e3ad63348 #x339fa60be4876cf4) (#xd9afa26576e99c5c #x9c9481a8540a7201) (#x9e1b1a098515650c #x65b81d61d17b0a53) (#xae0822b9a667993b #x995bf431f913c789) (#xfe3d6aaac3f15e62 #x5ebd0cc181ab5324) (#x6e44c23c2a6cefe7 #xef51d6b259707567) (#x69759b921c288542 #x857b54bbbc20636f) (#x384b8d397365d661 #xd6939a4824c5b040) (#x7bd38ef0a8733a1a #x3a87de8da703175f) (#xde9efbcb40adf6f9 #xf6be03a1b15a6409) (#x2ec123feefd47c12 #x7c57c87239511b3d) (#x19e342e0fae2ea80 #xea9ea32bf469c0ef) (#x9d06f8029bbb1a82 #x1aaa4764329cc316) (#x1ed21b4ecca68025 #x80b421221139d6e7) (#xe7de284a3913b4e2 #xb423afea75c293cb) (#x4fec0de5a3ebd306 #xd35cefd189dc05c8) (#x5c41463f1d6bf824 #xf8ae53e472a2367a) (#xed9021707d717540 #x754fb0f47ad56096) (#xc814550cdc1c5c8a #x5c7a519baccecf74) (#xd7cd10fa1a6148d5 #x48c046ba5daa5e11) (#xdd8319c05e038977 #x89ac59a452bdad4c) (#xe4c3ca4127bdcb6c #xcb31f5ef96255a8e) (#xfd2088a1dd5f21ec #x21af56c4624c9a61) (#x8fa0ed602fe0a5da #xa556cd5229bfb726) (#x992a43a7b3510fa9 #x0f929f68342b1c5b) (#x0b4557824eb955d8 #x5562291def4ab4df) (#x1bf5fe53ee970174 #x0182cf2df7d34e28) (#x661c77b57a7bc5b1 #xc521a5aa55dd08fd) (#xa161ce9ec034d9c8 #xd901052010eeac1b) (#x9079a896e99db185 #xb1ecda73d8db2643) (#x83d4e34c571d9aa7 #x9a1e664623a515f1) (#x3722611e15369692 #x96c96b59cd38dbd2) (#x44a95a67ed5286de #x863ec6cc6696b117) (#x2be6c6e3cde5fd43 #xfd61267ddfbb83f2) (#x687ec52a16f31138 #x117562b85c7d24ed) (#x9a37a1acadff7027 #x7080c56dd7ccd51e) (#x79c53243bc06d1ee #xd19bb28ba4b99998) (#x5e57fa8c091e13d0 #x13b23fe27118b8bd) (#x168aaec79cb1aa73 #xaac4523a1d94ab7d) (#xa06a9026caef4db2 #x4d0f3323f0b3eb99) (#x5a7b412921f406fb #x068ae7ee77af67f0) (#xaa24991c8e8d8c10 #x8c632c3dffa418c4) (#x2cd79f4dfba197e6 #x974ba4743aeb95fa) (#x93644a9df733ce0b #xcefe80763b3cef06) (#xe6d576f233c82098 #x202d99e9959fd449) (#x6b632721085d6eb6 #x6e6738bdbf9aeda8) (#xe8b7c46d5f40f411 #xf4795efb9c3ff859) (#xf8076dbcff6ea0bd #xa099b8cb84a602ae) (#x586dfd9a3581ed0f #xed968be87415e937) (#x0f69ec27665340f3 #x405af111e9fd6b92) (#x9b3cff14a724e45d #xe48ef36e3791929c) (#x7ce2d75e9e3750bf #x50ad5c8442530157) (#xe0ef71e40f57de47 #xde092de3909285c3) (#x8db651d33b954e2e #x4e4aa1542a0539e1) (#xb6e03ee1565ee7c1 #xe7cb6119ed2740e4) (#x11bbf769aaf5c0d6 #xc0eed033f8c4bd75) (#xd5dbac490e14a321 #xa3dc2abc5e10d0d6) (#x513e16ab6f4d5323 #x53e8cef398e5d32f) (#x0216bcb31475ebf4 #xeb1c6c0603ba8ec7) (#x602670a346e43b6e #x3b0511a050d05977) (#x031de20b1eae7f8e #x7f125a05e3e7c945) (#xf473639087939fc0 #x9fd113df8ebca079) (#xb3c7dbfc746f6690 #x66fd8f160bcdd82b) (#x4085e1c2c5b893f5 #x93061ec060216e5a) (#x9643af80d5024f5a #x4fc86e79ddd677c9) (#xd2eaf5e73850c984 #xc9f6a8b5bb40c6de) (#xbda5696318e7b219 #xb2a94804026df43b) (#xa6509730f670b36d #xb32b8729f5beba13) (#x5966a3223f5a7975 #x7998bdeb9448aeb5) (#x1fd945f6c67d145f #x14ba1721f1649165) (#x633b92a8584a44e0 #x44174ba5b3379032) (#xe2f9cd571b2235b3 #x351541e593280b04) (#xc351028e92a50952 #x0918788643847bab) (#xef869dc369049eb4 #x9e53dcf2796fee51) (#xb989d2c6300da732 #xa791900804da2b76) (#x29f07a50d99016b7 #x167d4a7bdc010d35) (#xbb9f6e7524784cc6 #x4c8dfc0e0760a5b1) (#x48dd544b95afb9a3 #xb9766dd86c8c13c0) (#x47b4b86cf3fcf950 #xf92c9cc985717852) (#x36293fa61fed02e8 #x02c75d5a2d659c50) (#xab2fc7a48456186a #x186d1a3e1ff95f46) (#x2ddcc1f5f17a039c #x03459277dab6d278) (#x4acbe8f881da5257 #x526a01de6f369d07) (#x3c67369c5b8fc34a #xc3ab424422726f0d) (#x22b52dd29729436f #x431f6366334bb9ea) (#xba9430cd2ea3d8bc #xd883ca0de73de233) (#x77a780dcd08e0567 #x05cf7599ad19b588) (#x0527e51d22318151 #x8136ee0fe6ea98cf) (#xa4462b83e2055899 #x5837eb2ff60434d4) (#x9172f62ee34625ff #x25e2ec70388661c1) (#xd4d0f2f104cf375b #x37d21cbfbe4d9754) (#x1cc4a7fdd8d36bd1 #x6ba84d2412835820) (#x3940d38179be421b #x429dac4bc498f7c2) (#x9f1044b18fcef176 #xf1b62b6231264dd1) (#xb1d1674f601a8d64 #x8de1e310087756ec) (#x80c9014749b3e529 #xe50c3c43c042dcb4) (#x503548136596c759 #xc7e6f8f078b894ad) (#x2fca7d46e50fe868 #xe859fe71d90c5cbf) (#x2aed985bc73e6939 #x696f107e3fe6c470) (#x78ce6cfbb6dd4594 #x4595848844e4de1a) (#x7ef46bed8a42bb4b #xbbb1308241e98f90) (#x0d7f50947226ab07 #xab469d17ea47e555) (#x926f1425fde85a71 #x5af0b675db61a884) (#x042cbba528ea152b #x1538d80c06b7df4d) (#xd8a4fcdd7c320826 #x089ab7abb4573583) (#x9748f138dfd9db20 #xdbc6587a3d8b304b) (#x18e81c58f0397efa #x7e9095281434876d) (#xfa11d10feb1b4b49 #x4b85d4cd871c8c69) (#x13ad4bdabe802b22 #x2bf2bc35fb7e33b2) (#xc147be3d86d0e2a6 #xe2041480403ef56c) (#x28fb24e8d34b82cd #x82737c783c5c4ab7) (#x87f858e97ff78f8c #x8f26be4a2512cabc) (#x5328aa187b38b8d7 #xb8f4a2f59b5f5de8) (#xa27c2c95de9aa646 #xa6135f25f309655e) (#x4cf1efeebd45ac88 #xac4eb5d46a3bcc8d) (#x26999677bfc35644 #x5627bb6a35fc66a7) (#x7096d972e6ca6fc2 #x6fe5f7904849a380) (#x75b13c6fc4fbee93 #xeed3199faea33b4f) (#x86f30651752c1bf6 #x1b288849c54f8d3e) (#x1781f07f966a3e09 #x3eca6439fdc9ecff) (#x45a204dfe78912a4 #x1230f0cf86cbf695) (#x74ba62d7ce207ae9 #x7add2f9c4efe7ccd) (#x46bfe6d4f9276d2a #x6d22aaca652c3fd0) (#x8cbd0f6b314eda54 #xda449757ca587e63) (#x0a4e093a4462c1a2 #xc16c1f1e0f17f35d) (#xc4605b20a4e163f7 #x6332fa8fa6d46da3) (#xac1e9e0ab21272cf #x72479837faa9494e) (#xd6c64e4210badcaf #xdcce70b9bdf71993) (#x15974ccc821fd5fd #xd5d6083ffe736238) (#xee8dc37b63df0ace #x0a5deaf19932a9d3) (#x6c527e8f3e190413 #x044dbab45acafba0) (#xa54d753be8decce3 #xcc39dd2c16597356) (#x8a87087d0dd1248b #x2460235dcf552fe9) (#xca02e9bfc869b77e #xb7663d9daf7441b3) (#xbfb3d5d00c9259ed #x59b5240201d77afc) (#xeaa178de4b351fe5 #x1f6532fd9f85769e) (#x719d87caec11fbb8 #xfbebc193a814e402) (#x0c740e2c78fd3f7d #x3f48ab140a1aa2d7) (#xfc2bd619d784b596 #xb5a160c78211dde3) (#x899aea76137f5b05 #x5b7279582cb2e6ac) (#xff363412c92aca18 #xcab33ac261f614a6) (#x149c127488c44187 #x41d83e3c1e2e25ba) (#xe9bc9ad5559b606b #x607768f87c62bfdb) (#x955e4d8bcbac30d4 #x30da347c3e31be8c) (#xcb09b707c2b22304 #x23680b9e4f290631) (#xb7eb60595c8573bb #x73c5571a0d7a0766) (#x301338b02372fc37 #xfce3e9502868cdda) (#x98211d1fb98a9bd3 #x9b9ca96bd4765bd9) (#x20a39161835ca89b #xa8030f6030f1372d) (#xce2e521ae083a255 #xa25ee591a9c39efe) (#xec9b7fc877aae13a #xe14186f79a882714) (#x3f7ad4974521bcc4 #xbcb91841c195a648) (#xa9397b179023f39e #xf37176381c43d181) (#xcc38eea9f4f649a1 #x49428997aa791039) (#x5b701f912b2f9281 #x9284d1ed97f22072) (#x0e62b29f6c88d489 #xd454c71209a02c10) (#x612d2e1b4c3faf14 #xaf0b27a3b08d1ef5) (#x330edabb3ddc83b9 #x83f1b355cb8f049f) (#x10b0a9d1a02e54ac #x54e0e6301899faf7) (#x418ebf7acf63078f #x070828c3807c29d8) (#xc91f0bb4d6c7c8f0 #xc87467984c9388f6) (#xd3e1ab5f328b5dfe #x5df89eb65b1d815c) (#x42935d71d1cd7801 #x781a72c6639be09d) (#x5512ad0e47a74608 #x46d016ff9e520c62) (#x0000000000000000 #x0000000000000000) (#xdc88477854d81d0d #x1da26fa7b2e0eace) (#x3d6c682451545730 #x57a57447c22f288f) (#x4bc0b6408b01c62d #xc66437dd8f6bda85) (#xf2496486bb0c611f #x61f5a7d58bb1f1f3) (#xb4f68252422b0c35 #x0cd70d1fee9dce23) (#x49d60af39f742dd9 #x2d785bdb8cd15442) (#xcd33b011fe2ddddb #xdd4cbf944a2457bb) (#xf5783d288d480bba #x0bdf25dc6ee1e7fb) (#xe1e42f5c058c4a3d #x4a071be070cfc241) (#xc56b0598ae3af78d #xf73ccc8c46892a21) (#x728065c1f2bf8436 #x84f99b964bf32d47) (#xdbb91ed6629c77a8 #x7788edae57b0fcc6) (#x32058403370717c3 #x17ff85562bd2431d) (#x3118660829a9684d #x68eddf53c8358a58) (#x073159ae36446aa5 #x6a2a8209e5501608) (#x76acde64da55911d #x91c1439a4d44f20a) (#xa377722dd441323c #x321d6926135422dc) (#x3b566f326dcba9ef #xa981c04dc7227905) (#x640acb066e0e2e45 #x2e3dc9ac5667863a) (#x5f5ca43403c587aa #x87bc09e19145ff3f) (#x4ee7535da930477c #x4752d9d26981424a) (#x6f4f9c8420b77b9d #x7b5fe0b1b92d32e5) (#x0953eb315accbe2c #xbe7e451becf03a18) (#xe5c894f92d665f16 #x5f3fc3ec76781d0c) (#xc676e793b0948803 #x882e9689a56ee364) (#x5d4a188717b06c5e #x6ca065e792ff71f8) (#xf76e819b993de04e #xe0c349da6d5b693c) (#x6717290d70a051cb #x512f93a9b5804f7f) (#x2792c8cfb518c23e #xc2298d69d5a12125) (#x23be736a9df2d715 #xd7115565d316fe68) (#x570411bd53d2adfc #xadcc7af99de882a5) (#x94551333c177a4ae #xa4d4027fde6cf90e) (#xbcae37db123c2663 #x26a77e07e230b3b9) (#x1afea0ebe44c950e #x958cf92e178e09aa) (#x8891b4ce19a4cf7f #xcf7c4f5bccefa12e) (#x7fff355580992f31 #x2fbf0681a1b4c812) (#x063a07163c9ffedf #xfe24b40a050d518a) (#x8b8c56c5070ab0f1 #xb06e155e2f08686b) (#x7ad8d048a2a8ae60 #xae89e88e475e50dd) (#xc77db92bba4f1c79 #x1c20a08a4533a4e6) (#x6230cc105291d09a #xd0197da6536ad7b0) (#x9c0da6ba91608ef8 #x8ea47167d2c18494) (#x738b3b79f864104c #x10f7ad95abae6ac5) (#xad15c0b2b8c9e6b5 #xe649ae341af40ecc) (#xaf037c01acbc0d41 #x0d55c232194e800b) (#xf90c3304f5b534c7 #x34978ec864fb452c) (#x010b5eb80adb947a #x940e3603e05d4782) (#x439803c9db16ec7b #xec1444c583c6a71f) (#xd1f717ec26feb60a #xb6e4f2b058a70f9b) (#xc04ce0858c0b76dc #x760a2283a063b2ee) (#x82dfbdf45dc60edd #x0e105045c3f85273) (#xb2cc85447eb4f2ea #xf2f3b915eb909fa9) (#x85eee45a6b826478 #x643ad24c26a8447b) (#x3e718a2f4ffa28be #x28b72e4221c8e1ca) (#x560f4f0559093986 #x39c24cfa7db5c527) (#x21a8cfd989873ce1 #x3c0d3963d0ac70af) (#xbeb88b680649cd97 #xcdbb1201e18a3d7e) (#x3534ddad01437d66 #x7dd5075fce825515) (#xf05fd835af798aeb #x8ae9cbd3880b7f34) (#x4dfab156b79e38f2 #x384083d78a668b0f) (#x248f2ac4abb6bdb0 #xbd3bd76c3646e860) (#xa83225af9af867e4 #x677f403bfc1e9603) (#x343f83150b98e91c #xe9db315c2edf1297) (#x2584747ca16d29ca #x2935e16fd61bafe2) (#xdab2406e6847e3d2 #xe386dbadb7edbb44) (#x8eabb3d8253b31a0 #x3158fb51c9e2f0a4) (#xb0da39f76ac1191e #x19efd513e82a116e) (#xebaa266641ee8b9f #x8b6b04fe7fd8311c) (#x0858b58950172a56 #x2a7073180cad7d9a) (#x1dcff945d208ffab #xffa67b27f2de1fa2) (#xe3f293ef11f9a1c9 #xa11b77e673754c86) (#x6d59203734c29069 #x90438cb7ba97bc22) (#xf154868da5a21e91 #x1ee7fdd0685638b6) (#x5419f3b64d7cd272 #xd2de20fc7e0f4be0) (#x81c25fff43687153 #x71020a40201f9b36) (#xa75bc988fcab2717 #x2725b12a15e3fd91) (#xb5fddcea48f0984f #x98d93b1c0ec089a1) (#x12a61562b45bbf58 #xbffc8a361b237430) (#x84e5bae26159f002 #xf034e44fc6f503f9) (#xf3423a3eb1d7f565 #xf5fb91d66becb671) (#xd0fc49542c252270 #x22eac4b3b8fa4819) (#x650195be64d5ba3f #xba33ffafb63ac1b8) (#xfb1a8fb7e1c0df33 #xdf8be2ce6741cbeb) (#xc25a5c36987e9d28 #x9d164e85a3d93c29) (#x7de989e694ecc4c5 #xc4a36a87a20e46d5) (#x6a6879990286facc #xfa690ebe5fc7aa2a) (#x5223f4a071e32cad #x2cfa94f67b021a6a) (#xf665df2393e67434 #x74cd7fd98d062ebe) (#x3a5d318a67103d95 #x3d8ff64e277f3e87) (#xdf95a5734a766283 #x62b035a25107238b)) ((#xcd6118711b69f937 #x5237cbafd6541969) (#x3b4adbd8f8038b93 #x1c937d52c35a7b03) (#x571e87e44e6345db #x1adb0680194bc063) (#x248d3414d320fb38 #x0238294ef70f6920) (#xa135444dad09377f #x547fb07d0c45a209) (#xed3ed4a62f72a0b6 #xaeb6d828c29b3c72) (#xf09047ea96ad81a0 #xcfa091b166ae08ad) (#x0d60f5c6a333ecb7 #x1fb7a13baeb3c733) (#xe48cd9a36b7aeeb8 #x4fb843da8fe8b77a) (#x4605df2e1df141c5 #xbac501815bfd20f1) (#xaaee35c87bfd28cc #xcacc360ad1560ffd) (#x7ef346363e705254 #x07548ef540f76e70) (#x06bb844375c7f304 #x8104274c73a06ac7) (#x086733450d7687b1 #x3fb1745105439876) (#xfb4b366f40599e13 #x511317c6bbbda559) (#xeb8550e55ab553b2 #x2fb2ff64b13b56b5) (#x12a71a0a88109c1c #x011cf5279ae6d510) (#xfc258c6c7ce0a4a8 #x0ea8df29802ddce0) (#x03bc42c0db829802 #xa102f226d8503582) (#x3091aa5d2ef79420 #x8220fb251e49d6f7) (#x6e3d20bc249c9ff5 #x79f566574a719d9c) (#x86043299a5ab5445 #xf7456b15231afeab) (#xc76f57b484e32f3b #x123ba27b4377a7e3) (#xc1d4d3f7f124dc3f #x933f853730d7cd24) (#x430219adb3b42ac3 #x9ac3d4ebf00d7fb4) (#xd97d8638e6be962f #xd22f19c43f12a6be) (#x4ddeaeabcb055e76 #x247687f686ee8d05) (#x8fb63f9ce1a31a4b #x164bf0e76e6975a3) (#x91a4ee1083fea35f #xd65f4b58120c74fe) (#x3df15f9b8dc47897 #x9d975a1eb0fa11c4) (#x1dae934cb9df2116 #x61164999a43534df) (#xf32c052a4d2f19a2 #x6ea26397befe3d2f) (#x7848c2754bb7a150 #x8650a9b9335704b7) (#x5f79b4a14315c26a #x256a72d11c085815) (#x0a0e4fc59f8ad60c #x400c69d49523be8a) (#xa8874948e9017971 #xb5712b8f41362901) (#xf597816938e8eaa6 #xefa644dbcd5e57e8) (#xcf0864f18995a88a #x2d8ad62a46343f95) (#x752837b3e8844de7 #x99e708829de4c384) (#x9a7f9f95550abcec #x48eccd2fcf1fd90a) (#x9816e315c7f6ed51 #x3751d0aa5f7ffff6) (#xa43282ce034c5c79 #x74796517a7b5fd4c) (#x702ff13046c126e1 #xb9e1dde836149cc1) (#xf7fefde9aa14bb1b #x901b595e5d3e7114) (#x3144941d67895d9f #x5c9f14865679c589) (#x4e62ec6b1087c674 #x857475d05ebeb887) (#x846d4e19375705f8 #x88f87690b37ad857) (#x77414b337a781c5a #xe65a15070d84e578) (#xb529da0450de5867 #xd4676216e5031dde) (#x2d3f39119728b536 #xe336b2bcba7ce228) (#x9cc41bd620cd4fe8 #xc9e8ea63bcbfb3cd) (#x50703de772da7f60 #x4560ce6f22dbb9da) (#xbbf56d02286f2cd2 #x6ad2310b93e0ef6f) (#x1675e2c96f2b3ea5 #xffa5cfee7926992b) (#xca0fa27227d0c38c #x0d8c0340edc460d0) (#x02697c8092fc51bd #x7fbd1d85906026fc) (#x678f2db96094d1fb #x98fbfda507021694) (#xe7309b63b0f876ba #xeebab1fc57b882f8) (#xe9ec2c65c849020f #x500fe2e1215b7049) (#x890dbbdf9464e94f #x974fd7ab1dc91f64) (#xc9b3e0b2fc525b8e #xac8ef16635945552) (#x2cea0751de567c89 #x3d895d1ff24cf156) (#x0507c683ae456b06 #x2006d56aabf05f45) (#x769475733306d5e5 #x38e5faa445b4f606) (#x8e6301dca8ddd3f4 #xc8f41f44265966dd) (#x45b99deec673d9c7 #x1bc7f3a783ad1573) (#x1ac0294f85661bad #x3ead81769fa54d66) (#x4fb7d22b59f90fcb #x5bcb9a73168eabf9) (#xc001edb7b85a1580 #x4d806a9478e7de5a) (#x88d8859fdd1a20f0 #x49f0380855f90c1a) (#x5eac8ae10a6b0bd5 #xfbd59d7254384b6b) (#xe559e7e322042707 #x9107ac79c7d8a404) (#x9f785916fb4fd7ea #x68ea184564ef864f) (#x7d4f04f6e5f2ca56 #xa6567cd398a75bf2) (#x8ab1f91f4fe6714d #x364d258dc5992ae6) (#x9ead6756b2311e55 #xb655f7e62cdf9531) (#x8303f41a0bee3f43 #xd743be7f88eaa1ee) (#x17a0dc892655f71a #x211a204d31168a55) (#xef57a826bd8ef10b #xd10bc5ad52fb1a8e) (#x7393b3f09d43bee3 #x18e32fceee44a943) (#xddaf7efb01853496 #x2c96230ddcd2ea85) (#xd5c84dbe0cf3b327 #x1327575cd99172f3) (#x52194167e0262edd #x3addd3eab2bb9f26) (#x665a13f929ea1844 #x464412064f3205ea) (#x35966cde80b2ff26 #xa2262e4fb5b989b2) (#xcedd5ab1c0eb6135 #xf33539890e042ceb) (#xb24760076c6762dc #x8bdcaaf9de936467) (#xf62bc3a9e36a72a4 #x4ea4b6fd150e626a) (#x74fd09f3a1fa8458 #x4758e721d5d4d0fa) (#x490c56682c3efccf #xdacfbd3f652ec13e) (#xb8492fc2f3edb4d0 #xcbd0c32d4bb0daed) (#x42d727edfacae37c #x447c3b48b83d6cca) (#x72468db0d43d775c #xc65cc06da674ba3d) (#x416b652d21487b7e #xe57ec96e606d5948) (#x816a889a99126efe #xa8fea3fa188a8712) (#xff99ceaca7623caa #xafaa2d0f587de962) (#xdfc6027b9379652b #x532b3e884cb2cc79) (#x4c0b90eb827b97c9 #xfac96855cede9e7b) (#xdb14fab87442c792 #xad920441af728042) (#xafe9f34bd5b843ca #xeacae3607aa650b8) (#x6aefd87fc3a73d4c #x874c5c9ea9b1d1a7) (#x32f8d6ddbc0bc59d #xfd9de6a08e29f00b) (#x15c9a009b4a9a6a7 #x5ea73dc8a176aca9) (#x94a328932dbbc859 #xf6599e32b9fc2bbb) (#xd11ab57debc8119e #xed9e6d953a513ec8) (#xf2f93b6a0451d01d #xb01d8c34f6ce2e51) (#xe05e21608c414c01 #xb10179136c28fb41) (#xa35c38cd3ff566c2 #x2bc2adf89c2584f5) (#x3c2461dbc4bab128 #x4328b5bdf8ca02ba) (#xee829666f4f038b4 #x0fb42a0e1acb09f0) (#xf442bf2971962319 #x3119ab78856e4496) (#x26e4489441dcaa85 #x7d8534cb676f4fdc) (#x2236b057a6e7083c #x833c0e0284af03e7) (#x60e197ba5c2deb40 #xc740354a3c926f2d) (#x111b58ca5392041e #xa01e070142b6e092) (#x3e4d1d5b5646e095 #x3c95a83868aa2446) (#x1fc7efcc2b2370ab #x1eab541c34551223) (#x0bdb7185d6f41fb3 #x9eb38677dd13adf4) (#x7f267876770e9beb #xd9eb615608c77d0e) (#x87d10cd9ecd59dfa #x29fa84b66b2aedd5) (#x3f98231b1f38292a #xe22a479b209a3738) (#xfa9e082f092757ac #x8facf865f38db627) (#xdac1c4f83d3c0e2d #x732debe2e742933c) (#xd6740f7ed7712b25 #xb225a57a01c14771) (#x6fe81efc6de2564a #xa74a89f402418ee2) (#xe83912258137cbb0 #x8eb00d42696b6337) (#x80bfb6dad06ca741 #x76414c5950ba946c) (#x2838ff92396dde30 #xc33067d6118cbd6d) (#xcbda9c326eae0a33 #xd333ece3a5f473ae) (#xb69598c48b5cc065 #x756590303d53285c) (#x2f56459105d4e48b #x9c8baf392a1cc4d4) (#x799dfc3502c968ef #x58ef461a7b6717c9) (#xecebeae6660c6909 #x7009378b8aab2f0c) (#x37ff105e124eae9b #xdd9b33ca25d9af4e) (#xb99c1182ba937d6f #x156f2c8e0380c993) (#xc6ba69f4cd9de684 #xcc844dd80b47b49d) (#xfe4cf0ecee1cf515 #x7115c2ac104dfa1c) (#xae3ccd0b9cc68a75 #x34750cc3329643c6) (#xb02e1c87fe9b3361 #xf461b77c4ef3429b) (#x64336f79bb1649f9 #x39f90f83df522316) (#x1b15170fcc18d212 #xe0126ed5d7955e18) (#x48d9682865403570 #x0470529c2d1ed240) (#x1372244ac16e55a3 #xdfa31a84d2d6c66e) (#xd2a6f7bd304a899c #x4c9c9fb3e2010b4a) (#x69539abf1825a54e #x264eaeb871e1e425) (#x1c7bad0cf0a1e8a9 #xbfa9a63aec0527a1) (#xa78ec00ed8cec47b #xd57b97317fe5c8ce) (#x85b870597e29cc47 #x56479933fb4acb29) (#x7c9a3ab6ac8c03e9 #x78e99370d097488c) (#x47d0e16e548f887a #x647aee2213cd338f) (#x6886a4ff515b6cf1 #xf8f1411b39d1f75b) (#xa65bfe4e91b00dc4 #x0bc4789237d5dbb0) (#x197c6b8f5ee483af #x9faf735047f578e4) (#x5cc5f66198975a68 #x846880f7c4586d97) (#xe18b1f20c53f85be #x6fbe96b02418e83f) (#x01d53e40497ec9bf #xdebfefa34830137e) (#x3923a7586affda2e #x632e60d7533a5dff) (#x6c545c3cb660ce48 #x06487bd2da11bb60) (#xa9527708a07fb0ce #x6bcec42c09063a7f) (#xc26891372aa6443d #x323d7711e887f8a6) (#x2b84bd52e2ef4632 #x623295f0c9dc88ef) (#x957616d364c501e6 #x28e67191f1cc38c5) (#xbf2795c1cf548e6b #x946b0bc27020a354) (#x076eba033cb93abb #x5fbbc8ef3b9079b9) (#x38f6991823811391 #xbd918f741b0a4e81) (#x0000000000000000 #x0000000000000000) (#x23e38e17ef99c183 #x5d83e1a1cc9f1099) (#x9071d050ca806ae0 #x08e0a4fb5a3c6780) (#xc3bdaf7763d88d82 #xec8298b2a0b7ebd8) (#x5d10c821d1e993d7 #x5ad76f548c687ee9) (#x8b64c75f0698b8f2 #xe8f2ca2e8da93998) (#x4ab014a8f7bc64cd #x7bcd4f19bd7ef4bc) (#x446ca3ae8f0d1078 #xc5781c04cb9d060d) (#xa0e07a0de477fec0 #x8ac05fde4475b177) (#xb3925e472519ab63 #x5563455a96a37719) (#x25580a549a5e3287 #xdc87c6edbf3f7a5e) (#x82d6ca5a4290f6fc #x09fc51dcc0dab290) (#xde133c3bda07ac94 #x8d94d12b0482df07) (#x0cb5cb86ea4d2508 #xc1084e98e683d44d) (#x205fccd7341b5981 #xfc81138714cf251b) (#xfdf0b22c359e6d17 #xd017308ac81dcf9e) (#x53cc7f27a958e762 #xe4623c49fa8b8c58) (#xb4fce44419a091d8 #x0ad88db5ad330ea0) (#xc866def2b52c9231 #x72311ec57da4462c) (#x18a955cf179a4a10 #x41109cf30fc56b9a) (#xd0cf8b3da2b6d821 #x3321823672612db6) (#xb740a684c22209da #xabda7f9375633b22) (#x5577fb64dc9f1466 #x65661b05892be69f) (#xc4d315745f61b739 #xb339505d9b279261) (#x6288eb3aced1bafd #xb8fd28cfacf249d1) (#x09b20d0544084e0e #xe10e9bf24d738b08) (#x59c230e236d2316e #xa46e559d6fa832d2) (#x29edc1d27013178f #x1d8f887559bcae13) (#x3443529ec9cc3699 #x7c99c1ecfd899acc) (#xba2053426111e56d #xb46ddea8dbd0fc11) (#x6b3ae63f8ad9f4f3 #x59f3b33de181c2d9) (#xb1fb22c7b7e5fade #x2ade58df06c351e5) (#xccb4263152173088 #x8c88240c9e640a17) (#xea506ea513cb9a0d #xf10d10c7f90b45cb) (#x2a518312ab918f8d #xbc8d7a5381ec9b91) (#xbef2ab81862a47d4 #x4ad4e4613810b02a) (#x971f6a53f639505b #x575b6c1461ac1e39) (#x58170ea27facf8d1 #x7ad1ba3e279821ac) (#x9218acd0587c3b5d #x775db97eca5c417c) (#xe3e263a057c3d403 #x10038b35b478cec3) (#xac55b18b0e3adbc8 #x4bc81146a2f6653a) (#x40be5b6d6836b2c1 #x3bc126cd285d4a36) (#xad808fcb47441277 #x9577fee5eac67644) (#x273176d408a2633a #xa33adb682f5f5ca2) (#x8ddf431c735f4bf6 #x69f6ed62fe09535f) (#x04d2f8c3e73ba2b9 #xfeb93ac9e3c04c3b) (#x10ce668a1aeccda1 #x7ea1e8a20a86f3ec) (#xa5e7bc8e4a3295c6 #xaac68ab4ef85ee32) (#xa289068d768baf7d #xf57d425bd415978b) (#x362a2e1e5b306724 #x0324dc696de9bc30) (#x51a503a73ba4b6df #x9bdf21cc6aebaaa4) (#x56cbb9a4071d8c64 #xc464e923517bd31d) (#xd373c9fd79344023 #x92237010aa311834) (#xab3b0b883283e173 #x1473d9a999661c83) (#xbc9bd70114d61669 #x3569f9e4a87096d6) (#x141c9e49fdd76f18 #x8018d26be946bfd7) (#xe2375de01ebd1dbc #xcebc6496fc48ddbd) (#x635dd57a87af7342 #x6642c76ce4c25aaf) (#xf14579aadfd3481f #x111f7e122e9e1bd3) (#xd41d73fe458d7a98 #xcd98b8ff91a1618d) (#x9baaa1d51c747553 #x9653228c872fca74) (#x96ca5413bf4799e4 #x89e483b7299c0d47) (#xf9224aefd2a5cfae #x2eae0a432bdd83a5) (#x54a2c52495e1ddd9 #xbbd9f4a6c11bf5e1) (#x332de89df5750c22 #x23220903c619e375) (#x7bf480b590353952 #x27525b9feb073135) (#xe6e5a523f986bf05 #x30055e5f1f889186) (#x5a7e7222ed50a96c #x056ca7bbb7f80750) (#x5bab4c62a42e60d3 #xdbd34818ffc8142e) (#x6134a9fa155322ff #x19ffdae974a27c53) (#xd7a1313e9e0fe29a #x6c9a4ad949f1540f) (#x3a9fe598b17d422c #xc22c92f18b6a687d) (#xdc7a40bb48fbfd29 #xf229ccae94e2f9fb) (#x71facf700fbfef5e #x675e324b7e248fbf) (#x9d11259669b38657 #x175705c0f48fa0b3) (#x7a21bef5d94bf0ed #xf9edb43ca337224b) (#x65e65139f2688046 #xe746e02097623068) (#x2e837bd14caa2d34 #x4234409a622cd7aa) (#x4b652ae8bec2ad72 #xa572a0baf54ee7c2) (#x0edcb70678b174b5 #xbeb5531d76e3f2b1) (#xf8f774af9bdb0611 #xf011e5e063ed90db) (#x93cd92901102f2e2 #xa9e256dd826c5202) (#xbd4ee9415da8dfd6 #xebd61647e04085a8) (#x99c3dd558e8824ee #xe9ee3f09174fec88) (#xd8a8b878afc05f90 #x0c90f6677722b5c0) (#x1e12d18c625db914 #xc014bbbf7c65015d) (#x218af2977d65903e #x223efc245cff3665) (#xc5062b34161f7e86 #x6d86bffed317811f) (#x8c0a7d5c3a218249 #xb74902c1b6394021) (#x6d81627cff1e07f7 #xd8f794719221a81e) (#x0f09894631cfbd0a #x600abcbe3ed3e1cf)) ((#xccaa9a639a4178a8 #x1b8e63bf2db66b6d) (#x9b3742c942ad31b4 #xf815c9c0cb2980c6) (#x1018d590d529de96 #x4ef0907ad240edbc) (#x79a4cc37cc7ce41e #xd3e237d7b6279a97) (#x47850d3a0dc5978a #xad6b3a0534df0617) (#x05e68d2d8dcd02f5 #x2f332db071146154) (#xbf018f0e8f64989f #x960a0ecb79b93352) (#x3fc1e804e8efa7a5 #xa386049d26fc57fb) (#x8acfbe50bed23b13 #x6bea50f5bd6da601) (#xb904793879532539 #x1d2838aa27a1cc8b) (#x90d8b29ab2a2e1ac #x7b7c9a2c8d058915) (#x567df1a3f1ba9d2d #x3e94a330429b20d0) (#xe89c57a45788d183 #x7591a4b49f26d8f9) (#xa31375f27523ff86 #x0dbef27317c9e39f) (#x685c30ae3003eeb9 #x401daee2c063bc50) (#xed7ada89da45d376 #x5aa28904ee32b9ad) (#xdd5266fa663e720f #x8871fa8a5bf24daa) (#xacfa218521b7f95a #x7ceb856084f54063) (#x744eca52ca4489a0 #xdba9525aae136c9d) (#x4c6afd69fdca4792 #x2e0269e972f30fc4) (#xd35b1b841bfca0e2 #x242b84d66cca252d) (#x4a6f0b5f0bfdfa34 #xa5205f882cebf01d) (#x37cd634c631ac8ee #x84fe4ca04fdcc0a5) (#xdf5134e83492196d #xf16fe814d0fa185c) (#x25d6e4cee49f7d1a #xb310ce44169478ef) (#xf964ab3dabf7db24 #xe66e3d81e962fe3e) (#x6e59c698c634531f #xcb3f98839e7b4389) (#xc546382238e2c3d2 #xe1f922cde0923748) (#x0beff053f00fd018 #x836953ec462c09d3) (#x73ab156d1525e037 #x8d846d74540f583f) (#xbae7022302a99a6a #xb939237b08ad5206) (#xcb4f455c4520113f #x4da35c91d7aa5fcf) (#xbee1a607a6324cae #x4b050784ddbdf829) (#xb30ba062a00a2110 #x434e6209c5890e23) (#xfb67f92ff95bb046 #x9f702f1f626aabc8) (#xc8ac3e473edaae6c #xe9b24740f8a6c142) (#x23d312f812a8c0bc #x3832f825488c8736) (#x94de16be16393768 #x8940bed35815233a) (#x81204e034eddeb0b #xe8830319fb41afd2) (#xdcb24ff34f68a63e #x557ef3c5fff686d1) (#x84c6c32ec310e9fe #xc7b02ea98a55ce86) (#xdb5790cc9009cfa9 #x0353cceb05eab273) (#x1df2d3f5d311b328 #x46bbf5f7ca741bb6) (#x7ba79e259ed08f7c #xaafc25493d2fcf61) (#x6050bbe6bbf681f2 #x6765e6dfa9432b0e) (#x1a170cca0c70dabf #x1096cad930682f14) (#x121b87828785b5f4 #x37ee82e45948b84a) (#xd954c2dec2a5a4cb #x7a4dde758ee2e785) (#x724b3c643c733406 #x508b643bf00b9344) (#xf68dff4aff63ddf8 #x973b4a927a5e5dc2) (#x342e185718e077bd #x20ef577160d05e28) (#xd4bec4bbc49dc975 #x7206bbf896d6118f) (#x39c41e321ed81a03 #x28a432fc78e4a822) (#x6dbabd83bdceec4c #x6f2e8352b177dd04) (#x080c8b488bf56f4b #x2778483d6920975e) (#x58748cdd8c784fc0 #x92cedd6c75a34857) (#x5c7228f928e39904 #x60f2f993a0b3e278) (#xfe8174027496b2b3 #xb04302af137eca9c) (#xb50e5654563d9cb6 #xc86c54689b91f1fa) (#x2dda6f866f6a1251 #x946886797fb4efb1) (#x7c42411a41b1e6eb #xfcd11a67c733fbc3) (#xdab7b9c5b95f1b98 #xde5cc5a4a1ee7908) (#x9cd29df69dcc5823 #xae38f6ee3135b464) (#xf56e8451849962ab #x332a51435552c34f) (#xe97c7ead7ede05b2 #xa89eadfb3b221382) (#xcd4ab36ab317ac99 #xc6816af089b2a016) (#x7e411308131d8d89 #x85cf08f94c3bae35) (#x362d4a454a4c1cdf #x59f145efebd80bde) (#xf36b726772aedf0d #xb80867220b4a3c96) (#x01e029092956d431 #xdd0f094fa404cb7b) (#x9f31e6ede636e770 #x0a29ed3f1e392ae9) (#xa6f5f8dff8eefd73 #x228ddfc366dd82cb) (#x4060d205d2a4fe1d #xfb46052bcec332b5) (#x22333bf13bfe148d #xe53df16aec884c4d) (#x5994a5d4a52e9bf1 #x4fc1d423d1a7832c) (#x6c5a948a9498387d #xb2218a1d1573167f) (#xd6bd96a99631a217 #x0b18a9661dde4479) (#x4180fb0cfbf22a2c #x26490c646ac7f9ce) (#x5d9201f001b54d35 #xbdfdf0dc04b72903) (#x69bc19a719553a88 #x9d12a7ad6467772b) (#x498c704470074567 #x0131445903e76e90) (#xea9f05b60524bae1 #x0c8fb62a142e8d0f) (#x8cca486648e586b5 #xe0c86694e37559d8) (#x70486e766edf5f64 #x299576a57b03c6b2) (#xd0b8609f60061fb1 #x803a9f0743c6bba0) (#xb8e450315005f108 #xc02731e583a507f0) (#xb6ed2d4f2dc723e5 #x6c7d4fb9b49d6f77) (#x579dd8aad8ec491c #xe39baa7fe69febab) (#xad1a088c08e12d6b #xa1e48c2f20f18b18) (#xdeb11de11dc4cd5c #x2c60e15b74fed327) (#x4d8ad460d49c93a3 #xf30d60a6d6f7c4bf) (#x09eca241a2a3bb7a #xfa774172cd245c25) (#x45865f285f69fce8 #xd475289bbfd753e1) (#x7da2681368e732da #x21de1328633730b8) (#x8ec91a741a49edd7 #x99d6740a687d0c2e) (#xd8b4ebd7ebf370fa #xa742d73a2ae62cfe) (#x11f8fc99fc7f0aa7 #x93ff9935764426c7) (#x426380178008957f #x825817b545cb6743) (#xa11027e0278f94e4 #x74a0e0ed9cc1b669) (#x0c0a2f6c2f6eb98f #xd5446cc2bc303d71) (#x63b3c0fdc00c3ea1 #xc374fd0e864fb583) (#x141e71b471b20852 #xbcccb48507504793) (#x19f477d1778a65ec #xb487d1081f64b199) (#x973d6da56dc3883b #x2d51a5027719bdb7) (#x5a77decfded424a2 #xebd0cff2feab1da1) (#xe77503d3031cd75f #x04c4d3a70c1a7b05) (#x3a2765296522a550 #x8cb5292d57e836af) (#x1ff181e781bdd84a #x3fa5e769417c4e40) (#x5f9153e253192657 #xc4e3e2428fbf7cf5) (#x71a8477f47898b55 #xf49a7feadf070dc9) (#x0fe95477549406dc #x71557713933ca3fc) (#x21d040ea4004abde #x412ceabbc384d2c0) (#x91389b939bf4359d #xa67393632901426e) (#x98d439d239578ee7 #x5c04d211e4251e4b) (#xa91caca8ac7afbaf #x53d8a8d0f5e12137) (#x07e5df3fdf616997 #x562d3f2efa1c34a2) (#xe2938efe8ed1d5aa #x2bf7fe177d0e1a51) (#xd75dbfa0bf677626 #xd617a029b9da8f02) (#x7a47b72cb7865b4d #x77f32c06992b041a) (#x66554dd04dc13c54 #xec47d0bef75bd4d7) (#x2bdf99b0995daff7 #x1f4ab01821ac1068) (#x44667621763f28d9 #x097a21d41bd3989a) (#x8d2a616f61b35284 #x3dc76fdb477192a3) (#x9ed1cfe4cf603341 #xd726e470ba3de192) (#xff615d0b5dc06682 #x6d4c0be0b77a01e7) (#x993410db10015ad6 #x810bdb5e4021d530) (#xa2f35cfb5c752bb7 #xd0b1fb3cb3cd28e4) (#x6a5f62bc62af85db #x3903bc7c4b6be9a6) (#x2436cdc7cdc9a92b #x6e1fc70bb290b394) (#x0605f636f637bda6 #x8b2236615e18ffd9) (#xaef97397731b9238 #x05f597fe0ffd1595) (#x92dbe088e00e8ace #x026288b2060ddce3) (#x29dccba2cbf1c495 #x6654a286aaa4459e) (#x88ccec42ec7e5071 #x12f4426b3665f3f7) (#x61b092ef92a055c3 #xba6aef900d47e075) (#x1bf725c325260e8e #xcd99c396946ce46f) (#xf48ead58adcfb69a #xee25580cf1560834) (#x203069e369527fef #x9c23e3f4678019bb) (#xee99a192a1bf6c25 #xfeb392d5c13e2720) (#x283ce2abe2a710a4 #xbb5babc90ea08ee5) (#x527b558755214be9 #xcca887cf978b8aff) (#xf28b5b6e5bf80b3c #x65076e6daf4ef7ed) (#xf16820752002b46f #xc11675bc80426960) (#x2e39149d1490ad02 #x30799da850b8713c) (#x17fd0aaf0a48b701 #x18ddaf54285cd91e) (#x96dd44ac44955c0a #xf05eac4dd31d76cc) (#xaf195a9e5a4d4609 #xd8fa9eb1abf9deee) (#x3e21c10dc1b97394 #x7e890dd282f89c80) (#x0e097d7e7dc2d2ed #xac5a7e5c37386887) (#x953e3fb73f6fe359 #x544fb79cfc11e841) (#x3bc74c204c747161 #x51ba2062f3ecfdd4) (#x83231c111c718069 #x919d11877049fa24) (#x0a0fd95ad9590429 #x5e665aa3e228c2a8) (#xc7456a306a4ea8b0 #x98e730536b9a62be) (#x161d23a6231e6330 #xc5d2a61b8c581265) (#x2c3a468f463cc660 #x49678f36dbb024ca) (#xc343ce14ced57e74 #x6adb14acbe8ac891) (#x8b2f97599784ef22 #xb6e559ba19696d7a) (#xe49678c878e6680c #xa0d5c8762316e588) (#xab1ffebafed690cd #x2ac6ba4e7ee974c1) (#x1e11a8eea8eb0c7b #xe2aaee26e578853b) (#xbb072b2a2bff4e5b #x64362a34aca9997d) (#x892cc54bc5288440 #xcffb4b249261388c) (#xc4a6112b11b417e3 #x3cf62b824496fc33) (#xef79889b88e9b814 #x23bc9b9a653aec5b) (#x0000000000000000 #x0000000000000000) (#xbd02dd1cddc8f3fd #xef141c55f2b166a4) (#x27d5b6dcb6331678 #xca0edcda9d9c2d19) (#x8725b835b8ea56ad #x63a13578a559500b) (#xeb7f2cbf2c726ed0 #xd180bf65b02a4674) (#x75aee35be3125d91 #x06a65b150a17a7e6) (#xaaffd7b3d78044fc #xf7c9b301daedbfba) (#xe170f5e5f52b6af9 #x8fe6e5c6520284dc) (#x6bbf4bb54bf951ea #xe40cb533ef6f22dd) (#x9ad76bc06bfbe585 #x251ac08f6f2d4bbd) (#x559e8ab88a40227e #x9a85b8e16d97be5d) (#xfa87d026d00d6477 #x427f2650c66e60b3) (#x3dc2ba16ba43ccc7 #xda981603adf4020d) (#x13fbae8baed361c5 #xeae18babfd4c7331) (#xc94c174e178c7a5d #x34bd4e0f5ca20a39) (#x80c0670a678b3f3a #x358c0a565f4564a9) (#xa0f00ee90ed940d5 #xa9afe9a238c57d12) (#x5e717aeb7a4ff266 #x19eceb0d2bbbb78e) (#x50780795078d208b #xb5b695511c83df09) (#x26359fd59f65c249 #x1701d5953998e662) (#x764d984098e8e2c2 #xa2b740c4251b396b) (#x2a3fb0b9b00b7bc6 #xc245b95785a8db13) (#x486c594d59519156 #xdc3e4d16a7e3a5eb) (#x4383a91ea95e414e #x5f571efae1cfac38) (#xc0a0b50fb52fc127 #xceca0f7d9186561c) (#x8f29337d331f39e6 #x44d97d45cc79c755) (#x5b97f7c6f782f093 #x36dfc6bd5aafd6da) (#x46652433249343bb #x7064334a90dbcd6c) (#xfc822610263ad9d1 #xc95d103198769f6a) (#x15fe58bd58e4dc63 #x61c3bdcaa3548ce8) (#x4f8986728630f8c1 #x8a1372385dff9149) (#xc2a3e71de783aa45 #xb7d41de31a8e03ea) (#xe090dcecdc7dbec8 #x52e9ec89f6064fa7) (#xc1409c069c791516 #x13c5063235829d67) (#x322bee61eed7ca1b #xabcd61103ec8a1f1) (#xa51683c483144220 #x869cc41249d11c46) (#xe373a7f7a787019b #xf6f8f758d90ad12a) (#x77adb149b1be36f3 #x7fb8498b811ff210) (#x7fa13a013a4b59b8 #x58c001b6e83f654e) (#x4e69af7baf662cf0 #x571c7b77f9fb5a32) (#x7844e53ee52a302f #x0eed3e98122351ec) (#x51982e9c2edbf4ba #x68b99c1eb8871472) (#x547ea3b1a316f64f #x478ab1aec9937526) (#x0dea066506386dbe #x084b658d1834f60a) (#x9d32b4ffb49a8c12 #x7337ffa195317f1f) (#xb0e8db79dbf09e43 #xe75f79d8ea8590ae) (#x8526ea27ea463dcf #x1abf27e62e5105fd) (#xf76dd643d63509c9 #x4a3443ddde5a96b9) (#x33cbc768c7811e2a #x76c2685f9acc6a8a) (#xa4f6aacdaa429611 #x5b93cd5dedd5d73d) (#xf884823482a10f15 #x3b6134ce4d663545) (#x3c22931f931518f6 #x07971f4c09f0c976) (#x0203521252ac6b62 #x791e129e8b0855f6) (#xbce2f415f49e27cc #x321b151a56b5addf) (#xfd620f190f6c0de0 #x1452197e3c725411) (#x35ce315e31b6a38c #xfde05e3ec4d49553) (#x6253e9f4e95aea90 #x1e7bf441224b7ef8) (#xec9af380f3130747 #x87ad804b4a3672d6) (#x933bc981c9585eff #xdf6d81fda2091798) (#xc6a5433943187c81 #x45e8391ccf9ea9c5) (#xf088097c0954605e #x1c197cf32446a21b) (#xcf49e178e1bbc7fb #xbf9f786e02baf5e0) (#x3028bc73bc7ba179 #xd2d3738eb5c0f407) (#x64561fc21f6d5736 #x9559c2207c538121) (#x3824373b378ece32 #xf5ab3bb3dce06359) (#xcaaf6c556c76c50e #x90ac55de73ae94b4) (#xd2bb328d32aa74d3 #xf9248d99c8ceee56) (#x2fd93d943dc67933 #xed7694e7f4bcba47) (#x03e37b1b7bfabf53 #xa4111bd12f0c9e8d) (#xb4ee7f5d7f6b4887 #x15635d273f953a81) (#xb2eb896b895cf521 #x9e416b46618dc558) (#xb70d04460491f7d4 #xb17246f61099a40c) (#x65b636cb363b8307 #x4856cb6fd8574a5a) (#x31c8957a952d7548 #x0fdc7ac111c43f7c) (#x18145ed85edcb1dd #x6988d847bb607ae2) (#xe6952ada2a4a036e #xd9cbdae8a81eb07e) (#x0406a424a49bd6c4 #xf23c24ffd510aa2f) (#x82c3351835275458 #x4c9218c8d44d315f) (#x86c5913c91bc829c #xbeae3c37015d9b70) (#x4b8f225622ab2e05 #x782f56c788ef3b66) (#x1c12fafcfa476719 #x9bb4fcb86e70d0cd) (#x539b7c8e7c779fd8 #x11a78e80338f4184) (#xd15849964950cb80 #x5d359648e7c270db) (#xa8fc85a1852c2f9e #x8ed7a19f51e5ea4c) (#xd55eedb2edcb1d44 #xaf09b2b732d2daf4) (#xcea9c871c8ed13ca #x62907121a6be3e9b) (#xe57651c151b0bc3d #x7ddac13987122ef3) (#x6fb9ef91ef62872e #x163091cc3a7f88f2) (#xb108f270f2a64a72 #x3a5070974e815bd5) (#xa715d1d6d1b82942 #xff82d68cc2d949b0) (#x67b564d96497e865 #x3148d9f1535f1fac)) ((#xde4d3e3681b6c304 #x8f11725e92ccbe9f) (#x8a217a33ba2934c5 #xb532fb900b9b6027) (#x648be19c9b407bdf #xb7bd2db8a8103d4d) (#x5a66c8651f2784b7 #xbfc4f31861798a26) (#x30e7a599a0df8c1e #x8d9ea4763147e3f5) (#x8ea7125ea2149426 #xdb705dc4c1055843) (#x5ba6d2ef19b9acff #x45353b0db2bf843f) (#xfd74d6854bfcf2c8 #xb4949084bb3faf12) (#x795f20d6d56db57b #x844111c2488a9bab) (#xafddce3a64a1f57a #xd7d4ec348db955fc) (#xc259e5f6c90525e8 #x461c8631a1901660) (#xc399ff7ccf9b0da0 #xbced4e2472561879) (#x0fca96ea22265b3e #x7f16b2c32be85a87) (#x14db0b1a78c965e9 #x15897bc764a3d837) (#xa918928070630509 #x8eb7194a226871aa) (#x816d84b48032cf18 #xa466ef07eaed02c4) (#x2d3364d3eef242ba #xbe62980cd1dd4513) (#x45f13df85df51a83 #xbb199c48e4ac30f2) (#xe6654b751113cc1f #xde0b5980f4742da2) (#x789f3a5cd3f39d33 #x7eb0d9d79b4c95b2) (#xebece9483fcac7b1 #x963cb869bad36b17) (#x8ce42689aeebc4b6 #xec510eeea44a4471) (#xcfd047cbe7dc2e46 #x0e2b67d8ef3750d5) (#xc01ad121c5fa7578 #x713dd51bc4df0a52) (#x467213a55794625b #x76c90777522522d9) (#xfcb4cc0f4d62da80 #x4e65589168f9a10b) (#x5d638e550d7b5c8c #x1c56ce731d6ea069) (#x7b1c1401d992e5eb #xb36042e82dc58799) (#x48789fc5732c112d #xf32e7da1aa0b7647) (#x85ebecd9980f6ffb #xca24495320733aa0) (#xd501c0b1bbad38d9 #x9e4566c973badc7c) (#xbdc3999a08aa60e0 #x9b3e628d46cba99d) (#xcc536996edbd569e #xc3fbfce759be42fe) (#x7050ea86e3891e36 #xa234567fccb3e57a) (#x119d79fd666aed42 #x813a15867dfbee4a) (#xc71f9711d7a6ad43 #xd2afe870b8c8201d) (#xb2090f702a8c3bde #xe428d04e6d23f31a) (#xdb0b4cd19f154baf #x1ba21c1f8b9488e2) (#x3127bf13a641a456 #x776f6c63e281edec) (#xbac6dfaa1af6b8db #x38ac5fe63adc83d2) (#xbf80ad4d04553070 #xac1f31a72384b5af) (#xd948780693ea1b3f #x2c834f35eedb94d0) (#xd888628c95743377 #xd67287203d1d9ac9) (#xb74f7d97342fb375 #x709bbe0f747bc567) (#x9bbc03cedc43d987 #x3408ee1676608e6d) (#xbb06c5201c689093 #xc25d97f3e91a8dcb) (#x89a2546eb0484c1d #x78e260afbd12720c) (#x3461cdf4b8e22cfd #xe3dc0222fbd9db91) (#x121e57a06c0b959a #x4cea8eb9cb72fc61) (#xad9efaed685ea5ea #xe0f5bf1ee8f649ce) (#xb50c494038d0e3e5 #x47baed251134d955) (#x88624ee4b6d66455 #x8213a8ba6ed47c15) (#x090fca5036e4ab4d #x267547bd84397ed1) (#x27bf80ded277912f #x55c7448ee36d29e9) (#x32a4914eac20dc8e #xbabff75c5408ffc7) (#x054672e71ea388ab #x94b36e411958367d) (#x1c14dbc048b3e6ec #xc90df46f335ca8ff) (#x9f3a6ba3c47e7964 #x5a4a4842bcfeb609) (#x842bf6539e9147b3 #x30d58146f3b534b9) (#x74d682ebfbb4bed5 #xcc76f02b062ddd1e) (#xd4c1da3bbd331091 #x64b4aedca07cd265) (#x4ebdc37f67eee15e #xaa4d88df05da5211) (#xe9afdd9f33359721 #xa11deb43df9c7725) (#xd742f466b7526849 #xa96435e316f5c04e) (#x983f2d93d622a15f #xf9d87529c0e99c46) (#x49b8854f75b23965 #x09dfb5b479cd785e) (#x39e86fc9963b2753 #xabebe3cbb57e9d24) (#x5825fcb213d8d427 #x88e5a03204369614) (#x2339e8b3ca4a31cc #x3b85e2da29f3118d) (#x97f5bb79f404fa61 #x86cec7eaeb01c6c1) (#x9373d314ec395a82 #xe88c61be219ffea5) (#x9a7c1944daddf1cf #xcef92603a5a68074) (#x5369023529c32ffa #x99b1b4a5e540f4f7) (#x25fcb409de88c1bf #x62e617a4862235db) (#x92b3c99eeaa772ca #x127da9abf259f0bc) (#xb04a3ba726736b4e #xd3098364086cef28) (#x654bfb169dde5397 #x4d4ce5ad7bd63354) (#xc49cb94cddc7d59b #x1f7f734f0e413236) (#x8be160b9bcb71c8d #x4fc33385d85d6e3e) (#x3eed29f98467ff68 #x0879dea0c969b76b) (#xf638280271e70915 #xa5c084135a49cdf1) (#xe2e32318092e6cfc #xb049ffd43eea15c6) (#x8d243c03a875ecfe #x16a0c6fb778c4a68) (#xff37e2524703a258 #x83b5c3aede70b320) (#x9130e7c3e0c60a12 #xdfad329444d0e297) (#x3828754390a50f1b #x511a2bde66b8933d) (#xfef7f8d8419d8a10 #x79440bbb0db6bd39) (#x546c44053b9ff7c1 #x3a2389ce9957deb8) (#xd2048681a9f1e0e2 #x3dd75ba20fadf633) (#x57ef6a5831fe8f19 #xf7f312f12fdecc93) (#xef6a812527f76752 #xf87e1e3d704d5373) (#xa5512a37582426ef #x3c7130b6bf093906) (#xddce106b8bd7bbdc #x42c1e9612445acb4) (#x433461424937eaf0 #xe27a69364b7d14a4) (#x600d89f1837ddb3c #xd9ff8bec628e0529) (#xa394768d4ce6d69c #x6512c5c810d81d50) (#xf37e5ae56f4481be #x3173ea524311fb8c) (#xbe40b7c702cb1838 #x56eef9b2f042bbb6) (#xf9f2bee853c1522b #xdad636d071a19776) (#x2bf63869fa30b2c9 #xe7016d727e0c6145) (#xe1600d45034f1424 #x7d9964eb886307ed) (#x7dd948bbcd501598 #xea03b7968214a3cf) (#xc1dacbabc3645d30 #x8bcc1d0e1719044b) (#xa1d7425a4019860c #x523396e275970162) (#xe86fc71535abbf69 #x5bec23560c5a793c) (#x5ee0a008071a2454 #xd186554cabe7b242) (#x73d3c4dbe9e866ee #x6fe4cd407a3af751) (#x35a1d77ebe7c04b5 #x192dca37281fd588) (#x66c8d54b97bf2b4f #x809c7e92cd5f217f) (#x68c2592bb3075839 #x057b0444357175e1) (#x512a36e2253c7f6a #xae90e78f800fe8c5) (#x5f20ba8201840c1c #x2b779d597821bc5b) (#x55ac5e8f3d01df89 #xc0d241db4a91d0a1) (#xf0fd74b86525f966 #xfca3716df598e9a7) (#xcb562fa6ffe18ea5 #x6069c18c25a968b1) (#x638ea7ac891ca3e4 #x142f10d3d4071702) (#xd047b256a50eb072 #x0af608886ae2ea01) (#xf2be406f69daa9f6 #xcb82224790d7f595) (#x20bac6eec02b4914 #xf65579e59f7a03a6) (#x6fc71f1ba15b8002 #xa6e9392f49665fae) (#x80ad9e3e86ace750 #x5e972712392b0cdd) (#x4a3bab127fd341bd #xc40f2e8bcf446a75) (#x1ad1877a5c71169f #x906e01119c8d8ca9) (#x0486686d183da0e3 #x6e42a654ca9e3864) (#x08cfd0da307a8305 #xdc848fa857ff70c8) (#x6708cfc191210307 #x7a6db6871e992f66) (#x832eb0638ccd9f88 #x9347bc2d8fa21ef6) (#x443127725b6b32cb #x41e8545d376a3eeb) (#xd187a8dca390983a #xf007c09db924e418) (#xf47b1cd57d185985 #x92e1d7393f06d1c3) (#xa8d8880a76fd2d41 #x7446d15ff1ae7fb3) (#x2f705004e20d122a #x8943cb26b4925921) (#x6d842bccada4d092 #x91c86a052c29439c) (#x94769524fe6582b9 #x4b1e5cd55d88d4ea) (#x0c49b8b7284723e6 #xb2c629fc9d6148ac) (#x2cf37e59e86c6af2 #x44935019021b4b0a) (#x40b74f1f43569228 #x2faaf209fdf4068f) (#xc8d501fbf580f67d #xadb95ab393207a9a) (#xfbb18a3f5f3e02bb #xedf765fa14ee8b44) (#xfa7190b559a02af3 #x1706adefc728855d) (#xdacb565b998b63e7 #xe153d40a585286fb) (#xb4cc53ca3e4ecbad #xbd4b2530c2f2d74c) (#xce105d41e142060e #xf4daafcd3cf15ecc) (#x0e0a8c6024b87376 #x85e77ad6f82e549e) (#x07054630125cd83b #xa3923d6b7c172a4f) (#x3622f923b41d7c6d #xd4fd51089e96c7a3) (#x3f2d337382f9d720 #xf28816b51aafb972) (#x6a816dfcbff808a9 #x325a576e503e69d3) (#xc6df8d9bd138850b #x285e20656b0e2e04) (#x4cfef7a86b11b1ce #x9d6cdbf560954e23) (#xe4267fa21dec9c8f #xe92a0aaa913b3190) (#xdc0e0ae18d499394 #xb8302174f783a2ad) (#xdf8d24bc8728eb4c #x75e0ba4b410ab086) (#x9635a1f3f29ad229 #x7c3f0fff38c7c8d8) (#x90f0fd49e658225a #x255cfa819716ec8e) (#xe32339920fb044b4 #x4ab837c1ed2c1bdf) (#x8f6708d4a48abc6e #x218195d112c3565a) (#xeeaa9baf21694f1a #x028fd628a38b5d6a) (#x243cae83d816e9f7 #x9817dfb155e43bc2) (#x267f9a54d4e9b967 #xaf368c9b30ab27f0) (#xa2546c074a78fed4 #x9fe30dddc31e1349) (#x42f47bc84fa9c2b8 #x188ba12398bb1abd) (#x03832e5d0a6178d8 #xcdd09b3fb689122b) (#xece9af782d961f8a #x35ae8502c6c44158) (#x6c443146ab3af8da #x6b39a210ffef4d85) (#x0000000000000000 #x0000000000000000) (#xb68f671d32b19b3d #x8a6a761aa7bdcb7e) (#xab5ba6577c9c5599 #xb9964a6047276d98) (#xc55ca3c6db59fdd3 #xe58ebb5add873c2f) (#x75169861fd2a969d #x3687383ed5ebd307) (#x7190f00ce517367e #x58c59e6a1f75eb63) (#xb18a212d20ed4306 #x29f84b71dbaae131) (#xaa9bbcdd7a027dd1 #x4367827594e16381) (#xd3c49c0baf6fc8aa #xc72693b7dc6bf82a) (#x1dd4c14a4e2dcea4 #x33fc3c7ae09aa6e6) (#xb945f1f71097c003 #xf57cc4d98c5591f9) (#x8668c284926e1723 #x07f4d26c96fa288b) (#x105d637760f4c50a #x7bcbdd93ae3de053) (#x1e57ef17444cb67c #xfe2ca7455613b4cd) (#x50ea2c6823a25722 #x54612f9a53c9e6dc) (#xa6d2046a52455e37 #xf1a1ab8909802b2d) (#x6e070591a7c5a84a #x5c18f13a9aa051b7) (#xf13d6e3263bbd12e #x0652b978265ee7be) (#x37e2e3a9b2835425 #x2e0c991d4d50c9ba) (#x3cae1d2e8898aff8 #x3f588d8aac26ab59) (#x0b4cfe873a1bfbdd #x11541497e17662e3) (#x1758254772a81d31 #xd859e0f8d22aca1c) (#x61cd937b85e3f374 #x230e43f9b1480b30) (#x29b50cbef6cfe259 #xd0203e581b437d77) (#xf5bb065f7b8671cd #x68101f2cecc0dfda) (#xf7f832887779215d #x5f314c06898fc3e8) (#x7f9a7c6cc1af4508 #xdd22e4bce75bbffd) (#xa7121ee054db767f #x0b50639cda462534) (#x7213de51ef764ea6 #x95150555a9fcf948) (#xea2cf3c23954eff9 #x6ccd707c6915650e) (#x024334d70cff5090 #x3721532a654f1c32) (#x1892b3ad508e460f #xa74f523bf9c2909b) (#x3d6e07a48e0687b0 #xc5a9459f7fe0a540) (#x624ebd268f828bac #xeeded8c607c1191b) (#x4177559545c8ba60 #xd55b3a1c2e320896) (#xe0a017cf05d13c6c #x8768acfe5ba509f4) (#x47b2092f510a4a13 #x8c38cf6281e32cc0) (#x9cb945fece1f01bc #x979ad37d0a77a422) (#xae1dd4b0623fdd32 #x2d2524215e7f5be5) (#x95b68faef8fbaaf1 #xb1ef94c08e4edaf3) (#xcd93731ceb237ed6 #x390a34f28a784ce7) (#xa01758d04687ae44 #xa8c25ef7a6510f7b) (#x2eb04a8ee4933a62 #x73b2033367545738) (#xbc0383100e3448a8 #x61cfaa98950da784) (#x7e5a66e6c7316d40 #x27d32ca9349db1e4) (#x0a8ce40d3c85d395 #xeba5dc8232b06cfa) (#x28751634f051ca11 #x2ad1f64dc885736e) (#x3a6b41949c5a5f8b #x663b78f403f78f0f) (#xd682eeecb1cc4001 #x5395fdf6c533ce57) (#x7755acb6f1d5c60d #x01a66b14b0a4cf35) (#x6b417776b96620e1 #xc8ab9f7b83f867ca) (#x87a8d80e94f03f6b #xfd051a79453c2692) (#xed29b5f22b0837c2 #xcf5f4d1715024f41) (#x217adc64c6b5615c #x0ca4b1f04cbc0dbf) (#xe5e665281b72b4c7 #x13dbc2bf42fd3f89) (#x22f9f239ccd41984 #xc1742acffa351f94) (#x7695b63cf74bee45 #xfb57a3016362c12c) (#x16983fcd74363579 #x22a828ed01ecc405) (#xb885eb7d1609e84b #x0f8d0ccc5f939fe0) (#x01c01a8a069e2848 #xfaf1c815d3c60e19) (#x59e5e6381546fc6f #x72146827d7f0980d) (#xa49130bd5eba0ea7 #xc680f8a36ccf371f) (#xac5ee0676ec08da2 #x1a04770b3b3047d7) (#x82eeaae98a53b7c0 #x69b674385c6410ef) (#x9efa7129c2e0512c #xa0bb80576f38b810) (#x2a3622e3fcae9a81 #x1df0a567adca6f5c) (#x7c195231cbce3dd0 #x10f27f8351d2add6) (#x99ff3719d0bc8917 #x0329bd3c132f925f) (#x7adc0e8bdf0ccda3 #x49918afdfe038980) (#x13de4d2a6a95bdd2 #xb61b46ac18b4f278) (#xe7a551ff178de457 #x24fa919527b223bb) (#x690243a1b5997071 #xff8acc51e6b77bf8) (#x151b11907e574da1 #xef78b3d2b765d62e) (#x3bab5b1e9ac477c3 #x9ccab0e1d0318116) (#x562f70d23760a751 #x0d02dae4fc18c28a) (#xc9151b71f31ede35 #x574892a640e67483) (#x1952a92756106e47 #x5dbe9a2e2a049e82) (#x4bfbb198794d69f5 #x3efee69e1c82646c) (#x52a918bf2f5d07b2 #x63407cb03686faee) (#x1b119df05aef3ed7 #x6a9fc9044f4b82b0) (#x4f7dd9f56170c916 #x50bc40cad61c5c08) (#x4d3eed226d8f9986 #x679d13e0b353403a) (#x06c55cba14c2f073 #x5963f57eafd12456) (#x5ca394df0be574c4 #xe6a70666cea8ae70) (#x1f97f59d42d29e34 #x04dd6f5085d5bad4) (#x33648bc4aabef4c6 #x404e3f4987cef1de) (#xb3c915fa2c121396 #x1ed9185bbee5fd03) (#xca96352cf97fa6ed #x9a980999f66f66a8) (#x9d795f74c88129f4 #x6d6b1b68d9b1aa3b) (#x0d89a23d2ed90bae #x4837e1e94ea746b5) (#xf832a462555f7a63 #x2027fec5a267996f)) ((#x97506fa9e7ab8079 #xb4f01ab55adb20be) (#x6e9f451416971a91 #xaa62580a55efe760) (#x309432d1935fdc99 #xce7f098967fc373d) (#x8bb82d43c2f942b9 #x9d0b8ec0afb0f18a) (#xc95b186c62634671 #xd0ed4b3668c8f0e3) (#x0fbd471d410e4aea #x0704c7efe240f358) (#x0251ccd0a74e56d7 #x27f3d968f2ebf484) (#x417b9f97b5f37995 #x988d91aa4c078faf) (#x5d93dd7d90a1bb55 #xb17605dfb96c5e9b) (#x0887b6c6d9fb9bda #x9c4ae2634e2a5655) (#x73be619681e2f3db #x7101414bd9104c16) (#xfa578005e455e7b5 #xcbf916e3844b4918) (#xfb9ee66d5672cc3f #x39619bd7fddf335a) (#x26aa0a2dc8b8d354 #x5c3da6f72e5644d8) (#xb8b4b52a44cfe37d #x861fd31543334871) (#xf423a170177c86d5 #x3e655c381f9fc002) (#xa45cf7c0619d21bd #xafe44760b6589945) (#x37aec30a0baa0da9 #x55312c05cb969230) (#x9c4f73d72b3966fe #xfdd1ac8a9f8ef82d) (#xd47a3ceef516af3b #x0b8e5277e4375b95) (#xb6c0945fb7e6821d #x738399ced8e7c16b) (#xdeac46f88ba36236 #xb037697c58f6f944) (#x5931861e1d3d1738 #xff53740f9e797550) (#xa2af60734b4fdb07 #xc632efd863a6460a) (#x6f56237ca4b0311b #x58fad53e2c7b9d22) (#xc8927e04d0446dfb #x2275c602115c8aa1) (#xb262cf3c3a7a2e70 #x3da6e81efff2eaa0) (#x8c82dc985a0c9389 #x0645ab4c03da5487) (#x1d2124829775e94a #xdb6319418cffab76) (#x9501a37940e5d6ae #x9303c3dda830d43a) (#x0dec8bcde6401c3d #x20f71e8710ab07dc) (#x9e1ebf078c773029 #xda2275e26d650ca9) (#x01c96668b2272b8a #xf2988d3479947a42) (#x163e38fc5be70fcd #x9242af7e49aa73e5) (#xce61e9b7fa969741 #x4ba36ebac4a255ee) (#x9b75820cb3ccb7ce #x669f890633e45d20) (#x6580596ada05fc16 #xe343ee3590ba3ff3) (#x7f9b8c33d585c46c #xa36ed2f8b02f3188) (#x40b2f9ff07d4521f #x6a151c9e3593f5ed) (#xa7c45d7874f45ce0 #x7a8f133c3d271783) (#x4f0fbee246da18f5 #x6d11db71d7d306b5) (#xae8a8dd61f28ecb0 #x145d7c6b0a993b94) (#x27636c457a9ff8de #xaea52bc357c23e9a) (#x8d4bbaf0e82bb803 #xf4dd26787a4e2ec5) (#xa0feaca3ec018dd0 #xe1c136b0914db28e) (#x2e2dbceb1143488e #xc0774494607c128d) (#x3667a562b98d2623 #xa7a9a131b202e872) (#xa8791a6535fa160a #x7d8bd4d3df67e4db) (#x969909c1558cabf3 #x46689781234f5afc) (#xd996b7231356b306 #x2b794cf0f49c5c49) (#x5c5abb15228690df #x43ee88ebc0f824d9) (#xbf8e44f1dc3a324d #x1d51f699ef59ed7c) (#x4bade581cb46b498 #x2334aaa1f0c62d7e) (#xb709f23705c1a997 #x811b14faa173bb29) (#x184a1989a8ce6ead #x67dee5a5d27efaff) (#xe8cbe39a322e4415 #x179ec84deaf41136) (#xe4ee0e3f664973a2 #xc5f15bfe83cb6ca8) (#xc1dcaeaabb98ddab #x4ca7a95526e2a6b6) (#x1ce842ea2552c2c0 #x29fb9475f56bd134) (#x771c3af50c7e5fb6 #x3f24309bfe0567dd) (#x84056a5e83f70853 #x9a0f492f4df002d2) (#xad12276e0a4191ed #xc136283781e6b552) (#x67d195ba7d4baac1 #xc4b0375d6251cb77) (#xdcfd8a282ced34e1 #x97c4b014aa1d0dc0) (#xf8064cd5431bb162 #xec0acf8b76a0bd9c) (#x94c8c511f2c2fd24 #x619b4ee9d1a4ae78) (#x82f6fdeda925f2e9 #xf3d9e197980edd9d) (#x5aa92ca608546a65 #x2a3820531506fb96) (#xd62bf03e5258f9ec #x2c7d8b1f16dcaf11) (#x0398aab815697d5d #xd56b545c8b7f8ec6) (#x62baa8b142f02d26 #x780dcbb93cd09afe) (#x29174d3089b699be #x5b396118cc16b780) (#xc015c8c209bff621 #xbe3f24615f76dcf4) (#x6618f3d2cf6c814b #x3628ba691bc5b135) (#xeb53492227473948 #xc2f59c11618b9ff0) (#xb491588f10a8d4ca #x547040a62a0c35ef) (#xb97dd342f6e8c8f7 #x74875e213aa73233) (#xc38d627a1cd68b7c #x6b54703dd4095232) (#xe776a48773200eff #x109a0fa208b4e26e) (#xbb2c1f9251a69e20 #x53748749c84cc6b7) (#xdbc77bf3b418e5d1 #x0c8a95980677a8cd) (#xfd6d71de7ca03685 #x50b7336f2821ec15) (#x5745a76bee147658 #x0acf3ed405adfc4a) (#x906a9e727f5e5149 #x2fbe3f39f6b185b3) (#xb3aba954885d05fa #xcf3e652a866690e2) (#x0b1f1c7ecc92e687 #x4921b63fc555d893) (#x19837fe11ae94527 #x95466891abea80bd) (#xf9cf2abdf13c9ae8 #x1e9242bf0f34c7de) (#x343669b21ec370f4 #x805a785940e91cf6) (#xa137cacb5e26a65a #x1359bb84e8d9c8cc) (#xd7e29656e07fd266 #xdee5062b6f48d553) (#x1bd2b331bda713f0 #xb2b5b1f959017439) (#xcfa88fdf48b1bccb #xb93be38ebd362fac) (#x879dc0e6969e750e #x4f641d73c68f8c14) (#x51b630d8c4c68ce2 #x6319966cd0532305) (#xabe1b0dd20936b57 #xa8e0808f54186a1d) (#x330c98698636a1c4 #x1b145dd5ec83b9fb) (#xc6e65f71236d0c9b #xd7e98cd98a8803bb) (#x20599d9ee26a29ee #x35eb0e4ffba89b97) (#x146ff42cfca9591a #xb5b17616bb418761) (#xa59591a8d3ba0a37 #x5d7cca54cfcce307) (#x3cb1df74c738eb2e #x1c109a3a0ec34aa3) (#x2b4681e02ef8cf69 #x7ccab8703efd4304) (#x7af0b138ea3e438b #x1fd32e1ceeae6001) (#xee38742918fcbeaf #x7e4860f53f0ace79) (#xea9a2f4a956012c2 #x306d1125181fe5b2) (#x4ec6d88af4fd337f #x9f895645ae477cf7) (#x2190fbf6504d0264 #xc773837b823ce1d5) (#xe185333459f2f445 #x794ca71add4a3d21) (#x93f234ca6a372c14 #xfad56b657dce0b75) (#x1104c927c312defd #x090c8af2e5c0d6e8) (#x6373ced9f0d706ac #x8a95468d4544e0bc) (#x7026cb2e948b8e86 #xa46a1517526fc2d0) (#x6bf4781f292c9d76 #x16dfa4ee0b6eb6e9) (#x381384174aa44743 #x5235ebea29d66168) (#x094ed0ae6bdcb050 #x6ed26f5737be2c17) (#xe5276857d46e5828 #x3769d6cafa5f16ea) (#xbae579fae381b5aa #xa1ec0a7db1d8bcf5) (#x8ed31048fd42c55e #x21b67224f131a003) (#xaa28d6b592b440dd #x5a780dbb2d8c105f) (#x7dca40e372cb92bb #x849d0b9042c4c50c) (#xcc3025675dd8c196 #x6c50b7d23649a16a) (#x54dd0dd3fb7d0b05 #xdfa46a888ed2728c) (#x612202095799507b #xad669fe5b7af1438) (#xc2440412aef1a0f6 #x99ccfd09ad9d2870) (#x686cd2a73c45e02b #xc3b4f0b28011382f) (#x2532a095ddd1ae09 #x8956f2aba529ca1e) (#xbe4722996e1d19c7 #xefc97bad96cd973e) (#x6cce89c4b1d94c46 #x8d918162a70413e4) (#x0ad67a167eb5cd0d #xbbb93b0bbcc1a2d1) (#x315d54b92178f713 #x3ce784bd1e684d7f) (#x754df625ab300961 #x18d7e9f30cee9359) (#x7b39d75058196801 #xed4ba328973a1a43) (#x5b604aceba7341ef #xd8a0ad676c9281d4) (#xa366061bf968f08d #x34aa62ec1a323c48) (#x2db51653042a35d3 #x151c10c8eb039c4b) (#xdf652090398449bc #x42afe44821628306) (#x60eb6461e5be7bf1 #x5ffe12d1ce3b6e7a) (#xf1489c7b28c70132 #x82d8a0dc411e918b) (#x78a17de84d70155c #x3820f7741c459485) (#xf6726da0b032d002 #x19968550ed743486) (#xd5b35a86473184b1 #xf916df439da321d7) (#xd0d8678d788a0356 #x45ab23a7c322705e) (#x727707fe33c5d851 #x8399cc7fa0843654) (#x39dae27ff8836cc9 #xa0ad66de50421b2a) (#x79681b80ff573ed6 #xcab87a4065d1eec7) (#x32c5fe0134118a4e #xe98cd0e19517c3b9) (#x42e3352fa09a04c8 #x4de6c5f6c7780169) (#x129c639fd67ba3a0 #xdc67deae6ebf582e) (#x7c03268bc0ecb931 #x760586a43b50bf4e) (#x4d5e7232e1944e22 #x4ae202192538f231) (#x46416e4c2d06a8a5 #x03c3b426e06d2aa2) (#x1eb98e3a821c9417 #x0e084d1d078025b0) (#x8a714b2b70de6933 #x6f9303f4d6248bc8) (#x3a4248c7edea1194 #x75c63282db3d95ec) (#x7484904d191722eb #xea4f64c7757ae91b) (#x8654a68e24b95e84 #xbdfc9047bf1bf656) (#x5e0b77c585c8c608 #x641d51833213d05d) (#xeff11241aadb9525 #x8cd0edc1469eb43b) (#x3ee013a46076bdf9 #x3be34352fc28be27) (#x2208514e45247f39 #x1218d72709436f13) (#x0e742175f3296160 #xf59c4adb9bd4891a) (#x58f8e076af1a3cb2 #x0dcbf93be7ed0f12) (#x8f1a76204f65eed4 #xd32eff1088a5da41) (#xf2d036c33dae7c6f #x57b3f480ca611f4d) (#x0000000000000000 #x0000000000000000) (#x04a25b638d9cac6d #x4e2571d027152bcb) (#x69a5b4cf8e62cba1 #x312c7d86f985426d) (#x4a6483e979619f12 #xd1ac27958952573c) (#xfef5db6669c94bd8 #x85dc6733a35e62d3) (#x9fd7d96f3e501ba3 #x28baf8d614f176eb) (#x3d78b91c751fc0a4 #xee88170e775730e1) (#xe04c555cebd5dfcf #x8bd42a2ea4de4763) (#xbddf88217b74649a #x3aa22ff11db219f8) (#x6d07efac03fe67cc #x7f090c56de9069a6) (#xff3cbd0edbee6052 #x7744ea07daca1891) (#xcdf9430fefffea1c #x9ec83ae64fdddb28) (#x478808249f21832f #xf15b391299f950e0) (#x35ff0fdaace45b7e #x72c2f56d397d66b4) (#x98ed28b4a6a5ca93 #xb3f4dd5ab89bd3e6) (#x432a534712bd2f42 #xbf7e48c2beec7b2b) (#x23c13726f70354b3 #xe0805a1370d71551) (#xe21d998c4c9b8918 #xac27f3465635b3e7) (#xf081fa139ae02ab8 #x70402de8388aebc9) (#x6a3d1e779b0bb6fc #xe44729da72faccab) (#x9abce46401eb9c44 #x940704324a702762) (#x7e52ea5b67a2efe6 #x51f65fccc9bb4bca) (#xd85fd14ba171988c #xd9e1c1c48d08260b) (#xc57ef5c9360471c6 #x0282d88501f78d7d) (#x833f9b851b02d963 #x01416ca3e19aa7df) (#x522e9a60d1aff1bf #xb672c2305b2cadc3) (#xeda0de910d95c3f2 #xab2334a9b47540bf) (#xcac3b2d4770a3b2c #x05861f6ae3b77e25) (#xc72f3919914a2711 #x257101edf31c79f9) (#x3f2975ccd2519673 #xc97bce6685bcc465) (#xd11101e5caad28dc #xb733ae93bab60a1c) (#x85cc0c3631d023d9 #x6897c41b34647890) (#xe3d4ffe4febca292 #x5ebf7e722fa1c9a5) (#x80a7313d0e6ba43e #xd42a38ff6ae52919) (#x568cc1035c335dd2 #xf857b3e07c398608) (#x2c7c703bb60d1e59 #xe7849dfc9297e609) (#xe6bfc2efc1072575 #xe20282967120982c) (#x99244edc1482e119 #x416c506ec10fa9a4) (#x816e5755bc4c8fb4 #x26b2b5cb1371535b) (#xd289ab5ddfc45581 #x6258facf31c984da) (#x882087fbd7903fe4 #x4860da9c24cf7f4c) (#xf31950ab8f8957e5 #xa52b79b4b3f5650f) (#xfca417b6ce871d0f #xa22fbe5b51b59657) (#x17f75e94e9c02447 #x60da224a303e09a7) (#x64493f026822d79c #x11db6301e92e45b1) (#x135505f7645c882a #x2eff539a172b226c) (#x4c97145a53b365a8 #xb87a8f2d5cac8873) (#xda0e1d9b063fce5b #xfe1218ac7fe3d28f) (#x55146bbb495a208f #x2d3ce7bcf74608ce) (#x2fe4da83a3646304 #x32efc9a019e868cf) (#xcb0ad4bcc52d10a6 #xf71e925e9a230467) (#x4410a29c8a48fe72 #x24306d4e1286de26) (#x06f397b32ad2faba #x69d6a8b8d5fedf4f) (#x073af1db98f5d130 #x9b4e258cac6aa50d) (#xc4b793a184235a4c #xf01a55b17863f73f) (#x5fc211ad37efed82 #x9685dcb74b87aa1f) (#xa60d3b10c6d3776a #x88179e0844b36dc1) (#xf7bb0bc80215fb88 #xeb0e086494e04ec4) (#x76d55c9dbe59743c #xcdbcbdaf87911d9f) (#x89e9e19365b7146e #xbaf857a85d5b050e) (#xd340cd356de37e0b #x90c077fb485dfe98) (#x923b52a2d810079e #x084de651045a7137) (#x507f56b076e1a768 #x91811b58a9c75947) (#xacdb4106b866ba67 #x33aea503f872cf10) (#x48354f39de2fc9c5 #xf65ffefd7bb9a3b8) (#x9d8615bf991e4d74 #x0f4921bee61a826f) (#xb5583ee7a28fff40 #xa6e8cd9253984fad) (#x71efad4626aca50c #x56f298232bfbb892) (#x056b3d0b3fbb87e7 #xbcbdfce45e815189) (#x1f70e852303bbf9d #xfc90c0297e145ff2) (#x15a692444e8e7290 #x4729fb22c2d5fd23) (#x1a1bd5590f80387a #x402d3ccd20950e7b) (#xaf43ebbead0fc73a #xe6c5f15f730d41d6) (#x53e7fc086388da35 #x44ea4f0422b8d781) (#x28de2b583b91b234 #xa9a1ec2cb582cdc2) (#xe90285f280096f9f #xe506457993606b74) (#x0c25eda5546737b7 #xd26f93b3693f7d9e) (#x45d9c4f4386fd5f8 #xd6a8e07a6b12a464) (#x49fc29516c08e24f #x04c773c9022dd9fa) (#xdd34ec409eca1f6b #x655c3d20d3897782) (#x24fbc6fd6ff68583 #x7bce7f9fdcbdb05c) (#xf5eac718a55bad5f #xccfdd10c660bba40) (#xb03303ec9d3478a7 #x1a5531760d191e24) (#x3b8b2eaf5fcd3a1e #x875ebfb6a2a9efae) (#xbc16ee49c9534f10 #xc83aa2c5642663ba) (#x91a3f81acd797ac3 #xdd26b20d8f25fff1) (#xec69b8f9bfb2e878 #x59bbb99dcde13afd) (#xb1fa65842f13532d #xe8cdbc42748d6466) (#x10cdaf4f7135f577 #xfb9407c69c54acaa) (#x2a8fe7889cdfe4e3 #x8e52354447693946) (#xa9b07c0d87dd3d80 #x8f1359e7a6f39e99)) ((#x65c2b33be281c8a2 #xfc07a04ba88823c5) (#x8f944c1f73ba5e7e #xeee6fd67b453c472) (#xc13cd8790b9bcf65 #xdd16ebda96a1fe2a) (#x3ad9cd22281fce09 #x1150b36b1eef1689) (#x2b6a275d9aa059b9 #xcff7b6f68a7a199d) (#x187cdadc8fa223aa #x6eddb992f50608a1) (#x6fe309621719403c #x312ea2c79f6b25cd) (#xa8c0062c4f4bf792 #x169ef6d8a52ad95e) (#xf7db783585d5f139 #xfbc9e5f8134dec12) (#x7f0a244b5c64c3f0 #xc4b8cd9a396f94b2) (#x061fd73753c978cb #xfaa6bfc5ace002b9) (#x532513776ccff6fe #xdad8ae692d6431fd) (#x85b5f6468622d6e0 #x23cfffeb83b0c27a) (#x8ece8b498a784a02 #xc5d797a786c27a19) (#x4296f908de70614e #x047fabf4b9f13ee9) (#x9dc92c9a0980f54a #x4d12467976b6cadb) (#x1d8d871114ee67e5 #xe928b8d40f960ba5) (#xa64a26eed85d2f3f #x77739fd25ac86239) (#xa3bb7b2343116b70 #xf0869e94a058613d) (#xa2e1bc75bad37f0c #xdbb7f45492c9df56) (#x8c7ac6e5bb3f62fa #x93b543e4e223c5cf) (#xb208915cf1aefcc0 #x2e219b0934cd6e29) (#x29de6af1abe77141 #x999562b5ee9ba64b) (#xac6b9cb72dc5a7a1 #xba5a9d5e6d2b6431) (#x5904a92e99577e60 #x17f1ace51a8737f5) (#xfdfac26c704d79a7 #x36e0e77424aeea1a) (#x527fd421950de282 #xf1e9c4a91ff58f96) (#x5daf33b5fbd92e53 #xbb35c763d2868a9a) (#x898b9b28207326b5 #x144042a218b3c6cb) (#x0a21ba59f598889e #xcd29028c37e30608) (#x779fd3be98bb6396 #x5ff31b556a6d2d6c) (#xcc58724154082b4c #xc1a83c533f3344f0) (#xd690e531eaed201e #xf9175182aed4f387) (#x4ff2533081e38567 #x18c17c7d10638433) (#x4c1cd9ca4966b9e3 #x6592c2fe4613858e) (#xc4cd85b490d78b2a #x5ae3ea9c6c31fd2e) (#x49ed8407d22afdac #xe267c3b8bc83868a) (#xa710e1b8219f3b43 #x5c42f5126859dc52) (#x7e50e31da5a6d78c #xef89a75a0bfe2ad9) (#xa4fe6b42e91a07c7 #x21114b913e29ddef) (#x662c39c12a04f426 #x81541ec8fef82278) (#x0d64aa385f93e429 #x1cbed789a992bada) (#x585e6e7860956a1c #x3cc0c6252816899e) (#x8b3fd68411340e4d #x422296e17c52791d) (#xc38895d53adce79d #x8b743f99f24041fc) (#xf1c4af02d61c89f2 #x016f5a3dbfadeeab) (#x70dac3df32b00f21 #x8e64ce50f41c91be) (#xbc82b19e66b8246d #x4fccf203cb2fd54e) (#xb352560a086ce8bc #x0510f1c9065cd042) (#xd57e6fcb22681c9a #x8444ef01f8a4f23a) (#x214b9d046f38d127 #x02deb47abd991f95) (#x25e0079f0db68114 #xae1adffc7598a2fa) (#xb8292b050436745e #xe3089985032e6821) (#x5aea23d451d242e4 #x6aa212664cf73648) (#x811e6cdde4ac86d3 #x8f0b946d4bb17f15) (#xc2d25283c31ef3e1 #xa0455559c0d1ff97) (#x63dd640cb148b069 #x06a11f8e0468217c) (#x54600316c6c49a49 #x0b4f7b6cb3158d2f) (#x5f1b7e19ca9e06ab #xed571320b667354c) (#xd81ac5f37dfbf8b3 #x98fa3888513648e0) (#x22a517fea7bdeda3 #x7f8d0af9ebe91e28) (#xb417466ba267840b #xd48724cc982d6c90) (#x260e8d65c533bd90 #xd349617f23e8a347) (#xddeb983ee6b7bcfc #x1f0f39ceaba64be4) (#x3cc61a157bd6b6c2 #xebf60caeb20f1430) (#xdcb15f681f75a880 #x343e530e9937f58f) (#x93430c589e962de7 #x2cff2f73895471bc) (#x90ad86a256131163 #x51ac91f0df247001) (#xcd02b517adca3f30 #xea9956930da2fa9b) (#xb973ec53fdf46022 #xc839f34531bfd64a) (#x2e9b7a9001ec1df6 #x4802b7b070ea1a99) (#x96b2519505da69a8 #xab0a2e3573c472b8) (#x82f0e6272c29ba57 #xf2582aee1dc17ea8) (#xf09e68542fde9d8e #x2a5e30fd8d3c50c0) (#x7ba1bed03eea93c3 #x687ca61cf16e29dd) (#xe399cf87ac2622c6 #xa29be1237d48e002) (#x94061c39349d4150 #xfd68fa761725cd6e) (#x3b830a74d1ddda75 #x3a61d9ab2c7ea8e2) (#xdaae885f4cbcd04b #xce98eccb35d7f736) (#xfbe5155b2384016c #xcc4658b1884ee8a3) (#xba9d66a935715ca6 #xb56a4dc667cfd7f7) (#x3453ede0bf0916a4 #x70bdda61e10dadee) (#xe732551ccea872f5 #x0e5f8aa5b5495d6d) (#x02b44dac314728f8 #x5662d44364e1bfd6) (#x84ef31107fe0c29c #x08fe952bb1217c11) (#xc679c818a190a3d2 #x0c813edf08d042f8) (#x578e89ec0e41a6cd #x761cc5efe5658c92) (#xea56ff24913b96dc #x12e15d2c1cdbe7b7) (#x1f39cabd25a94f1d #xbf4a6c976b77b473) (#x151870e4d031c783 #x72636e1b5c94b27b) (#x1b92502647271f2e #x138e0711a376091c) (#x386d808e1958e6f1 #x473267287a0ea95f) (#x9a8c3cfba38b99fd #x9c85937ce8c77609) (#x9bd6fbad5a498d81 #xb7b4f9bcda56c862) (#x56d44ebaf783b2b1 #x5d2daf2fd7f432f9) (#x05f15dcd9b4c444f #x87f50146fa900304) (#x784f342af66faf47 #x152f189fa71e2860) (#x3316fd8115027a13 #xa12a0f647f7c113c) (#x3f2890efb3538a46 #x96a5b22de47f158d) (#x20115a5296fac55b #x29efdeba8f08a1fe) (#xcb1d6220fe0347fb #x103fe956a142f822) (#x6033eef679cd8ced #x7bf2a10d521820c1) (#xf95158f712c32994 #x9a248cf2ecaf5775) (#xaf85164de5409b25 #xc70923dd3b5b658c) (#x73344925fa3533a5 #xf33770d3a26c9003) (#xad315be1d407b3dd #x916bf79e5fbada5a) (#xb0bcdcf0c0e9d438 #x78434f4a502cd1ff) (#xe9b875de59beaa58 #x6fb2e3af4aabe60a) (#x6b4893f97597100f #x9deac941576a98a2) (#xbbc7a1ffccb348da #x9e5b2706555e699c) (#x2884ada75225653d #xb2a40875dc0a1820) (#xf80b9fa1eb013de8 #xb115e632de3ee91e) (#xbf6c3b64ae3d18e9 #x329f4c809d5fd4f3) (#x8701bbeab765fe18 #x75ad2ba8e7517dac) (#xbe36fc3257ff0c95 #x19ae2640afce6a98) (#xa99ac17ab689e3ee #x3daf9c1897bb6735) (#xb54d813d5ba59077 #xffb64e0caabcd2fb) (#x2d75f06ac9692172 #x35510933269a1b24) (#x324c3ad7ecc06e6f #x8a1b65a44dedaf57) (#xd361b8fc71a16451 #x7ee250c45444f083) (#xc8f3e8da36867b7f #x6d6c57d5f732f99f) (#x23ffd0a85e7ff9df #x54bc6039d978a043) (#x5e41b94f335c12d7 #xc66679e084f68b27) (#x97e896c3fc187dd4 #x803b44f54155ccd3) (#xed13ef453b30fa6b #xc376882982aa5b65) (#x3e7257b94a919e3a #xbd94d8edd6eeabe6) (#x37bd671a778c2a20 #x0dee64e2b77dac53) (#xf370e2aee75ba10a #x570d8e7edb4c517d) (#xe077457d64a31e42 #xdfc85fa02b38e1bf) (#x10e92d294b7d83cc #xf5966f5da604b17f) (#x17ac3d48e176ef7b #x2401ba5838750dad) (#xb7f9cc916ae2b88f #xa9d49a4fce5d6d2d) (#x7915f37c0fadbb3b #x3e1e725f958f960b) (#x463d6393bcfe317d #xa8bbc07271f08386) (#x7afb7986c72887bf #x434dccdcc3ff97b6) (#x48b743512be8e9d0 #xc956a9788e1238e1) (#x6498746d1b43dcde #xd736ca8b9a199dae) (#x417873f216f55dca #x792c1577ef813f54) (#x955cdb6fcd5f552c #xd65990b625b47305) (#xc0661f2ff259db19 #xf627811aa4304041) (#xf22a25f81e99b576 #x7c3ce4bee9ddef16) (#x74715944503e5f12 #x22a0a5d63c1d2cd1) (#x7ce4aeb194e1ff74 #xb9eb73196f1f950f) (#xd08f3206b92458d5 #x03b1ee470234f13e) (#x68a61903bd122c8b #xe0b977c2011a991f) (#x16f6fa1e18b4fb07 #x0f30d0980ae4b3c6) (#xaedfd11b1c828f59 #xec38491d09cadbe7) (#x11b3ea7fb2bf97b0 #xdea7059d94950f14) (#x91f741f4afd1051f #x7a9dfb30edb5ce6a) (#x1e630debdc6b5b61 #x947b065759e60a18) (#x09cf30a33d1db41a #xb07abc0f619307b5) (#xcfb6f8bb9c8d17c8 #xbcfb82d06943454d) (#x30f8777bdd874697 #xdc79b1e7290c1081) (#xec492813c2f2ee17 #xe847e2e9b03be50e) (#xd1d5f55040e64ca9 #x2880848730a54f55) (#x616929a0800f9891 #x50c3cbcd60899eaa) (#x4d461e9cb0a4ad9f #x4ea3a83e74823be5) (#x4ea894667821911b #x33f016bd22f23a58) (#xa5a4ac1410d813bb #x0a2021510cb86384) (#x0fd0e7946ed4ccd1 #x4adc03cacd73050c) (#x50cb998da44aca7a #xa78b10ea7b143040) (#xceec3fed654f03b4 #x97cae8105bd2fb26) (#xff4e8fc0410a515f #x60823337404f55cc) (#xe4dcdfe6062d4e71 #x730c3426e3395cd0) (#x2c2f373c30ab350e #x1e6063f3140ba54f) (#x0000000000000000 #x0000000000000000) (#xde0512c42e328078 #x625c874dfdd64a59) (#xe8e2b288a07cbe24 #x4483896f783a5861) (#x6eb9ce34eedb5440 #x1a1fc807adfa9ba6) (#x8d2001b342fd7686 #xb8842924d0b27ba4) (#x1ac89770bee50b52 #x38bf6dd191e7b777) (#xb6a30bc79320acf3 #x82e5f08ffcccd346) (#xbdd876c89f7a3011 #x64fd98c3f9be6b25) (#x4a030efd1aafc128 #x9f347d3beaf38737) (#x36e7a04c8e4e3e5c #x26df0e2285ec1238) (#x5bb0e482a8105698 #x419378a67e668823) (#xf56f3599b492d9c1 #xadab31bb77ac53c4) (#x19261d8a766037d6 #x45ecd352c797b6ca) (#xc9a92f8ccf446f03 #x465d3d15c5a347f4) (#x7dbe69e76d23eb08 #x92da19d95d8e2b64) (#xc7230f4e5852b7ae #x27b0541f3a41fc93) (#x865b7cbc4ea7ea64 #x5e9c4168d5c0c3c7) (#xd23b7faa8863702d #x55d33a0466d54ee8) (#x43cc3e5e27b27532 #x2f4ec1348b608082) (#x51915edb5d88de06 #x8cba7a2a49858e2b) (#x125d60857a3aab34 #xa3f4bb1ec2e50ea9) (#x71800489cb721b5d #xa555a490c68d2fd5) (#x03ee8afac8853c84 #x7d53be83567001bd) (#x8a6511d2e8f61a31 #x6913fc214ec3c776) (#x45d3e969747b0df9 #xd5e87ef12780823b) (#xefa7a2e90a77d293 #x95145c6ae64be4b3) (#xca47a57607c15387 #x3b0e839693d34649) (#x9219cb0e6754399b #x07ce45b3bbc5cfd7) (#xe58618b0ffef5a0d #x583d5ee6d1a8e2bb) (#xd94002a58439eccf #xb3cb524863a7f68b) (#xaa744b807e0cdf6a #x40fc229bc1cb6688) (#xf435f2cf4d50cdbd #x869a5b7b453dedaf) (#x04ab9a9b628e5033 #xacc46b86c801bd6f) (#xfca0053a898f6ddb #x1dd18db4163f5471) (#x31a2b02d244552eb #xf748db271b9daeea) (#x9e27a660c105c9ce #x3041f8fa20c6cb66) (#x0c3e6d6ea651f055 #x378fbd499b0304b1) (#xab2e8cd687cecb16 #x6bcd485bf35ad8e3) (#x2a30e00b63624dc5 #xe4c6dc36b8eba7f6) (#x1307a7d383f8bf48 #x88c5d1def074b0c2) (#x83aa2171d5ebae2b #xd969402e2f50c0c3) (#xfabfd20dda461510 #xe7773271badf56c8) (#xe2c308d155e436ba #x89aa8be34fd95e69) (#x9962b6016b0ea579 #xe1d62dffbeb777b4) (#x9f7d613638c7ddb2 #x1b70923a1257750d) (#x4767a4c5453c2501 #x838aaab243613ded) (#xdf5fd592d7f09404 #x496ded8dcf47f432) (#x6c0d8398df9c7cb8 #x4c7d1c44c91b2470) (#x88d15c7ed9b132c9 #x3f7128622a2278a0) (#x27544a333cf1a9ec #xf8780bbf11791d2c) (#x44892e3f8db91985 #xfed9143115113c50) (#xa055f1d98b9457f4 #x8dd52017f6286080) (#xb1e61ba6392bc044 #x5372258a62bd6f94) (#x6776fe97d3c6e05a #xaa657408cc699c13) (#x5cf5f4e3021b3a2f #x9004ada3e01734f1) (#x9838715792ccb105 #xcae7473f8c26c9df) (#x726e8e7303f727d9 #xd8061a1390fd2e68) (#x24bac0c9f4749568 #x852bb53c47091c91) (#x0e8a20c29716d8ad #x61ed690affe2bb67) (#x553ac4403f068e35 #x207e11ac81843344) (#xc59742e269159f56 #x71d2805c5ea04345) (#x6d5744ce265e68c4 #x674c7684fb8a9a1b) (#x8044ab8b1d6e92af #xa43afead7920c17e) (#x6287a35a488aa415 #x2d90754e36f99f17) (#x015ac756f9c2147c #x2b316ac03291be6b) (#x752b9e12a9fc4b6e #x0991cf160e8c92ba) (#x35092ab646cb02d8 #x5b8cb0a1d39c1385) (#x69fcde5544d038f7 #xcb881d02338b2774) (#x0895f7f5c4dfa066 #x9b4bd6cf5302b9de) (#xe668924a376a6689 #x256ee06587d8e306) (#xf681bf637c17e545 #xd0f88f3821dc5279) (#xeefd65bff3b5c6ef #xbe2536aad4da5ad8) (#xdbf44f09b57ec437 #xe5a9860b0746495d) (#x393747d8e09af28d #x6c030de8489f1734) (#x4022b4a4ef3749b6 #x521d7fb7dd10813f) (#x1442b7b229f3d3ff #x595204db6e050c10) (#xa10f368f72564388 #xa6e44ad7c4b9deeb) (#x76c514e8617977ea #x74c2719558fc9307) (#xd7ca2267132f3462 #xd2263b429c454dec) (#x0b7b7d0f0c5a9ce2 #xe618684c0572b863) (#xe12d822b9d610a3e #xf4f9356019a95fd4) (#x4b59c9abe36dd554 #xb40517fbd862395c) (#x3d9cdd438214a2be #xc0c7666e809eaa5b) (#x07451061aa0b6cb7 #xd197d5059e71bcd2) (#x9c93ebccf042e136 #x66232cb9442774b0) (#xd424a89ddbaa08e6 #xaf7585c1ca354c51) (#x1cd74047ed2c7399 #xc219d2143d07b5ce) (#xeb0c387268f982a0 #x39d037ec2e4a59dc) (#xfe144896b8c84523 #x4bb359f772deeba7) (#x2fc1bdc6f82e098a #x6333dd70427ba4f2) (#x6a1254af8c550473 #xb6dba38165fb26c9)) ((#x5433fb988d1d595e #xb20e82b31ba4d47c) (#x5a5608c136be7690 #xec0f994cf83840f4) (#x4b04cb5b391faeb8 #x9f2c52d84e349701) (#x0f8f417605de4818 #x90a0f8cdd3044d53) (#x4561380282bc8176 #xc12d4927ada80389) (#x9b90b39ec81a19c4 #x327959da2f9fd124) (#xae5f1f11dbf7230d #x465cc809965df867) (#xb37f888cd00f1a84 #x34ff1d06a33eca6f) (#xe8c3326258cc0bc2 #x165167786b9e5340) (#xfdbf7c44ea5a8c34 #xdbb3a6241db7665f) (#x56245cc632e79731 #xed8f87d77b57a509) (#xf7f402a1eccefc24 #x3b73b7133e0e103d) (#xa03aec4860540cc3 #x185dd3f675c16cef) (#x435812e0807110c7 #x206d468b0d7e9016) (#xbd1a7bd56bac354a #x6afe06f940a25ee7) (#x3baa5fd6a84e1507 #x2a248a2c5a5ebdcb) (#xe6a6c13be36f240c #x48507c878802c7c8) (#x2d2b04811b5f3b48 #x76e6ad267c1c207a) (#x501d7624302a0680 #x0ccf887bdb813696) (#x49136c0586e560d7 #xc0ad57bc2ec7e674) (#x714426a22f2cdc69 #x7ba93bc624f2f311) (#x1af30f50b748cfee #x5d423991a52d784c) (#x777d0c402de14dd8 #x9ae9346a8424608e) (#xd747e0084db5411b #x82b4e79cf1e50c61) (#x0d98e628ba248677 #xcf21fda9b3f73c26) (#x12afd6eb0e267191 #xe2032dc2e6677f5b) (#xeefa18805a019a73 #xf71168d4cb48c0df) (#x69a08eac279edde8 #x796a0733e12cfa28) (#x0c7254070459e1a1 #x01801e9b836fe5fd) (#xfa6ce48956ea7a53 #xf4524aba8df92c1b) (#x35cfac8f13ed3ac9 #x742591d3b9c22943) (#xfe426935ebdd258d #x4a9340724ddccef1) (#x57ceeee98c9af0e7 #x232e64e54bcf7cd2) (#x085cd9bbb96ebe7f #xbf411453434a0717) (#x234ef7d8a0fc1486 #x28e7b6d99f80b4f2) (#x3632b9fe126a9370 #xe5057785e9a981ed) (#x5e78857d8b89294e #x52ce9384381da21e) (#x34251ea0ad905d1f #xba8472e1895af098) (#xe4b166655c95ea63 #x17d179e3e8f1b6bd) (#x1f3730c3b402f7e6 #x2d22d06b5590437d) (#x7f21d5fb948ff3a7 #x25a82039c76e6799) (#xb546a26ed2c28b35 #xd5bf12aa03e859f0) (#x1496fc090cebe020 #x0343226e46b1ecc4) (#x3e6e6045ab042d0f #x5a4463d6aae386fa) (#x7918ff1996426216 #xc4e82f9567b8f406) (#xbee76ea46a2b9cf3 #xfbdee0af10c9f649) (#x7ae5ea6897c5cbaf #x55c8c9c337d35ca8) (#x84a7835d7c18ee22 #x1f5b89b17a0f9259) (#x03fd15710187a9b9 #x9120e656506ba8ae) (#x7cdcc08a95085a1e #xb488c66f9705cf37) (#xbf0ddc8bd456fb25 #x357f039d20512f92) (#xdb35b40f49eca0ba #x8334f907728ae99c) (#xe09febd9e1a2b5bd #xa910732b28d45457) (#x268ac84ba3b62c8e #x58875f236f3d8fc3) (#xc40284ccfdee575c #xae16296c271aaae1) (#x6016e538208d0441 #x088af05292fe24e4) (#x0217a75ebfface6f #x5f81056460f37175) (#xb8de444668e60d42 #x1a9eef03b01f65d6) (#x5bbcbaee88c31146 #x22ae7a7ec8a0992f) (#xc99a62e447cad12b #x6137d4c594ed96c7) (#x941ff2e8cdc451dc #xa2d9a117fc9b9c77) (#x4cd7539685af58df #xb0cdbe46de7add45) (#xf0279a6c507e0a43 #x14925b8dae405a79) (#xb4ac10416cbfece3 #x1b1ef1983370802b) (#x59ab1db03739df29 #x7d2f7f1aa853e85a) (#xada20a60da708ab4 #xd77c2e5fc63650c9) (#xa5fed3db631e34cb #x683d3a0c857c57de) (#x8eecfdb87a8c9e32 #xff9b988659b6e43b) (#xe74c73145d1243da #x86f19fb5b89a1e13) (#xf991f1f8576dd3ea #x6572acecdd9284b5) (#x38574aa7a9c9bcbe #xbb046c7a0a351565) (#xd8c8a17e486b0903 #x12141f5122e14132) (#xef10aaafe47cfda5 #x39b08be6fbd01904) (#xa7e97485dce4faa4 #x37bc3f68e58f26ab) (#x998714c077e0d7ab #x6df85cbe4f6ca051) (#xdf1b39b3f4dbff64 #x3df5f3cfb2af0b76) (#xead4953ce736c5ad #x49d0621c0b6d2235) (#x16815b57b3112e4f #x5cc2270a26429db1) (#xfb8656a6e8971d85 #x3af3a988bd61f5c0) (#x448b8a2d3cc1e6a0 #x0f8caa159d30da52) (#xd283df9b4eff7913 #xf2d40e6601583750) (#x91dbcd7bce8e69d4 #xd2b948ed0c26a746) (#xbb2351376961a4fb #x8bbe0955e074cd78) (#x321c3442af5dccae #x5bc47d4d298c6307) (#xb934f669d69b6a94 #xd43f0c318087bc0d) (#x042e8dbcbd375fde #xbec10ac8c025e2ea) (#x93cc6a257174a7bb #x8d384d896cd5d633) (#x0e65f359bba32fce #x5e011bffe39c9488) (#xd4baf5794c32e8a2 #x139401caa18ea4cf) (#x2ed611f01ad892f1 #xe7c64b702c7788d4) (#xb0829dfdd188b33d #xa5dffb50f35562c1) (#x3d937534aa8384b6 #xcb648580fa882e54) (#x748019312c66e461 #x0bc9d23cd44fc820) (#x6d8e03109aa98236 #xc7ab0dfb210918c2) (#x8ac27004c7bbc1ec #x415a924e999306d1) (#x7d3672a52b753dc8 #x7a29255da79d16ec) (#xb2953aa36e727d52 #xfa5efe3493a613b4) (#xdef18b9c4aa698b2 #xf35410fd8237d2ad) (#x72b933d32eab75d0 #xea89dd9074995bbf) (#xa603c6aa62999d72 #xf91ddc5ad517ff70) (#xb1682fd26ff5d4eb #x6b7e1862c3cdbb1a) (#x2905893da6686496 #xc827a7eebc39c290) (#x7697be6f939c2a0e #x5448d758b4bcb955) (#xfc55ce6b5427ebe2 #x151245162d2fbf84) (#x51f7c40b8e576156 #xc26e6b49eb19ef4d) (#xce49fa29fb7a274c #x4ed6385b04a3dc83) (#x28ef3b1218150340 #x068644dc8ca11b4b) (#x2577dd3aa2318537 #xc9a7b9753f56276d) (#xca677795464d7892 #xf0173293c4863e69) (#xcb8dc5baf8301f44 #x3eb6d1a1f41ee7b2) (#x6e7316619b2e2b8f #x568bebad7162b06c) (#x6f99a44e25534c59 #x982a089f41fa69b7) (#xafb5ad3e658a44db #x88fd2b3ba6c521bc) (#x9226d80acf09c06d #x4399aebb5c4d0fe8) (#xb6bbb71fd345228c #x449ff4fc5383f15e) (#xaa7192ad66c07cd3 #xf89dc2c156781a8d) (#x55d949b733603e88 #x7caf61812b3c0da7) (#x134564c4b05b1647 #x2ca2cef0d6ffa680) (#xc7ff91bdfc69fee5 #x3f36cf3a7771024f) (#x2af89c4ca7efcd2f #x590741b8ec526a3e) (#x9a7a01b176677e12 #xfcd8bae81f0708ff) (#x8d11e8c97b0b378b #x6ebb7ed009dd4c95) (#x42b2a0cf3e0c7711 #xeecca5b93de649cd) (#xc1c6bb5ffea46f54 #xde76c096d7a791d0) (#x414fb5be3f8bdea8 #x7fec43ef6d8de163) (#x6bb729f298641387 #x26eb025781df8b5d) (#xbac9e318d71cc32d #x451fea67d0ec14a3) (#x8cfb5ae6c576505d #xa01a9de23945954e) (#xf40917d0ed49559d #xaa5351456e65b893) (#x53e0635531adaf39 #x9def6e2d8bea9e38) (#x1cca25b2b5855e5f #xbc02363d05fbebd3) (#x67c57df59c3df226 #x276b1ccc02b06ea0) (#xab9b2082d8bd1b05 #x363c21f366e0c356) (#xd9221351f6166ed5 #xdcb5fc63127998e9) (#x80890ee1c12fb1fc #xa19a8379ba2a70b3) (#x47769f5c3d464f19 #x9eac4c43cd5b72fc) (#x4d3de1b93bd23f09 #x7e6c5d74eee2049e) (#x960855b6723e9fb3 #xfd58a4739c68ed02) (#xf3da8f1d51f9a3fa #x85b2bddbfe2bf2d7) (#x520ad17a8fd0c8ef #x534e8d1fbb7247e3) (#x95f540c773b9360a #x6c784225cc0345ac) (#x1edd82ec0a7f9030 #xe383335965089aa6) (#xd6ad5227f3c826cd #x4c1504aec17dd5ba) (#x01eab22fbe7d67d6 #xcea1e3323098d9db) (#xe17559f65fdfd26b #x67b19019184c8d8c) (#x05c43f93034a3808 #x7060e9faf0bd3b31) (#xe55bd44ae2e88db5 #xd9709ad1d8696f66) (#x4aee79748762c96e #x518db1ea7eac4eda) (#x97e2e799cc43f865 #x33f94741acf034d9) (#xcdb4ef58fafd8ef5 #xdff6de0d54c8742d) (#xd17ecaea4f78d0aa #x63f4e83051339ffe) (#xd5504756f24f8f74 #xdd35e2f891167d14) (#xf5e3a5ff5334324b #x64f2b2775efd6148) (#x5841af9f8944b8ff #xb38e9c2898cb3181) (#x18e4a80e08b20181 #x02c33cf5c5de0939) (#x300b931c10a702c1 #x04457829497f1272) (#x3a40edf9163372d1 #xe485691e6ac66410) (#x1152c39a0fa1d828 #x7323cb94b60cd7f5) (#x06392ae202cd91b1 #xe1400faca0d6939f) (#x875a962c7d9f479b #x8e7b6fe72a643af7) (#xdce62cc2f55c56dd #xacd51599e2c4a3d8) (#xcc5e5d774480e923 #x11573d3f6450adf6) (#x20b3e2a9a17bbd3f #xb9c7508fcfeb1c5c) (#x90317f5470f30e02 #x1c18abdf3cbe7e9d) (#x0a4b7ee506947010 #xe0c0113723b97662) (#x0000000000000000 #x0000000000000000) (#x9fbe3e22752d461a #x8cb85312efba33ce) (#x3c79c71b14fee360 #x05c566b2ca10f78f) (#xb75105306d38455a #x8a3e17ce631b2885) (#x684a3c8399e3ba3e #xb7cbe401d1b423f3) (#xa98c87dc6747d56a #x69bd24970613b223) (#x7ecb67d42af29471 #xeb09c30bf7f6be42) (#x9da9997ccad78875 #xd33956768f4942bb) (#x756aab1e921b83b7 #xc568310ee4d711fb) (#xa3c7f93961d3a57a #x897d35a025aac441) (#x3f84d26a15794ad9 #x94e580e49a7b5f21) (#xdadf0620f791c76c #x4d951a3542123047) (#x829ea9bf7ed57f93 #xfe1b861ddad901c6) (#x83741b90c0a81845 #x30ba652fea41d81d) (#xcfa348064507409a #x8077db69343b0558) (#x1d20979d0bf83989 #x72a3d50f35633208) (#x8b28c22b79c6a63a #x8ffb717ca90bdf0a) (#x33f6866d1120ab78 #x95659e7f1914badc) (#xa41461f4dd63531d #xa69cd93eb5e48e05) (#xc5e836e34393308a #x60b7ca5e1782733a) (#x61fc57179ef06397 #xc62b1360a266fd3f) (#x63ebf049210aadf8 #x99aa1604c2958c4a) (#x2b122e631992aaf9 #x97a6a28adccab3e5) (#x27607a641dcb4b58 #x9626bc115fa55618) (#xf2303d32ef84c42c #x4b135ee9ceb32b0c) (#x735381fc90d61206 #x24283ea244018264) (#xa86635f3d93ab2bc #xa71cc7a5368b6bf8) (#xbcf0c9fad5d1529c #xa45fe5cb703a873c) (#x893f6575c63c6855 #xd07a7418c9f8ae7f) (#xd09478c5f105b77c #xad550b0261ab4625) (#x8163bcce7f52d62a #x6f3b604b8ab2a968) (#xc3d11c01415ea13b #x81f7c5f2b754e0a5) (#x643868849dba5b9f #xb64bfa9a52dbc60e) (#x0ba1cccab8e917c6 #x2e61f2051321afb9) (#xecedbfdee5fb541c #xa8906db0abbbb1aa) (#x10b871b5b1dcbffe #xbd8228a686940e2e) (#xac48b84f640ded62 #x19ddcd6df6ae8912) (#x986da6efc99db07d #xa359bf8c7ff4798a) (#x5c6f22233473e721 #x0d4f96e058eed36b) (#x78f24d36283f05c0 #x0a49cca757202ddd) (#xf61eb08e52b39bf2 #xf5d254210e96c9e6) (#x5d85900c8a0e80f7 #xc3ee75d268760ab0) (#xc615239242149933 #xf1972c0847e9db94) (#x5f92375235f44e98 #x9c6f70b608857bc5) (#x09b66b940713d9a9 #x71e0f76173d2decc) (#xc02c097040d90882 #x10d723a4e73f480b) (#x86b02403c3e2204d #x40da8cd51afce32c) (#x854d3172c26589f4 #xd1fa6a834a974b82) (#x157c4e26b29687f6 #xcde2c15c7629351f) (#xe929804de6b16c14 #xd8f0844a5b068a9b) (#xeb3e2713594ba27b #x8771812e3bf5fbee) (#x7b0f584729b8ac79 #x9b692af1074b8573) (#x31e12133aeda6517 #xcae49b1b79e7cba9) (#x662fcfda224095f0 #xe9cafffe3228b77b) (#x70ae948d9151bbbf #xb508d8f4146a2aca) (#x469c2d73833b28cf #x500daf71fdc3ab27) (#x48f9de2a38980701 #x0e0cb48e1e5f3faf) (#xc23bae2eff23c6ed #x4f5626c087cc397e) (#x9e548c0dcb5021cc #x4219b020df22ea15) (#xa1d05e67de296b15 #xd6fc30c44559b534) (#x2f3ca3dfa4a5f527 #x2967a8421cef510f) (#x9c432b5374aaefa3 #x1d98b544bfd19b60) (#xdd0c9eed4b21310b #x6274f6abd25c7a03) (#x1b19bd7f0935a838 #x93e3daa395b5a197) (#x190e1a21b6cf6657 #xcc62dfc7f546d0e2) (#x07d398cdbcb0f667 #x2fe1ec9e904e4a44) (#x88d5d75a78410f83 #x1edb972af96077a4) (#xf87b43d7e910b43c #xabd34fdeed0a5d6e) (#xc870d0cbf9b7b6fd #xaf9637f7a4754f1c) (#xa22d4b16dfaec2ac #x47dcd69215321d9a) (#xf1cd2843ee036d95 #xda33b8bf9ed883a2) (#x6a5d9bdd26197451 #xe84ae165b1475286) (#xe2884c875e587bd2 #xf691764f48272522) (#x249d6f151c4ce2e1 #x07065a470fcefeb6) (#x8f064f97c4f1f9e4 #x313a7bb4692e3de0) (#x37d80bd1ac17f4a6 #x2ba494b7d9315836) (#x620142669f77ca2e #x570bf536f20d5591) (#x2cc1b6aea5225c9e #xb8474e144c84f9a1) (#x4ec0f4c83a5596b0 #xef4cbb22be89ac30) (#xe362fea8e0251c04 #x3830957d78bffcf9) (#xed070df15b8633ca #x66318e829b236871) (#x6c64b13f24d4e5e0 #x090aeec91191c119) (#x40a5079181f6b97e #xb14da0dd5d1538b8) (#x4f2a46e78428f166 #x21ed58108e1175eb) (#x22a445f71e817350 #xe64655ebaf186d29) (#x65d2daab23c73c49 #x78ea19a862431fd5) (#xffa8db1a55a0425b #x8432a3407d44172a) (#x176be9780d6c4999 #x9263c43816da446a) (#x39bdf88817b4db68 #x75a58f483aadccbe) (#x215950861f06dae9 #x7766b3bdff73c587) (#xd3696db4f0821ec5 #x3c75ed5431c0ee8b)) ((#xd92529bea31248d7 #xfc012d6adfaeec10) (#x6c820e60de114463 #xeea0cb202af27c92) (#x72af0d3d2274135e #xdd47d2aa23c727fa) (#x0a1b018a54238caa #x115db6c707138899) (#xc7082ae35f771fea #xcfe634e0d69bb778) (#x533d5758428b692a #x6ee8718966c0f698) (#x7544868473e41629 #x314f797c14fe4b7a) (#x6375eeafa0c28e9c #x16322665cf09b0a6) (#xb04bc69b57f34ae1 #xfb6ebdc817b4d42f) (#x17d35d550f1658a4 #xc4ff2733507eef2b) (#x649e6516f1528beb #xfa3a8db3f830dc26) (#x1bc1e218d6951168 #xda284208ebdd1fc5) (#xc0e3a15a0ee71a9d #x23ee9f36e1a2dbf8) (#xc306fed8a9b799ae #xc5ab1748bffae722) (#xd6d2c971ddc18228 #x0493c02f3a552024) (#x93def6024c6c73b7 #x4d06eebf87622d60) (#x05ece1452af04655 #xe9cf5b82e2e844ad) (#x364107306fe922d0 #x7750841015793e49) (#x6090b12d07920daf #xf077ae1b91518c7c) (#xcf1441957034d062 #xdb7c7273045917cc) (#x5ecddd6b4738e0f7 #x93bd6c9856ea1281) (#xad839a440cc69eef #x2ecc2c3c40d9b39d) (#x5ac30950b1f866b3 #x99f04f303f8b42db) (#x9a20a80abf1f7c2e #xba1ed006de299923) (#xb7a04d2206634f96 #x1766161e208db8af) (#x1c2a69a18705141f #x3620e9dedce47345) (#xb44512a0a133cca5 #xf1239e607ed58475) (#x4ef50b8719bebd24 #xbb4ae07d31ad912a) (#x081c6b762f43cf88 #x149a4693d2c2a0b4) (#xac61af3ad0f65efe #xcd4e5416cb50a76a) (#x2679d1dc316f7f03 #x5fa708f5723ebde2) (#x15d437a974761b86 #xc138d76785afc706) (#xdb224342d8720bf5 #xf9c6dd3e0a7fc43d) (#xb1a9f3e58bc38af0 #x18ecc5e29c3dc0d8) (#x83e620ee12ea2e64 #x65f1625ae025aecb) (#x247ebb204a0f3c21 #x5a60f8a1a7ef95cf) (#xd53796f37a91011b #xe2d64851640d1cfe) (#x99c5f788184fff1d #x5c5b58788071a5f9) (#xb857aded78b08569 #xeff4fb5bc576749b) (#xab8a248381665b89 #x2146ffc0fc69cbea) (#xeb6afab53a3bec43 #x811c8ad2a3b68203) (#x677b3a94560208d8 #x1c7f05cda668e0fc) (#x1824bd9a71c5925b #x3c6dca76b585231f) (#x95d748c5c1ccb6d1 #x428c3d433bd25517) (#xef642e8eccfb6a07 #x8b51a97acad7d259) (#xd4d5a38da6a1c10a #x0154307bef840809) (#xed634472b79b2925 #x8e96592e1f06fa74) (#xf8b773dbc3ed32a3 #x4fae8e499aa93d72) (#x02076afc7b604322 #x05c7f054d5d1282d) (#xe96d9049415baf61 #x84db7a867667aa2e) (#x6b6985d98f814114 #x02a860f61dcb1012) (#x923cc37c905cb3a6 #xae8496950ceb3997) (#x01e2357edc30c011 #xe382782a8b8914f7) (#x85ef9e299f4aeb02 #x6a7bb1a65c95d6bc) (#x39b6e7ff113ae82f #x8fc26955f082f27d) (#x40e0de36bb5db7ca #xa05a75125fdf49e9) (#xbdbb4ca85240c33c #x063ba0d9279e3036) (#xd0db77b65061474e #x0b1913d386e55853) (#xd33e2834f731c47d #xed5c9badd8bd6489) (#x8e16aadd1759a7b9 #x98a47f4bd00f4ad2) (#x592656d216a8e580 #x7fb5c74e61d37e01) (#xc91dff52fd941504 #xd4f6a18fb8e96fbb) (#xa073107709751732 #xd399312d70f35784) (#xd8c71cc07f2288c6 #x1f8355405427f8e7) (#x6e85649ca5710741 #xeb673b74ff2354bf) (#x7743ec780884550b #x34888928c12f6357) (#xc6ea1f9d8347dffb #x2c644cca5d12a38f) (#xf4a5cc961a6e7b6f #x5179eb72210acd9c) (#xba50c71103d0c64b #xea330b0f10a75cb6) (#xae66c5c6ab961ddc #xc889a4421e818f47) (#x91d99cfe370c3095 #x48c11eeb52b3054d) (#x903ba980eb3cf084 #xab4366c1d93a11ba) (#x0bf934f488134cbb #xf2dfceed8c9a9c6e) (#x7b515335d1071cc7 #x2a5fec137a8c93b9) (#xee861bf010cbaa16 #x68d3d150415ec6ae) (#x2b895bef34dcf6de #xa2f215e4421459fb) (#x0df08a3305b389dd #xfd551d11302ae419) (#xa59ff13223855167 #x3a566aaf921b1329) (#x13dd896ef9d6dee0 #xceb2049b391fbf71) (#x78b40cb776579ff4 #xcc1a646d24d4af63) (#x9c2916cd32bfb948 #xb59403fa6299e154) (#x5f2fe8159b0820e6 #x703f14b2dd630676) (#xd2dc1d4a2b01046c #x0edee3875334707e) (#x9dcb23b3ee8f7959 #x56167bd0e910f5a3) (#x6f6751e27941c750 #x08e5435e74aa4048) (#xb9b59893a4804578 #x0c7683714eff606c) (#xe294a4bdc948e3da #x7604b46bfafd3640) (#xb5a727de7d030cb4 #x12a1e64af55c9082) (#x9827c2f6c47f3f0c #xbfd920520bf8b10e) (#x34466dcc148961f2 #x72977444c0a81664) (#x61728453dba2cdbe #x13f5d6311ad8988b) (#x97d02239baacf5f3 #x474bcd17ee037d3a) (#x58c463acca982591 #x9c37bf64ea5a6af6) (#xf7409314bd3ef85c #xb73c630c7f52f146) (#x4d105405beee3e17 #x5d0f68036ff5adf0) (#x56d1b61d687b2f7f #x87272a0b8428b235) (#xdcc9c8fb89e20e82 #x15ce76e83d46a8bd) (#x94357dbb1dfc76c0 #xa10e4569b05b41e0) (#x5ccab7973c58a3d5 #x967a9ccc833b3aac) (#xc4ed7561f8279cd9 #x29a3bc9e88c38ba2) (#xdecea207f2824da0 #x100986bce8978090) (#x8ff49fa3cb6967a8 #x7b2607615b865e25) (#xe57f2f0498d8e6ad #x9a0c1fbdcdc45ac0) (#xa86f7b012636d8ba #xc70377bea231f730) (#xdf2c97792eb28db1 #xf38bfe96631e9467) (#x35a458b2c8b9a1e3 #x91150c6e4b210293) (#x3048b9f7e249e7b6 #x78da57eca9c9463e) (#x87e8f4d5e42aa820 #x6fbc41f28944fe91) (#x8c11c0216c39e49b #x9d638f1f05de62ff) (#x33ade67545196485 #x9e9fdf92f7917ae4) (#xf547f9e8c65ebb7e #xb2fb9358aa83d96b) (#x4afbdfbcef7e3b60 #xb107c3d558ccc170) (#xcaf8a0d05ac49637 #x32b329f1e6b15361) (#x5d2882e9e06863c4 #x75f8e4e608b22e5b) (#x657c50682d624bfa #x19b8f59973b9c8d1) (#xccf11e17d7645351 #x3d39fa0d5a012b16) (#x66990fea8a32c8c9 #xfffd7de72de1f40b) (#xa3964ff5ae259401 #x35dcb9532eab6b5e) (#x3bb18d036a5aab0d #x8a0599012553da50) (#x8df3f55fb009248a #x7ee1f7358e577608) (#xec81710c6babe934 #x6d142104948fee83) (#xf6a2a66a610e384d #x54be1b26f4dbe5b1) (#x7cbad88c809719b0 #xc65747c54db5ff39) (#x3fbf59389c9a2d49 #x8048baa94c328a0a) (#x7ebdb270fbf75a92 #xc390b7919864d714) (#xf34e472f4bfe7e18 #xbd7140a41633a11c) (#x6d603b1e02218472 #x0d22b30aa17b6865) (#x491e803e482eb853 #x57424bab0694fdaa) (#x19c688e4adf5524a #xdfefb25c3e0c37e8) (#x6297dbd17cf24e8d #xf5b05e4f4480a451) (#xa98d4e7ffa0618ab #x24810f9429b8e3c7) (#xfb522c5964bdb190 #xa9eb0637c4f101a8) (#x734d3843fe44d34f #x3ec5aa80a84e330d) (#x2f878fd4c21c709a #xa8bf364c2b7509a1) (#x4102eb48676d77db #x43d80d38d4565d1e) (#x7ab3664b0d37dcd6 #xc9dd9439f105874e) (#x76a1d906d4b4951a #xd70af1024aa677a0) (#xe49d1a7a44e826bc #x798e6797464d4e37) (#xa2747a8b72155410 #xd65ec179a5227fa9) (#xdd2bfd8555d2ce93 #xf64c0ec2b6cfbc4a) (#xe69a70863f88659e #x7c4997c3939c661a) (#x143602d7a846db97 #x22baaf4d0e26d3f1) (#x259c8e5e963ffc30 #xb9e2808b2c668138) (#xbfbc26542920801e #x03fc508df24f181b) (#xbe5e132af510400f #xe07e28a779c60cec) (#x0609bec78da0c566 #x0f8ad3fcbcb07877) (#x07eb8bb951900577 #xec08abd637396c80) (#xcd132b690b549340 #xdebb8227d1883fe1) (#x5b213c2e6dc8a6a2 #x7a72371ab402562c) (#x37a3324eb3d9e2c1 #x94d2fc3a9ef02abe) (#x9e2e7c3149dffa6a #xb053f3aeb748c979) (#x279be4a2ed5fbf12 #xbc2570dff9b7a915) (#xa67aaeb084d5d254 #xdc13e2d1cc432ff3) (#xd13942c88c51875f #xe89b6bf90d6c4ca4) (#x1038d6ec5e865dd3 #x28f78ce5674783ab) (#x20706f1bbccfba65 #x502ddb09ce8ec595) (#x2c62d056654cf3a9 #x4efabe32752d357b) (#x1e2d035dfc65573d #x33e7198a09355b68) (#x040ed43bf6c08644 #x0a4d23a86961505a) (#xfab01927b88d7181 #x4a697e1d4f78155f) (#x298e31134fbcb5fc #xa735e5b097c571d6) (#x881f141a9af962df #x972eacb76cbf32a5) (#x81e14a12698a6d46 #x6036920e35f486e6) (#xe093ce41b228a0f8 #x73c3443f2f2c1e6d) (#x0c12bf4dd98349cc #x1ed7653bbba3f0ee) (#x0000000000000000 #x0000000000000000) (#xea88cfcbe60b2c52 #x629ef2f8283f96f4) (#x286c046d938c75ed #x44b79d9a1c4c6521) (#xdac0763c0442cbe4 #x1a44a51481f6d0ca) (#xf1492dd3309e3d3a #xb8b6b0f0c3e28931) (#xcef674ebac041073 #x38fe0a598fd0033b) (#x54d6dce1131b6c5d #x82e0da5f51f99a18) (#x57338363b44bef6e #x64a552210fa1a6c2) (#xe77845f8e3b8a58f #x9fcbefe9181572ed) (#xc2e4cba6758759bf #x26296f623473f3d5) (#x2a6b6e91e8ec36cf #x41706dcec99d4d0c) (#x2d80e528b97c33b8 #xad78c618fea4218c) (#xfcb9a7e0352db4e7 #x45e3ade1f3c86d28) (#x430581b41c0d34f9 #x461ffd6c01877533) (#x8a187ee6e19921fd #x92e95ce3b96e1a88) (#x1631682bd32698b5 #x277d5f19dbf7fbdc) (#xf2ac725197cebe09 #x5ef3388e9dbab5eb) (#x227705e7c7aff947 #x55ea2b5d1b5fedb8) (#x795639c9aa675fe5 #x2f981c47af5dbb94) (#x860ac1ab381a6831 #x8c3e39d802cdea66) (#xff5cf862927d37d4 #xa3a6259fad9051f2) (#x42e7b4cac03df4e8 #xa59d85468a0e61c4) (#x324fd30b9929a494 #x7d1da7b87c186e13) (#x3a53b87db66a6b1c #x6987e12baedacea7) (#x1dc85cdf5b35d40e #xd5a291f4576d67b2) (#xe37691c3157823cb #x9586cc41717422b7) (#x714a52bf8524906d #x3b025ad47d9f1b20) (#x696eef25f4e10236 #x076f90a2c81a383f) (#x4f173ef9c58e7d35 #x58c89857ba2485dd) (#x21925a6560ff7a74 #xb3afa3234507d162) (#xfebecd1c4e4df7c5 #x40245db526194505) (#x82041590cedaee75 #x86731a706bacba3c) (#xf95546a51fddf2b2 #xac2cf66311202985) (#xb3ae9919f0a3c9d2 #x1d2b35b649ece8f5) (#x09fe5e08f3730f99 #xf7183eb9594bb443) (#xa1912509d545d723 #x301b4907fb7a4373) (#xc8ffca2c21a4d515 #x3774d9a533607b4c) (#x513a3da439eb2a08 #x6b2f81ddb311deb5) (#x688cda5b28d1c227 #xe4ede88843932cc8) (#x50d808dae5dbea19 #x88adf9f73898ca42) (#xa47dc44cffb59176 #xd9d41285199207de) (#xd730fc0f01f14239 #xe711b805b1dc34d3) (#x840dab57437a2b13 #x89f9c98cd71cc24b) (#x6a8bb0a753b18105 #xe12a18dc964204e5) (#x0e15d5b1a2e30aee #x1b10956f6e72d8c3) (#x80037f6cb5baad57 #x83b4ea24be7d9211) (#x450c3f7391adf19f #x49952e90bd370d44) (#x470b558feacdb2bd #x4c52dec468e62569) (#xa7989bce58e51245 #x3f919afb47ca3b04) (#x0ff7e0cf7ed3caff #xf892ed45e5fbcc34) (#xb24cac672c9309c3 #xfea94d9cc265fc02) (#x52df62269ebba93b #x8d6a09a3ed49e26f) (#x9fcc494f95ef3a7b #x53d18b843cc1dd8e) (#x44ee0a0d4d9d318e #xaa1756ba36be19b3) (#xe171fb3f6e1860e9 #x90413c15a4a50a9a) (#xc50f401f24175cc8 #xca21c4b4034a9f55) (#x70a867c15914507c #xd88022fef6160fd7) (#x3db833c4e7fa6e6b #x858f4afd99e3a227) (#x5534e99fcf2bac4c #x6162a275da708eef) (#x7f5f870e27c79a83 #x2012cfbb13edc3e3) (#x8bfa4b983da9e1ec #x716b24c932e70e7f) (#xe88fa5379d6b6f70 #x675902acfdeebed9) (#x96321747669c35e2 #xa4c9b53d658a69cd) (#x123fbc1025e61ef1 #x2d307cb1b296ab86) (#xaf84f0b877a6ddcd #x2b0bdc6895089bb0) (#xbbb2f26fdfe0065a #x09b173259b2e4841) (#xf0ab18adecaefd2b #x5b34c8da486b9dc6) (#x11dae39282b69dc2 #xcb75f4cfecce975c) (#x31aa8c893e7927a7 #x9b582fc6224052c9) (#x7d58edf25ca7d9a1 #x25d53fefc63cebce) (#x1fcf36232055972c #xd06561a082bc4f9f) (#x4cf2617b62defe06 #xbe8d1029e47cb907) (#xbc5979d68e70032d #xe5b9d8f3ac1724c1) (#x3854d281cd0a283e #x6c40117f7b0be68a) (#x4b19eac2334efb71 #x5285bbffd345d587) (#x9bc29d74632fbc3f #x599ca82c55a08dd4) (#xfd5b929ee91d74f6 #xa661d5cb784179df) (#x89fd216446c9a2ce #x74acd49de7362652) (#x74a6b3faafd4d638 #xd2cd01569f775f8d) (#x03e55f82a7508333 #xe645887e5e583cda) (#xb642785cda538f87 #xf4e46e34ab04ac58) (#x48fcb540941e7842 #xb4c033818d1de95d) (#xc1019424d2d7da8c #xc06ce71c6a2bcf0f) (#xcb1a95ae86f45626 #xd13151db6d384796) (#x3c5a06ba3bcaae7a #x660d32d7126ab6d0) (#x46e960f136fd72ac #xafd0a6eee36f319e) (#xaa6811fd5d569b98 #xc2c487ea77e0df1d) (#x1a23d7660aa5d179 #x39aa3a2260540b32) (#x2e65baaa1e2cb08b #x4b3d4e66a0fc1d56) (#x3e5d6c4640aaed58 #x63cac283c7bb9efd) (#x239530991b9f3956 #xb668537790d6f94f)) ((#xb3a97ed91e9d2ca8 #xb483a3c43d6b01c0) (#x4c14776c9da46bb4 #xaa39ded25980a017) (#xd8d18f72d6c39596 #xce15226d28ed47b2) (#xcd43e90a399ceb1e #x9da554d42f9a5d63) (#x276c86c755fad28a #xd0af5f7b4c06e665) (#xda1d3753e15099f5 #x07b14249e961e86f) (#x09d0f97526a1369f #x2787738203334f7d) (#x06970b63597614a5 #x982fa06c805732a4) (#x787d9cb07e77d313 #xb109577c92a66e07) (#x24c6621798c1d839 #x9c590f4d0cccff37) (#xd7967d64a914b7ac #x71bdf183ab893a6b) (#x13056d1bb6296a2d #xcb9fd6d587202875) (#xf66df0c0a5987183 #x393d0e9467d8eeaa) (#x8b2d83c34fa2bc86 #x5ceda9b235e3ab5b) (#xf92a02d6da4f53b9 #x8695dd7ae4bc9373) (#x2c70c79344c8e876 #x3e8c4cdd8eb906c5) (#x87c09505fd4e940f #xafb32a6af64dcfd0) (#x260ada36af52d45a #x55fd6f69cd4050ea) (#x7bd77860b34cd9a0 #xfdff074ad26c7755) (#xbcee8ccf614a0e92 #x0b2b702abe0f7c19) (#xc65fa85e28aed1e2 #x73864772ed25bdc3) (#x91f817addf2ae034 #xb0f50ce5b1f0cc53) (#x6a1ead5a32f6bfee #xffc4b1bb94c0f0fd) (#x9c735d9a976ece6d #xc6f9bf2ff3181e57) (#xa97ceab78e15701a #x589b0693b97866c8) (#xc2041b1c464bc924 #x220d873aacfe20ba) (#xd43c99b4642fbd1f #x3d4ba1b5eb432339) (#x3398bc4e400daad2 #x064d19d0ca374a3b) (#x9b820a0834b0dc18 #xdb842f51f2099a7c) (#xba7987ac383c1a37 #x9304d0463e584ebd) (#xd3cdce26c7f1af6a #x203631cbea52a712) (#x7207811595edef3f #xda7874c8d15f3828) (#xe5689ddb13b11bae #xf2a2d841e0f8c6df) (#x53fc0cb199612910 #x92f88bdf1d0eece9) (#xd9b7d3832c6b9346 #x4b47127fa9abf13d) (#x850c2d24cadd986c #x66174a4e37c1600d) (#x846a71d530759ebc #xe3457a5cb687d682) (#xe1332e997d540368 #xa3291809a1235ba6) (#xe3ff96b84ac70f0b #x6a8d782d60aff47b) (#x6b78f1abc85eb93e #x7a9681a915864672) (#x39e2a1ebab9796fe #x6d3c3a6489ce1c14) (#xaad60e67432e7aa9 #x146d56a5f9b27f9a) (#x6e451e185c13a728 #xae4f71f3d51b6d84) (#xd6f0219553bcb17c #xf4efc1912acf8ce4) (#x95a3a4efb1cff8f2 #xe17eccadf02b512a) (#xafebe1d4d76364bf #xc0b4a6ff392f546c) (#xc36247edbce3cff4 #xa75fb7282db89635) (#xb165c6f8290e20cb #x7d27c3e0fce7ae1d) (#x56c1e3020d2c3706 #x46217b85dd93c71f) (#x6f2342e9a6bba1f8 #x2b1d41e1545ddb0b) (#x9d15016b6dc6c8bd #x43ab8f3d725ea8d8) (#x07f15792a3de1275 #x1d7d907e0111842b) (#x2b819001e716fa03 #x23f1dca38fa882ee) (#x233735853b1fca4c #x81249f330ddd7b1c) (#x6c89a6396b80ab4b #x67eb11d71497c259) (#x529a504063c92fc0 #x17aabbcd9c485a66) (#x643f03bdb7899b04 #xc53e524796e23bab) (#x03aae4d0cd3b0ab3 #x4cf6503640ca1952) (#x7eea97d32701c7b6 #x2926f71012f15ca3) (#xc5f54c8ee595db51 #x3f701744adefa491) (#x175ede59d8cc72eb #x9a14169dc6fbb50c) (#x466e6ac9763e5798 #xc148fd661a79f638) (#x8dba88a016d4a823 #xc4c209deb5b499ff) (#x9828eed8f98bd6ab #x97727f67b2c3832e) (#x1ad5946e90885cb2 #xec18a55784136708) (#x5f111a772b8d0199 #x61a60807dea08862) (#x0ced16c6b2ec2889 #xf35e83d8c3ae648b) (#x86a6c9f407e692df #x2ae11a78770b795f) (#xb53e75ba47eb380d #x2cac03a8bd3c3364) (#xecb864ae35102d31 #xd525abc3e3cb89a2) (#x7ab1249149e4df70 #x78ad3758532ac1da) (#x5130b490aef22573 #x5b5cebfbdc824334) (#xe6c2790bde8a111d #xbe548877a032df8d) (#x68d2157b0565b38d #x3660d19f554c5f20) (#xbe2234ee56d902f1 #xc28f100e7f83d3c4) (#xcf8f512b0e0fe77d #x540134f0ee16f2be) (#x1c429f0dc9fe4817 #x7437053b044455ac) (#x0a7a1da5eb9a3c2c #x6b7123b443f9562f) (#x888767138299b635 #x101bf9847529b209) (#x15926678ef5f7e88 #x53b076b907771ad1) (#x66f3bb9c801a9767 #x0c9a3263576e9476) (#xedde385fcfb82be1 #x50779bd1628d3f2d) (#x556b07d2c0173db5 #x0ad72bb39d59de4d) (#x4d722b9d670c6d64 #x2f6beec0d8c61698) (#x3154046f779ea6b1 #xcfe979f40bbbe5e6) (#xc87e06b9add1f508 #x497ca48eef077695) (#x89e13be27831b0e5 #x9549c996f46f0486) (#xffbd09b58339471c #x1eba7d1664eba1d7) (#xcab2be989a42f96b #x80d8c4aa2e8bd948) (#x70cb3934a27ee35c #x13dc14ec10d397f5) (#x5056e861545a23a3 #xde0edbe95dc4f5bb) (#x8031c2975e90867a #xb2ceba14f75c4bfb) (#x3cdf4e583fda88e8 #xb9e5ca3e495337e2) (#xfbe6baf7eddc5fda #x4f31bd5e25303cae) (#x4ed8cf4daa3767d7 #x639dbef6980c0fca) (#x5ddda2561c1e0dfa #xa80268231f2c27bf) (#x3469ebdce3d3b8a7 #x1b3089aecb26ce10) (#xfd71b194b4aa4b7f #xd71e1d32a5670e0a) (#x909e4b5c2582e6e4 #x35a73cf730b67adc) (#x5a2cf5c4bfc01f8f #xb57ff85d1e3da394) (#x62a808deeeff8fa1 #x5d11f22b16b5090f) (#xee74dc8f02832152 #x1c81cbe72247267f) (#x58e04de5885313ec #x7cdb9879dfb10c49) (#x163882a82264743b #x1f46268f47bd0383) (#x492998df09e975a2 #x7ee02e88991d8be1) (#x5b4aa9354568195f #x302dc84f9f7b151b) (#xdc8a3c30b8268d50 #x9f9ee2256936dacb) (#x75f6d6873633fd4a #xc705e4b6d04ebc03) (#x9334af8ce8b9ec57 #x79516cc1707c638e) (#xa1ca4f33521c4055 #xfa4e45033b0d9f3a) (#xad2759f5e0f068dc #x0910c6dbf8a3fbb1) (#x9fd9b94a5a55c4de #x8a0fef19b3d20705) (#x3b2e19ca9c049a9d #xa4985a404842b3c9) (#xbb1fdb5dc2941ce7 #x1656e054bf1ef832) (#xfc17ed654e024daf #x524c2d202421b885) (#xc1aeffcc8b70c397 #x6efbd70cec3439e8) (#x81579e66a43880aa #x379c8a06761afd74) (#xf0fafba3fcee6526 #xa112aef8e78fdc0e) (#x3a48453b66ac9c4d #x21ca6a52c9040546) (#xb8b53f8d0faf1654 #x5aa0b062ffd4e160) (#xe8e3d7ec5bf535f7 #x84ae6b8ba21014db) (#xd0672af60acaa5d9 #x6cc061fdaa98be40) (#xb9d3637cf5071084 #xdff280707e9257ef) (#x9609403f7cf4f241 #xad889c9bb0e14878) (#xef12807ef82b2782 #x99d3fbf5a30190f0) (#x57a7bff3f78431d6 #xc3734b975cd57190) (#x6795e76d7ab291b7 #x89c80271d62822f9) (#xe299ca49b06f09db #xefdf483fe1e942f4) (#x45c48e19bb055d2b #x8dbead505ab3ef6a) (#x2d169b62be60eea6 #xbbde7ccf0fffb04a) (#x3db912a9c5728e38 #x3cb7fa2cc815816d) (#xcc25b5fbc334edce #x18f764c6aedcebec) (#xf3501f7331d56f95 #xede4fecea745c55c) (#x63ce542f14578971 #xd843c23997f3bf80) (#x791bc04184dfd5c3 #x345b676e13e0d888) (#x4353857ae273498e #x15910d3cdae4ddce) (#x74908a76cc9bfb9a #x4257d4a451080a8c) (#x7361dde46f45e9ef #x5f2a44da50198ea7) (#xdb7b6ba21bf89f25 #x82e3725b68275ee0) (#x1fe87bdd04c542a4 #x38c1550d448e4cfe) (#x25a03ee66269dee9 #x190b3f5f8d8a49b8) (#x5986111472fb153c #xf989a86b5ef7bac6) (#xae8dbd252dcb626f #x45e696edb869e2e3) (#x32fee0bfbaa5ac02 #x831f29c24b71fcb4) (#x197f70be5db35601 #xa0eef561c4d97e5a) (#xfa80e6061774590a #xca638d4ca4768a21) (#xd1017607f062a309 #xe99251ef2bde08cf) (#xea2f6fcd6c663994 #x4d0a0baf639cbb06) (#x419f3d5bd5e045ed #xdc356d181b687213) (#x0d8b4a3748442e59 #x760cb3ca42e8d204) (#x3032589e8d36a061 #x4abb49e68afd5369) (#xf84c5e2720e75569 #x03c7ed6865fa25fc) (#x773a6ea601a0f129 #x0ea1849211c213de) (#x282b74d12a2df0b0 #x6f078c95cf629bbc) (#xf5c7141068a37b30 #x75cb5ea22712f7f8) (#x294d2820d085f660 #xea55bc874e242d33) (#x1e8e272cfe6d4474 #xbd93651fc5c8fa71) (#x94c5f81e4b67fe22 #x642cfcbf716de7a5) (#xac4105041a586e0c #x8c42f6c979e54d3e) (#xe7a425fa242217cd #x3b06b86521746902) (#x994eb2290323d07b #x12204f75338535a1) (#x3f75aa88f2e1825b #xf5139a0809992eb0) (#x8f7630812147a440 #x0d6669fa74383622) (#xdf20d8e0751d87e3 #xd368b21329fcc399) (#x37c30f0c2ee8b214 #x57c6d9988becd742) (#x0000000000000000 #x0000000000000000) (#x126331ea4c816cfd #x4ecde6c706669efa) (#xb2cf2228e4352a78 #x31d193d6bc2db74f) (#xcee90ddaf4a7e1ad #xd15304e26f504431) (#x01665cf1faa806d0 #x855230128146b68f) (#x976f1cce865cf491 #x28daac8931a7fef7) (#x0b1c415411323afc #xee2313a6c2bfe0a0) (#x765c3257fb08f7f9 #x8bf3b4809084a551) (#x0e21aee7857f24ea #x3afae3fc0222cb56) (#xa0ac13c2a8b44685 #x7f1c7511ba4b29b5) (#xe40ec12ae9191d7e #x77f0e85361be7050) (#x350fb72d197bbe77 #x9e62b9bc4a60789f) (#x1d24c3fc33564ec7 #xf16535298502e323) (#x2fda234389f3e2c5 #x727a1cebce731f97) (#x69b4498affcdb55d #xb332e18dd40ae9af) (#x0f47f2167fd7223a #xbfa8d3ee83647dd9) (#x7c262ff21092cbd5 #xe0829734d37df37e) (#x7f8ccb22dda9c166 #xac74c70293b7ea2c) (#x3e13f6790849848b #x7041aa1a88df983f) (#x5e774686d1250749 #xe4f438155fe63eed) (#x6064b0ffd96c83c2 #x94b5920fd739a6d2) (#x045bb3426ee518c6 #x518bc04841db9d79) (#x8a4bdf32b50aba56 #xd9bf99a0b4a51dd4) (#x11c9d53a81ba664e #x023bb6f146ac87a8) (#xe9858b1da15d3327 #x01fc5b992356a254) (#xa260abe39f274ae6 #xb6b815357bc78668) (#xa591fc713cf95893 #xabc5854b7ad60243) (#xcbd4e26960eaffbb #x058af4b8afcd6fc7) (#x18192c4fa71b50d1 #x25bcc573459fc8d5) (#x02ccb82137930c63 #xc9a46024c18cafdd) (#x4be520fe3e7a79c1 #xb7444eac5891243c) (#xf2364382cb7d6945 #x68b6cedc260373d3) (#x9ae456f9ce18dac8 #x5ed61f43734f2cf3) (#x053defb3944d1e16 #xd4d9f05ac09d2bf6) (#xb0039a09d3a6261b #xf875f3f27da11892) (#xa63b18a1f1c25220 #xe733d57d3a1c1b11) (#x6deffac89128ad9b #xe2b921c595d174d6) (#x8cdcd451ec7caef3 #x419039cc34f22f70) (#xe055726887fc05b8 #x267b281b2065ed29) (#xa75d44500b6a54f0 #x6261e56fbb5aad9e) (#x21fb8da40c8cc62f #x4880ff17cc51d4c1) (#xd2ab92d73d59a9ba #xa56401d96b14119d) (#x08b6a584dc09304f #xa2d543908275f9f2) (#xb694916a8ad032be #x605a539efdf62a36) (#x6102ec0e23c48512 #x11e7a21d567f105d) (#xa4f7a080c6515e43 #x2e97b559fb90b4cc) (#xd55ac5459e87bbcf #xb81991a76a0595b6) (#x839b264793ab8cc9 #xfe38ea22b79652a9) (#x5cbbfea7e6b60b2a #x2d5058319e6a9130) (#x4a837c0fc4d27f11 #x32167ebed9d792b3) (#x2ebc7fb2735be415 #xf7282cf94f35a918) (#xf19ca752064663f6 #x24409eea66c96a81) (#x1bb3c89f6a205a62 #x694a95450555d187) (#xfedb5544799141cc #x9be84d04e5ad1758) (#xf4a148e1920b7de0 #xf0996eb0a6544177) (#x71ad65c558d6e58c #x968e24fe9195217a) (#x8e106c70dbefa290 #x883459e8f57e80ad) (#xc0c8a33d71d8c547 #xeba9e71e6d728f67) (#x209dd155f624c0ff #xcdd2cf054d17624e) (#xc493107f1f3ddd81 #xba2227562ca9121e) (#x4235d98b18db4f5e #x90c33d2e5ba26b41) (#x44a2d2e841ad5bfb #x08ec9d42dbf559e5) (#xabb05296b9867c79 #x913f66b778f4c915) (#xa306f712658f4c36 #x33ea2527fa8130e7) (#xc739f4afd206d732 #xf6d477606c630b4c) (#x9ebfe5bba0fdc20e #x0f5ddf0b3294b18a) (#x2ae7ccf01dbefcd3 #xa6a3ecb10eee3461) (#xde4684118fb58133 #x563a8201a8ba7516) (#xf70bac315f307753 #xbc6f3e86e69e5825) (#x9252f37d1211ea87 #xfc035cd3f13ad501) (#xbf44681fac710421 #x47dd201cfec5654b) (#x65595f4c4d219dd4 #x406c625517a48d24) (#x4fbe93bc509f6107 #xe6cf8ee4194ab945) (#x470836388c965148 #x441acd749b3f40b7) (#xb458294bbd433edd #xa9fe33ba3c7a85eb) (#xb7f2cd9b7078346e #xe508638c7cb09cb9) (#x36a553fdd440b4c4 #xd294e98a0aaa61cd) (#x14f43a8915f77858 #xd6e246ab8631ac5e) (#x22516974c1b7cc9c #x0476af218c9bcd93) (#x7d407303ea3acd05 #x65d0a726523b45f1) (#x82fd7ab669038a19 #x7b6ada3036d0e426) (#xc9185a485779f3d8 #xcc2e949c6e41c01a) (#xddec60c1428e8b80 #x1accd237e8706c44) (#x10af89cb7b12609e #x876986e3c7ea3127) (#xeb49333c96ce3f44 #xc8583bbde2da0d89) (#xa81ab64674bd76ca #xddc93681383ed047) (#x40f961aa2f48433d #x59675d0a9a2ec49c) (#x3884fd1a513f902e #xe86e0a760888aa9b) (#x484fc42ef3417372 #xfbb21e9a185b3d6e) (#xbd88d03e9be20842 #x8e7940383f49ca96) (#x540d5b233abf3b65 #x8f851ba11c1f68c2)) ((#x9cd3c3c2d42d19d4 #x8fbed12c18a95de1) (#x04a6349440cb7b40 #xb560256bdb14b350) (#x84817b3c97d2c097 #xb73d0f9587d171c2) (#xc11d84d94db6694d #xbf8aa7eb3443ffcf) (#x1cf48c6a0334a203 #x8de3fbd2446c9f73) (#xb80c947cd1713cd1 #xdb581f99d41d3f74) (#xeed6ace3f87908f8 #x4584483647d0dcc6) (#x4454f2c0ca26c7ca #xb4af3014f597d219) (#x199ab5db53bdb753 #x849b46d3d97d7037) (#x3edef50a66272066 #xd755e3d8dfc6f69e) (#x2e03251fa58d0fa5 #x461677b735967f1d) (#x01c80d2510426e10 #xbc18986a46055c14) (#x76a35bb56c9f6a6c #x7f5abc71846d3277) (#x094765ce90179890 #x15d8d2bc332df9b4) (#xdc2105965ec0a55e #x8e71c453362a3ca8) (#xceafcfc9bdee56bd #xa402a3e850700d03) (#x81ef428dc75bd5c7 #xbe45b2941ac09e86) (#x02531a4a2084dc20 #xbb30f3d48c0ab828) (#x3bb0ccbb36ae3536 #xde2d5ed942d719da) (#x36519de1e672d6e6 #x7e95a90eaaee533e) (#x1346c77af36c9df3 #x966bffd1205f6dbf) (#xe659c408782cfe78 #xec4402e032f87966) (#x06f52ede604fa760 #x0e50d6bf571e0b78) (#x7056756b0cd0cd0c #x710a6aced373390f) (#x73cd62043c167f3c #x76220170197cdd33) (#x6b9fdafa7fe9a67f #x4ea1dfc98604f110) (#x0c295c7fc09e8dc0 #x1ca06fbdae3c16f0) (#x47cfe5affae075fa #xb3875baa3f983625) (#x2aa5118be54674e5 #xf37652dcee82cc4d) (#x72056f212c54112c #xca3a991a5f798127) (#x56da389f29083429 #x9edc57af93cde3b2) (#xd5666058ced73dce #x9ba916ef0507c51c) (#x776b56907cdd047c #xc342241bc2686e63) (#x8dc61ef207c55807 #xa2e5dd29b4fc8876) (#x9a26ed1cb462beb4 #x81ee07934fb75699) (#xbd62adcd81f82981 #xd220a298490cd030) (#xa3c53beda24857a2 #xe4f3aa9e816af76b) (#x0fb24b10f0583ff0 #x1b8804036433f2cc) (#x333fa450b6fbc3b6 #x77ed140f37ffbc7a) (#x1852b8fe43ffd943 #x3883deb99f782c23) (#x8b33302c678aff67 #xacb50b96e3e2830e) (#x51e71b645905fd59 #x2c94197a82d6b4de) (#x7e2c335eecca9cec #xd69af6a7f14597d7) (#x30a4b33f863d7186 #x70c57fb1fdf05846) (#x9e80d988f4a9c5f4 #x348e22f894a3e5c9) (#x379990c4f630b8f6 #xc28d3164eceb0f2a) (#x75384cda5c59d85c #x7872d7cf4e62d64b) (#xa05e2c82928ee592 #xe3dbc1204b651357) (#xebb89552a8f01da8 #x4cfcf537dac13382) (#x608ba57ecf7ae2cf #xe049fea13923b08c) (#x6ef1e34b2f60b32f #x47d962c81b151e54) (#x5af364e0e996b9e9 #x827c38123df1f542) (#x945cab295478ef54 #x267e9bfa6d81f841) (#x642d91ea8fb1998f #x5529dbcae23703dc) (#x42a1dc1eaa6960aa #xbaffe6aba289d961) (#x936188d224752624 #x9436d52f7c9aaf2d) (#xb2d0e6dd71a01671 #xc9a8a69b2d3f22fc) (#x222a796065138265 #x5ab6180a9baa69ed) (#x5dce471b999b7099 #x303476c72ceaa22e) (#x316cbe1a967f1f96 #xccdde7dbbbf50452) (#x791110a59cc7559c #x64d2b872e05ec0bb) (#xc85ae117dda1f1dd #xaa527557076e067b) (#x4d13970e5a315f5a #xa177e2a8c6ba2bad) (#x088f68eb8055f680 #xa9c04ad67528a5a0) (#xef1ea1c6e83b66e8 #xf99cd05c01d580d2) (#x056e39b150891550 #x0978bd019d11ef44) (#x88a82743574c4d57 #xab9d602829ed6732) (#x9f48d4ade4ebabe4 #x8896ba92d2a6b9dd) (#xd88731021e0bde1e #x3b11e138ed3e8ff8) (#x99bdfa7384a40c84 #x86c66c2d85b8b2a5) (#x25175a9b151e4b15 #xe8fe56df8ab13e81) (#xb14bf1b24166a441 #xce80cd25e730c6c0) (#x55412ff019ce8619 #x99f43c1159c2078e) (#x3a78c19e26ec5b26 #x6235c6b304d245ce) (#x0adc72a1a0d12aa0 #x12f0b902f9221d88) (#xfd906b990b15950b #xd3efb7e7678fb179) (#xab4a5306221da122 #x4d33e048f44252cb) (#xccfcd5839d6a8a9d #x1f32503cdc7ab52b) (#x2b6d1caef5041af5 #x4f6ecab6a8879059) (#x459cffe5da64a9da #x08b7a87eb3928e0d) (#x8e5d099d3703ea37 #xa5cdb6977ef36c4a) (#x871a6c53a71472a7 #xb015642b4dde95fe) (#xc992ec32cde39fcd #x164aed3d416b5a6f) (#x1a01a2b4637b0563 #x83b32d6d1372940b) (#x7b420aefbc4389bc #xdfe24ba66c547893) (#xa7630f79e2832ce2 #x51938ff55a7e443b) (#x35ca8a8ed6b464d6 #x79bdc2b060e1b702) (#x9875f75694e66294 #x3adef447c3bdeeb1) (#x9beee039a420d0a4 #x3df69ff909b20a8d) (#xe9eb8f188874c188 #xf7cc06e356cb8baa) (#xafec679262d6da62 #xf853c5232f56e19b) (#xdb1c266d2ecd6c2e #x3c398a8627316bc4) (#xed4dbb8cc8bfbac8 #x42ac23888ddf38fa) (#xe0acead618635918 #xe214d45f65e6721e) (#x382bdbd406688706 #xd905356788d8fde6) (#x39e3d6f1162ae916 #x651dad0dcedda1f2) (#x1d3c814f1376cc13 #x31fb63b80269c367) (#xa4f81816d2459ed2 #x56bbe44b9071a007) (#xf8fe52285b9c805b #xda970ae6fa9e5e3d) (#x6310b211ffbc50ff #xe761951ff32c54b0) (#xf684141dbb86d1bb #x7d07968fd8a8f0e5) (#xa5301533c207f0c2 #xeaa37c21d674fc13) (#x5f9d5d51b91facb9 #x8b048513a0e01a06) (#x67b68685bf772bbf #x5201b0742838e7e0) (#x62d8bf34effe3eef #x5b790d75b52908a4) (#x7db72431dc0c2edc #xd1b29d193b4a73eb) (#xfc5866bc1b57fb1b #x6ff72f8d218aed6d) (#x8f9504b827418427 #x19d52efd38f6305e) (#xdad42b483e8f023e #x802112ec613437d0) (#x83bc58c7e7df09e7 #x0575414096ca26ae) (#x0b147f84b09344b0 #xaee82168bf27419c) (#x527c0c0b69c34f69 #x2bbc72c448d950e2) (#xb7bedf6c21290321 #xc0d01b9ab02ecdb8) (#x6ca2f9010fe46f0f #xfce9911c971fa67c) (#xba5f8e36f1f5e0f1 #x6068ec4d5817875c) (#x49b5a39a1afa241a #x1417c7c31dae98fd) (#xc5bbb04d0d7d120d #x0aea8280ef574c9f) (#x32f7a975a6b9ada6 #xcbf58c6571fae06e) (#xa919494c02997d02 #xf603139c7848eae3) (#x4e8880616af7ed6a #xa65f89160cb5cf91) (#xe164e7f308213708 #x5e0c4c3523e32e0a) (#x74f041ff4c1bb64c #xc46a4fa508678a5f) (#x502f164149479349 #x908c8110c4d3e8ca) (#xbcaaa0e891ba4791 #x6e383af20f098c24) (#xbb978313e1b78ee1 #xdc7074271e12db48) (#xf51f03728b40638b #x7a2ffd3112a714d9) (#x90fa9fbd14b39414 #x931ebe91b6954b11) (#x2d983270954bbd95 #x413e1c09ff999b21) (#xea709877b8b273b8 #xf0e46d5d9cc46f96) (#xd00859e99e5e289e #x92d1abee98162a58) (#xf3ea2daceb0fc4eb #x747f2b8e45b91fa1) (#xdfba12f96e06176e #x8959afedfc25d894) (#x10ddd015c3aa2fc3 #x9143946fea508983) (#xe823823d9836af98 #x4bd49e8910ced7be) (#x073d23fb700dc970 #xb2484ed5111b576c) (#xae246ab77294b472 #x444b5d496953bd8f) (#x9132929804f1fa04 #x2f0626fbf0901705) (#xcbc1f678ed6743ed #xad7a1ee9cd61e247) (#xa6ab025cf2c142f2 #xed8b179f1c7b182f) (#x89602a66470e2347 #x1785f8426fe83b26) (#x2079632a45975e45 #xe186ebde17a0d1c5) (#x413acb719aafd29a #xbdd78d1568863d5d) (#x293e06e4d580c6d5 #xf45e3962248d2871) (#x5968738fd9500bd9 #x855453acf7fe117e) (#xcd34d8a68d28e48d #xa32ac8569a7fe93f) (#xfe0b7cf63bd3273b #xd4c7dc59ad805545) (#x6a57d7df6fabc86f #xf2b947a3c001ad04) (#xdde908b34e82cb4e #x32695c39702f60bc) (#x92a985f734374834 #x282e4d453a9ff339) (#x960fb16374fc3374 #x9d4e682ee18b4069) (#x65e59ccf9ff3f79f #xe93143a0a4325fc8) (#xc28693b67d70db7d #xb8a2cc55fe4c1bf3) (#xb318ebf861e27861 #x75b03ef16b3a7ee8) (#xb676d249316b6d31 #x7cc883f0f62b91ac) (#x548922d5098ce809 #x25eca47b1fc75b9a) (#xa8d1446912db1312 #x4a1b8bf63e4db6f7) (#x97c7bc4664be5d64 #x2156f044a78e1c7d) (#x80274fa8d719bbd7 #x025d2afe5cc5c292) (#x15b3e9a493233a93 #x983b296e774166c7) (#x4be6b9d03a7ef83a #xaf27341791a420d5) (#x1628fecba3e588a3 #x9f1342d0bd4e82fb) (#xcf67c2ecadac38ad #x181a3b8216755117) (#x719e784e1c92a31c #xcd12f2a49576651b) (#xde721fdc7e44797e #x35413787ba208480) (#x3f16f82f76654e76 #x6b4d7bb299c3aa8a) (#x0000000000000000 #x0000000000000000) (#x1f6f9b0533f21033 #x8acb906c8e637b4f) (#x827455e2f79d67f7 #xb96dd92ad0cf7aba) (#xe337fdb928a5eb28 #xe53cbfe1afe99622) (#x1ea7962023b07e23 #x36d30806c866275b) (#xa20d36c8b20a39b2 #x58eb32f4c76fab7f) (#xd25b43a3bedaf4be #x29e1583a141c9270) (#xadbf7dd842520642 #x436336f7a35c59b3) (#xb425c80311efb111 #xc7f870247a212984) (#x9d1bcee7c46f77c4 #x33a649465eac01f5) (#x69ccc0b05f6d7a5f #xf5912c1d0a0e4938) (#x039b176f30c6b230 #x07286bbeca0fe43c) (#xb5edc52601addf01 #x7be0e84e3c247590) (#xec85b6a9d8fdd4d8 #xfeb4bbe2cbda64ee) (#x24df57be055c2505 #x54e6ceb5ccb46295) (#xaa825e23325fcf32 #xf12b7822b2470edf) (#x6143a85bdf388cdf #x5c5166cb7f26ec98) (#x4369d13bba2b0eba #x06e77ec1e48c8575) (#xd1c054cc8e1c468e #x2ec93384de13764c) (#x1bc9af9173396b73 #x3fabb5075577c81f) (#xca09fb5dfd252dfd #x116286838b64be53) (#x78d91d808c853b8c #xd8ca2018a65b9caf) (#x17e0f3eeb3a7e6b3 #x230bdabafb4bdeef) (#x3d45e26556e19256 #xd07d886615c912a2) (#xffc371d32b91492b #x68df4433eb850951) (#xa19621a782cc8b82 #x5fc3594a0d604f43) (#xfb6545476b5a326b #xddbf61583091ba01) (#x854976198790ae87 #x0b2597ffc1d42dd6) (#xd3934e86ae989aae #x95f9c0505219ce64) (#x3c8def4046a3fc46 #x6c65100c53cc4eb6) (#x5e555074a95dc2a9 #x371c1d79e6e54612) (#x0e7a4635e01a51e0 #xa7909c692236aed8) (#x340287abc6f60ac6 #xc5a55ada26e4eb16) (#x667e8ba0af3545af #xee19281e6e3dbbf4) (#xbef9baa2b13e9bb1 #xd508c9268303340c) (#xd94f3c270e49b00e #x87097952ab3bd3ec) (#x5c064a3e89d91e89 #x8c2ceead6aeffe3a) (#x53b4012e79812179 #x97a4eaae0edc0cf6) (#x1115dd30d3e841d3 #x2d5b0c05ac55d597) (#xc7e8aa072df9ce2d #xb1da7154635df4b7) (#x58a07eaac91265c9 #x394ccbc6b1fb4d6a) (#x487daebf0ab84a0a #xa80f5fa95babc4e9) (#xf0713ac3dbc976db #x735740308fb6fb9d) (#xfaad48627b185c7b #x61a7f9327694e615) (#xd4ae6d7dde9553de #x27b18e8543029908) (#xe5c2d36748ea4c48 #xeb6c695ef8f79d5a) (#x128eca5fe32ef3e3 #x2a7367bb665a31ab) (#xf9365f0d4bdeee4b #x668f928cbc9b0229) (#x274440d1359a9735 #x53cea50b06bb86a9) (#x40f2c6548aedbc8a #x01cf157f2e836149) (#xf2222089fb4daafb #xc867b3e403bc43b5) (#x2c503f558509d385 #xfd268463b99cc735) (#xf1b937e6cb8b18cb #xcf4fd85ac9b3a789) (#x86d26176b7561cb7 #x0c0dfc410bdbc9ea) (#x4a2eb4f52a3c962a #x133fac7dd7a17cc1) (#xf74c1938abc4bfab #xc11f0ee59eadacf1) (#x6f39ee6e3f22dd3f #xfbc1faa25d104240) (#x571235ba394a5a39 #x22c4cfc5d5c8bfa6) (#x4607e88aeaa21bea #x0f9fc3c0799d6a31) (#x2fcb283ab5cf61b5 #xfa0eefdd73932309) (#xb083fc975124ca51 #x7298554fa1359ad4) (#xf4d70e579b020d9b #xc637655b54a248cd) (#x4f408d447ab5837a #x1a47117c4ab09385) (#xbf31b787a17cf5a1 #x6910514cc5066818) (#x0de1515ad0dce3d0 #xa0b8f7d7e8394ae4) (#x4cdb9a2b4a73314a #x1d6f7ac280bf77b9) (#x8afb3d0977c89177 #x10ad93fca5e7df1a) (#xc0d589fc5df4075d #x03923f817246a3db) (#x6804cd954f2f144f #x4989b4774c0b152c) (#xc473bd681d3f7c1d #xb6f21aeaa952108b) (#x147be48183615483 #x2423b10431443ad3) (#xac7770fd52106852 #xff7bae9de55905a7) (#x268c4df425d8f925 #xefd63d6140bedabd) (#xd6fd7737fe118ffe #x9c817d51cf082120) (#xc620a7223dbba03d #x0dc2e93e2558a8a3) (#xe40ade4258a82258 #x5774f134bef2c14e) (#x21b16e0f55d53055 #x5d9e73b451a58dd1) (#x5b3b69c5f9d4d7f9 #x3e64a0787bf4a956) (#x7a8a07caac01e7ac #x63fad3cc2a512487) (#x7fe43e7bfc88f2fc #x6a826ecdb740cbc3) (#xe791c92d686e9068 #x505c9a8a74fd2572) (#xb9c49959c13352c1 #x674087f392186360) (#xe2fff09c38e78538 #x5924278be9ecca36) (#x23e274457551ec75 #xe6ae8060ddaf35f9) (#xc34e9e936d32b56d #x04ba543fb84947e7) (#x6d6af4241fa6011f #x40f10976d11afa68) (#x8c0e13d717873617 #x1efd4543f2f9d462) (#x9594a60c443a8144 #x9a6603902b84a455) (#x7c7f2914cc4e40cc #x6daa05737d4f2fff) (#x28f60bc1c5c2a8c5 #x4846a10862887465) (#xd7357a12ee53e1ee #x2099e53b890d7d34)) ((#x09ad9bfc7c7150fe #x1b53683f3f385efc) (#xe9d1e2eef4d89f6d #xf8bca3dada3c90ee) (#x3a0e92dd01e49453 #x4e5d24a6a6b0b8dd) (#xf0f491115314b8ab #xd35f7d9595c51811) (#xda72ebcf894d5bc0 #xadb2ef4343b476cf) (#xa43b656e24a6bd7d #x2f469afafa27c46e) (#x722fc03167ea51af #x9680e29d9db30d31) (#x615fda166fc67b72 #xa32d01e4e47a8416) (#x9806d0fb40a39327 #x6b21144e4e87c2fb) (#x0bbc86c45f2e87f9 #x1d450e31318934c4) (#x297e88fa09c8be8e #x7bf0c7dfdf7931fa) (#xaba5d9da3d36578a #x3e2f58d7d70f24da) (#x9253b923ef439e3c #x756f297878b7c323) (#xbac4dec51645aa50 #x0d94dda0a077c7c5) (#x8123a304e76fb4e1 #x40c2ca01017e4a04) (#x3668dc4dcbe52341 #x5a29b3828290074d) (#x787aa9e9c80a5cb4 #x88cedfabab830ce9) (#x958971777a6caed7 #x7c5eb06d6d1e4877) (#x49c8bdf096c04f1e #xdbd6f53c3cba80f0) (#x1add81db745d7a23 #x2efe8b4646f1d7db) (#x1ceea69311bcc02a #x24c4215454e16993) (#x634ec72e4c99ac75 #xa53b67eaeacbee2e) (#x7c5893998eb431ba #x84e213b7b722d899) (#xee0b2aba61f7af86 #xf18d3acfcf951bba) (#xd027821726ad56db #xb3fcd27575847717) (#xe3848b365b389276 #xe6f29eecec0c9136) (#xf8b0e5f1dfab62b7 #xcb0726adad4473f1) (#x5f7372bb289c822f #xe15ce95e5e6be8bb) (#xc0af6a14fd1021e3 #x834c64050545a114) (#x7b825bcd1b9b0151 #x8dd38aa2a28b53cd) (#xd614a55f434cecd2 #xb9c678676794c95f) (#x3be77dc1f12a1eb1 #x4d5617a1a1098dc1) (#x39f660f9d275c9b6 #x4b4071afafb8e7f9) (#x80ca4c1817a13e03 #x43c9f90606c77f18) (#x75f50865f2c56144 #x9fb17b88881a8665) (#xe64f5e5aed48759a #xe9d561f7f714705a) (#xa9b4c4e21e69808d #x38393ed9d9be4ee2) (#xc69c4d5c98f19bea #x8976ce1717551f5c) (#x58a9baefbdb3b2c4 #xe86d704b4bc263ef) (#x33a309217d95c4ad #x550e4c999988e621) (#xfc92df8199150fb9 #xc72beab1b1e5a781) (#x01e9ef1cf0ce8ae2 #x030b330707b9351c) (#x8332be3cc43063e6 #x46d4ac0f0fcf203c) (#x66851242fae94b99 #xaa1c98f1f1d30f42) (#x9c24ea8b061dfe29 #x670dd8525226168b) (#xb1785801496b2da9 #x10d1d39191fef301) (#xac7f118ea8196761 #x371ec1c2c2a6af8e) (#x97986c4f593379d0 #x7a48d66363af224f) (#x305bfb05ae049948 #x501319909080b905) (#xccc92484371196f1 #x9738f32121651e84) (#xa1f0b00292d65a91 #x206165e1e13f2502) (#x2ea440ae9ce78e65 #x72c15ecacad0baae) (#x18cc9ce35702ad24 #x28e8ed484840bde3) (#x2518c66ac3c9099c #x6f8450fbfb598e6a) (#x1d07498fe1724ac8 #x27cf125353585c8f) (#xcf31d6a0e480cb14 #x9225a628286d41a0) (#x20d3130675b9ee70 #x60a3afe0e0416f06) (#xd1ce6d0bd663dc39 #xb0f7e172723d420b) (#xf9590aed2f65e855 #xc80c15aaaafd46ed) (#xcd20cb98c7df1c13 #x9433c02626dc2b98) (#x54cff47f77b205d6 #xfc19e76f6fe2dc7f) (#x4a304fd4455112fb #xdecba03535b2dfd4) (#xdb9b04d37983d122 #xaeb9dc44440d43d3) (#x1161071f2b73fdda #x33bb85777778e31f) (#xd98a19eb5adc0625 #xa8afba4a4abc29eb) (#x42743b34c9eec8e7 #xc693fb0d0d33b434) (#xc2be772cde4ff6e4 #x855a020b0bf4cb2c) (#x378133513b2ba9a3 #x5922808585293251) (#x68f241ea13b72b8c #xb87e69dbdb42daea) (#x4bd9a0c8b59f9819 #xddc09332320beac8) (#x0633274865e1ba09 #x0a3aaa121210be48) (#x1effbbab32e3172d #x22d2475a5a5003ab) (#xe8380df20416158f #xfbb790dddd85a5f2) (#xe26d642aabf61894 #xe5f9adebebb5a42a) (#x84e87668511f530d #x4fe5351a1a66ab68) (#x6ec166a276569185 #xb244c3c9c95264a2) (#xb8d5c3fd351a7d57 #x0b82bbaeaec6adfd) (#xa3e1ad3ab1898d96 #x267703efef8e4f3a) (#x6b0ab3cec0267669 #xbd633cd2d24a85ce) (#xcafa03cc52f02cf8 #x9d0259333375a0cc) (#xbee6e4b550fbc75e #x01b811bcbcd613b5) (#x04223a7046be6d0e #x0c2ccc1c1ca1d470) (#xe195960e78674571 #xe0e4f8e2e2bdfb0e) (#xa62a785607f96a7a #x2950fcf4f496ae56) (#xc14685080ddeab01 #x8047570202fc9408) (#x4065260ceab11fe0 #xc0859d030382de0c) (#x24f129763307837e #x6c8f63fcfce0bb76) (#xe07c791288a9cf93 #xe3efcbe5e504ce12) (#xde50d1bfcff336ce #xa19e235f5f15a2bf) (#xa5d28a72d468379f #x2c4da9fdfd9ef172) (#x51042113c1c2e23a #xf33e187474fa3d13) (#x56dee94754edd2d1 #xfa0f81616153b647) (#x4c03689c20b0a8f2 #xd4f10a2727a2619c) (#x1f1654b7c22d9dcf #x21d9745d5de936b7) (#x77e4155dd19ab643 #x99a71d8686abec5d) (#xdc41cc87ecace1c9 #xa788455151a4c887) (#x71d73215b47b0c4a #x939db79494bb5215) (#x7e498ea1adebe6bd #x82f475b9b993b2a1) (#x2cb55d96bfb85962 #x74d738c4c461d096) (#xf2e58c29704b6fac #xd5491b9b9b747229) (#x418cc9101a7f9502 #xc38eae04043beb10) (#xd5ec577b90ddb137 #xbcdb2d6e6e9c967b) (#x6cd07b9a55094682 #xb452a5c7c7e30e9a) (#x1b346ec78493f0c1 #x2df5b8414148e2c7) (#x594055f34d7d3826 #xeb66434c4c7b56f3) (#xbd1e1691836a9abb #x04a544b5b5de4c91) (#xc564bf784b60c60f #x8c6b9b1e1e5d4078) (#x15433d6f6dcd90d4 #x3f97496b6bd9376f) (#xfd7b309d69db855b #xc420d9b6b65c929d) (#xedf3d89eb266f263 #xf4906fc6c69d449e) (#x2f4dafb26c290487 #x71ca6dcdcd698fb2) (#x3fc547b1b79473bf #x417adbbdbda859b1) (#x62a72832bc572697 #xa63054eded72db32) (#x3479c175e8baf446 #x5c3fd58c8c216d75) (#x31b214195eca13aa #x53182a9797398c19) (#x324ae63d8d5b4e4f #x56057f9e9e31d33d) (#x192573ffa7cc27c6 #x2be3de4f4ff988ff) (#xf30c63358085e54e #xd642289c9ccd4735) (#x2d5cb28a4f76d380 #x77dc0bc3c3d8e58a) (#xe5b7ac7e3ed9287f #xecc834fefe1c2f7e) (#xb4b38d6dff1bca45 #x1ff62c8a8ae6126d) (#x07dac854952f30eb #x0931991515a98b54) (#xaa4c36c6cdf8dd68 #x3d246bd0d0b611c6) (#x4dea8780d07e2210 #xd7fa3920201b5480) (#x9a17cdc363fc4420 #x6d3772404036a8c3) (#x7fa061bd5d256c5f #x81ff46bebe2a87bd) (#xf11d7e0da3da3249 #xd0544e92927c2d0d) (#x175220574e9247d3 #x39812f6565685d57) (#x9bfe22df9332cec2 #x6e3c4147478f9ddf) (#x799346f538c4d656 #x8bc5ecacac3a39f5) (#x03f8f224d3915de5 #x051d550909085f24) (#xbf0f0ba9a0354dbc #x02b322bbbb6f26a9) (#x22c20e3e56e63977 #x66b5c9eeeef0053e) (#x0e7753a8e95e6015 #x1262f12a2a91d5a8) (#xd7fd4a43b3826630 #xbacd4b60602dfc43) (#xfaa1f8c9fcf4b5b0 #xcd1140a3a3f519c9) (#x5ab8a7d79eec65c3 #xee7b1645457309d7) (#x741ce779020beba6 #x9cba488f8fa3b379) (#xebc0ffd6d787486a #xfeaac5d4d48dfad6) (#x691baef6e379a16e #xbb755adcdcfbeff6) (#x44471c7cac0f72ee #xcca9511f1f230a7c) (#x232be122a628b395 #x65befae9e9493022) (#xfe83c2b9ba4ad8be #xc13d8cbfbf54cdb9) (#x1088e803dbbd7738 #x30b0b67070c1d603) (#x084474e08cbfda1c #x18585b3838816be0) (#x50edce0f310c68d8 #xf0352b737343080f) (#x482152ec660ec5fc #xd8ddc63b3b03b5ec) (#x2a867adeda59e36b #x7eed92d6d6716ede) (#x64940f7ad9b69c9e #xac0afeffff62657a) (#x8d45ed942d6e03f3 #x54b65d25255ef594) (#x8ebd1fb0feff5e16 #x51ab082c2c56aab0) (#xced839bc144e41f6 #x912e952f2fd474bc) (#x8b76cadc488fb9fa #x5e8cf737374e4bdc) (#xc902f1e88161711d #x981f0c3a3a7dffe8) (#x439dd42839204205 #xc598c80a0a8a8128) (#x86f96b507240840a #x49f3531414d7c150) (#x26e0344e10585479 #x6a9905f2f251d14e) (#xd3df7033f53c0b3e #xb6e1877c7c8c2833) (#x60b6350a9f08f190 #xa02632e3e3c3b10a) (#xa7c3974af737e098 #x2a5bcff3f32f9b4a) (#x5e9a9da7d85208cd #xe257da5959d2dda7) (#x9dcd0597f6d374cb #x6406eb55559f2397) (#x45aef3605cc1f80c #xcfa26218189a3f60) (#x14aad2739d031a36 #x3c9c7a6c6c600273) (#xa0195f1e6218d073 #x236a56e6e686101e) (#x0000000000000000 #x0000000000000000) (#xe45e4362ce17a29d #xefc307f9f9a51a62) (#x465601448f50a5e9 #xcabf371111926044) (#x213afc1a85776492 #x63a89ce7e7f85a1a) (#x4ffb9ab8f321f517 #xd1ec5f2e2eaa3eb8) (#x02111d38235fd707 #x0616660e0eb16a38) (#xec1a378242a87881 #xf79b5cc1c1247182) (#xc48d5064bbae4ced #x8f60a81919e47564) (#x5c8b809ffb0ddfca #xe441bc575763b79f) (#xa208422641470774 #x257c30e8e8377a26) (#x760dfa4121543ca1 #x9aac2e818112d941) (#x3e2ca8ad475af95d #x4271e8baba116cad) (#xf72e5945c63b8840 #xda6ee480806c9345) (#xe7a6b1461d86ff78 #xeade52f0f0ad4546) (#xad96fe9258d7ed83 #x3415f2c5c51f9a92) (#x13701a27082c2add #x35ade37979c98927) (#x676cfd5e0a27c17b #xa917abf6f66a3a5e) (#xb6a29055dc441d42 #x19e04a8484577855) (#xd2369f2f05f281dc #xb5eab47b7b351d2f) (#x0d8fa18c3acf3df0 #x177fa42323998a8c) (#xdfb93ea33f3dbc2c #xa295105858ac97a3) (#xff6a2da54a84525c #xc236bfb8b8edf8a5) (#xf53f447de5645f47 #xdc78828e8eddf97d) (#x35902e6918747ea4 #x5f34e68b8b985869) (#xfb4817d50c3a3f52 #xce1a73a4a44c2cd5) (#x3c3db59564052e5a #x44678eb4b4a00695) (#x1299f53bf8e2a03f #x36a6d07e7e70bc3b) (#x91ab4b073cd2c3d9 #x70727c7171bf9c07) (#x47bfee587f9e2f0b #xc9b40416162b5558) (#x9e35f7b32542292e #x611bbe5c5c977cb3) (#xc775a240683f1108 #x8a7dfd1010ec2a40) (#x6d399486a5c7cc60 #xb75996c0c05a3b86) (#x8f54f0ac0e31d4f4 #x52a03b2b2bef9fac) (#xb091b71db9a5a74b #x13dae0969647c61d) (#xd863f6f7aa128cc7 #xaba4894d4d051cf7) (#xc35798302e817c06 #x8651310c0c4dfe30) (#x52fcd3371253bfdf #xf6234d7d7df26237) (#x94609e6b8aa22435 #x7f55836a6aa77d6b) (#x8967d7e46bd06efd #x589a913939ff21e4) (#x8cac0288dda08911 #x57bd6e2222e7c088) (#xbb2d31d9e68b20b2 #x0e9feea7a7cef2d9) (#x99ef3fe7b06d19c5 #x682a2749493ef7e7) (#x3dd45a8994cba4b8 #x476cbdb3b3193389) (#xb93c2ce1c5d4f7b5 #x088988a9a97f98e1) (#x9042a41bcc1c493b #x73794f767606a91b) (#x5d626f830bc35528 #xe74a8f5050da8283) (#xb74b7f492c8a97a0 #x1aeb798383ee4d49) (#x8710844c828e0ee8 #x4af86013136ef44c) (#x93ba563f1f8d14de #x76641a7f7f0ef63f) (#x888e38f89b1ee41f #x5b91a23e3e4614f8) (#xa85d2bfeeea70a6f #x3b320ddede077bfe) (#xbcf7f98d73a41059 #x07ae77b2b267798d) (#x96718353a9fdf332 #x7943e56464161753) (#xaf87e3aa7b883a84 #x320394cbcbaef0aa) (#x0c664e90ca01b712 #x147497242420bf90) (#xea2910ca2749c288 #xfda1f6d3d334cfca) (#x0a5569d8afe00d1b #x1e4e3d36363001d8) (#x7db17c857e7abb58 #x87e920b0b09bed85) (#xf4d6ab6115aad5a5 #xdf73b1898964cc61) (#x82db512034fee904 #x45df9f0808761520) (#xb55a62710fd540a7 #x1cfd1f8d8d5f2771) (#xd405b86760133bd5 #xbfd01e696925a367) (#x4e1275a403ef7ff5 #xd2e76c2929130ba4) (#x73c62f2d9724db4d #x958bd19a9a0a382d) (#x53153c2be29d353d #xf5287e7a7a4b572b) (#x703edd0944b586a8 #x9096849393026709) (#x5737065ba4235833 #xf904b26666ea835b) (#x5b5148cb6e22ef21 #xed70254242ca3ccb) (#xdda8239b1c626b2b #xa4837656561dfd9b) (#xb280aa259afa704c #x15cc869898f6ac25) (#xcb13ecd0a23ea61a #x9e096a3434cc95d0) (#x6f2889be86981b67 #xb14ff0ceceeb51be) (#x381f8fe522bb4354 #x484b42a8a801d2e5) (#x05cbd56cb670e7ec #x0f27ff1b1b18e16c) (#x2709db52e096de9b #x699236f5f5e8e452) (#xf6c7b65936f502a2 #xd965d78787d5a659) (#xefe2c5a691392564 #xf28609c8c82c2ea6) (#x85019974a1d1d9ef #x4cee061d1ddf9e74) (#x6ae35cd230e8fc8b #xbe680fd5d5f3b0d2) (#x289767e6f906346c #x78fbf4d8d8c004e6) (#xc8eb1ef471affbff #x9b143f3d3dc4caf4) (#x0f9ebcb41990eaf7 #x1169c22d2d28e0b4) (#x8a9f25c0b8413318 #x5d87c43030f77ec0) (#x7a6bb4d1eb558bb3 #x8ed8b9a5a53266d1) (#x657de0662978167c #xaf01cdf8f8db5066) (#x9fdc18afd58ca3cc #x62108d5b5b2e49af) (#x2b6f95c22a976989 #x7de6a1d1d1c85bc2) (#xb36945396a34faae #x16c7b59f9f4f9939) (#x16bbcf4bbe5ccd31 #x3a8a1c6262d1684b) (#x55261b63877c8f34 #xff12d468685be963) (#xae6e0cb68b46b066 #x3108a7cccc17c5b6)) ((#xd94ca1d0b19e9555 #x521af24c1cf92f5a) (#x6c815d85cf87edfa #x1c58e1811e8b4855) (#x72ccac48560abe0c #x1a09f1cc58455c67) (#x0a3beefa777b3152 #x028eb13b83fb0caf) (#xc701501d2813c6a3 #x544be2015a373b68) (#x534f51f7c9ab1c73 #xaec7174ff2a062e2) (#x75e9ed0797709ce1 #xcfd96de9b881e7f2) (#x6346c40262202581 #x1f91e9463dec424c) (#xb0318b28a4c58186 #x4f05aa31a2ee61b9) (#x1722321c19033502 #xbae27722a5411a4e) (#x6463854da35a076c #xca417563dd28f9d9) (#x1bb186b04351aadf #x0716a9b1e6521284) (#xc0241152e969e44e #x819b7e24baf380fd) (#xc3703c791e9cb3e8 #x3fa6a870da87822e) (#xd68b38571c395d2e #x51d3fa8b3f9e2543) (#x936b40a520c2f83d #x2f5c696b4853e21f) (#x05fc777ddadcf929 #x0147b9fca09c06b6) (#x36a1cfa386a2977d #x0e2c91a10fa424cb) (#x6012e92995d57227 #xa1ac3f125d98409f) (#xcfe388d544ce2c35 #x825276e399948ae4) (#x5e51fe427faa0fcc #x79993a51919fd5d8) (#xad2857cecabd85d6 #xf7696c2884547758) (#x5a20922649257a87 #x12747020112f6c9e) (#x9a048374a04c9ec9 #x93ef0e04abdcec63) (#xb714ca6765bfa36b #x9ad53614422ada2c) (#x1c94c7ff822b8832 #xd2c635940696a911) (#xb440e74c924af4cd #x24e8e040225ed8ff) (#x4e568d11a7d31823 #x16abd156d41a7403) (#x08e2d8c86cddea96 #xd61994e2c3a3b18c) (#xaca54cd726ee09b4 #x9dc39fa5a478c8a8) (#x26a6bcf05edb8092 #x611e7aa64a218510) (#x15fb042e02a5eec6 #x6e7552fbe519a76d) (#xdb9597e2aa384e91 #x868dd7955ca19279) (#xb1bc903148960de4 #x25af59bc82c2de49) (#x836c33f6f8bbefd2 #x406e826c0dd643c4) (#x247f8ac2457d5b56 #xb5895f7f0a793833) (#xd5df157cebcc0a88 #xefee2cdf5fea2790) (#x9950ae5f57b9c96f #x2dd2d850cba8eeb0) (#xb8d353e0c8186b10 #x991c3ed3614dd035) (#xab800d98e7942b59 #x4813038044bc733d) (#xeb9c021701b37763 #x37db299c93edb2d7) (#x6737a86654af50ca #x747ca337bd5cfb0a) (#x18e5ab9bb4a4fd79 #xb92b7fe586261057) (#x95c31af30deb56b2 #x902606c388bbe67a) (#xefed6e73373c0228 #x5c3663ed135d0b91) (#xd4520e65079f86ea #x8544df527fc69860) (#xed3458412c9ad9ec #x88a146345305b6b2) (#xf8cf5c6f2e3f372a #xe6d414cfb61c11df) (#x02d936321ba6dbc4 #xd49725d94058bd23) (#xe94534251a15aca7 #xe34c0c45d3b50ff4) (#x6ba41cca0efdcf17 #xc9887da4fe4ff3c0) (#x92e65bbccc91745f #x45f69ae6687f5def) (#x018d1b19ec538c62 #x6aaaf38d202cbff0) (#x85c469a0d592415d #xff14edc4cd3e47a1) (#x396656242b055f06 #x0de599662cc32ed2) (#x401c0f8fe6275c3a #x7fc82a1cd751c1ea) (#xbd2f249d12c49239 #x985b872fc1d1d683) (#xd02362013110f3a1 #xeea99523ff762126) (#xd3774f2ac6e5a407 #x509443779f0223f5) (#x8e729c434ebafc6d #x9730af726ee9f4fe) (#x5974bf0dbed02d21 #xac49a674715b6e4d) (#xc94bd28369e782ba #x3d28194b597c8e81) (#xa036f87b7cbc9669 #x20374136e76bc062) (#xd8c1bac95dcd1937 #x38b001c13cd590aa) (#x6e586bb7d421363e #xc8cfc4585ed3f576) (#x7730db358cd64725 #x1b4e4830f8d95ad1) (#xc68c4b04c4404ac1 #x3ee1118c7a1b8498) (#xf45ce8c3746da8f7 #x5b20ca5cf50f1915) (#xba0a65d2d3beb0d4 #x4d8b1b0a21156d16) (#xae7c7ae53d48d270 #x4954ba7ce420758b) (#x91b276973b6423f9 #xfbcb4cb2080b5f3c) (#x903f6d8ed737af9b #x9161bf3f2827e0cc) (#x0bb6f5e39b28bd30 #x682442b6a3d7b35f) (#x7ba36f99d684d8f8 #xa6ba96a3bbca521b) (#xee60756adb6f8e4a #x369c90603371b461) (#x2bb81345e8da932d #xb64057b8291e322a) (#x0d1eafb5b60113bf #xd75e2d1e633fb73a) (#xa5ca8f06a6606f40 #x2170f8ca47f7c6d4) (#x13535e782f8c4049 #xd10f3d5325f1a308) (#x78f742b221718f5e #x188740f7dbbe50c8) (#x9cacd9228d653046 #x2c9561ac6b34e806) (#x5fdce55b93f983ae #x1333c9dcb1b36a28) (#xd2fa54332ab62865 #x3a3eb0fabf2e9c05) (#x9d21c23b6136bc24 #x463f92214b1857f6) (#x6fd570ae3872ba5c #xa26537d57eff4a86) (#xb95e48f9244be772 #xf3b6cd5e41616fc5) (#xe2f3c1c6813d1197 #x8b684ef37062bcab) (#xb5cdfc557e1978af #x4e4213cd0272670f) (#x98ddb546bbea450d #x47782bddeb845140) (#x3478f9919d044cb9 #xdabbb4784ffc99e8) (#x619ff2307986fe45 #xcb06cc9f7db4ff6f) (#x971a2cc1164d8d76 #x44b1231ac8e35b59) (#x58f9a4145283a143 #xc6e355f95177d1bd) (#xf708c5e88398ff51 #xe51d1c08957b1bc6) (#x4d02a03a50264f85 #xa8960702b46e76d0) (#x56b3268a1377e55a #xaf80aeb3523c6454) (#xdcb0d6ad6b426c7c #x535d4bb0bc6529ec) (#x944e01eae1b8dad0 #xfa8cf54ea897598a) (#x5c88c870640cd408 #xad0e1f88d1c768fb) (#xc4557d36dfe69105 #xea7634553a4339bb) (#xde69e09f70e4b7b8 #x87ca6e69fc3d94cf) (#x8fff875aa2e9700f #xfd9a5cff4ec54b0e) (#xe5d680894047337a #x5eb8d2d690a6073e) (#xa8d420b310617cff #xf62ed5d424c871ee) (#xdfe4fb869cb73bda #xed609de4dc112b3f) (#x35f5e2887157c0db #xb01147f56fd02618) (#x300995f5ab8b39f2 #xb156fe09cf4c20ae) (#x871d5f92ce349a99 #x2b83c81d8d66fa82) (#x8cabaa71551c27a9 #x43a78aab2eb149dd) (#x335db8de5c7e6e54 #x0f6b285daf38227d) (#xf5d1f3da983e2495 #x318a39d1d523a6e5) (#x4a27e175915c6d68 #x7d469b2754aacd45) (#xca1fffa89e12d51c #x8315cf1f39088c52) (#x5d05d369885f586a #xc7a4ec05f1ebd70b) (#x65ee9e544f098b0e #xa0eb86eefd044629) (#xccb7a5feb33b7b93 #x3c6fa0b7f9e08837) (#x66bab37fb8fcdca8 #x1ed650ba9d7044fa) (#xa362d5508b49c1cf #x9e0a9762871fc2b1) (#x3bbf601630a384c2 #xd972bcbf6c9b93f1) (#x8d26b168b94fabcb #x290d79260e9df62d) (#xecb94358c0c9558e #xe20bb5b973290942) (#xf685def16fcb7333 #x8fb7ef85b557a436) (#x7c862ed617fefa15 #x736a0a865b0ee98e) (#x3fce0c72062cf189 #xb29ff6ceec2b2ab7) (#x7e5f18e40c5821d1 #xa7fd2f5f1b5654ad) (#xf379a98cb5178a1a #x8ef0567915cba280) (#x6d0c469c23d46198 #x76f2120c3ea7f7a5) (#x4973cc5e66a93ace #xc37b4d7334decf96) (#x1968b08258f7711b #xd3818c68a60aafa7) (#x62cbdf1b8e73a9e3 #x753b1acb1dc0fdbc) (#xa9593baafc32f09d #x9c84265904e4ce1e) (#xfb9b7144d9ca608c #x58e9c29bd668130c) (#x7341b751ba59326e #x70a302417869e397) (#x2fc97f21de55e666 #xddad1dc9a9ae8b6c) (#x419114960a74d058 #x1562d991f77d7e1a) (#x7a2e74803ad7549a #xcc10652e9be6edeb) (#x76bdc02c6085cb47 #x71e4bbbdd8f5e521) (#xe45b9b90ac14bf18 #x3412215bb08ab8ce) (#xa2efce49671a4dad #xf4a064efa7337d41) (#xdd3dcdb48711e01e #x39f7b83d9c49961c) (#xe682ada2b7b264dc #xe0850482f0d205ed) (#x14761f37eef662a4 #x04dfa176c535189d) (#x25f291dba92ed734 #xdf23acf22a5587c3) (#xbff612af096249fd #x4ccca2f681896ba0) (#xbe7b09b6e531c59f #x2666517ba1a5d450) (#x06a85a562d29ae8f #xbf7a6fa8c0e80465) (#x0725414fc17a22ed #xd5d09c25e0c4bb95) (#xcd3abee75f68f7f1 #x56c5533ad9cc37c7) (#x5bad893fa576f6e5 #x78de83ad3103d36e) (#x372cd4ba6af11b1f #x6486622c2f889b3b) (#x9e75ef1096c3eb82 #xf80244752b6c5525) (#x272ba7e9b2880cf0 #x0bb4892b6a0d3ae0) (#xa69ea22d519538e6 #x9f4d2e9e2783c407) (#xd1ae7918dd437fc3 #x840366aedf5a9ed6) (#x10077353d87917ef #x6f32eb074585a1db) (#x200ee6a673f22e1d #xde64150e8ac98175) (#x2c9d520a29a0b1c0 #x6390cb9dc9da89bf) (#x1e4df1cd998d53f6 #x0651104d46ce1432) (#x04716c64368f754b #x6bed4a7180b0b946) (#xfa166a5d3599ecee #x32433116f644acfc) (#x29612577f37c48e9 #x62d7726169468f09) (#x88dac615639352e2 #x284ac0daae01f09b) (#x81b505c4e31d3416 #x94f9a7b54d8efee7) (#xe02af7f49a9bca53 #x5fff6b2a303a0188) (#x0c93b4ac5a529fdd #xbdf4de93431308ca) (#x0000000000000000 #x0000000000000000) (#xea11190eede0fb01 #x5d71da11b3c10d27) (#x28ec3e6e1f2fc48b #x087d81ec496a30f9) (#xda188cfb466bc2f3 #xec2724187c8d2d89) (#xf1a09fbeaeb151de #x5a6773a055931fa3) (#xce6e93cca89da057 #xe8f8856eb9b83514) (#x546a10b808d13e9e #x7b178b6a1264d977) (#x573e3d93ff246938 #xc52a5d3e7210dba4) (#xe70fb6bb5be1e8be #x8a2ff70fd0feba1d) (#xc2fd2760f2cf3f8a #x550c5bfdfaab3dde) (#x2a35085c04891f4f #xdceaa43509328dda) (#x2d104913c5f33da2 #x093a3810e9f6364f) (#xfcbe300b18b04261 #x8d395ebe36aca899) (#x434822a411d20b9c #xc1f5fc48b725c339) (#x8a03f02778358926 #xfcdde503ee594db8) (#x16af2905f550b960 #xd04884af856da5be) (#xf2f4b29559440678 #xe45aa5f435e71d70) (#x22d7d0946854f5d9 #x0af330d7ca913c56) (#x797a59abcd22033c #x722db37afb92ef38) (#x8690448b226716fb #x41293b90ad4a4572) (#xffea1d20ef4515c7 #x330488ea56d8aa4a) (#x42c539bdfd8187fe #xab5f0fc597097cc9) (#x32d0a3c7b02de236 #x65c1dbd08f149d8d) (#x3a327b0fdcf008a0 #xb3d84f324cb72c01) (#x1d19dce66e780450 #xb86cc61926ba16e1) (#xe37edadf6d6e9df5 #xe1c2bd7e504e035b) (#x71988163a1ffe9aa #xa434279838315eb4) (#x697d2af8155b14d3 #x1d1f587dbe174ee3) (#x4fdb96084b809441 #x7c0122dbf436cbf3) (#x2183fdbf9fa1a27f #xb4cee683aae53e85) (#xfe670639031699a5 #x59ae7b6776f415ba) (#x82e128ef14e863b0 #x2ac471e12dfafc34) (#xf9424776c26cbb48 #x8c7ee7429630ae2f) (#xb365a6035330d620 #xf1387c65c29a636a) (#x096fc3d1808e66f4 #xbcb3676fe38f0e7c) (#xa1bbe36290ef1a0b #x4a9db2bbc7477f92) (#xc8c6c99a85b40ed8 #x5782eac679503171) (#x519667c5d20dc7b7 #x7a503296b2f8dfc1) (#x68f031e1f90898b1 #x77b5abf09e3bf113) (#x501b7cdc3e5e4bd5 #x10fac11b92d46031) (#xa447941f4a33e322 #x4bda0b4767db7924) (#xd706234ef06ad14c #x3b7909061fb29ab3) (#x844972b939c1cd3f #x95be1e49ed12f851) (#x6a2907d3e2ae4375 #xa3228e29de634c30) (#x0e4a829e41f44419 #x6963fb4a034bb5e9) (#x80381edd0f4eb874 #xfe5354386da24117) (#x45e078f23cfba513 #x7e8f93e077cdc75c) (#x47394ec0275d7ed7 #xaa18b63937957a7f) (#xa713b934bdc6b484 #xf5e7dd1307af7bf7) (#x0fc79987ada7c87b #x03c908c723670a19) (#xb2e8bd1abf635a42 #x9b928fe8e2b6dc9a) (#x52c24aee25f89011 #xc46de4c2d28cdd12) (#x9ff8f4097a9067e0 #x92a8b7f80b40ead5) (#x446d63ebd0a82971 #x1425606d57e178ac) (#xe1a7eced76c84631 #x355598a71016be78) (#xc5d8662f33b51d67 #x80dcc7d81a6f864b) (#x70159a7a4dac65c8 #xce9ed415181de144) (#x3d173a401d8a2a4d #x6608d317ac739794) (#x55e70ba1e482b2fc #x11bd78e732486687) (#x7fd203fde00badb3 #xcd57dcd23b7aeb5d) (#x8b8eeb3e94660544 #x9677168ece75f248) (#xe8c82f3cf64620c5 #x89e6ffc8f399b004) (#x969737d8fa1e0114 #x2e1bd097e8cfe4a9) (#x12de4561c3dfcc2b #xbba5cede05dd1cf8) (#xaff161fcd11b5e12 #x23fe49f1c40cca7b) (#xbb877ecb3fed3cb6 #x2721e8870139d2e6) (#xf02d84a742e2ddbc #x30cd802d75bfa053) (#x118a684a342a9b8d #x0598188a65a91e2b) (#x31848eec47d8b590 #xdbfc0d84ef609f5e) (#x7d0b35cffbad7677 #x19c0f90b7b22567e) (#x1fc0ead475dedf94 #x6cfbe3c066e2abc2) (#x4c8fbb23bc75c3e7 #xc23cf48f9442c920) (#xbca23f84fe971e5b #xf2f174a2e1fd6973) (#x38eb4d3dc756d364 #x674f6aeb0cef9122) (#x4baafa6c7d0fe10a #x17ec68aa748672b5) (#x9b89986d4c1f12ab #xf945fd898bf05393) (#xfd332b12f4e3ce03 #xe793ad3316801769) (#x8957dd0c8fc0de80 #x42e033578e2d4f6b) (#x7464f61e7b231083 #xa5739e6498ad5802) (#x03542d2bf7f557a6 #xbe3dd654607402d3) (#xb699d17e89ec2f09 #xf07fc599620665dc) (#x48fed7478afab6ac #xa9d1befe14f27066) (#xc1a90a4b053a682c #xeb318da99adf3f0d) (#xcb92e4b17241597e #xe9bf3c92192433a2) (#x3c9a2159f1d9a62f #x0ca2209a8c5f2864) (#x46b455d9cb0ef2b5 #xc0b245b417b9c58f) (#xaa0d16810bc7a73b #x22b9f00d6490cccd) (#x1a3c9da9af0226bd #x6dbc5a3cc67ead74) (#x2e44643832066a04 #xb707ee448982349c) (#x3e43176bea7f7deb #xd8350543cc079547) (#x235acb8d840779bb #x6059c35aeabd83a6)) ((#xe1133bc96d2d1a79 #x36b7807580805879) (#x50b11ffec6cb5891 #x33891a1d1a1ad691) (#xc2337988bcd20999 #x9c07dc3bdcdce999) (#xcf7e229397b68eb9 #x657a42a3424215b9) (#x73915dbf17344b71 #x9939465346466771) (#x7463dccb5471c7ea #x5efc4a804a4af1ea) (#xc6ab620f5279d9d7 #xeff6561556566cd7) (#x19f02cc5fb269195 #x85ce790e79792895) (#x379d359f01bd0555 #xd603bbd8bbbb6555) (#x9ee94b3c8b27e2da #x3a5e9b549b9b73da) (#x1d683742158d41db #xf63ff320f3f3addb) (#x14bd77ded04216b5 #x7cb3e796e7e7d4b5) (#x77094638f99f9b3f #xeac8cc7dcccce23f) (#xb41c49e19f17a654 #x1a62d3acd3d3bb54) (#xa85208f250c0d37d #x80f0e366e3e3a67d) (#x036a9af3adee5cd5 #xb43486fd868613d5) (#x863f11a8aa5b47bd #xd33d21b02121ebbd) (#x28b9ee7f63842ca9 #xf8a50def0d0d6ba9) (#xdae5231c9daeacfe #x756466df666671fe) (#x3e487503c472523b #x5c8faf6eafaf1c3b) (#xbf85e5df2d6c991d #x4877820d8282611d) (#x660a5c301d2c6936 #x8927622f62620336) (#x7808f181a54f7438 #xcb2c17f21717bd38) (#x0f01b7b95cd0ef07 #x21e4db8fdbdb5f07) (#x33052e18ef16d51b #xa5f231f63131e01b) (#x10256c593ee9c6fb #x0f426db86d6d51fb) (#xf01021c1899ee870 #x55582e272e2eb970) (#x25f4b56448e0ab89 #x01d8937793939789) (#x4dd928bcd346194a #xc5b6e93de9e97b4a) (#x27b859c63f54c3ae #xd941d660d6d634ae) (#xb2c8bec406081e3d #xb10a1c951c1c9d3d) (#x1c4e4113cfd77529 #x9a9230ca30301d29) (#x63b431e629dd8d8a #x967b2beb2b2b368a) (#x762f306923c5afcd #x86650f970f0f52cd) (#x991bca48c8626e41 #xfd9b97879797e541) (#x306fb4eb42f889ce #x11c6b70bb7b7f3ce) (#x6b47072b3648ee16 #x705afcb7fcfcff16) (#xcc14b8603a58d26c #xd14ec45ec4c4066c) (#x7a441d23d2fb1c1f #x13b552e552521e1f) (#x23204241d1ff13e0 #xaab05c4e5c5cb1e0) (#x0e27c1e8868adbf5 #x4d4918651818eff5) (#xde7d389b73057cb0 #x0695ecf1ececf4b0) (#xd7a87807b6ca2bde #x8c19f847f8f88dde) (#x46408482613d2603 #x97a3b89cb8b8a103) (#xc9aad5b60ea936d0 #xce128d9a8d8d33d0) (#x2af502dd1430448e #x203c48f84848c88e) (#x4b0ddf994a59a123 #x6ede260426265d23) (#x57439e8a858ed40a #xf44c16ce1616400a) (#x82a70a2f44f097f3 #xa0ccab9eabab6ef3) (#x8c80cbc7c27a4c06 #xed85b3fbb3b38106) (#x54290479286088df #x40789033909053df) (#x42d89f058f96f64d #xe45232b23232244d) (#x41b205f62278aa98 #x5066b44fb4b43798) (#xdc31d43904b11497 #xde0ca9e6a9a95797) (#x61f8dd445e69e5ad #x4ee26efc6e6e95ad) (#x2d0783a95775c815 #xe7f9442b44445e15) (#xfc7b0c8b78a05ba2 #xc08873557373f5a2) (#xed7816839c13a9ab #xa367dd07dddd14ab) (#x2e6d195afa9b94c0 #x53cdc2d6c2c24dc0) (#x52fdf35cb17f30b6 #xeb105f0a5f5f75b6) (#xbb1dfe58c3c74953 #x3b8608230808e453) (#x7b626b7208a128ed #x7f18910f9191aeed) (#xadec6524643137c1 #x9facaaa2aaaa93c1) (#xa0a13e3f4f55b0e1 #x66d1343a34346fe1) (#xd21615d1823bcf62 #x9345b183b1b1b862) (#x440c682016894e24 #x4f3afd8bfdfd0224) (#x32235849354ce1e9 #xc95ff21cf2f250e9) (#xdd17a268deeb2065 #xb2a16a0c6a6ae765) (#xf8e3170c960b8bec #xb379f97bf9f970ec) (#xa51f53e97ba4545d #x798d7dfe7d7d5a5d) (#x81cd90dce91ecb26 #x14f82d632d2d7d26) (#xc07f952acb6661be #x449e992c99994abe) (#x8ecc2765b5ce2421 #x351cf6ecf6f62221) (#xce5854c24decba4b #x09d781498181a54b) (#x8818d0402cd19c48 #x9e7439d539390448) (#x792e87d07f1540ca #xa781d418d4d40dca) (#xcbe63914791d5ef7 #x168bc88dc8c890f7) (#x2bd3748cce6a707c #x4c918b128b8b787c) (#x59645f6203040fff #xb9050eab0e0eafff) (#x0d4d5b1b2b648720 #xf97d9e989e9efc20) (#x4a2ba9c8900395d1 #x0273e5eee5e5edd1) (#xfe37e0290f143385 #x1811364236365685) (#x6fdf1cacd8e33e58 #x03ab769976767a58) (#x0b99ac3eb27b3f49 #x521551a15151da49) (#x93a41027a04365fa #xc32305cc05058ffa) (#x3bf618d5f083b687 #x43d3e6aae6e62987) (#x024ceca277b46827 #xd89945174545a327) (#xb1a22437abe642e8 #x053e9a689a9a8ee8) (#x8da6bd96182078f4 #x81287011707031f4) (#xaa1ee4502774bb5a #x5869a671a6a6055a) (#x9b5726eabfd60666 #x2502d290d2d24666) (#xc4e78ead25cdb1f0 #x376f13021313cff0) (#xfaaffbaee1bfe3cb #x6be0bc6cbcbcd3cb) (#x1e02adb1b8631d0e #x420b75dd7575be0e) (#xe6e1babd2e6896e2 #xf1728ca68c8ccee2) (#xf25ccd63fe2a8057 #x8dc16b306b6b1a57) (#x672c2a61c7765dc4 #xe58aa1c5a1a1b3c4) (#x07f2817443458c9b #xc7c50cd30c0c969b) (#x3d22eff0699c0eee #xe8bb299329290fee) (#xb084526671bc761a #x6993598259593e1a) (#xe58b204e8386ca37 #x45460a5b0a0add37) (#x134ff6aa93079a2e #xbb76eb45ebeb422e) (#x06d4f725991fb869 #xab68cf39cfcf2669) (#xe0354d98b7772e8b #x5a1a439f4343e88b) (#xa43925b8a1fe60af #x1520be14bebeeaaf) (#xebace1a6050c11c2 #x080f123e121232c2) (#x6d93f00eaf57567f #xdb32338e3333d97f) (#x5e96de1640418364 #x7ec0027802023964) (#xd05af973f58fa745 #x4bdcf494f4f41b45) (#xae86ffd7c9df6b14 #x2b982c5f2c2c8014) (#x9ca5a79efc938afd #xe2c7de43deded0fd) (#xe279a13ac0c346ac #x8283068806064bac) (#xb87764ab6e291586 #x8fb28ede8e8ef786) (#x7c90ea064be4a476 #xb8dd9ddc9d9d3876) (#x5cda32b437f5eb43 #xa659476f47479a43) (#xfd5d7adaa2fa6f50 #xac25b0bfb0b04550) (#x9fcf3d6d517dd628 #x56f358be5858c328) (#x6ef96afd02b90aaa #x6f06b573b5b5caaa) (#xe35fd76b1a99725e #xee2ec562c5c5fb5e) (#x91e8fc85d7f70ddd #x1bba40db40402cdd) (#x0abfda6f68210bbb #x3eb8924b92926abb) (#x5fb0a8479a1bb796 #x126dc192c1c18996) (#xcac04f45a3476a05 #x7a260b670b0b2005) (#x24d2c33592ba9f7b #x6d75509d5050277b) (#x4867456ae7b7fdf6 #xdaeaa0f9a0a04ef6) (#xd98fb9ef3040f02b #xc150e022e0e0622b) (#x11031a08e4b3f209 #x63efae52aeaee109) (#x216caee3a64b7bc7 #x72291959191912c7) (#x961a7df194b28146 #xdc7f4c084c4cba46) (#x58422933d95e3b0d #xd5a8cd41cdcd1f0d) (#xa187486e950f8413 #x0a7cf7d0f7f7df13) (#x94569153e306e961 #x04e6091f09091961) (#x83817c7e9eaaa301 #xcc6168746868de01) (#xbea3938ef736adef #x24da41e74141d1ef) (#x6cb5865f750d628d #xb79ff064f0f0698d) (#x8fea51346f9410d3 #x59b13506353592d3) (#x05be6dd634f1e4bc #x1f5c49c4494935bc) (#x4766f2d3bb6712f1 #xfb0e7b767b7b11f1) (#x2f4b6f0b20c1a032 #x3f60013c0101fd32) (#x269e2f97e50ef75c #xb5ec158a1515845c) (#xc5c1f8fcff978502 #x5bc2d0e8d0d07f02) (#x5dfc44e5edafdfb1 #xcaf4848584842ab1) (#x71ddb11d60802356 #x41a003440303c456) (#x7edc06a43c50cc51 #x6044d8cbd8d89b51) (#x3f6e03521e2866c9 #x30226c846c6cacc9) (#x452a1e71ccd37ad6 #x23973e613e3eb2d6) (#x04981b87eeabd04e #x73f18a2e8a8a854e) (#xbcef7f2c8082c5c8 #xfc4304f0040472c8) (#x39baf4778737dea0 #x9b4aa3bda3a38aa0) (#x690beb8941fc8631 #xa8c3b9a0b9b95c31) (#xc88ca3e7d4f30222 #xa2bf4e704e4e8322) (#xf37abb322470b4a5 #xe16ca8daa8a8aaa5) (#xe8c67b55a8e24d17 #xbc3b94c394942117) (#xacca1375be6b0333 #xf301694869692333) (#x9a7150bb658c3294 #x49af117a1111f694) (#xf7e2a0b5cadb64eb #x929d22f422222feb) (#x7db69c5791be9084 #xd4705e365e5e8884) (#x928266767a195108 #xaf8ec626c6c63f08) (#xc78d145e8823ed25 #x835b95ff9595dc25) (#xd5e494a5c17e43f9 #x5480bd50bdbd2ef9) (#xfb898dff3be5d739 #x074d7f867f7f6339) (#x17d7ed2d7dac4a60 #xc887616b6161c760) (#x1bbcc0678c92f9b2 #x5d573c193c3c8bb2) (#x80ebe68d3344ffd4 #x7855ee89eeeecdd4) (#x8a543ce25b65f46f #x46ed7cc27c7ca76f) (#x0000000000000000 #x0000000000000000) (#x4f95c41ea4f2716d #x1d2fac2aacacd86d) (#xba3b8809199d7da1 #x572bcbc9cbcb54a1) (#x220634100ba52712 #xc61d9fa49f9f0112) (#x5b28b3c074b067d8 #x619c4bbc4b4b0cd8) (#x7ffa70f5e60af8a3 #x0ce91b211b1b2ba3) (#x70fbc74cbada17a4 #x2d0dc0aec0c074a4) (#xb3eec895dc522acf #xdda7df7fdfdf2dcf) (#x8473fd0addef2f9a #x0ba464a76464489a) (#xf5ae4c17bd6f0ccc #x4a0467e367678ccc) (#x389c82265d6dea52 #xf7e7605760603a52) (#x3c0499a1b3c63a1c #x8416ea79eaeabf1c) (#x90ce8ad40dad392f #x7717833183839c2f) (#xee128c7031fdf57e #x17535bfa5b5b077e) (#x9570e702395cdd93 #x684bcaf5cacaa993) (#xdf5b4ecaa95f4842 #x6a382f1b2f2f4442) (#x983dbc1912385ab3 #x9136546d545455b3) (#x7545aa9a8e2bf318 #x3251896a89894118) (#x4cff5eed091c2db8 #xa91b2ad72a2acbb8) (#x1f24dbe0623929fc #x2ea6b637b6b60efc) (#x53db850d6b250444 #x87bd9ce09c9cc544) (#xafa0898613855fe6 #x4735efb5efef30e6) (#xef34fa21eba7c18c #x7bfe98109898b78c) (#xa2edd29d38e1d8c6 #xbe48712d7171ccc6) (#x519769af1c916c63 #x5f24d9f7d9d96663) (#x43fee95455ccc2bf #x88fff158f1f194bf) (#x01267651da5a34f2 #x6cadc3eac3c3b0f2) (#xd68e0e566c901f2c #xe0b43bad3b3b3d2c) (#x6446b0926a980111 #x51be27382727a011) (#xb650a543e8a3ce73 #xc2fb96bb96961873) (#x126980fb495daedc #xd7db28af2828f2dc) (#xd8a9cfbeea1ac4d9 #xadfd23c82323d2d9) (#x16f19b7ca7f67e92 #xa42aa281a2a27792) (#xf4883a466735383e #x26a9a409a4a43c3e) (#x0c6b2d4af13eb3d2 #x95d05d725d5d4cd2) (#xec5e60d246499d59 #xcfca1eed1e1ea459) (#x3ad06e842ad98275 #x2f7e254025259975) (#xf6c4d6e410815019 #xfe30e11ee1e19f19) (#x973c0ba04ee8b5b4 #xb0d28fe28f8f0ab4) (#xb776d31232f9fa81 #xae5655515555a881) (#x6a61717aec12dae4 #x1cf73f5d3f3f4fe4) (#xe9e00d0472b879e5 #xd0965729575791e5) (#x9d83d1cf26c9be0f #x8e6a1da91d1d600f) (#x159b018f0a182247 #x101e247c24246447) (#x08f336cd1f95639c #xe621d75cd7d7c99c) (#x5a0ec591aeea532a #x0d3188568888bc2a) (#xab389201fd2e8fa8 #x34c4659b6565b5a8) (#x299f982eb9de185b #x9408ce05cecedb5b) (#xa9747ea38a9ae78f #xec5d208c2020168f) (#x4941333b3dedc904 #xb64763136363fe04) (#xb53a3fb0454d92a6 #x76cf104610100ba6) (#x35d1d93d76096d72 #x0e9afecffefec672) (#x893ea611f68ba8ba #xf2d9fa3ffafab4ba) (#xea8a97f7df562530 #x64a2d1d4d1d18230) (#xc159e37b113c554c #x28335ac65a5afa4c) (#xf136579053c4dc82 #x39f5edcdeded0982) (#x409473a7f8229e6a #x3ccb77a57777876a) (#xa675c91ad64a0888 #xcdb9fb03fbfb4988) (#x3149c2ba98a2bd3c #x7d6b74e17474433c) (#x09d5409cc5cf576e #x8a8c14b61414796e) (#xd4c2e2f41b24770b #x382d7eba7e7e9e0b) (#xcd32ce31e002e69e #xbde307b40707b69e) (#x85558b5b07b51b68 #x6709a74da7a7f868) (#x18d65a94217ca567 #xe963bae4baba9867) (#xe4ad561f59dcfec5 #x29ebc9b1c9c96dc5) (#xb95112fab4732174 #xe31f4d344d4d4774) (#x1a9ab63656c8cd40 #x31fafff3ffff3b40) (#xdbc3554d47f4980c #x19c9a535a5a5c10c) (#x2c21f5f88d2ffce7 #x8b5487c18787eee7) (#x8b724ab3813fc09d #x2a40bf28bfbf179d) (#xd33063805861fb90 #xffe8726972720890) (#xa753bf4b0c103c7a #xa11438e93838f97a) (#xbdc9097d5ad8f13a #x90eec71ac7c7c23a) (#x204ad8b27c114f35 #x1e84dab3dadaa235) (#xa3cba4cce2bbec34 #xd2e5b2c7b2b27c34) (#x4eb3b24f7ea8459f #x71826fc06f6f689f) (#xd17c8f222fd593b7 #x2771377e3737abb7) (#x5665e8db5fd4e0f8 #x98e1d524d5d5f0f8) (#x871967f97001734f #xbf90e25ae2e25b4f) (#xc3150fd966883d6b #xf0aa1fd11f1f596b) (#x72b72beecd6e7f83 #xf59485b98585d783) (#x60deab158433d15f #x224fad16adad255f) (#x36bb43cedbe731a7 #xbaae78327878d5a7) (#xf9c5615d4c51bf1e #xdfd43a913a3ac01e) (#xe7c7ccecf432a210 #x9ddf4f4c4f4f7e10) (#x682d9dd89ba6b2c3 #xc46e7a4a7a7aecc3) (#x629247b7f387b978 #xfad6e801e8e88678) (#x550f7228f23abc2d #x2cd553d95353e32d) (#xff119678d54e0777 #x74bcf5a8f5f5e677) (#x6560c6c3b0c235e3 #x3d13e4d2e4e410e3) (#x34f7af6cac535980 #x62373d253d3d7680)) ((#xfb5673f66e45af0a #xb5642c66c8d51c47) (#x08d95b24e56852ca #x0a2f6bac5ee01eeb) (#xcbc56a2e75f680f3 #x89869508cfd05878) (#x41b5ae0670cb4e17 #xc067ebddce108371) (#x384a42fcfedb7d33 #x36cdd2c259e55ad4) (#xb388b531afeb285f #xeff099e32339f2f8) (#x1f307492839bb1a3 #x682036be40b7b805) (#x88d7a221ad273b37 #xaa9a14fef7f83d43) (#x32347fd1b3a9da2a #xdf99d345f13da275) (#x7cc0130d492981c9 #x6380d8bdc399a514) (#x5c22bc9d5b4a0a67 #x4b3cb748789fdd3e) (#x02a76609a81af5d3 #xe37b6a2bf638e64a) (#xecbf5c4008b64c63 #xd76b7174d682baa9) (#x12d6d041a1ca5184 #xf725bcb04a3bda5f) (#x7b588af3260ac6f7 #x15d1533461cd3fef) (#x5f37e971a75d643c #x389be897f5bb4851) (#xc1bb5703388427ea #x60d2948f6708a0d9) (#x048dcc1293342965 #x05f6d4562f700f94) (#x76be2e20045b26d0 #x8ad4d93a6b415db5) (#x6cb1a54540f9259e #x77de0e267f9a9901) (#x26c8058b294d5718 #xce31d188624e91f4) (#x0f41c2da8a4b15f4 #x7c7ee025fcb48410) (#x0c549736765c7baf #x0fd9bffa7190117f) (#xe0ebcb767eea37cc #xd8b2ce8ea712abd6) (#xe6c1616d45c4eb7a #x3e3f70f37e5a4208) (#xd65278b55e77c483 #x02ddc99d795f0637) (#x18a8ed6cecb8f69d #x1e71bd37e2e322fe) (#x8efd083a9609e781 #x4c17aa832eb0d49d) (#x54fbe7b9be2258ad #x4113dce4267fc3d5) (#xe4660764edde1ea9 #xdd441ad88862a442) (#xacb8c1a32c7099fc #x87d0af5d638e4afd) (#x698e5ab287c09773 #xe2f4ef842bf6e5b0) (#xee183a49a0acb9b0 #x34101b5f20ba5ce3) (#xd913ba6fd43cd177 #x7ea329b885eb8227) (#xf702e4c01819d4a5 #xbabd939cb9450d38) (#xb9f6881ce2998f46 #x06a498648be10a59) (#x853106f28f76db10 #x359f9ef0fd745f19) (#x1e824777d7962a2b #xf8fc034a3babcb20) (#x66cf98680d8b8287 #x9e8a0fa1d74261a0) (#x309319d81bb32ff9 #x3ce2b96e0705443f) (#xd5472d59a260aad8 #x717a9642f47b9358) (#xa24b309cf2361780 #x6b727a8ce426bdc8) (#xfcceea080166e834 #xc335a7ef6a8186bc) (#x60e5327336a55e31 #x7807b1dc0e0a887e) (#xffdbbfe4fd71866f #xb092f830e7a513d3) (#x6e16c34ce8e3d04d #x94a5640d89a27f4b) (#xea95f65b339890d5 #x31e6cf090fca5377) (#x831bace9b45807a6 #xd312208d243cb6c7) (#x154e49bfcee916ba #x81743739e86f40a4) (#xc00964e66c89bc62 #xf00ea17b1c14d3fc) (#xdc2c45981305639a #xeb89c81ad187fe96) (#xb4102ccfc0c86f61 #x99a1126a816d6803) (#xeb27c5be67950b5d #xa13afafd74d62052) (#xc8d03fc289e1eea8 #xfa21cad742f4cd17) (#x84833517db7b4098 #xa543ab0486682c3c) (#xe5d43481b9d38521 #x4d982f2cf37ed767) (#xa774cf6b350fa56d #xfe589b2eb04ac179) (#x448a51f1b7f2fcfa #x554d0a7f9a7cffc0) (#xbae3ddf01e8ee11d #x7503c7bb06c59f36) (#x6242547a9ebfabe2 #x9b7cdbf7f8326e34) (#xf23d1b37df206648 #x2f97723eed297189) (#x53637e47d1011f93 #x3742576d842b592e) (#x9a0172600ced6ab3 #x5dbfa84ebdc3e71c) (#x1071b64809d0a457 #x145ed69bbc033c15) (#x1d97129b2b814470 #x8b5b5c95b68f5e4f) (#x0a7e3d2d4d72a719 #xe9540187a8d8f8a1) (#xd36d8742994e766e #x97f7283f2d337a86) (#xfd7cd9ed556b73bc #x53e9921b119df599) (#x7381d1d7c362943d #x1ffe38983f2d2104) (#xf1284edb23370813 #x5c302de1600de4e6) (#x4a79a0ce69b47286 #xb9efdfae1dd408f5) (#xa15e65700e2179db #x18d52553690228a7) (#xaa926bb8175e454a #x615d1120bac6a323) (#x74194829ac41d303 #x69afb3119d79bbff) (#x14fc7a5a9ae48d32 #x11a802cd93733381) (#x39f87119aad6e6bb #xa611e73622f929f1) (#x9540b0ba86a67f47 #x21c1486b4177630c) (#x5bba256334694d59 #x3d6d3cc1dacb47c5) (#x565c81b01638ad7e #xa268b6cfd047259f) (#x8a70c428053dcee4 #x49e17ed501c0db09) (#xdf391074ef120dc1 #x982e97c55ca36bf9) (#xcdefc0354ed85c45 #x6f0b2b751698b1a6) (#x51c4184e791bea40 #xd4393d467213bf64) (#x341ed5ca8887069c #x39146d3828754bab) (#xf6b0d7254c144f2d #x2a61a668c2597e1d) (#x8de85dd66a1e89da #x3fb0f55ca39441f2) (#x6a9b0f5e7bd7f928 #x9153b05ba6d270df) (#xf38f28d28b2dfdc0 #xbf4b47ca963502ac) (#xf5a582c9b0032176 #x59c6f9b74f7deb72) (#x11c385ad5ddd3fdf #x8482e36fc71f4f30) (#x9d99eb9e63ce2d8d #x2bee23c71f977de7) (#x75ab7bccf84c488b #xf97386e5e665c8da) (#x191ade89b8b56d15 #x8ead88c399ff51db) (#x031555ecfc176e5b #x73a75fdf8d24956f) (#x7094843b3f75fa66 #x6c596747b209b46b) (#x7233e232976f0fb5 #x8f220d6c44315221) (#x3aed24f556c188e0 #xd5b6b8e9afddbc9e) (#x8bc2f7cd5130556c #xd93d4b217adca82c) (#x33864c34e7a441a2 #x4f45e6b18a21d150) (#xc623cefd57a760d4 #x16831f06c55c3a22) (#x2fa36d4a98289e5a #x54c28fd047b2fc3a) (#x896591c4f92aa0bf #x3a46210a8ce44e66) (#xbe6e11e28dbac878 #x70f513ed29b590a2) (#xcefa95d9b2cf321e #x1cac74aa9bbc24c9) (#xc484a8f4ffbd9507 #xf5f8752d3364dc68) (#xfae440133a483482 #x25b81992b3c96f62) (#x3b5f171002cc1368 #x456a8d1dd4c1cfbb) (#xdd9e767d4708f812 #x7b55fdeeaa9b8db3) (#x770c1dc55056bd58 #x1a08ecce105d2e90) (#xc5369b11abb00e8f #x652440d94878af4d) (#x165b1c5332fe78e1 #xf2d368e6654bd5cb) (#xa4619a87c918cb36 #x8dffc4f13d6e5416) (#xad0af246787d0274 #x170c9aa9189239d8) (#xd8a1898a80314aff #xee7f1c4cfef7f102) (#xb70579233cdf013a #xea064db50c49fd6c) (#x92d82944e9853879 #x5790c3e2e323f9f7) (#x496cf52295a31cdd #xca48807190f09d9a) (#x6468fe61a5917754 #x7df1658a217a87ea) (#x91cd7ca815925622 #x24379c3d6e076c98) (#x9c2bd87b37c3b605 #xbb321633648b0ec2) (#x01b233e5540d9b88 #x90dc35f47b1c7325) (#xe83290529b826506 #xd29da522f9f2b53d) (#xa0ec56955a2ce253 #x880910a7121e5b82) (#xbb51ee154a837a95 #xe5dff24f7dd9ec13) (#xb5a21f2a94c5f4e9 #x097d279efa711b26) (#x2989c751a30642ec #xb24f31ad9efa15e4) (#xe3fe9e9a82fd5997 #xab1591512a363eb9) (#x5a0816866064d6d1 #xadb10935a1d734e0) (#x17e92fb666f3e369 #x620f5d121e57a6ee) (#x63f0679fcab2306a #x0ba0ee03832e1d11) (#x25dd5067d55a3943 #xbd968e57ef6a049b) (#x7d7220e81d241a41 #xf35ced49b885d631) (#x20e2af9012638bae #x28bc6ff5bb06782a) (#x1364e3a4f5c7ca0c #x67f989443127a97a) (#x0ef3f13fde468e7c #xeca2d5d187a8f735) (#x9f3e8d97cbd4d85e #xc89549ece9af9bad) (#xe159f8932ae7ac44 #x486efb7adc0ed8f3) (#x5549d45cea2fc325 #xd1cfe9105d63b0f0) (#x8f4f3bdfc2047c09 #xdccb9f7755aca7b8) (#xd1cae14b315483bd #x748c4214db0b9ccc) (#x40079de324c6d59f #x50bbde29b50cf054) (#x82a99f0ce0559c2e #x43ce15795f20c5e2) (#x52d14da2850c841b #xa79e6299ff372a0b) (#xb23a86d4fbe6b3d7 #x7f2cac17582581dd) (#x591d436a9c73b88a #xde1656ea2cf3a18f) (#x3fd2db0291f83a0d #x409c594bfbb1c02f) (#xd4f51ebcf66d3150 #xe1a6a3b68f67e07d) (#x79ffecfa8e103324 #xf6aa391f97f5d9a5) (#xe773528811c970f2 #xaee345070546312d) (#xefaa09acf4a12238 #xa4cc2eab5ba62fc6) (#xca7759cb21fb1b7b #x195aa0fcb4cc2b5d) (#x479f041d4be592a1 #x26ea55a017586aaf) (#xa5d3a9629d1550be #x1d23f10546722733) (#xafad944fd067f7a7 #xf477f082eeaadf92) (#xa8350db1bf44b099 #x82267b0b4cfe4569) (#x936a1aa1bd88a3f1 #xc74cf616983f8ad2) (#xed0d6fa55cbbd7eb #x47b74480ad9ec98c) (#xc31c310a909ed239 #x83a9fea491304693) (#x2a9c92bd5f112cb7 #xc1e86e7213de808b) (#x9655e5567ab1111c #x526617b4cc53f663) (#x2cb638a6643ff001 #x2765d00fca966955) (#x5d908f780f4791ef #xdbe082bc0383ae1b) (#xe24cad7fd6f0c21f #x3bc9a4a5512a4d9c) (#x7fd546e1b53eef92 #x102787624ebd307b) (#x7e677504e133741a #x80fbb29635a1435e) (#x0000000000000000 #x0000000000000000) (#x3e60e8e7c5f5a185 #xd0406cbf80adb30a) (#xc791fd1803aafb5c #x865f2af2be404907) (#x053ffff7c739b2ed #x952ae1a2546c7cb1) (#x3cc78eee6def5456 #x333b069476955540) (#x879660fb276c2ec3 #xd6e4f4db0b4cb953) (#x677dab8d5986190f #x0e563a55ac5e1285) (#x9914278cf0fa04e8 #x2e18f79130e77273) (#xab20585d4353dec2 #xf18124d4c1dad006) (#xf9f115ffc65f5ad9 #x561f464d3eedfa0d) (#xd2dfb4a7cd43ede6 #x072b1dcb562f09a3) (#x062aaa1b3b2edcb6 #xe68dbe7dd948e9de) (#xa9873e54eb492b11 #x12fa4eff37e2364c) (#x1bbdb88010af98c6 #x6dd6e2e86fc7b791) (#x48dec6c7c1ae8755 #x5a94b585ebeceebf) (#x97e7d6b32ebc8a94 #xc2ba2240b74f8546) (#xc2ae02efc49349b1 #x1375cb50ea2c35b6) (#x8624531e7361b54b #x4638c12f7050ca76) (#x6157019662a8c5b9 #xe8db84287516fb5b) (#x36b9b3c3209df34f #xda6f0713de4dade1) (#x57eeb255423536f6 #x32b4833bab5b56ba) (#xf09a7d3e773a939b #xccec18151b1197c3) (#x2e115eafcc2505d2 #xc41eba243cae8f1f) (#x7aeab91672075d7f #x850d66c01ad14cca) (#x3d75bd0b39e2cfde #xa3e733600d892665) (#x81bccae01c42f275 #x30694aa6d204508d) (#x35ace62fdc8a9d14 #xa9c858cc5369388e) (#xc9620c27ddec7520 #x6afdff2339e8be32) (#x65dacd84f19cecdc #xed2d507e5a66f4cf) (#x784ddf1fda1da8ac #x66760cebece9aa80) (#xbcc977eb25a03dab #x938e79c6df8d76e8) (#x1c25217e7f8cdff8 #x1b876961cd932d6a) (#x683c6957d3cd0cfb #x7228da7050ea9695) (#xcc5df3d01ad5c7cd #xffd71e816d84c283) (#xbfdc2207d9b753f0 #xe029261952a9e387) (#x7126b7de6b7861ee #xfc8552b3c915c74e) (#xb844bbf9b69414ce #x9678ad90f0fd797c) (#xa6c6fc8e61023ee5 #x6e84aedacb56b25c) (#x2245c999ba797e7d #xcbc705de4d3e9e60) (#x4de13930069735b8 #xcfbe5427bf80920e) (#xb09de0dd53fc4604 #x9c57c63cae1d6797) (#x907f4f4d419fcdaa #xb4eba9c9151b1fbd) (#x23f7fa7cee74e5f5 #x5b1b302a3622ed45) (#x370b8026749068c7 #x4ab332e7a551dec4) (#x6b293cbb2fda62a0 #x018f85afddce03fa) (#x096b68c1b165c942 #x9af35e5825fc6dce) (#x246f63828157a2cb #x2d4abba3947677be) (#x31212a3d4fbeb471 #xac3e8c9a7c19371a) (#x4ef46cdcfa805be3 #xbc190bf832a40761) (#x800ef905484f69fd #xa0b57f52a91823a8) (#x277a366e7d40cc90 #x5eede47c1952e2d1) (#x58af708fc87e2302 #x4eca631e57efd2aa) (#x21509c75466e1026 #xb8605a01c01a0b0f) (#xcf48a63ce6c2a996 #x8c70415ee0a057ec) (#x94f2835fd2abe4cf #xb11d7d9f3a6b1029) (#x2d040b4330326b89 #xb7b9e5fbb18a1a70) (#xde8b2391bb1f9649 #x08f2a23127bf18dc) (#xae1fa7aa846a6c2f #x64abc57695b6acb7) (#x8c5a6e333e131252 #xaf6cc0a8d88832d7) (#x5e85da94f350ffb4 #xa847dd638ea73b74) (#xa3f90379a63b8c08 #xfbae4f789f3aceed) (#x2b2ea1580b1cb73f #x51345b8668c2f3ae) (#x9e8cbe729fd943d6 #x58497c1892b3e888) (#xbd7b440e71ada623 #x03524c32a49105cd) (#x1a0f8b6544a2034e #xfd0ad71c14dbc4b4) (#x98a61469a4f79f60 #xbec4c2654bfb0156) (#xd7e04b500a7a5f0b #x9201fc6902437512) (#x4312c80fd8d1bbc4 #x231c81f63828653b) (#xd078d2ae65591835 #xe45077e0a017efe9) (#x4bcb932b3db9e90e #x2933ea5a66c87bd0) (#x283bf4b4f70bd964 #x22930459e5e666c1) (#x9bb3418558e0f13b #xcd639dbac6df9439) (#x4c530ad5529aae30 #x5f6261d3c49ce12b) (#x6fa4f0a9bcee4bc5 #x047951f9f2be0c6e) (#x4f465f39ae8dc06b #x2cc53e0c49b87444) (#x0bcc0ec8197f3c91 #x79883473d3c48b84) (#x42a0fbea8cdc204c #xb3c0b4024334161e) (#xb6b74ac668d29ab2 #x7ada784177558e49) (#xf417b12ce40ebafe #xc91acc4334619857) (#xfe698c01a97c1de7 #x204ecdc49cb960f6) (#x0de6a4d32251e027 #x9f058a0e0a8c625a) (#xb12fd33807f1dd8c #x0c8bf3c8d50114b2) (#x079899fe6f23473e #x76518b89a2549afb) (#x462d37f81fe80929 #xb63660546c44198a) (#x45386214e3ff6772 #xc5913f8be1608ce5) (#xda06ef83282bbf2c #x0d04766708cf1748) (#xdbb4dc667c2624a4 #x9dd8439373d3646d) (#xe980a3b7cf8ffe8e #x424190d682eec618) (#xf843261a9252c151 #xc6c373b945f18928) (#x50762bab2d1671c8 #x44e508b2090fcc41) (#x6d0396a014f4be16 #xe7023bd20486ea24)) ((#x199680c07a0cd5fb #xfcb5aec91b938711) (#x7bce1a17b28ce008 #xee0af2fef8abfc32) (#xc077dcb250a2d0cb #xdd89c7884eefcabd) (#x69d642635e1a1041 #x11c01393d33c12c4) (#xa22f46659822e538 #xcf369bbfadd7b19e) (#x3ce74a6f116a39b3 #x6eefc0cb2f299770) (#x084d567d06c2b71f #x3168fe0f96fd7835) (#xc77379a4c39bf888 #x16aa09c5a389e794) (#xb733bb07e78d3d32 #xfbdfb49f6b267241) (#x20f79b37188e997c #xc4637e3c1d7223d4) (#x0f49f36b95fb9f5c #xfa4b30427b9b551c) (#x6ed2e775cd233802 #xdae3ddde3e5a3fed) (#x6a15ccaace4282ec #x23d7a23875c50316) (#x988dd35b6af83b12 #xc5f7fae10dcf0489) (#xa52be3730b1bcd7b #x041555f240b19cb7) (#x56f286c5df28bb5f #x4d3862f35aec9466) (#xd56b21d02f0d08c1 #xe960e8a8881e0962) (#xdc670dea59467004 #x7705797f7cb47e19) (#x35eb665567214176 #xf08a511cdb83e00b) (#xd6a8af19bf559a6c #xdb7759032ee718b0) (#x9d0b82c319104e26 #x93ceeadf2407373c) (#xfe126253a119b40f #x2e7cd930a5684351) (#xa7a917fdebca900c #x990f8b81841f822b) (#xcdbcdb57258812e0 #xbad829b9f1da813d) (#x7f0931c8b1ed5ae6 #x173e8d18b334c0c9) (#xa6e86dba9b435fd6 #x3602e459e6488d65) (#x8d912e391557e318 #xf11ed5c1cb3ec756) (#x75c6933b57feb08e #xbb4cad64e167a660) (#x7487e97c27777f54 #x1441c2bc8330a92e) (#x11dbd6bd7cce62e4 #xcddd50c68d6eff24) (#x34aa1c1217a88eac #x5f873ec4b9d4ef45) (#x3da6302861e3f669 #xc1e2af134d7e983e) (#x04c72bdf0361baee #xf9347fe64b9f3cfb) (#x58fa0fe93a5aebd9 #x187e3d694320ce34) (#xbe3f973d91c645f7 #x65ba25489f8c053a) (#x29fbb70d6ec5e1b9 #x5a06efebe9d854af) (#x57b3fc82afa17485 #xe2350d2b38bb9b28) (#x3f24c4a68132ab1e #x5cf8716089d086a2) (#xc3b4527bc0fa4266 #xef9e7623e816db6f) (#xd9e15c722aae0530 #x213c6941557c4dac) (#xff531814d1907bd5 #x8171b6e8c73f4c1f) (#xfdd1ec9a314126a2 #x1c6b689b03915283) (#x9c4af884699981fc #x3cc3850746503872) (#x7101b8e4549f0a60 #x4278d282aaf89a9b) (#xc5f18d2a234aa5ff #x8bb0d7b66727f908) (#xb87a486c7276a26e #x019484dd10bd275d) (#xd8a026355a27caea #x8e310699372b42e2) (#xe506161d3bc43c83 #x4fd3a98a7a55dadc) (#x1d51ab1f796d6f15 #x0581d12f500cbbea) (#xe202b30ba8fd14c0 #x84f067c79733f7f5) (#xb3f490d8e4ec87dc #x02ebcb7920b94eba) (#xb93b322b02ff6db4 #xae99eb0572ea2813) (#xefc9b4eeddd7d6eb #xe3a189f62806bc75) (#x99cca91c1a71f4c8 #x6afa95396f980bc7) (#x60da6e5928516884 #x8fa58244279665bf) (#x26b24466fb3e7ee5 #xa04ddfa9924301b3) (#x16df73abeff74aa7 #x06fe9e8b6008d20d) (#x82d8dd5280ac7c44 #x0b55e583b0a5924a) (#x7040c2a32416c5ba #xed75bd5ac8af95d5) (#x1fd35f9199bc3262 #x989b0f5c94a2a576) (#x5531080c4f7029f2 #x7f2fd358fc1585b4) (#xf15b913834e22b53 #xd437e972def3164d) (#x5ffeaaffa963c39a #xd35df324ae46e31d) (#xf65f342ea7db0310 #x1f14273f33953b64) (#x669fb108cbe18f1d #xeb8b23d1a8a747d8) (#x151cfd627fafd80a #x34e92f20c6f1c3df) (#x4de6f28b45f533d3 #x2c97124985d10deb) (#xab236a5fee699dfd #x51530a68597dc6e5) (#xdee5f964b9972d73 #xea1fa70cb81a6085) (#x0c8a7da205a30df1 #xc85c81e9dd6244ce) (#x4ba32ddaa645d44a #x48b9b3dc0ae02f8c) (#xa46a99347b9202a1 #xab183a2a22e693f9) (#x861ff68d83cdc6aa #xf2619a65fb3aaeb1) (#x5b398120aa027974 #x2a698cc2e5d9dfe6) (#x2a3839c4fe9d7314 #x68115e404f21457d) (#x9546d4be1fd2f939 #xa2a614d0b2fa4f09) (#xa1ecc8ac087a7795 #xfd212a140b2ea04c) (#x8a958b2f866ecb5b #x3a3d1b8c2658ea7f) (#x1a550e09ea544756 #xcea21f62bd6a96c3) (#xa9a19ed10eb8c08a #xcc49d41b9dd3d879) (#xea4fe576ae3fa3df #xb59899c801ce8fc0) (#x72c2362dc4c798cd #x706f63290c018b49) (#x9f89764df9c11351 #x0ed434ace0a929a0) (#x0586519873e87534 #x5639103e29c833b5) (#x895605e6163659f6 #x082aaa2780a1fbad) (#x2c7de6951d2d948d #x0c3fffd5c010671a) (#x641d45862b30d26a #x7691fda26c095944) (#x62589ad7c88035f3 #x12bf5c37e3387b23) (#xd0ed70485ce57df5 #xbf59f896a1d63ad7) (#xc136a6f5202b1f11 #x7284a8502cb8c5f3) (#xda22d2bbbaf6979d #x132bd8eaf3855c7e) (#x6c5013fb2df26575 #x47f903adfaf42171) (#xbaf8bce292a7ff19 #x9c8e5aaed41339c1) (#x59bb75ae4ad32403 #xb77352b12177c17a) (#x875e8ccaf3440970 #x5d6cf5bd996da1ff) (#xe98c6bbf3e673172 #x878f2863a7379e12) (#xccfda1105501dd3a #x15d54661938d8e73) (#x9ec80c0a8948dc8b #xa1d95b7482fe26ee) (#x805a29dc607d2133 #x964f3bf0740b8cd6) (#x50b759943c985cc6 #x2916c366d5ddb601) (#xd1ac0a0f2c6cb22f #x1054974ec3813599) (#xf01aeb7f446be489 #x7b3a86aabca41903) (#xac27cf497d50b5be #x9a70c425b41bebcc) (#x2b7943838e14bcce #xc71c31982d764a33) (#x3e65bee1f1bb64c4 #xf3f51eb8eb8789ec) (#x2eff121bfdfcc9fa #x912521a604be7986) (#xfb9433cbd2f1c13b #x7845c90e8ca070e4) (#x849d0203631c9bdd #x6f7b44163f94b02d) (#x0282f48ee0d15d77 #x9d1ade73c4ae1e9c) (#x090c2c3a764b78c5 #x9e6591d7f4aa777b) (#x44eadeb133be4b16 #xb2f2839e717b7a90) (#x4f640605a5246ea4 #xb18dcc3a417f1377) (#x03c38ec9905892ad #x3217b1aba6f911d2) (#x6f939d32bdaaf7d8 #x75eeb2065c0d30a3) (#xe0804785482c49b7 #x19eab9b4539de969) (#x2430b0e81bef2392 #x3d5701da56ed1f2f) (#x12185874ec96f049 #xffcae16d2b97eef6) (#xad66b50e0dd97a64 #x357dabfdd64ce482) (#x7d8bc546513c0791 #x8a24536b779ade55) (#xed4b40603d068b9c #x7ebb5785eca8a2e9) (#x376992db87f01c01 #x6d908f6f1f2dfe97) (#xb672c1409704f2e8 #x54d2db4709717d0f) (#x93030beffc621ea0 #xc688b5453dcb6d6e) (#x47295078a3e6d9bb #x80e53235d7826b42) (#x8e52a0f0850f71b5 #xc309646a6dc7d684) (#x6319e090b809fa29 #xbdb233ef816f746d) (#x9407aef96f5b36e3 #x0dab7b08d0ad4047) (#xbdfc19f4019ed75a #x57ad94e3397514e8) (#x73834c6ab44e5717 #xdf620cf16e568407) (#x28bacd4a1e4c2e63 #xf50b80338b8f5be1) (#xc4b0f76d53c36a25 #x24bdb86e0570f646) (#x179e09ec9f7e857d #xa9f3f153025fdd43) (#x2fbe685c8d750620 #x3e284e7e66e976c8) (#xafe44180ed082713 #xa867758e12e2fa1e) (#xc97bf08826e9a80e #x43ec565fba45bdc6) (#xb4f035ce77d5af9f #xc9c80534cddf6393) (#xfad5498ca2780ee1 #xd748a6d6eef77faa) (#x43ee7ba7a0876355 #x79d14dd39c1d57b9) (#x42af01e0d00eac8f #xd6dc220bfe4a58f7) (#x233415fe88d60bd1 #xf674cf97bb8b3206) (#x5ebfd0b8d9ea0c40 #x7c509cfccc11ec53) (#xd26f84c6bc342082 #x224326e56578244b) (#xc63203e3b3123752 #xb9a7661dc1dee8da) (#x0b8ed8b4969a25b2 #x037f4fa4300469e7) (#xe4476c5a4b4df359 #xe0dec6521802d592) (#x27f33e218bb7b13f #x0f40b071f0140efd) (#xc83a8acf566067d4 #xece13987d812b288) (#xcbf90406c638f579 #xdef6882c7eeba35a) (#x4860a313361d46e7 #x7aae0277ac193e5e) (#x33aeb9048491a6ef #x94a4f08954b2c26c) (#xf71e4e69d752ccca #xb01948e751c2342a) (#xdb63a8fcca7f5847 #xbc26b73291d25330) (#x780d94de22d472a5 #xdc1d43555e52ede0) (#x6d1169bc5d7baaaf #xe8f46c7598a32e3f) (#xe8cd11f84eeefea8 #x288247bbc560915c) (#x135922339c1f3f93 #x50c78eb549c0e1b8) (#x5d7c5e7149b29eed #x4e472d576ae8fd81) (#xbbb9c6a5e22e30c3 #x33833576b644368f) (#x3aa2953ef2dade2a #x0ac1615ea018b517) (#xf857bd0242a95396 #x4a5278a52a596136) (#x88177fa166bf962c #xa727c5ffe2f6f4e3) (#x382061b0120b835d #x97dbbf2d64b6ab8b) (#xa36e3c22e8ab2ae2 #x603bf467cf80bed0) (#x794cee99525dbd7f #x73102c8d3c05e2ae) (#x4e257c42d5ada17e #x1e80a3e223281c39) (#x0000000000000000 #x0000000000000000) (#x109aacfa0c47ad3e #x62d03f1eef39f06a) (#x67decb4fbb6840c7 #x44864c09caf04896) (#xeb0e9f31deb66c05 #x1a95f6106399808e) (#x7e484b8fc164953c #xb833e2c0d163cf87) (#x39611bf762824c87 #x38d6d0f506e1a4c5) (#xf4ddc0a0470a5e67 #x820ef94cf73b25f8) (#x0645df51e3b0e799 #x642ea1958f312267) (#xb1766456043ddaab #x9ff1150ae4175026) (#x774467b5b72fedf9 #x2656731725c9b8fc) (#x7a8f6050c2052fd2 #x41079d269afcf37c) (#xb2b5ea9f94654806 #xade6a4a142ee41f4) (#xdfa48323c91ee2a9 #x4512c8d4da4d6fcb) (#xd42a5b975f84c71b #x466d8770ea49062c) (#x2571caaf6b66ec48 #x925a6e0234ba1061) (#xcf3e2fd9c5594f97 #x27c2f7ca35749fa1) (#x8cd0547e65de2cc2 #x5e13ba19a969c818) (#x0e08892ce5725086 #x55465f9a19cc5a52) (#x46682a3fd36f1661 #x2fe85dedb5d5640c) (#x6b54b6edbecb4d36 #x8cdacde017920c58) (#x2d3c9cd26da45b57 #xa332900da2476854) (#x3be3ef79825311f0 #xa5cc0e86c24fba59) (#xe6c598d4ab9cae2e #x7dc41821dcaccb0e) (#x924271a88cebd17a #x6985da9d5f9c6220) (#x4921d9544694893d #xd5a36dafce4e3110) (#x8bd4f168f6e70481 #x95307454440fe531) (#x32efc343f4186935 #x3ba99f5136e5cd22) (#xaea53bc79d81e8c9 #x076a1a5670b5f550) (#x9a0f27d58a296665 #x58ed2492c9611a15) (#xfc9096dd41c8e978 #xb366074361c65dcd) (#xc2f5283cb0738dbc #x409319fb8a41d421) (#x51f623d34c11931c #x861bacbeb78ab94f) (#x0acfa2f3e613ea68 #xac72207c525366a9) (#x45aba4f6433784cc #x1dffec46132c75de) (#x9b4e5d92faa0a9bf #xf7e04b4aab36155b) (#xb0371e1174b41571 #x30fc7ad286405f68) (#x1e9225d6e935fdb8 #x37966084f6f5aa38) (#x21b6e170680756a6 #x6b6e11e47f252c9a) (#x416c8f2940563e22 #xe4cb93a058b34925) (#xce7f559eb5d0804d #x88cf9812572390ef) (#x655c3fc15bb91db0 #xd99c927a0e5e560a) (#x4ae2579dd6cc1b90 #xe7b4dc0468b720c2) (#x76051df2c7a62223 #x895b1ccf479eb7b2) (#x5c3d2436393b5137 #xe14a428f08bff2cf) (#x5374d75dacc0ce6b #x1b0172cd7324a7d3) (#x4ca788cc357cfc09 #x839a7d91e78602a5) (#xf3d965b6d4337624 #x492d37011a5d08d1) (#xee88cea9ad5e1931 #x4cace62e4a51b33b) (#x97c42030ff03a44e #x3fbccaa376545195) (#xbcbd63b371171880 #xf8a0fb3b5b221ba6) (#xaa6210189ee05227 #xfe5e65b03b2ac9ab) (#xd32efe81ccbdef58 #x8d4e493d072f2b05) (#x18d7fa870a851a21 #x53b8c11179c4885f) (#x1c10d15809e4a0cf #xaa8cbef7325bb4a4) (#x96855a778f8a6b94 #x90b1a57b14035edb) (#xbf7eed7ae14f8a2d #xcab74a90fddb0a74) (#xdd2677ad29cfbfde #xd80816a71ee37157) (#x5a78fb67da8bb6ae #x8564e31a878ed0a8) (#x1b14744e9add888c #x61af70badf3d998d) (#x619b141e58d8a75e #x20a8ed9c45c16af1) (#xcab87e41b6b13aa3 #x71fbe7f41cbcac14) (#x0dcb07e5752ac22b #x6751ee31bf354b80) (#x8399a715f025b39e #xa4588a5bd2f29d04) (#xf59cbae7378391bd #x2d039694956c2ab6) (#xe343c94cd874db1a #x2bfd081ff564f8bb) (#x312c4d8a6440fb98 #x09be2efa901cdcf0) (#x9181ff611cb343d7 #x5b926b36f96573f2) (#x0704a51693392843 #xcb23ce4ded662d29) (#x145d87250f2617d0 #x9be440f8a4a6cc91) (#x7ccabf0121b5c84b #x25293cb315cdd11b) (#x5470724b3ff9e628 #xd022bc809e428afa) (#x689738242e93df9b #xbecd7c4bb16b1d8a) (#xf916c74532209c4c #xe55f177d480e6e78) (#x8f13dab7f586be6f #x6c040bb20f90d9ca) (#xa0adb2eb78f3b84f #x522c45cc6979af02) (#x22756fb9f85fc40b #x5979a04fd9dc3d48) (#x306d37cd14c93442 #xa6b34122f24bd3be) (#xd7e9d55ecfdc55b6 #x747a36db4cb017fe) (#xe784e293db1561f4 #xd2c977f9befbc440) (#xf2981ff1a4bab9fe #xe62058d9780a079f) (#x90c085266c3a8c0d #xf49f04ee9b327cbc) (#x5235ad1adc4901b1 #xb40c1d151173a89d) (#x85dc784413955407 #xc0762bce5dc3bf63) (#xec0a3a274d8f4446 #xd1b6385d8effada7) (#xb5b14f89075c6045 #x66c56aecaf886cdd) (#x01417a477089cfda #xaf0d6fd862570f4e) (#x3628e89cf779d3db #xc29de0b77d7af1d9) (#x811b539b10f4eee9 #x39425428165c8398) (#x402df56e30dff1f8 #x4bc6fc783ae4466b) (#xa8e0e4967e310f50 #x6344bbc3ff84d737) (#xe1c13dc238a5866d #xb6e7d66c31cae627))))) (defconst +kuznyechik-it+ (make-array '(16 256 2) :element-type '(unsigned-byte 64) :initial-contents '(((#x59ba4fc2860ecca5 #xf011538279efe33b) (#xb62a6c959496032d #xbd918337e7ba9cf5) (#xd211f9a6abb11732 #xad925890c98ec303) (#xbf6596274482a58f #x84685128596eda60) (#xa029a9e0ac34d40e #x5113c1f94d76899f) (#x685f4086d27afc30 #x7115b474111e37b0) (#xc5a4e106f5d0d638 #x874c8262f71b6139) (#x63bfc35dce2b76c0 #x075495134478dc85) (#x0f7d710947dbd254 #xe8f2049740c172b6) (#x9f070a78d95820e6 #xfeb9baa4f11f98f2) (#x7b77aaf4d791659e #xc5784b763a2c0c09) (#x98835c1628544239 #xe9eef4109b531b81) (#x525acc199a5f4655 #x865072e52c89080e) (#xe9a2a8ec8557bb7e #x9c8b063d60404bed) (#x02af7969cc452c52 #x4fb8f378ebb2ada0) (#x8679be04a6212591 #xfac9fcfd1b12ff2e) (#x6722318f95a12e64 #x99e7b0e351df4506) (#xe7690430a44f7f03 #xb2259a96b4d88e0b) (#xe8147539e394ad57 #x5ad79e01f419fcbd) (#xaf54d8e9ebef065a #xb9e1c56e0db7fb29) (#x835291039b686b1c #xa22641319aecd1fd) (#xd0be80cf67f43b60 #xe22aabe8223c6ea3) (#x50f5b570561a6a07 #xc9e8819dc73ba5ae) (#x34ce2043693d7e18 #xd9eb5a3ae90ffa58) (#xac4d7c5541693c21 #x3005ae2a725ce1d9) (#xf3c5b82c50a88472 #x111f2b20f5a636c1) (#x1efae2128e7567a8 #x132708ed8041e4af) (#xa7adff8e5d38b6d1 #x46448f4d273a0aec) (#x01b6ddd566c31629 #xc65c983c9459b750) (#x6e6dcb3d45b588c6 #xa01e62fcef0b0393) (#x049df2d25b8a58a4 #x9eb325f015a79983) (#x95515476a3cabc3f #x4ea403ff3020c497) (#x92d5021852c6dee0 #x59f34d4b5a6c47e4) (#xa19f7435caf7c227 #x974f59c5d92f3ecf) (#x052b2f073d494e8d #x58efbdcc81fe2ed3) (#x1a6710c0d5ff3f0c #x8d942d1d95e67d2c) (#xf8253bf74cf90e82 #x675e0a47a0c0ddf4) (#x85601ab80ca71fea #x732d97b964f9e5de) (#x1328ea7205eb99ae #xb46dff022b323bb9) (#x9da87311151d0cb4 #xb10149dc1aad3552) (#xcceb1bb425c4709a #xbeb5507d49cf27ac) (#x37d784ffc3bb4463 #x500f317e96e4e0a8) (#xd1085d1a01372d49 #x247633d4b665d9f3) (#x786e0e487d175fe5 #x4c9c203245c716f9) (#x9b9af8aa82d27842 #x600a9f54e4b80171) (#x2549b358a093cbe4 #x223e5640298f6c41) (#x738e8d936146d515 #x3add015510a1fdcc) (#x7ac17721b15273b7 #x0324d34aae75bb59) (#xce4462dde9815cc8 #xf10da305a27d8a0c) (#x0dd208608b9efe06 #xa74af7efab73df16) (#x498b010c29636f70 #xcd98c7c42d36c272) (#x9c1eaec473de1a9d #x775dd1e08ef48202) (#x7cf3fc9a269d0741 #xd22f05c250608f7a) (#xa3300d5c06b2ee75 #xd8f7aabd329d936f) (#x69e99d53b4b9ea19 #xb7492c48854780e0) (#x9363dfcd3405c8c9 #x9fafd577ce35f0b4) (#xa4b45b32f7be8caa #xcfa0e40958d1101c) (#x1187931bc9aeb5fc #xfbd50c7ac0809619) (#x6694ec5af362384d #x5fbb28dfc586f256) (#xd73ad6a196f859bf #xf57de55c4870edd0) (#xe6dfd9e5c28c692a #x747902aa2081395b) (#xaee2053c8d2c1073 #x7fbd5d5299ee4c79) (#xf5f73397c767f084 #xc014fda80bb302e2) (#x10314eceaf6da3d5 #x3d89944654d92149) (#x84d6c76d6a6409c3 #xb5710f85f0a0528e) (#x4e0f5762d86f0daf #xdacf8970477a4101) (#xbbf864f51f08fd2b #x1adb74d84cc943e3) (#x4fb98ab7beac1b86 #x1c93114cd323f651) (#xe3f4f6e2ffc527a7 #x2c96bf66a17f1788) (#x77137f413acc8db1 #xa46e24a50506644f) (#x907a7b719e83f2b2 #x164bbe33b1deea44) (#xf27365f9366b925b #xd743b31c61ff8191) (#x2c0649ea70876d46 #x1bc7845f975b2ad4) (#x1de346ae24f35dd3 #x9ac363a9ffaafe5f) (#x265017e40a15f19f #xabda3d04566476b1) (#x4ca02e0b142a21fd #x95777a08acc8eca1) (#x4d16f3de72e937d4 #x532be23438915bf1) (#xfd0e14f071b0400f #x3fb1b78b213ef327) (#xc13913d4ae5a8e9c #x19ffa792e2bcf8ba) (#x0c64d5b5ed5de82f #x61166fd33f2a6846) (#x91cca6a4f840e49b #xd017260f25875d14) (#xc6bd45ba5f56ec43 #x0ea8e92688f07bc9) (#x6fdb16e823769eef #x6642fac07b52b4c3) (#x0a565e0e7a929cd9 #xb01db95bc13f5c65) (#xb9571d9cd34dd179 #x556387a0a77bee43) (#x27e6ca316cd6e7b6 #x6d86a538c23dc1e1) (#x5f88c47911c1b853 #x211a850a87fad718) (#xb48515fc58d32f7f #xf229704f0c083155) (#x3e987e4d13afe2c1 #x69f6e3612830a63d) (#x0be083db1c518af0 #x764121675566eb35) (#x1603c57538a2d723 #xec8242ceaacc156a) (#xc220b76804dcb4e7 #x901bccd69d57e24a) (#x1bd1cd15b33c2925 #x4bc8b52101bfca7c) (#x18c869a919ba135e #xc22cde657e54d08c) (#xc08fce01c89998b5 #xdfa33fae76e54fea) (#x391c2823e2a3801e #x7ea1add5427c254e) (#x094ffab2d014a6a2 #x39f9d21fbed44695) (#x0784566ef10c62df #x17574eb46a4c8373) (#xbed34bf22241b3a6 #x4234c914cd376d30) (#xabc92a3bb0655efe #x2752e09e181062aa) (#xa96653527c2072ac #x68ea13e6f3a2cf0a) (#x4b247865e5264322 #x822034bcc6846fd2) (#xfb3c9f4be67f34f9 #xeeba6103df2bc704) (#x289bbb382b0d35e2 #x8574a1af82fcb357) (#x3661592aa578524a #x9653a94202bd57f8) (#x3053d29132b726bc #x47587fcafca863db) (#x82e44cd6fdab7d35 #x647ad90d0eb566ad) (#x740adbfd904ab7ca #x2d8a4fe17aed7ebf) (#x32fcabf8fef20aee #x08e08cb2171ace7b) (#xe470a08c0ec94578 #x3bc1f1d2cb3394fb) (#xeabb0c502fd18105 #x156f6d791fab511d) (#x9a2c257fe4116e6b #xa656076870e1b621) (#xe5c67d59680a5351 #xfd9d69ee5f6a23ab) (#xcff2bf088f424ae1 #x37513b3936243d5c) (#x483ddcd94fa07959 #x0bc45ff8b96f7522) (#x546847a20d9032a3 #x575ba46dd29c3c2d) (#xb1ae3afb659a61f2 #xaac6cd838df61f86) (#x14acbc1cf4e7fb71 #xa33ab1b6417eb8ca) (#xb533c8293e103956 #x3475e87398518605) (#xc4123cd39313c011 #x41101a5e6342d669) (#xc70b986f3995fa6a #xc8f4711a1ca9cc99) (#xb2b79e47cf1c5b89 #x2322a6c7f21d0576) (#x6cc2b25489f0a494 #xefa6918404b9ae33) (#x3a058c9f4825ba65 #xf745c6913d973fbe) (#x580c9217e0cdda8c #x364dcbbeedb6546b) (#x60a667e164ad4cbb #x8eb0fe573b93c675) (#x197eb47c7f790577 #x04704659ea0d67dc) (#x723850460785c33c #xfc81996984f84a9c) (#x0319a4bcaa863a7b #x89e46b447feb1af0) (#x5c9160c5bb478228 #xa8feee4ef811cde8) (#xf993e6222a3a18ab #xa102927b34996aa4) (#x40c4fbbef977c9d2 #xf46115db93e284e7) (#x3578fd960ffe6831 #x1fb7c2067d564d08) (#x5aa3eb7e2c88f6de #x79f538c60604f9cb) (#xd423721d3c7e63c4 #x7c998e18379bf720) (#x45efd4b9c43e875f #xac8ea817121caa34) (#x79d8d39d1bd449cc #x8ac0b80ed19ea1a9) (#x9eb1d7adbf9b36cf #x38e5229865462fa2) (#x4459096ca2fd9176 #x6ad2302b86451d64) (#xeb0dd1854912972c #xd333f5458bf2e64d) (#x87cf63d1c0e233b8 #x3c9564c18f4b487e) (#x5771e31ea71608d8 #xdebfcf29ad7726dd) (#x514368a530d97c2e #x0fb419a1536212fe) (#x658d48e659e40236 #xd65f439bba6de8a6) (#xb018e72e035977db #x6c9a55bf19afa8d6) (#x20629c5f9dda8569 #x7ad1eb8ca8714292) (#xcd5dc661430766b3 #x78e9c841dd9690fc) (#x2ea93083bcc24114 #x547f77277ce98774) (#x31e50f4454743095 #x8104e7f668f1d48b) (#x8a1d6bb14b7ccdbe #x9bdf932e24389768) (#x6af039ef1e3fd062 #x3ead470cfaac9a10) (#xee26fe82745bd9a1 #x8bdc48890a0cc89e) (#x22cde536519fa93b #x356918f443c3ef32) (#x94e789a3c509aa16 #x88f89bc3a47973c7) (#xdd6c88afec6ac566 #x45605c07894fb1b5) (#x62091e88a8e860e9 #xc1080d2fd0216bd5) (#xa286d0896071f85c #x1eab3281a6c4243f) (#xcad9900fb20b046c #x6fbe86f5b7da138f) (#x97fe2d1f6f8f906d #x011cf087db926937) (#xf441ee42a1a4e6ad #x064865949feab5b2) (#x38aaf5f684609637 #xb8fd35e9d625921e) (#x8d993ddfba70af61 #x8c88dd9a4e74141b) (#x6b46e43a78fcc64b #xf8f1df306ef52d40) (#xdae8dec11d66a7b9 #x523712b3e30332c6) (#x75bc0628f689a1e3 #xebd6d7ddeeb4c9ef) (#x3d81daf1b929d8ba #xe012882557dbbccd) (#x56c73ecbc1d51ef1 #x18e35715392e918d) (#xb3014392a9df4da0 #xe57e3efb6644b226) (#xa8d08e871ae36485 #xaeb68bda67fb785a) (#xa50286e7917d9a83 #x09fc7c35cc88a74c) (#xed3f5a3ededde3da #x023823cd75e7d26e) (#x7121f4faad03f947 #x7565f22dfb13506c) (#x8904cf0de1faf7c5 #x123bf86a5bd38d98) (#x2a34c251e74819b0 #xcacc52d7694e1ef7) (#x8f3644b676358333 #xc3302ee2a5c6b9bb) (#x1c559b7b42304bfa #x5c9ffb956bf3490f) (#xd68c0b74f03b4f96 #x33217d60dc295a80) (#x2db0943f16447b6f #xdd9b1c6303029d84) (#x7097292fcbc0ef6e #xb3396a116f4ae73c) (#xd9f17a7db7e09dc2 #xdbd379f79ce82836) (#x06328bbb97cf74f6 #xd10bd688fe153423) (#xb8e1c049b58ec750 #x933f1f9c33225913) (#xf6ee972b6de1caff #x49f096ec74581812) (#xffa16d99bdf56c5d #x700944f3ca8c5e87) (#x43dd5f0253f1f3a9 #x7d857e9fec099e17) (#xe2422b379906318e #xeaca275a3526a0d8) (#xc9c034b3188d3e17 #xe65aedb1c831097f) (#xd3a72473cd72011b #x6bcec0ac5dd77453) (#x8babb6642dbfdb97 #x5d830b12b0612038) (#x0ecbacdc2118c47d #x2eae9cabd498c5e6) (#x88b212d88739e1ec #xd4676056cf8a3ac8) (#x151a61c99224ed58 #x6566298ad5270f9a) (#x5b1536ab4a4be0f7 #xbfa9a0fa925d4e9b) (#x643b95333f27141f #x1003dba72e345ff6) (#x4172266b9fb4dffb #x323d8de707bb33b7) (#x53ec11ccfc9c507c #x400cead9b8d0bf5e) (#xf0dc1c90fa2ebe09 #x98fb40648a4d2c31) (#x4740add0087bab0d #xe3365b6ff9ae0794) (#x5e3e19ac7702ae7a #xe7461d3613a36048) (#x804b35bf31ee5167 #x2bc22a75e507cb0d) (#xcb6f4ddad4c81245 #xa9e21ec92383a4df) (#x129e37a763288f87 #x7231673ebf6b8ce9) (#xe0ed525e55431ddc #xa572d422de940d78) (#x3f2ea398756cf4e8 #xafaa7b5dbc69116d) (#xdcda557a8aa9d34f #x833cc43b1d1606e5) (#xde752c1346ecff1d #xcc843743f6a4ab45) (#x81fde86a572d474e #xed9eb249715e7c5d) (#xb79cb140f2551504 #x7bcd1b0b73e32ba5) (#xd847a7a8d1238beb #x1d8fe1cb08b19f66) (#xa61b225b3bfba0f8 #x80181771b363bdbc) (#xec8987ebb81ef5f3 #xc464bbf1e1be653e) (#xc876e9667e4e283e #x2006758d5c68be2f) (#x2f1fed56da01573d #x9223ef1be8b03024) (#x6d746f81ef33b2bd #x29fa09b890e01963) (#x55de9a776b53248a #x91073c5146c58b7d) (#xef9023571298cf88 #x4d80d0b59e557fce) (#xbdcaef4e88c789dd #xcbd0a250b2dc77c0) (#x24ff6e8dc650ddcd #xe462ce7cbdd6db11) (#x4a92a5b083e5550b #x447cac8052ddd882) (#x7e5c85f3ead82b13 #x9d97f6babbd222da) (#x76a5a2945c0f9b98 #x6232bc99915fd31f) (#xba4eb92079cbeb02 #xdc87ece4d890f4b3) (#x3c370724dfeace93 #x264e1019c3820b9d) (#x426b82d73532e580 #xbbd9e6a378502947) (#xdb5e03147ba5b190 #x946b8a8f775a8596) (#xfa8a429e80bc22d0 #x28e6f93f4b727054) (#x46f670056eb8bd24 #x256ac3536df7b0c4) (#xdfc3f1c6202fe934 #x0ad8af7f62fd1c15) (#x292d66ed4dce23cb #x4328399316a50407) (#xd595afc85abd75ed #xbac51624a3c24070) (#xbc7c329bee049ff4 #x0d8c3a6c2685c090) (#xc3966abd621fa2ce #x564754ea090e551a) (#x2b821f84818b0f99 #x0c90caebfd17a9a7) (#x993581c34e975410 #x2fb26c2c0f0aacd1) (#x9648f0ca094c8644 #xc74068bb4fcbde67) (#x21d4418afb199340 #xbc8d73b03c28f5c2) (#x6110ba34026e5a92 #x48ec666bafca7125) (#x7fea58268c1b3d3a #x5bcb6e862f8b958a) (#x5d27bd10dd849401 #x6ea276726c487ab8) (#xfcb8c92517735626 #xf9ed2fb7b5674477) (#x237b38e3375cbf12 #xf33580c8d79a5862) (#x8e80996310f6951a #x056cb6de319f0eeb) (#x8c2fe00adcb3b948 #x4ad445a6da2da34b) (#x7d45214f405e1168 #x14739dfec439382a) (#xe15b8f8b33800bf5 #x632e4c1e4acdba28) (#x1f4c3fc7e8b67181 #xd57b90d1141853ff) (#x08f92767b6d7b08b #xffa54a232a8df1c5) (#x334a762d98311cc7 #xcebc148e8343792b) (#xf7584afe0b22dcd6 #x8fac0ed0e001af42) (#xf16ac1459ceda820 #x5ea7d8581e149b61) (#x17b518a05e61c10a #x2adedaf23e95a23a) (#xadfba18027aa2a08 #xf6593616e6055689) (#x0000000000000000 #x0000000000000000) (#x3bb3514a2ee6ac4c #x31195eada9ce88ee) (#xaa7ff7eed6a648d7 #xe10e78a28c49d5fa) (#xfe17b04cdb367a74 #xb655dccf5ed5e9d7)) ((#xc397111b1518eccc #x9b933a773e7d9af0) (#xcd0591a4324c5203 #x23a6ad710e447bbd) (#xd8399218a99a0c17 #x74027d7846f20aad) (#x3c2c688604ab43a5 #x98407bdb17358384) (#x64bf1372463d39d4 #x40ea1b794e18c451) (#x4ec715c9b35285fc #xee61786bdeb72671) (#x53b94c0bdbf4e4d6 #xc32e6c27fb609687) (#xfb9a54a2898b5176 #x3e47236ffe999807) (#x3db5f2f922a59dd2 #x0665829b529032e8) (#xf660b99cc4cd4e20 #xe71d7ca9018c69fe) (#x4daf7848d9402465 #x8f0eb0ab119b36c5) (#x18c6ee82d6904142 #x8efe8fcfb7a380e9) (#x76ca50702fc13846 #x4bb561731e532486) (#xc20e8b64331632bb #x05b6c3377bd82b9c) (#x4474b8490c3ec52c #x6bc08dae395f464f) (#x626fc9b39219b825 #x8234483a1340e4fa) (#x7372e73091f7182e #xe804faf08c271499) (#xdd81255817ac2c7f #xd7b3e6fbd4863ab2) (#xe034d7a13509b1ad #xd1d664608616085a) (#x590ae18b6498a406 #x468f99e21c88f6b9) (#xc8bd26e48c7a726b #x801736f29c304ba2) (#x9c4d2a51a5a4c93b #x1fc2f0d67fad4ce2) (#x32bee83923fffd6a #x2075ecdd270c62c9) (#x2782eb85b829a37e #x77d13cd46fba13d9) (#x3f4405076eb9e23c #xf92fb31bd8199330) (#x304f1fc76fe38284 #xdf3fdd5dad85c311) (#x7aa927314489f967 #x0ccac7f5a4e36413) (#x8a19446c546036b6 #x2909e81ff8372d46) (#x223a5cc5061f8316 #xd460a757fdce23c6) (#x825b1e12a7100988 #x53e22c5a9556eca0) (#x88e8b392187c4958 #xd643d99f72be8c9e) (#x6107a432f80b19bc #xe35b80fadc6cf44e) (#x8fa1f32cea5616de #x8ab8739c6a431d59) (#x46854fb74022bac2 #x948abc2eb3d6e797) (#xaad2ef571e63ca4e #x02237ec88f70af58) (#xf24194a35cf5b03f #xda891e6ad65de88d) (#x85125eac553a560e #x0f1986598dab7d67) (#x04212d3f9838fe1f #x3d9462c3d7d18173) (#x03686d816a12a199 #x616fc8c0cf2c10b4) (#xb21401d5c8f38b0c #x8cddf10738d32fb1) (#xa290b529ed13f570 #x78c8ba8de2116ebe) (#x41cc0f09b208e544 #xc871162dab2b7650) (#xbe777694a3bb4a2d #xcba2578182636f24) (#x2be19cc4d361625f #x30ae9a52d50a534c) (#x7e880a0edcb10778 #x315ea5367332e560) (#x609e3e4dde05c7cb #x7d7e79ba99c94522) (#x9ebcddafe9b8b6d5 #xe088c156f524ed3a) (#x6f95248ddf5fa773 #x5b6e17fcec551503) (#xe6e40d60e12d305c #x13083723db4e28f1) (#x79c14ab02e9b58fe #x6da50f356bcf74a7) (#xa6b19816752b0b6f #x455cd84e35c0efcd) (#x902e5d10ceec081a #x58bd5650c51d0c77) (#xa3092f56cb1d2b07 #xe6ed43cda7b4dfd2) (#x02f1f7fe4c1c7fee #xff4a31808a89a1d8) (#x6cfd490cb54d06ea #x3a01df3c237905b7) (#xad9bafe9ec4995c8 #x5ed8d4cb978d3e9f) (#xec57a0e05e41708c #x96a9c2e63ca648cf) (#x471cd5c8662c64b5 #x0aaf456ef67356fb) (#x5148bbf597e89b38 #x3c645da771e9375f) (#x72eb7d4fb7f9c659 #x762103b0c982a5f5) (#xffbb799d11b3af69 #x03d341ac29481974) (#x7b30bd4e62872710 #x92ef3eb5e146d57f) (#xfcd3141c7ba10ef0 #x62bc896ce66409c0) (#x6526890d6033e7a3 #xdecfe2390bbd753d) (#x261b71fa9e277d09 #xe9f4c5942a1fa2b5) (#x4817cf086776040d #x2cbf2b2883ef06da) (#xb4c4db141cd70afd #x4e03a244658b0f1a) (#x6a2d93cd6169871b #xf8df8c7f7e21251c) (#x556996ca0fd06527 #x01f03f64a638b62c) (#x16546e3df1c4ff8d #x36cb18c9879a61a4) (#xcbd54b65e668d3f2 #xe178fe32531c5b16) (#x1275430269fc0192 #x0b5f7a0a504be0d7) (#x91b7c76fe8e2d66d #xc698af1080b8bd1b) (#x1ce7c3bd4ea8bf5d #xb36aed0c6072019a) (#x06d0dac1d42481f1 #xc2de53435d5820ab) (#x0c6377416b48c121 #x477fa686bab04095) (#x2e592b846d574237 #x931f01d1477e6353) (#x2fc0b1fb4b599c40 #x0d3af89102dbd23f) (#xdb51ff99c388ad8e #x156db5b889de1a19) (#x5bfb16752884dbe8 #xb9c5a86296015761) (#xe9ef17a0e07750e4 #x35185965aed278d0) (#x35f7a887d1d5a2ec #x7c8e46de3ff1f30e) (#xa06142d7a10f8a9e #x87828b0d6898cf66) (#x97671dae3cc6579c #x0446fc53dde09db0) (#xf0b0635d10e9cfd1 #x25c32fea5cd44955) (#x24ea8604d23b02e7 #x16bef414a096036d) (#x0f0b1ac0015a60b8 #x26106e46759c5021) (#x897129ed3e72972f #x486620df371b3df2) (#xb0e5f62b84eff4e2 #x7397c087b25a8e69) (#xb55d416b3ad9d48a #xd0265b04202ebe76) (#xa9ba82d674716bd7 #x634cb608405cbfec) (#xbd1f1b15c9a9ebb4 #xaacd9f414d4f7f90) (#xd07bc8665aea3329 #x0ee9b93d2b93cb4b) (#xb6352cea50cb7513 #xb14993c4ef02aec2) (#xf96ba35cc5972e98 #xc10d12ef741039df) (#x5e43a13596b2fb80 #x1a7433e10475677e) (#xf129f92236e711a6 #xbbe6d6aa1971f839) (#xeea6571e125d0f62 #x69e3f366b62fe917) (#x1e16344302b4c0b3 #x4c20dc8ceafba042) (#xd1e252197ce4ed5e #x90cc407d6e367a27) (#x9596ea5070da2872 #xfb0ccdd357693c68) (#xe2c5205f7915ce43 #x2e9c55e00c9fa982) (#xe35cba205f1b1034 #xb0b9aca0493a18ee) (#x195f74fdf09e9f35 #x10db768ff2063185) (#x63f653ccb4176652 #x1c11b17a56e55596) (#xaf6a5817a055ea26 #xa192e54b1d049f47) (#xea877a218a65f17d #x547791a561fe6864) (#x701a8ab1fbe5b9b7 #x896b3230430b042d) (#xeb1ee05eac6b2f0a #xca5268e5245bd908) (#xbbcfc1d41d8d6a45 #x6813cc0210175f3b) (#xa4406fe839377481 #xba16e9cebf494e15) (#x5cb256cbdaae846e #xe53e02618efcc6a6) (#x99f59d111b92e953 #xbc736b55edd97cfd) (#xc4de51a5e732b34a #xc768907426800b37) (#x848bc4d373348879 #x913c7f19c80ecc0b) (#xba565bab3b83b432 #xf636354255b2ee57) (#x23a3c6ba20115d61 #x4a455e17b86b92aa) (#xedce3a9f784faefb #x088c3ba67903f9a3) (#xab4b7528386d1439 #x9c068788cad51e34) (#x718310ceddeb67c0 #x174ecb7006aeb541) (#x17cdf442d7ca21fa #xa8eee189c23fd0c8) (#x45ed22362a301b5b #xf5e574ee7cfaf723) (#xc62fa65bab2ecca4 #x3822a1f4ac09aaef) (#x380d45b99c93bdba #xa5d41918c0e402f7) (#xe1ad4dde13076fda #x4ff39d20c3b3b936) (#x9dd4b02e83aa174c #x81e709963a08fd8e) (#x940f702f56d4f605 #x6529349312cc8d04) (#xbc86816aefa735c3 #x34e8660108eacefc) (#x664ee48c0a21463a #xbfa02af9c4916589) (#x6945fe4c0b7b2682 #x99b044bfb10d35a8) (#xa72802695325d518 #xdb79210e70655ea1) (#x5798613443cc1ac9 #xfeba0ee42cb117f4) (#x05b8b740be362068 #xa3b19b839274301f) (#xa5d9f5971f39aaf6 #x2433108efaecff79) (#x14a599c3bdd88063 #xc98129490d13c07c) (#xfd4a8e635dafd087 #xfc99702ca3c1b8ac) (#x09dbc001d57ee149 #xe4ce3d0528c4708a) (#xd45ae559c2d2cd36 #x337ddbfefc424a38) (#xdf70d2a65bb05391 #x28f9d77b5e0f9b6a) (#x867a332d3f28f797 #x6e764e9942876dd3) (#x4055957694063b33 #x5654ef6dee8ec73c) (#xdc18bf2731a2f208 #x49961fbb91238bde) (#x1084b4fc25e07e7c #xf4154b8adac2410f) (#x37065f799dc9dd02 #x83c4775eb57852d6) (#x01999a7f260ede77 #x9e25f94045a5b16c) (#xca4cd11ac0660d85 #x7f5d077216b9ea7a) (#x80aae9eceb0c7666 #xaca81dda1fdf4d78) (#xd5c37f26e4dc1341 #xad5822beb9e7fb54) (#x8d5004d2a64a6930 #x75f2421ce0cabc81) (#x3994dfc6ba9d63cd #x3bf1e0588541b39b) (#x0ab3ad80bf6c40d0 #x85a1f5c5e7e8603e) (#x2ca8dc7a214b3dd9 #x6c553051cdf7c28b) (#x8e386953cc58c8a9 #x149d8adc2fe6ac35) (#x433df8f7fe149aaa #x373b27ad21a2d788) (#xe58c60e18b3f91c5 #x7267ffe314623845) (#xd9a008678f94d260 #xea2784380357bbc1) (#x20cbab3b4a03fcf8 #x2b2a96d77747821e) (#x6e0cbef2f9517904 #xc54beebca9f0a46f) (#x25731c7bf435dc90 #x889b0d54e533b201) (#xdee948d97dbe8de6 #xb6dc2e3b1baa2a06) (#x7c79fdf090ad7896 #xce1494b6f9bb44b8) (#xd73288d8a8c06caf #x5212133e336e5a8c) (#x2889f145b973c3c6 #x51c152921a2643f8) (#x0b2a37ff99629ea7 #x1b840c85a24dd152) (#x5220d674fdfa3aa1 #x5d0b9567bec527eb) (#xd6ab12a78eceb2d8 #xcc37ea7e76cbebe0) (#xfe22e3e237bd711e #x9df6b8ec6ceda818) (#x67d77ef32c2f984d #x2185d3b98134d4e5) (#xb7acb69576c5ab64 #x2f6c6a84aaa71fae) (#xce6dfc25585ef39a #x42c965b1c1686b09) (#x4ae638f62b6a7be3 #xd3f51aa80966a702) (#xdac865e6e58673f9 #x8b484cf8cc7bab75) (#x5fda3b4ab0bc25f7 #x8451caa141d0d612) (#x5d2bccb4fca05a19 #x7b1bfb21cb5977ca) (#x93463091a4fea983 #x39d29e900a311cc3) (#x3edd9f7848b73c4b #x670a4a5b9dbc225c) (#x50d1218ab1e6454f #xa241a4e7344c8633) (#xb38d9baaeefd557b #x12f808477d769edd) (#xf8f23923e399f0ef #x5f28ebaf31b588b3) (#x6d64d3739343d89d #xa424267c66dcb4db) (#xcc9c0bdb14428c74 #xbd8354314be1cad1) (#xd28a3f9816f64cc7 #xf1a388bda11a6a93) (#x9a9df090718048ca #xdd1ca39522f56c49) (#x6bb409b24767596c #x66fa753f3b849470) (#x31d685b849ed5cf3 #x411a241de820727d) (#x7753ca0f09cfe631 #xd59098335bf695ea) (#x08425a7ef3703f3e #x7aebc4456d61c1e6) (#xfa03ceddaf858f01 #xa062da2fbb3c296b) (#x1bae8303bc82e0db #xef91470f788f905d) (#x1f8fae3c24ba1ec4 #xd20525ccaf5e112e) (#x7de0678fb6a3a6e1 #x50316df6bc1ef5d4) (#xcff4665a7e502ded #xdcec9cf184cdda65) (#x87e3a952192629e0 #xf053b7d90722dcbf) (#x153c03bc9bd65e14 #x57a4d00948b67110) (#x75a23df145d399df #x2adaa9b3d17f3432) (#x54f00cb529debb50 #x9fd5c624e39d0740) (#x5601fb4b65c2c4be #x609ff7a46914a698) (#xb93e362a519115ab #x9759fd829a9efee3) (#x2d3146050745e3ae #xf270c911885273e7) (#xaef3c268865b3451 #x3fb71c0b58a12e2b) (#x4c36e237ff4efa12 #x112b49eb543e87a9) (#x215231446c0d228f #xb50f6f9732e23372) (#x3327724605f1231d #xbe50159d62a9d3a5) (#x92dfaaee82f077f4 #xa7f767d04f94adaf) (#xc7b63c248d2012d3 #xa60758b4e9ac1b83) (#x83c2846d811ed7ff #xcdc7d51ad0f35dcc) (#x8cc99ead8044b747 #xebd7bb5ca56f0ded) (#xef3fcd613453d115 #xf7c60a26f38a587b) (#x4f5e8fb6955c5b8b #x7044812b9b12971d) (#xa82318a9527fb5a0 #xfd694f4805f90e80) (#x68dc64332d75f8f5 #x0795bdfff4a884c4) (#x2a7806bbf56fbc28 #xae8b631290afe220) (#xf7f923e3e2c39057 #x793885e94429d892) (#xe415fa9ead314fb2 #xec4206a351c78929) (#x986c076e3d9c3724 #x22569215a87ccd91) (#x0e9280bf2754becf #xb83597063039e14d) (#x7858d0cf08958689 #xf380f6752e6ac5cb) (#x42a46288d81a44dd #xa91edeed640766e4) (#xc0ff7c9a7f0a4d55 #xfafcf2b7f1518a44) (#xe77d971fc723ee2b #x8d2dce639eeb999d) (#x346e32f8f7db7c9b #xe2abbf9e7a544262) (#x96fe87d11ac889eb #x9a63051398452cdc) (#xf4914e6288d131ce #x18574d298b05c826) (#x13ecd97d4ff2dfe5 #x957a834a15ee51bb) (#x29106b3a9f7d1db1 #xcfe4abd25f83f294) (#xc166e6e559049322 #x64d90bf7b4f43b28) (#x9b046aef578e96bd #x43395ad56750dd25) (#xa1f8d8a8870154e9 #x19a7724d2d3d7e0a) (#x3b652838f6811c23 #xc4bbd1d80fc81243) (#x369fc506bbc70375 #x1de18e1ef0dde3ba) (#x5a628c0a0e8a059f #x27e05122d3a4e60d) (#x9f2547d0cfb668a2 #x7ead3816b0815c56) (#x7f119071fabfd90f #xaf7b5c763697540c) (#x3afcb247d08fc254 #x5a9e28984a6da32f) (#x074940bef22a5f86 #x5cfbaa0318fd91c7) (#xe8768ddfc6798e93 #xab3da025eb77c9bc) (#xbfeeeceb85b5945a #x5587aec1c7c6de48) (#xc547cbdac13c6d3d #x594d69346325ba5b) (#x4b7fa2890d64a594 #x4dd0e3e84cc3166e) (#x0dfaed3e4d461f56 #xd95a5fc6ff15f1f9) (#xac023596ca474bbf #xc0fd2d8bd2288ff3) (#xb17c6c54a2e12a95 #xedb239c7f7ff3f05) (#xf508d41daedfefb9 #x8672b469cea0794a) (#x81337393cd02a811 #x328de49a5a7afc14) (#x111d2e8303eea00b #x6a30b2ca9f67f063) (#x58937bf442967a71 #xd8aa60a2592d47d5) (#xd313a5e730f892b0 #x6f8671fde4bfdbff) (#xc924bc9baa74ac1c #x1e32cfb2d995face) (#xb8a7ac55779fcbdc #x097c04c2df3b4f8f) (#x743ba78e63dd47a8 #xb4ff50f394da855e) (#x8b80de13726ee8c1 #xb72c115fbd929c2a) (#x1d7e59c268a6612a #x2d4f144c25d7b0f6) (#x0000000000000000 #x0000000000000000) (#x1a37197c9a8c3eac #x71b4be4f3d2a2131) (#xf3d80edc7afb6e48 #x44ace72a93f859e1) (#x498e55774178da7a #xb29ad268c64ab7b6)) ((#xe630efefb5ef3547 #xe65f85138689a0af) (#x6798babae4ba63e9 #x67a57c21945ad618) (#x86f78e8ede8eb28f #x8615296eab6477b8) (#xad956e6efc6ee24e #xade5695e44ddf861) (#x587a76769976ab03 #x583ee3d8ac1cdf6f) (#x59a41e1eed1ecacf #x599d4946d2605eec) (#xa32b1b1b211be90c #xa3f80ae6f570fa7f) (#xa7d578783278aeba #xa731e7dbce43bb36) (#x9689c1c192c16d12 #x96b71b9a47a8b05f) (#x6b591f1fd11faaf0 #x6b3d8866d90f15c3) (#x14802c2c5f2c982b #x146bdfc9d7ff86ae) (#x2de35353d953d52c #x2dbc3af228720f55) (#x184189896a895132 #x18f32b8e9aaa4575) (#xdd2c4040db40ba1b #xdd0df7d785fce891) (#x347cb2b2c7b2e5d2 #x34ecbbe2cca4cba3) (#xc23212123e120f08 #xc2110c05a6e1aceb) (#xcf2ddfdf7fdfa7dd #xcf2a52dc95c8eeb3) (#x519bd8d8cbd84460 #x51cc503ca406dc7e) (#xc712191959192972 #xc77b4ba6e3ae6c21) (#xcef3b7b70bb7c611 #xce89f842ebb46f30) (#xb0f4ececf1ec9506 #xb07c05739b387dde) (#xb28b3c3c193c575d #xb2f9928c67c0bc1b) (#x2c3d3b3bad3bb4e0 #x2c1f906c560e8ed6) (#xcd520f0f970f6586 #xcdafc52369302f76) (#xe0b15c5c4e5cb0aa #xe013ffd141422023) (#x5a05a6a671a66958 #x5abb742750e41eaa) (#xefd14141e741da24 #xefad36f78e93a3be) (#x1ec03a3a913ad4df #x1ebf514c5d61c5f9) (#x1a3e595982599369 #x1a76bc71665284b0) (#x05200b0b670b267a #x056a47a3454fc0ca) (#x68f8a7a74da70967 #x681bb5075b8b5585) (#x8f1620208c205dec #x8fe79a8aa37e74a9) (#xc9ac6c6c846c2230 #xc966281e52036e3f) (#x42442f2f1b2f386a #x42485fa9ca4e5bdf) (#x72c6fefecffe9a0e #x726d09763dd9d135) (#x8729e6e6aae6d343 #x87b683f0d518f63b) (#xa474c0c0aec00d2d #xa417daba4cc7fb70) (#xec70f9f97bf979b3 #xec8b0b960c17e3f8) (#x4d243232b23252e4 #x4df6968f059fd842) (#x5f25adad16ad4f22 #x5fd1338415abde60) (#x6926cfcf39cf68ab #x69b81f9925f7d406) (#xe310e4e4d2e4133d #xe335c2b0c3c66065) (#xa8b565659b65c434 #xa88f2efd019238ab) (#x3ac2c7c71ac7ee90 #x3af1d85a7d09c9bd) (#x03a1b8b89cb8a397 #x03263d6182844046) (#xb40a8f8fe28fd2b0 #xb4b5e84ea00b3c97) (#xc4b3a1a1c5a18ae5 #xc45d76c7612a2c67) (#x0ebe7575dd750b42 #x0e1d63b8b1ad021e) (#x5d5a7d7dfe7d8d79 #x5d54a47be9531fa5) (#xa2f57373557388c0 #xa25ba0788b0c7bfc) (#x8556363642361118 #x8533140f29e037fe) (#x451bf4f494f4dc4b #x45a78ff573f95ad0) (#x523a60605760e7f7 #x52ea6d5d26829c38) (#x76389d9ddc9dddb8 #x76a4e44b06ea907c) (#x439a47476f4759a6 #x43ebf537b432da5c) (#xd39235350635b159 #xd310946f3451ea8f) (#x3082d1d1d4d1a264 #x302556dff7978aea) (#x795880807580b736 #x791a2d6dc93b13e1) (#xd5138686fd8634b4 #xd55ceeadf39a6a03) (#xf431707011702881 #xf478201896bda68d) (#x4ba581814981d709 #x4bbaec4dc25458ce) (#xd4cdeeee89ee5578 #xd4ff44338de6eb80) (#x0681b3b3fbb385ed #x064c7ac2c7cb808c) (#x6366d9d9f7d9245f #x636c911caf699751) (#xf64ea0a0f9a0eada #xf6fdb7e76a456748) (#xc3ec7a7a4a7a6ec4 #xc3b2a69bd89d2d68) (#xc56dc9c9b1c9eb29 #xc5fedc591f56ade4) (#xd9d22323c823fdad #xd9c41aeabecfa9d8) (#x39637f7f867f4d07 #x39d7e53bff8d89fb) (#xac4b060688068382 #xac46c3c03aa179e2) (#xfdd0dede43dec7e2 #xfd8a93fc9ea7a59c) (#x403bfffff3fffa31 #x40cdc85636b69a1a) (#x7e075b5bfa5b5317 #x7ef5fd31708c12ee) (#xc193aaaaa2aaac9f #xc13731642465ecad) (#x9a486464a764a40b #x9a2fefdd0afd7384) (#xf790c8c88dc88b16 #xf75e1d791439e6cb) (#xedae91910f91187f #xed28a108726b627b) (#xd6b23e3e613e9723 #xd67ad3cc711e2a45) (#xcbd3bcbc6cbce06b #xcbe3bfe1aefbaffa) (#xb8cb2a2ad72a1ba9 #xb82d1c09ed5eff4c) (#xe7ee8787c187548b #xe7fc2f8df8f5212c) (#x8d69f0f064f09fb7 #x8d620d755f86b56c) (#x1f1e5252e552b513 #x1f1cfbd2231d447a) (#xe44f3f3f5d3ff71c #xe4da12ec7a71616a) (#xf1117b7b767b0efb #xf11267bbd3f26647) (#x80763d3d253d3762 #x805953ac6caff734) (#xbab4fafa3ffad9f2 #xbaa88bf611a63e89) (#x53e408082308863b #x5349c7c358fe1dbb) (#x291d3030ca30929a #x2975d7cf13414e1c) (#xfe716666df666475 #xfeacae9d1c23e5da) (#x3fe2cccc7dccc8ea #x3f9b9ff938460977) (#xe5915757295796d0 #xe579b872040de0e9) (#x9d17bfbf28bf402a #x9dc03f81b34a728b) (#xb35554546d543691 #xb35a381219bc3d98) (#xd1ede5e5eee57302 #xd1950390c8a92b4a) (#x6fa77c7cc27ced46 #x6ff4655be23c548a) (#xca0dd4d418d481a7 #xca40157fd0872e79) (#x46ba4c4c084c7fdc #x4681b294f17d1a96) (#xb7ab37377e377127 #xb793d52f228f7cd1) (#xa60b10104610cf76 #xa6924d45b03f3ab5) (#x9277a2a281a22aa4 #x927ef6a77c9bf116) (#xb12a84848584f4ca #xb1dfafede544fc5d) (#x8a362b2beb2b7b96 #x8a8ddd29e631b463) (#x16fffcfcb7fc5a70 #x16ee48362b07476b) (#xf92ebdbd50bd8054 #xf9437ec1a594e4d5) (#xa5aaa8a8daa86ce1 #xa5b4702432bb7af3) (#xaacab5b573b5066f #xaa0ab902fd6af96e) (#x8209ededcdedf539 #x82dcc453905736f1) (#x91d61a1a1d1a8933 #x9158cbc6fe1fb150) (#x7fd933338e3332db #x7f5657af0ef0936d) (#xf36eabab9eabcca0 #xf397f0442f0aa782) (#x199fe1e11ee130fe #x19508110e4d6c4f6) (#x65e76a6a0c6aa1b2 #x6520ebde68a217dd) (#x476424247c241e10 #x4722180a8f019b15) (#x9f686f6fc06f8271 #x9f45a87e4fb2b34e) (#x44c59c9ce09cbd87 #x4404256b0d85db53) (#x2122f6f6ecf61c35 #x2124ceb56527cc8e) (#x0b9e7e7eba7e2d38 #x0b77241bf4e2c2d4) (#x49da5151a1511552 #x493f7bb23eac990b) (#xb9154242a3427a65 #xb98eb69793227ecf) (#x9757a9a9e6a90cde #x9714b10439d431dc) (#x0f601d1da91d6a8e #x0fbec926cfd1839d) (#x315cb9b9a0b9c3a8 #x3186fc4189eb0b69) (#x41e5979787979bfd #x416e62c848ca1b99) (#xfc0eb6b637b6a62e #xfc293962e0db241f) (#x899793937793d801 #x89abe04864b5f425) (#xa96b0d0def0da5f8 #xa92c84637feeb928) (#xde8df8f847f8198c #xde2bcab60778a8d7) (#x2e42ebeb45eb76bb #x2e9a0793aaf64f13) (#x94f611117a11af49 #x94328c65bb50719a) (#xbe4a99992c999e44 #xbe6166cb2a957fc0) (#x4f5be2e25ae290bf #x4f730170f9671987) (#xd76c56561556f6ef #xd7d979520f62abc6) (#xc8720404f00443fc #xc8c582802c7fefbc) (#xda739b9b549b5e3a #xdae2278b3c4be99e) (#x3d9d1c1c951c0ab1 #x3d1e0806c4bec8b2) (#x20fc9e9e989e7df9 #x2087642b1b5b4d0d) (#x7167464653463999 #x714b3417bf5d9173) (#x27a34545174599d8 #x2768b477a2ec4c02) (#xe950f2f21cf25fc9 #xe9e14c3549582332) (#xd80c4b4bbc4b9c61 #xd867b074c0b3285b) (#x6a877777a577cb3c #x6a9e22f8a7739440) (#x360362622f622789 #x36692c1d305c0a66) (#xfb516d6db86d420f #xfbc6e93e596c2510) (#x3b1cafaf6eaf8f5c #x3b5272c40375483e) (#xc6cc71712d7148be #xc6d8e1389dd2eda2) (#x73189696bb96fbc2 #x73cea3e843a550b6) (#x4a7be9e93de9b6c5 #x4a1946d3bc28d94d) (#xbf94f1f158f1ff88 #xbfc2cc5554e9fe43) (#x7af93838e93814a1 #x7a3c100c4bbf53a7) (#x6dd8acac2aac2f1d #x6d71f2a41ec4954f) (#x9b960c0cd30cc5c7 #x9b8c45437481f207) (#xf2b0c3c3eac3ad6c #xf2345ada51762601) (#x952879790e79ce85 #x959126fbc52cf019) (#x107e4f4f4c4fdf9d #x10a232f4ecccc7e7) (#xbdeb2121b0213dd3 #xbd475baaa8113f86) (#x6c06c4c45ec44ed1 #x6cd2583a60b814cc) (#x35a2dadab3da841e #x354f117cb2d84a20) (#xbb6a92924b92b83e #xbb0b21686fdabf0a) (#x1cbfeaea79ea1684 #x1c3ac6b3a199043c) (#x7599252540257e2f #x7582d92a846ed03a) (#x3c437474e1746b7d #x3cbda298bac24931) (#x77e6f5f5a8f5bc74 #x77074ed5789611ff) (#x56c403034403a041 #x562380601db1dd71) (#x9837b4b44fb46650 #x98aa7822f605b241) (#x075fdbdb8fdbe421 #x07efd05cb9b7010f) (#x70b92e2e272e5855 #x70e89e89c12110f0) (#x155e44442b44f9e7 #x15c87557a983072d) (#x8849fbfb03fbb9cd #x88084ad61ac975a6) (#x2abc88885688310d #x2a53eaae91c50e5a) (#xb5d4e7e796e7b37c #xb51642d0de77bd14) (#xf0cf131302136f37 #xf0b1cd25ad8ee7c4) (#x54bbd3d3acd3621a #x54a6179fe1491cb4) (#x22834e4e704ebfa2 #x2202f3d4e7a38cc8) (#x083fc6c626c68eaf #x0851197a76668292) (#xdbadf3f320f33ff6 #xdb418d154237681d) (#xee0f29299329bbe8 #xee0e9c69f0ef223d) (#x643902027802c07e #x6483414016de965e) (#xeaf14a4a804afc5e #xeac77154cbdc6374) (#x7886e8e801e8d6fa #x78b987f3b7479262) (#x5c8415158a15ecb5 #x5cf70ee5972f9e26) (#xeb2f2222f4229d92 #xeb64dbcab5a0e2f7) (#x28c35858be58f356 #x28d67d516d3dcf9f) (#xe2ce8c8ca68c72f1 #xe296682ebdbae1e6) (#x611909091f09e604 #x61e906e353915694) (#x235d26260426de6e #x23a1594a99df0d4b) (#x1be03131f631f2a5 #x1bd516ef182e0533) (#x9cc9d7d75cd721e6 #x9c63951fcd36f308) (#x60c761616b6187c8 #x604aac7d2dedd717) (#x8cb798981098fe7b #x8cc1a7eb21fa34ef) (#x4e858a8a2e8af173 #x4ed0abee871b9804) (#x11a027273827be51 #x1101986a92b04664) (#xd24c5d5d725dd095 #xd2b33ef14a2d6b0c) (#xe16f34343a34d166 #xe1b0554f3f3ea1a0) (#x5565bbbbd8bb03d6 #x5505bd019f359d37) (#x027fd0d0e8d0c25b #x028597fffcf8c1c5) (#x74474d4d344d1fe3 #x742173b4fa1251b9) (#x09e1aeae52aeef63 #x09f2b3e4081a0311) (#xa08aa3a3bda34a9b #xa0de378777f4ba39) (#x9eb60707b407e3bd #x9ee602e031ce32cd) (#x2f9c838331831777 #x2f39ad0dd48ace90) (#x571a6b6b306bc18d #x57802afe63cd5cf2) (#x17219494c3943bbc #x174de2a8557bc6e8) (#x33236969486901f3 #x33036bbe7513caac) (#x0a401616ce164cf4 #x0ad48e858a9e4357) (#x3e3ca4a409a4a926 #x3e383567463a88f4) (#x84885e5e365e70d4 #x8490be91579cb67d) (#x7da6e3e366e3f080 #x7dd3c050f20852a8) (#x62b8b1b183b14593 #x62cf3b82d11516d2) (#x04fe6363136347b6 #x04c9ed3d3b334149) (#xafeabebe14be2015 #xaf60fea1b82539a4) (#x01de6868746861cc #x01a3aa9e7e7c8183) (#x5045b0b0bfb025ac #x506ffaa2da7a5dfd) (#x2b62e0e022e050c1 #x2bf04030efb98fd9) (#x5efbc5c562c52eee #x5e72991a6bd75fe3) (#x81a85555515556ae #x81faf93212d376b7) (#x99e9dcdc3bdc079c #x9909d2bc887933c2) (#xae34d6d660d641d9 #xaec3543fc659b827) (#xab14dddd07dd67a3 #xaba9139c831678ed) (#x6646d2d290d20225 #x6606d6bfea26579b) (#xb6755f5f0a5f10eb #xb6307fb15cf3fd52) (#xdf53909033907840 #xdf88602879042954) (#x1d6182820d827748 #x1d996c2ddfe585bf) (#x7b2750509d50756d #x7b9fba9235c3d224) (#x4cfa5a5ac65a3328 #x4c553c117be359c1) (#x900872726972e8ff #x90fb6158806330d3) (#x13dff7f7d0f77c0a #x13840f956e4887a1) (#x2402fdfd8bfd3a4f #x244e891620680c44) (#x0cc1a5a535a5c919 #x0c98f4474d55c3db) (#xc04dc2c2d6c2cd53 #xc0949bfa5a196d2e) (#x83d78585b98594f5 #x837f6ecdee2bb772) (#xffaf0e0eab0e05b9 #xff0f0403625f6459) (#x38bd1717f2172ccb #x38744fa581f10878) (#x37dd0a0a5b0a4645 #x37ca86834e208be5) (#xa154cbcbc9cb2b57 #xa17d9d1909883bba) (#xdcf22828af28dbd7 #xdcae5d49fb806912) (#x93a9cacaf5ca4b68 #x93dd5c3902e77095) (#x7c788b8b128b914c #x7c706ace8c74d32b) (#x8ec84848f8483c20 #x8e443014dd02f52a) (#xcc8c6767e367044a #xcc0c6fbd174caef5) (#xe88e9a9a689a3e05 #xe842e6ab3724a2b1) (#x12019f9fa49f1dc6 #x1227a50b10340622) (#x267d2d2d632df814 #x26cb1ee9dc90cd81) (#x48043939d539749e #x489cd12c40d01888) (#x0d1fcdcd41cda8d5 #x0d3b5ed933294258) (#xf5ef18186518494d #xf5db8a86e8c1270e) (#xd0338d8d9a8d12ce #xd036a90eb6d5aac9) (#x8be843439f431a5a #x8b2e77b7984d35e0) (#x32fd01013c01603f #x32a0c1200b6f4b2f) (#x6e791414b6148c8a #x6e57cfc59c40d509) (#x25dc9595ff955b83 #x25ed23885e148dc7) (#xfa8f0505cc0523c3 #xfa6543a02710a493) (#x0000000000000000 #x0000000000000000) (#x5bdbcece05ce0894 #x5b18deb92e989f29) (#xbc354949c4495c1f #xbce4f134d66dbe05) (#xf8f0d5d524d5e198 #xf8e0d45fdbe86556)) ((#xc97c0997c50f5fab #xfe8781fdbd39c542) (#xf81cdd05decea5bb #x2bccdfc36145de12) (#x528c08391fcf1583 #x1cd5129ea8ff1fca) (#xd22ec32c6699e50d #x065f052b24566639) (#x059c2ebffab03e3a #x6528b62a3354fad2) (#x927f47c7bbb29d4a #x0b1aef9062e3bba1) (#x1435b8b96e85f8e8 #x57a09da8cc936ece) (#x0d3fdf9aa98d31eb #x2c683a054b0aa9c1) (#x36a457b585efb78f #x3373cb6ff1de85f6) (#xd302746054d63dbe #xa657f5f72b2d5403) (#x7d2238af5d286b0f #x546e7e5cdeb85d33) (#x74ad7ec63c5abc6d #xbd2602afa99d3c1a) (#x563c91cad730f30a #xd9f5546894d0d722) (#x2df69d0e26790d29 #xcbab4fb968b1268d) (#xb5728674aa68ec17 #x0ae10f7d6cfaaa4b) (#x1826d06ff54711b0 #xdbc0577188e2f535) (#xa4db10723e5d2ac5 #x386924ff933d3e57) (#xa06b8981f6a2cc4c #xfd496209af12f6bf) (#x96cfde34734d7bc3 #xce3aa9665ecc7349) (#x3338790a7f5f89b5 #x565b7d45c28a7f24) (#x0afb5cbd37a37c74 #xca50af5466a83767) (#xe7fe8e4db5a7f994 #x16341de3c405b581) (#xe34e17be7d581f1d #xd3145b15f82a7d69) (#x49dec282bc59af25 #xe40d96483190bcb1) (#x3d73bc4480031348 #x592b94e7980d80ab) (#xe899fc4f78b4bbda #xb94c049d91f97834) (#x6c8baea9c91daddd #x66e655de217fc92f) (#xa2332419923cbfe9 #x7e594172b1e492cb) (#xbb39433a553476ea #x0591e6df367d55c4) (#x8ee90e5b860a6a73 #x15fafe17d62e867c) (#xa9e4cfe897d01b2e #x14011efad8379796) (#xf77baf0713dde7f5 #x84b4c6bd34b913a7) (#x50d4a5a17b516626 #x9fc531e5b6097bbe) (#xbea56d85af8448d0 #x60b950f50529af16) (#x12dd8cd2c2e46dc4 #x1190f825ee4ac252) (#xc56f61415ecdb6f3 #x72e74b24f9485eb9) (#x77d964126a8b177b #x9e3ed108b8106a54) (#x166d15210a1b8b4d #xd4b0bed3d2650aba) (#xef5d7f68e69af645 #x5f7491ccbc5be692) (#x6670f214febed1a9 #xacb6fa8a47d7fe48) (#x3e07a690d6d2b85e #x7a3347408980d6e5) (#x479507cc430535d8 #xeb7d7fea6b17433e) (#x5cc7cd77e0938f7e #x13a5fb3cf278e045) (#x7369fde1a274f1f2 #x5b1e97fe843fa2bc) (#x7ae6bb88c3062690 #xb256eb0df31ac395) (#x13f13b9ef0abb577 #xb19808f9e131f068) (#xec2965bcb04b5d53 #x7c6c426badd6b0dc) (#xc61b7b95081c1de5 #x51ff9883e8c508f7) (#x8b7520e47cba5449 #x70d2483de57a7cae) (#x83d6d1c12f875b98 #x3992c4129d242fbd) (#x286ab3b1dcc93313 #xae83f9935be5dc5f) (#xdd49b12eab8aa743 #xa9271c5571aaab8c) (#xda8d320935a4eadc #x4f1f89045c08352a) (#x0bd7ebf105eca4c7 #x6a585f8869d3055d) (#x294604fdee86eba0 #x0e8b094f549eee65) (#xebede69b2e6510cc #x9a54d73a80742e7a) (#xac78e1576d602514 #x7129a8d0eb636d44) (#x5a2ff91c4cf21a52 #x55959eb1d0a14cd9) (#x1fe253486b695c2f #x3df8c220a5406b93) (#x405184ebdd2b7847 #x0d45eabb46b5dd98) (#x1b52cabba396baa6 #xf8d884d6996fa37b) (#x88013a302a6bff5f #x53ca9b9af4f72ae0) (#xf40fb5d3450c4ce3 #xa7ac151a253445e9) (#xe116ba2619c66cb8 #x5004786ee6dc191d) (#xad54561b5f2ffda7 #xd121580ce4185f7e) (#x8fc5b917b445b2c0 #xb5f20ecbd955b446) (#x7bca0cc4f149fe23 #x125e1bd1fc61f1af) (#x34fcfa2de171c42a #xb063e814ef28e182) (#x098f46696172d762 #xe9487cf377256129) (#x45cdaa54279b467d #x686d5c9175e1274a) (#xe5a623d5d1398a31 #x95243e98daf3d1f5) (#x53a0bf752d80cd30 #xbcdde242a7842df0) (#x39c325b748fcf5c1 #x9c0bd211a4224843) (#x62c06be736413720 #x6996bc7c7bf836a0) (#x1dbafed00ff72f8a #xbee8e15bbbb60fe7) (#x3ab73f631e2d5ed7 #xbf1301b6b5af1e0d) (#x818e7c594b19283d #xba82e76983d24bc9) (#x6504e8c0a86f7abf #x8fae292d565aa806) (#xbdd17751f955e3c6 #x43a1835214a4f958) (#x38ef92fb7ab32d72 #x3c0322cdab597a79) (#x5e9f60ef840dfcdb #x90b5d847ec8e8431) (#x1a7e7df791d96215 #x58d0740a96149141) (#x35d04d61d33e1c99 #x106b18c8e053d3b8) (#x2479db67470bda4b #x22e3334a1f9447a4) (#xceb88ab05b211234 #x18bf14ac909b5be4) (#xa683bdea5ac35960 #xbb7907848dcb5a23) (#xd5ea400bf8b7a892 #xe067907a09f4f89f) (#x4d6e5b7174a649ac #x212dd0be0dbf7459) (#x6da719e5fb52756e #xc6eea5022e04fb15) (#x9f40985d123faca1 #x2772d59529e91260) (#xfd80f3ba247e9b81 #x4ee469e9521124c0) (#xb39ab21f0609793b #x4cd16af04e2306d7) (#x7e56227b0bf9c019 #x7776adfbcf350b7d) (#x701de735f4a55ae4 #x7806445995b2f4f2) (#x06e8346bac61952c #x4630658d22d9ac9c) (#xca08134393def4bd #xdd9f525aacb4930c) (#x2a321e29b85740b6 #x2d93dae84513b82b) (#xa7af0aa6688c81d3 #x1b71f75882b06819) (#x6917801633ad93e7 #x03cee3f4122b33fd) (#x9adcb6e2e88f929b #x425a63bf1abde8b2) (#x2fae309642e77e8c #x48bb6cc2764742f9) (#x9d1835c576a1df04 #xa462f6ee371f7614) (#x7992a15c95d78d86 #x914e38aae29795db) (#x9027ea5fdf2ceeef #x880acceb7c15dfd5) (#xfcac44f616314332 #xeeec99355d6a16fa) (#xe03a0d6a2b89b40b #xf00c88b2e9a72b27) (#xb1c21f8762970a9e #xcfc1498b50d562a3) (#x4b866f1ad8c7dc80 #x671db5332f66d8c5) (#x55488b1e81e1581c #xfaed87cf855d816c) (#xae204ccf09fe56b1 #xf2398babf5950930) (#x23bd5840d92597d4 #xc4dba61b3236d902) (#xc1dff8b29632507a #xb7c70dd2c5679651) (#x15190ff55cca205b #xf7a86d74c3e85cf4) (#x304c63de298e22a3 #x7543aee2d307296a) (#x9353f08b89fd45f9 #xab121f4c6d98899b) (#x4aaad856ea880433 #xc71545ef201deaff) (#x5fb3d7a3b6422468 #x30bd289be3f5b60b) (#x48f275ce8e167796 #x440566943eeb8e8b) (#xf657184b21923f46 #x24bc36613bc2219d) (#xaf0cfb833bb18e02 #x52317b77faee3b0a) (#xa1473ecdc4ed14ff #x5d4192d5a069c485) (#x51f812ed491ebe95 #x3fcdc139b9724984) (#x3b9b882f2c628664 #x1f1bf16abad42c37) (#xc443d60d6c826e40 #xd2efbbf8f6336c83) (#x72454aad903b2941 #xfb1667228b449086) (#x03741ad456d1ab16 #x2318d3a7118d564e) (#xcb24a40fa1912c0e #x7d97a286a3cfa136) (#x57102686e57f2bb9 #x79fda4b49babe518) (#x0e4bc54eff5c9afd #x0f70e9a25a87ff8f) (#xdba1854507eb326f #xef1779d853730710) (#xcce027283fbf6191 #x9baf37d78e6d3f90) (#x0258ad98649e73a5 #x8310237b1ef66474) (#xf2e781b8e96dd9cf #xe19c709707ede975) (#xc737ccd93a53c556 #xf1f7685fe7be3acd) (#x4e1a41a52277e2ba #x023503191c322217) (#x1085214aa67a1e61 #x9280db5ef0bca626) (#xc850bedbf7408718 #x5e8f7121b242f778) (#x683b375a01e24b54 #xa3c613281d5001c7) (#xabbc6270f34e688b #x97113d81c6c1f3e2) (#x98841b7a8c11e13e #xc14a40c4044b8cc6) (#xa31f9355a073675a #xde51b1aebe9fa0f1) (#x44e11d1815d49ece #xc865ac4d7a9a1570) (#x58775484286c69f7 #xd685bdcace5728ad) (#x11a996069435c6d2 #x32882b82ffc7941c) (#xe48a9499e3765282 #x352cce44d588e3cf) (#x012cb74c324fd8b3 #xa008f0dc0f7b323a) (#x853ee5aa83e6ceb4 #x7fa2a19fbffd8321) (#x8cb1a3c3e29419d6 #x96eadd6cc8d8e208) (#x5b034e507ebdc2e1 #xf59d6e6ddfda7ee3) (#x20c942948ff43cc2 #xe7c375bc23bb8f4c) (#x270dc1b311da715d #x01fbe0ed0e1911ea) (#x8a5997a84ef58cfa #xd0dab8e1ea014e94) (#xb45e3138982734a4 #xaae9ffa163819871) (#x4c42ec3d46e9911f #x8125206202c44663) (#x64285f8c9a20a20c #x2fa6d9f159219a3c) (#xb6069ca0fcb94701 #x29f9dcda7d77fc05) (#xb0eea8cb50d8d22d #x6fc9b9575fae5099) (#x2291ef0ceb6a4f67 #x64d356c73d4deb38) (#x42092973b9b50be2 #x8e55c9c05843b9ec) (#x4f36f6e910383a09 #xa23df3c51349102d) (#x71315079c6ea8257 #xd80eb4859ac9c6c8) (#x87664832e778bd11 #xfcb282e4a10be755) (#x9c34828944ee07b7 #x046a06323864442e) (#xc387552af2ac23df #x34d72ea9db91f225) (#xf0bf2c208df3aa6a #x628c53ec191b8d01) (#x63ecdcab040eef93 #xc99e4ca07483049a) (#xffd85e2240e0e824 #xcdf44a924ce740b4) (#xeac151d71c2ac87f #x3a5c27e68f0f1c40) (#x949773ac17d30866 #x4d2a8a1d403a173d) (#x1741a26d385453fe #x74b84e0fdd1e3880) (#x841252e6b1a91607 #xdfaa5143b086b11b) (#x595be3c81a23b144 #x768d4d16c12c1a97) (#x2e8287da70a8a63f #xe8b39c1e793c70c3) (#x25556c2b754402f8 #x82ebc39610ef759e) (#x3214ce464d105106 #xf6538d99cdf14d1e) (#xd9f928dd637541ca #x6c075aa34d856364) (#xfb68c7d1881f0ead #x08d40c6470c8885c) (#x82fa668d1dc8832b #x999a34ce925f1d87) (#xe262a0f24f17c7ae #x731cabc9f7514f53) (#xcdcc90640df0b922 #x3ba7c70b81160daa) (#x1c96499c3db8f739 #x1ee01187b4cd3ddd) (#x7581c98a0e1564de #x1d2ef273a6e60e20) (#xfa44709dba50d61e #xa8dcfcb87fb3ba66) (#xd0766eb4020796a8 #x854f26503aa0024d) (#x0c1368d69bc2e958 #x8c60cad944719bfb) (#xb2b605533446a188 #xecd99a2c415834ed) (#x2cda2a421436d59a #x6ba3bf6567ca14b7) (#xe9b54b034afb6369 #x1944f4419e824a0e) (#x9bf001aedac04a28 #xe252936315c6da88) (#x8d9d148fd0dbc165 #x36e22db0c7a3d032) (#x95bbc4e0259cd0d5 #xed227ac14f412507) (#xf3cb36f4db22017c #x4194804b0896db4f) (#x7c0e8fe36f67b3bc #xf4668e80d1c36f09) (#xaa90d53cc101b038 #x3719cd5dc9bac1d8) (#xb961eea231aa054f #x8681c5a4288b31b0) (#xed05d2f0820485e0 #xdc64b2b7a2ad82e6) (#xe6d2390187e82127 #xb63ced3fcb7e87bb) (#xa5f7a73e0c12f276 #x9861d4239c460c6d) (#x6ed30331ad83de78 #xe5f676a53f89ad5b) (#x04b099f3c8ffe689 #xc52046f63c2fc8e8) (#x99a8ac36be5e398d #x6142b0180b30befc) (#x54643c52b3ae80af #x5ae577138a26b356) (#x07c483279e2e4d9f #xe63895512da29ea6) (#xd69e5adfae660384 #xc37f43dd1879aed1) (#xdf111cb6cf14d4e6 #x2a373f2e6f5ccff8) (#x6a639ac2657c38f1 #x20d6305303a665b3) (#xbf89dac99dcb9063 #xc0b1a0290a529d2c) (#x43259e3f8bfad351 #x2e5d391c57388bd6) (#x76f5d35e58c4cfc8 #x3e3621d4b76b586e) (#x190a6723c708c903 #x7bc8a7ad8799c70f) (#x3f2b11dce49d60ed #xda3bb79c86fbe4df) (#x97e369784102a370 #x6e3259ba51b74173) (#x3788e0f9b7a06f3c #x937b3bb3fea5b7cc) (#x80a2cb157956f08e #x1a8a17b58ca979f3) (#xf1939b6cbfbc72d9 #xc284a3301660bf3b) (#x3160d4921bc1fa10 #xd54b5e3edc7c1b50) (#x675c4558ccf1091a #x0cbe0a5648accc72) (#xa8c878a4a59fc39d #xb409ee26d74ca5ac) (#x262176ff2395a9ee #xa1f31031016223d0) (#x6fffb47d9fcc06cb #x45fe867930f29f61) (#xfef4e96e72af3097 #x6dfcba4e439c728e) (#xc0f34ffea47d88c9 #x17cffd0eca1ca46b) (#xd8d59f91513a9979 #xcc0faa7f42fe515e) (#xb72a2beccef69fb2 #x89f12c06720cce3f) (#x78be1610a7985535 #x3146c876edeca7e1) (#xc2abe266c0e3fb6c #x94dfde75d4eac01f) (#x1ecee4045926849c #x9df032fcaa3b59a9) (#xd15ad9f830484e1b #x2547d68c35db3077) (#x2b1ea9658a189805 #x8d9b2a344a688a11) (#xf523029f77439450 #x07a4e5c62a4f77d3) (#xdc65066299c57ff0 #x092fec897ed199b6) (#x08a3f125533d0fd1 #x49408c2f785e5313) (#x9e6c2f1120707412 #x877a25492692205a) (#xcf943dfc696eca87 #xb8b7e4709fe069de) (#xf9306a49ec817d08 #x8bc42f1f6e3eec28) (#xba15f476677bae59 #xa5991603390667fe) (#xb84d59ee03e5ddfc #x2689357827f0038a) (#xd4c6f747caf87021 #x406f60a6068fcaa5) (#x6098c67f52df4485 #xea869f07650e52d4) (#xde3dabfafd5b0c55 #x8a3fcff26027fdc2) (#x0f677202cd13424e #xaf78197e55fccdb5) (#x892d8d7c182427ec #xf3c26b46fb8c18da) (#x3c5f0b08b24ccbfb #xf923643b9776b291) (#x61b4713360909c36 #x4a8e6fdb6a7560ee) (#xbcfdc01dcb1a3b75 #xe3a9738e1bdfcb62) (#xd7b2ed939c29db37 #x6377b30117029ceb) (#x910b5d13ed63365c #x28023c37736eedef) (#xee71c824d4d52ef6 #xff7c6110b320d4a8) (#x417d33a7ef64a0f4 #xad4d1a6749ceefa2) (#x5deb7a3bd2dc57cd #xb3ad0be0fd03d27f) (#x46b9b080714aed6b #x4b758f36646c7104) (#x864aff7ed53765a2 #x5cba7238ae70d56f) (#x0000000000000000 #x0000000000000000) (#x7f7a953739b618aa #xd77e5d27c04e3947) (#x21e5f5d8bdbbe471 #x47cb85602cc0bd76) (#x6b4f2d8e5733e042 #x80dec08f0cdd5789)) ((#xa5f8edb8b8bf36c2 #x5c52844aa52d6aff) (#x2d380a9a9ad18b95 #x4ddb24972d2fc673) (#x32db72eded5430a6 #x972657bc3228a762) (#x8f5c58535312cf27 #xc84a72e18f49071d) (#x0efbbde2e2f8e4e0 #x714567780e9695e1) (#x30fe4d0c0c315186 #x067c812e309857c3) (#x386ab10e0e661606 #x07d75f23381d1102) (#xc07ef73030c4875d #x183341b8c0259f8a) (#x548ba91515993109 #xeb302f9554c8da07) (#xe604c0d8d8f4fb78 #x6c3406f9e6679728) (#x9e449dc6c66f90f4 #x63f266b29ed8f3ed) (#x39994f9f9fb5c716 #xaefa346a394569b3) (#x55785784844ae019 #x421d44dc5590a2b6) (#x7e2f1cfefe34c8ec #x7f28d93e7eacb7e5) (#x52e4e8f5f5369269 #x9bde96e052db0927) (#x914cdeb5b544a504 #xbb9a6a8391161ebd) (#x6475e41919a8608f #xed4caebb64508dc4) (#x03d6c17070b6b030 #x3877bddb03e88810) (#x575d6865652f8139 #xd347924e57205217) (#x5a7014f7f761d5e9 #x9a7548ed5a5e4fe6) (#x1c35b90707330b03 #xe28acef01cefe901) (#x603f9a181862a2cf #x0cf8c15c60f3ae45) (#x079cbf71717c7270 #xd9c3d23c074bab91) (#x187fc70606f9c943 #x033ea117184cca80) (#x21e68899994c0e55 #xadc4957d2109a333) (#x72f19efdfda94d2c #x9f3768d4728ad2a5) (#xa8d5912a2af16212 #x15605ee9a853770e) (#xd16632a5a5b9d88e #xb38b55ebd1b46b7a) (#x2972749b9b1b49d5 #xac6f4b70298ce5f2) (#xc611b6d0d06b243d #x68ddf8cdc6364caa) (#xa40b1329296ce7d2 #xf57fef03a475124e) (#x3ff60e7f7f1a6476 #xde148d1f3f56ba93) (#xe06b8138385b5818 #x1cdabf8ce0744408) (#x2789c97979e3ad35 #xdd2a2c08271a7013) (#x8d7967b2b277ae07 #x5910a4738df9f7bc) (#x0cde8203039d85c0 #xe01fb1ea0c266540) (#x827124c1c15c9bf7 #x8178a84282371aec) (#xeada42dbdb697eb8 #x8c2bb713ea41f268) (#xaebad0caca5ec172 #x658ee79cae40a42e) (#xb4e0282d2dc26911 #xf7ea9019b4bc9e0f) (#x9a0ee3c7c7a552b4 #x824609559a7bd06c) (#x63e95b6868d412ff #x348f7c87631b2655) (#x494dee838379eb1a #xa0978a2c497f4bb7) (#xe5d201a8a8424b48 #x5443bb22e58f1f38) (#x420fd3f1f1981caa #x994be9fa42128566) (#xe421ff3939919a58 #xfd6ed06be4d76789) (#x1552bb9494b79d93 #x4a0c7bb41532d771) (#xb736e95d5d74d921 #xcf9d2dc2b754161f) (#xc8ea0b323293c0dd #x19989fb5c8a0d94b) (#x066f41e0e0afa360 #x70eeb9750613d320) (#x70d4a11c1ccc2c0c #x0e6dbe46703a2204) (#x9d925cb6b6d920c4 #x5b85db699d307bfd) (#x41d91281812eac9a #xa13c542141fa0d76) (#x756d218c8cd53f5c #x46f4bae875c17934) (#x198c3997972a1853 #xaa13ca5e1914b231) (#xc919f5a3a34011cd #xb0b5f4fcc9f8a1fa) (#xaaf0aecbcb940332 #x843a887baae387af) (#xfc5e383f3f68531b #xfe50717cfc9bad09) (#x4d07908282b3295a #x4123e5cb4ddc6836) (#xbfa2155f5f239ea1 #xce36f3cfbfd150de) (#x2aa4b5ebebadf9e5 #x9418f6ab2a646de2) (#x7302606c6c7a9c3c #x361a039d73d2aa14) (#x841e652121f33897 #xf19611378424c9cc) (#xd52c4ca4a4731ace #x523f3a0cd51748fb) (#xc3a836404072376d #x2044fc63c3cd179a) (#xaf492e5b5b8d1062 #xcca38cd5af18dc9f) (#x2b574b7a7a7e28f5 #x3d359de22b3c1553) (#x863b5ac0c09659b7 #x60ccc7a58694396d) (#xa7ddd25959da57e2 #xcd0852d8a79d9a5e) (#xb159a8bdbddb7a41 #xbf7394b7b147c53f) (#xb28f69cdcd6dca71 #x8704296cb2af4d2f) (#x5b83ea6666b204f9 #x335823a45b063757) (#x4645adf0f052deea #x78ff861d46b1a6e7) (#xd3430d4444dcb9ae #x22d18379d3049bdb) (#x9fb7635757bc41e4 #xcadf0dfb9f808b5c) (#xfdadc6aeaebb820b #x577d1a35fdc3d5b8) (#xd4dfb23535a0cbde #xfb125145d44f304a) (#x0f084373732b35f0 #xd8680c310fceed50) (#x9c61a227270af1d4 #xf2a8b0209c68034c) (#x2f1d357b7bb4eab5 #xdc81f2052f9f36d2) (#x9bfd1d56567683a4 #x2b6b621c9b23a8dd) (#x43fc2d60604bcdba #x306682b3434afdd7) (#xef63c24b4b706de8 #xc4b2b3bdefbaa958) (#xd9f2cea7a7ee9f0e #xb2208be6d9312dbb) (#x79b3a38f8f48ba9c #xa6eb0b0279e71c74) (#xb6c517cccca70831 #x66b0468bb60c6eae) (#x5317166464e54379 #x32f3fda953837196) (#x7fdce26f6fe719fc #xd605b2777ff4cf54) (#xc18d09a1a117564d #xb11e2af1c17de73b) (#xf080ba3c3cf5d6db #x1e4fc096f0bdc849) (#x23c3b77878296f75 #x3c9e43ef23b95392) (#xe7f73e4949272a68 #xc5196db0e73fef99) (#x25acf6989886cc15 #x4c70fa9a25aa80b2) (#x5e3a6af6f6ab17a9 #x7bc1270a5efd6c67) (#xb513d6bcbc11b801 #x5ec7fb50b5e4e6be) (#x1e1086e6e6566a23 #x73d018621e5f19a0) (#xa26452c9c9c344b2 #x85915676a266c16e) (#xdf9d8f4747413c6e #xc2ce3293df22fe9b) (#xa62e2cc8c80986f2 #x64253991a6c5e2ef) (#xfe7b07dede0d323b #x6f0aa7eefe2b5da8) (#xac9fef2b2b3ba052 #xf4d4310eacf0548f) (#x223049e9e9fabe65 #x95b328a622e12b23) (#xf9e7b8afaf71404b #xb6c975d2f960f639) (#xe24ebed9d93e3938 #x8d80691ee2c4b4a9) (#x4a9b2ff3f3cf5b2a #x98e037f74a97c3a7) (#xbc74d42f2f952e91 #xf6414e14bc39d8ce) (#x3547cd9c9c2842d6 #x4ee5858035630cf3) (#xcacf34d3d3f6a1fd #x88c24927ca1029ea) (#xee903cdadaa3bcf8 #x6d9fd8f4eee2d1e9) (#x78405d1e1e9b6b8c #x0fc6604b78bf64c5) (#x05b9809090191350 #x489904ae05fb5b30) (#x6b7da76a6a83557f #x3524a28a6b9e6094) (#x5132298585802259 #xa3a92b3b51338137) (#xe1987fa9a9888908 #xb5f7d4c5e12c3cb9) (#x59a6d58787d765d9 #xa202f53659b6c7f6) (#xa397ac58581095a2 #x2cbc3d3fa33eb9df) (#xf2a585dddd90b7fb #x8f151604f20d38e8) (#x71275f8d8d1ffd1c #xa740d50f71625ab5) (#x56ae96f4f4fc5029 #x7a6af90756782aa6) (#x1118c595957d5fd3 #xabb814531191f4f0) (#x6a8e59fbfb50846f #x9c09c9c36ac61825) (#x893319b3b3bd6c47 #xb8a4cb94895ad43d) (#x94f55e25255db654 #xf3036e2d94ed458d) (#x65861a88887bb19f #x4461c5f26508f575) (#x8c8a992323a47f17 #xf03dcf3a8ca18f0d) (#xbbe86b5e5ee95ce1 #x2f829c28bb72735f) (#x77481e6d6db05e7c #xd7ae6c7a77718995) (#x3c20cf0f0facd446 #xe66330c43cbe3283) (#x7b969c6e6e2ddbbc #x37b1dd907b57ecd5) (#x28818a0a0ac898c5 #x0542203928d49d43) (#xab03505a5a47d222 #x2d17e332abbbff1e) (#xd2b0f3d5d50f68be #x8bfce830d25ce36a) (#x310db39d9de28096 #xaf51ea6731c02f72) (#xde6e71d6d692ed7e #x6be359dade7a862a) (#xc4348931310e451d #xf9872e5fc486bc0b) (#x5fc994676778c6b9 #xd2ec4c435fa514d6) (#xcca075333359029d #xf82cf052cc03faca) (#xcf76b44343efb2ad #xc05b4d89cfeb72da) (#x76bbe0fcfc638f6c #x7e8307337629f124) (#x2ccbf40b0b025a85 #xe4f64fde2c77bec2) (#xb83eaa2e2e5fecd1 #x17f521f3b89afb4f) (#xd8013036363d4e1e #x1b0de0afd869550a) (#x2eeecbeaea673ba5 #x75ac994c2ec74e63) (#x36910cecec9ef2e6 #x7692385b368b84e3) (#xdbd7f146468bfe2e #x237a5d74db81dd1a) (#x6958988b8be6345f #xa47e7418692e9035) (#xb37c975c5cbe1b61 #x2e294225b3f7359e) (#x14a1450505644c83 #xe32110fd146aafc0) (#x9506a0b4b48e6744 #x5a2e056495b53d3c) (#xbe51ebcecef04fb1 #x671b9886be89286f) (#x621aa5f9f907c3ef #x9da217ce62435ee4) (#xa1b293b9b975f482 #xbde6ebada18e497e) (#x3bbc707e7ed0a636 #x3fa0e2f83bf59912) (#x16847ae4e4012da3 #x727bc66f16da5f61) (#x6650dbf8f8cd01af #x7c16782966e07d65) (#xe90c83ababdfce88 #xb45c0ac8e9a97a78) (#x5c1f551717ce7689 #xea9bf1985c4d9cc6) (#x6ce1181b1bff270f #xece770b66cd5cb05) (#x6d12e68a8a2cf61f #x45ca1bff6d8db3b4) (#xad6c11babae87142 #x5df95a47ada82c3e) (#x3762f27d7d4d23f6 #xdfbf531237d3fc52) (#x61cc648989b173df #xa5d5aa1561abd6f4) (#x4b68d162621c8a3a #x31cd5cbe4bcfbb16) (#xb9cd54bfbf8c3dc1 #xbed84abab9c283fe) (#xe3bd404848ede828 #x24ad0257e39ccc18) (#xba1b95cfcf3a8df1 #x86aff761ba2a0bee) (#xf17344adad2607cb #xb762abdff1e5b0f8) (#xa0416d2828a62592 #x14cb80e4a0d631cf) (#x85ed9bb0b020e987 #x58bb7a7e857cb17d) (#x8382da50508f4ae7 #x2855c30b836f625d) (#xda240fd7d7582f3e #x8a57363ddad9a5ab) (#x47b6536161810ffa #xd1d2ed5447e9de56) (#xc5c777a0a0dd940d #x50aa4516c5dec4ba) (#xb0aa562c2c08ab51 #x165efffeb01fbd8e) (#x33288c7c7c87e1b6 #x3e0b3cf53370dfd3) (#xfa3179dfdfc7f07b #x8ebec809fa887e29) (#x96d061c4c438d774 #x6259b8bf965db52c) (#x6f37d96b6b49973f #xd490cd6d6f3d4315) (#x6ec427fafa9a462f #x7dbda6246e653ba4) (#xc25bc8d1d1a1e67d #x8969972ac2956f2b) (#xf6effbdcdc5a75bb #x6ea179e3f6ae1b69) (#x50c1d7141453f349 #x0a844072506bf986) (#xff88f94f4fdee32b #xc627cca7ff732519) (#x5decab86861da799 #x43b69ad15d15e477) (#xa9266fbbbb22b302 #xbc4d35a0a90b0fbf) (#x8eafa6c2c2c11e37 #x616719a88e117fac) (#x1777847575d2fcb3 #xdb56ad26178227d0) (#x1ba90676764f7973 #x3b491ccc1ba44290) (#x97239f5555eb0664 #xcb74d3f69705cd9d) (#x7df9dd8e8e8278dc #x475f64e57d443ff5) (#xecb5033b3bc6ddd8 #xfcc50e66ec522148) (#x58552b161604b4c9 #x0b2f9e7f58eebf47) (#xf71c054d4d89a4ab #xc78c12aaf7f663d8) (#x1fe378777785bb33 #xdafd732b1f076111) (#xfbc2874e4e14216b #x2793a340fbd00698) (#x7c0a231f1f51a9cc #xee720fac7c1c4744) (#x0967029393849690 #xa886b54409dd3e70) (#x0d2d7c92924e54d0 #x4932daa30d7e1df1) (#x7a6562fffffe0aac #x9e9cb6d97a0f9464) (#x67a32569691ed0bf #xd53b136067b805d4) (#x45936c8080e46eda #x40883bc645592ef7) (#x87c8a451514588a7 #xc9e1acec87cc41dc) (#xdc4b4e3737f78c5e #xfab98f48dcca768b) (#xe8ff7d3a3a0c1f98 #x1d716181e8f102c9) (#x4f22af6363d6487a #xd07933594f6c9897) (#x1dc6479696e0da13 #x4ba7a5b91db791b0) (#x4ed151f2f205996a #x795458104e34e026) (#x044a7e0101cac240 #xe1b46fe704a32381) (#xeb29bc4a4abaafa8 #x2506dc5aeb198ad9) (#xf814463e3ea2915b #x1fe41e9bf8388e88) (#xf3567b4c4c4366eb #x26387d4df3554059) (#x3e05f0eeeec9b566 #x7739e6563e0ec222) (#x3dd3319e9e7f0556 #x4f4e5b8d3de64a32) (#xbd872abebe46ff81 #x5f6c255dbd61a07f) (#x8ae5d8c3c30bdc77 #x80d3764f8ab25c2d) (#x88c0e722226ebd57 #x1189a0dd8802ac8c) (#xddb8b0a6a6245d4e #x5394e401dd920e3a) (#xcd538ba2a28ad38d #x51019b1bcd5b827b) (#x0b423d7272e1f7b0 #x39dc63d60b6dced1) (#x133dfa7474183ef3 #x3ae2c2c113210451) (#x982bdc2626c03394 #x131cdfc798cb20cd) (#x02253fe1e1656120 #x915ad69202b0f0a1) (#x9369e1545421c424 #x2ac0bc1193a6ee1c) (#x80541b202039fad7 #x10227ed08087ea4d) (#x90bf202424977414 #x12b701ca904e660c) (#xd095cc34346a099e #x1aa63ea2d0ec13cb) (#x245f080909551d05 #xe55d91d324f2f803) (#x34b4330d0dfb93c6 #xe7c8eec9343b7442) (#xcb3cca42422570ed #x21ef226ecb48515b) (#xed46fdaaaa150cc8 #x55e8652fed0a59f9) (#xf4cac43d3d3f149b #xfffbaf71f41eebc8) (#xce854ad2d23c63bd #x697626c0ceb30a6b) (#x99d822b7b713e284 #xba31b48e9993587c) (#x10eb3b0404ae8ec3 #x02957f1a10c98c41) (#x446092111137bfca #xe9a5508f44015646) (#x402aec1010fd7d8a #x08113f6840a275c7) (#x929a1fc5c5f21534 #x83edd75892fe96ad) (#x3a4f8eefef037726 #x968d89b13aade1a3) (#x01f3fe9191d3d110 #xa92d6b49015878b1) (#x267a37e8e8307c25 #x74074741264208a2) (#x12ce04e5e5cbefe3 #x93cfa98812797ce0) (#x1a5af8e7e79ca863 #x926477851afc3a21) (#x48be101212aa3a0a #x09bae16548273306) (#x68ab661a1a35e54f #x0d531f516876e884) (#xf5393aacacecc58b #x56d6c438f5469379) (#x81a7e5b1b1ea2bc7 #xb90f159981df92fc) (#x8b16265252d80d67 #x29fe1d068bea249c) (#xc7e2484141b8f52d #xc1f09384c76e341b) (#xd6fa8dd4d4c5aafe #x6a4887d7d6ffc0eb) (#x20157608089fdf45 #x04e9fe342051db82) (#x0ab1c3e3e33226a0 #x90f1089f0a35b660) (#x0894fc0202574780 #x01abde0d088546c1) (#x0000000000000000 #x0000000000000000) (#x4cf46e131360f84a #xe80e8e824c841087) (#xd709734545167bee #xc365ec9ed7a7b85a) (#x749edf1d1d06ee4c #xefd9d1a174990185)) ((#xaf9c5ba61820cad8 #x8c3b858c801dd978) (#x186806c54c511069 #xa1f57ca187b731bf) (#xb8cd2eb09a1bd0c0 #x210329216cdfbeb7) (#x61d989a2abe6ffba #xaa6069aa1edca142) (#x6f5a6b413ded4a16 #xcd9fe3cd32ec92c9) (#xecd33bab52790987 #x0eb0490e273c4fd9) (#x7fab6fc7f432eb58 #xb2390ab2c8360da2) (#x36caece98b272459 #x3885e7389cf0ffe2) (#x5f8a6708a54f6ac4 #x4cb61b4cff41f074) (#xc3cb40b7cd6e826a #xfcf288fc7b3ee47f) (#xae26ca9640417505 #xe709dfe7c758bc83) (#x55a4842b9003669a #x44813a440ca69495) (#x75858ce4c17ee706 #xba0e2bba3bd16943) (#x91cfb50c16895fa6 #x6aedf76a6180884e) (#xa3a858253ee9c20d #x3da0bb3d22a720c6) (#xeb734a3b199db2d1 #xdc2e0cdc3124b77d) (#xb3595ca3f7366343 #x42065242d87dbfad) (#x7e11fef7ac535485 #xd90b50d98f736859) (#x219b99ff091c3e41 #x95bd4b957032982d) (#x30d00c4998a220d2 #x8129f881cdad62bd) (#xdeb4d6827a19942c #x59fd0559641be751) (#x1b657695a4f212cd #x1ca3921c4e789e71) (#xd62dd4c1ff97250b #x87ae908719764985) (#x7688fcb429dde5a2 #x0758c507f21ec68d) (#x232c789fb9de8338 #x43d9ff43feb85218) (#xaa8bcb56e306ccf7 #x88c17488188febe9) (#xbed7ce10899ed44b #x98af36983d8223e8) (#xf935afdd6080aee6 #x75ec51754574e223) (#xb0542cf31f9561e7 #xff50bcff11b21063) (#xcae8d3c410818c90 #x4993474941162f50) (#x8593b04a7c11471a #x7a83b57a448d404f) (#xa986bb060ba5ce53 #x35979a35d1404427) (#x3fe97f9a56c82aa3 #x8de4288da6d834cd) (#xdf0e47b222782bf1 #x32cf5f32235e82aa) (#x35c79cb9638426fd #x85d30985553f502c) (#x3b447e5af58f9351 #xe22c83e2790f63a7) (#x70921c143a58e129 #xbef4dabea3435bd2) (#xf88f3eed38e1113b #x1ede0b1e023187d8) (#x42f5f13d12387c82 #xe9b996e9e064f35a) (#x60631892f3874067 #xc15233c15999c4b9) (#x061ae0a01385048b #xb9ac1fb9515d9d5f) (#x6574886208a14648 #xc5a8c2c5c10bf628) (#xab315a66bb67732a #xe3f32ee35fca8e12) (#xbddabe40613dd6ef #x25f9d825f44d8c26) (#x4658f0fdb17fc570 #x86713d863fb3a430) (#x97d555ac050c5b2d #xd341e8d330dd1511) (#x67c36902b863fb31 #x13cc76134f813c1d) (#x1e72e6655fd414e2 #x18596318d6eaace0) (#xa5b2b8852d6cc686 #x840ca48473fabd99) (#xfc223f2d9ba6a8c9 #x7116a071dde6d0b2) (#xfe95de4d2b6415b0 #xa77214a7536c1a87) (#xd0373461ec122180 #x3e028f3e482bd4da) (#x38490e0a1d2c91f5 #x5f7a6d5fb0c0cc69) (#x7ca61f971c91e9fc #x0f6fe40f01f9a26c) (#x5c8717584dec6860 #xf1e0f5f1368e5fba) (#x8fbd5369495d4b44 #x72b49472b76a24ae) (#xeac9db0b41fc0d0c #xb71c56b77661d286) (#xe15da9182cd1be8f #xd4192dd4c2c3d39c) (#x030d7050e8a302a4 #xbd56eebdc9cfafce) (#x8d0ab209f99ff63d #xa4d020a439e0ee9b) (#xce45d204b3c63562 #x265bec269ec1783a) (#x808420ba87374135 #x7e79447edc1f72de) (#x8cb02339a1fe49e0 #xcfe27acf7ea58b60) (#x510985eb3344df68 #x2b49912bd371c3ff) (#x48db121e277470dc #xe18eb7e1138397bb) (#x68fa1ad17609f140 #x1f01a61f24f46a6d) (#xe44a39e8d7f7b8a0 #xd0e3dcd05a51e10d) (#xd8ae3622699c90a7 #xe0511ae035467a0e) (#xfb824ebdd042139f #xa388e5a3cbfe2816) (#xe250d948c472bc2b #x694fc3690b0c7c52) (#x9c4127bf6821e8ae #xb04493b0847f140b) (#x1adfe7a5fc93ad10 #x7791c877093dfb8a) (#xee64dacbe2bbb4fe #xd8d4fdd8a9b685ec) (#xad2bbac6a8e277a1 #x5a5f315a0e97134d) (#x8429217a2470f8c7 #x11b1ef1103c825b4) (#xcb5242f448e0334d #x22a11d2206534aab) (#x7b066e07577552aa #xddf1a1dd17e15ac8) (#x455580ad59dcc7d4 #x3b27d33bf67c0bfe) (#xfa38df8d8823ac42 #xc8babfc88cbb4ded) (#x4c7613de8433c92e #x8e461c8ecc54c0d1) (#x2c150b4c77b48949 #x4f142f4f95cd0468) (#x6c571b11d54e48b2 #x70c90d70fb233d07) (#x7abcff370f14ed77 #xb6c3fbb650a43f33) (#x6a4dfbb1c6cb4c39 #xc96512c9aa7ea058) (#x47e261cde91e7aad #xed4367ed78f6c1cb) (#x347d0d893be59920 #xeee153ee127a35d7) (#x89a7b3c95ad84fcf #xcb188bcbe637b9f1) (#xbbc05ee072b8d264 #x9c55c79ca5101179) (#x1cc50705ef16a99b #xce3dd7ce586066d5) (#xda19d742d95e2dde #x3635ae36bbccb03b) (#x77326d8471bc5a7f #x6c6a9f6cb55ba376) (#xe9c4ab5ba95f0fa8 #x0a4ab80abfae7d48) (#x8b1052a9ea1af2b6 #x1d7c3f1d68bd73c4) (#x98ec267fcb66515c #xdf8c38df5ba84361) (#x4a6cf37e97b6cda5 #x37ea03379d095d8e) (#x8aaac399b27b4d6b #x764e65762ff8163f) (#x79b18f67e7b7efd3 #x0b95150b996b90fd) (#x966fc49c5d6de4f0 #xb873b2b8779870ea) (#xd18da551b4739e5d #x5530d5550f6eb121) (#xb543bc03e4b367c8 #xfbaa4dfb892022f2) (#x16ebe426da5aa5c5 #xc60af6c6ab870234) (#x5d3d8668158dd7bd #x9ad2af9a71cb3a41) (#x636e68c21b2442c3 #x7c04dd7c90566b77) (#x6bf76a819eaaf3e4 #xa25748a2ed3bc5a3) (#xd520a491173427af #x3af87e3ad0b9e64b) (#xf31b4cfe55cca2b8 #x7ddb707db69386c2) (#x6ee0fa71658cf5cb #xa6adb9a675a9f732) (#xf1acad9ee50e1fc1 #xabbfc4ab38194cf7) (#x50b314db6b2560b5 #x407bcb409434a604) (#x6ded8a218d2ff76f #x1bfb571bbc6658fc) (#x8233c1da37f5fc4c #xa81df0a85295b8eb) (#xf60cdc0eaeeaa497 #x792181792e01b453) (#xddb9a6d292ba9688 #xe4abebe4add4489f) (#x15e6947632f9a761 #x7b5c187b6248adfa) (#x4ec1f2be34f17457 #x5822a85842de0ae4) (#x53be648b83866211 #xfd2d25fd5dfb09ca) (#x8e07c259113cf499 #x1986ce19f02f4155) (#xd49a35a14f559872 #x51ca245197fc83b0) (#x0b9472136d2db383 #x63057b63b4a2011a) (#xcfff4334eba78abf #x4d69b64dd9841dc1) (#xdc0337e2cadb2955 #x8f99b18fea912d64) (#x9dfbb68f30405773 #xdb76c9dbc33a71f0) (#x69408be12e684e9d #x7433fc7463b10f96) (#x9956b74f9307ee81 #xb4be62b41ced269a) (#x1fc8775507b5ab3f #x736b397391afc91b) (#x2536983faa5b87b3 #xfa75e0faafe5cf47) (#x28b80a8cd4f330bb #x20dc84204a1a5302) (#xd79745f1a7f69ad6 #xec9ccaec5e332c7e) (#x13fc74d6217ca3ea #xc2f007c2331530a5) (#x9a5bc71f7ba4ec25 #x09e88c09d5228954) (#xc0c630e725cd80ce #x41a46641b2f14bb1) (#x8724512accd3fa63 #xace701acca078a7a) (#xc6dcd04736488445 #xf80879f8e3acd6ee) (#xbc602f70395c6932 #x4ecb824eb308e9dd) (#x9ef6c6dfd8e355d7 #x662027660af5de3e) (#xb2e3cd93af57dc9e #x293408299f38da56) (#x0d8e92b37ea8b708 #xdaa964dae5ff9c45) (#x739f6c44d2fbe38d #x03a234036a8cf41c) (#x02b7e160b0c2bd79 #xd664b4d68e8aca35) (#x3267ed2928609dab #x574d4c574327a888) (#x5b2766c80608d336 #x237eb0232096a71e) (#x4042105da2fac1fb #x3fdd223f6eee396f) (#x6679f832e00244ec #x78fe2c7808c459e6) (#x10f10486c9dfa14e #x7fa6e97ffada9f6b) (#x3e53eeaa0ea9957e #xe6d672e6e19d5136) (#xa212c91566887dd0 #x5692e15665e2453d) (#xb64ecc530c10656c #x46fca34640ef8d3c) (#x4dcc82eedc5276f3 #xe57446e58b11a52a) (#x434f600d4a59c35f #x828bcc82a72196a1) (#xa70559e59dae7bff #x52681052fd7077ac) (#x4f7b638e6c90cb8a #x3310f233059b6f1f) (#x07a071904be4bb56 #xd29e45d21618f8a4) (#x01ba91305861bfdd #x6b325a6b474565fb) (#x19d297f51430afb4 #xcac726cac0f25444) (#xe74749b83f54ba04 #x6db5326d939e4ec3) (#x869ec01a94b245be #xc7d55bc78d42ef81) (#xccf233640304881b #xf03f58f0104bb20f) (#x202108cf517d819c #xfe8f11fe3777fdd6) (#x0a2ee323354c0c5e #x08372108f3e764e1) (#x3ce40fcabe6b2807 #x30b2c6306f179b03) (#x3afeef6aadee2c8c #x891ed9893e4a065c) (#x316a9d79c0c39f0f #xea1ba2ea8ae80746) (#xff2f4f7d7305aa6d #xcc404ecc14297f7c) (#x71288d2462395ef4 #xd5c680d5e4063e29) (#x41f8816dfa9b7e26 #x54ef785429ab5c94) (#x0f3973d3ce6a0a71 #x0ccdd00c6b755670) (#xf0163caebd6fa01c #xc08d9ec07f5c290c) (#x2daf9a7c2fd53694 #x24267524d2886193) (#xa6bfc8d5c5cfc422 #x395a4a39ba351257) (#x5a9df7f85e696ceb #x484cea4867d3c2e5) (#x145c05466a9818bc #x106e4210250dc801) (#xc46b3127868a393c #x2e6ccd2e6d261cdb) (#xb4f92d33bcd2d815 #x90981790ce654709) (#xc85f32a4a04331e9 #x9ff7f39fcf9ce565) (#x92c2c55cfe2a5d02 #xd7bb19d7a84f2780) (#x1d7f9635b7771646 #xa50f8da51f25032e) (#x3d5e9efae60a97da #x5b809c5b2852fef8) (#x5e30f638fd2ed519 #x27844127b804958f) (#x743f1dd4991f58db #xd13c71d17c940cb8) (#x62d4f9f24345fd1e #x17368717d7130e8c) (#x263be86f42f88517 #x47230e47662a6089) (#xf7b64d3ef68b1b4a #x1213db126944d1a8) (#x9f4c57ef8082ea0a #x0d127d0d4db0bbc5) (#xe6fdd888673505d9 #x06876806d4db2b38) (#x94d825fcedaf5989 #x6e17066ef912badf) (#x4bd6624ecfd77278 #x5cd8595cda4c3875) (#x33dd7c1970012276 #x3c7f163c0462cd73) (#x08990243858eb127 #xde5395de7d6daed4) (#x17517516823b1a18 #xad38acadecc267cf) (#xefde4bfbbada0b23 #xb3e6a7b3eef3e017) (#x04ad01c0a347b9f2 #x6fc8ab6fdfd7576a) (#x64ce195250c0f995 #xae9a98ae864e93d3) (#x0c34038326c908d5 #xb19b3eb1a2baf9be) (#xa0a52875d64ac0a9 #x80f65580eb688f08) (#x37707dd9d3469b84 #x53b7bd53dbb59a19) (#xc5d1a017deeb86e1 #x455e97452a637920) (#xb977bf80c27a6f1d #x4a31734a2b9adb4c) (#x114b95b691be1e93 #x1494b314bd9ffa90) (#x39f39f3a454d2e28 #x34483734f785a992) (#xcd48a2545b6537c6 #x9b0d029b570ed7f4) (#x9075243c4ee8e07b #x01dfad0126c5edb5) (#xf2a1ddce0dad1d65 #x16e92a16f1d6e339) (#xe87e3a6bf13eb075 #x6178e261f8eb18b3) (#xac912bf6f083c87c #x316d6b3149d276b6) (#x5713654b20c1dbe3 #x92e58e92822c5ea0) (#xf4bb3d6e1e2819ee #xaf4535afa08b7e66) (#x7d1c8ea744f05621 #x645dbe6446bcc797) (#xa83c2a3653c4718e #x5ea5c05e960521dc) (#xd280d5015cd09cf9 #xe8663be8c6a11eef) (#x4961832e7f15cf01 #x8abced8a54c6f240) (#xa40829b5750d795b #xef3efeef34bfd862) (#x838950ea6f944391 #xc32faac315d0dd10) (#xfd98ae1dc3c71714 #x1a24fa1a9aa3b549) (#xd914a71231fd2f7a #x8b63408b72031ff5) (#xe3ea48789c1303f6 #x027d99024c4919a9) (#xb7f45d635471dab1 #x2dcef92d07aae8c7) (#xc271d187950f3db7 #x97c0d2973c7b8184) (#x2781795f1a993aca #x2c11542c216f0572) (#xed69aa9b0a18b65a #x6582136560792a22) (#x9be1562f23c553f8 #x62dad6629267ecaf) (#x5204f5bbdbe7ddcc #x961f7f961abe6c31) (#x541e151bc862d947 #x2fb3602f4be3f16e) (#xbf6d5f20d1ff6b96 #xf39d6cf37ac74613) (#x248c090ff23a386e #x9147ba91e8a0aabc) (#xc17ca1d77dac3f13 #x2a963c2af5b42e4a) (#xd33a443104b12324 #x8354618381e47b14) (#xa11fb9458e2b7f74 #xebc40febac2deaf3) (#x44ef119d01bd7809 #x50158950b1396e05) (#xdba34672813f9203 #x5d07f45dfc89d5c0) (#x2ea2ea2cc7763430 #x99709b991b47ce5d) (#x7225fd748a9a5c50 #x68906e682dc991e7) (#x599087a8b6ca6e4f #xf51a04f5ae1c6d2b) (#x780b1e57bfd6500e #x60a74f60de2ef506) (#xe5f0a8d88f96077d #xbbd186bb1d1484f6) (#xba7acfd02ad96db9 #xf7679df7e2557482) (#x1246e5e6791d1c37 #xa9c25da97450555e) (#x9562b4ccb5cee654 #x05255c05be57df24) (#x2bb57adc3c50321f #x9d8a6a9d83d5fccc) (#x2a0febec64318dc2 #xf6b830f6c4909937) (#xf501ac5e4649a633 #xc4776fc4e7ce1b9d) (#xb1eebdc347f4de3a #x9462e69456f77598) (#x2296e9afe1bf3ce5 #x28eba528b9fd37e3) (#x813eb18adf56fee8 #x154b1e159b5a1725) (#x881d22f902b9f012 #xa02ad1a0a172dc0a) (#x582a1698eeabd192 #x9e285e9ee95908d0) (#x0e83e2e3960bb5ac #x67ff8a672c30338b) (#xc9e5a394f8228e34 #xf4c5a9f488d9809e) (#xe0e7382874b00152 #xbf2b77bf8586b667) (#x2f187b1c9f178bed #xf242c1f25c02aba6) (#x09239373ddef0efa #xb561cfb53a28cb2f) (#xc76641776e293b98 #x933a2393a4e9b315) (#x9378546ca64be2df #xbc8943bcef0a427b) (#x0000000000000000 #x0000000000000000) (#x29029bbc8c928f66 #x4beede4b0d5f36f9) (#x051790f0fb26062f #x04faf10498923291) (#x56a9f47b78a0643e #xf9d7d4f9c5693b5b)) ((#x799ddb4148c08b51 #xc618e56e42b35b04) (#xe73081fa2725ea33 #x364c8f6512f706a3) (#xc9b34248405a98a4 #x9d9a049cca192e3b) (#x59c29714d711eb67 #x4bab806b39a6896c) (#x4dde599db32bd70a #xb53d17c0d2076b55) (#x111b1c3a7dd533e7 #x2052c2f1a1183ba6) (#xf7fea73189acda28 #x91f45c86ce1c6f97) (#x446c70e837d2cc1a #x808b8e42c160ecdd) (#x40be98aafd61c06c #xd9a5ca0af62a67d0) (#xf1453b5226a7d065 #x05cd3aea0373407d) (#x3a9f0d3b03454efa #x55401c52334fcaa1) (#x9baa8808760a6ee8 #x2e903f511afd8438) (#x2ceab79302c774ac #x66c1a9dd22cb8c7f) (#x60e1d4ff62b0a05a #x5416af0f8d3fb5b8) (#xeb857a3cba33fea9 #xdd3e43bd4b2958b4) (#x1b157b9f4fc82d30 #x5f19684535a94a5b) (#x51a5849080b4f38b #xf9f708fb57325c76) (#xb4fc714bc2291f83 #x02aca5babfe0fe32) (#xf442e9e13f48dfef #xdb096fb049ca99e2) (#x0d60c1374e4a1766 #x6c98ddca242d0c85) (#x9a7fb2f9a5566d14 #xa97a2e43670ed6aa) (#x22363874fa69660d #x40a447218130768f) (#xc76fcdafb8f48a05 #xbbffea6069e2d4cb) (#xe9ec0e1ddf8bf892 #x10296199b10cfc53) (#x72468615a981967a #x3eb95ec8abf1786b) (#xf597d310ec14dc13 #x5ce37ea23439cb70) (#x80bff39739c243d8 #x718957142f54ce63) (#x2731eac7e3866987 #x9e60127bcb89af10) (#x94a33d1e5df87fb5 #x8f1fc0bfc4f52c5a) (#xef57927e7080f2df #x841007f57c63d3b9) (#x15c9f478b7663f91 #x797c86b99652b0ab) (#x30916a9e3158502d #x2a0bb6e6a7febb5c) (#x5a7ed9c461f5eea0 #x0156b35dbe707f19) (#xd97d6483eed3a8bf #x3a22d77f16f2470f) (#x816ac966ea9e4024 #xf663460652a79cf1) (#x957607ef8ea47c49 #x08f5d1adb9067ec8) (#xa0e0bfc2a61323ee #xfc3a321154411c0b) (#x64333cbda803ac2c #x0d38eb47ba753eb5) (#x2b8411017e907d1d #x7512dea39257f107) (#x1ac0416e9c942ecc #xd8f37957485a18c9) (#x490cb1df7998db7c #xec135388e54de058) (#x96ca493f3840798e #x4208e29b3ed088bd) (#xb695056aa79119b8 #xcfbb879e45c55ad5) (#x45b94a19e48ecfe6 #x07619f50bc93be4f) (#xe48ccf2a91c1eff4 #x7cb1bc539521f0d6) (#x29ed65201b287b26 #xb805fc87687255e0) (#x10ce26cbae89301b #xa7b8d3e3dceb6934) (#xae3c30255ebd314f #xda5fdcedf7bae6fb) (#xa289cbe3c3ab25d5 #x312d1035ae64b8ec) (#xab3be29647523ec5 #x049b89b7bd033f64) (#x2d3f8d62d19b7750 #xe12bb8cf5f38deed) (#x8e637c70c16c5179 #x57ecb9e88caf3493) (#x5070be6153e8f077 #x7e1d19e92ac10ee4) (#x32f81ebf54e05616 #xe71c94c25ddb1fbb) (#x85b82124202d4c52 #xaf4d024e65ed17fc) (#xcedde4da3c0d9115 #x8e4973e27a855343) (#x5817ade5044de89b #xcc4191794455dbfe) (#xc0016b3dc4a383b4 #xa82c9d1ed97ea9b3) (#xc506b98edd4c8c3e #x76e8c84493c7702c) (#x48d98b2eaac4d880 #x6bf9429a98beb2ca) (#x205f4c559fd16036 #x8db365057b15d268) (#x99c3fc2913b268d3 #xe3871d75e0d820df) (#x0bdb5d54e1411d2b #xf8a1bba6e942236f) (#x54a25623995bfc01 #x27335da11d8b85e9) (#xf09001a3f5fbd399 #x82272bf87e8012ef) (#x47d03e388136c9dd #xca76bd7446b61aa8) (#x4c0b636c6077d4f6 #x32d706d2aff439c7) (#xd3730326dcceb668 #x45697dcb824336f2) (#xa1358533754f2012 #x7bd0230329b24e99) (#x0507d2b319ef0f8a #xdec4555a4ab9d99f) (#xb1fba3f8dbc61009 #xdc68f0e0f55927ad) (#x6134ee0eb1eca3a6 #xd3fcbe1df0cce72a) (#x971f73ceeb1c7a72 #xc5e2f3894323da2f) (#xff99b4b5de09c2c4 #x23a8d416a088ba8d) (#x56cb2202fce3fa3a #xea247f85e7ae210e) (#xac5544043b053774 #x1748fec90d9f421c) (#x38f6791a66fd48c1 #x98573e76c96a6e46) (#x218a76a44c8d63ca #x0a59741706e680fa) (#xe23753493ecae5b9 #xe888da3f584edf3c) (#x3f98df881aaa4170 #x8b84490879f6133e) (#x25589ee6863e6fbc #x5377305f31ac0bf7) (#x88d8e0136e675b34 #xc3d5df8441c01b79) (#x7bf4af602d788d6a #x0b0fc74ab896ffe3) (#xc1d451cc17ff8048 #x2fc68c0ca48dfb21) (#xa78e1950da442a5f #xefe9456fe4dd6173) (#xc2681f1ca11b858f #x653bbf3a235b0d54) (#x87d1550545954a69 #x625a206a9fc8b31b) (#x0cb5fbc69d16149a #xeb72ccd859de5e17) (#x28385fd1c87478da #x3fefed9515810772) (#x55776cd24a07fffd #xa0d94cb36078d77b) (#xaaeed867940e3d39 #x837198a5c0f06df6) (#x9d11146bd90164a5 #xbaa9593dd792abd2) (#x01d53af1d35c03fc #x87ea11127df35292) (#x7ef37dd3349782e0 #xd5cb9210f22f267c) (#x76946e5763329a0c #x67971a809cbbf366) (#x42d7ec8b98d9c657 #x14b2e82e0c0fc337) (#xbef216eef0340154 #x7de70f0e2b518fcf) (#x6aefb35a50adbe8d #x2b5d05bb198ec445) (#xcd61aa0a8ae994d2 #xc4b440d4fd53a536) (#x18a9354ff92c28f7 #x15e45b73b27fbc2e) (#xf32c4f73431fd65e #xc8da18cef956e49a) (#xc6baf75e6ba889f9 #x3c15fb7214118659) (#xdfc6f8e041d8a2f2 #xae1bb113db9d68e5) (#x82d687b65c7a45e3 #xbc9e7530d5716a84) (#x0269742165b8063b #xcd172224fa25a4e7) (#xfc25fa6568edc703 #x6955e720275e4cf8) (#x0edc8fe7f8ae12a1 #x2665eefca3fbfaf0) (#x7a219591fe248e96 #x8ce5d658c565ad71) (#x17a08059d2de39aa #xb46ba49d6c77144c) (#xcbda366925e29e9f #x508d26b8303c8adc) (#x1fc793dd857b2146 #x06372c0d02e3c156) (#x702ff234cc399041 #xf3ae7cec51d4dc8c) (#x5f790b77781ae12a #xdf92e607f4c9a686) (#x362af6fd9e535a60 #xbe32d08a6a9194b6) (#xb99cb07c8c6308e5 #x6e3478709bcdf2b7) (#xd2a639d70f92b594 #xc2836cd9ffb06460) (#x8ddf32a0778854be #x1d118ade0b79c2e6) (#x416ba25b2e3dc390 #x5e4fdb188bd93542) (#x9816c6d8c0ee6b2f #x646d0c679d2b724d) (#x635d9a2fd454a59d #x1eeb9c390ae943cd) (#x1c7bdd0d339f2481 #x4cca1f3b85353723) (#xf2f975829043d5a2 #x4f3009dc84a5b608) (#x04d2e842cab30c76 #x592e4448374a8b0d) (#x3df1aba97f12474b #x46936b2c83d3b7d9) (#xed3ee65f1538f4e4 #x490725d18646775e) (#x3b4a37cad0194d06 #xd2aa0d404ebc9833) (#xea5040cd696ffd55 #x5ad452af36da0a26) (#x846d1bd5f3714fae #x28a7135c181e456e) (#x7f264722e7cb811c #x522183028fdc74ee) (#xf8f71227a25ecb75 #x307ba3681014c7f5) (#x344382dcfbeb5c5b #x7325f2ae90b43051) (#x93cd9b8c21af7604 #x9cccb7c174695122) (#x7d4f330382738727 #x9f36a12675f9d009) (#x06bb9c63af0b0a4d #x9439666ccd6f2fea) (#x37ffcc0c4d0f599c #x39d8c1981762c624) (#x12a752eacb313620 #x6aaff1c726cecdd3) (#xd11a7707b976b053 #x887e5fef78669215) (#x65e6064c7b5fafd0 #x8ad2fa55c7866c27) (#x86046ff496c94995 #xe5b03178e23be189) (#x8b64aec3d8835ef3 #x8928ecb2c616ed0c) (#x8fb6468112305285 #xd006a8faf15c6601) (#xad807ef5e8593488 #x90a2efdb706c108e) (#x53ccf0b1e50cf5b0 #x34e02adfad17f891) (#xba20feac3a870d22 #x24c94b461c1b04c2) (#x197c0fbe2a702b0b #x920e4a61cf8ceebc) (#xa887ac46f1b63b02 #x4e66ba813ad5c911) (#xddaf8cc12460a4c9 #x630c933721b8cc02) (#x7c9a09f2512f84db #x18dcb034080a829b) (#x6886c77b3515b8b6 #xe64a279fe3ab60a2) (#x248da41755626c40 #xd49d214d4c5f5965) (#xfa9e6606c7e6cd4e #xfd6c814cea316312) (#x0a0e67a5321d1ed7 #x7f4baab494b171fd) (#x4302d67a4b85c5ab #x9358f93c71fc91a5) (#xa43257806ca02f98 #xa5147659630b9706) (#x890ddae2bd3b58c8 #x443fce963c3349eb) (#xd0cf4df66a2ab3af #x0f944efd0595c087) (#xa65b23a1091829a3 #x6803547d992e33e1) (#xb7403f9b74cd1a44 #x4851968c38360847) (#xdb1410a28b6bae84 #xf735f55becd7e3e8) (#x9f78604abcb9629e #x77be7b192db70f35) (#xd674d195c521b9e2 #x9bad2891c8faef6d) (#x4e62174d05cfd2cd #xffc024f655d19d20) (#x6e3d5b189a1eb2fb #x727341f32ec44f48) (#xe3e269b8ed96e645 #x6f62cb2d25bd8dae) (#xee82a88fa3dcf123 #x03fa16e70190812b) (#x571e18f32fbff9c6 #x6dce6e979a5d739c) (#x392343ebb5a14b3d #x1fbd2f64b4993cd4) (#x665a489ccdbbaa17 #xc02fc96340509a52) (#x678f726d1ee7a9eb #x47c5d8713da3c8c0) (#xccb490fb59b5972e #x435e51c680a0f7a4) (#x75282087d5d69fcb #x2d6a29b61b6d0513) (#xfb4b5cf714baceb2 #x7a86905e97c23180) (#x5babe335b2a9ed5c #x86bca24fc3832d8b) (#x6953fd8ae649bb4a #x61a0368d9e583230) (#xa5e76d71bffc2c64 #x22fe674b1ef8c594) (#x6b3a89ab83f1bd71 #xacb714a9647d96d7) (#xdc7ab630f73ca735 #xe4e682255c4b9e90) (#x03bc4ed0b6e405c7 #x4afd333687d6f675) (#x6fe861e94942b107 #xf59950e153371dda) (#x9cc42e9a0a5d6759 #x3d43482faa61f940) (#xfe4c8e440d55c138 #xa442c504dd7be81f) (#x332d244e87bc55ea #x60f685d020284d29) (#x74fd1a76068a9c37 #xaa8038a4669e5781) (#xca0f0c98f6be9d63 #xd76737aa4dcfd84e) (#xecebdcaec664f718 #xceed34c3fbb525cc) (#x3596b82d28b75fa7 #xf4cfe3bced4762c3) (#xc86678b993069b58 #x1a70158eb7ea7ca9) (#x5d107f561da2e711 #x1285c4230eec0261) (#xb02e9909089a13f5 #x5b82e1f288aa753f) (#xd41da5b4a099bfd9 #x56ba0ab532df4b8a) (#xcf08de2bef5192e9 #x09a362f0077601d1) (#xd5c89f4573c5bc25 #xd1501ba74f2c1918) (#x9218a17df2f375f8 #x1b26a6d3099a03b0) (#x2e83c3b2677f7297 #xabd68bf9d8ee2898) (#x076ea6927c5709b1 #x13d3777eb09c7d78) (#xb8498a8d5f3f0b19 #xe9de6962e63ea025) (#x8ab194320bdf5d0f #x0ec2fda0bbe5bf9e) (#xf92228d67102c889 #xb791b27a6de79567) (#x1372681b186d35dc #xed45e0d55b3d9f41) (#xe559f5db429dec08 #xfb5bad41e8d2a244) (#x23e30285293565f1 #xc74e5633fcc3241d) (#xbf272c1f236802a8 #xfa0d1e1c56a2dd5d) (#xde13c2119284a10e #x29f1a001a66e3a77) (#xbc9b62cf958c076f #xb0f02d2ad1742b28) (#x1daee7fce0c3277d #xcb200e29f8c665b1) (#xf62b9dc05af0d9d4 #x161e4d94b3ef3d05) (#x71fac8c51f6593bd #x74446dfe2c278e1e) (#x7393bce47add9586 #xb9534fdad6022af9) (#x0867138457a518ec #xb25c88906e94d51a) (#xb392d7d9be7e1632 #x117fd2c40f7c834a) (#xe18b1d99882ee07e #xa275e909df982949) (#x5cc545a7cefee4ed #x956fd531731f50f3) (#xe83934ec0cd7fb6e #x97c3708bccffaec1) (#x9071d55c974b73c3 #xd63184f7f3bfa757) (#x460504c9526aca21 #x4d9cac663b45483a) (#x9ead5abb6fe56162 #xf0546a0b50445da7) (#xb247ed286d2215ce #x9695c3d6728fd1d8) (#xbd4e583e46d00493 #x371a3c38ac8779ba) (#x5219ca403650f64c #xb30a3bcdd0e4aa03) (#xbbf5c45de9db0ede #xa3235a5461e85650) (#x91a4efad4417703f #x51db95e58e4cf5c5) (#xd8a85e723d8fab43 #xbdc8c66d6b01159d) (#xc3bd25ed72478673 #xe2d1ae285ea85fc6) (#x7848e1b09b9c88ad #x41f2f47c3f400996) (#x774154a6b06e99f0 #xe07d0b92e148a1f4) (#x4b65c5fe1c20dd47 #x210471ac1f6844bf) (#x6d8115c82cfab73c #x388e72c5a912b93d) (#x6288a0de0708a661 #x99018d2b771a115f) (#x1675baa801823a56 #x3381b58f118446de) (#xa35cf11210f72629 #xb6c70127d397ea7e) (#x26e4d03630da6a7b #x198a0369b67afd82) (#x09b2297584f91b10 #x35b6998213678788) (#xfdf0c094bbb1c4ff #xeebff6325aad1e6a) (#x0f09b5162bf2115d #xa18fffeede08a862) (#x4fb72dbcd693d131 #x782a35e42822cfb2) (#x3c249158ac4e44b7 #xc1797a3efe20e54b) (#xafe90ad48de132b3 #x5db5cdff8a49b469) (#x2f56f943b423716b #x2c3c9aeba51d7a0a) (#x6c542f39ffa6b4c0 #xbf6463d7d4e1ebaf) (#xb5294bba11751c7f #x8546b4a8c213aca0) (#xd7a1eb64167dba1e #x1c473983b509bdff) (#x3144506fe20453d1 #xade1a7f4da0de9ce) (#xdac12a535837ad78 #x70dfe4499124b17a) (#xc4d3837f0e108fc2 #xf102d956ee3422be) (#x4ab0ff0fcf7cdebb #xa6ee60be629b162d) (#x141cce89643a3c6d #xfe9697abeba1e239) (#x2a512bf0adcc7ee1 #xf2f8cfb1efa4a395) (#x8303bd478f26461f #x3b746422a8823816) (#xe05e27685b72e382 #x259ff81ba26b7bdb) (#x1e12a92c562722ba #x81dd3d1f7f1093c4) (#x3e4de579c9f6428c #x0c6e581a040541ac) (#xe6e5bb0bf479e9cf #xb1a69e776f045431) (#x0000000000000000 #x0000000000000000) (#xa95296b722ea38fe #xc98cab9347269b83) (#x8c0a0851a4d45742 #x9afb9bcc768a9074) (#x5eac3186ab46e2d6 #x5878f715893af414)) ((#xc4610e8a46859da5 #xe8f43dc0cab4e742) (#x86ab96b2b17c302d #xf11ee62510bc3f12) (#x6153b1e6f129b332 #x3796c45ad0a0f8ca) (#x7df282f05569c28f #x2fe83a11ffe7b639) (#x7e70345387e3de0e #x6c04012b4a1ddcd2) (#x73437afb07491b30 #x23d745d5092591a1) (#x3b03d08f590afe38 #x731004aceb74f6ce) (#x0fcf2b6a1ce76cc0 #x8cdad7d2249401c1) (#xb1e5dbf4261bbe54 #x4d380e616aa6a2f6) (#xda3c585e7e8845e6 #x338350a7825fe503) (#xe47a91f792df9f9e #x8564194575e6ad33) (#x320b5460223aaa39 #x79d1a50a66d7231a) (#xb8ed5f1b5d2bea55 #x47f9afc7e7057722) (#x0876578e35f7e17e #x8a2409b05ff5f38d) (#x87d545d3ffbb8552 #x71fb4e33c2ea194b) (#x9302214b6e0c1591 #xe3a1b9c8b258a435) (#xc2a6a10f2152a564 #x6eef4bb463833357) (#x1b184ff28d50fc03 #x1e8020295426bcbf) (#xaafd9406ab4b4257 #x53b82e483e801e49) (#xcf95efa7a1f8605a #x213c0f4a20bb7e24) (#xfce068a6cd057f1c #xd8080256943a7b67) (#xe686f4350e923660 #x466d8a69124ae181) (#x3f381ac8a2906f07 #x3602e1f425ef6e69) (#xd8c03d9ce2c5ec18 #xf08ac38be5f3a9b1) (#xeacb69fcc0ff4621 #x895b668183248aab) (#x6416a8c044749772 #xf2618914cc6d4634) (#xa109752b4c36bfa8 #x9a701cc2d48f872f) (#x9647386ddb5131d1 #x2656f486ae951acb) (#xa28bc3889ebca329 #xd99c27f86175edc4) (#x39ffb54dc54757c6 #xb01997808cd8ba7c) (#xcd698a653db5c9a4 #xe2359c6647173296) (#x043bca47fb9a913f #x4512e558ce9b98a7) (#xec0cc679a7287ee0 #x0f4010f52a135ebe) (#xdcfbf7db195f7d27 #xb59826d32b683116) (#x6fe249eda3096a8d #x3ba9bb9e2662df52) (#x6c60ff4e7183760c #x784580a49398b5b9) (#x189af9515fdae082 #x5d6c1b13e1dcd654) (#xb65ca7100f0b33ea #x4bc6d00311c750ba) (#x9739eb0c959684ae #xa6b35c907cc33c92) (#x5de91d8d8133c0b4 #x42781e9440b5fc48) (#xc05ac4cdbd1f0c9a #xade6d898042f7fe5) (#xfd9ebbc783c2ca63 #x58edaa40466c5d3e) (#x440d37bd902e9549 #x9ff1ad91733f0c45) (#xc12417acf3d8b9e5 #x2d03708ed67959bc) (#x1755d23b433d8c42 #xd1b6ccc1c548d795) (#xc82c934388e8ede4 #x27c2d1285bda8c68) (#xbda8463de876ce15 #x820ee289fbc8c9dc) (#x46f1527f0c633cb7 #x5cf83ebd149340f7) (#x478f811e42a489c8 #xdc1d96abc6c566ae) (#x36309e27d9a03b06 #x3cc34052a84cbbbd) (#x760663ddb2143f70 #xe620089b15e82f5f) (#xff62de051f8f639d #x9be4396c21c0118c) (#x0c4d9dc9ce6d7041 #xcf36ece8916e6b2a) (#x5b2eb208e6e4f875 #xc46368e0e982285d) (#xd1c8b97399f5b819 #xfa4b622d68507c65) (#x4e8705f13994ddc9 #xd6dc370d4b66b37a) (#xb319be36ba5617aa #x8e319d4d0d0aee44) (#x10ecaedf6a2d01fc #xd74812a3be2925d9) (#x602d6287bfee064d #xb7736c4c02f6de93) (#x0eb1f80b5220d9bf #x0c3f7fc4f6c22798) (#xb9938c7a13ec5f2a #xc71c07d13553517b) (#x6d1e2c2f3f44c373 #xf8a028b241ce93e0) (#x2eaa6776867adb84 #x61af5b4149906de9) (#xb2676d57f491a2d5 #x0ed4355bdf5cc81d) (#x14d7649891b790c3 #x925af7fb70b2bd7e) (#x9e316fe3eea6d0af #xac72fd36f160e946) (#xb09b089568dc0b2b #xcddda677b8f084af) (#x3cbaac6b701a7386 #x75eedace90150482) (#xd671c597b0e535a7 #xfcb5bc4f13318e29) (#x70c1cc58d5c307b1 #x603b7eefbcdffb4a) (#x6bd983aa5893fbb2 #x7ebb5ec6e8f947f5) (#xc69d6b48dac8345b #x2bfdaeecad18abf0) (#x337587016cfd1f46 #xf9340d1cb4810543) (#x8457f3702d3199d3 #x32177509771073a0) (#xed721518e9efcb9f #x8fa5b8e3f84578e7) (#x19e42a30111d55fd #xdd89b305338af00d) (#xbb6fe9b88fa1f6d4 #x041594fd52ff1dc9) (#x7778b0bcfcd38a0f #x66c5a08dc7be0906) (#xf66a5aea64bf379c #x912598caac63c458) (#x94bb5daf471c982f #xe55f67aac9395679) (#xc9524022c62f589b #xa727793e898caa31) (#x1e5d56d4380dd843 #xdb776d6748eb0241) (#x9b7476c55bfbf4ef #x6985b078edad57b8) (#xde0792198512d4d9 #x7691b5ff4cc47da4) (#x374e4d4697678e79 #xbc26e8447a1a9de4) (#x4ff9d690775368b6 #x56399f1b99309523) (#x8eddc13c848bd153 #x7b3aef954f49cc9f) (#x017ed3614ec7b57f #x80e5a816d2562659) (#x06c7af8567d738c1 #x861b7674a937d415) (#x7c8c51911bae77f0 #xaf0d92072db19060) (#xf8dba2e1369fee23 #x9d1ae70e5aa1e3c0) (#xd334dcb105b811e7 #x3942f1010ffc30d7) (#xceeb3cc6ef3fd525 #xa1d9a75cf2ed587d) (#xebb5ba9d8e38f35e #x09bece975172acf2) (#x54e19962fa0394b5 #x48b9bf32cd16299c) (#xeef0a3bb3b65d71e #xcc4983d94dbf120c) (#xfb591442e415f2a2 #xdef6dc34ef5b892b) (#xe8370c3e5cb2efdf #x4a52f5ade488c619) (#xdf794178cbd561a6 #xf6741de99e925bfd) (#x02fc65c29c4da9fe #xc309932c67ac4cb2) (#x8529201163f62cac #xb2f2dd1fa54655f9) (#xf1d3260e4dafba22 #x97db46a8d7023614) (#x3dc47f0a3eddc6f9 #xf50b72d8424322db) (#xfe1c0d645148d6e2 #x1b01917af39637d5) (#x5f15784f1d7e694a #x81718db82719b0fa) (#x15a9b7f9df7025bc #x12bf5feda2e49b27) (#x5e6bab2e53b9dc35 #x019425aef54f96a3) (#x559f4a03b4c421ca #xc85c17241f400fc5) (#x927cf22a20cba0ee #x634411de600e826c) (#x3e46c9a9ec57da78 #xb6e749e2f7b94830) (#x2d28d1d554f0c705 #x2243607bfc6a0702) (#xb5de11b3dd812f6b #x082aeb39a43d3a51) (#x9ccd0a2172eb7951 #x6f7b6e1a96cca5f4) (#xe5044296dc182ae1 #x0581b153a7b08b6a) (#xd48da0552ca89c59 #x3fbc2f63749dc29b) (#xf25190ad9f25a6a3 #xd4377d9262f85cff) (#x6e9c9a8cedcedff2 #xbb4c1388f434f90b) (#x7f0ee732c9246b71 #xece1a93d984bfa8b) (#xa3f510e9d07b1656 #x59798feeb323cb9d) (#x99881307c7b65d11 #xaa8c23548a011b0a) (#xbcd6955ca6b17b6a #x02eb4a9f299eef85) (#x4bc21cd78cc9f989 #x132b7a4357ab0d84) (#xbe2af09e3afcd294 #xc1e2d9b34e32a337) (#xcbae25e05a62f165 #x642eea12ee20e683) (#x66eacd02d8393e8c #x31681a38abc10a86) (#x2a91ad317de04abb #x24bdbe19870bf54e) (#x493e791510845077 #xd022e96f30074136) (#x1f2385b576ca6d3c #x5b92c5719abd2418) (#x255e865b6107267b #xa86769cba39ff48f) (#xab834767e58cf728 #xd35d865eecd63810) (#xba113ad9c16643ab #x84f03ceb80a93b90) (#x8d5f779f5601cdd2 #x38d6d4affab3a674) (#x7a4bfe147c794f31 #x2916e47384864475) (#xe13f88d12782bbde #x4093540b692b13cd) (#x2bef7e503327ffc4 #xa458160f555dd317) (#xe2bd3e72f508a75f #x037f6f31dcd17926) (#x63afd4246d641acc #xf49f5776b70cb478) (#x78b79bd6e034e6cf #xea1f775fe32a08c7) (#x4036fdfa6bb40476 #xdae348c9bda494e2) (#x8fa3125dca4c642c #xfbdf47839d1feac6) (#x3189e2c3f0b0b6b8 #x3a3d9e30d32d49f1) (#xd70f16f6fe2280d8 #x7c501459c167a870) (#x9db3d9403c2ccc2e #xef9ec60c449a83ad) (#x4573e4dcdee92036 #x1f140587a1692a1c) (#xcc17590473727cdb #x62d03470954114cf) (#xa7cedaae2be18769 #x1c6b6ab67db8533a) (#x62d1074523a3afb3 #x747aff60655a9221) (#xb4a0c2d293469a14 #x88cf432f766b1c08) (#xb722747141cc8695 #xcb237815c39176e3) (#x07b97ce429108dbe #x06fede627b61f24c) (#xf4963f28f8f29e62 #x522c0be6cbcf88ea) (#xe0415bb069450ea1 #xc076fc1dbb7d3594) (#x201b9f7dd45a023b #x6d902485bf524a71) (#xa6b009cf65263216 #x9c8ec2a0afee7563) (#xd0b66a12d7320d66 #x7aaeca3bba065a3c) (#xad44e8e2825bcfe9 #x5546f02a45e1ec05) (#xf9a5718078585b5c #x1dff4f1888f7c599) (#x8ae60b7b7f11406c #x3e280acd81d25438) (#x83ee8f940421146d #x34e9ab6b0c7181ec) (#x8c21a4fe18c678ad #xb8337cb928e5802d) (#x4c7b6033a5d97437 #x15d5a4212ccaffc8) (#xef8e70da75a26261 #x4cac2bcf9fe93455) (#x561dfca0664e3d4b #x8bb02c1eaaba652e) (#x3881662c8b80e2b9 #x30fc3f965e8e9c25) (#xf714898b2a7882e3 #x11c030dc7e35e201) (#x239929de06d01eba #x2e7c1fbf0aa8209a) (#x7584d57e609e23f1 #xa5cc33a1a01245b4) (#xe949df5f12755aa0 #xcab75dbb36dee040) (#x27a2e399fd4a8f85 #x6b6efae7c433b83d) (#x11927dbe24eab483 #x57adbab56c7f0380) (#xc51fddeb084228da #x681195d618e2c11b) (#x3a7d03ee17cd4b47 #xf3f5acba3922d097) (#x22e7fabf4817abc5 #xae99b7a9d8fe06c3) (#x79c948b7aef353b0 #x6afadf49317c2e9e) (#x685b35098a19e733 #x3d5765fc5d032d1e) (#x26dc30f8b38d3afa #xeb8b52f116659e64) (#xac3a3b83cc9c7a96 #xd5a3583c97b7ca5c) (#x91fe4489f241bc6f #x20a82ae4d5f4e887) (#x98f6c0668971e86e #x2a698b4258573d53) (#x1ddfe077ea87c4c2 #x989b565dfd1168aa) (#x4abccfb6c20e4cf6 #x93ced25585fd2bdd) (#x95c58ece09db2d50 #x65bacfbc1b6f7020) (#x0bf4e12de77dfdff #xc9c8328aea0f9966) (#xf0adf56f03680f5d #x173eeebe0554104d) (#xa801f1c43706eba9 #x90b1bd64592c52fb) (#x74fa061f2e59968e #x25299bb7724463ed) (#xafb88d201e166617 #x964f6306224da0b7) (#xc3d8726e6f95101b #xee0ae3a2b1d5150e) (#xa532bf6cb7ac2e97 #xdf62f99a1a141f88) (#x136e187cb8a71d7d #x94a429990bd34f32) (#x806c3937d6ab08ec #x77059051b98beb07) (#xdd8524ba5798c858 #x357d8ec5f93e174f) (#x43b44b59b93e18f7 #x990f73f3085efe09) (#xe7f827544055831f #xc688227fc01cc7d8) (#x2fd4b417c8bd6efb #xe14af3579bc64bb0) (#x1a669c93c397497c #x9e65883f86709ae6) (#x41482e9b2573b109 #x5a06e0df6ff2b2bb) (#x65687ba10ab3220d #x728421021e3b606d) (#x2c5602b41a37727a #xa2a6c86d2e3c215b) (#xd9beeefdac025967 #x706f6b9d37a58fe8) (#x286dc8f3e1ade345 #xe7b42d35e0a7b9fc) (#x35b228840b2a2787 #x7f2f7b681db6d156) (#xf32f43ccd1e213dc #x54d2d584b0ae7aa6) (#xa44c6c0df96b9be8 #x5f87518cc84239d1) (#x723da99a498eae4f #xa332edc3db73b7f8) (#xf5e8ec49b6352b1d #xd2c9a3f01999aeb3) (#x7b352d7532befa4e #xa9f34c6556d0622c) (#x2420553a2fc09304 #x2882c1dd71c9d2d6) (#xbf5423ff743b67eb #x410771a59c64856e) (#x34ccfbe545ed92f8 #xffcad37ecfe0f70f) (#x67941e6396fe8bf3 #xb18db22e79972cdf) (#x0d334ea880aac53e #x4fd344fe43384d73) (#x162b015a0dfa393d #x515364d7171ef1cc) (#x1ca13316a44071bd #x187efe4b2f474ef3) (#x50da53250199058a #x0dab5a6a038db13b) (#x42ca9838f7f9ad88 #x19eadbe5da08d850) (#xfa27c723aad247dd #x5e1374223d0daf72) (#x6aa750cb16544ecd #xfe5ef6d03aaf61ac) (#x5358e586d313190b #x4e476150b677dbd0) (#x8b98d81a31d6f513 #xbecda2db53847261) (#xd24a0fd04b7fa498 #xb9a75917ddaa168e) (#x1210cb1df660a802 #x1441818fd985696b) (#x8112ea56986cbd93 #xf7e038476bddcd5e) (#x0a8a324ca9ba4880 #x492d9a9c3859bf3f) (#x9a0aa5a4153c4190 #xe960186e3ffb71e1) (#x9f4fbc82a06165d0 #x2c9755202336cf1f) (#xc7e3b829940f8124 #xab1806fa7f4e8da9) (#x57632fc128898834 #x0b55840878ec4377) (#x5c97ceeccff475cb #xc29db68292e3da11) (#x8964bdd8ad9b5ced #x7dc431f734283ed3) (#x58ac04ab346ee4f4 #x878f53da5c7842b6) (#x71bf1f399b04b2ce #xe0ded6f96e89dd13) (#xdb428b3f304ff099 #xb366f8b15009c35a) (#x908097e8bc860910 #xa04d82f207a2cede) (#x21654c1c9a9db744 #xed758c936d046c28) (#x05451926b55d2440 #xc5f74d4e1ccdbefe) (#x881a6eb9e35ce992 #xfd2199e1e67e188a) (#x29131b92af6a563a #x6751852332f19fa5) (#x090884ef7b305401 #x0ac1a1a68da3d5d4) (#xd5f37334626f2926 #xbf598775a6cbe4c2) (#x82905cf54ae6a112 #xb40c037dde27a7b5) (#xcad0f68114a5441a #xe4cb42043c76c0da) (#x4d05b352eb1ec148 #x95300c37fe9cd991) (#xaec65e4150d1d368 #x16aacb10f01b86ee) (#x51a480444f5eb0f5 #x8d4ef27cd1db9762) (#x0382b6a3d28a1c81 #x43ec3b3ab5fa6aeb) (#x59d2d7ca7aa9518b #x076afbcc8e2e64ef) (#x30f731a2be7703c7 #xbad83626017b6fa8) (#xa97f22a579c15ed6 #x105415728b7a74a2) (#xe3c3ed13bbcf1220 #x839ac7270e875f7f) (#x5a506169a8234d0a #x4486c0f63bd40e04) (#x4840aa745e43e508 #x50c74179e251676f) (#x0000000000000000 #x0000000000000000) (#x6925e668c4de524c #xbdb2cdea8f550b47) (#xa077a64a02f10ad7 #x1a95b4d406d9a176) (#x522636e79dd4ac74 #xcea2c9466421fd89)) ((#x4a8c95c20416aa99 #xf8ad0a2149f0eb63) (#x97a1b595a3dae393 #x38a835097fbd191b) (#xbc21c5a63b2bfd88 #xdb448a653eadb5af) (#xe1aa1a276c2916ae #x5c57eefdcc8402c4) (#x78cd74e05509be8b #xfba46169375123bb) (#x2e0e9486a62882bd #xfebfdcb1b571b810) (#x23b213069724bd69 #x6ad54767dc878ca9) (#xb838155ddda04db1 #x7eb9f6819107a540) (#x954cdd09d07ebb6e #x8b370b7bc9e8118d) (#xf9fcbf787d953038 #x041c25e0a8fe62e3) (#xb2e71ef4a1d1b63e #x441f30f8bac58dcb) (#x6a44da1638c46392 #x99496c0d78e96b17) (#xdcba14197f9e6595 #x78ab20116d86f633) (#x3e6a52ecb8410759 #x2fcdefa74c9cf82a) (#xe03d2e69b47b3a31 #xe4f9f1c4974f068f) (#x83dca3045b38d64e #x4c277afb29fa49ce) (#xbb42498f765639d3 #x7588d7ca7c99a99d) (#xdbd9983032e3a1ce #xd6677dbe2fb2ea01) (#x4e954539e29d1aa0 #x5d5076c5e65afb8c) (#xed81a9e9857705e5 #x70936a12feb93236) (#xf059e803aa12bfd5 #x358bc2d26ea246b5) (#x5c1cebcf8f50c7b9 #x3fbd7ba1a9e2b320) (#x3c873a70cbe55fa4 #x9c52d1d5fac9f0bc) (#x17074a43531441bf #x7fbe6eb9bbd95c08) (#x7d4390556bd0222d #xe6f702b4c330371f) (#xd488772c704bc6e7 #xf192d81af011d62e) (#xe998791263fcb5dc #xd56e16f6511322d9) (#xeb75118e1058ed21 #x66f12884e7462a4f) (#x70ff17d55adc1df9 #x729d9962aac603a6) (#xcd49e63db9a5ccee #x11770c3ecfa0b242) (#x037a5cd2abf67462 #x0b31214bed9e0cdd) (#x1f3529765cc1e2cd #xf68796b2264e7c15) (#x8c8d4c181990b167 #x6bd2df5ff65975e1) (#x083263350fd5a372 #x8939f80b9d97201d) (#x73854b07f12a699b #x79acb82947580f7b) (#xeae225c0c80ac1be #xde5f37bdbc8d2e04) (#x42bef6f70bc309eb #x7194f22ad467cb7e) (#x131e9ab8b59ff186 #xda43125d14734ce7) (#x9ce98a7207f93483 #xbaa0ec490fb435db) (#x19c19111c9ee0a09 #xe0e5d4243fb1646c) (#x55b9bcb458d74854 #x0e2a9c936fbe9776) (#x87c573ffbdb36677 #xe9da061f86505921) (#x2ce3fc1ad58cda40 #x4d20e2c30324b086) (#x222527484f7691f6 #xd27b585e874c88e2) (#xfa86e3aad663445a #x0f2d04ab45606e3e) (#x6bd3ee58e0964f0d #x21e7733423226f5c) (#xb413a69334fe5efa #x527d726ea33a95b2) (#xc2180921fb0dabc7 #x3682a99a10038e6d) (#xb58492ddecac7265 #xead36d57f8f191f9) (#x7571f3606405815f #x6fcefabf5ea71702) (#x46a7260ced48b9d2 #xd4698ece7bcddb91) (#x693e86c4933217f0 #x92784d46957767ca) (#x215f7b9ae480e594 #xd94a79156ad2843f) (#xe80f4d5cbbae9943 #x6dc009cf0ad82692) (#x5ef18353fcf49f44 #x8c2245d31fb7bbb6) (#xfc725bcd434cac9e #x194f463d5c9f7647) (#x7bb72832feffcae9 #xf0954022dacf2f66) (#x7cd4a41bb3820eb2 #x5e591d8d98fb3354) (#xcbbd5e5a2c8a242a #x07154ea8d65faa3b) (#xcfa48ea1ca019413 #xa2e8324c79f5bad4) (#xab268fe5683fbc37 #xa4fae4dc8574e9a7) (#x9d7ebe3cdfab181c #x020ef370547f3190) (#x37cf05976fc688b4 #x1e5a08958ac0dc7c) (#x0c2bb3cee95e134b #x2cc484ef323d30f2) (#x63e18d6def43ec7f #xa8de8b3fbeb54f41) (#xd51f4362a819ea78 #x493cc723abdad265) (#xe2d046f5c7df62cc #x5766cfb6211a0e19) (#xa5e054b7f2c5f781 #x3ba15e41011cd1c3) (#xd8a3c4e29915d5ac #xdd565cf5c22ce6dc) (#xb769fa419f082a98 #x594c53254ea4996f) (#x6cb06271adeb8b56 #x8f2b2e9b6116736e) (#xa47760f92a97db1e #x830f41785ad7d588) (#x1dd841ea2f65ba30 #x4518a8c0901b7483) (#x795a40ae8d5b9214 #x430a7e506c9a27f0) (#xfb11d7e40e3168c5 #xb7831b921eab6a75) (#x35226d0b1c62d049 #xadc536e73c95d4ea) (#x45dd7ade46becdb0 #xdf58af859653d74c) (#x313bbdf0fae96070 #x08384a03933fc405) (#x20c84fd43cd2c90b #x61e4662c31198074) (#x058ee4b53ed99ca6 #x1d5363ddf46114a4) (#x1c4f75a4f73796af #xfdb6b7f9cbd070c8) (#xb3702aba79839aa1 #xfcb12fc1e10e8980) (#xbdb6f1e8e379d117 #x63ea955c6566b1e4) (#xe6c9960e2154d2f5 #xf29bb3528eb01ef6) (#x02ed689c73a458fd #xb39f3e72b6550896) (#x8beec03154ed753c #xc51e82f0b46d69d3) (#xa9cbe7791b9be4ca #x1765daae3321e131) (#x779c9bfc17a1d9a2 #xdc51c4cde8f21f94) (#xf1cedc4d7240934a #x8d25ddeb356942fe) (#x963681db7b88cf0c #x80062a3024761d50) (#xef6cc175f6d35d18 #xc30c546048ec3aa0) (#xb00a7668d275eec3 #xf7800e8a0c90855d) (#x9a1d321592d6dc47 #xacc2aedf164b2da2) (#x0adf0ba97c71fb8f #x3aa6c6792bc2288b) (#x50375801660ed4f2 #x1379ff4e9bdf83d2) (#x6276b9233711c0e0 #x10709406e57e4b0a) (#x760bafb2cff3f53d #x64ffdbf4b3391bdf) (#x93b8656e455153aa #x9d5549edd01709f4) (#x91550df236f50b57 #x2eca779f66420162) (#xeefbf53b2e817187 #x7ba24b5913273eeb) (#x0ec6db529afa4bb6 #x9f5bba9d84683864) (#xa69a0865593383e3 #x30907f0aec82dd1e) (#xd27ccf4be5642e23 #xe7f09a8ce9eece57) (#x1ea21d388493ce52 #x4e29898b7d85785e) (#xf73a642ae76f7b8e #x9b479f7d2c965a87) (#x147d1691f8e235dd #x748f4ff2564750d5) (#x80a6ffd6f0cea22c #x47165bb0c4644513) (#x27abc3fd71af0d50 #xcf283b83732d9c46) (#xf44038f84c990fec #x9076be36c108565a) (#x4b1ba18cdc448606 #x40031518123bef28) (#xaea86b5056e62091 #xb9a987017115fd03) (#x8a79f47f8cbf59a3 #x7db09dc9efa66d98) (#x3be4b65986989bff #x329e8c7ab8fdec8e) (#xc57b8508b6706f9c #x984ef4355237925f) (#x365831d9b794a42b #xa6f417acd10bd837) (#x3ffd66a260132bc6 #x9763f09e1757fc61) (#x0419d0fbe68bb039 #xa5fd7ce4afaa10ef) (#x0f51ef1c42a86729 #x27f5a5a4dfa33c2f) (#x07638c294d7dc45b #xaecc5daf42341c32) (#x534d04d3cdf8a090 #x1848de0576418f0f) (#xc38f3d6f235f8758 #x8e2cb6a34bc88a26) (#x94dbe947082c97f1 #x33991442922315c6) (#x2d74c8540ddef6df #xf58efdfa58efb4cd) (#xf2b4809fd9b6e728 #x8614fca0d8f74e23) (#x3a7382175ecab760 #x8a309343e336e8c5) (#x28fa2ce133076a79 #xe8dd9e27ac8ea069) (#x7a201c7c26ade676 #x483b5f1b81042b2d) (#xc4ecb1466e224303 #x20e0eb0c09fc9614) (#x90c239bceea727c8 #x966468a63d890529) (#x3909dec5f53cc302 #x8101b2080ea8e418) (#x3241e122511f1412 #x03096b487ea1c8d8) (#x30ac89be22bb4cef #xb096553ac8f4c04e) (#x67f85d9609c85c46 #x0d23f7db111f5fae) (#xda4eac7eeab18d51 #x6ec962877479ee4a) (#x5f66b71d24a6b3db #x348c5aea447cbffd) (#x4329c2b9d3912574 #xc93aed138faccf35) (#x52da309d15aa8c0f #xa0e6c13c2d8a8b44) (#x8903a8ad27492dc1 #x7681bc8202386145) (#x33d6d56c894d388d #xbba77471256acc93) (#xde577c850c3a3d68 #xcb341e63dbd3fea5) (#xf323b4d101e4cbb7 #x3ebae399833c4a68) (#xaf3f5f1e8eb40c0e #x010798382adef948) (#x4c782da59139425d #xeecf48b7500ff31a) (#x5b7f67e6c22d03e2 #x9171260eebd6af12) (#x74e6c72ebc57adc0 #xd760e586056c1349) (#x1856a55f11bc2696 #x584bcb1d647a6027) (#x2546ab61020b55ad #x7cb705f1c57894d0) (#xfde56f839b1e8001 #xa1e159040754720c) (#x64820144a23e2824 #x0612d690fc815373) (#x865247b165e14ae8 #x51741926dd9b5d6a) (#xce33baef1253b88c #x1a462d75223ebe9f) (#xadd23782fd1054f3 #xb298a64a9c8bf1de) (#xf86b8b36a5c71ca7 #xbcb23ad9f33566a8) (#x6fca3ea3061dff34 #x841a0fd08c887fb3) (#x296d18afeb5546e6 #x5073811ef745a422) (#xc8c70288877c5048 #x0c246fe33bc1a6e6) (#x98f05a89e17284ba #x1f5d90ada01e2534) (#xb6fece0f475a0607 #xe1e24c1c156f9d24) (#xff08071fe8bad8fc #x127e6776b1017a9a) (#x47301242351a954d #x6cc791f72006dfda) (#x1289aef66dcddd19 #x62ed0d644fb848ac) (#x15ea22df20b01942 #xcc2150cb0d8c549e) (#xbeccad3a488fa575 #x68dbb41788f8bd39) (#xbad57dc1ae04154c #xcd26c8f32752add6) (#x5754d4282b7310a9 #xbdb5a2e1d9eb9fe0) (#x610ce5f19ce7b482 #x1b41b54d08e047d7) (#xdfc048cbd46811f7 #x739a015a8018faee) (#xe424fe9252f08a08 #x41048d2038e51660) (#x7e39cc87c026564f #xedc623ff2eae3bc2) (#x0b483fe7a423d710 #x8208d94070092cc0) (#x3d100e3e13b7733b #x24fcceeca102f4f7) (#x542e88fa808564cb #xb68483aa3475933d) (#x16907e0d8b466d20 #xc7107180e0125843) (#xfe9f335130e8f463 #xaad0784feaca7ed1) (#xf5d70cb694cb2373 #x28d8a10f9ac35211) (#x09a5577bd7878fed #x3197e732c65c2456) (#xbf5b997490dd89ea #xd075ab2ed333b972) (#x6d27563f75b9a7c9 #x378531a23add7725) (#x24d19f2fda597932 #xc4191ac89eb3909b) (#x2a17447d40a33284 #x5b42a0551adba8ff) (#xe34772bb1f8d4e53 #xefc8d08f7ad10a52) (#x72127f4929784504 #xc102a7101c930b30) (#xa70d3c2b8161af7c #x883e6033b749d955) (#xd10693994e925a41 #xecc1bbc70470c28a) (#xa06eb002cc1c6b27 #x26f23d9cf57dc567) (#xa85cd337c3c9c855 #xafcbc59768eae57a) (#x263cf7b3a9fd21cf #x778624ba28e6980d) (#xccded27361f7e071 #xa9d91307946bb609) (#xf6ad50643f3d5711 #x23e98044775d5ecc) (#xe5b3cadc8aa2a697 #xf9aa9219632e122b) (#x666f69d8d19a70d9 #xb58de8e24ad45be5) (#x7faef8c918747ad0 #x55683cc675653f89) (#xaab1bbabb06d90a8 #x1c54fbe5debfedec) (#x2b80703398f11e1b #xe3ecbf6c4110acb4) (#x40539e6b78675116 #xc20bcc586232c3e8) (#xac4503cc2542786c #x0a36b973c740f595) (#x444a4e909eece12f #x67f6b0bccd98d307) (#xa314ecd067ea1f45 #x2dc31cd718e3c9ba) (#xd934f0ac4147f933 #x65f843cc99e7e297) (#x609bd1bf44b5981d #xa3efaa74532b439c) (#xc601d9da1d861bfe #x937fd57ebfa99e82) (#xec169da75d25297a #xc83d752ba572367d) (#x4861fd5e77b2f264 #x4b323453ffa5e3f5) (#x8131cb98289c8eb3 #xffb844899faf4158) (#x59920f7ab1895b1f #x22ee187c5d83a784) (#xb9af211305f2612e #xc617e9b8cacca10b) (#x1064c66a1e6985e4 #xd1723316f9ed403a) (#xe75ea240f906fe6a #x4a35ac6bd57b1abd) (#x5ae853a81a7f2f7d #x29df3937b01dab59) (#x9b8a065b4a84f0d8 #x146cb1e64d8029e9) (#x4def19eb496b6ec2 #x5661578e0bc4f751) (#x56c3e066f3213c36 #x051bbdd882209bab) (#x8d1a7856c1c29df8 #xd37cc066ad9271aa) (#x5d8bdf815702eb26 #x87136498f229b76b) (#x4f0271773acf363f #xe5fe69fcbd91ffc7) (#xdd2d2057a7cc490a #xc0053f28364df278) (#x0197344ed8522c9f #xb8ae1f395bcb044b) (#x1b2cf98dba4a52f4 #x537aea5689e46cfa) (#xd6651fb003ef9e1a #x420de6684644deb8) (#xc16255f350fbdfa5 #x3db388d1fd9d82b0) (#xc796ed94c5d43761 #x2bd1ca47e4629ac9) (#x922f51209d037f35 #x25fb56d48bdc0dbf) (#x11f3f224c63ba97b #x69dc2c2fa2264471) (#xd091a7d796c076de #x546fa4fe5fbbc6c1) (#xca2a6a14f4d808b5 #xbfbb51918d94ae70) (#xa283d89ebfb833da #x956d03ee4328cdf1) (#xd3ebfb053d3602bc #x5f5e85b5b225ca1c) (#xc95036c65f2e7cd7 #xb48a70da600aa2ad) (#x6e5d0aedde4fd3ab #x3cb410e9d7437bf8) (#x2f99a0c87e7aae22 #x4611c388eebabc5b) (#x7168239b828e3166 #xca33865bf10d07ed) (#xc0f561bd88a9f33a #x851d97e8a65686fb) (#x8e6024846a34e99a #xd84de12d400c7d77) (#x1abbcdc362187e6b #xebd4f56fd22f68b1) (#x8ff710cab266c505 #x60e3fe141bc7793c) (#x68a9b28a4b603b6f #x2ad6527fcebc6381) (#x58053b3469db7780 #x9a4007450648a3cf) (#xb19d42260a27c25c #x4f2e11b3575b8116) (#x49f6c910afe0defb #xf39c2b6aa46ee7be) (#x41c4aa25a0357d89 #x7aa5d36139f9c7a3) (#x88949ce3ff1b015e #xce2fa3bb59f3650e) (#x85281b63ce173e8a #x5a45386d300551b7) (#x6515350a7a6c04bb #xbebcc9a9a74a5738) (#x51a06c4fbe5cf86d #xabd7e077c0148799) (#x389eea8b2d6eef9d #x39afad315563e053) (#x99676ec73920a825 #xa7f38f94fbd5217f) (#x06f4b867952fe8c4 #x1662429619ff1879) (#x84bf2f2d16451215 #xe2eb27546bce55fc) (#xd7f22bfedbbdb285 #xfaa3f9511d8fdaf3) (#x34b55945c430fcd6 #x156b29de675ed0a1) (#x9f93d6a0ac0f40e1 #xb191cd02e22a3906) (#x0dbc8780310c3fd4 #x946a9bd669f634b9) (#x0000000000000000 #x0000000000000000) (#x824b974a836afad1 #xf48965c272314d85) (#x9e04e2ee745d6c7e #x093fd23bb9e13d4d) (#xa1f9844c144e47b8 #x9e5c22a5aeb6c12c)) ((#xd52f8dc690a455a5 #x5d1b72cb89048071) (#x179ff9364e75902d #x15a48a485aa38762) (#xf3d45f9d804c9f32 #xe9183dae643b6cbf) (#x157fb14b6d940b8f #xd386ace4dd6c1e81) (#x6d5d49b5a58a5f0e #xf572a8ce1c5532e7) (#x66cbc620faf84130 #xcec905c160a6279e) (#x77b7e791d16dbf38 #x520be5be7097c81a) (#x5baa9e806e66c7c0 #xbea2148243dd9c3d) (#x43a078d93960bc54 #xdff97f5ea8d0ff23) (#x63b872054c6818e6 #xe29c5a0c0f7d7b0b) (#x9c695e5506275b9e #xda48b3ccffa1c7bb) (#xdc594a2eec37d039 #xa082f96872380ceb) (#xe84ed566043ad355 #x2d706388aa7f3bd2) (#x83f04454c450e27e #x5164a171fcb861d3) (#x3f8110ddb77f1d52 #xb64937efa4b42240) (#x5adaba5f9ef76b91 #xddb307d4e15b31ad) (#x256bbef9c398fd64 #x11307a9fc876d8bd) (#x3ef1340247eeb103 #xd55824b906328fd0) (#x7d514cdb7e8e0d57 #x0aa15be7aee270f3) (#x2efd316c9ceae35a #x2a8bd790b485cdc4) (#xdaba92a989d7be1c #x29e4935f38aa640d) (#xcc554f4037338260 #x5f510a41c08f4eff) (#xd7cfc5bbb345ce07 #x9b3954670ecb1992) (#x338463107d7cc118 #x6785e3813053f24f) (#xefdd293e914b1121 #xc7071ae9426bfea4) (#x7bb2945c1b6e6372 #x83c731d0e4701815) (#x8683f07172c0bba8 #x7d31febc93633d46) (#xd2bc719e05d597d1 #xb76c0baa61104507) (#xfea1088fbadeef29 #x5bc5fa96525a1120) (#x278bf684e07966c6 #xd7125c334fb9415e) (#x7ec12079adfe3aa4 #xaf926e1d8bab4480) (#xa078222a6228713f #xc932b1d97e5cd188) (#x1f991a01c277b9e0 #x8b2c12bd0319a668) (#x93fc413a1f54b027 #xaeb752584e0f23c7) (#x806028f61720d58d #xf457948bd9f155a0) (#xf842d008df3e810c #xd2a390a118c879c6) (#x46d3ccfc8ff0e582 #xf3ac2093c70ba3b6) (#x9bfaa20d935699ea #x303fcaad17b502cd) (#xfaa29875fcdf1aae #x1481b60d9f07e025) (#x5c3962d8fb1705b4 #x54d56de3abc9594b) (#x7557afecf28c249a #x9429c312f75851f9) (#xf2a47b4270dd3363 #x8a092ef8c6bdc12f) (#x32f447cf8ded6d49 #x0494f0d792d55fdf) (#x5d4946070b86a9e5 #x37c47eb5094ff4db) (#x1d79527ce1962242 #x4d0e341184d63f8b) (#xf6a7ebb836dcc6e4 #xc54d62630be0302a) (#x60281ea79f182f15 #x47af6ff62a344f78) (#x62c856dabcf9b4b7 #x818d495aadfbd69b) (#x4ad6bf3145f339c8 #x2260f4fd53ec73b9) (#x7c2168048e1fa106 #x69b048b10c64dd63) (#xeead0de161dabd70 #xa41609bfe0ed5334) (#xa2986a5741c9ea9d #x0f109775f993486b) (#x2388667ea6789341 #x985610a882e4b05b) (#xac7d51e7a82bad75 #x18fe65b7eabb0187) (#x986aceaf4026ae19 #x950cff5732fc36be) (#xe138128e78a956c9 #xd0e9e82b5143b748) (#x139c69cc087465aa #x5ae0c6d397fe7667) (#xc52388a84ba007fc #xa2c881e23bb3c265) (#xdbcab6767946124d #x4af580099a2cc99d) (#x73b4776b976c4abf #x1d4fa925bdca391f) (#xc0503c8dfd305e2a #x8e9dde2f54689ef0) (#xd05c39e326340c73 #x714e2d06e6dfdce4) (#x3af2a4f801ef4484 #x9a1c6822cb6f7ed5) (#x3b828027f17ee8d5 #xf90d7b7469e9d345) (#x655baa82298876c3 #x6bfa303b45ef13ed) (#x514c35cac18575af #xe608aadb9da824d4) (#x6bbe9132c06a312b #x7c14c2f956c75a01) (#xafed3d457b5b9a86 #xbdcd504dcff235f4) (#x4030147bea108ba7 #x7aca4aa48d99cb50) (#x1ee93ede32e615b1 #xe83d01eba19f0bf8) (#x20180adc7508a4b2 #x3d652552a7ad8428) (#x85139cd3a1b08c5b #xd802cb46b62a0935) (#xf447a3c5153d5d46 #x036f44cf8c2fa9c9) (#x47a3e8237f6149d3 #x90bd33c5658d0e26) (#x3787f3ea3b7d349f #x28c1af1afd0e034a) (#x6ecd251776fa68fd #x50419d34391c0694) (#x906c2d98cc2487d4 #x0b8467a26b4617b4) (#xc6b3e40a98d0300f #x07fbb4181efaf616) (#x0976c7e87c93859c #xfd998ba3fb3c8c9a) (#x8280608b34c14e2f #x3275b2275e3ecc43) (#xdeb90253cfd64b9b #x66a0dfc4f5f79508) (#xb697ffc3dccc4d43 #xbf8728c78679fb7a) (#xd92afe0b5aa789ef #x8cd7a6a51de3507e) (#xc3c0502f2e4069d9 #x2baeebd57121aa83) (#x543f81ef77152c79 #xca5df516f2737841) (#xc926fb6581a3dbb6 #x7304558caf54126a) (#x946fbd628a257253 #x44c02b39a61be6b1) (#x281ee9ebf90a8d7f #xa3edbda7fe17a522) (#xf044333f533ca8c1 #x4c2b0854417258cc) (#x3d6158a0949e86f0 #x706b1143237bbba3) (#x7ac2b083ebffcf23 #xe0d6228646f6b585) (#xc856dfba713277e7 #x101546da0dd2bffa) (#x06e3d88765e06e25 #x89666a374a9268e6) (#xc7c3c0d568419c5e #x64eaa74ebc7c5b86) (#xf7d7cf67c64d6ab5 #xa65c7135a9669dba) (#x4fa50b14f363601e #x0e35ab303c372f2c) (#x02e0487d23e19ba2 #xc62226ac87cf99e3) (#xbfe1382ba05fc8df #x421ea3647d4577e0) (#xebdeb9c4d74ae4a6 #x884356728f360fa1) (#x503c11153114d9fe #x8519b98d3f2e8944) (#x6fbd01c8866bc4ac #x33508e629b9aab04) (#xd12c1d3cd6a5a022 #x125f3e5044597174) (#x87f3d4ae825117f9 #x1e20edea31e590d6) (#x8a8683bcb8c367e2 #xacfd2ad20784ed49) (#x0c0573cdca03dc4a #xd1ccd46e94e7d00f) (#x4d454369d082fbbc #xc8178d9cbbf8b6cf) (#x241b9a2633095135 #x722169c96af0752d) (#xdfc9268c3f47e7ca #x05b1cc9257713898) (#x72c453b467fde6ee #x7e5eba731f4c948f) (#xffd12c504a4f4378 #x38d4e9c0f0dcbcb0) (#x42d05c06c9f11005 #xbce86c080a5652b3) (#xe3d85af35b48cd6b #x16cbce87d68c2eab) (#x017024dff091ac51 #x63111356a286ad90) (#xb477b7beff2dd6e1 #x79a50e6b01b66299) (#x100c056edb045259 #xffd3f329b2b74214) (#xa90ee5c21ebbf4a3 #x34ab3a7a85605d12) (#xa87ec11dee2a58f2 #x57ba292c27e6f082) (#x4543a05e5c80d271 #x569f1569e24297c5) (#xd6bfe16443d46256 #xf8284731ac4db402) (#x8916ef1e6bb35011 #x09ce1f2822cdd93a) (#x4836f74c6612a26a #xe442d251d423ea5a) (#x695ed94fe38baa89 #xba36e455d108c3e2) (#x180ae65957067b94 #x615b6bdceb0d631e) (#x8e851346fec29265 #xe3b96649cad91c4c) (#x2b8e85492a7aba8c #x06de885ddb5e9151) (#x9a8a86d263c735bb #x532ed9fbb533af5d) (#x3962c85ad29f7377 #x3f2f5dd8ee264aa6) (#x9e89162825c6c03c #x1c6a9560786e5e58) (#xc12018520da1f27b #xed8ccd79f6ee3360) (#x554fa53087848028 #xa94ce64050f5d5d1) (#xb872c473352e0aab #xa869da059551b296) (#xec4d459c423b26d2 #x62342f136722cad7) (#xcd256b9fc7a22e31 #x3c4019176209e36f) (#x140f95949d05a7de #xb097bfb27feab311) (#xb2946f399acdb8c4 #xf0c3645c4b240a7f) (#x6c2d6d6a551bf35f #x9663bb98bed39f77) (#xa3e84e88b15846cc #x6c0184235b15e5fb) (#x9d197a8af6b6f7cf #xb959a09a5d276a2b) (#x928c65e5efc51c76 #xcda6410eec898e57) (#xbc715489732fff2c #xe72d969e580c4393) (#xa47bb2d0242984b8 #x8676fd42b301208d) (#x682efd90131a06d8 #xd927f703738e6e72) (#x296ecd34099b212e #xc0fcaef15c9108b2) (#x1aeaae2474e7e036 #xa7794d706cc2fafd) (#x56dfc99254f4b7db #x0c7fd3ba75bce1a2) (#x76c7c34e21fc1369 #x311af6e8d211658a) (#x8bf6a7634852cbb3 #xcfec3984a50240d9) (#xcbc6b318a2424014 #xb5267320289b8b89) (#xb3e44be66a5c1495 #x93d2770ae9a2a7ef) (#xd85adad4aa3625be #xefc6b5f3bf65fdee) (#x594ad6fd4d875c62 #x7880322ec41205de) (#x3c117c7f640f2aa1 #x137a021581fd1633) (#x4946d39396830e3b #x8753c10776a547ca) (#x5ed92aa5d8f69e16 #x92f74b4f2c06c0a8) (#xb0742744b92c2366 #x36e142f0cceb939c) (#xa50b960fd4b828e9 #xe567ee1411878d1d) (#x52dc596812f5425c #x433b9f21b8e110a7) (#x34179f48e80d036c #x8df29ae0d8473739) (#x9ff932f7d5576c6d #x7f7b8636dae8f3c8) (#xc453ac77bb31abad #xc1d992b499356ff5) (#xb104039b49bd8f37 #x55f051a66e6d3e0c) (#x67bbe2ff0a69ed61 #xadd81697c2208a0e) (#xa7ebde72f759b34b #x2345c8b8964814fe) (#x0f951f6f1973ebb9 #x74ffe194b1aee47c) (#x21682e03859908e3 #x5e743604052b29b8) (#x31642b6d5e9d5aba #xa1a7c52db79c6bac) (#x968ff51fa9c4e9f1 #x82e20d9521d47f52) (#x97ffd1c0595545a0 #xe1f31ec38352d2c2) (#x911c09473cb52b85 #x689574f4c9c0ba24) (#xed3d6143b2aa8a83 #x01253c45c5a46747) (#xfd31642d69aed8da #xfef6cf6c77132553) (#x5fa90e7a28673247 #xf1e658198e806d38) (#x197ac286a797d7c5 #x024a788a498bce8e) (#xb50793610fbc7ab0 #x1ab41d3da330cf09) (#x583af222bd16f033 #x1b9121786694a84e) (#xb902e0acc5bfa6fa #xcb78c95337d71f06) (#x8d157fe42db2a596 #x468a53b3ef90283f) (#x0ae6ab4aafe3b26f #x58aabe59de75b8e9) (#xa10806f592b9dd6e #xaa23a28fdcda7c18) (#xceb5073d14d219c2 #x99732ced4740d71c) (#x414030a41a8127f6 #x19db59f22f1f66c0) (#xaa9e8960cdcbc350 #x91980f80a0296961) (#xfbd2bcaa0c4eb6ff #x7790a55b3d814db5) (#xf932f4d72faf2d5d #xb1b283f7ba4ed456) (#x2d6d5dce4f9ad4a9 #x8fb8e26a91ccf9b7) (#xbe911cf450ce648e #x210fb032dfc3da70) (#xf537871ae5acf117 #x607e57992ea90459) (#x0d7557123a92701b #xb2ddc73836617d9f) (#x26fbd25b10e8ca97 #xb4034f65ed3fecce) (#xbd01705683be537d #x843c85c8fa8aee03) (#xe7dbca091d4938ec #x598f821c1bd1dfae) (#xbbe2a8d1e65e3d58 #x0d5aefffb01886e5) (#xeaae9d1b27db48f7 #xeb5245242db0a231) (#xe44ba6abce390f1f #xfcbcb7e63e98ebdd) (#x12ec4d13f8e5c9fb #x39f1d5853578dbf7) (#x16efdde9bee43c7c #x76b5991ef8252af2) (#xba928c0e16cf9109 #x6e4bfca9129e2b75) (#x53ac7db7e264ee0d #x202a8c771a67bd37) (#x6aceb5ed30fb9d7a #x1f05d1aff441f791) (#x1b9a8afb84764c67 #xc4685e26ce44576d) (#xcab697c752d3ec45 #xd63760768a1d2619) (#x040390fa4601f587 #x4f444c9bcd5df105) (#x81100c29e7b179dc #x974687dd7b77f830) (#x0ee53bb0e9e247e8 #x17eef2c2132849ec) (#x4ed52fcb03f2cc4f #x6d24b8669eb182bc) (#x71543f16b48dd11d #xdb6d8f893a05a0fc) (#xe53b82743ea8a34e #x9fada4b09c1e464d) (#xe93ef1b9f4ab7f04 #x4e6170de08f99642) (#x30140fb2ae0cf6eb #xc2b6d67b151ac63c) (#x2c1d7911bf0b78f8 #xeca9f13c334a5427) (#x03906ca2d37037f3 #xa53335fa25493473) (#x0b968f955f721e3e #x3bbbad0f7cf31579) (#x3567bb97189caf3d #xeee389b67ac19aa9) (#xe6abeed6edd894bd #x3a9e914ab957723e) (#x57afed4da4651b8a #x6f6ec0ecd73a4c32) (#xc2b074f0ded1c588 #x48bff883d3a70713) (#x2afea196daeb16dd #x65cf9b0b79d83cc1) (#x0806e3378c0229cd #x9e8898f559ba210a) (#x2f8d15b36c7b4f0b #x499ac4c616036054) (#x1c0976a311078e13 #x2e1f27472650921b) (#xe04836518838fa98 #xb3f8fb7df3c51ad8) (#x951f99bd7ab4de02 #x27d1386f049d4b21) (#xcfc523e2e443b593 #xfa623fbbe5c67a8c) (#xd3cc5541f5443b80 #xd47d18fcc396e897) (#xf13417e0a3ad0490 #x2f3a1b02e3f4f55c) (#x7952dc21388ff8d0 #x45e5177c63bf81f6) (#xad0d753858ba0124 #x7bef76e1483dac17) (#x8ff537990e533e34 #x80a8751f685fb1dc) (#x74278b33021d88cb #xf738d04455defc69) (#x4c3567b6201357ed #xab069eca197e1b5f) (#xd45fa9196035f9f4 #x3e0a619d2b822de1) (#x36f7d735cbec98ce #x4bd0bc4c5f88aeda) (#x4ba69beeb5629599 #x4171e7abf16ade29) (#x22f842a156e93f10 #xfb4703fe20621dcb) (#x61583a786f898344 #x24be7ca088b2e2e8) (#x8866cbc19b22fc40 #x6adf0c7e804b74aa) (#x642b8e5dd919da92 #x08eb236de769be7d) (#xe2a87e2cabd9613a #x75daddd1740a833b) (#xabeeadbf3d5a6f01 #xf2891cd602afc4f1) (#x3812ec85220edf26 #x5c3e4e8e4ca0e736) (#xb7e7db1c2c5de112 #xdc963b9124ff56ea) (#xa69bfaad07c81f1a #x4054dbee34ceb96e) (#x991aea70b0b70248 #xf61dec01907a9b2e) (#xdd296ef11ca67c68 #xc393ea3ed0bea17b) (#x7fb104a65d6f96f5 #xcc837d4b292de910) (#x7822f8fec81e5481 #x26f4042ac1392c66) (#xfc4140f2993f748b #x9de7dc3ad59588c3) (#x8c655b3bdd2309c7 #x259b40e54d1685af) (#x0573b425b69059d6 #x2c555fcd6fdb5c95) (#x44338481ac117e20 #x358e063f40c43a55) (#x8463b80c5121200a #xbb13d81014aca4a5) (#x117c21b12b95fe08 #x9cc2e07f1031ef84) (#x0000000000000000 #x0000000000000000) (#x70241bc9441c7d4c #xb87c9cdf98830d6c) (#xae9d199a8bca36d7 #xdedc431b6d749864) (#x0793fc589571c274 #xea777961e814c576)) ((#xca4bbbc9cc5ff651 #xe6efa2675bea527e) (#x10cf72f803a5ae33 #x67ba66b80641dbac) (#xd0c26f5217156aa4 #x868e8b942ecb2670) (#xfffa7ed2a5e5de67 #xad6ecea889194a18) (#x4afcad05d43ecf0a #x587614ee6ba74557) (#x09e69792fc9d84e7 #x591e0db63b707c2c) (#xeb76f114d6f8ba28 #xa31b503e6fd9d79f) (#x241e190d7631551a #xa778349dec0333b0) (#x6aa14936d2b7506c #x96c1d85d672530cc) (#x827789d3203d5c65 #x6b1fca9e40ec34dd) (#x750bce7d656bd5fa #x142c376aca34f293) (#x66648d7442bccde8 #x2d53132f8465fab1) (#xe7b3355646f327ac #x18899b4c8c991de2) (#x5f108c2dbb0d785a #xdd40b492b5d628aa) (#xc2cd82b52ceca1a9 #x34b2913b582bde28) (#xb2e51f1825116d30 #xc21260954a2f9aea) (#x6347dea42e2ad48b #xcfdfd5eb5c554ce0) (#x543684a07fcc9983 #x51d8c533fe077772) (#x3e97cd96ad7bc9ef #xc7191d6e992247be) (#x205de43306899f66 #xceb7ccb30c82759b) (#x943b990a6b7c5d14 #xb0ec281fd68d8aae) (#x120fede73bf9cb0d #xb23c1aaf76e0f858) (#x257eb7e36a1f8605 #x2c3b0a77d4b2c3ca) (#xe573aa497eaf4292 #xcd0fe75bfc383e16) (#x8317273d3c138f7a #xe05cf474785dc4a7) (#xccc8d9e884bb5913 #x5aa6265ecbca37a1) (#xd481926c67ada0d8 #xef4173bace4a605b) (#xaeefa9a2b6bf5e87 #x1e3acd5faf2e8b3b) (#x618741bb1676b1b5 #x1a59a9fc2cf46f14) (#x8c72d28e886aa4df #x050b7dfbd30ddd54) (#x4759c7a9581b8191 #x68a7e176b0567f50) (#xce0846f7bce73c2d #x8f205a49bb6b1455) (#x2a1b4250de66ada0 #xc96c83f87fe2da39) (#x2b7becbec2487ebf #x422fbd1247532a43) (#x26de86124e6d3024 #x72fe488a9ca21044) (#x93d855c53fb62149 #x87e692cc7e1c1f0b) (#xe13057770e1788ee #xa4c01f751cb9783d) (#x11afdc161f8b7d2c #xecf958523ef02bd6) (#x7ced59ef99f6511d #x4d323adcf1448ebf) (#x40ba0b660cd1fdcc #x5fad5ba518c7eaf5) (#x0443fd3e70b8ca7c #x69cff82ee081462b) (#x463969474435528e #xe3e4df9c88e78f2a) (#x7388ac5c2d8f7ab8 #xa865b3535a14974c) (#xd6410d735ff1c5e6 #x3ac70fadbeeb43af) (#xc52e4e7a7826ddf4 #x03b82be8f0ba4b8d) (#x5b537113cbb5b226 #xb48f4cbc55576e81) (#xfbb983ecd55d141b #xc4a1368669980c33) (#x148c8fc6731d644f #x0e759e96e6c09d87) (#xc68e7f8b5c546bd5 #x5d7d6915b8aa9803) (#xa86ccb83fe5bf1c5 #xa27349663f0eeee4) (#x15ec21286f33b750 #x8536a07cde716dfd) (#x213d4add1aa74c79 #x45f4f259343385e1) (#x9118cada07ea4477 #x5260eedb0ebd3cff) (#xe9b66e0beea4df16 #x769d2c291f78f46b) (#x6861d629eaeb3552 #x4347a44a17841338) (#x4b9c03ebc8101c15 #xd3352a045316b52d) (#x0da56aac8c254e9b #x30d1f598dbf13a07) (#xbe20db5ab51af0b4 #x7980abe7a96f5097) (#x02c09f1f385c653e #xd5867c1770a123f4) (#xf61ce94059785a80 #xf470c31eb2693634) (#x35b1c51b69ba2836 #x4b816ccfd2f31866) (#x41daa58810ff2ed3 #xd4ee654f20761a8f) (#x495c9cf4f04c792b #x06b3561323b796d9) (#xdfa79ae1a36c4101 #x63d9021b859b3f83) (#x70289dad09fdcc99 #xf6a0f1ae120444c2) (#xf1ff258f0db226dd #xc37a79cd1af8a391) (#xb8a3b97bfdfe5ff6 #xc5c92fde394f3548) (#x907864341bc49768 #xd923d031360ccc85) (#x136f430927d71812 #x397f24454e510822) (#xbce044458d46958a #xac06d7f0d9ce7363) (#xe8d6c0e5f28a0c09 #xfdde12c327c90411) (#xad4f985392cde8a6 #x40ff8fa2e73e58b5) (#xb4667d396df5c272 #x7e5be4acda0fff35) (#x77cb51625d37b0c4 #xc1aa4b7dba95d167) (#xf819b21df12fa23a #x9a64747b2188dfbd) (#x3332a73a215e8774 #xf7c8e8f642d37db9) (#x52b5e681372836c1 #xed91410a6e2712ad) (#xc7eed165407ab8ca #xd63e57ff801b6879) (#xac2f36bd8ee33bb9 #xcbbcb148df8fa8cf) (#xc9eb8a38e82d4070 #xb82ae09a13fa81f0) (#x8951815ee4fcbdbc #xe787bb3f0b3d6b05) (#x483c321aec62aa34 #x8df068f91b0666a3) (#xedf593359e1c156a #x1f52d407fff9b240) (#x4c7fcf249cda6048 #xe43f90d7fb872088) (#x7a6e3bced112fe5f #xf17bbee56164eb60) (#x999ef3a6e759138f #x803ddd870d7cb0a9) (#x4fdffed5b8a8d669 #xbafad22ab397f306) (#xd202f04d2f490f9a #x5308f7835e6a0584) (#xa90c656de27522da #x2930778c07bf1e9e) (#x2df88e9f8aacd1fd #xfe66392bd7734f9c) (#x5a33dffdd79b6139 #x3fcc72566de69efb) (#x0f65f5b3b4792ba5 #xe557898fab5019f3) (#xf25f147e29c090fc #x9dbf3b3052e8701f) (#x5115d770135a80e0 #xb35403f72637c123) (#xcda8770698958a0c #xd1e518b4f37bc7db) (#x4d1f61ca80f4b357 #x6f7cae3dc336d0f2) (#xef350c2aa6407054 #xcad4a8108f5891b4) (#xe41304a76281918d #x464cd9b1c489ce6c) (#x9e7d3f69b3936fd2 #xb7376754a5ed250c) (#x6704239a5e921ef7 #xa6102dc5bcd40acb) (#xa5c9a12f727ebf5e #x92a2bcfee4ffd4e3) (#xd721a39d43df16f9 #xb1843147865ab3d5) (#x427a9479348d98f2 #x8a2b27b26866c901) (#xf33fba9035ee43e3 #x16fc05da6a598065) (#x27be28fc5243e33b #xf9bd7660a413e03e) (#xa22a6de026b4c303 #xa5a8062d4c6e4146) (#xf5bcd8b17d0aeca1 #xaab581e3fa79e5ba) (#x1faa874bb7dc8596 #x82edef37ad11c25f) (#x60e7ef550a5862aa #x911a971614459f6e) (#xf77c47ae4556899f #x7f33fdf48ad8c64e) (#xfc5a4f2381976846 #xf3ab8c55c1099996) (#xa4a90fc16e506c41 #x19e18214dc4e2499) (#x96fb06155320382a #x656a5408a62ca95a) (#xa7093e304a22da60 #x4724c0e9945ef717) (#x746b6093794506e5 #x9f6f0980f28502e9) (#x6227704a32040794 #x449ceb0164e4bc9a) (#xf4dc765f61243fbe #x21f6bf09c2c815c0) (#x98fe5d48fb77c090 #x0b7ee36d35cd40d3) (#xb385b1f6393fbe2f #x49515e7f729e6a90) (#x8af1b0afc08e0b9d #xb942f9c2432db88b) (#x29bb73a1fa141b81 #x97a9c10537f209b7) (#x5796b5515bbe2fa2 #x0f1d87ceb617a4fc) (#x4ebf503ba4860576 #x31b9ecc08b26037c) (#xee55a2c4ba6ea34b #x419796fab7e961ce) (#xabccfa72da2947e4 #xfcb60b9b771e3d6a) (#x8754da034cab4506 #x89930c5a98dc828c) (#x309296cb052c3155 #xa90daa0b0ac3ae37) (#x9a3ec257c32ba5ae #xdef89f7a456c6327) (#xa34ac30e3a9a101c #x2eeb38c774dfb13c) (#xec953ddb8232c675 #x9411eaedc748423a) (#x80b716cc1861395b #xbe99b689304d1729) (#xfad92d02c973c704 #x4fe2086c5129fc49) (#x84f4ebf268d9f327 #xd7564ea7d0cc5102) (#x690178c7f6c5e64d #xc8049aa02f35e342) (#x55562a4e63e24a9c #xda9bfbd9c6b68708) (#xdc07ab10871ef720 #x3d1c40e6cd8bec0d) (#xb7c64cc849877453 #x209ea651921f2cbb) (#xe3f0c868364bedd0 #x714663626c185bc9) (#xbd80eaab91684695 #x2745e91ae17f8319) (#x9ddd0e9897e1d9f3 #xe9f225a9edfdf682) (#xd3625ea33367dc85 #xd84bc96966dbf5fe) (#xc16db344089e1788 #x6a77d3c6103b0da6) (#x44f9f6587c6937b0 #x3662a38bf846acde) (#xa18a5c1102c67522 #xfb6d44d0047e92c8) (#x955b37e477528e0b #x3baf16f5ee3c7ad4) (#x7d8df70185d88202 #xc6710436c9f57ec5) (#x65c4bc8566ce7bc9 #x739651d2cc75293f) (#x76abff8c411963db #x4ae975978224211d) (#xc3ad2c5b30c272b6 #xbff1afd1609a2e52) (#x7b0e9520cd3c2d40 #x7a38800f59d51b1a) (#xcb2b1527d071254e #x6dac9c8d635ba204) (#xbb03888ad98ce9d7 #x9b0c6d23715fe6c6) (#xbf4075b4a93423ab #xf2c3950d91dea0ed) (#xaf8f074caa918d98 #x9579f3b5979f7b41) (#xba632664c5a23ac8 #x104f53c949ee16bc) (#x459958b66047e4af #xbd219d61c0f75ca4) (#x88312fb0f8d26ea3 #x6cc485d5338c9b7f) (#x81d7b822044fea44 #x35da886308fce753) (#x0cc5c442900b9d84 #xbb92cb72e340ca7d) (#x28dbdd4fe63ac89e #x1ceaffef0f43f9cd) (#x2c982071968202e2 #x752507c1efc2bfe6) (#x9f1d9187afbdbccd #x3c7459be9d5cd576) (#xaaac549cc60794fb #x77f535714fafcd10) (#x5e7022c3a723ab45 #x56038a788d67d8d0) (#x7e2dc6f0a1aa3423 #x98b446cb81e5ad4b) (#x0a46a663d8ef32c6 #x07db4f4b7360afa2) (#xa0eaf2ff1ee8a63d #x702e7a3a3ccf62b2) (#x3611f4ea4dc89e17 #x15442e329ae3cbe8) (#xc44ee09464080eeb #x88fb1502c80bbbf7) (#x6c222b179a53ff2e #x2a885c64f7055513) (#x18494b84e316f9cb #xb5e755e4058057fa) (#x39740159f9b1b5b2 #xf013a7bd31b3d21b) (#xd844562ef7a63d5c #x54d3b8c82d0aaa26) (#x31f238251902e24a #x224e94e132725e4d) (#x5dd0133283511d64 #x08c6c885c5770b5e) (#x164c10d94b410171 #xdbf3e2819661be73) (#x979ba8fb4f0eeb35 #xee296ae29e9d5920) (#xd5e13c827b8373c7 #x64024d50f6fb9021) (#x58f340e2efc70407 #xea4a0e411d47bd0f) (#xfd3ae1cd9db9bb59 #x78e8b2bff9b869ec) (#x8594451c74f72038 #x5c15704de87da178) (#x1be97a75c7644fea #xeb2217194d908474) (#xea165ffacad66937 #x28586ed4576827e5) (#x052353d06c961963 #xe28cc6c4d830b651) (#x5993ee0cf3e9d718 #x610930ab25f64d75) (#x72e802b231a1a9a7 #x23268db962a56736) (#x229d7b2c3ed5fa58 #x1b31b0a47c23566f) (#xb1452ee90163db11 #x9cd72268023f4964) (#x1a89d49bdb4a9cf5 #x606129f37521740e) (#x0b26088dc4c1e1d9 #x8c9871a14bd15fd8) (#xb9c31795e1d08ce9 #x4e8a113401fec532) (#xf9791cf3ed017125 #x11274a9119392fc7) (#x0886397ce0b357f8 #xd25d335c03c18c56) (#xc00d1daa14b0c497 #xe134ed2c288afddc) (#x9b5e6cb9df0576b1 #x55bba1907ddd935d) (#x863474ed50859619 #x02d032b0a06d72f6) (#x6f821ae6be21490f #x744d1e99bf15869d) (#x1eca29a5abf25689 #x09aed1dd95a03225) (#x2e58bf6eaede67dc #xa0a37bd69f639c12) (#x37715a0451e64d08 #x9e0710d8a2523b92) (#xe050f99912395bf1 #x2f83219f24088847) (#x1d6a18548f80e0a8 #x576b9320ddb0e1ab) (#xb02580071d4d080e #x17941c823a8eb91e) (#xc88b24d6f403936f #x3369de702b4b718a) (#xdbe467dfd3d48b7d #x0a16fa35651a79a8) (#x1929e56aff382ad4 #x3ea46b0e3d31a780) (#x56f61bbf4790fcbd #x845eb9248ea65486) (#x7148334315d31f86 #x7de3cf442ab5b4b8) (#x9cbda0768bcf0aec #x62b11b43d54c06f8) (#xcf68e819a0c9ef32 #x046364a383dae42f) (#x79ce0a3ff560487e #xafbefc18297438ee) (#x431a3a9728a34bed #x0168195850d7397b) (#x172cbe37576fd26e #x50b0dc6baed04e09) (#x2f381180b2f0b4c3 #x2be0453ca7d26c68) (#x03a031f12472b621 #x5ec542fd4810d38e) (#xda84c931cffa5862 #x8155c4df5dab89d2) (#x3d37fc6789097fce #x99dc5f93d1329430) (#x3ad430a8ddc30393 #xaed6e54079a30195) (#xb6a6e22655a9a74c #xabdd98bbaaaedcc1) (#x53d5486f2b06e5de #x66d27fe05696e2d7) (#xdd6705fe9b30243f #xb65f7e0cf53a1c77) (#xd924f8c0eb88ee43 #xdf90862215bb5a5c) (#x6bc1e7d8ce998373 #x1d82e6b75f94c0b6) (#x3814afb7e59f66ad #x7b50995709022261) (#x3ff76378b1551af0 #x4c5a2384a193b7c4) (#x23fdd5c222fb2947 #x90728e4e4492a615) (#x7f4d681ebd84e73c #x13f77821b9545d31) (#x78aea4d1e94e9b61 #x24fdc2f211c5c894) (#x92b8fb2b2398f256 #x0ca5ac2646adef71) (#x34d16bf57594fb29 #xc0c25225ea42e81c) (#x5cb0bddc9f7fce7b #x8385f66ffdc6fb24) (#x6ee2b408a20f9a10 #xff0e207387a476e7) (#x5075799e0f7453ff #x38173d1d1e863159) (#x07e3cccf54ca7c5d #x370abad3a89195a5) (#x6d4285f9867d2c31 #xa1cb628ecfb4a569) (#x1c0ab6ba93ae33b7 #xdc28adcae50111d1) (#xe6d39bb85addf4b3 #x93caa5a6b428ed98) (#x325209d43d70546b #x7c8bd61c7a628dc3) (#x8d127c60944477c0 #x8e484311ebbc2d2e) (#xa66990de560c097f #xcc67fe03acef076d) (#xdec7340fbf42921e #xe89a3cf1bd2acff9) (#x3c5752899527acd1 #x129f6179e983644a) (#xfe9ad03cb9cb0d78 #x262df042b1a8ba62) (#xf09f8b61119cf5c2 #x48394727224953eb) (#xd1a2c1bc0b3bb9bb #x0dcdb57e167ad60a) (#xb506d3d771db116d #xf518da46e2be0f4f) (#x8eb24d91b036c1e1 #xd08d01eca3acfea0) (#x0160aeee1c2ed31f #x8b433eea38b1f07a) (#x8b911e41dca0d882 #x3201c7287b9c48f1) (#x0e055b5da857f8ba #x6e14b76593e1e989) (#x3bb49e46c1edd08c #x2595dbaa4112f1ef) (#xe29066862a653ecf #xfa055d8854a9abb3) (#x0000000000000000 #x0000000000000000) (#x8fd2e37fac1812fe #x5bce3f069b1d0eda) (#x0683622148e4af42 #xbc498439902065df) (#x64a4126b7ae0a8d6 #xf8d56f38f4c4d945)) ((#x1cca2ad2f8e059d8 #x311da87247255817) (#xef10645c3874b669 #xc0b7538ae9aaee82) (#xa1d0914adb41d2c0 #x89df013d8f5eac55) (#xc7ff08545cf7bfba #x8edc20ac4e91a432) (#x684a8c77fbc6a016 #xfeec75a8033c248d) (#xf409a55bfeac6887 #x6c3cd105cf17a0e0) (#x63eb751f6a9ec558 #x7e3617e50cf09071) (#x5624d1af7ef56359 #x73f0c214ba5cc506) (#x756a44cf8b2e0fc4 #xbd41d37f12ab3b4a) (#xb0824b4f04c99f6a #xd73eef5af09d111b) (#xe175713544047b05 #x395807b32b59c268) (#xa8666ff69909989a #xeda67ff92c3596ca) (#xbee75e2678b95206 #x2ed1bb63326e3df1) (#xae5f66492f39e9a6 #x02805ba11b1fc76f) (#x8ac218fce4da020d #x51a76037d2702f56) (#x42b2e7ab4c5586d1 #x54241a0708a0e05e) (#x8163e19475826743 #xd17d027addbc9baa) (#x9e542ef8d67ae785 #x7673b824608c0a0e) (#xeb3e6a375d54e841 #xcb326b5b72273144) (#x1d20c8b870e8afd2 #x43ada6d711971fc7) (#xd094dbee354f832c #x3f1bea93067848d9) (#x2b1289b63f9bd0cd #xd878610a5d2e8303) (#x342546da9c63500b #x7f76db54e01e12a7) (#x7ae5b3cc7f5634a2 #x361e89e386ea5070) (#xd283dc3ae65fac38 #xdbb8f61aaadfc6ba) (#x93ccde2ff112f3f7 #x198ffe31586aef57) (#xead4885dd55c1e4b #xb98265fe24957694) (#x70aea8ce6606a7e6 #xc474e50bdf94a35c) (#x45610c7e726d01e7 #xc9b230fa6938f62b) (#xa98c8d9c11016e90 #x9f16715c7a87d11a) (#xd747303b0b77041a #xa28dc06e67e05eac) (#x57ce33c5f6fd9553 #x0140ccb1ecee82d6) (#x4f2a177c6b3d92a3 #x3bd85c1230460507) (#x2d2b800989aba1f1 #x375e45526a04d2a6) (#x92263c45791a05fd #x6b3ff0940ed8a887) (#x3d93b866de2b1a51 #x1b0fa59043752838) (#x31e1aadb714bf829 #x0643ed202d218ab1) (#x8d11f329dae2853b #xcc314acab3e83923) (#x157cd46ebaa81382 #x5564d6b6e44e6288) (#x3a4053b3e0139d67 #x86998f6d22ed3e4d) (#x4b0419170e1dcc8b #x305d64c3abcbdac1) (#xb546a74ee9e13748 #xae0bd92e3da2890d) (#x6e7385c84df6d12a #x11ca51f034167528) (#x2ed665b7d2b378ef #xa14d577e90111b15) (#x67c57b740fbe9b70 #x75b32f34977d4fb7) (#xe55b7f5e2124252d #x32dd3f62b0d41dae) (#x8cfb114352ea7331 #xbe81446fe55a7ef3) (#xa4147d4b36697ae2 #xf0ea374942613443) (#xc1c601ebeac7ce86 #x61fa04f479bbf597) (#xffa85c336ff40dc9 #xece6b348c0db141c) (#xc615ea3ed4ff49b0 #xfc6c2e091823e3e2) (#x7f215fcd927e9c80 #x4f2bbf974bd5c866) (#xf991558cd9c47cf5 #x03c09710f7f145b9) (#xa7e998f56d71a3fc #x66f92565b874fdf0) (#xb168a9258cc16960 #xa58ee1ffa62f56cb) (#x0a4b1b0219509344 #xf26a6ce8597ef32c) (#xbf0dbc4cf0b1a40c #x5c61b5c664dc7a21) (#x9fbecc925e72118f #x04c3b681363e4dde) (#xc402edea07ef66a4 #x18cf3280b4846d81) (#x33f6ad0fa25bd73d #xe2e0f1a9818604d2) (#xdb352286a417e662 #xbfc188de09b4fc25) (#x5841c4c60285ae35 #x8a1f962d78afe9ec) (#xce49f6e81ebff5e0 #xeaa55e68edfa9ead) (#xdadfc0ec2c1f1068 #xcd71867b5f06bbf5) (#xc870ff57a88f84dc #x05837a30dad0cf08) (#xdef1ce87493f4e40 #xc6f4beaac48b6433) (#x10b8386f5780bba0 #x2c51e0c22971fa9e) (#x9b90c2f93b524fa7 #x0f468e50adb39218) (#x49131ec3dd0de39f #xd4fe784a076c54a2) (#x5bbc2178599d772b #x1c0c840182ba205f) (#xc5e80f808fe790ae #x6a7f3c25e2362a51) (#xd6add251837ff210 #xd03dcecb3152197c) (#xcdb4135645a72cfe #x7cb64c4417ef571e) (#x25779cdf43eb1da1 #x219735339fddafe9) (#x2af86bdcb79326c7 #xaac86faf0b9cc4d3) (#x5433d67bade54c4d #x9753de9d16fb4b65) (#x1152da05df884daa #x5ee1ee677fc3bd4e) (#xa3c7969e0851fdd4 #x6d7c1db423f92236) (#xb4ac452461e9c142 #xdcbbd78b6b10cedd) (#xbac9504d1d990c2e #x255483b2a9e3e237) (#x808903fefd8a9149 #xa3cd0cdf8b0edc7a) (#xac48619dfc29c6b2 #xe6234728b7b8490c) (#xeced81e2636c6f77 #x56a441a613bf2731) (#xe74c788af2340a39 #xd67e23eb1c7393cd) (#x9a7a2093b35ab9ad #x7df680f5fb01d5c8) (#x6f9967a2c5fe2720 #x637a5f5562a432f8) (#x414f0215174d5fcf #xc237082bf2b529ed) (#x65d27ca0dcaeb464 #x911033bd3bdac1d4) (#x9da9cb468d623e9b #xe060aa089a99c3bd) (#xa22d74f480590bde #x1fcc1311754b65e6) (#x875ae82bc3b2167f #x3e5b2622ea96ca0f) (#x7b0f51a6f75ec2a8 #x44ae8746d05817a0) (#x78f2b418ac461bb6 #xd2bd956a2a4dde13) (#xb751a09a3af1185c #x4aa8c5a79105076e) (#xf1cd495a1384c0a5 #x1509e771022838f6) (#x854defff10a2396b #xdaf83aab4631446c) (#x28ef6c08648309d3 #x4e6b7326a73b4ab0) (#x18e424b99dc007f0 #x3a9890a3dca887d1) (#x829e042a2e9abe5d #x476e105627a95219) (#xca67f8837b9fabc8 #xe12066b97677416b) (#x40a5e07f9f45a9c5 #xb087068ea4076e3d) (#x4cd7f2c230254bbd #xadcb4e3eca53ccb4) (#xfe42be59e7fcfbc3 #x9e56bded966953cc) (#x1af3236d4ed028e4 #xde3b8c2a700f09b2) (#xf027ab309b8c36af #x67b9e9d4549a7f26) (#xada283f7742130b8 #x9493498de10a0edc) (#x95f5d790472282cb #xf6a9da696f40bef2) (#x941f35facf2a74c1 #x8419d4cc39f2f922) (#x27609b0b90fb32b5 #xc53429ba337a218a) (#x51f73a7a40cde46f #xee66e8e9dbc4d373) (#x61fc72cbb98eea4c #x9a950b6ca0571e12) (#x22a4770a7dd39a97 #xbc011fcefe45b99c) (#x1496360432a0e588 #x27d4d813b2fc2558) (#x84a70d9598aacf61 #xa848340e108303bc) (#x8374e640a6924857 #x35de1ef3711b15c9) (#xe36276e197145411 #xddfb1b3a87fe4c0b) (#xf7f440e5a5b4b199 #xfa2fc32935026953) (#x0d98f0d727681472 #x6ffc461538e6e559) (#x20b370deaec3b583 #x58a2034752e237ff) (#x268a796118f3c4bf #xb784271f65c8665a) (#xe9296de38e44c755 #x2f9177d2de80bf27) (#x385754673303b273 #x623a93e48e4ab02e) (#x234e9560f5db6c9d #xceb1116ba8f7fe4c) (#x4aeefb7d86153a81 #x42ed6a66fd799d11) (#x59ab26ac8a8d583f #xf8af98882e1dae3c) (#x9987c52de84260b3 #xebe592d901141c7b) (#xf230ace4489c19bb #x831af55df83df145) (#xc99a1d3d208772d6 #x773374958c6288d8) (#xcfa3148296b703ea #x981550cdbb48d97d) (#x8eec169781fa5c25 #x5a2258e649fdf090) (#x7480a6a50326f9ce #xcff1ddda44197c9a) (#xeefa8636b07c4063 #xb2075d2fbf18a952) (#x3f84bfb20d3b3545 #xffacb919efd2a65b) (#xd3693e506e575a32 #xa908f8bffc6d816a) (#xfc55b98d34ecd4d7 #x7af5a1643aceddaf) (#x7cdcba73c966459e #xd938adbbb1c001d5) (#x6bb769c9a0de7908 #x68ff6784f929ed3e) (#xf5e3473176a49e8d #x1e8cdfa099a5e730) (#x39bdb60dbb0b4479 #x108a9d41d8f8f7fe) (#x249d7eb5cbe3ebab #x53273b96c96fe839) (#x07d3ebd53e388736 #x9d962afd61981675) (#x2cc1626301a357fb #x45ee4bf73cb69576) (#x71444aa4ee0e51ec #xb6c4ebae8926e48c) (#x0ba1f9689158654e #x80da624d0fccb4fc) (#xb2954c9bd7d9b07e #x339df3d35c3a9f78) (#x777d431b583e20d0 #x59e2cff6be0cb529) (#x0e6515697c70cd6c #xf9ef5439c2f32cea) (#x47760baaa17d2ef3 #x2d112c73c59f7848) (#xe8c38f89064c315f #x5d2179778832f8f7) (#xf87bb7e651cc8aff #x717099b5a1430269) (#x7ecbbda71a766a8a #x3d9bb1321d678fb6) (#xb6bb42f0b2f9ee56 #x3818cb02c7b740be) (#xfdbf5be7bce422dd #x0845afc16c7c9a7f) (#x12af3fbb849094b4 #xc8f2fc4b85d674fd) (#xd4bad585506fdd04 #x349ed2429df5971f) (#x1345ddd10c9862be #xba42f2eed364332d) (#xe288948b1f1ca21b #xaf4b159fd14c0bdb) (#x168131d0e1b0ca9c #xc377c49a1e5bab3b) (#xdd0c2b391227975e #x50e7ac863e9ead80) (#x8b28fa966cd2f407 #x23176e9284c26886) (#xc02ce38162cf388c #x134a0a512f09b247) (#xe09f935fcc0c8d0f #x4be809167deb85b8) (#x3baab1d9681b6b6d #xf42981c8745f799d) (#xcc5ef13ccdafdaf4 #x0e0642e1415d10ce) (#xd17e3984bd477526 #x4dabe43650ca0f09) (#x520adfc41bd53d71 #x7875fac521d11ac0) (#x69a06e1d73ce561c #x8c5c7b0d558e635d) (#x7d365819416eb394 #xab88a31ee7724605) (#x05c4ec01ed28a822 #x79353674cd3f9816) (#xfa6cb03282dca5eb #x95d3853c0de48c0a) (#x79185672244eedbc #xa00d9bcf7cff99c3) (#x063909bfb630713c #xef262458372a51a5) (#x37d8a364c77b8915 #xe965c9781a0bdb14) (#x90313b91aa0a2ae9 #x8f9cec1da27f26e4) (#x6a5d8ba328d68f02 #x1a4f6921af9baaee) (#x601690a131861c46 #xe82505c9f6e559c2) (#x7697a171d036d6da #x2b52c153e8bef2f9) (#x88d51f2837ca2d19 #xb5047cbe7ed7a135) (#x435805c1c45d70db #x269414a25e12a78e) (#x03fde5be5b18d91e #x9613122cfa15c9b3) (#x5d8528c7efad0617 #xf32aa059b59071fa) (#xdf1b2cedc137b84a #xb444b00f923923e3) (#x01eae26a8808f60a #x72b00ea556b247d0) (#x29058e62ec8bffd9 #x3cdb7d83f1890d60) (#x215992b426cb4389 #x2a120de20450702f) (#x0c7212bdaf60e278 #x1d4c48b06e54a289) (#xd92225527707c976 #x5b629457a5137246) (#xe4b19d34a92cd327 #x406d31c7e6665a7e) (#xbd1abb9823a18b18 #xb8c2a94fc87bf442) (#x300b48b1f9430e23 #x74f3e3857b93cd61) (#x72b9af1ab51688f2 #x20d7f98273332d3f) (#x48f9fca955051595 #xa64e76ef51de1372) (#x9608322e1c3a5bd5 #x60bac84595557741) (#x4ec0f516e33564a9 #x496852b766f442d7) (#xab9b8a48c2114184 #x7bb56dd5d6205f79) (#xfb8652580ad453e1 #xe7638b995b56cbda) (#x5c6fcaad67a5f01d #x819aaefce322362a) (#xf61ea28f2dbc4793 #x889fcd8c63b02e83) (#x042e0e6b65205e28 #x0b8538d19b8ddfc6) (#x1f37cf6ca3f880c6 #xa70eba5ebd3091a4) (#x53e03dae93ddcb7b #x0ac5f46077635d10) (#x501dd810c8c51265 #x9cd6e64c8d7694a3) (#x86b00a414bbae075 #x4ceb2887bc248ddf) (#xd8c8c738ff0f3f7c #x29d29af2f3a13596) (#x91dbd9fb2202dce3 #xfd2ce2b8f4cd6134) (#x1b19c107c6d8deee #xac8b828f26bd4e62) (#x5a56c312d1958121 #x6ebc8aa4d408678f) (#xaa7168224a19b78e #x09056370809218a9) (#x469ce9c02975d8f9 #x5fa122d6932d3f98) (#x35cfa4b0146ba601 #x0dc6d5f1b6ac5577) (#x3c795a0c5623ec5b #x69bfab3515c76fe8) (#x9c43292c056ac891 #x92d0a4adcc2b846d) (#x021707d4d3102f14 #xe4a31c89aca78e63) (#x662f991e87b66d7a #x07032191c1cf0867) (#xa6037a9fe57955f6 #x14492bc0eec6ba20) (#xf3da4e8ec094efb1 #xf1aafbf8ae8fb695) (#x4d3d10a8b82dbdb7 #xdf7b409b9ce18b64) (#xa03a7320534924ca #xfb6f0f98d9eceb85) (#x09b6febc42484a5a #x64797ec4a36b3a9f) (#x73534d703d1e7ef8 #x5267f72725816aef) (#x1edd2d062bf076cc #xd5beb4fbeb82d674) (#x55d9341125edba47 #xe5e3d03840490cb5) (#x176bd3ba69b83c96 #xb1c7ca3f48e9eceb) (#x64389eca54a6426e #xe3a03d186d688604) (#x893ffd42bfc2db13 #xc7b4721b2865e6e5) (#xbb23b2279591fa24 #x57e48d17ff51a5e7) (#xb37faef15fd14674 #x412dfd760a88d8a8) (#x5e78cd79b4b5df09 #x6539b2754f85b849) (#x5f922f133cbd2903 #x1789bcd01937ff99) (#xb934b5f34681d530 #xb347919e53f62b84) (#x085c1cd6ca40bc50 #x16c97061f5d97d4f) (#x3e6e5dd88533c34f #x8d1cb7bcb960e18b) (#xd55037efd8672b0e #x462edce7cb47d0cf) (#xed076388eb64997d #x24144f03450d60e1) (#x986d2747604a96b9 #x99559c7c57a65bab) (#x321c4f652a532137 #x9050ff0cd7344302) (#xdce6c9539a2f6154 #x2257a223682cea50) (#x3632410e4f737f1f #x9bd5c7dd4cb99cc4) (#xcb8d1ae9f3975dc2 #x9390681c20c506bb) (#xe6a69ae07a3cfc33 #xa4ce2d4e4ac1d41d) (#xb8de5799ce89233a #xc1f79f3b05446c54) (#x2f3c87dd5abb8ee5 #xd3fd59dbc6a35cc5) (#xa5fe9f21be618ce8 #x825a39ec14d37393) (#xbcf059f2aba97d12 #xca72a7ea9ec9b392) (#xc3d1063f39d7e192 #x8559187dd51c7bf4) (#xafb58423a7311fac #x703055044dad80bf) (#x6d8e607616ee0834 #x87d943dcce03bc9b) (#x62019775e2963352 #x0c8619405a42d7a1) (#x448bee14fa65f7ed #xbb023e5f3f8ab1fb) (#x190ec6d315c8f1fa #x48289e068a1ac001) (#xc23be455b1df1798 #xf7e916d883ae3c24) (#x97e2d0449432addf #x120ac6e0c3e73091) (#x0000000000000000 #x0000000000000000) (#x0f8ff703f4783b66 #x8b5f5a9c94416b3a) (#x8f06f4fd09f2aa2f #x289256431f4fb740) (#x6c64821c9ee6fe3e #xf5694d7998b1fb4b)) ((#x13dba88557b945c2 #xc67b0bb0b9b03f2a) (#x2181537c20c25995 #x36576d1fc21f5664) (#x6e420129639373a6 #x9d35f49b939b3891) (#x5e9720693d487827 #x4b6ff58b488b0c08) (#xd85975e39466c8e0 #xb586e5486648ca8c) (#x461cd14912c49c86 #x20421483c48316a5) (#xe6a7170a155ba606 #x915d12e35be3ae75) (#xdb70c2e74896355d #x80cb5049964958d1) (#x9a98d31bd4217a09 #xd9283f7621766644) (#x663bef88c7562f78 #x052eab2256228f4b) (#xc90d07dfea7f9af4 #x558b89477f47a871) (#xf2887f3acc913016 #x2e8762ef91efb96f) (#x8eb7bb2b0debec19 #x66f24f7aeb7a715e) (#xd7d45bf7bed047ec #x543cc14dd04d5566) (#xe27a60bb47d88869 #xddb1dc5ed85e1418) (#x057b1a0ca7d3c404 #x5fd71c03d30375e7) (#xdc840252c6e5e68f #xf96a2bf5e5f570e1) (#x3c71b850a89d7930 #x02ad90149d14392e) (#xa6e96b4b7cbc0339 #xdb85af62bc625f6a) (#x42c1a6f84047b2e9 #x6caeda3e473eacc8) (#x73b2ea05ebcc5303 #xa9cf0990cc9057db) (#x8c386192244bfbcf #x408428c54bc52c89) (#x6ccddb904a336470 #xbb43932433246546) (#x230e89c509624e43 #x10210aa062a00bb3) (#xd186f6ffc5f37e55 #x3ea6684ff34fb2dc) (#x27d3fe745be1602c #x5ccdc41de11db1de) (#xf7f365366b42f412 #x71507eec42eccc88) (#x4ceae5519fa1d78e #x9e2f2c85a185fca8) (#x713d30bcc26c44d5 #x8fb96e2f6c2f0a0c) (#xa3927147db6fc73d #x8452b3616f612a8d) (#x07f4c0b58e73d3d2 #x79a17bbc73bc2830) (#x8a6acc9a5f68c276 #x2a1e81c768c7cb33) (#x1ed95c2854afdd18 #x01b7480aaf0afd17) (#xa964455f560a8c35 #x3a3f8b670a67c080) (#x76c9f0094c1f9707 #xf61815931f93223c) (#xf007a583e53127c0 #x08f105503150e4b8) (#xbabfedda01b3c9f7 #xfc4480d7b3d7ffaa) (#x963c4a0b226708b8 #x0ddfae7267726bf3) (#x8f11d696f8bb0672 #x75c99dc4bbc4bed4) (#x84418f33808ea711 #xd89f777c8e7c9b53) (#x99b1641f08d187b4 #xec658a77d177f419) (#xb049d9c28cd682ff #x4229b8d1d6d115a7) (#xfd05512ee627bf1a #xcf3d46ea27ea2685) (#x5a4a57d86fcb5648 #x07833b36cb36b665) (#x61cf2f3d4925fcaa #x7c8fd09e259ea77b) (#x4e653fe8b601c058 #xb8594b3a013aa17f) (#xc72644763599ff93 #xa70a7ffc99fcf811) (#xb83037632813de21 #xda32e7681368a27d) (#x7bcb04a44f090fdd #x31d456290929e001) (#x78e2b3a093f9f260 #x0499e328f928725c) (#x0f8d2e142ab68f0c #xe1ba2405b6059fea) (#xf57cbf8f42e2e3c4 #x57261953e253915f) (#x5dbe976de1b8859a #x7e22408ab88a9e55) (#x4b1e25e411d2045c #xe78e5739d239d498) (#x3721e1f5d0a8d853 #xaffb7aaca8ac1ca9) (#x6fe46c9496c399cd #x8e0e2625c325f71b) (#xdfadb5561a151b32 #xcc279ef415f4e2bc) (#x6d6bb62dbf638e1b #xa878419a639aaacc) (#xadb932ee0489a25a #x76d345da89da7aed) (#x188bf1202f8ce4a1 #x6b2de1088c081aad) (#x4d4c88ec6af13de5 #x8d14fe3bf13b3322) (#x33fc9644822bf63c #xe317b4112b11a6c4) (#xc25d5e7a924a3b97 #xf8dd63ff4aff8df6) (#x1c5686917d0fcace #x27c12fb50fb5a0c0) (#xe7017ab7e00b4c6d #x8266c05d0b5d61ff) (#x9b3ebea621719062 #xca13edc871c8a9ce) (#x5963e0dcb33babf5 #x32ce8e373b372438) (#xea038e1ae31dd4b7 #x45aa83e71de7a3c2) (#x3b8578e526eeaae2 #x7b0ceba8eea8111e) (#xc0d284c3bbea2c41 #xdeab0440ea40d021) (#xfca33c9313775571 #xdc0694547754e90f) (#x56eecec8998d24f9 #xd374aa328d32bbd2) (#x31734cfdab8be1ea #xc561d3ae8baefb13) (#x64b43531eef638ae #x2358cc9df69dd29c) (#xdd226fef33b50ce4 #xea51f94bb54bbf6b) (#x7944de1d66a9180b #x17a23196a996bdd6) (#x0879eea1a4c55cde #x981b5fb9c5b9b7da) (#xcc761dd34dac5ef0 #x0a5c9544ac44dd96) (#xe153d7bf9b2875d4 #xe8fc695f285f8645) (#x09df831c5195b6b5 #x8b208d0795077850) (#x8d9e0c2fd11b11a4 #x53bffa7b1b7be303) (#x75e0470d90ef6aba #xc355a092ef92b061) (#xd2af41fb190383e8 #x0bebdd4e034e2081) (#xec512312983eed0e #x2f302ae53ee54478) (#xbb198067f4e3239c #xef7f5269e3693020) (#xac1f5f53f1d94831 #x65e89764d964b567) (#xf655088b9e121e79 #x626bac5212520302) (#xc3fb33c7671ad1fc #xebe6b1411a41427c) (#xcf5faad7915ca34d #x3f1120455c454fcb) (#x9d6c13ae5a52a9db #xa08944ca52ca4e74) (#xf9d8269fb4a49175 #x83d18857a4579ce8) (#x721487b81e9cb968 #xbaf4db2e9c2e9851) (#x813a953f275d6315 #x87486b7f5d7feeb4) (#x127dc538a2e9afa9 #xd540d90ee90ef0a0) (#x906ee70359443101 #x6745077044708c49) (#x5bec3a659a9bbc23 #x14b8e9889b8879ef) (#x7f1673151d8a21b2 #x7d3898948a945a6c) (#x94b390b20bc71f6e #x2ba9c9cdc7cd3624) (#x2faa10d5ff243cf2 #xc4d69ba424a40604) (#x4535664dce34613b #x150fa182348284f8) (#xa74f06f689ece952 #xc8be7ddcecdc90e0) (#xedf74eaf6d6e0765 #x3c0bf85b6e5b8bf2) (#x29f8bddd8407054b #xae4c32a607a6e1be) (#x36878c4825f83238 #xbcc0a812f812d323) (#xc174e97e4ebac62a #xcd90d6febafe1fab) (#x24fa497087119d91 #x6980711c111c2383) (#x028fdab929a017d6 #x267667bfa0bf5dd7) (#x5395d4c43e5ee0fd #x8ca3b6315e31ce35) (#xc68029cbc0c915f8 #xb431ad42c942379b) (#xaf36e8572d29b58c #x50a522652965273a) (#x44930bf03b648b50 #x0634733c643c4b72) (#x10f21f818b49b87f #xf336beb149b1ad77) (#xde0bd8ebef45f159 #xdf1c4c4a454a2d36) (#x0af634188d654b08 #xbe6d38066506ea0d) (#x7eb01ea8e8dacbd9 #x6e034a2ada2a95e6) (#x6b391b25c440b7a2 #xc2e2e89840984d76) (#xb532c3ce2b0546fb #x1dfea4d205d26040) (#x1ba24624f37c191c #x5e6054097c0988f0) (#xb2c6037ba5769529 #x645fdf6e766e4870) (#x979a27b6d737e2d3 #x1ee47ccc37cca479) (#x04dd77b152832e6f #x4ceccebd83bdba6d) (#x267593c9aeb18a47 #x4ff616a3b1a37e54) (#x41e811fc9cb74f54 #x59e36f3fb73f3e95) (#xc8ab6a621f2f709f #x46b05bf92ff967fb) (#x62e6983995d50117 #x49c2659fd59f3526) (#x483792e0cd22f9e1 #xd2c3e238223846c5) (#x6340f5846085eb7c #x5af9b7218521faac) (#xb61b74caf7f5bb46 #x28b311d3f5d3f21d) (#x9347500785b4ccbc #x5208b271b4711e14) (#x6512588c1ba6d2c5 #x30631e23a6231d16) (#xcb82dd66c3df8d22 #x73fdeef8dff8f5a6) (#x709b5d01373caebe #x9c82bc913c91c586) (#x5233b979cb0e0a96 #x9f98648f0e8f01bf) (#x809cf882d20d897e #x9473b9c10dc1213e) (#x8bcca127aa38281d #x39255379387904b9) (#x0652ad087b2339b9 #x6a9aa9022302e7ba) (#x2b776764ada7129d #x883a5519a719bc69) (#x1706df34053a6bad #x8a97c50d3a0d8547) (#x776f9db4b94f7d6c #xe523c72d4f2dedb6) (#x35ae3b4cf908cf85 #x898d1d130813417e) (#x74462ab065bf80d1 #xd06e722cbf2c7feb) (#xf87e4b2241f47b1e #x90ea5ae9f4e95362) (#x1df0eb2c885f20a5 #x34fafd0b5f0b6f4a) (#x3efe62e9813d6ee6 #x24dbf7ab3dab64f9) (#xc40ff372e969022e #x9247cafd69fd6a4c) (#x38accfe1fa1e575f #x4e415ea91ea98343) (#xe88c54a3cabdc361 #x63dce458bd58fe15) (#xd3092c46ec536983 #x18d00ff053f0ef0b) (#x55c779cc457dd944 #xe6391f337d33298f) (#x0ca49910f64672b1 #xd4f7910446040db7) (#xa466b1f2551c14ef #xfdf3c8dd1cdd02bd) (#x4367cb45b5175882 #x7f95088017806342) (#xdad6af5abdc6df36 #x93f082f7c6f7975b) (#xfb57fc269d0486a3 #xa5a7efe804e8c13f) (#xf4dad232b7b209af #x441dcbedb2ed5ed5) (#xaa4df25b8afa7188 #x0f723e66fa6652dd) (#x3a231558d3be4089 #x68373916be16de94) (#x7c3fc411c17adc0f #x48752d957a95c831) (#x6810ac2118b04a1f #xf7af5d99b099df2b) (#xb3606ec650267f42 #x77640dd026d087fa) (#x2ad10ad958f7f8f6 #x9b0187a7f7a773e3) (#x981709a2fd816ddf #xff5e58c981c93b93) (#xd55b814e9770503a #x724aa6f270f208b1) (#x60694280bc7516c1 #x6fb40220752068f1) (#x22a8e478fc32a428 #x031ad81e321ec439) (#x5c18fad014e86ff1 #x6d199234e83451df) (#x89437b9e83983fcb #x1f5334c698c6596e) (#x5748a3756cddce92 #xc04f788cdd8c7458) (#xd672364a4b80ad87 #x470713f380f39aec) (#xae9085ead8795fe7 #x439ef0db79dbe8b0) (#xd0209b4230a3943e #x2d9dbaf1a3f17d56) (#x255c24cd724177fa #x7abba3a241a2ec09) (#x9fe3c91773f2be0d #x86ff2375f27513a3) (#xd4fdecf36220ba51 #x6171744c204cc73b) (#x7a6d6919ba59e5b6 #x22ef849759972f8b) (#x1589058d2c9a7c7b #xace1a2b29ab2d890) (#x69b6c19cede0a074 #xe4948f27e02710a1) (#x404e7c4169e7a53f #x4ad8bd81e781f11f) (#x54611471b02d332f #xf502cd8d2d8de605) (#xf32e128739c1da7d #x3dbcb051c15176e5) (#xe58ea00ec9ab5bbb #xa410a7e2abe23c28) (#xca24b0db368f6749 #x60c63c468f463a2c) (#x511a0e7d17fef72b #xaad5d18efe8e93e2) (#x2e0c7d680a74d699 #xd7ed491a741ac98e) (#xe3dc0d06b2886202 #xce8a0ee088e0db92) (#x4ab84859e482ee37 #xf4b5858782871b12) (#xef78941644ce10b3 #x1a7d9fe4cee4d625) (#x1f7f3195a1ff3773 #x128c9ab4ffb4329d) (#x7d99a9ac342a3664 #x5b4eff2b2a2b07bb) (#xeba5e3a7164d3edc #x569151594d596c48) (#xeedef9abb19efad8 #x09464d5a9e5a19af) (#x6a9f769831105dc9 #xd1d93a26102682fc) (#xf1a1c83e1061cdab #x1bcad7ee61ee2b32) (#x4fc3525543512a33 #xab62998451846ef5) (#x01a66dbdf550ea6b #x133bd2be50becf8a) (#xff8a8b97cf87a8cc #xe94b215587557b52) (#xb494ae73de55ac90 #x0ec5766c556cafca) (#xe428cdb33cfbb1d0 #xb72b755cfb5cf3a2) (#x876838375c7e5aac #xedd2c27d7e7d090e) (#xe0f5ba026e789fbf #xfbc7bbe178e149cf) (#x0d02f4ad031698da #xc7cc43ba16bac23d) (#xfe2ce62a3ad742a7 #xfa70f3ebd7ebb4d8) (#xa8c228e2a35a665e #x290459d95ad90f0a) (#xbe629a6b5330e798 #xb0a84e6a306a45c7) (#x85e7e28e75de4d7a #xcba4a5c2dec254d9) (#x679d82353206c513 #x1615799c069c40c1) (#x91c88abeac14db6a #x747ed5ce14ce43c3) (#x50bc63c0e2ae1d40 #xb9ee0330ae305c68) (#x8213223bfbad9ea8 #xb205de7ead7e7ce9) (#x3dd7d5ed5dcd935b #x119642aacdaaf6a4) (#xa11dabfef2cfd0eb #xa224d4decfde775a) (#x9e45a4aa86a25466 #x95c4f1cba2cbdc29) (#xa2341cfa2e3f2d56 #x976961df3fdfe507) (#x30d521405edb0b81 #xd65a0110db103499) (#x1a042b99062cf377 #x4d5b86b72cb7477a) (#x325afbf9777b1c57 #xf02c66af7baf694e) (#xbced40d27a90f04e #x96de29d590d51810) (#x3f580f54746d848d #x37e025156d15ab73) (#x9cca7e13af0243b0 #xb3b29674027481fe) (#xbfc4f7d6a6600df3 #xa3939cd460d48a4d) (#xb1efb47f79866894 #x51126a6f866fda2d) (#x285ed0607157ef20 #xbd77e01857182e34) (#x2d25ca6cd6842b24 #xe2a0fc1b841b5bd3) (#x92e13dba70e426d7 #x413360cfe4cfd19e) (#x1154723c7e195214 #xe00d6c0f190f62fd) (#x58c58d61466b419e #x21f55c896b89ebb2) (#x9515fd0ffe97f505 #x38921b739773f9ae) (#x16a0b289f06a81c6 #x99ac17b36ab34acd) (#x47babcf4e79476ed #x3379c63d943dd92f) (#xfaf1919b68546cc8 #xb69c3d5654560eb5) (#xcdd0706eb8fcb49b #x196747fafcfa121c) (#x0329b704dcf0fdbd #x354db501f001925d) (#xa5c0dc4fa04cfe84 #xeec81a634c63cd37) (#x83b54f860efd74c3 #xa13e0cc0fdc0b363) (#x192d9c9ddadc0eca #x781633b6dcb6d527) (#x4991ff5d3872138a #xc1f830867286894f) (#x390aa25c0f4ebd34 #x5d7a8c174e174cc9) (#xcef9c76a640c4926 #x2c2af2fb0cfb8041) (#x142f6830d9ca9610 #xbfda700cca0c171a) (#xbd4b2d6f8fc01a25 #x85e5fb6bc06bd79a) (#xabeb9fe67faa9be3 #x1c49ecd8aad89d57) (#x0b5059a57835a163 #xad56eab835b82587) (#xe92a391e3fed290a #x70e736e6ede6319f) (#x2c83a7d123d4c14f #xf19b2ea5d4a59459) (#xd9ff185e6136228b #xa6bd37f636f60506) (#x86ce558aa92eb0c7 #xfee910c32ec3c684) (#x0e2b43a9dfe66567 #xf281f6bbe6bb5060) (#xb7bd197702a5512d #x3b88c36da56d3d97) (#x20273ec1d592b3fe #x256cbfa192a199ee) (#xc5a99ecf1c39e845 #x817c18433943a5c6) (#x88e5162376c8d5a0 #x0c68e678c87896e4) (#xa0bbc643079f3a80 #xb11f06609f60b8d0) (#x0000000000000000 #x0000000000000000) (#xb9965adedd43344a #xc90935d643d66df7) (#x340856f10c5825ee #x9ab6cfad58ad8ef4) (#x5f314dd4c818924c #x585427351835c382)) ((#x223b6375937fdaab #xda0922c284a640b7) (#xe1f51bc1a6f4d9bb #xd9dde19524c5a254) (#xe703af84020e3c83 #x3c08e7a657b03622) (#xd060c4ed40038c0d #x8cc3d02772a20fca) (#x269fbbb2ead3dd3a #xdd2e26e067411952) (#x2ab0103861e4d44a #xd4472a8681abf2be) (#x9839a98d2ecaf2e8 #xf2b898065fc7648b) (#xa88540e04716d6eb #xd6dfa85d41e94ebd) (#x27b68df365f8ac8f #xac5727092f089efa) (#xb1f2e3761d53b5be #xb574b17806b7dc0e) (#xf009cb1a0e2ab40f #xb438f0f4669682ee) (#x1f8117d3febf866d #x867e1f16342b06c5) (#xa00e33adb58dd80a #xd891a01944e4fcb4) (#xd5ed2a6bb684fa29 #xfa9dd5ecd90cd187) (#xb3a08ff4c0055717 #x5786b3699625119d) (#x512ecef6348c1db0 #x1dd051046a3bf9f2) (#x0d069dcb041c78c5 #x78100d8faea36c44) (#x4a0b01e2b39f9c4c #x9c894a30bdf7a6d2) (#x6dbd8c11d66730c3 #x30de6d3992ff3828) (#x012936418f2b71b5 #x717901e9484987a8) (#x4cfdb5a717657974 #x795c4c03ce8232a4) (#x54a32070c20b6b94 #x6b8e54cfc19527bf) (#x13aebc5975888f1d #x8f171370d2c1ed29) (#x1558081cd1726a25 #x6ac21543a1b4795f) (#x0ad91fcf2fcdec48 #xecbc0a55959f7f9a) (#x3ec12e653fbdcfda #xcffc3e2c68560c49) (#x4eafd925ca339bdd #x9bae4e125e10ff37) (#x88ec4f17093feee9 #xee24888e55ddc399) (#xb850a67a60e3caea #xca43b8d54bf3e9af) (#x3c9342e7e2eb2d73 #x2d0e3c3df8c4c1da) (#xa583dd2b430aae2e #xaecfa5d2ef4a22f9) (#x8b9715d45b427df5 #x7daf8b768d0689a2) (#x25e4e171b8ae4e26 #x4ea52518bf9a5369) (#x9ecf1dc88a3017d0 #x176d9e352cb2f0fd) (#x1dd37b5123e964c4 #x648c1d07a4b9cb56) (#xeb2c040e893935f3 #x3561ebc0b15addce) (#xbcf47ebd194fcd7b #xcd64bcf7a814b04a) (#x5adee778946a804d #x80155ab8b7ed01c0) (#xdab9db226fce6045 #x607fda72e73d7050) (#x02526c82dd56e2a9 #xe2f202119092cd93) (#xa9ac76a1c83da75e #xa7a6a9b409a0c915) (#x1ea821927194f7d8 #xf7071eff7c62816d) (#xecf3860aa2e8a17e #xa1cdec1a8a66ce10) (#xfbf9e294aecc29f2 #x29fdfb48bb407adc) (#x14713e5d5e591b90 #x1bbb14aae9fdfef7) (#x7c415cca7eb95d77 #x5d3b7c58d0ac1892) (#x79ccb24c883e2b53 #x2b6579937b02c6df) (#x48596d606ec97ee5 #x7e7b48212d656b41) (#x1a0cf9550838f049 #xf0201add9f85d888) (#x94160207a5fdfb98 #xfbd19460b92d8f67) (#xf37291d95c572713 #x27b3f30cbe4dc8d5) (#xba02caf8bdb52843 #x28b1bac4db61243c) (#x5e7a3fbfedc687dc #x87325e9a540a5825) (#x2d6f923c4a3540c7 #x40eb2d5cba97e160) (#x92e0b64201071ea0 #x1e049253ca581b11) (#x9db4470bd84d84cc #x84e69dcdf469bac6) (#x831c6699a9d97314 #x73e18332880b3bab) (#x691954d6afcb3752 #x37f9691b711861cd) (#xb5563bb164ffb22f #xb253b55ae55085eb) (#xfad0d4d521e75847 #x5884faa1f309fd74) (#xf25ba798d37c56a6 #x56caf2e5f6044f7d) (#xb979903befc8bb5f #xbb3ab93c03ba6e07) (#x28e27cbabcb236e3 #x36b5289711393f2d) (#xd149f2accf28fdb8 #xfdbad1ce3aeb8862) (#xe28e4102f4894aa7 #x4a56e26dfc1ee86f) (#x5d01657cbfbb14c0 #x14b95d628cd1121e) (#x75e319c603092223 #x220c75f59de82d33) (#xe551c306df58de2a #xdefae5b7c722fbb1) (#xef88dcc9f0953262 #x3246efe252bd842b) (#xdc4f6f67cb34857d #x85aadc419448e426) (#x96446e8578ab1931 #x1923967129bf42f4) (#x8691881f5f5e0530 #x05bf86f923a5e5e6) (#x4dd483e6984e08c1 #x08254dea86cbb50c) (#x455ff0ab6ad50620 #x066b45ae83c60705) (#x77b17544de5fc08a #xc0fe77e40d7ae0a0) (#xeea1ea887fbe43d7 #x433fee0b1af40383) (#x56f14cf21f5d893d #x897c56de5107ea2c) (#xa12705ec3aa6a9bf #xa9e8a1f00cad7b1c) (#x3dba74a66dc05cc6 #x5c773dd4b08d4672) (#x2c46a47dc51e3172 #x31922cb5f2de66c8) (#x2e14c8ff1848d3db #xd3602ea4624cab5b) (#x93c980038e2c6f15 #x6f7d93ba82119cb9) (#x84c3e49d8208e799 #xe74d84e8b3372875) (#x3a65f6a24611c84b #xc8db3a0e8bb155ac) (#xc6439632c30c7534 #x758ac69c0bcd3cae) (#xcfe1d33ebebc0a60 #x0abdcf314689090f) (#x341831aa10702392 #x23403479fdc973d3) (#x5255943566f18eac #x8e5b52fcb2e0b3c9) (#x2f3dfebe9763a26e #xa2192f4d2a052cf3) (#x823550d826f202a1 #x029882dbc042bc03) (#xc76aa0734c270481 #x04f3c7754384bb06) (#x364a5d28cd26c13b #xc1b236686d5bbe40) (#x537ca274e9daff19 #xff225315faa93461) (#x588c8bfa493c62e4 #x62e758a9277fcc53) (#x85ead2dc0d23962c #x96348501fb7eafdd) (#x814e0a1b748f91bd #x911381231899f638) (#x3195df2ce6f755b6 #x551e31b25667ad9e) (#xae73f4a5e3ec33d3 #x330aae6e329cdacb) (#x6830629720e046e7 #x468068f23951e665) (#xa4aaeb6acc21df9b #xdfb6a43ba703a551) (#x170a649e0c24888c #x883017523126b4cc) (#x40d21e2d9c527004 #x703540652868d948) (#xb7045733b9a95086 #x50a1b74b75c24878) (#xe8575ecddb44a6ef #xa6eae838698197f5) (#xa6f887e811773d32 #x3d44a62a379168c2) (#xb0dbd5379278c40b #xc40db0914efe5ba6) (#xf4ad13dd7786b39e #xb31ff4d68571db0b) (#xd7bf46e96bd21880 #x186fd7fd499e1c14) (#x037b5ac3527d931c #x938b03f8d8db4a3b) (#x41fb286c137901b1 #x014c418c60215ee0) (#xde1d03e5166267d4 #x6758de5004da29b5) (#xac2198273ebad17a #xd1f8ac7fa20e1758) (#xf9ab8e16739acb5b #xcb0ff9592bd2b74f) (#xa25c5f2f68db3aa3 #x3a63a208d4763127) (#x4b2237a33cb4edf9 #xedf04bd9f5be217a) (#xb62d617236822133 #x21d8b6a23d8bcfd0) (#x4f86ef644518ea68 #xead74ffb1659789f) (#x74ca2f878c225396 #x5375741cd5a1aa9b) (#xea05324f06124446 #x4418ea29f9135a66) (#x20690ff74e293802 #x38fb20d314348d24) (#x2b992679eecfa5ff #xa53e2b6fc9e27516) (#x4476c6eae5fe7795 #x77124447cb8f80ad) (#x8f33cd1322ee7a64 #x7a888f546ee1d047) (#x8abe2395d4690c40 #x0cd68a9fc54f0e0a) (#x9a6bc50ff39c1041 #x104a9a17cf55a918) (#xa375696ee7f04b16 #x4b1aa3e19c3fb68f) (#xe0dc2d8029dfa80e #xa8a4e07c6c8c25fc) (#xc19c1436e8dde1b9 #xe126c14630f12f70) (#x0bf0298ea0e69dfd #x9dc50bbcddd6f832) (#x3fe81824b096be6f #xbe853fc5201f8be1) (#x04a4d8c779ac0791 #x07270422e3e759e5) (#xc2e74ef5baa072a5 #x72adc2bee82a654b) (#xad08ae66b191a0cf #xa081ad96ea4790f0) (#x29cb4afb33994756 #x47cc297e5970b885) (#xf120fd5b8101c5ba #xc541f11d2edf0546) (#xdf3435a499491661 #x1621dfb94c93ae1d) (#x43a944eece2fe318 #xe3be439df0b39373) (#x09a2450c7db07f54 #x7f3709ad4d4435a1) (#x676493def9aadc8b #xdc62676c076047b2) (#x664da59f7681ad3e #xad1b66854f29c01a) (#xe97e688c546fd75a #xd793e9d121c8105d) (#xbddd48fc9664bcce #xbc1dbd1ee05d37e2) (#xabfe1a23156b45f7 #x4554aba599320486) (#xbea6123fc4192fd2 #x2f96bee638867dd9) (#xf7d6491e25fb2082 #x2094f72e5daa9130) (#x6192279b5d5039b3 #x39b7615f7415d3c4) (#x11fcd0dba8de6db4 #x6de51161425320ba) (#xfe740c12584b5fd6 #x5fa3fe8310eea491) (#x088b734df29b0ee1 #x0e4e0844050db209) (#x7d686a8bf1922cc2 #x2c427db198e59f3a) (#x99109fcca1e1835d #x83c199ef178ee323) (#x7b9edece5568c9fa #xc9977b82eb900b4c) (#xd232a86f9d556ea4 #x6e31d236e230c259) (#x33c7b3ae3ba1b71f #xb7ec33a3c6f5600d) (#xc0b5227767f6900c #x905fc0af78b8a8d8) (#x10d5e69a27f51c01 #x1c9c10880a1aa712) (#x953f34462ad68a2d #x8aa89589f16408cf) (#xbf8f247e4b325e67 #x5eefbf0f70cffa71) (#x38379a209b472ae2 #x2a29381f1b23983f) (#x90b2dac0dc51fc09 #xfcf690425acad682) (#x391eac61146c5b57 #x5b5039f6536a1f97) (#xd31b9e2e127e1f11 #x1f48d3dfaa7945f1) (#x214039b6c10249b7 #x4982213a5c7d0a8c) (#x6ec6d6d2841aa3df #xa3556ec14a247213) (#x6fefe0930b31d26a #xd22c6f28026df5bb) (#x24cdd73037853f93 #x3fdc24f1f7d3d4c1) (#x058dee86f6877624 #x765e05cbabaede4d) (#xfc266090851dbd7f #xbd51fc92807c6902) (#xaf5ac2e46cc74266 #x4273af877ad55d63) (#x3b4cc0e3c93ab9fe #xb9a23be7c3f8d204) (#x706ef740f58e5407 #x5452703e3646f37e) (#xca6c3db8483b7c44 #x7ce3cafaed27d742) (#x769843055174b13f #xb187760d45336708) (#x5bf7d1391b41f1f8 #xf16c5b51ffa48668) (#x60bb11dad27b4806 #x48ce60b63c5c546c) (#xfd0f56d10a36ccca #xcc28fd7bc835eeaa) (#x428072af410492ad #x92c74274b8fa14db) (#xf584259cf8adc22b #xc266f53fcd385ca3) (#x723c9bc228d8b6ae #xb6a0722fa6d43eed) (#x6536ff5c24fc3e22 #x3e90657d97f28a21) (#x162352df830ff939 #xf94916bb796f3364) (#x7e133048a3efbfde #xbfc97e49403ed501) (#x231255341c54ab1e #xab70232bccefc71f) (#x12878a18faa3fea8 #xfe6e12999a886a81) (#xc917677b1a46ef58 #xef68c90235fc9d79) (#x57d87ab39076f888 #xf8055737194e6d84) (#xb47f0df0ebd4c39a #xc32ab4b3ad190243) (#x5f5309fe62edf669 #xf64b5f731c43df8d) (#xc538ccf19171e628 #xe601c564d3167695) (#x9fe62b89051b6665 #x66149fdc64fb7755) (#xcec8e57f31977bd5 #x7bc4ced80ec08ea7) (#xcc9a89fdecc1997c #x9936ccc99e524334) (#x919bec81537a8dbc #x8d8f91ab1283512a) (#x06f6b445a4fae538 #xe5d5063373759476) (#x7ab7e88fda43b84f #xb8ee7a6ba3d98ce4) (#x185e95d7d56e12e0 #x12d218cc0f17151b) (#x353107eb9f5b5227 #x52393590b580f47b) (#x6c94ba50594c4176 #x41a76cd0dab6bf80) (#x8c4897d07093e978 #xe9038cacb63a9a7c) (#x470d9c29b783e489 #xe49947bf1354ca96) (#x07df82042bd1948d #x94ac07da3b3c13de) (#x62e97d580f2daaaf #xaa3c62a7acce99ff) (#xe478f5475073af9f #xaf83e45e8f6b7c19) (#x976d58c4f7806884 #x685a979861f6c55c) (#x78e5840d07155ae6 #x5a1c787a334b4177) (#xcb450bf9c7100df1 #x0d9acb13a56e50ea) (#xff5d3a53d7602e63 #x2edaff6a58a72339) (#x59a5bdbbc6171351 #x139e59406f364bfb) (#xdd665926441ff4c8 #xf4d3dda8dc01638e) (#x30bce96d69dc2403 #x2467305b1e2e2a36) (#xc83e513a956d9eed #x9e11c8eb7db51ad1) (#x0c2fab8a8b370970 #x09690c66e6eaebec) (#x4624aa6838a8953c #x95e046565b1d4d3e) (#x37636b69420db08e #xb0cb3781251239e8) (#x0e7dc7085661ebd9 #xeb9b0e777678267f) (#xc3ce78b4358b0310 #x03d4c357a063e2e3) (#x63c04b198006db1a #xdb45634ee4871e57) (#xc411fab01e5a979d #x9778c48d9b5ff13d) (#xf882b857fcb1baee #xba76f8b0639b30e7) (#xeddab04b2dc3d0cb #xd0b4edf3c22f49b8) (#x641fc91dabd74f97 #x4fe96494dfbb0d89) (#xcdb3bfbc63eae8c9 #xe84fcd20d61bc49c) (#x9c9d714a5766f579 #xf59f9c24bc203d6e) (#x7147c1017aa525b2 #x252b71d77e0f74d6) (#xd69670a8e4f96935 #x6916d61401d79bbc) (#x0f54f149d94a9a6c #x9ae20f9e3e31a1d7) (#xd4c41c2a39af8b9c #x8be4d4059145562f) (#x7315ad83a7f3c71b #xc7d973c6ee9db945) (#x5007f8b7bba76c05 #x6ca950ed22727e5a) (#x49705b21e1e20f50 #x0f0249c8652cece9) (#xdb90ed63e0e511f0 #x1106db9baf74f7f8) (#x8e1afb52adc50bd1 #x0bf18ebd26a857ef) (#xe3a777437ba23b12 #x3b2fe384b4576fc7) (#xa7d1b1a99e5c4c87 #x4c3da7c37fd8ef6a) (#x80673c5afba4e008 #xe06a80ca50d07190) (#xd9c281e13db3f359 #xf3f4d98a3fe63a6b) (#x1b25cf14871381fc #x81591b34d7cc5f20) (#x558a16314d201a21 #x1af7552689dca017) (#x87b8be5ed0757485 #x74c687106bec624e) (#x1977a3965a456355 #x63ab1925475e92b3) (#x6a620e15fdb6a44e #xa4726ae3a9c32bf6) (#xd8ebb7a0b29882ec #x828dd86377afbdc3) (#x6b4b3854729dd5fb #xd50b6b0ae18aac5e) (#xe62a99c58d254d36 #x4d71e64f1ff9b18a) (#x5c28533d30906575 #x65c05c8bc49895b6) (#xf6ff7f5faad05137 #x51edf6c715e31698) (#x89c5795686149f5c #x9f5d89671d944431) (#xbb2bfcb9329e59f6 #x59c8bb2d9328a394) (#x9b42f34e7cb761f4 #x61339bfe871c2eb0) (#x8d61a191ffb898cd #x987a8d45fe731dd4) (#x7f3a06092cc4ce6b #xceb07fa0087752a9) (#xb289b9b54f2e26a2 #x26ffb280de6c9635) (#x0000000000000000 #x0000000000000000) (#x32ee85efb48ac6aa #xc695324a8ebce7a5) (#x1cfa4d10acc21571 #x15f51ceeecf04cfe) (#xaad72c629a403442 #x342daa4cd17b832e)) ((#x4a428169d2d95247 #x7c4730a95d53e74e) (#x9712df2e5c31dbe9 #x1ce9980b15833f34) (#xbcca12254abe268f #x8c8ff77fe958f887) (#xe139052a54a14a4e #x2e4e953bd351b68d) (#x78d2b6da77924503 #x9c037af1f5c1dc2d) (#x2ea1efcc5b4f7ccf #x7fcfa419ceb49188) (#x23ce9dee1f0dd70c #x350c2b425282f6b4) (#xb8c13ab6afff33ba #x3fbad564be950165) (#x95f6cb86cff03012 #xa41289e7df04a245) (#xf903f5c64fe434f0 #x02f05961e2bae584) (#xb2337efb35bcf22b #x222b80beda4bad13) (#x6a1a027bf694fa2c #xad2ce371a0f42352) (#xdc22541326691d32 #x3c3241d42d7277a3) (#x3e8d4fc54988281b #xf61b2c755106f386) (#xe04b0f7efc20ded2 #x72d27c4db6f31954) (#x833557b4abb79a08 #x2608327cddfca4d8) (#xbb57244a94bf4cdd #xdbdd2dfe11b033cd) (#xdbbf627cf8687760 #x6b609b55d59abce9) (#x4e49a9fa37984772 #xcf7212b20a9e1eac) (#xed247d5cb8627511 #x3811f3162ac57e68) (#xf067af77eee78a06 #xfb06f42129417b5a) (#x5c811d5bb69ef85d #xfe5d8b325fabe1d3) (#x3c695b6dda49c3e0 #x4ee03d999b816ef7) (#x17b19666ccc63e86 #xde8652ed675aa944) (#x7dab941d3a52c4aa #x73aab19cc7ae8a16) (#xd43404f62feb3758 #x995805e2832b46a4) (#xe92f55cf5d236024 #x8b24d10d7d08878a) (#xebcb4167cee28bdf #x33dfc0e1b78f1afb) (#x70c4e63f7e106f69 #x39693ec75b98ed2a) (#xcd7cfe4e9c2fdd7a #xe97a20ced762ba74) (#x03961efc3b407f67 #xe467f89aaf2532a8) (#x1fa7c683c54414ec #x7bec16dbc9039843) (#x8cbe313e7c34da30 #xd430accb8b4d5e95) (#x081650e509822a6a #xa56a4436ae593107) (#x7352f8c34550100e #xdd0ec65df4bddf82) (#xeab94b3366631f43 #x6f432997d22db522) (#x4254d18cdb5b782d #xd92d749ff30ad649) (#x13babef529872bb3 #x6db370f6309750a6) (#x9c9291376ef38ee4 #x5de424a714ff3c9b) (#x1948fab8b3c4ea22 #x7022252c5449fcd0) (#x55e547ea179d46ab #x07ab267294507f0d) (#x873e7f274ef68f3d #x953d10678a315d3a) (#x2c45fb64c88e9734 #xc734b5f504330cf9) (#x22bc97bab78c4390 #x6990c2343720596d) (#xfa95eb3a74a44b97 #xe697a1fb4d9fd72c) (#x6b68082f5e156eb0 #xf1b00a07c5568c8b) (#xb4dc42c0433c0ce5 #x29e5b3494701c980) (#xc2f798c44bac9d42 #x1b42be7981d34039) (#xb5ae4894ebbd9879 #x75795a3f22a36659) (#x75bdc4f833d0eec0 #xd6c0f5aa69f7bb11) (#x465ff91f3e1a6d18 #x6a185684a4c72fab) (#x698c1c87cdd4854b #x494b1beb0fd111fa) (#x212a89468ccc3cf7 #x8df73aae98056bc5) (#xe85d5f9bf5a2f4b8 #xd7b8387b18aa2853) (#x5e6509f3255f13a6 #x46a69ade952c7ca2) (#xfc7ad7010224b559 #xed59920cd0d5b3bf) (#x7b44a8264cd23a64 #x7864826b5ae4ee85) (#x7cd99e4992d35036 #x2f3658eaa20c25cf) (#xcb93c275eaaf23b4 #xe2b413394a28dee7) (#xcf98eae60fee3681 #x518131221de52705) (#xab7b844386781809 #x5209a5928e0251c3) (#x9de09b63c6721a78 #x0178cdd1715d9342) (#x37e91574e88b96ed #x0fed81359afd6d58) (#x0c1d7876ecc33f5f #x165f662df994c8e5) (#x637e58ca579744da #x54da4e316b0fbd8c) (#xd5460ea2876aa3c4 #xc5c4ec94e689e97d) (#xe2af1bd66fe13529 #xca296da17c748425) (#xa582e89df97accad #xfcadd253bd110457) (#xd8297c80c3280807 #x8f0763cf7abf8e41) (#xb74a5c3c787c7382 #xcd824bd3e824fb28) (#x6cf53e40801404e2 #xa6e2d0863dbe47c1) (#xa4f0e2c951fb5831 #xa0313b25d8b3ab8e) (#x1d43d22b5685ff17 #xc317073703840532) (#x79a0bc8edf13d19f #xc09f9387906373f4) (#xfbe7e16edc25df0b #xba0b488d283d78f5) (#x350d01dc7b4a7d16 #xb71690d9507af029) (#x45c9e7e3055a127f #x8e7fae1e0be21d03) (#x3106294f9e0b6823 #x0423b2c207b709cb) (#x20588312244da86b #xd16bd3d8fda7c41c) (#x057922c74dc081a9 #xefa9cb6d326f563b) (#x1c31d87ffe046b8b #x9f8bee416626aaeb) (#xb34174af9d3d66b7 #x7eb769c8bfe902ca) (#xbdb81871e23fb213 #xd0131e098cfa575e) (#xe6a433458aa0201c #x791c4fba2bb97dc7) (#x02e414a893c1ebfb #xb8fb11ecca879d71) (#x8b230751a235b062 #x8362764a73a595df) (#xa99f90eb15b9f3f2 #xeaf2b47e4485ccb2) (#x7759d050a011053b #x6e3be446a3702660) (#xf115a52346661e9a #xa79a1d574ce3d483) (#x9660d57af4b04f75 #x4075717d702190ed) (#xefc069f42ba39eea #x80eae2fae042e319) (#xb0d76a53a67d19d0 #x9ad0915210cc3062) (#x9a7dad0c1873702a #x562a175089b55808) (#x0af2444d9a43c191 #x1d9155da64deac76) (#x509c652d5a5dc702 #xe802ed1fa63f2936) (#x620c529eff16d046 #x0846a7470ead1255) (#x762bda04089091a7 #x32a70d30c6d289b9) (#x9319f7bdb970cedc #xafdcba10424ec6d6) (#x91fde3152ab12527 #x1727abfc88c95ba7) (#xeeb263a083220a76 #xdc760b8c85e04cc0) (#x0ef96cde7f02d4a4 #xaea477c133135594) (#xa614f661c23ab3ca #x18ca2ac9123436ff) (#xd2db38cd596bc996 #x929636151e612237) (#x1ed5ccd76dc58070 #x2770ffadaca1379a) (#xf7fa991830e6e054 #xac542ea0d1a9b010) (#x1427889af78641e1 #x3ae1aa77c87f9bec) (#x80a3494890f7e56f #xc26fcae672d99670) (#x27c5b57dfa4cc239 #x86390959054f0f56) (#xf46c87e40ba69f33 #x4833d63a7e8c82b8) (#x4b308b3d7a58c6db #x20dbd9df38f14897) (#xae02a684cbb899a0 #xbda06effbc6d07f8) (#x8a510d050ab424fe #xdffe9f3c16073a06) (#x3bf46d020448a9b2 #x19b2e7186369a5bd) (#xc56aaeab95adf710 #x4c1064f8793b8b73) (#x369b1f20400a0271 #x53716843ff5fc281) (#x3fff4591e109bc87 #xaa87c50334a45c5f) (#x040b2893e5411535 #xb335221b57cdf9e2) (#x0f8b668ad7834038 #xf2389eb756b1fa4d) (#x079d366fde016a52 #x5752da81f8e8cb4a) (#x530a7bd1611db865 #x0c651585091a1b9e) (#xc3859290e32d09de #x47de570fe471efe0) (#x9484c1d26771a48e #xf88e6091baa60d9c) (#x2d37f130600f03a8 #x9ba85c836191a320) (#xf283bbdf7d2661fd #x43fde5cde3c6e62b) (#x3a866756acc93d2e #x452e0e6e06cb0a64) (#x284ed3f72dcf8201 #x740197ee53fef51b) (#x7a36a272e453aef8 #x24f86b1d3f46415c) (#xc418a4ff3d2c638c #x108c8d8e1c9924aa) (#x908fe9418230b1bb #x4bbb428aed6bf47e) (#x391079aa97894249 #xa149f6f4a9ee38cc) (#x329037b3a54b1744 #xe0444a58a8923b63) (#x3074231b368afcbf #x58bf5bb46215a612) (#x67757059b2d651ef #xe7ef6c2a3cc2446e) (#xdacd682850e9e3fc #x37fc7223b0381330) (#x5f1703a78dde873a #x1a3a73a8f08ed37b) (#x4326dbd873daecb1 #x85b19de996a87990) (#x52787185c99c2cf9 #x50f9fcf36cb8b447) (#x89c713f931f45b99 #x3b9967a6b92208ae) (#x33e23de70dca83d8 #xbcd8a32ecd3094ba) (#xdec640bbb5a8f6c9 #x84c95038e7f5ead2) (#xf3f1b18bd5a7f561 #x1f610cbb866449f2) (#xaf70acd063390d3c #xe13c8789d9cfa821) (#x4cadbd52a459ac89 #x7789035ec01983dd) (#x5b1c2b34689f920f #xa90f51b3a7432a99) (#x74cfceac9b517a5c #x8a5c1cdc0c5514c8) (#x183af0ec1b457ebe #x2cbecc5a31eb5309) (#x2521a1d5698d29c2 #x3ec218b5cfc89227) (#xfd08dd55aaa521c5 #xb1c57b7ab5771c66) (#x64e36ea589962e88 #x038894b093e776c6) (#x864c7573e6771ba1 #xc9a1f911ef93f2e3) (#xceeae0b2a76fa21d #x0d1dd854784788dc) (#xad94b878f0f8e6c7 #x59c7966513483550) (#xf871ff92e765a06c #x5e6cb01787184a5d) (#x6f6320bcbb547b85 #x4285281c929b7569) (#x293cd9a3854e169d #x289d7e98365c5ac2) (#xc805dc89d1ef5cd3 #x06d3eba3e50dec4f) (#x9899b9a48bb29bd1 #xeed106bc4332c579) (#xb6385668d0fde71e #x911ea2a58d8654f1) (#xffecc9fd3964ca3e #x093e6a967ff08117) (#x472df34b969bf984 #x3684bff2c1658072) (#x12c8b4a18106bf2f #x312f99805535ff7f) (#x155582ce5f07d57d #x667d4301addd3435) (#xbe2e068dd97fcd74 #x3474e69323df65f6) (#xba252e1e3c3ed841 #x8741c48874129c14) (#x57015342845cad50 #xbf50379e5ed7e27c) (#x619a4c62c456af21 #xec215fdda18820fd) (#xdfb44aef1d296255 #xd855b94e8257450b) (#xe44027ed1961cbe7 #xc1e75e56e13ee0b6) (#x7e3d8ae10112bbcd #x97cd4906688bb8be) (#x0b804e1932c2550d #x410dbcac017c03af) (#x3d1b513972c8577c #x127cd4effe23c12e) (#x54974dbebf1cd237 #x5b37cf04f1f2d0d4) (#x16c39c326447aa1a #x821abb9b02f8069d) (#xfe9ec3a991e55ea2 #x55a283e01a522ece) (#xf51e8db0a3270baf #x14af3f4c1b2e2d61) (#x09645ab1a103bef6 #xf9f6ad40cbfb9ede) (#xbf5c0cd971fe59e8 #x68e80fe5467dca2f) (#x6d8734142895907e #xfa7e39f0581ce818) (#x2453ab81c10cbd5e #x625ef1c3aa6a3dfe) (#x2aaac75fbe0e69fa #xccfa86029979686a) (#xe3dd1182c760a1b5 #x96b584d719d62bfc) (#x7220f297edd18492 #x81922f2b911f705b) (#xa766fc356abb2756 #x4456c3bf77969926) (#xd14d2631622bb6f1 #x76f1ce8fb144109f) (#xa0fbca5ab4ba4d04 #x1304193e8f7e526c) (#xa8ed9abfbd38676e #xb66e5d082127636b) (#x26b7bf2952cd56a5 #xdaa5e02f60eda08f) (#xcc0ef41a34ae49e6 #xb5e6c9b8b2c015ad) (#xf688934c986774c8 #xf0c8c7d6b40b1fc9) (#xe5322db9b1e05f7b #x9d7bb720849c4f6f) (#x66077a0d1a57c573 #xbb73855c5960ebb7) (#x7f4f80b5a9932f51 #xcb51a0700d291767) (#xaa098e172ef98c95 #x0e954ce4eba0fe1a) (#x2bd8cd0b168ffd66 #x90666f74fcdbc7b3) (#x40b0c524489a93d6 #x61d66573398d4b38) (#xace6b22c5879725b #x055b7f1376ea9a89) (#x44bbedb7addb86e3 #xd2e347686e40b2da) (#xa36dd4a68ffa3263 #xf763e1a4205b60c4) (#xd95b76d46ba99c9b #xd39b8ab91f1d2198) (#x60e846366cd73bbd #xb0bdb6abc42a8f24) (#xc6fcb057aeed8877 #xa8779c62d61eb9db) (#xec56770810e3e18d #x648d1a604f67d1b1) (#x48a695c14118b9bc #xc4bc214597d47a3f) (#x81d1431c387671f3 #x9ef32390177b39a9) (#x59f83f9cfb5e79f4 #x11f4405f6dc4b7e8) (#xb9b330e2077ea726 #x63263c12db37aebc) (#x102ca00912c754d4 #x89d4886c9fb2620e) (#xe7d639112221b480 #x2580a6cc4e1bd21e) (#x5a6e2160c01e0693 #xf593b8c5c2e18540) (#x9b0fa758b0f2e4b6 #x0ab6fe26ec17f7d1) (#x4ddfb7060cd83815 #x2b15ea28a5bb2c04) (#x567359162cdd39cc #xe3ccdee83b754da5) (#x8dcc3b6ad4b54eac #x88ac45bdeeeff14c) (#x5df3170f1e1f6cc1 #xa2c162443a094e0a) (#x4f3ba3ae9f19d3ee #x93eefbc46f3cb175) (#xdd505e478ee889ae #x60aea8a248d0d87a) (#x01720a54a881949c #x5c9ce97665a2afd9) (#x1bacee10200501d9 #xc8d934c09ece61a1) (#xd6d0105ebc2adca3 #x21a3140e49acdbd5) (#xc161863870ece225 #xff2546e32ef67291) (#xc78eba03066c1ceb #xf4eb7514b3bc1602) (#x926bfde911f15a40 #xf340536627ec690f) (#x115eaa5dba46c048 #xd548611afa10cdd7) (#xd03f2c65caaa226d #x2a6d27f9d4e6bf46) (#xcae1c821422eb728 #xbe28fa4f2f8a713e) (#xa21fdef2277ba6ff #xabff08d245f9cf1d) (#xd3a93299f1ea5d0a #xce0adf637bc38dee) (#xc977d6dd796ec84f #x5a4f02d580af4396) (#x6e112ae813d5ef19 #x1e19c16af739dab0) (#x2fd3e598f3cee853 #x23534d6fab163e51) (#x71b6ec6bd691fbf5 #x65f5d7b13e3a42f3) (#xc0138c6cd86d76b9 #xa3b9af954b54dd48) (#x8e5a2596eff531cb #x6ccbbd2741cac3e4) (#x1adee44488849545 #x9445ddb6fb6cce78) (#x8f282fc24774a557 #x3057545124686c3d) (#x68fe16d3655511d7 #x15d7f29d6a73be23) (#x588a35c853dfed68 #x4d68a92908661831) (#xb1a560070efc8d4c #xc64c7824756e9fbb) (#x49d49f95e9992d20 #x9820c833f276d5e6) (#x41c2cf70e01b074a #x3d4a8c055c2fe4e1) (#x88b519ad9975cf05 #x67058ed0dc80a777) (#x85da6b8fdd3764c6 #x2dc6018b40b6c04b) (#x659164f12117ba14 #x5f147dc6f645d91f) (#x51ee6f79f2dc539e #xb49e0469c39d86ef) (#x386273fe3f08d6d5 #xfdd51f82cc4c9715) (#x99ebb3f023330f4d #xb24defca26906aa0) (#x06ef3c3b7680fece #x0bce33f79d4a6493) (#x84a861db75b6f05a #x715ae8fd25146f92) (#xd7a21a0a14ab483f #x7d3ffd782c0e740c) (#x347f0b88d3cbe98a #xeb8a79af35d85ff0) (#x9f048fcb55b3f183 #xb983dc3dbbda0e33) (#x0d6f72224442abc3 #x4ac38f5b9c36673c) (#x0000000000000000 #x0000000000000000) (#x82475de003360e94 #x7a94db0ab85e0b01) (#x9e76859ffd32651f #xe51f354bde78a1ea) (#xa189c00e1c3bd998 #x4f98f048eadcfdb5)) ((#x3b59ba4fc2860ecc #xcdf011538279efe3) (#xf5b62a6c95949603 #x5bbd918337e7ba9c) (#x03d211f9a6abb117 #x69ad925890c98ec3) (#x60bf6596274482a5 #xbe84685128596eda) (#x9fa029a9e0ac34d4 #x505113c1f94d7689) (#xb0685f4086d27afc #x347115b474111e37) (#x39c5a4e106f5d0d6 #x83874c8262f71b61) (#x8563bfc35dce2b76 #xd0075495134478dc) (#xb60f7d710947dbd2 #xe6e8f2049740c172) (#xf29f070a78d95820 #xaefeb9baa4f11f98) (#x097b77aaf4d79165 #xdcc5784b763a2c0c) (#x8198835c16285442 #x4ce9eef4109b531b) (#x0e525acc199a5f46 #x29865072e52c8908) (#xede9a2a8ec8557bb #x959c8b063d60404b) (#xa002af7969cc452c #x014fb8f378ebb2ad) (#x2e8679be04a62125 #x43fac9fcfd1b12ff) (#x066722318f95a12e #xd299e7b0e351df45) (#x0be7690430a44f7f #x92b2259a96b4d88e) (#xbde8147539e394ad #x745ad79e01f419fc) (#x29af54d8e9ebef06 #xb6b9e1c56e0db7fb) (#xfd835291039b686b #xa0a22641319aecd1) (#xa3d0be80cf67f43b #x68e22aabe8223c6e) (#xae50f5b570561a6a #x28c9e8819dc73ba5) (#x5834ce2043693d7e #x1ad9eb5a3ae90ffa) (#xd9ac4d7c5541693c #x563005ae2a725ce1) (#xc1f3c5b82c50a884 #x98111f2b20f5a636) (#xaf1efae2128e7567 #x0f132708ed8041e4) (#xeca7adff8e5d38b6 #xb246448f4d273a0a) (#x5001b6ddd566c316 #xe1c65c983c9459b7) (#x936e6dcb3d45b588 #x37a01e62fcef0b03) (#x83049df2d25b8a58 #x029eb325f015a799) (#x9795515476a3cabc #xab4ea403ff3020c4) (#xe492d5021852c6de #x4959f34d4b5a6c47) (#xcfa19f7435caf7c2 #xb1974f59c5d92f3e) (#xd3052b2f073d494e #xe358efbdcc81fe2e) (#x2c1a6710c0d5ff3f #x0d8d942d1d95e67d) (#xf4f8253bf74cf90e #x7c675e0a47a0c0dd) (#xde85601ab80ca71f #xa3732d97b964f9e5) (#xb91328ea7205eb99 #xe8b46dff022b323b) (#x529da87311151d0c #xafb10149dc1aad35) (#xaccceb1bb425c470 #x66beb5507d49cf27) (#xa837d784ffc3bb44 #xfa500f317e96e4e0) (#xf3d1085d1a01372d #x89247633d4b665d9) (#xf9786e0e487d175f #x3c4c9c203245c716) (#x719b9af8aa82d278 #xac600a9f54e4b801) (#x412549b358a093cb #xf3223e5640298f6c) (#xcc738e8d936146d5 #xd83add015510a1fd) (#x597ac17721b15273 #x3d0324d34aae75bb) (#x0cce4462dde9815c #x67f10da305a27d8a) (#x160dd208608b9efe #xe7a74af7efab73df) (#x72498b010c29636f #xc5cd98c7c42d36c2) (#x029c1eaec473de1a #x4e775dd1e08ef482) (#x7a7cf3fc9a269d07 #x3ed22f05c250608f) (#x6fa3300d5c06b2ee #xb0d8f7aabd329d93) (#xe069e99d53b4b9ea #xd5b7492c48854780) (#xb49363dfcd3405c8 #xa89fafd577ce35f0) (#x1ca4b45b32f7be8c #x52cfa0e40958d110) (#x191187931bc9aeb5 #xe9fbd50c7ac08096) (#x566694ec5af36238 #x335fbb28dfc586f2) (#xd0d73ad6a196f859 #x8af57de55c4870ed) (#x5be6dfd9e5c28c69 #x73747902aa208139) (#x79aee2053c8d2c10 #x577fbd5d5299ee4c) (#xe2f5f73397c767f0 #x9bc014fda80bb302) (#x4910314eceaf6da3 #x083d89944654d921) (#x8e84d6c76d6a6409 #x42b5710f85f0a052) (#x014e0f5762d86f0d #x27dacf8970477a41) (#xe3bbf864f51f08fd #xbc1adb74d84cc943) (#x514fb98ab7beac1b #xc61c93114cd323f6) (#x88e3f4f6e2ffc527 #x902c96bf66a17f17) (#x4f77137f413acc8d #xdaa46e24a5050664) (#x44907a7b719e83f2 #x48164bbe33b1deea) (#x91f27365f9366b92 #x79d743b31c61ff81) (#xd42c0649ea70876d #x161bc7845f975b2a) (#x5f1de346ae24f35d #xef9ac363a9ffaafe) (#xb1265017e40a15f1 #x13abda3d04566476) (#xa14ca02e0b142a21 #x2695777a08acc8ec) (#xf14d16f3de72e937 #xc7532be23438915b) (#x27fd0e14f071b040 #x9f3fb1b78b213ef3) (#xbac13913d4ae5a8e #x8119ffa792e2bcf8) (#x460c64d5b5ed5de8 #x0661166fd33f2a68) (#x1491cca6a4f840e4 #xa9d017260f25875d) (#xc9c6bd45ba5f56ec #x630ea8e92688f07b) (#xc36fdb16e823769e #xd66642fac07b52b4) (#x650a565e0e7a929c #x05b01db95bc13f5c) (#x43b9571d9cd34dd1 #xbd556387a0a77bee) (#xe127e6ca316cd6e7 #xf26d86a538c23dc1) (#x185f88c47911c1b8 #xce211a850a87fad7) (#x55b48515fc58d32f #x5af229704f0c0831) (#x3d3e987e4d13afe2 #x1f69f6e3612830a6) (#x350be083db1c518a #xe4764121675566eb) (#x6a1603c57538a2d7 #x0bec8242ceaacc15) (#x4ac220b76804dcb4 #x61901bccd69d57e2) (#x7c1bd1cd15b33c29 #xec4bc8b52101bfca) (#x8c18c869a919ba13 #x0cc22cde657e54d0) (#xeac08fce01c89998 #x60dfa33fae76e54f) (#x4e391c2823e2a380 #xfd7ea1add5427c25) (#x95094ffab2d014a6 #xe539f9d21fbed446) (#x730784566ef10c62 #xe217574eb46a4c83) (#x30bed34bf22241b3 #x5f4234c914cd376d) (#xaaabc92a3bb0655e #xb42752e09e181062) (#x0aa96653527c2072 #xb568ea13e6f3a2cf) (#xd24b247865e52643 #xc4822034bcc6846f) (#x04fb3c9f4be67f34 #x9ceeba6103df2bc7) (#x57289bbb382b0d35 #x148574a1af82fcb3) (#xf83661592aa57852 #x1b9653a94202bd57) (#xdb3053d29132b726 #x1847587fcafca863) (#xad82e44cd6fdab7d #x41647ad90d0eb566) (#xbf740adbfd904ab7 #x3a2d8a4fe17aed7e) (#x7b32fcabf8fef20a #x1908e08cb2171ace) (#xfbe470a08c0ec945 #x723bc1f1d2cb3394) (#x1deabb0c502fd181 #x75156f6d791fab51) (#x219a2c257fe4116e #x4da656076870e1b6) (#xabe5c67d59680a53 #x93fd9d69ee5f6a23) (#x5ccff2bf088f424a #x8637513b3936243d) (#x22483ddcd94fa079 #x240bc45ff8b96f75) (#x2d546847a20d9032 #x2a575ba46dd29c3c) (#x86b1ae3afb659a61 #xb9aac6cd838df61f) (#xca14acbc1cf4e7fb #x0aa33ab1b6417eb8) (#x05b533c8293e1039 #xbb3475e873985186) (#x69c4123cd39313c0 #x6241101a5e6342d6) (#x99c70b986f3995fa #x82c8f4711a1ca9cc) (#x76b2b79e47cf1c5b #x592322a6c7f21d05) (#x336cc2b25489f0a4 #x36efa6918404b9ae) (#xbe3a058c9f4825ba #x1df745c6913d973f) (#x6b580c9217e0cdda #x2c364dcbbeedb654) (#x7560a667e164ad4c #x308eb0fe573b93c6) (#xdc197eb47c7f7905 #xed04704659ea0d67) (#x9c723850460785c3 #x39fc81996984f84a) (#xf00319a4bcaa863a #xe089e46b447feb1a) (#xe85c9160c5bb4782 #x2ea8feee4ef811cd) (#xa4f993e6222a3a18 #x9da102927b34996a) (#xe740c4fbbef977c9 #x20f46115db93e284) (#x083578fd960ffe68 #xfb1fb7c2067d564d) (#xcb5aa3eb7e2c88f6 #x2d79f538c60604f9) (#x20d423721d3c7e63 #x6a7c998e18379bf7) (#x3445efd4b9c43e87 #xc3ac8ea817121caa) (#xa979d8d39d1bd449 #xdd8ac0b80ed19ea1) (#xa29eb1d7adbf9b36 #x4f38e5229865462f) (#x644459096ca2fd91 #x226ad2302b86451d) (#x4deb0dd185491297 #x94d333f5458bf2e6) (#x7e87cf63d1c0e233 #xa23c9564c18f4b48) (#xdd5771e31ea71608 #xcadebfcf29ad7726) (#xfe514368a530d97c #xc90fb419a1536212) (#xa6658d48e659e402 #xd3d65f439bba6de8) (#xd6b018e72e035977 #x586c9a55bf19afa8) (#x9220629c5f9dda85 #x107ad1eb8ca87142) (#xfccd5dc661430766 #x8778e9c841dd9690) (#x742ea93083bcc241 #x17547f77277ce987) (#x8b31e50f44547430 #xf98104e7f668f1d4) (#x688a1d6bb14b7ccd #x459bdf932e243897) (#x106af039ef1e3fd0 #x353ead470cfaac9a) (#x9eee26fe82745bd9 #x778bdc48890a0cc8) (#x3222cde536519fa9 #x11356918f443c3ef) (#xc794e789a3c509aa #x4a88f89bc3a47973) (#xb5dd6c88afec6ac5 #x8f45605c07894fb1) (#xd562091e88a8e860 #x31c1080d2fd0216b) (#x3fa286d0896071f8 #x511eab3281a6c424) (#x8fcad9900fb20b04 #x656fbe86f5b7da13) (#x3797fe2d1f6f8f90 #xaa011cf087db9269) (#xb2f441ee42a1a4e6 #x7a064865949feab5) (#x1e38aaf5f6846096 #x1cb8fd35e9d62592) (#x1b8d993ddfba70af #xa78c88dd9a4e7414) (#x406b46e43a78fcc6 #xd4f8f1df306ef52d) (#xc6dae8dec11d66a7 #x6d523712b3e30332) (#xef75bc0628f689a1 #xdbebd6d7ddeeb4c9) (#xcd3d81daf1b929d8 #xffe012882557dbbc) (#x8d56c73ecbc1d51e #x2b18e35715392e91) (#x26b3014392a9df4d #xb8e57e3efb6644b2) (#x5aa8d08e871ae364 #x54aeb68bda67fb78) (#x4ca50286e7917d9a #xb309fc7c35cc88a7) (#x6eed3f5a3ededde3 #x97023823cd75e7d2) (#x6c7121f4faad03f9 #xd97565f22dfb1350) (#x988904cf0de1faf7 #xa5123bf86a5bd38d) (#xf72a34c251e74819 #x15cacc52d7694e1e) (#xbb8f3644b6763583 #xa6c3302ee2a5c6b9) (#x0f1c559b7b42304b #x0e5c9ffb956bf349) (#x80d68c0b74f03b4f #x6b33217d60dc295a) (#x842db0943f16447b #xf7dd9b1c6303029d) (#x3c7097292fcbc0ef #x38b3396a116f4ae7) (#x36d9f17a7db7e09d #x8ddbd379f79ce828) (#x2306328bbb97cf74 #x03d10bd688fe1534) (#x13b8e1c049b58ec7 #x5c933f1f9c332259) (#x12f6ee972b6de1ca #x7b49f096ec745818) (#x87ffa16d99bdf56c #x9e700944f3ca8c5e) (#x1743dd5f0253f1f3 #xc07d857e9fec099e) (#xd8e2422b37990631 #x71eaca275a3526a0) (#x7fc9c034b3188d3e #x85e65aedb1c83109) (#x53d3a72473cd7201 #x886bcec0ac5dd774) (#x388babb6642dbfdb #xa45d830b12b06120) (#xe60ecbacdc2118c4 #x072eae9cabd498c5) (#xc888b212d88739e1 #x44d4676056cf8a3a) (#x9a151a61c99224ed #xeb6566298ad5270f) (#x9b5b1536ab4a4be0 #xccbfa9a0fa925d4e) (#xf6643b95333f2714 #x321003dba72e345f) (#xb74172266b9fb4df #xc1323d8de707bb33) (#x5e53ec11ccfc9c50 #xc8400cead9b8d0bf) (#x31f0dc1c90fa2ebe #x7898fb40648a4d2c) (#x944740add0087bab #xc2e3365b6ff9ae07) (#x485e3e19ac7702ae #x2fe7461d3613a360) (#x0d804b35bf31ee51 #x402bc22a75e507cb) (#xdfcb6f4ddad4c812 #x84a9e21ec92383a4) (#xe9129e37a763288f #x097231673ebf6b8c) (#x78e0ed525e55431d #x70a572d422de940d) (#x6d3f2ea398756cf4 #xfeafaa7b5dbc6911) (#xe5dcda557a8aa9d3 #x6e833cc43b1d1606) (#x45de752c1346ecff #x6fcc843743f6a4ab) (#x5d81fde86a572d47 #xa1ed9eb249715e7c) (#xa5b79cb140f25515 #xba7bcd1b0b73e32b) (#x66d847a7a8d1238b #x6c1d8fe1cb08b19f) (#xbca61b225b3bfba0 #x5380181771b363bd) (#x3eec8987ebb81ef5 #x76c464bbf1e1be65) (#x2fc876e9667e4e28 #x642006758d5c68be) (#x242f1fed56da0157 #xf69223ef1be8b030) (#x636d746f81ef33b2 #xd729fa09b890e019) (#x7d55de9a776b5324 #xcb91073c5146c58b) (#xceef9023571298cf #x964d80d0b59e557f) (#xc0bdcaef4e88c789 #xbfcbd0a250b2dc77) (#x1124ff6e8dc650dd #x12e462ce7cbdd6db) (#x824a92a5b083e555 #x25447cac8052ddd8) (#xda7e5c85f3ead82b #x3f9d97f6babbd222) (#x1f76a5a2945c0f9b #x3b6232bc99915fd3) (#xb3ba4eb92079cbeb #x5ddc87ece4d890f4) (#x9d3c370724dfeace #x1e264e1019c3820b) (#x47426b82d73532e5 #x21bbd9e6a3785029) (#x96db5e03147ba5b1 #x8c946b8a8f775a85) (#x54fa8a429e80bc22 #x7d28e6f93f4b7270) (#xc446f670056eb8bd #x23256ac3536df7b0) (#x15dfc3f1c6202fe9 #x8e0ad8af7f62fd1c) (#x07292d66ed4dce23 #xf54328399316a504) (#x70d595afc85abd75 #x8bbac51624a3c240) (#x90bc7c329bee049f #x5e0d8c3a6c2685c0) (#x1ac3966abd621fa2 #x80564754ea090e55) (#xa72b821f84818b0f #xf40c90caebfd17a9) (#xd1993581c34e9754 #xad2fb26c2c0f0aac) (#x679648f0ca094c86 #x4bc74068bb4fcbde) (#xc221d4418afb1993 #xf1bc8d73b03c28f5) (#x256110ba34026e5a #xd148ec666bafca71) (#x8a7fea58268c1b3d #xde5bcb6e862f8b95) (#xb85d27bd10dd8494 #xcf6ea276726c487a) (#x77fcb8c925177356 #x7ef9ed2fb7b56744) (#x62237b38e3375cbf #xf0f33580c8d79a58) (#xeb8e80996310f695 #x47056cb6de319f0e) (#x4b8c2fe00adcb3b9 #x464ad445a6da2da3) (#x2a7d45214f405e11 #xdf14739dfec43938) (#x28e15b8f8b33800b #x91632e4c1e4acdba) (#xff1f4c3fc7e8b671 #xeed57b90d1141853) (#xc508f92767b6d7b0 #x04ffa54a232a8df1) (#x2b334a762d98311c #xf8cebc148e834379) (#x42f7584afe0b22dc #x9a8fac0ed0e001af) (#x61f16ac1459ceda8 #x995ea7d8581e149b) (#x3a17b518a05e61c1 #xea2adedaf23e95a2) (#x89adfba18027aa2a #xb7f6593616e60556) (#x0000000000000000 #x0000000000000000) (#xee3bb3514a2ee6ac #xfc31195eada9ce88) (#xfaaa7ff7eed6a648 #x55e10e78a28c49d5) (#xd7fe17b04cdb367a #x7fb655dccf5ed5e9))))) (defconst +kuznyechik-c+ (make-array '(32 2) :element-type '(unsigned-byte 64) :initial-contents '((#xb87a486c7276a26e #x019484dd10bd275d) (#xb3f490d8e4ec87dc #x02ebcb7920b94eba) (#x0b8ed8b4969a25b2 #x037f4fa4300469e7) (#xa52be3730b1bcd7b #x041555f240b19cb7) (#x1d51ab1f796d6f15 #x0581d12f500cbbea) (#x16df73abeff74aa7 #x06fe9e8b6008d20d) (#xaea53bc79d81e8c9 #x076a1a5670b5f550) (#x895605e6163659f6 #x082aaa2780a1fbad) (#x312c4d8a6440fb98 #x09be2efa901cdcf0) (#x3aa2953ef2dade2a #x0ac1615ea018b517) (#x82d8dd5280ac7c44 #x0b55e583b0a5924a) (#x2c7de6951d2d948d #x0c3fffd5c010671a) (#x9407aef96f5b36e3 #x0dab7b08d0ad4047) (#x9f89764df9c11351 #x0ed434ace0a929a0) (#x27f33e218bb7b13f #x0f40b071f0140efd) (#xd1ac0a0f2c6cb22f #x1054974ec3813599) (#x69d642635e1a1041 #x11c01393d33c12c4) (#x62589ad7c88035f3 #x12bf5c37e3387b23) (#xda22d2bbbaf6979d #x132bd8eaf3855c7e) (#x7487e97c27777f54 #x1441c2bc8330a92e) (#xccfda1105501dd3a #x15d54661938d8e73) (#xc77379a4c39bf888 #x16aa09c5a389e794) (#x7f0931c8b1ed5ae6 #x173e8d18b334c0c9) (#x58fa0fe93a5aebd9 #x187e3d694320ce34) (#xe0804785482c49b7 #x19eab9b4539de969) (#xeb0e9f31deb66c05 #x1a95f6106399808e) (#x5374d75dacc0ce6b #x1b0172cd7324a7d3) (#xfdd1ec9a314126a2 #x1c6b689b03915283) (#x45aba4f6433784cc #x1dffec46132c75de) (#x4e257c42d5ada17e #x1e80a3e223281c39) (#xf65f342ea7db0310 #x1f14273f33953b64) (#x619b141e58d8a75e #x20a8ed9c45c16af1))))) ;;; ;;; Transformations ;;; (defmacro kuznyechik-reft (a b c d) `(aref +kuznyechik-t+ ,a (logand (ash ,b ,c) #xff) ,d)) (defmacro kuznyechik-ls (x1 x2 t1 t2) `(setf ,t1 (logxor (kuznyechik-reft 0 ,x1 0 0) (kuznyechik-reft 1 ,x1 -8 0) (kuznyechik-reft 2 ,x1 -16 0) (kuznyechik-reft 3 ,x1 -24 0) (kuznyechik-reft 4 ,x1 -32 0) (kuznyechik-reft 5 ,x1 -40 0) (kuznyechik-reft 6 ,x1 -48 0) (kuznyechik-reft 7 ,x1 -56 0) (kuznyechik-reft 8 ,x2 0 0) (kuznyechik-reft 9 ,x2 -8 0) (kuznyechik-reft 10 ,x2 -16 0) (kuznyechik-reft 11 ,x2 -24 0) (kuznyechik-reft 12 ,x2 -32 0) (kuznyechik-reft 13 ,x2 -40 0) (kuznyechik-reft 14 ,x2 -48 0) (kuznyechik-reft 15 ,x2 -56 0)) ,t2 (logxor (kuznyechik-reft 0 ,x1 0 1) (kuznyechik-reft 1 ,x1 -8 1) (kuznyechik-reft 2 ,x1 -16 1) (kuznyechik-reft 3 ,x1 -24 1) (kuznyechik-reft 4 ,x1 -32 1) (kuznyechik-reft 5 ,x1 -40 1) (kuznyechik-reft 6 ,x1 -48 1) (kuznyechik-reft 7 ,x1 -56 1) (kuznyechik-reft 8 ,x2 0 1) (kuznyechik-reft 9 ,x2 -8 1) (kuznyechik-reft 10 ,x2 -16 1) (kuznyechik-reft 11 ,x2 -24 1) (kuznyechik-reft 12 ,x2 -32 1) (kuznyechik-reft 13 ,x2 -40 1) (kuznyechik-reft 14 ,x2 -48 1) (kuznyechik-reft 15 ,x2 -56 1)))) (defmacro kuznyechik-refit (a b c d) `(aref +kuznyechik-it+ ,a (logand (ash ,b ,c) #xff) ,d)) (defmacro kuznyechik-ils (x1 x2 t1 t2) `(setf ,t1 (logxor (kuznyechik-refit 0 ,x1 0 0) (kuznyechik-refit 1 ,x1 -8 0) (kuznyechik-refit 2 ,x1 -16 0) (kuznyechik-refit 3 ,x1 -24 0) (kuznyechik-refit 4 ,x1 -32 0) (kuznyechik-refit 5 ,x1 -40 0) (kuznyechik-refit 6 ,x1 -48 0) (kuznyechik-refit 7 ,x1 -56 0) (kuznyechik-refit 8 ,x2 0 0) (kuznyechik-refit 9 ,x2 -8 0) (kuznyechik-refit 10 ,x2 -16 0) (kuznyechik-refit 11 ,x2 -24 0) (kuznyechik-refit 12 ,x2 -32 0) (kuznyechik-refit 13 ,x2 -40 0) (kuznyechik-refit 14 ,x2 -48 0) (kuznyechik-refit 15 ,x2 -56 0)) ,t2 (logxor (kuznyechik-refit 0 ,x1 0 1) (kuznyechik-refit 1 ,x1 -8 1) (kuznyechik-refit 2 ,x1 -16 1) (kuznyechik-refit 3 ,x1 -24 1) (kuznyechik-refit 4 ,x1 -32 1) (kuznyechik-refit 5 ,x1 -40 1) (kuznyechik-refit 6 ,x1 -48 1) (kuznyechik-refit 7 ,x1 -56 1) (kuznyechik-refit 8 ,x2 0 1) (kuznyechik-refit 9 ,x2 -8 1) (kuznyechik-refit 10 ,x2 -16 1) (kuznyechik-refit 11 ,x2 -24 1) (kuznyechik-refit 12 ,x2 -32 1) (kuznyechik-refit 13 ,x2 -40 1) (kuznyechik-refit 14 ,x2 -48 1) (kuznyechik-refit 15 ,x2 -56 1)))) (defmacro kuznyechik-refits (a b c d) `(aref +kuznyechik-it+ ,a (aref +kuznyechik-s+ (logand (ash ,b ,c) #xff)) ,d)) (defmacro kuznyechik-ilss (x1 x2 t1 t2) `(setf ,t1 (logxor (kuznyechik-refits 0 ,x1 0 0) (kuznyechik-refits 1 ,x1 -8 0) (kuznyechik-refits 2 ,x1 -16 0) (kuznyechik-refits 3 ,x1 -24 0) (kuznyechik-refits 4 ,x1 -32 0) (kuznyechik-refits 5 ,x1 -40 0) (kuznyechik-refits 6 ,x1 -48 0) (kuznyechik-refits 7 ,x1 -56 0) (kuznyechik-refits 8 ,x2 0 0) (kuznyechik-refits 9 ,x2 -8 0) (kuznyechik-refits 10 ,x2 -16 0) (kuznyechik-refits 11 ,x2 -24 0) (kuznyechik-refits 12 ,x2 -32 0) (kuznyechik-refits 13 ,x2 -40 0) (kuznyechik-refits 14 ,x2 -48 0) (kuznyechik-refits 15 ,x2 -56 0)) ,t2 (logxor (kuznyechik-refits 0 ,x1 0 1) (kuznyechik-refits 1 ,x1 -8 1) (kuznyechik-refits 2 ,x1 -16 1) (kuznyechik-refits 3 ,x1 -24 1) (kuznyechik-refits 4 ,x1 -32 1) (kuznyechik-refits 5 ,x1 -40 1) (kuznyechik-refits 6 ,x1 -48 1) (kuznyechik-refits 7 ,x1 -56 1) (kuznyechik-refits 8 ,x2 0 1) (kuznyechik-refits 9 ,x2 -8 1) (kuznyechik-refits 10 ,x2 -16 1) (kuznyechik-refits 11 ,x2 -24 1) (kuznyechik-refits 12 ,x2 -32 1) (kuznyechik-refits 13 ,x2 -40 1) (kuznyechik-refits 14 ,x2 -48 1) (kuznyechik-refits 15 ,x2 -56 1)))) (defmacro kuznyechik-isi (val) `(setf (ldb (byte 8 0) ,val) (aref +kuznyechik-is+ (ldb (byte 8 0) ,val)) (ldb (byte 8 8) ,val) (aref +kuznyechik-is+ (ldb (byte 8 8) ,val)) (ldb (byte 8 16) ,val) (aref +kuznyechik-is+ (ldb (byte 8 16) ,val)) (ldb (byte 8 24) ,val) (aref +kuznyechik-is+ (ldb (byte 8 24) ,val)) (ldb (byte 8 32) ,val) (aref +kuznyechik-is+ (ldb (byte 8 32) ,val)) (ldb (byte 8 40) ,val) (aref +kuznyechik-is+ (ldb (byte 8 40) ,val)) (ldb (byte 8 48) ,val) (aref +kuznyechik-is+ (ldb (byte 8 48) ,val)) (ldb (byte 8 56) ,val) (aref +kuznyechik-is+ (ldb (byte 8 56) ,val)))) (defmacro kuznyechik-f (k00 k01 k10 k11 i o00 o01 o10 o11) `(progn (setf ,o10 ,k00 ,o11 ,k01 ,k00 (logxor ,k00 (aref +kuznyechik-c+ ,i 0)) ,k01 (logxor ,k01 (aref +kuznyechik-c+ ,i 1))) (kuznyechik-ls ,k00 ,k01 ,o00 ,o01) (setf ,o00 (logxor ,o00 ,k10) ,o01 (logxor ,o01 ,k11)))) (defmacro kuznyechik-fk (k00 k01 k10 k11 ist t00 t01 t10 t11) `(loop for i below 8 by 2 do (kuznyechik-f ,k00 ,k01 ,k10 ,k11 (+ i ,ist) ,t00 ,t01 ,t10 ,t11) (kuznyechik-f ,t00 ,t01 ,t10 ,t11 (+ i 1 ,ist) ,k00 ,k01 ,k10 ,k11))) ;;; ;;; Key schedule ;;; (defclass kuznyechik (cipher 16-byte-block-mixin) ((rke :accessor kuznyechik-rke :initform (make-array 20 :element-type '(unsigned-byte 64)) :type (simple-array (unsigned-byte 64) (20))) (rkd :accessor kuznyechik-rkd :initform (make-array 20 :element-type '(unsigned-byte 64)) :type (simple-array (unsigned-byte 64) (20))))) (defmethod schedule-key ((cipher kuznyechik) key) (let ((rke (kuznyechik-rke cipher)) (rkd (kuznyechik-rkd cipher)) (k00 (ub64ref/le key 0)) (k01 (ub64ref/le key 8)) (k10 (ub64ref/le key 16)) (k11 (ub64ref/le key 24)) (t00 0) (t01 0) (t10 0) (t11 0) (t1 0) (t2 0)) (declare (type (simple-array (unsigned-byte 64) (20)) rke rkd) (type (unsigned-byte 64) k00 k01 k10 k11 t00 t01 t10 t11 t1 t2)) (setf (aref rke 0) k00 (aref rke 1) k01 (aref rke 2) k10 (aref rke 3) k11) (kuznyechik-fk k00 k01 k10 k11 0 t00 t01 t10 t11) (setf (aref rke 4) k00 (aref rke 5) k01 (aref rke 6) k10 (aref rke 7) k11) (kuznyechik-fk k00 k01 k10 k11 8 t00 t01 t10 t11) (setf (aref rke 8) k00 (aref rke 9) k01 (aref rke 10) k10 (aref rke 11) k11) (kuznyechik-fk k00 k01 k10 k11 16 t00 t01 t10 t11) (setf (aref rke 12) k00 (aref rke 13) k01 (aref rke 14) k10 (aref rke 15) k11) (kuznyechik-fk k00 k01 k10 k11 24 t00 t01 t10 t11) (setf (aref rke 16) k00 (aref rke 17) k01 (aref rke 18) k10 (aref rke 19) k11) (setf (aref rkd 0) (aref rke 0) (aref rkd 1) (aref rke 1)) (loop for i from 1 below 10 do (setf t1 (aref rke (* 2 i)) t2 (aref rke (1+ (* 2 i))) (aref rkd (* 2 i)) t1 (aref rkd (1+ (* 2 i))) t2) (kuznyechik-ilss t1 t2 (aref rkd (* 2 i)) (aref rkd (1+ (* 2 i))))) cipher)) ;;; ;;; Rounds ;;; (define-block-encryptor kuznyechik 16 (let ((rke (kuznyechik-rke context)) (t1 0) (t2 0)) (declare (type (simple-array (unsigned-byte 64) (20)) rke) (type (unsigned-byte 64) t1 t2)) (with-words ((x1 x2) plaintext plaintext-start :big-endian nil :size 8) (setf x1 (logxor x1 (aref rke 0)) x2 (logxor x2 (aref rke 1))) (kuznyechik-ls x1 x2 t1 t2) (setf t1 (logxor t1 (aref rke 2)) t2 (logxor t2 (aref rke 3))) (kuznyechik-ls t1 t2 x1 x2) (setf x1 (logxor x1 (aref rke 4)) x2 (logxor x2 (aref rke 5))) (kuznyechik-ls x1 x2 t1 t2) (setf t1 (logxor t1 (aref rke 6)) t2 (logxor t2 (aref rke 7))) (kuznyechik-ls t1 t2 x1 x2) (setf x1 (logxor x1 (aref rke 8)) x2 (logxor x2 (aref rke 9))) (kuznyechik-ls x1 x2 t1 t2) (setf t1 (logxor t1 (aref rke 10)) t2 (logxor t2 (aref rke 11))) (kuznyechik-ls t1 t2 x1 x2) (setf x1 (logxor x1 (aref rke 12)) x2 (logxor x2 (aref rke 13))) (kuznyechik-ls x1 x2 t1 t2) (setf t1 (logxor t1 (aref rke 14)) t2 (logxor t2 (aref rke 15))) (kuznyechik-ls t1 t2 x1 x2) (setf x1 (logxor x1 (aref rke 16)) x2 (logxor x2 (aref rke 17))) (kuznyechik-ls x1 x2 t1 t2) (setf t1 (logxor t1 (aref rke 18)) t2 (logxor t2 (aref rke 19))) (store-words ciphertext ciphertext-start t1 t2))) (values)) (define-block-decryptor kuznyechik 16 (let ((rkd (kuznyechik-rkd context)) (t1 0) (t2 0)) (declare (type (simple-array (unsigned-byte 64) (20)) rkd) (type (unsigned-byte 64) t1 t2)) (with-words ((x1 x2) ciphertext ciphertext-start :big-endian nil :size 8) (kuznyechik-ilss x1 x2 t1 t2) (setf t1 (logxor t1 (aref rkd 18)) t2 (logxor t2 (aref rkd 19))) (kuznyechik-ils t1 t2 x1 x2) (setf x1 (logxor x1 (aref rkd 16)) x2 (logxor x2 (aref rkd 17))) (kuznyechik-ils x1 x2 t1 t2) (setf t1 (logxor t1 (aref rkd 14)) t2 (logxor t2 (aref rkd 15))) (kuznyechik-ils t1 t2 x1 x2) (setf x1 (logxor x1 (aref rkd 12)) x2 (logxor x2 (aref rkd 13))) (kuznyechik-ils x1 x2 t1 t2) (setf t1 (logxor t1 (aref rkd 10)) t2 (logxor t2 (aref rkd 11))) (kuznyechik-ils t1 t2 x1 x2) (setf x1 (logxor x1 (aref rkd 8)) x2 (logxor x2 (aref rkd 9))) (kuznyechik-ils x1 x2 t1 t2) (setf t1 (logxor t1 (aref rkd 6)) t2 (logxor t2 (aref rkd 7))) (kuznyechik-ils t1 t2 x1 x2) (setf x1 (logxor x1 (aref rkd 4)) x2 (logxor x2 (aref rkd 5))) (kuznyechik-ils x1 x2 t1 t2) (setf t1 (logxor t1 (aref rkd 2)) t2 (logxor t2 (aref rkd 3))) (kuznyechik-isi t1) (kuznyechik-isi t2) (setf t1 (logxor t1 (aref rkd 0)) t2 (logxor t2 (aref rkd 1))) (store-words plaintext plaintext-start t1 t2))) (values)) (defcipher kuznyechik (:encrypt-function kuznyechik-encrypt-block) (:decrypt-function kuznyechik-decrypt-block) (:block-length 16) (:key-length (:fixed 32))) ironclad-0.57/src/ciphers/make-cipher.lisp000066400000000000000000000155671420372057600205660ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; make-cipher.lisp -- all the machinery necessary for MAKE-CIPHER (in-package :crypto) ;;; Validity of modes for ciphers. (defmethod valid-mode-for-cipher-p (cipher mode) nil) (defun valid-mode-for-block-cipher-p (mode) (member mode '(:ecb :cbc :ofb :cfb :cfb8 :ctr ecb cbc ofb cfb cfb8 ctr))) (defmethod valid-mode-for-cipher-p ((cipher 128-byte-block-mixin) mode) (valid-mode-for-block-cipher-p mode)) (defmethod valid-mode-for-cipher-p ((cipher 64-byte-block-mixin) mode) (valid-mode-for-block-cipher-p mode)) (defmethod valid-mode-for-cipher-p ((cipher 32-byte-block-mixin) mode) (valid-mode-for-block-cipher-p mode)) (defmethod valid-mode-for-cipher-p ((cipher 16-byte-block-mixin) mode) (valid-mode-for-block-cipher-p mode)) (defmethod valid-mode-for-cipher-p ((cipher 8-byte-block-mixin) mode) (valid-mode-for-block-cipher-p mode)) (defmethod valid-mode-for-cipher-p ((cipher stream-cipher) mode) (or (eq mode :stream) (eq mode 'stream))) (defun make-mode-for-cipher (cipher mode &optional initialization-vector padding) (let ((block-length (block-length cipher))) (flet ((make-extended-mode (mode-class) (declare (ignorable mode-class)) (unless initialization-vector (error 'initialization-vector-not-supplied :mode mode)) (unless (typep initialization-vector '(vector (unsigned-byte 8))) (error 'type-error :datum initialization-vector :expected-type '(vector (unsigned-byte 8)))) (unless (= (length initialization-vector) block-length) (error 'invalid-initialization-vector :cipher (class-name (class-of cipher)) :block-length block-length)) (make-instance mode-class :initialization-vector (copy-seq initialization-vector) :padding padding :cipher cipher))) (case mode ((:ecb ecb) (make-instance 'ecb-mode :cipher cipher :padding padding)) ((:cbc cbc) (make-extended-mode 'cbc-mode)) ((:ofb ofb) (make-extended-mode 'ofb-mode)) ((:cfb cfb) (make-extended-mode 'cfb-mode)) ((:cfb8 cfb8) (make-extended-mode 'cfb8-mode)) ((:ctr ctr) (make-extended-mode 'ctr-mode)) ((:stream stream) (make-instance 'stream-mode :cipher cipher)) (t (error 'unsupported-mode :mode mode)))))) ;;; CLOS methods. ;;; This is where all the work gets done. (defmethod shared-initialize :after ((cipher cipher) slot-names &rest initargs &key (key nil key-p) (mode nil mode-p) (padding nil padding-p) (initialization-vector nil iv-p) &allow-other-keys) (declare (ignorable padding padding-p iv-p initargs)) ;; We always want to check that we have a valid key when we initialize ;; a cipher (what good is an unkeyed cipher?). We want to check for ;; a valid key upon reinitialization only if one has been provided. (when (or (not (initialized-p cipher)) key-p) (schedule-key cipher key)) ;; Check that the mode is valid for the cipher we are initializing. (when (and (or (not (initialized-p cipher)) mode-p) (not (valid-mode-for-cipher-p cipher mode))) ;; FIXME: (CLASS-NAME (CLASS-OF ...)) is not quite right. (error 'unsupported-mode :mode mode :cipher (class-name (class-of cipher)))) (when (and iv-p (not mode-p)) (setq mode (mode-name cipher))) (when (or mode-p iv-p padding-p) (setf (slot-value cipher 'mode-name) mode) (let ((mode-instance (make-mode-for-cipher cipher mode initialization-vector padding))) (setf (mode cipher) mode-instance))) cipher) (defmethod initialize-instance :after ((cipher cipher) &rest initargs &key key mode padding tweak initialization-vector &allow-other-keys) (declare (ignore key mode padding initialization-vector initargs tweak)) (setf (initialized-p cipher) t) cipher) (defun %block-cipher-p (info) (not (= (%block-length info) 1))) (defun find-cipher-or-lose (name) (let ((cipher-info (%find-cipher name))) (unless cipher-info (error 'unsupported-cipher :name name)) cipher-info)) (defun validate-parameters-for-cipher-info (cipher-info mode padding) (cond ((%block-cipher-p cipher-info) ;; Block cipher. (when (or (eq mode 'stream) (eq mode :stream)) (error 'unsupported-mode :cipher (cipher cipher-info) :mode mode))) (t ;; Stream cipher. (unless (or (eq mode 'stream) (eq mode :stream)) (error 'unsupported-mode :cipher (cipher cipher-info) :mode mode)) (when padding (error 'ironclad-error :format-control "padding is not supported for stream ciphers")))) cipher-info) (defun make-cipher (name &key key mode initialization-vector padding tweak) "Return a cipher object using algorithm NAME with KEY in the specified MODE. If MODE requires an initialization vector, it must be provided as INITIALIZATION-VECTOR; otherwise, the INITIALIZATION-VECTOR argument is ignored. If the cipher can can use a tweak, it can be provided with the TWEAK argument." (let ((cipher-info (find-cipher-or-lose name))) (validate-parameters-for-cipher-info cipher-info mode padding) (make-instance (%class-name cipher-info) :key key :mode mode :initialization-vector initialization-vector :padding padding :tweak tweak))) ;;; Many implementations can optimize MAKE-INSTANCE of a constant class ;;; name; try to enable that optimization by converting MAKE-CIPHER to ;;; such a form. (define-compiler-macro make-cipher (&whole form &environment env name &rest keys &key key mode initialization-vector padding tweak &allow-other-keys) (declare (ignore env keys)) (cond ((or (keywordp name) (and (quotationp name) (symbolp name))) (let ((cipher-info (ignore-errors (validate-parameters-for-cipher-info (find-cipher-or-lose (unquote name)) (unquote mode) padding)))) (if cipher-info `(make-instance ',(%class-name cipher-info) :key ,key :mode ,mode :initialization-vector ,initialization-vector :padding ,padding :tweak ,tweak) form))) (t form))) ironclad-0.57/src/ciphers/misty1.lisp000066400000000000000000000252111420372057600176120ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; misty1.lisp -- implementation of the MISTY1 block cipher from RFC 2994 (in-package :crypto) (in-ironclad-readtable) ;;; required tables (defconst +misty1-s7table+ #8@(#x1B #x32 #x33 #x5A #x3B #x10 #x17 #x54 #x5B #x1A #x72 #x73 #x6B #x2C #x66 #x49 #x1F #x24 #x13 #x6C #x37 #x2E #x3F #x4A #x5D #x0F #x40 #x56 #x25 #x51 #x1C #x04 #x0B #x46 #x20 #x0D #x7B #x35 #x44 #x42 #x2B #x1E #x41 #x14 #x4B #x79 #x15 #x6F #x0E #x55 #x09 #x36 #x74 #x0C #x67 #x53 #x28 #x0A #x7E #x38 #x02 #x07 #x60 #x29 #x19 #x12 #x65 #x2F #x30 #x39 #x08 #x68 #x5F #x78 #x2A #x4C #x64 #x45 #x75 #x3D #x59 #x48 #x03 #x57 #x7C #x4F #x62 #x3C #x1D #x21 #x5E #x27 #x6A #x70 #x4D #x3A #x01 #x6D #x6E #x63 #x18 #x77 #x23 #x05 #x26 #x76 #x00 #x31 #x2D #x7A #x7F #x61 #x50 #x22 #x11 #x06 #x47 #x16 #x52 #x4E #x71 #x3E #x69 #x43 #x34 #x5C #x58 #x7D)) (defconst +misty1-s9table+ #16@(#x01C3 #x00CB #x0153 #x019F #x01E3 #x00E9 #x00FB #x0035 #x0181 #x00B9 #x0117 #x01EB #x0133 #x0009 #x002D #x00D3 #x00C7 #x014A #x0037 #x007E #x00EB #x0164 #x0193 #x01D8 #x00A3 #x011E #x0055 #x002C #x001D #x01A2 #x0163 #x0118 #x014B #x0152 #x01D2 #x000F #x002B #x0030 #x013A #x00E5 #x0111 #x0138 #x018E #x0063 #x00E3 #x00C8 #x01F4 #x001B #x0001 #x009D #x00F8 #x01A0 #x016D #x01F3 #x001C #x0146 #x007D #x00D1 #x0082 #x01EA #x0183 #x012D #x00F4 #x019E #x01D3 #x00DD #x01E2 #x0128 #x01E0 #x00EC #x0059 #x0091 #x0011 #x012F #x0026 #x00DC #x00B0 #x018C #x010F #x01F7 #x00E7 #x016C #x00B6 #x00F9 #x00D8 #x0151 #x0101 #x014C #x0103 #x00B8 #x0154 #x012B #x01AE #x0017 #x0071 #x000C #x0047 #x0058 #x007F #x01A4 #x0134 #x0129 #x0084 #x015D #x019D #x01B2 #x01A3 #x0048 #x007C #x0051 #x01CA #x0023 #x013D #x01A7 #x0165 #x003B #x0042 #x00DA #x0192 #x00CE #x00C1 #x006B #x009F #x01F1 #x012C #x0184 #x00FA #x0196 #x01E1 #x0169 #x017D #x0031 #x0180 #x010A #x0094 #x01DA #x0186 #x013E #x011C #x0060 #x0175 #x01CF #x0067 #x0119 #x0065 #x0068 #x0099 #x0150 #x0008 #x0007 #x017C #x00B7 #x0024 #x0019 #x00DE #x0127 #x00DB #x00E4 #x01A9 #x0052 #x0109 #x0090 #x019C #x01C1 #x0028 #x01B3 #x0135 #x016A #x0176 #x00DF #x01E5 #x0188 #x00C5 #x016E #x01DE #x01B1 #x00C3 #x01DF #x0036 #x00EE #x01EE #x00F0 #x0093 #x0049 #x009A #x01B6 #x0069 #x0081 #x0125 #x000B #x005E #x00B4 #x0149 #x01C7 #x0174 #x003E #x013B #x01B7 #x008E #x01C6 #x00AE #x0010 #x0095 #x01EF #x004E #x00F2 #x01FD #x0085 #x00FD #x00F6 #x00A0 #x016F #x0083 #x008A #x0156 #x009B #x013C #x0107 #x0167 #x0098 #x01D0 #x01E9 #x0003 #x01FE #x00BD #x0122 #x0089 #x00D2 #x018F #x0012 #x0033 #x006A #x0142 #x00ED #x0170 #x011B #x00E2 #x014F #x0158 #x0131 #x0147 #x005D #x0113 #x01CD #x0079 #x0161 #x01A5 #x0179 #x009E #x01B4 #x00CC #x0022 #x0132 #x001A #x00E8 #x0004 #x0187 #x01ED #x0197 #x0039 #x01BF #x01D7 #x0027 #x018B #x00C6 #x009C #x00D0 #x014E #x006C #x0034 #x01F2 #x006E #x00CA #x0025 #x00BA #x0191 #x00FE #x0013 #x0106 #x002F #x01AD #x0172 #x01DB #x00C0 #x010B #x01D6 #x00F5 #x01EC #x010D #x0076 #x0114 #x01AB #x0075 #x010C #x01E4 #x0159 #x0054 #x011F #x004B #x00C4 #x01BE #x00F7 #x0029 #x00A4 #x000E #x01F0 #x0077 #x004D #x017A #x0086 #x008B #x00B3 #x0171 #x00BF #x010E #x0104 #x0097 #x015B #x0160 #x0168 #x00D7 #x00BB #x0066 #x01CE #x00FC #x0092 #x01C5 #x006F #x0016 #x004A #x00A1 #x0139 #x00AF #x00F1 #x0190 #x000A #x01AA #x0143 #x017B #x0056 #x018D #x0166 #x00D4 #x01FB #x014D #x0194 #x019A #x0087 #x01F8 #x0123 #x00A7 #x01B8 #x0141 #x003C #x01F9 #x0140 #x002A #x0155 #x011A #x01A1 #x0198 #x00D5 #x0126 #x01AF #x0061 #x012E #x0157 #x01DC #x0072 #x018A #x00AA #x0096 #x0115 #x00EF #x0045 #x007B #x008D #x0145 #x0053 #x005F #x0178 #x00B2 #x002E #x0020 #x01D5 #x003F #x01C9 #x01E7 #x01AC #x0044 #x0038 #x0014 #x00B1 #x016B #x00AB #x00B5 #x005A #x0182 #x01C8 #x01D4 #x0018 #x0177 #x0064 #x00CF #x006D #x0100 #x0199 #x0130 #x015A #x0005 #x0120 #x01BB #x01BD #x00E0 #x004F #x00D6 #x013F #x01C4 #x012A #x0015 #x0006 #x00FF #x019B #x00A6 #x0043 #x0088 #x0050 #x015F #x01E8 #x0121 #x0073 #x017E #x00BC #x00C2 #x00C9 #x0173 #x0189 #x01F5 #x0074 #x01CC #x01E6 #x01A8 #x0195 #x001F #x0041 #x000D #x01BA #x0032 #x003D #x01D1 #x0080 #x00A8 #x0057 #x01B9 #x0162 #x0148 #x00D9 #x0105 #x0062 #x007A #x0021 #x01FF #x0112 #x0108 #x01C0 #x00A9 #x011D #x01B0 #x01A6 #x00CD #x00F3 #x005C #x0102 #x005B #x01D9 #x0144 #x01F6 #x00AD #x00A5 #x003A #x01CB #x0136 #x017F #x0046 #x00E1 #x001E #x01DD #x00E6 #x0137 #x01FA #x0185 #x008C #x008F #x0040 #x01B5 #x00BE #x0078 #x0000 #x00AC #x0110 #x015E #x0124 #x0002 #x01BC #x00A2 #x00EA #x0070 #x01FC #x0116 #x015C #x004C #x01C2)) ;;; types and context definition (deftype misty1-round-keys () '(simple-array (unsigned-byte 16) (32))) (defclass misty1 (cipher 8-byte-block-mixin) ((round-keys :accessor round-keys :type misty1-round-keys))) ;;; block functions and key expansion ;;; Declaring these inline produces screwy results in SBCL (bug?). (declaim (notinline fi fl fl-inv fo)) (defun fi (fi-in fi-key) (declare (type (unsigned-byte 16) fi-in fi-key)) (let ((d9 (ash fi-in -7)) (d7 (logand fi-in #x7f))) (declare (type (unsigned-byte 16) d9 d7)) (setf d9 (logxor d7 (aref +misty1-s9table+ d9)) d7 (logxor d9 (aref +misty1-s7table+ d7))) (setf d7 (logand d7 #x7f)) (setf d7 (logxor d7 (ash fi-key -9)) d9 (logxor d9 (logand fi-key #x1ff))) (setf d9 (logxor d7 (aref +misty1-s9table+ d9))) (ldb (byte 16 0) (logior (ash d7 9) d9)))) (defun fl (d0 d1 keys round) (declare (type misty1-round-keys keys)) (declare (type (unsigned-byte 16) d0 d1)) (cond ((evenp round) (let* ((d1 (logxor d1 (logand d0 (aref keys (truncate round 2))))) (d0 (logxor d0 (logior d1 (aref keys (+ (mod (+ (truncate round 2) 6) 8) 8)))))) (values d0 d1))) (t (let* ((d1 (logxor d1 (logand d0 (aref keys (+ (mod (+ (truncate (1- round) 2) 2) 8) 8))))) (d0 (logxor d0 (logior d1 (aref keys (mod (+ (truncate (1- round) 2) 4) 8)))))) (values d0 d1))))) (defun fl-inv (d0 d1 keys round) (declare (type misty1-round-keys keys)) (declare (type (unsigned-byte 16) d0 d1)) (cond ((evenp round) (let* ((d0 (logxor d0 (logior d1 (aref keys (+ (mod (+ (truncate round 2) 6) 8) 8))))) (d1 (logxor d1 (logand d0 (aref keys (truncate round 2)))))) (values d0 d1))) (t (let* ((d0 (logxor d0 (logior d1 (aref keys (mod (+ (truncate (1- round) 2) 4) 8))))) (d1 (logxor d1 (logand d0 (aref keys (+ (mod (+ (truncate (1- round) 2) 2) 8) 8)))))) (values d0 d1))))) (defun fo (t0 t1 keys round) (declare (type misty1-round-keys keys)) (declare (type (unsigned-byte 16) t0 t1)) (setf t0 (logxor t0 (aref keys round)) t0 (fi t0 (aref keys (+ (mod (+ round 5) 8) 8))) t0 (logxor t0 t1) t1 (logxor t1 (aref keys (mod (+ round 2) 8))) t1 (fi t1 (aref keys (+ (mod (+ round 1) 8) 8))) t1 (logxor t1 t0) t0 (logxor t0 (aref keys (mod (+ round 7) 8))) t0 (fi t0 (aref keys (+ (mod (+ round 3) 8) 8))) t0 (logxor t0 t1) t1 (logxor t1 (aref keys (mod (+ round 4) 8)))) (values t1 t0)) (define-block-encryptor misty1 8 (let ((round-keys (round-keys context))) (with-words ((d00 d01 d10 d11) plaintext plaintext-start :size 2) #.(loop for i from 0 below 8 if (evenp i) collect `(progn (multiple-value-setq (d00 d01) (fl d00 d01 round-keys ,i)) (multiple-value-setq (d10 d11) (fl d10 d11 round-keys (1+ ,i))) (multiple-value-bind (t0 t1) (fo d00 d01 round-keys ,i) (declare (type (unsigned-byte 16) t0 t1)) (multiple-value-setq (d10 d11) (values (logxor d10 t0) (logxor d11 t1))))) into forms else collect `(multiple-value-bind (t0 t1) (fo d10 d11 round-keys ,i) (declare (type (unsigned-byte 16) t0 t1)) (multiple-value-setq (d00 d01) (values (logxor d00 t0) (logxor d01 t1)))) into forms finally (return `(progn ,@forms (multiple-value-setq (d00 d01) (fl d00 d01 round-keys 8)) (multiple-value-setq (d10 d11) (fl d10 d11 round-keys 9))))) (store-words ciphertext ciphertext-start d10 d11 d00 d01)))) (define-block-decryptor misty1 8 (let ((round-keys (round-keys context))) (with-words ((d10 d11 d00 d01) ciphertext ciphertext-start :size 2) #.(loop for i from 7 downto 0 if (evenp i) collect `(progn (multiple-value-bind (t0 t1) (fo d00 d01 round-keys ,i) (declare (type (unsigned-byte 16) t0 t1)) (multiple-value-setq (d10 d11) (values (logxor d10 t0) (logxor d11 t1)))) (multiple-value-setq (d00 d01) (fl-inv d00 d01 round-keys ,i)) (multiple-value-setq (d10 d11) (fl-inv d10 d11 round-keys (1+ ,i)))) into forms else collect `(multiple-value-bind (t0 t1) (fo d10 d11 round-keys ,i) (declare (type (unsigned-byte 16) t0 t1)) (multiple-value-setq (d00 d01) (values (logxor d00 t0) (logxor d01 t1)))) into forms finally (return `(progn (multiple-value-setq (d00 d01) (fl-inv d00 d01 round-keys 8)) (multiple-value-setq (d10 d11) (fl-inv d10 d11 round-keys 9)) ,@forms))) (store-words plaintext plaintext-start d00 d01 d10 d11)))) (defun misty1-expand-key (key) (declare (type (simple-array (unsigned-byte 8) (16)) key)) (let ((key-schedule (make-array 32 :element-type '(unsigned-byte 16)))) (declare (type (simple-array (unsigned-byte 16) (32)) key-schedule)) ;; fill in the expanded key schedule (loop for i from 0 below 16 by 2 for j from 0 below 8 do (setf (aref key-schedule j) (ub16ref/be key i))) ;; scramble (dotimes (i 8 key-schedule) (setf (aref key-schedule (+ i 8)) (fi (aref key-schedule i) (aref key-schedule (mod (1+ i) 8))) (aref key-schedule (+ i 16)) (logand (aref key-schedule (+ i 8)) #x01ff) (aref key-schedule (+ i 24)) (ash (aref key-schedule (+ i 8)) -9))))) (defmethod schedule-key ((cipher misty1) key) (let ((round-keys (misty1-expand-key key))) (setf (round-keys cipher) round-keys) cipher)) (defcipher misty1 (:encrypt-function misty1-encrypt-block) (:decrypt-function misty1-decrypt-block) (:block-length 8) (:key-length (:fixed 16))) ironclad-0.57/src/ciphers/modes.lisp000066400000000000000000001027241420372057600175000ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; modes.lisp -- using encryption modes with block ciphers (in-package :crypto) (defclass encryption-mode () ((encrypt-function :reader encrypt-function) (decrypt-function :reader decrypt-function))) (defclass padded-mode () ((padding :accessor padding :initform nil))) (defclass ecb-mode (encryption-mode padded-mode) ()) (defclass stream-mode (encryption-mode) ()) (defclass inititialization-vector-mixin () ((iv :reader iv :initarg :initialization-vector) (position :accessor iv-position :initform 0))) (defclass cbc-mode (encryption-mode inititialization-vector-mixin padded-mode) ()) (defclass ofb-mode (encryption-mode inititialization-vector-mixin) ()) (defclass cfb-mode (encryption-mode inititialization-vector-mixin) ()) (defclass cfb8-mode (encryption-mode inititialization-vector-mixin) ()) (defclass ctr-mode (encryption-mode inititialization-vector-mixin) ((keystream-blocks :accessor keystream-blocks :initform 0 :type (integer 0 *)))) (defmethod print-object ((object encryption-mode) stream) (print-unreadable-object (object stream :identity t) (format stream "~A" (class-name (class-of object))))) (defmethod initialize-instance :after ((mode encryption-mode) &key cipher padding) (when (typep mode 'padded-mode) (case padding ((:pkcs7 pkcs7) (setf (padding mode) (make-instance 'pkcs7-padding))) ((:ansi-x923 ansi-x923) (setf (padding mode) (make-instance 'ansi-x923-padding))) ((:iso-7816-4 iso-7816-4) (setf (padding mode) (make-instance 'iso-7816-4-padding))) ((nil) (setf (padding mode) nil)) (t (error 'unsupported-padding :name padding)))) (multiple-value-bind (efun dfun) (mode-crypt-functions cipher mode) (setf (slot-value mode 'encrypt-function) efun (slot-value mode 'decrypt-function) dfun))) (defvar *supported-modes* (list :ecb :cbc :ofb :cfb :cfb8 :ctr)) (defun mode-supported-p (name) (and (symbolp name) (not (null (member (intern (symbol-name name) :keyword) *supported-modes*))))) (defun list-all-modes () (sort (copy-seq *supported-modes*) #'string<)) (defmethod encrypt-message (cipher message &key (start 0) (end (length message)) &allow-other-keys) (let* ((length (- end start)) (encrypted-length (encrypted-message-length cipher (mode cipher) length t)) (encrypted-message (make-array encrypted-length :element-type '(unsigned-byte 8)))) (encrypt cipher message encrypted-message :plaintext-start start :plaintext-end end :handle-final-block t) encrypted-message)) (defmethod decrypt-message (cipher message &key (start 0) (end (length message)) &allow-other-keys) (let* ((length (- end start)) (decrypted-message (make-array length :element-type '(unsigned-byte 8)))) (multiple-value-bind (bytes-consumed bytes-produced) (decrypt cipher message decrypted-message :ciphertext-start start :ciphertext-end end :handle-final-block t) (declare (ignore bytes-consumed)) (if (< bytes-produced length) (subseq decrypted-message 0 bytes-produced) decrypted-message)))) (defun increment-counter-block (block n) (declare (type simple-octet-vector block) (type (mod #.most-positive-fixnum) n) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (loop with carry of-type (mod #.most-positive-fixnum) = n with sum of-type (unsigned-byte 16) = 0 for i of-type fixnum from (1- (length block)) downto 0 do (setf sum (+ (aref block i) (logand carry #xff)) (aref block i) (logand sum #xff) carry (+ (ash carry -8) (ash sum -8))) until (zerop carry))) (declaim (inline increment-counter-block-1)) (defun increment-counter-block-1 (size block) (declare (type index size) (type simple-octet-vector block) (optimize (speed 3) (space 0) (debug 0) (safety 0))) #+(and sbcl (or x86 x86-64) ironclad-assembly) (inc-counter-block size block) #-(and sbcl (or x86 x86-64) ironclad-assembly) (loop with sum of-type (unsigned-byte 16) = 1 for i of-type fixnum from (1- size) downto 0 do (setf sum (+ (aref block i) sum) (aref block i) (logand sum #xff) sum (ash sum -8)) until (zerop sum))) (defun decrement-counter-block (block n) (declare (type simple-octet-vector block) (type (mod #.most-positive-fixnum) n) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (loop with carry of-type (mod #.most-positive-fixnum) = n with sub of-type fixnum = 0 for i of-type fixnum from (1- (length block)) downto 0 do (setf sub (- (aref block i) (logand carry #xff)) (aref block i) (logand sub #xff) carry (+ (ash carry -8) (if (minusp sub) 1 0))) until (zerop carry))) ;;; This way is kind of ugly, but I don't know a better way. (macrolet ((define-mode-function (&rest mode-definition-funs &environment env) (loop for fun in mode-definition-funs collect (macroexpand `(,fun 128-byte-block-mixin 128) env) into forms collect (macroexpand `(,fun 64-byte-block-mixin 64) env) into forms collect (macroexpand `(,fun 32-byte-block-mixin 32) env) into forms collect (macroexpand `(,fun 16-byte-block-mixin 16) env) into forms collect (macroexpand `(,fun 8-byte-block-mixin 8) env) into forms finally (return `(progn ,@forms)))) (mode-lambda (&body body) `(lambda (in out in-start in-end out-start handle-final-block) (declare (type simple-octet-vector in out)) (declare (type index in-start in-end out-start)) (declare (ignorable handle-final-block)) (declare (optimize (speed 3) (space 0) (debug 0))) ,@body))) ;;; ECB mode (macrolet ((mode-crypt (cipher-specializer block-length-expr) `(defmethod mode-crypt-functions ((cipher ,cipher-specializer) (mode ecb-mode)) (let ((efun (encrypt-function cipher)) (dfun (decrypt-function cipher)) (padding (padding mode))) (declare (type function efun dfun)) (values (mode-lambda (let ((offset in-start)) (declare (type index offset)) (loop with end = (- in-end ,block-length-expr) while (<= offset end) do (funcall efun cipher in offset out out-start) (incf offset ,block-length-expr) (incf out-start ,block-length-expr)) (let ((n-bytes-processed (- offset in-start))) (declare (type index n-bytes-processed)) (if (and handle-final-block padding) (let ((n-bytes-remaining (- in-end offset))) (declare (type index n-bytes-remaining)) (when (< (- (length out) out-start) ,block-length-expr) (error 'insufficient-buffer-space :buffer out :start out-start :length ,block-length-expr)) (replace out in :start1 out-start :start2 offset :end2 in-end) (add-padding-bytes padding out out-start n-bytes-remaining ,block-length-expr) (funcall efun cipher out out-start out out-start) (values (+ n-bytes-processed n-bytes-remaining) (+ n-bytes-processed ,block-length-expr))) (values n-bytes-processed n-bytes-processed))))) (mode-lambda (let ((temp-block (make-array ,block-length-expr :element-type '(unsigned-byte 8))) (offset in-start)) (declare (type (simple-octet-vector ,block-length-expr) temp-block)) (declare (dynamic-extent temp-block)) (declare (type index offset)) (loop with end = (if (and handle-final-block padding) (- in-end (* 2 ,block-length-expr)) (- in-end ,block-length-expr)) while (<= offset end) do (funcall dfun cipher in offset out out-start) (incf offset ,block-length-expr) (incf out-start ,block-length-expr)) (let ((n-bytes-processed (- offset in-start))) (declare (type index n-bytes-processed)) (if (and handle-final-block padding (= (- in-end offset) ,block-length-expr)) (let ((n-bytes-remaining 0)) (declare (type index n-bytes-remaining)) (funcall dfun cipher in offset temp-block 0) (setf n-bytes-remaining (- ,block-length-expr (count-padding-bytes padding temp-block 0 ,block-length-expr))) (replace out temp-block :start1 out-start :start2 0 :end2 n-bytes-remaining) (values (+ n-bytes-processed ,block-length-expr) (+ n-bytes-processed n-bytes-remaining))) (values n-bytes-processed n-bytes-processed))))))))) (message-length (cipher-specializer block-length-expr) `(defmethod encrypted-message-length ((cipher ,cipher-specializer) (mode ecb-mode) length &optional handle-final-block) (let ((encrypted-length (* (truncate length ,block-length-expr) ,block-length-expr))) (if (and handle-final-block (padding mode)) (+ encrypted-length ,block-length-expr) encrypted-length))))) (define-mode-function mode-crypt message-length)) ;;; CBC mode (macrolet ((mode-crypt (cipher-specializer block-length-expr) `(defmethod mode-crypt-functions ((cipher ,cipher-specializer) (mode cbc-mode)) (let ((efun (encrypt-function cipher)) (dfun (decrypt-function cipher)) (iv (iv mode)) (padding (padding mode))) (declare (type function efun dfun)) (declare (type (simple-octet-vector ,block-length-expr) iv)) (declare (inline xor-block)) (declare (inline copy-block)) (values (mode-lambda (let ((offset in-start)) (declare (type index offset)) (loop with end = (- in-end ,block-length-expr) while (<= offset end) do (xor-block ,block-length-expr iv 0 in offset out out-start) (funcall efun cipher out out-start out out-start) (copy-block ,block-length-expr out out-start iv 0) (incf offset ,block-length-expr) (incf out-start ,block-length-expr)) (let ((n-bytes-processed (- offset in-start))) (declare (type index n-bytes-processed)) (if (and handle-final-block padding) (let ((n-bytes-remaining (- in-end offset))) (declare (type index n-bytes-remaining)) (when (< (- (length out) out-start) ,block-length-expr) (error 'insufficient-buffer-space :buffer out :start out-start :length ,block-length-expr)) (replace out in :start1 out-start :start2 offset :end2 in-end) (add-padding-bytes padding out out-start n-bytes-remaining ,block-length-expr) (xor-block ,block-length-expr iv 0 out out-start out out-start) (funcall efun cipher out out-start out out-start) (copy-block ,block-length-expr out out-start iv 0) (values (+ n-bytes-processed n-bytes-remaining) (+ n-bytes-processed ,block-length-expr))) (values n-bytes-processed n-bytes-processed))))) (mode-lambda (let ((temp-block (make-array ,block-length-expr :element-type '(unsigned-byte 8))) (offset in-start)) (declare (type (simple-octet-vector ,block-length-expr) temp-block)) (declare (dynamic-extent temp-block)) (declare (type index offset)) (loop with end = (if (and handle-final-block padding) (- in-end (* 2 ,block-length-expr)) (- in-end ,block-length-expr)) while (<= offset end) do (copy-block ,block-length-expr in offset temp-block 0) (funcall dfun cipher in offset out out-start) (xor-block ,block-length-expr iv 0 out out-start out out-start) (copy-block ,block-length-expr temp-block 0 iv 0) (incf offset ,block-length-expr) (incf out-start ,block-length-expr)) (let ((n-bytes-processed (- offset in-start))) (declare (type index n-bytes-processed)) (if (and handle-final-block padding (= (- in-end offset) ,block-length-expr)) (let ((n-bytes-remaining 0)) (declare (type index n-bytes-remaining)) (funcall dfun cipher in offset temp-block 0) (xor-block ,block-length-expr iv 0 temp-block 0 temp-block 0) (setf n-bytes-remaining (- ,block-length-expr (count-padding-bytes padding temp-block 0 ,block-length-expr))) (replace out temp-block :start1 out-start :start2 0 :end2 n-bytes-remaining) (values (+ n-bytes-processed ,block-length-expr) (+ n-bytes-processed n-bytes-remaining))) (values n-bytes-processed n-bytes-processed))))))))) (message-length (cipher-specializer block-length-expr) `(defmethod encrypted-message-length ((cipher ,cipher-specializer) (mode cbc-mode) length &optional handle-final-block) (let ((encrypted-length (* (truncate length ,block-length-expr) ,block-length-expr))) (if (and handle-final-block (padding mode)) (+ encrypted-length ,block-length-expr) encrypted-length))))) (define-mode-function mode-crypt message-length)) ;;; CFB mode (macrolet ((mode-crypt (cipher-specializer block-length-expr) `(defmethod mode-crypt-functions ((cipher ,cipher-specializer) (mode cfb-mode)) (let ((function (encrypt-function cipher)) (iv (iv mode)) (iv-position (iv-position mode))) (declare (type function function)) (declare (type (simple-octet-vector ,block-length-expr) iv)) (declare (type (integer 0 (,block-length-expr)) iv-position)) (values (mode-lambda (let ((remaining (- in-end in-start)) (offset in-start)) (declare (type index remaining offset)) ;; Use remaining bytes in iv (loop until (or (zerop iv-position) (zerop remaining)) do (let ((b (logxor (aref in offset) (aref iv iv-position)))) (declare (type (unsigned-byte 8) b)) (setf (aref out out-start) b (aref iv iv-position) b iv-position (mod (1+ iv-position) ,block-length-expr)) (incf offset) (incf out-start) (decf remaining))) ;; Process data by block (multiple-value-bind (q r) (truncate remaining ,block-length-expr) (dotimes (i q) (funcall function cipher iv 0 iv 0) (xor-block ,block-length-expr iv 0 in offset iv 0) (copy-block ,block-length-expr iv 0 out out-start) (incf offset ,block-length-expr) (incf out-start ,block-length-expr)) (setf remaining r)) ;; Process remaing bytes of data (loop until (zerop remaining) do (when (zerop iv-position) (funcall function cipher iv 0 iv 0)) (let ((b (logxor (aref in offset) (aref iv iv-position)))) (declare (type (unsigned-byte 8) b)) (setf (aref out out-start) b (aref iv iv-position) b iv-position (mod (1+ iv-position) ,block-length-expr)) (incf offset) (incf out-start) (decf remaining))) (let ((processed (- offset in-start))) (values processed processed)))) (mode-lambda (let ((temp-block (make-array ,block-length-expr :element-type '(unsigned-byte 8))) (remaining (- in-end in-start)) (offset in-start)) (declare (type (simple-octet-vector ,block-length-expr) temp-block) (dynamic-extent temp-block) (type index remaining offset)) ;; Use remaining bytes in iv (loop until (or (zerop iv-position) (zerop remaining)) do (let ((b (aref in offset))) (declare (type (unsigned-byte 8) b)) (setf (aref out out-start) (logxor b (aref iv iv-position)) (aref iv iv-position) b iv-position (mod (1+ iv-position) ,block-length-expr)) (incf offset) (incf out-start) (decf remaining))) ;; Process data by block (multiple-value-bind (q r) (truncate remaining ,block-length-expr) (dotimes (i q) (funcall function cipher iv 0 temp-block 0) (copy-block ,block-length-expr in offset iv 0) (xor-block ,block-length-expr temp-block 0 in offset out out-start) (incf offset ,block-length-expr) (incf out-start ,block-length-expr)) (setf remaining r)) ;; Process remaing bytes of data (loop until (zerop remaining) do (when (zerop iv-position) (funcall function cipher iv 0 iv 0)) (let ((b (aref in offset))) (declare (type (unsigned-byte 8) b)) (setf (aref out out-start) (logxor b (aref iv iv-position)) (aref iv iv-position) b iv-position (mod (1+ iv-position) ,block-length-expr)) (incf offset) (incf out-start) (decf remaining))) (let ((processed (- offset in-start))) (values processed processed)))))))) (message-length (cipher-specializer block-length-expr) (declare (ignore block-length-expr)) `(defmethod encrypted-message-length ((cipher ,cipher-specializer) (mode cfb-mode) length &optional handle-final-block) (declare (ignore handle-final-block)) ;; We can encrypt the whole thing. length))) (define-mode-function mode-crypt message-length)) ;;; CFB8 mode (macrolet ((mode-crypt (cipher-specializer block-length-expr) `(defmethod mode-crypt-functions ((cipher ,cipher-specializer) (mode cfb8-mode)) (let ((function (encrypt-function cipher)) (iv (iv mode)) (encrypted-iv (make-array ,block-length-expr :element-type '(unsigned-byte 8)))) (declare (type function function)) (declare (type (simple-octet-vector ,block-length-expr) iv encrypted-iv)) (declare (inline copy-block)) (values (mode-lambda (loop for i of-type index from in-start below in-end for j of-type index from out-start do (copy-block ,block-length-expr iv 0 encrypted-iv 0) (funcall function cipher encrypted-iv 0 encrypted-iv 0) (let ((b (logxor (aref in i) (aref encrypted-iv 0)))) (setf (aref out j) b) (replace iv iv :start1 0 :start2 1 :end1 (1- ,block-length-expr) :end2 ,block-length-expr) (setf (aref iv (1- ,block-length-expr)) b)) finally (return (let ((n-bytes-processed (- in-end in-start))) (values n-bytes-processed n-bytes-processed))))) (mode-lambda (loop for i of-type index from in-start below in-end for j of-type index from out-start do (copy-block ,block-length-expr iv 0 encrypted-iv 0) (funcall function cipher encrypted-iv 0 encrypted-iv 0) (replace iv iv :start1 0 :start2 1 :end1 (1- ,block-length-expr) :end2 ,block-length-expr) (let ((b (aref in i))) (setf (aref iv (1- ,block-length-expr)) b) (setf (aref out j) (logxor b (aref encrypted-iv 0)))) finally (return (let ((n-bytes-processed (- in-end in-start))) (values n-bytes-processed n-bytes-processed))))))))) (message-length (cipher-specializer block-length-expr) (declare (ignore block-length-expr)) `(defmethod encrypted-message-length ((cipher ,cipher-specializer) (mode cfb8-mode) length &optional handle-final-block) (declare (ignore handle-final-block)) ;; We can encrypt the whole thing. length))) (define-mode-function mode-crypt message-length)) ;;; OFB mode (macrolet ((mode-crypt (cipher-specializer block-length-expr) `(defmethod mode-crypt-functions ((cipher ,cipher-specializer) (mode ofb-mode)) (let ((iv (iv mode)) (iv-position (iv-position mode))) (declare (type (simple-octet-vector ,block-length-expr) iv)) (declare (type (integer 0 (,block-length-expr)) iv-position)) (flet ((ofb-crypt-function (function) (declare (type function function)) (mode-lambda (let ((remaining (- in-end in-start)) (offset in-start)) (declare (type index remaining offset)) ;; Use remaining bytes in iv (loop until (or (zerop iv-position) (zerop remaining)) do (setf (aref out out-start) (logxor (aref in offset) (aref iv iv-position))) (setf iv-position (mod (1+ iv-position) ,block-length-expr)) (incf offset) (incf out-start) (decf remaining)) ;; Process data by block (multiple-value-bind (q r) (truncate remaining ,block-length-expr) (dotimes (i q) (funcall function cipher iv 0 iv 0) (xor-block ,block-length-expr iv 0 in offset out out-start) (incf offset ,block-length-expr) (incf out-start ,block-length-expr)) (setf remaining r)) ;; Process remaing bytes of data (loop until (zerop remaining) do (when (zerop iv-position) (funcall function cipher iv 0 iv 0)) (setf (aref out out-start) (logxor (aref in offset) (aref iv iv-position))) (setf iv-position (mod (1+ iv-position) ,block-length-expr)) (incf offset) (incf out-start) (decf remaining)) (let ((processed (- offset in-start))) (values processed processed)))))) (let ((f (ofb-crypt-function (encrypt-function cipher)))) (values f f)))))) (message-length (cipher-specializer block-length-expr) (declare (ignore block-length-expr)) `(defmethod encrypted-message-length ((cipher ,cipher-specializer) (mode ofb-mode) length &optional handle-final-block) (declare (ignore handle-final-block)) ;; We can encrypt the whole thing. length))) (define-mode-function mode-crypt message-length)) ;;; CTR mode (macrolet ((mode-crypt (cipher-specializer block-length-expr) `(defmethod mode-crypt-functions ((cipher ,cipher-specializer) (mode ctr-mode)) (let ((iv (iv mode)) (encrypted-iv (make-array ,block-length-expr :element-type '(unsigned-byte 8)))) (declare (type (simple-octet-vector ,block-length-expr) iv encrypted-iv)) (flet ((ctr-crypt-function (function) (declare (type function function)) (mode-lambda (let ((iv-position (iv-position mode)) (keystream-blocks (keystream-blocks mode)) (remaining (- in-end in-start)) (offset in-start)) (declare (type (integer 0 (,block-length-expr)) iv-position) (type (integer 0 *) keystream-blocks) (type index remaining offset)) ;; Use remaining bytes in encrypted-iv (loop until (or (zerop iv-position) (zerop remaining)) do (setf (aref out out-start) (logxor (aref in offset) (aref encrypted-iv iv-position))) (setf iv-position (mod (1+ iv-position) ,block-length-expr)) (incf offset) (incf out-start) (decf remaining)) ;; Process data by block (multiple-value-bind (q r) (truncate remaining ,block-length-expr) (dotimes (i q) (funcall function cipher iv 0 encrypted-iv 0) (increment-counter-block-1 ,block-length-expr iv) (xor-block ,block-length-expr encrypted-iv 0 in offset out out-start) (incf offset ,block-length-expr) (incf out-start ,block-length-expr)) (incf keystream-blocks q) (setf remaining r)) ;; Process remaing bytes of data (loop until (zerop remaining) do (when (zerop iv-position) (funcall function cipher iv 0 encrypted-iv 0) (increment-counter-block-1 ,block-length-expr iv) (incf keystream-blocks)) (setf (aref out out-start) (logxor (aref in offset) (aref encrypted-iv iv-position))) (setf iv-position (mod (1+ iv-position) ,block-length-expr)) (incf offset) (incf out-start) (decf remaining)) (setf (iv-position mode) iv-position) (setf (keystream-blocks mode) keystream-blocks) (let ((processed (- offset in-start))) (values processed processed)))))) (let ((f (ctr-crypt-function (encrypt-function cipher)))) (values f f)))))) (message-length (cipher-specializer block-length-expr) (declare (ignore block-length-expr)) `(defmethod encrypted-message-length ((cipher ,cipher-specializer) (mode ctr-mode) length &optional handle-final-block) (declare (ignore handle-final-block)) ;; We can encrypt the whole thing. length))) (define-mode-function mode-crypt message-length)) (defmethod mode-crypt-functions (cipher (mode stream-mode)) (flet ((stream-crypt-function (function) (declare (type function function)) (mode-lambda (let ((length (- in-end in-start))) (when (plusp length) (funcall function cipher in in-start out out-start length)) (let ((n-bytes-processed (max 0 length))) (values n-bytes-processed n-bytes-processed)))))) (values (stream-crypt-function (encrypt-function cipher)) (stream-crypt-function (decrypt-function cipher))))) ) ; DEFINE-MODE-FUNCTION MACROLET (defmethod encrypted-message-length (context (mode stream-mode) length &optional handle-final-block) (declare (ignore context mode handle-final-block)) (declare (type index length)) length) ironclad-0.57/src/ciphers/padding.lisp000066400000000000000000000066571420372057600200070ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; padding.lisp -- implementation of various padding algorithms (in-package :crypto) (defclass padding () ()) ;;; PKCS7 padding (defclass pkcs7-padding (padding) ()) (defmethod add-padding-bytes ((padding pkcs7-padding) text start block-offset block-size) (declare (type simple-octet-vector text)) (declare (type index start block-offset)) (let ((n-padding-bytes (- block-size block-offset))) (declare (type (unsigned-byte 8) n-padding-bytes)) (when (plusp n-padding-bytes) (fill text n-padding-bytes :start (+ start block-offset) :end (+ start block-size))) (values))) (defmethod count-padding-bytes ((padding pkcs7-padding) text start block-size) (declare (type simple-octet-vector text)) (declare (type index start)) (let* ((end (+ start block-size)) (n-padding-bytes (aref text (1- end))) (offset (- end n-padding-bytes))) (declare (type index end offset)) (declare (type (unsigned-byte 8) n-padding-bytes)) (when (or (> n-padding-bytes block-size) (not (loop for i from offset below end always (= (aref text i) n-padding-bytes)))) (error 'invalid-padding :name 'pkcs7 :block text)) n-padding-bytes)) ;;; ANSI X.923 padding (defclass ansi-x923-padding (padding) ()) (defmethod add-padding-bytes ((padding ansi-x923-padding) text start block-offset block-size) (declare (type simple-octet-vector text)) (declare (type index start block-offset)) (let ((end (+ start block-size)) (n-padding-bytes (- block-size block-offset))) (declare (type index end)) (declare (type (unsigned-byte 8) n-padding-bytes)) (when (plusp n-padding-bytes) (fill text 0 :start (+ start block-offset) :end end) (setf (aref text (1- end)) n-padding-bytes)) (values))) (defmethod count-padding-bytes ((padding ansi-x923-padding) text start block-size) (declare (type simple-octet-vector text)) (declare (type index start)) (let* ((end (+ start block-size)) (n-padding-bytes (aref text (1- end))) (offset (- end n-padding-bytes))) (declare (type index end)) (declare (type (unsigned-byte 8) n-padding-bytes)) (when (or (> n-padding-bytes block-size) (not (loop for i from offset below (1- end) always (zerop (aref text i))))) (error 'invalid-padding :name 'ansi-x923 :block text)) n-padding-bytes)) ;;; ISO 7816-4 padding (defclass iso-7816-4-padding (padding) ()) (defmethod add-padding-bytes ((padding iso-7816-4-padding) text start block-offset block-size) (declare (type simple-octet-vector text)) (declare (type index start block-offset)) (let ((end (+ start block-size)) (offset (+ start block-offset))) (declare (type index end offset)) (when (< block-offset block-size) (setf (aref text offset) #x80) (fill text 0 :start (1+ offset) :end end)) (values))) (defmethod count-padding-bytes ((padding iso-7816-4-padding) text start block-size) (declare (type simple-octet-vector text)) (declare (type index start)) (let* ((end (+ start block-size)) (offset (position #x80 text :start start :end end :from-end t))) (declare (type index end)) (when (or (null offset) (not (loop for i from (1+ offset) below end always (zerop (aref text i))))) (error 'invalid-padding :name 'iso-7816-4 :block text)) (- end offset))) ironclad-0.57/src/ciphers/rc2.lisp000066400000000000000000000224731420372057600170610ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; rc2.lisp -- implementation of the RC2 cipher algorithm from RFC 2268 (in-package :crypto) (in-ironclad-readtable) ;;; RC2 accepts a 1-byte to 128-byte key. But it also lets you specify ;;; an "effective key length" in bits, which effectively lets you have a ;;; 1-bit to 1024-bit key. The test vectors supplied in the RFC specify ;;; the effective key length as well as the bytes present in the key. ;;; ;;; This implementation does not support such generality: only effective ;;; key lengths from 8 bits to 1024 bits in multiples of eight are ;;; supported. It would be nice to support the more general ;;; functionality from the RFC; an interface for such functionality ;;; (maybe an :EFFECTIVE-KEY-LENGTH argument to `MAKE-CIPHER', ;;; applicable only to RC2) would also support specifying the number of ;;; rounds for many ciphers. ;;; PITABLE from section 2. (defconst +rc2-pitable+ #8@(#xd9 #x78 #xf9 #xc4 #x19 #xdd #xb5 #xed #x28 #xe9 #xfd #x79 #x4a #xa0 #xd8 #x9d #xc6 #x7e #x37 #x83 #x2b #x76 #x53 #x8e #x62 #x4c #x64 #x88 #x44 #x8b #xfb #xa2 #x17 #x9a #x59 #xf5 #x87 #xb3 #x4f #x13 #x61 #x45 #x6d #x8d #x09 #x81 #x7d #x32 #xbd #x8f #x40 #xeb #x86 #xb7 #x7b #x0b #xf0 #x95 #x21 #x22 #x5c #x6b #x4e #x82 #x54 #xd6 #x65 #x93 #xce #x60 #xb2 #x1c #x73 #x56 #xc0 #x14 #xa7 #x8c #xf1 #xdc #x12 #x75 #xca #x1f #x3b #xbe #xe4 #xd1 #x42 #x3d #xd4 #x30 #xa3 #x3c #xb6 #x26 #x6f #xbf #x0e #xda #x46 #x69 #x07 #x57 #x27 #xf2 #x1d #x9b #xbc #x94 #x43 #x03 #xf8 #x11 #xc7 #xf6 #x90 #xef #x3e #xe7 #x06 #xc3 #xd5 #x2f #xc8 #x66 #x1e #xd7 #x08 #xe8 #xea #xde #x80 #x52 #xee #xf7 #x84 #xaa #x72 #xac #x35 #x4d #x6a #x2a #x96 #x1a #xd2 #x71 #x5a #x15 #x49 #x74 #x4b #x9f #xd0 #x5e #x04 #x18 #xa4 #xec #xc2 #xe0 #x41 #x6e #x0f #x51 #xcb #xcc #x24 #x91 #xaf #x50 #xa1 #xf4 #x70 #x39 #x99 #x7c #x3a #x85 #x23 #xb8 #xb4 #x7a #xfc #x02 #x36 #x5b #x25 #x55 #x97 #x31 #x2d #x5d #xfa #x98 #xe3 #x8a #x92 #xae #x05 #xdf #x29 #x10 #x67 #x6c #xba #xc9 #xd3 #x00 #xe6 #xcf #xe1 #x9e #xa8 #x2c #x63 #x16 #x01 #x3f #x58 #xe2 #x89 #xa9 #x0d #x38 #x34 #x1b #xab #x33 #xff #xb0 #xbb #x48 #x0c #x5f #xb9 #xb1 #xcd #x2e #xc5 #xf3 #xdb #x47 #xe5 #xa5 #x9c #x77 #x0a #xa6 #x20 #x68 #xfe #x7f #xc1 #xad)) (deftype rc2-round-keys () '(simple-array (unsigned-byte 16) (64))) (defclass rc2 (cipher 8-byte-block-mixin) ((round-keys :accessor round-keys :type rc2-round-keys))) (declaim (inline rol16) (ftype (function ((unsigned-byte 16) (integer 0 15)) (unsigned-byte 16)))) (defun rol16 (x shift) (declare (type (unsigned-byte 16) x)) (declare (type (integer 0 15) shift)) (logior (ldb (byte 16 0) (ash x shift)) (ash x (- shift 16)))) (defun rc2-schedule-key (key effective-key-length) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (let* ((length (length key)) (lbuf (make-array 128 :element-type '(unsigned-byte 8) :initial-element 0)) (scheduled-key (make-array 64 :element-type '(unsigned-byte 16) :initial-element 0)) (t8 (truncate (+ effective-key-length 7) 8)) (tm (mod 255 (expt 2 (+ 8 effective-key-length (- (* t8 8))))))) (declare (type (integer 1 128) length)) (declare (type (simple-array (unsigned-byte 8) (128)) lbuf)) (declare (type rc2-round-keys scheduled-key)) (declare (dynamic-extent lbuf)) (replace lbuf key) (loop for j from length below 128 do (setf (aref lbuf j) (aref +rc2-pitable+ (mod (+ (aref lbuf (1- j)) (aref lbuf (- j length))) 256)))) (setf (aref lbuf (- 128 t8)) (aref +rc2-pitable+ (logand (aref lbuf (- 128 t8)) tm))) (loop for j from (- 127 t8) downto 0 do (setf (aref lbuf j) (aref +rc2-pitable+ (logxor (aref lbuf (1+ j)) (aref lbuf (+ j t8)))))) ;; If we wanted to really be a speed demon, we'd specialize this. (dotimes (i 64 scheduled-key) (setf (aref scheduled-key i) (ub16ref/le lbuf (* i 2)))))) (macrolet ((mix (index) (loop for i from 0 below 4 collect (let ((x0 (intern (format nil "~A~D" '#:r i))) (x1 (intern (format nil "~A~D" '#:r (mod (- i 1) 4)))) (x2 (intern (format nil "~A~D" '#:r (mod (- i 2) 4)))) (x3 (intern (format nil "~A~D" '#:r (mod (- i 3) 4))))) `(progn (setf ,x0 (ldb (byte 16 0) (+ ,x0 (logand ,x1 ,x2) (aref round-keys (+ (* 4 ,index) ,i)) (logandc1 ,x1 ,x3)))) (setf ,x0 (rol16 ,x0 ,(case i (0 1) (1 2) (2 3) (3 5)))))) into forms finally (return `(progn ,@forms)))) (mash () (loop for i from 0 below 4 collect (let ((x0 (intern (format nil "~A~D" '#:r i))) (x1 (intern (format nil "~A~D" '#:r (mod (- i 1) 4))))) `(setf ,x0 (ldb (byte 16 0) (+ ,x0 (aref round-keys (ldb (byte 6 0) ,x1)))))) into forms finally (return `(progn ,@forms)))) (rmix (index) (loop for i from 0 below 4 collect (let ((x0 (intern (format nil "~A~D" '#:r i))) (x1 (intern (format nil "~A~D" '#:r (mod (- i 1) 4)))) (x2 (intern (format nil "~A~D" '#:r (mod (- i 2) 4)))) (x3 (intern (format nil "~A~D" '#:r (mod (- i 3) 4))))) `(progn (setf ,x0 (rol16 ,x0 ,(case i (0 15) (1 14) (2 13) (3 11)))) (setf ,x0 (ldb (byte 16 0) (- ,x0 (aref round-keys (+ (* 4 ,index) ,i)) (logand ,x1 ,x2) (logandc1 ,x1 ,x3)))))) into forms finally (return `(progn ,@(nreverse forms))))) (rmash () (loop for i from 0 below 4 collect (let ((x0 (intern (format nil "~A~D" '#:r (mod i 4)))) (x1 (intern (format nil "~A~D" '#:r (mod (- i 1) 4))))) `(setf ,x0 (ldb (byte 16 0) (- ,x0 (aref round-keys (ldb (byte 6 0) ,x1)))))) into forms finally (return `(progn ,@(nreverse forms)))))) (define-block-encryptor rc2 8 (let ((round-keys (round-keys context))) (declare (type rc2-round-keys round-keys)) (with-words ((r0 r1 r2 r3) plaintext plaintext-start :size 2 :big-endian nil) #.(loop for i from 0 below 18 collect (ecase i ((0 1 2 3 4 6 7 8 9 10 11 13 14 15 16 17) ;; mixing round `(mix ,(cond ((<= i 4) i) ((<= 6 i 11) (- i 1)) ((<= 13 i 17) (- i 2))))) ((5 12) ;; mashing round `(mash))) into forms finally (return `(progn ,@forms))) (store-words ciphertext ciphertext-start r0 r1 r2 r3)))) (define-block-decryptor rc2 8 (let ((round-keys (round-keys context))) (declare (type rc2-round-keys round-keys)) (with-words ((r0 r1 r2 r3) ciphertext ciphertext-start :size 2 :big-endian nil) #.(loop for i from 0 below 18 collect (ecase i ((0 1 2 3 4 6 7 8 9 10 11 13 14 15 16 17) ;; mixing round `(rmix ,(cond ((<= i 4) i) ((<= 6 i 11) (- i 1)) ((<= 13 i 17) (- i 2))))) ((5 12) ;; mashing round `(rmash))) into forms finally (return `(progn ,@(nreverse forms)))) (store-words plaintext plaintext-start r0 r1 r2 r3)))) ) ; MACROLET (defmethod schedule-key ((cipher rc2) key) (let* ((effective-key-length (* (length key) 8)) (round-keys (rc2-schedule-key key effective-key-length))) (setf (round-keys cipher) round-keys) cipher)) (defcipher rc2 (:encrypt-function rc2-encrypt-block) (:decrypt-function rc2-decrypt-block) (:block-length 8) (:key-length (:variable 1 128 1))) ironclad-0.57/src/ciphers/rc5.lisp000066400000000000000000000115571420372057600170650ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; rc5.lisp -- implementation of the RC5 encryption algorithm from RFC 2040 (in-package :ironclad) ;;; RC5 is technically a parameterized cipher admitting a variable ;;; number of rounds. This implementation expose a method of selecting ;;; the number of rounds to be used (`n-rounds' &key parameter in ;;; CREATE-RC5-CONTEXT), but none of the upper-level machinery actually ;;; uses this parameter. In a small overhaul of the MAKE-CIPHER ;;; functionality in Ironclad, it would be nice to change this state of ;;; affairs. 12 was the number of rounds suggested initially, but RC5 ;;; with 12 rounds is susceptible to a differential plaintext attack. ;;; OpenSSL supports 12 or 16 as the number of rounds (with no error ;;; checking, natch). ;;; ;;; See also the TODO file. (defconstant +rc5/32-p+ #xb7e15163) (defconstant +rc5/32-q+ #x9e3779b9) (defconstant +rc5-w+ 32) (defconstant +rc5-ww+ 4) (defconstant +rc5-b+ 64) (defconstant +rc5-bb+ 8) (deftype rc5-n-rounds () '(mod 256)) (deftype rc5-round-keys () '(simple-array (unsigned-byte 32) (*))) (defclass rc5 (cipher 8-byte-block-mixin) ((n-rounds :reader n-rounds :initarg :n-rounds :type rc5-n-rounds) (round-keys :accessor round-keys :type (simple-array (unsigned-byte 32) (*)))) (:default-initargs :n-rounds 12)) (define-block-encryptor rc5 8 (let ((n-rounds (n-rounds context)) (round-keys (round-keys context))) (declare (type rc5-n-rounds n-rounds)) (declare (type rc5-round-keys round-keys)) (with-words ((a b) plaintext plaintext-start :big-endian nil) (setf a (mod32+ a (aref round-keys 0)) b (mod32+ b (aref round-keys 1))) (do ((i 1 (1+ i))) ((> i n-rounds) (store-words ciphertext ciphertext-start a b)) (setf a (logxor a b)) (setf a (mod32+ (rol32 a (mod b 32)) (aref round-keys (* i 2)))) (setf b (logxor b a)) (setf b (mod32+ (rol32 b (mod a 32)) (aref round-keys (1+ (* i 2))))))))) (define-block-decryptor rc5 8 (let ((n-rounds (n-rounds context)) (round-keys (round-keys context))) (declare (type rc5-n-rounds n-rounds)) (declare (type rc5-round-keys round-keys)) (with-words ((a b) ciphertext ciphertext-start :big-endian nil) (do ((i n-rounds (1- i))) ((<= i 0) (setf b (mod32- b (aref round-keys 1)) a (mod32- a (aref round-keys 0))) (store-words plaintext plaintext-start a b)) (setf b (rol32 (mod32- b (aref round-keys (1+ (* i 2)))) (mod (- 32 (mod a 32)) 32))) (setf b (logxor b a)) (setf a (rol32 (mod32- a (aref round-keys (* i 2))) (mod (- 32 (mod b 32)) 32))) (setf a (logxor a b)))))) (defun rc5-expand-key (key n-rounds) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (declare (type rc5-n-rounds n-rounds)) (let* ((n-round-keys (* 2 (1+ n-rounds))) (round-keys (make-array n-round-keys :element-type '(unsigned-byte 32))) (expanded-key (make-array 256 :element-type '(unsigned-byte 8) :initial-element 0)) (n-expanded-key-words (ceiling (length key) 4)) (l (make-array 64 :element-type '(unsigned-byte 32)))) (declare (dynamic-extent expanded-key l)) (declare (type (simple-array (unsigned-byte 8) (256)) expanded-key)) (declare (type (simple-array (unsigned-byte 32) (64)) l)) (declare (type (simple-array (unsigned-byte 32) (*)) round-keys)) ;; convert the key into a sequence of (unsigned-byte 32). this way ;; is somewhat slow and consy, but it's easily shown to be correct. (replace expanded-key key) (loop for i from 0 below 64 do (setf (aref l i) (ub32ref/le expanded-key (* i 4)))) ;; initialize the round keys (loop initially (setf (aref round-keys 0) +rc5/32-p+) for i from 1 below n-round-keys do (setf (aref round-keys i) (mod32+ (aref round-keys (1- i)) +rc5/32-q+))) ;; mix in the user's key (do ((k (* 3 (max n-expanded-key-words n-round-keys)) (1- k)) (a 0) (b 0) (i 0 (mod (1+ i) n-round-keys)) (j 0 (mod (1+ j) n-expanded-key-words))) ((<= k 0) round-keys) (declare (type (unsigned-byte 32) a b)) (setf a (rol32 (mod32+ (aref round-keys i) (mod32+ a b)) 3)) (setf (aref round-keys i) a) (setf b (let ((x (mod32+ a b))) (declare (type (unsigned-byte 32) x)) (rol32 (mod32+ (aref l j) x) (mod x 32)))) (setf (aref l j) b)))) (defmethod schedule-key ((cipher rc5) key) (let* ((n-rounds (n-rounds cipher)) (round-keys (rc5-expand-key key n-rounds))) (setf (round-keys cipher) round-keys) cipher)) (defcipher rc5 (:encrypt-function rc5-encrypt-block) (:decrypt-function rc5-decrypt-block) (:block-length 8) (:key-length (:variable 1 255 1))) ironclad-0.57/src/ciphers/rc6.lisp000066400000000000000000000154211420372057600170600ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; rc6.lisp -- implementation of the RC6 block cipher (in-package :ironclad) (defconstant +rc6/32-p+ #xb7e15163) (defconstant +rc6/32-q+ #x9e3779b9) (deftype rc6-n-rounds () '(mod 256)) (defclass rc6 (cipher 16-byte-block-mixin) ((n-rounds :reader n-rounds :initarg :n-rounds :type rc6-n-rounds) (round-keys :accessor round-keys :type (simple-array (unsigned-byte 32) (*)))) (:default-initargs :n-rounds 20)) ;;; The code generated by these functions produces lots of compiler ;;; notes under SBCL, but the resulting disassembly looks pretty good. ;;; I don't know where the notes originate from... (eval-when (:compile-toplevel :load-toplevel :execute) (defun generate-unrolled-rc6-encryption (n-rounds) (let* ((orig-vars (list 'a 'b 'c 'd)) (vars (setf (cdr (last orig-vars)) orig-vars))) (loop for i from 2 upto (* n-rounds 2) by 2 for (a b c d) on vars by #'cdr collect `(let ((v (rol32 (mod32* ,b #+(and sbcl x86) (ldb (byte 32 0) (sb-vm::%lea ,b ,b 1 1)) #-(and sbcl x86) (mod32+ (mod32ash ,b 1) 1)) 5)) (u (rol32 (mod32* ,d #+(and sbcl x86) (ldb (byte 32 0) (sb-vm::%lea ,d ,d 1 1)) #-(and sbcl x86) (mod32+ (mod32ash ,d 1) 1)) 5))) (declare (type (unsigned-byte 32) u v)) (setf ,a (mod32+ (rol32 (logxor ,a v) (mod u 32)) (aref round-keys ,i)) ,c (mod32+ (rol32 (logxor ,c u) (mod v 32)) (aref round-keys ,(1+ i))))) into forms finally (return `(let ((round-keys (round-keys context))) (declare (type (simple-array (unsigned-byte 32) (,(+ (* n-rounds 2) 4))) round-keys)) (with-words ((a b c d) plaintext plaintext-start :big-endian nil) (setf b (mod32+ b (aref round-keys 0)) d (mod32+ d (aref round-keys 1))) ,@forms (setf a (mod32+ a (aref round-keys (+ (* 2 ,n-rounds) 2))) c (mod32+ c (aref round-keys (+ (* 2 ,n-rounds) 3)))) (store-words ciphertext ciphertext-start a b c d))))))) (defun generate-unrolled-rc6-decryption (n-rounds) (let* ((orig-vars (list 'd 'a 'b 'c)) (vars (setf (cdr (last orig-vars)) orig-vars))) (loop for i from (* n-rounds 2) downto 2 by 2 for (a b c d) on vars by #'cdddr collect `(let ((u (rol32 (mod32* ,d #+(and sbcl x86) (ldb (byte 32 0) (sb-vm::%lea ,d ,d 1 1)) #-(and sbcl x86) (mod32+ (mod32ash ,d 1) 1)) 5)) (v (rol32 (mod32* ,b #+(and sbcl x86) (ldb (byte 32 0) (sb-vm::%lea ,b ,b 1 1)) #-(and sbcl x86) (mod32+ (mod32ash ,b 1) 1)) 5))) (declare (type (unsigned-byte 32) u v)) (setf ,c (logxor (ror32 (mod32- ,c (aref round-keys ,(1+ i))) (mod v 32)) u) ,a (logxor (ror32 (mod32- ,a (aref round-keys ,i)) (mod u 32)) v))) into forms finally (return `(let ((round-keys (round-keys context))) (declare (type (simple-array (unsigned-byte 32) (,(+ (* n-rounds 2) 4))) round-keys)) (with-words ((a b c d) ciphertext ciphertext-start :big-endian nil) (setf c (mod32- c (aref round-keys (+ (* 2 ,n-rounds) 3))) a (mod32- a (aref round-keys (+ (* 2 ,n-rounds) 2)))) ,@forms (setf d (mod32- d (aref round-keys 1)) b (mod32- b (aref round-keys 0))) (store-words plaintext plaintext-start a b c d))))))) ) ; EVAL-WHEN (define-block-encryptor rc6 16 #.(generate-unrolled-rc6-encryption 20)) (define-block-decryptor rc6 16 #.(generate-unrolled-rc6-decryption 20)) (defun rc6-expand-key (key n-rounds) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (declare (type rc6-n-rounds n-rounds)) (let* ((n-round-keys (* 2 (+ n-rounds 2))) (round-keys (make-array n-round-keys :element-type '(unsigned-byte 32))) (expanded-key (make-array 256 :element-type '(unsigned-byte 8) :initial-element 0)) (n-expanded-key-words (ceiling (length key) 4)) (l (make-array 64 :element-type '(unsigned-byte 32)))) (declare (dynamic-extent expanded-key l)) (declare (type (simple-array (unsigned-byte 8) (256)) expanded-key)) (declare (type (simple-array (unsigned-byte 32) (64)) l)) (declare (type (simple-array (unsigned-byte 32) (*)) round-keys)) ;; convert the key into a sequence of (unsigned-byte 32). this way ;; is somewhat slow and consy, but it's easily shown to be correct. (replace expanded-key key) (loop for i from 0 below 64 do (setf (aref l i) (ub32ref/le expanded-key (* i 4)))) ;; initialize the round keys (loop initially (setf (aref round-keys 0) +rc6/32-p+) for i from 1 below n-round-keys do (setf (aref round-keys i) (mod32+ (aref round-keys (1- i)) +rc6/32-q+))) ;; mix in the user's key (do ((k (* 3 (max n-expanded-key-words n-round-keys)) (1- k)) (a 0) (b 0) (i 0 (mod (1+ i) n-round-keys)) (j 0 (mod (1+ j) n-expanded-key-words))) ((<= k 0) round-keys) (declare (type (unsigned-byte 32) a b)) (setf a (rol32 (mod32+ (aref round-keys i) (mod32+ a b)) 3)) (setf (aref round-keys i) a) (setf b (let ((x (mod32+ a b))) (declare (type (unsigned-byte 32) x)) (rol32 (mod32+ (aref l j) x) (mod x 32)))) (setf (aref l j) b)))) (defmethod schedule-key ((cipher rc6) key) (let* ((n-rounds (n-rounds cipher)) (round-keys (rc6-expand-key key n-rounds))) (setf (round-keys cipher) round-keys) cipher)) (defcipher rc6 (:encrypt-function rc6-encrypt-block) (:decrypt-function rc6-decrypt-block) (:block-length 16) (:key-length (:variable 1 255 1))) ironclad-0.57/src/ciphers/salsa20.lisp000066400000000000000000000165411420372057600176370ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;; salsa20.lisp --implementation of the Salsa20 stream cipher (in-package :crypto) (declaim (type (simple-octet-vector 16) salsa20-sigma salsa20-tau)) (defconst salsa20-sigma #.(coerce (map 'vector #'char-code "expand 32-byte k") 'simple-octet-vector)) (defconst salsa20-tau #.(coerce (map 'vector #'char-code "expand 16-byte k") 'simple-octet-vector)) (deftype salsa20-state () '(simple-array (unsigned-byte 32) (16))) (deftype salsa20-keystream-buffer () '(simple-octet-vector 64)) (declaim (inline salsa-core)) (defun salsa-core (n-rounds buffer state) (declare (type salsa20-keystream-buffer buffer)) (declare (type salsa20-state state)) (declare (optimize speed)) #+(or (and ecl ironclad-assembly) (and sbcl x86-64 ironclad-assembly)) (x-salsa-core n-rounds buffer state) #-(or (and ecl ironclad-assembly) (and sbcl x86-64 ironclad-assembly)) (let ((x (make-array 16 :element-type '(unsigned-byte 32)))) (declare (dynamic-extent x)) (replace x state) (macrolet ((combine (x y z shift) `(logxor ,x (rol32 (mod32+ ,y ,z) ,shift))) (ref (i) `(aref x ,i)) (quarter-round (y0 y1 y2 y3) `(setf (ref ,y0) (combine (ref ,y0) (ref ,y3) (ref ,y2) 7) (ref ,y1) (combine (ref ,y1) (ref ,y0) (ref ,y3) 9) (ref ,y2) (combine (ref ,y2) (ref ,y1) (ref ,y0) 13) (ref ,y3) (combine (ref ,y3) (ref ,y2) (ref ,y1) 18)))) (dotimes (i n-rounds) (quarter-round 4 8 12 0) (quarter-round 9 13 1 5) (quarter-round 14 2 6 10) (quarter-round 3 7 11 15) (quarter-round 1 2 3 0) (quarter-round 6 7 4 5) (quarter-round 11 8 9 10) (quarter-round 12 13 14 15)) (dotimes (i 16) (setf (ub32ref/le buffer (* i 4)) (mod32+ (aref x i) (aref state i)))))) (values)) (defun salsa20/8-core (buffer state) (declare (type salsa20-keystream-buffer buffer)) (declare (type salsa20-state state)) (salsa-core 4 buffer state)) (defun salsa20/12-core (buffer state) (declare (type salsa20-keystream-buffer buffer)) (declare (type salsa20-state state)) (salsa-core 6 buffer state)) (defun salsa20/20-core (buffer state) (declare (type salsa20-keystream-buffer buffer)) (declare (type salsa20-state state)) (salsa-core 10 buffer state)) (defclass salsa20 (stream-cipher) ((state :reader salsa20-state :initform (make-array 16 :element-type '(unsigned-byte 32) :initial-element 0) :type salsa20-state) (keystream-buffer :reader salsa20-keystream-buffer :initform (make-array 64 :element-type '(unsigned-byte 8)) :type salsa20-keystream-buffer) (keystream-buffer-remaining :accessor salsa20-keystream-buffer-remaining :initform 0 :type (integer 0 64)) (core-function :reader salsa20-core-function :initarg :core-function :type function)) (:default-initargs :core-function #'salsa20/20-core)) (defclass salsa20/12 (salsa20) () (:default-initargs :core-function #'salsa20/12-core)) (defclass salsa20/8 (salsa20) () (:default-initargs :core-function #'salsa20/8-core)) (defun salsa20-keyify (cipher key) (declare (type salsa20 cipher)) (let ((state (salsa20-state cipher))) (declare (type salsa20-state state)) (multiple-value-bind (constants offset) (if (= (length key) 16) (values salsa20-tau 0) (values salsa20-sigma 16)) (setf (aref state 1) (ub32ref/le key 0) (aref state 2) (ub32ref/le key 4) (aref state 3) (ub32ref/le key 8) (aref state 4) (ub32ref/le key 12)) (setf (aref state 11) (ub32ref/le key (+ offset 0)) (aref state 12) (ub32ref/le key (+ offset 4)) (aref state 13) (ub32ref/le key (+ offset 8)) (aref state 14) (ub32ref/le key (+ offset 12))) (setf (aref state 0) (ub32ref/le constants 0) (aref state 5) (ub32ref/le constants 4) (aref state 10) (ub32ref/le constants 8) (aref state 15) (ub32ref/le constants 12)) (values)))) (defmethod shared-initialize :after ((cipher salsa20) slot-names &rest initargs &key (key nil key-p) (initialization-vector nil iv-p) &allow-other-keys) (declare (ignore initargs key key-p iv-p)) (setf (salsa20-keystream-buffer-remaining cipher) 0) (when initialization-vector (when (< (length initialization-vector) 8) (error 'invalid-initialization-vector :cipher (class-name (class-of cipher)) :block-length 8)) (let ((state (salsa20-state cipher))) (declare (type salsa20-state state)) (setf (aref state 6) (ub32ref/le initialization-vector 0) (aref state 7) (ub32ref/le initialization-vector 4) (aref state 8) 0 (aref state 9) 0))) cipher) (defmethod schedule-key ((cipher salsa20) key) (salsa20-keyify cipher key) cipher) (define-stream-cryptor salsa20 (let ((state (salsa20-state context)) (keystream-buffer (salsa20-keystream-buffer context)) (keystream-buffer-remaining (salsa20-keystream-buffer-remaining context)) (core-function (salsa20-core-function context))) (declare (type salsa20-state state) (type salsa20-keystream-buffer keystream-buffer) (type (integer 0 64) keystream-buffer-remaining) (type function core-function)) (unless (zerop length) (unless (zerop keystream-buffer-remaining) (let ((size (min length keystream-buffer-remaining))) (declare (type (integer 0 64) size)) (xor-block size keystream-buffer (- 64 keystream-buffer-remaining) plaintext plaintext-start ciphertext ciphertext-start) (decf keystream-buffer-remaining size) (decf length size) (incf ciphertext-start size) (incf plaintext-start size))) (unless (zerop length) (loop (funcall core-function keystream-buffer state) (when (zerop (setf (aref state 8) (mod32+ (aref state 8) 1))) (setf (aref state 9) (mod32+ (aref state 9) 1))) (when (<= length 64) (xor-block length keystream-buffer 0 plaintext plaintext-start ciphertext ciphertext-start) (setf (salsa20-keystream-buffer-remaining context) (- 64 length)) (return-from salsa20-crypt (values))) (xor-block 64 keystream-buffer 0 plaintext plaintext-start ciphertext ciphertext-start) (decf length 64) (incf ciphertext-start 64) (incf plaintext-start 64))) (setf (salsa20-keystream-buffer-remaining context) keystream-buffer-remaining)) (values))) (defcipher salsa20 (:mode :stream) (:crypt-function salsa20-crypt) (:key-length (:fixed 16 32))) (defcipher salsa20/12 (:mode :stream) (:crypt-function salsa20-crypt) (:key-length (:fixed 16 32))) (defcipher salsa20/8 (:mode :stream) (:crypt-function salsa20-crypt) (:key-length (:fixed 16 32))) ironclad-0.57/src/ciphers/seed.lisp000066400000000000000000000570511420372057600173130ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; seed.lisp - implementation of the SEED block cipher (in-package :crypto) (defconst +seed-sbox0+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#x2989a1a8 #x05858184 #x16c6d2d4 #x13c3d3d0 #x14445054 #x1d0d111c #x2c8ca0ac #x25052124 #x1d4d515c #x03434340 #x18081018 #x1e0e121c #x11415150 #x3cccf0fc #x0acac2c8 #x23436360 #x28082028 #x04444044 #x20002020 #x1d8d919c #x20c0e0e0 #x22c2e2e0 #x08c8c0c8 #x17071314 #x2585a1a4 #x0f8f838c #x03030300 #x3b4b7378 #x3b8bb3b8 #x13031310 #x12c2d2d0 #x2ecee2ec #x30407070 #x0c8c808c #x3f0f333c #x2888a0a8 #x32023230 #x1dcdd1dc #x36c6f2f4 #x34447074 #x2ccce0ec #x15859194 #x0b0b0308 #x17475354 #x1c4c505c #x1b4b5358 #x3d8db1bc #x01010100 #x24042024 #x1c0c101c #x33437370 #x18889098 #x10001010 #x0cccc0cc #x32c2f2f0 #x19c9d1d8 #x2c0c202c #x27c7e3e4 #x32427270 #x03838380 #x1b8b9398 #x11c1d1d0 #x06868284 #x09c9c1c8 #x20406060 #x10405050 #x2383a3a0 #x2bcbe3e8 #x0d0d010c #x3686b2b4 #x1e8e929c #x0f4f434c #x3787b3b4 #x1a4a5258 #x06c6c2c4 #x38487078 #x2686a2a4 #x12021210 #x2f8fa3ac #x15c5d1d4 #x21416160 #x03c3c3c0 #x3484b0b4 #x01414140 #x12425250 #x3d4d717c #x0d8d818c #x08080008 #x1f0f131c #x19899198 #x00000000 #x19091118 #x04040004 #x13435350 #x37c7f3f4 #x21c1e1e0 #x3dcdf1fc #x36467274 #x2f0f232c #x27072324 #x3080b0b0 #x0b8b8388 #x0e0e020c #x2b8ba3a8 #x2282a2a0 #x2e4e626c #x13839390 #x0d4d414c #x29496168 #x3c4c707c #x09090108 #x0a0a0208 #x3f8fb3bc #x2fcfe3ec #x33c3f3f0 #x05c5c1c4 #x07878384 #x14041014 #x3ecef2fc #x24446064 #x1eced2dc #x2e0e222c #x0b4b4348 #x1a0a1218 #x06060204 #x21012120 #x2b4b6368 #x26466264 #x02020200 #x35c5f1f4 #x12829290 #x0a8a8288 #x0c0c000c #x3383b3b0 #x3e4e727c #x10c0d0d0 #x3a4a7278 #x07474344 #x16869294 #x25c5e1e4 #x26062224 #x00808080 #x2d8da1ac #x1fcfd3dc #x2181a1a0 #x30003030 #x37073334 #x2e8ea2ac #x36063234 #x15051114 #x22022220 #x38083038 #x34c4f0f4 #x2787a3a4 #x05454144 #x0c4c404c #x01818180 #x29c9e1e8 #x04848084 #x17879394 #x35053134 #x0bcbc3c8 #x0ecec2cc #x3c0c303c #x31417170 #x11011110 #x07c7c3c4 #x09898188 #x35457174 #x3bcbf3f8 #x1acad2d8 #x38c8f0f8 #x14849094 #x19495158 #x02828280 #x04c4c0c4 #x3fcff3fc #x09494148 #x39093138 #x27476364 #x00c0c0c0 #x0fcfc3cc #x17c7d3d4 #x3888b0b8 #x0f0f030c #x0e8e828c #x02424240 #x23032320 #x11819190 #x2c4c606c #x1bcbd3d8 #x2484a0a4 #x34043034 #x31c1f1f0 #x08484048 #x02c2c2c0 #x2f4f636c #x3d0d313c #x2d0d212c #x00404040 #x3e8eb2bc #x3e0e323c #x3c8cb0bc #x01c1c1c0 #x2a8aa2a8 #x3a8ab2b8 #x0e4e424c #x15455154 #x3b0b3338 #x1cccd0dc #x28486068 #x3f4f737c #x1c8c909c #x18c8d0d8 #x0a4a4248 #x16465254 #x37477374 #x2080a0a0 #x2dcde1ec #x06464244 #x3585b1b4 #x2b0b2328 #x25456164 #x3acaf2f8 #x23c3e3e0 #x3989b1b8 #x3181b1b0 #x1f8f939c #x1e4e525c #x39c9f1f8 #x26c6e2e4 #x3282b2b0 #x31013130 #x2acae2e8 #x2d4d616c #x1f4f535c #x24c4e0e4 #x30c0f0f0 #x0dcdc1cc #x08888088 #x16061214 #x3a0a3238 #x18485058 #x14c4d0d4 #x22426260 #x29092128 #x07070304 #x33033330 #x28c8e0e8 #x1b0b1318 #x05050104 #x39497178 #x10809090 #x2a4a6268 #x2a0a2228 #x1a8a9298))) (defconst +seed-sbox1+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#x38380830 #xe828c8e0 #x2c2d0d21 #xa42686a2 #xcc0fcfc3 #xdc1eced2 #xb03383b3 #xb83888b0 #xac2f8fa3 #x60204060 #x54154551 #xc407c7c3 #x44044440 #x6c2f4f63 #x682b4b63 #x581b4b53 #xc003c3c3 #x60224262 #x30330333 #xb43585b1 #x28290921 #xa02080a0 #xe022c2e2 #xa42787a3 #xd013c3d3 #x90118191 #x10110111 #x04060602 #x1c1c0c10 #xbc3c8cb0 #x34360632 #x480b4b43 #xec2fcfe3 #x88088880 #x6c2c4c60 #xa82888a0 #x14170713 #xc404c4c0 #x14160612 #xf434c4f0 #xc002c2c2 #x44054541 #xe021c1e1 #xd416c6d2 #x3c3f0f33 #x3c3d0d31 #x8c0e8e82 #x98188890 #x28280820 #x4c0e4e42 #xf436c6f2 #x3c3e0e32 #xa42585a1 #xf839c9f1 #x0c0d0d01 #xdc1fcfd3 #xd818c8d0 #x282b0b23 #x64264662 #x783a4a72 #x24270723 #x2c2f0f23 #xf031c1f1 #x70324272 #x40024242 #xd414c4d0 #x40014141 #xc000c0c0 #x70334373 #x64274763 #xac2c8ca0 #x880b8b83 #xf437c7f3 #xac2d8da1 #x80008080 #x1c1f0f13 #xc80acac2 #x2c2c0c20 #xa82a8aa2 #x34340430 #xd012c2d2 #x080b0b03 #xec2ecee2 #xe829c9e1 #x5c1d4d51 #x94148490 #x18180810 #xf838c8f0 #x54174753 #xac2e8ea2 #x08080800 #xc405c5c1 #x10130313 #xcc0dcdc1 #x84068682 #xb83989b1 #xfc3fcff3 #x7c3d4d71 #xc001c1c1 #x30310131 #xf435c5f1 #x880a8a82 #x682a4a62 #xb03181b1 #xd011c1d1 #x20200020 #xd417c7d3 #x00020202 #x20220222 #x04040400 #x68284860 #x70314171 #x04070703 #xd81bcbd3 #x9c1d8d91 #x98198991 #x60214161 #xbc3e8eb2 #xe426c6e2 #x58194951 #xdc1dcdd1 #x50114151 #x90108090 #xdc1cccd0 #x981a8a92 #xa02383a3 #xa82b8ba3 #xd010c0d0 #x80018181 #x0c0f0f03 #x44074743 #x181a0a12 #xe023c3e3 #xec2ccce0 #x8c0d8d81 #xbc3f8fb3 #x94168692 #x783b4b73 #x5c1c4c50 #xa02282a2 #xa02181a1 #x60234363 #x20230323 #x4c0d4d41 #xc808c8c0 #x9c1e8e92 #x9c1c8c90 #x383a0a32 #x0c0c0c00 #x2c2e0e22 #xb83a8ab2 #x6c2e4e62 #x9c1f8f93 #x581a4a52 #xf032c2f2 #x90128292 #xf033c3f3 #x48094941 #x78384870 #xcc0cccc0 #x14150511 #xf83bcbf3 #x70304070 #x74354571 #x7c3f4f73 #x34350531 #x10100010 #x00030303 #x64244460 #x6c2d4d61 #xc406c6c2 #x74344470 #xd415c5d1 #xb43484b0 #xe82acae2 #x08090901 #x74364672 #x18190911 #xfc3ecef2 #x40004040 #x10120212 #xe020c0e0 #xbc3d8db1 #x04050501 #xf83acaf2 #x00010101 #xf030c0f0 #x282a0a22 #x5c1e4e52 #xa82989a1 #x54164652 #x40034343 #x84058581 #x14140410 #x88098981 #x981b8b93 #xb03080b0 #xe425c5e1 #x48084840 #x78394971 #x94178793 #xfc3cccf0 #x1c1e0e12 #x80028282 #x20210121 #x8c0c8c80 #x181b0b13 #x5c1f4f53 #x74374773 #x54144450 #xb03282b2 #x1c1d0d11 #x24250521 #x4c0f4f43 #x00000000 #x44064642 #xec2dcde1 #x58184850 #x50124252 #xe82bcbe3 #x7c3e4e72 #xd81acad2 #xc809c9c1 #xfc3dcdf1 #x30300030 #x94158591 #x64254561 #x3c3c0c30 #xb43686b2 #xe424c4e0 #xb83b8bb3 #x7c3c4c70 #x0c0e0e02 #x50104050 #x38390931 #x24260622 #x30320232 #x84048480 #x68294961 #x90138393 #x34370733 #xe427c7e3 #x24240420 #xa42484a0 #xc80bcbc3 #x50134353 #x080a0a02 #x84078783 #xd819c9d1 #x4c0c4c40 #x80038383 #x8c0f8f83 #xcc0ecec2 #x383b0b33 #x480a4a42 #xb43787b3))) (defconst +seed-sbox2+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#xa1a82989 #x81840585 #xd2d416c6 #xd3d013c3 #x50541444 #x111c1d0d #xa0ac2c8c #x21242505 #x515c1d4d #x43400343 #x10181808 #x121c1e0e #x51501141 #xf0fc3ccc #xc2c80aca #x63602343 #x20282808 #x40440444 #x20202000 #x919c1d8d #xe0e020c0 #xe2e022c2 #xc0c808c8 #x13141707 #xa1a42585 #x838c0f8f #x03000303 #x73783b4b #xb3b83b8b #x13101303 #xd2d012c2 #xe2ec2ece #x70703040 #x808c0c8c #x333c3f0f #xa0a82888 #x32303202 #xd1dc1dcd #xf2f436c6 #x70743444 #xe0ec2ccc #x91941585 #x03080b0b #x53541747 #x505c1c4c #x53581b4b #xb1bc3d8d #x01000101 #x20242404 #x101c1c0c #x73703343 #x90981888 #x10101000 #xc0cc0ccc #xf2f032c2 #xd1d819c9 #x202c2c0c #xe3e427c7 #x72703242 #x83800383 #x93981b8b #xd1d011c1 #x82840686 #xc1c809c9 #x60602040 #x50501040 #xa3a02383 #xe3e82bcb #x010c0d0d #xb2b43686 #x929c1e8e #x434c0f4f #xb3b43787 #x52581a4a #xc2c406c6 #x70783848 #xa2a42686 #x12101202 #xa3ac2f8f #xd1d415c5 #x61602141 #xc3c003c3 #xb0b43484 #x41400141 #x52501242 #x717c3d4d #x818c0d8d #x00080808 #x131c1f0f #x91981989 #x00000000 #x11181909 #x00040404 #x53501343 #xf3f437c7 #xe1e021c1 #xf1fc3dcd #x72743646 #x232c2f0f #x23242707 #xb0b03080 #x83880b8b #x020c0e0e #xa3a82b8b #xa2a02282 #x626c2e4e #x93901383 #x414c0d4d #x61682949 #x707c3c4c #x01080909 #x02080a0a #xb3bc3f8f #xe3ec2fcf #xf3f033c3 #xc1c405c5 #x83840787 #x10141404 #xf2fc3ece #x60642444 #xd2dc1ece #x222c2e0e #x43480b4b #x12181a0a #x02040606 #x21202101 #x63682b4b #x62642646 #x02000202 #xf1f435c5 #x92901282 #x82880a8a #x000c0c0c #xb3b03383 #x727c3e4e #xd0d010c0 #x72783a4a #x43440747 #x92941686 #xe1e425c5 #x22242606 #x80800080 #xa1ac2d8d #xd3dc1fcf #xa1a02181 #x30303000 #x33343707 #xa2ac2e8e #x32343606 #x11141505 #x22202202 #x30383808 #xf0f434c4 #xa3a42787 #x41440545 #x404c0c4c #x81800181 #xe1e829c9 #x80840484 #x93941787 #x31343505 #xc3c80bcb #xc2cc0ece #x303c3c0c #x71703141 #x11101101 #xc3c407c7 #x81880989 #x71743545 #xf3f83bcb #xd2d81aca #xf0f838c8 #x90941484 #x51581949 #x82800282 #xc0c404c4 #xf3fc3fcf #x41480949 #x31383909 #x63642747 #xc0c000c0 #xc3cc0fcf #xd3d417c7 #xb0b83888 #x030c0f0f #x828c0e8e #x42400242 #x23202303 #x91901181 #x606c2c4c #xd3d81bcb #xa0a42484 #x30343404 #xf1f031c1 #x40480848 #xc2c002c2 #x636c2f4f #x313c3d0d #x212c2d0d #x40400040 #xb2bc3e8e #x323c3e0e #xb0bc3c8c #xc1c001c1 #xa2a82a8a #xb2b83a8a #x424c0e4e #x51541545 #x33383b0b #xd0dc1ccc #x60682848 #x737c3f4f #x909c1c8c #xd0d818c8 #x42480a4a #x52541646 #x73743747 #xa0a02080 #xe1ec2dcd #x42440646 #xb1b43585 #x23282b0b #x61642545 #xf2f83aca #xe3e023c3 #xb1b83989 #xb1b03181 #x939c1f8f #x525c1e4e #xf1f839c9 #xe2e426c6 #xb2b03282 #x31303101 #xe2e82aca #x616c2d4d #x535c1f4f #xe0e424c4 #xf0f030c0 #xc1cc0dcd #x80880888 #x12141606 #x32383a0a #x50581848 #xd0d414c4 #x62602242 #x21282909 #x03040707 #x33303303 #xe0e828c8 #x13181b0b #x01040505 #x71783949 #x90901080 #x62682a4a #x22282a0a #x92981a8a))) (defconst +seed-sbox3+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#x08303838 #xc8e0e828 #x0d212c2d #x86a2a426 #xcfc3cc0f #xced2dc1e #x83b3b033 #x88b0b838 #x8fa3ac2f #x40606020 #x45515415 #xc7c3c407 #x44404404 #x4f636c2f #x4b63682b #x4b53581b #xc3c3c003 #x42626022 #x03333033 #x85b1b435 #x09212829 #x80a0a020 #xc2e2e022 #x87a3a427 #xc3d3d013 #x81919011 #x01111011 #x06020406 #x0c101c1c #x8cb0bc3c #x06323436 #x4b43480b #xcfe3ec2f #x88808808 #x4c606c2c #x88a0a828 #x07131417 #xc4c0c404 #x06121416 #xc4f0f434 #xc2c2c002 #x45414405 #xc1e1e021 #xc6d2d416 #x0f333c3f #x0d313c3d #x8e828c0e #x88909818 #x08202828 #x4e424c0e #xc6f2f436 #x0e323c3e #x85a1a425 #xc9f1f839 #x0d010c0d #xcfd3dc1f #xc8d0d818 #x0b23282b #x46626426 #x4a72783a #x07232427 #x0f232c2f #xc1f1f031 #x42727032 #x42424002 #xc4d0d414 #x41414001 #xc0c0c000 #x43737033 #x47636427 #x8ca0ac2c #x8b83880b #xc7f3f437 #x8da1ac2d #x80808000 #x0f131c1f #xcac2c80a #x0c202c2c #x8aa2a82a #x04303434 #xc2d2d012 #x0b03080b #xcee2ec2e #xc9e1e829 #x4d515c1d #x84909414 #x08101818 #xc8f0f838 #x47535417 #x8ea2ac2e #x08000808 #xc5c1c405 #x03131013 #xcdc1cc0d #x86828406 #x89b1b839 #xcff3fc3f #x4d717c3d #xc1c1c001 #x01313031 #xc5f1f435 #x8a82880a #x4a62682a #x81b1b031 #xc1d1d011 #x00202020 #xc7d3d417 #x02020002 #x02222022 #x04000404 #x48606828 #x41717031 #x07030407 #xcbd3d81b #x8d919c1d #x89919819 #x41616021 #x8eb2bc3e #xc6e2e426 #x49515819 #xcdd1dc1d #x41515011 #x80909010 #xccd0dc1c #x8a92981a #x83a3a023 #x8ba3a82b #xc0d0d010 #x81818001 #x0f030c0f #x47434407 #x0a12181a #xc3e3e023 #xcce0ec2c #x8d818c0d #x8fb3bc3f #x86929416 #x4b73783b #x4c505c1c #x82a2a022 #x81a1a021 #x43636023 #x03232023 #x4d414c0d #xc8c0c808 #x8e929c1e #x8c909c1c #x0a32383a #x0c000c0c #x0e222c2e #x8ab2b83a #x4e626c2e #x8f939c1f #x4a52581a #xc2f2f032 #x82929012 #xc3f3f033 #x49414809 #x48707838 #xccc0cc0c #x05111415 #xcbf3f83b #x40707030 #x45717435 #x4f737c3f #x05313435 #x00101010 #x03030003 #x44606424 #x4d616c2d #xc6c2c406 #x44707434 #xc5d1d415 #x84b0b434 #xcae2e82a #x09010809 #x46727436 #x09111819 #xcef2fc3e #x40404000 #x02121012 #xc0e0e020 #x8db1bc3d #x05010405 #xcaf2f83a #x01010001 #xc0f0f030 #x0a22282a #x4e525c1e #x89a1a829 #x46525416 #x43434003 #x85818405 #x04101414 #x89818809 #x8b93981b #x80b0b030 #xc5e1e425 #x48404808 #x49717839 #x87939417 #xccf0fc3c #x0e121c1e #x82828002 #x01212021 #x8c808c0c #x0b13181b #x4f535c1f #x47737437 #x44505414 #x82b2b032 #x0d111c1d #x05212425 #x4f434c0f #x00000000 #x46424406 #xcde1ec2d #x48505818 #x42525012 #xcbe3e82b #x4e727c3e #xcad2d81a #xc9c1c809 #xcdf1fc3d #x00303030 #x85919415 #x45616425 #x0c303c3c #x86b2b436 #xc4e0e424 #x8bb3b83b #x4c707c3c #x0e020c0e #x40505010 #x09313839 #x06222426 #x02323032 #x84808404 #x49616829 #x83939013 #x07333437 #xc7e3e427 #x04202424 #x84a0a424 #xcbc3c80b #x43535013 #x0a02080a #x87838407 #xc9d1d819 #x4c404c0c #x83838003 #x8f838c0f #xcec2cc0e #x0b33383b #x4a42480a #x87b3b437))) (defconst +seed-kc+ (make-array 16 :element-type '(unsigned-byte 32) :initial-contents '(#x9e3779b9 #x3c6ef373 #x78dde6e6 #xf1bbcdcc #xe3779b99 #xc6ef3733 #x8dde6e67 #x1bbcdccf #x3779b99e #x6ef3733c #xdde6e678 #xbbcdccf1 #x779b99e3 #xef3733c6 #xde6e678d #xbcdccf1b))) (defmacro seed-g (x) `(logxor (aref +seed-sbox0+ (logand ,x 255)) (aref +seed-sbox1+ (logand (ash ,x -8) 255)) (aref +seed-sbox2+ (logand (ash ,x -16) 255)) (aref +seed-sbox3+ (logand (ash ,x -24) 255)))) (defmacro seed-f (r0 r1 k0 k1) `(let* ((a (logxor ,r0 ,k0)) (b (seed-g (logxor a ,r1 ,k1))) (c (seed-g (mod32+ b a)))) (declare (type (unsigned-byte 32) a b c)) (setf ,r1 (seed-g (mod32+ c b)) ,r0 (mod32+ ,r1 c)))) (defclass seed (cipher 16-byte-block-mixin) ((round-keys :accessor round-keys :type (simple-array (unsigned-byte 32) (32))))) (defmethod schedule-key ((cipher seed) key) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (let ((round-keys (make-array 32 :element-type '(unsigned-byte 32))) (k0 (ub32ref/be key 0)) (k1 (ub32ref/be key 4)) (k2 (ub32ref/be key 8)) (k3 (ub32ref/be key 12))) (dotimes (i 16) (setf (aref round-keys (* 2 i)) (seed-g (mod32- (mod32+ k0 k2) (aref +seed-kc+ i))) (aref round-keys (+ (* 2 i) 1)) (seed-g (mod32+ (mod32- k1 k3) (aref +seed-kc+ i)))) (if (evenp i) (let ((n (mod32ash k0 24))) (setf k0 (logior (mod32ash k0 -8) (mod32ash k1 24)) k1 (logior (mod32ash k1 -8) n))) (let ((n (mod32ash k2 -24))) (setf k2 (logior (mod32ash k2 8) (mod32ash k3 -24)) k3 (logior (mod32ash k3 8) n))))) (setf (round-keys cipher) round-keys) cipher)) (define-block-encryptor seed 16 (let ((round-keys (round-keys context)) (t0 0) (t1 0)) (declare (type (simple-array (unsigned-byte 32) (32)) round-keys) (type (unsigned-byte 32) t0 t1)) (with-words ((l0 l1 r0 r1) plaintext plaintext-start :size 4) (dotimes-unrolled (i 15) (setf t0 r0 t1 r1) (seed-f r0 r1 (aref round-keys (* 2 i)) (aref round-keys (+ (* 2 i) 1))) (setf r0 (logxor r0 l0) r1 (logxor r1 l1) l0 t0 l1 t1)) (setf t0 r0 t1 r1) (seed-f t0 t1 (aref round-keys 30) (aref round-keys 31)) (setf l0 (logxor l0 t0) l1 (logxor l1 t1)) (store-words ciphertext ciphertext-start l0 l1 r0 r1)))) (define-block-decryptor seed 16 (let ((round-keys (round-keys context)) (t0 0) (t1 0)) (declare (type (simple-array (unsigned-byte 32) (32)) round-keys) (type (unsigned-byte 32) t0 t1)) (with-words ((l0 l1 r0 r1) ciphertext ciphertext-start :size 4) (dotimes-unrolled (i 15) (setf t0 r0 t1 r1) (seed-f r0 r1 (aref round-keys (- 30 (* 2 i))) (aref round-keys (- 31 (* 2 i)))) (setf r0 (logxor r0 l0) r1 (logxor r1 l1) l0 t0 l1 t1)) (setf t0 r0 t1 r1) (seed-f t0 t1 (aref round-keys 0) (aref round-keys 1)) (setf l0 (logxor l0 t0) l1 (logxor l1 t1)) (store-words plaintext plaintext-start l0 l1 r0 r1)))) (defcipher seed (:encrypt-function seed-encrypt-block) (:decrypt-function seed-decrypt-block) (:block-length 16) (:key-length (:fixed 16))) ironclad-0.57/src/ciphers/serpent.lisp000066400000000000000000000515471420372057600200570ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; serpent.lisp -- implementation of the Serpent block cipher (in-package :crypto) ;;; S-Boxes (defmacro serpent-sbox0 (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,r3 (logxor ,r3 ,r0) ,t0 ,r1 ,r1 (logand ,r1 ,r3) ,t0 (logxor ,t0 ,r2) ,r1 (logxor ,r1 ,r0) ,r0 (logior ,r0 ,r3) ,r0 (logxor ,r0 ,t0) ,t0 (logxor ,t0 ,r3) ,r3 (logxor ,r3 ,r2) ,r2 (logior ,r2 ,r1) ,r2 (logxor ,r2 ,t0) ,t0 (mod32lognot ,t0) ,t0 (logior ,t0 ,r1) ,r1 (logxor ,r1 ,r3) ,r1 (logxor ,r1 ,t0) ,r3 (logior ,r3 ,r0) ,r1 (logxor ,r1 ,r3) ,t0 (logxor ,t0 ,r3) ,o0 ,r1 ,o1 ,t0 ,o2 ,r2 ,o3 ,r0)) (defmacro serpent-sbox0-inverse (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,r2 (mod32lognot ,r2) ,t0 ,r1 ,r1 (logior ,r1 ,r0) ,t0 (mod32lognot ,t0) ,r1 (logxor ,r1 ,r2) ,r2 (logior ,r2 ,t0) ,r1 (logxor ,r1 ,r3) ,r0 (logxor ,r0 ,t0) ,r2 (logxor ,r2 ,r0) ,r0 (logand ,r0 ,r3) ,t0 (logxor ,t0 ,r0) ,r0 (logior ,r0 ,r1) ,r0 (logxor ,r0 ,r2) ,r3 (logxor ,r3 ,t0) ,r2 (logxor ,r2 ,r1) ,r3 (logxor ,r3 ,r0) ,r3 (logxor ,r3 ,r1) ,r2 (logand ,r2 ,r3) ,t0 (logxor ,t0 ,r2) ,o0 ,r0 ,o1 ,t0 ,o2 ,r1 ,o3 ,r3)) (defmacro serpent-sbox1 (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,r0 (mod32lognot ,r0) ,r2 (mod32lognot ,r2) ,t0 ,r0 ,r0 (logand ,r0 ,r1) ,r2 (logxor ,r0 ,r2) ,r0 (logior ,r0 ,r3) ,r3 (logxor ,r3 ,r2) ,r1 (logxor ,r1 ,r0) ,r0 (logxor ,r0 ,t0) ,t0 (logior ,t0 ,r1) ,r1 (logxor ,r1 ,r3) ,r2 (logior ,r2 ,r0) ,r2 (logand ,r2 ,t0) ,r0 (logxor ,r0 ,r1) ,r1 (logand ,r1 ,r2) ,r1 (logxor ,r1 ,r0) ,r0 (logand ,r0 ,r2) ,r0 (logxor ,r0 ,t0) ,o0 ,r2 ,o1 ,r0 ,o2 ,r3 ,o3 ,r1)) (defmacro serpent-sbox1-inverse (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,t0 ,r1 ,r1 (logxor ,r1 ,r3) ,r3 (logand ,r3 ,r1) ,t0 (logxor ,t0 ,r2) ,r3 (logxor ,r3 ,r0) ,r0 (logior ,r0 ,r1) ,r2 (logxor ,r2 ,r3) ,r0 (logxor ,r0 ,t0) ,r0 (logior ,r0 ,r2) ,r1 (logxor ,r1 ,r3) ,r0 (logxor ,r0 ,r1) ,r1 (logior ,r1 ,r3) ,r1 (logxor ,r1 ,r0) ,t0 (mod32lognot ,t0) ,t0 (logxor ,t0 ,r1) ,r1 (logior ,r1 ,r0) ,r1 (logxor ,r1 ,r0) ,r1 (logior ,r1 ,t0) ,r3 (logxor ,r3 ,r1) ,o0 ,t0 ,o1 ,r0 ,o2 ,r3 ,o3 ,r2)) (defmacro serpent-sbox2 (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,t0 ,r0 ,r0 (logand ,r0 ,r2) ,r0 (logxor ,r0 ,r3) ,r2 (logxor ,r2 ,r1) ,r2 (logxor ,r2 ,r0) ,r3 (logior ,r3 ,t0) ,r3 (logxor ,r3 ,r1) ,t0 (logxor ,t0 ,r2) ,r1 ,r3 ,r3 (logior ,r3 ,t0) ,r3 (logxor ,r3 ,r0) ,r0 (logand ,r0 ,r1) ,t0 (logxor ,t0 ,r0) ,r1 (logxor ,r1 ,r3) ,r1 (logxor ,r1 ,t0) ,t0 (mod32lognot ,t0) ,o0 ,r2 ,o1 ,r3 ,o2 ,r1 ,o3 ,t0)) (defmacro serpent-sbox2-inverse (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,r2 (logxor ,r2 ,r3) ,r3 (logxor ,r3 ,r0) ,t0 ,r3 ,r3 (logand ,r3 ,r2) ,r3 (logxor ,r3 ,r1) ,r1 (logior ,r1 ,r2) ,r1 (logxor ,r1 ,t0) ,t0 (logand ,t0 ,r3) ,r2 (logxor ,r2 ,r3) ,t0 (logand ,t0 ,r0) ,t0 (logxor ,t0 ,r2) ,r2 (logand ,r2 ,r1) ,r2 (logior ,r2 ,r0) ,r3 (mod32lognot ,r3) ,r2 (logxor ,r2 ,r3) ,r0 (logxor ,r0 ,r3) ,r0 (logand ,r0 ,r1) ,r3 (logxor ,r3 ,t0) ,r3 (logxor ,r3 ,r0) ,o0 ,r1 ,o1 ,t0 ,o2 ,r2 ,o3 ,r3)) (defmacro serpent-sbox3 (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,t0 ,r0 ,r0 (logior ,r0 ,r3) ,r3 (logxor ,r3 ,r1) ,r1 (logand ,r1 ,t0) ,t0 (logxor ,t0 ,r2) ,r2 (logxor ,r2 ,r3) ,r3 (logand ,r3 ,r0) ,t0 (logior ,t0 ,r1) ,r3 (logxor ,r3 ,t0) ,r0 (logxor ,r0 ,r1) ,t0 (logand ,t0 ,r0) ,r1 (logxor ,r1 ,r3) ,t0 (logxor ,t0 ,r2) ,r1 (logior ,r1 ,r0) ,r1 (logxor ,r1 ,r2) ,r0 (logxor ,r0 ,r3) ,r2 ,r1 ,r1 (logior ,r1 ,r3) ,r1 (logxor ,r1 ,r0) ,o0 ,r1 ,o1 ,r2 ,o2 ,r3 ,o3 ,t0)) (defmacro serpent-sbox3-inverse (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,t0 ,r2 ,r2 (logxor ,r2 ,r1) ,r0 (logxor ,r0 ,r2) ,t0 (logand ,t0 ,r2) ,t0 (logxor ,t0 ,r0) ,r0 (logand ,r0 ,r1) ,r1 (logxor ,r1 ,r3) ,r3 (logior ,r3 ,t0) ,r2 (logxor ,r2 ,r3) ,r0 (logxor ,r0 ,r3) ,r1 (logxor ,r1 ,t0) ,r3 (logand ,r3 ,r2) ,r3 (logxor ,r3 ,r1) ,r1 (logxor ,r1 ,r0) ,r1 (logior ,r1 ,r2) ,r0 (logxor ,r0 ,r3) ,r1 (logxor ,r1 ,t0) ,r0 (logxor ,r0 ,r1) ,o0 ,r2 ,o1 ,r1 ,o2 ,r3 ,o3 ,r0)) (defmacro serpent-sbox4 (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,r1 (logxor ,r1 ,r3) ,r3 (mod32lognot ,r3) ,r2 (logxor ,r2 ,r3) ,r3 (logxor ,r3 ,r0) ,t0 ,r1 ,r1 (logand ,r1 ,r3) ,r1 (logxor ,r1 ,r2) ,t0 (logxor ,t0 ,r3) ,r0 (logxor ,r0 ,t0) ,r2 (logand ,r2 ,t0) ,r2 (logxor ,r2 ,r0) ,r0 (logand ,r0 ,r1) ,r3 (logxor ,r3 ,r0) ,t0 (logior ,t0 ,r1) ,t0 (logxor ,t0 ,r0) ,r0 (logior ,r0 ,r3) ,r0 (logxor ,r0 ,r2) ,r2 (logand ,r2 ,r3) ,r0 (mod32lognot ,r0) ,t0 (logxor ,t0 ,r2) ,o0 ,r1 ,o1 ,t0 ,o2 ,r0 ,o3 ,r3)) (defmacro serpent-sbox4-inverse (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,t0 ,r2 ,r2 (logand ,r2 ,r3) ,r2 (logxor ,r2 ,r1) ,r1 (logior ,r1 ,r3) ,r1 (logand ,r1 ,r0) ,t0 (logxor ,t0 ,r2) ,t0 (logxor ,t0 ,r1) ,r1 (logand ,r1 ,r2) ,r0 (mod32lognot ,r0) ,r3 (logxor ,r3 ,t0) ,r1 (logxor ,r1 ,r3) ,r3 (logand ,r3 ,r0) ,r3 (logxor ,r3 ,r2) ,r0 (logxor ,r0 ,r1) ,r2 (logand ,r2 ,r0) ,r3 (logxor ,r3 ,r0) ,r2 (logxor ,r2 ,t0) ,r2 (logior ,r2 ,r3) ,r3 (logxor ,r3 ,r0) ,r2 (logxor ,r2 ,r1) ,o0 ,r0 ,o1 ,r3 ,o2 ,r2 ,o3 ,t0)) (defmacro serpent-sbox5 (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,r0 (logxor ,r0 ,r1) ,r1 (logxor ,r1 ,r3) ,r3 (mod32lognot ,r3) ,t0 ,r1 ,r1 (logand ,r1 ,r0) ,r2 (logxor ,r2 ,r3) ,r1 (logxor ,r1 ,r2) ,r2 (logior ,r2 ,t0) ,t0 (logxor ,t0 ,r3) ,r3 (logand ,r3 ,r1) ,r3 (logxor ,r3 ,r0) ,t0 (logxor ,t0 ,r1) ,t0 (logxor ,t0 ,r2) ,r2 (logxor ,r2 ,r0) ,r0 (logand ,r0 ,r3) ,r2 (mod32lognot ,r2) ,r0 (logxor ,r0 ,t0) ,t0 (logior ,t0 ,r3) ,r2 (logxor ,r2 ,t0) ,o0 ,r1 ,o1 ,r3 ,o2 ,r0 ,o3 ,r2)) (defmacro serpent-sbox5-inverse (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,r1 (mod32lognot ,r1) ,t0 ,r3 ,r2 (logxor ,r2 ,r1) ,r3 (logior ,r3 ,r0) ,r3 (logxor ,r3 ,r2) ,r2 (logior ,r2 ,r1) ,r2 (logand ,r2 ,r0) ,t0 (logxor ,t0 ,r3) ,r2 (logxor ,r2 ,t0) ,t0 (logior ,t0 ,r0) ,t0 (logxor ,t0 ,r1) ,r1 (logand ,r1 ,r2) ,r1 (logxor ,r1 ,r3) ,t0 (logxor ,t0 ,r2) ,r3 (logand ,r3 ,t0) ,t0 (logxor ,t0 ,r1) ,r3 (logxor ,r3 ,t0) ,t0 (mod32lognot ,t0) ,r3 (logxor ,r3 ,r0) ,o0 ,r1 ,o1 ,t0 ,o2 ,r3 ,o3 ,r2)) (defmacro serpent-sbox6 (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,r2 (mod32lognot ,r2) ,t0 ,r3 ,r3 (logand ,r3 ,r0) ,r0 (logxor ,r0 ,t0) ,r3 (logxor ,r3 ,r2) ,r2 (logior ,r2 ,t0) ,r1 (logxor ,r1 ,r3) ,r2 (logxor ,r2 ,r0) ,r0 (logior ,r0 ,r1) ,r2 (logxor ,r2 ,r1) ,t0 (logxor ,t0 ,r0) ,r0 (logior ,r0 ,r3) ,r0 (logxor ,r0 ,r2) ,t0 (logxor ,t0 ,r3) ,t0 (logxor ,t0 ,r0) ,r3 (mod32lognot ,r3) ,r2 (logand ,r2 ,t0) ,r2 (logxor ,r2 ,r3) ,o0 ,r0 ,o1 ,r1 ,o2 ,t0 ,o3 ,r2)) (defmacro serpent-sbox6-inverse (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,r0 (logxor ,r0 ,r2) ,t0 ,r2 ,r2 (logand ,r2 ,r0) ,t0 (logxor ,t0 ,r3) ,r2 (mod32lognot ,r2) ,r3 (logxor ,r3 ,r1) ,r2 (logxor ,r2 ,r3) ,t0 (logior ,t0 ,r0) ,r0 (logxor ,r0 ,r2) ,r3 (logxor ,r3 ,t0) ,t0 (logxor ,t0 ,r1) ,r1 (logand ,r1 ,r3) ,r1 (logxor ,r1 ,r0) ,r0 (logxor ,r0 ,r3) ,r0 (logior ,r0 ,r2) ,r3 (logxor ,r3 ,r1) ,t0 (logxor ,t0 ,r0) ,o0 ,r1 ,o1 ,r2 ,o2 ,t0 ,o3 ,r3)) (defmacro serpent-sbox7 (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,t0 ,r1 ,r1 (logior ,r1 ,r2) ,r1 (logxor ,r1 ,r3) ,t0 (logxor ,t0 ,r2) ,r2 (logxor ,r2 ,r1) ,r3 (logior ,r3 ,t0) ,r3 (logand ,r3 ,r0) ,t0 (logxor ,t0 ,r2) ,r3 (logxor ,r3 ,r1) ,r1 (logior ,r1 ,t0) ,r1 (logxor ,r1 ,r0) ,r0 (logior ,r0 ,t0) ,r0 (logxor ,r0 ,r2) ,r1 (logxor ,r1 ,t0) ,r2 (logxor ,r2 ,r1) ,r1 (logand ,r1 ,r0) ,r1 (logxor ,r1 ,t0) ,r2 (mod32lognot ,r2) ,r2 (logior ,r2 ,r0) ,t0 (logxor ,t0 ,r2) ,o0 ,t0 ,o1 ,r3 ,o2 ,r1 ,o3 ,r0)) (defmacro serpent-sbox7-inverse (r0 r1 r2 r3 o0 o1 o2 o3 t0) `(setf ,t0 ,r2 ,r2 (logxor ,r2 ,r0) ,r0 (logand ,r0 ,r3) ,t0 (logior ,t0 ,r3) ,r2 (mod32lognot ,r2) ,r3 (logxor ,r3 ,r1) ,r1 (logior ,r1 ,r0) ,r0 (logxor ,r0 ,r2) ,r2 (logand ,r2 ,t0) ,r3 (logand ,r3 ,t0) ,r1 (logxor ,r1 ,r2) ,r2 (logxor ,r2 ,r0) ,r0 (logior ,r0 ,r2) ,t0 (logxor ,t0 ,r1) ,r0 (logxor ,r0 ,r3) ,r3 (logxor ,r3 ,t0) ,t0 (logior ,t0 ,r0) ,r3 (logxor ,r3 ,r2) ,t0 (logxor ,t0 ,r2) ,o0 ,r3 ,o1 ,r0 ,o2 ,r1 ,o3 ,t0)) ;;; Linear transformation (defmacro serpent-linear-transformation (r0 r1 r2 r3) `(setf ,r0 (rol32 ,r0 13) ,r2 (rol32 ,r2 3) ,r1 (logxor ,r1 ,r0 ,r2) ,r3 (logxor ,r3 ,r2 (mod32ash ,r0 3)) ,r1 (rol32 ,r1 1) ,r3 (rol32 ,r3 7) ,r0 (logxor ,r0 ,r1 ,r3) ,r2 (logxor ,r2 ,r3 (mod32ash ,r1 7)) ,r0 (rol32 ,r0 5) ,r2 (rol32 ,r2 22))) (defmacro serpent-linear-transformation-inverse (r0 r1 r2 r3) `(setf ,r2 (rol32 ,r2 10) ,r0 (rol32 ,r0 27) ,r2 (logxor ,r2 ,r3 (mod32ash ,r1 7)) ,r0 (logxor ,r0 ,r1 ,r3) ,r3 (rol32 ,r3 25) ,r1 (rol32 ,r1 31) ,r3 (logxor ,r3 ,r2 (mod32ash ,r0 3)) ,r1 (logxor ,r1 ,r0 ,r2) ,r2 (rol32 ,r2 29) ,r0 (rol32 ,r0 19))) ;;; Key schedule (defconstant +serpent-phi+ #x9e3779b9) (defclass serpent (cipher 16-byte-block-mixin) ((subkeys :accessor serpent-subkeys :type (simple-array (unsigned-byte 32) (33 4))))) (defun serpent-pad-key (key) (let ((padded-key (make-array 8 :element-type '(unsigned-byte 32))) (len (floor (length key) 4))) (dotimes (i len) (setf (aref padded-key i) (ub32ref/le key (* i 4)))) (when (< len 8) (setf (aref padded-key len) 1) (loop for i from (1+ len) below 8 do (setf (aref padded-key i) 0))) padded-key)) (defun serpent-generate-subkeys (key) (declare (type (simple-array (unsigned-byte 32) (8)) key) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((subkeys (make-array '(33 4) :element-type '(unsigned-byte 32))) (w (copy-seq key)) (ws (make-array 4 :element-type '(unsigned-byte 32))) (wt (make-array 4 :element-type '(unsigned-byte 32))) (t0 0) (t1 0) (t2 0) (t3 0) (t4 0)) (declare (type (simple-array (unsigned-byte 32) (33 4)) subkeys) (type (simple-array (unsigned-byte 32) (8)) w) (type (simple-array (unsigned-byte 32) (4)) ws wt) (type (unsigned-byte 32) t0 t1 t2 t3 t4)) (macrolet ((expand-key4 (wo r) `(setf (aref ,wo 0) (rol32 (logxor (aref w ,(mod (+ r 0) 8)) (aref w ,(mod (+ r 3) 8)) (aref w ,(mod (+ r 5) 8)) (aref w ,(mod (+ r 7) 8)) +serpent-phi+ ,(+ r 0)) 11) (aref w ,(mod (+ r 0) 8)) (aref ,wo 0) (aref ,wo 1) (rol32 (logxor (aref w ,(mod (+ r 1) 8)) (aref w ,(mod (+ r 4) 8)) (aref w ,(mod (+ r 6) 8)) (aref w ,(mod (+ r 0) 8)) +serpent-phi+ ,(+ r 1)) 11) (aref w ,(mod (+ r 1) 8)) (aref ,wo 1) (aref ,wo 2) (rol32 (logxor (aref w ,(mod (+ r 2) 8)) (aref w ,(mod (+ r 5) 8)) (aref w ,(mod (+ r 7) 8)) (aref w ,(mod (+ r 1) 8)) +serpent-phi+ ,(+ r 2)) 11) (aref w ,(mod (+ r 2) 8)) (aref ,wo 2) (aref ,wo 3) (rol32 (logxor (aref w ,(mod (+ r 3) 8)) (aref w ,(mod (+ r 6) 8)) (aref w ,(mod (+ r 0) 8)) (aref w ,(mod (+ r 2) 8)) +serpent-phi+ ,(+ r 3)) 11) (aref w ,(mod (+ r 3) 8)) (aref ,wo 3))) (make-subkeys () (loop for i from 0 to 15 for sbox-a = (read-from-string (format nil "serpent-sbox~d" (mod (- 3 (* 2 i)) 8))) for sbox-b = (read-from-string (format nil "serpent-sbox~d" (mod (- 2 (* 2 i)) 8))) append (list `(expand-key4 ws ,(* 8 i)) `(expand-key4 wt ,(+ (* 8 i) 4)) `(setf t0 (aref ws 0) t1 (aref ws 1) t2 (aref ws 2) t3 (aref ws 3)) `(,sbox-a t0 t1 t2 t3 (aref ws 0) (aref ws 1) (aref ws 2) (aref ws 3) t4) `(setf (aref subkeys ,(* 2 i) 0) (aref ws 0) (aref subkeys ,(* 2 i) 1) (aref ws 1) (aref subkeys ,(* 2 i) 2) (aref ws 2) (aref subkeys ,(* 2 i) 3) (aref ws 3)) `(setf t0 (aref wt 0) t1 (aref wt 1) t2 (aref wt 2) t3 (aref wt 3)) `(,sbox-b t0 t1 t2 t3 (aref wt 0) (aref wt 1) (aref wt 2) (aref wt 3) t4) `(setf (aref subkeys ,(1+ (* 2 i)) 0) (aref wt 0) (aref subkeys ,(1+ (* 2 i)) 1) (aref wt 1) (aref subkeys ,(1+ (* 2 i)) 2) (aref wt 2) (aref subkeys ,(1+ (* 2 i)) 3) (aref wt 3))) into forms finally (return `(progn ,@forms))))) (make-subkeys) (expand-key4 ws 128) (setf t0 (aref ws 0) t1 (aref ws 1) t2 (aref ws 2) t3 (aref ws 3)) (serpent-sbox3 t0 t1 t2 t3 (aref ws 0) (aref ws 1) (aref ws 2) (aref ws 3) t4) (setf (aref subkeys 32 0) (aref ws 0) (aref subkeys 32 1) (aref ws 1) (aref subkeys 32 2) (aref ws 2) (aref subkeys 32 3) (aref ws 3)) subkeys))) (defmethod schedule-key ((cipher serpent) key) (setf (serpent-subkeys cipher) (serpent-generate-subkeys (serpent-pad-key key))) cipher) ;;; Rounds (define-block-encryptor serpent 16 (let ((subkeys (serpent-subkeys context)) (t0 0) (t1 0) (t2 0) (t3 0) (t4 0)) (declare (type (simple-array (unsigned-byte 32) (33 4)) subkeys) (type (unsigned-byte 32) t0 t1 t2 t3 t4)) (with-words ((b0 b1 b2 b3) plaintext plaintext-start :big-endian nil :size 4) (macrolet ((serpent-rounds () (loop for i from 0 to 30 for sbox = (read-from-string (format nil "serpent-sbox~d" (mod i 8))) append (list `(setf t0 (logxor b0 (aref subkeys ,i 0)) t1 (logxor b1 (aref subkeys ,i 1)) t2 (logxor b2 (aref subkeys ,i 2)) t3 (logxor b3 (aref subkeys ,i 3))) `(,sbox t0 t1 t2 t3 b0 b1 b2 b3 t4) `(serpent-linear-transformation b0 b1 b2 b3)) into forms finally (return `(progn ,@forms))))) ;; Regular rounds (serpent-rounds) ;; Last round (setf b0 (logxor b0 (aref subkeys 31 0)) b1 (logxor b1 (aref subkeys 31 1)) b2 (logxor b2 (aref subkeys 31 2)) b3 (logxor b3 (aref subkeys 31 3))) (serpent-sbox7 b0 b1 b2 b3 t0 t1 t2 t3 t4) (setf b0 (logxor t0 (aref subkeys 32 0)) b1 (logxor t1 (aref subkeys 32 1)) b2 (logxor t2 (aref subkeys 32 2)) b3 (logxor t3 (aref subkeys 32 3))) (store-words ciphertext ciphertext-start b0 b1 b2 b3) (values))))) (define-block-decryptor serpent 16 (let ((subkeys (serpent-subkeys context)) (t0 0) (t1 0) (t2 0) (t3 0) (t4 0)) (declare (type (simple-array (unsigned-byte 32) (33 4)) subkeys) (type (unsigned-byte 32) t0 t1 t2 t3 t4)) (with-words ((b0 b1 b2 b3) ciphertext ciphertext-start :big-endian nil :size 4) (macrolet ((serpent-rounds-inverse () (loop for i from 30 downto 0 for sbox-inverse = (read-from-string (format nil "serpent-sbox~d-inverse" (mod i 8))) append (list `(serpent-linear-transformation-inverse b0 b1 b2 b3) `(,sbox-inverse b0 b1 b2 b3 t0 t1 t2 t3 t4) `(setf b0 (logxor t0 (aref subkeys ,i 0)) b1 (logxor t1 (aref subkeys ,i 1)) b2 (logxor t2 (aref subkeys ,i 2)) b3 (logxor t3 (aref subkeys ,i 3)))) into forms finally (return `(progn ,@forms))))) ;; First inverse round (setf b0 (logxor b0 (aref subkeys 32 0)) b1 (logxor b1 (aref subkeys 32 1)) b2 (logxor b2 (aref subkeys 32 2)) b3 (logxor b3 (aref subkeys 32 3))) (serpent-sbox7-inverse b0 b1 b2 b3 t0 t1 t2 t3 t4) (setf b0 (logxor t0 (aref subkeys 31 0)) b1 (logxor t1 (aref subkeys 31 1)) b2 (logxor t2 (aref subkeys 31 2)) b3 (logxor t3 (aref subkeys 31 3))) ;; Regular inverse rounds (serpent-rounds-inverse) (store-words plaintext plaintext-start b0 b1 b2 b3) (values))))) (defcipher serpent (:encrypt-function serpent-encrypt-block) (:decrypt-function serpent-decrypt-block) (:block-length 16) (:key-length (:fixed 16 24 32))) ironclad-0.57/src/ciphers/sm4.lisp000066400000000000000000000147121420372057600170730ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; sm4.lisp -- implementation of SM4 (GB/T 32907-2016) (in-package :crypto) (in-ironclad-readtable) ;;; ;;; Parameters ;;; (eval-when (:compile-toplevel :load-toplevel :execute) (defconst +sm4-s+ #8@(#xd6 #x90 #xe9 #xfe #xcc #xe1 #x3d #xb7 #x16 #xb6 #x14 #xc2 #x28 #xfb #x2c #x05 #x2b #x67 #x9a #x76 #x2a #xbe #x04 #xc3 #xaa #x44 #x13 #x26 #x49 #x86 #x06 #x99 #x9c #x42 #x50 #xf4 #x91 #xef #x98 #x7a #x33 #x54 #x0b #x43 #xed #xcf #xac #x62 #xe4 #xb3 #x1c #xa9 #xc9 #x08 #xe8 #x95 #x80 #xdf #x94 #xfa #x75 #x8f #x3f #xa6 #x47 #x07 #xa7 #xfc #xf3 #x73 #x17 #xba #x83 #x59 #x3c #x19 #xe6 #x85 #x4f #xa8 #x68 #x6b #x81 #xb2 #x71 #x64 #xda #x8b #xf8 #xeb #x0f #x4b #x70 #x56 #x9d #x35 #x1e #x24 #x0e #x5e #x63 #x58 #xd1 #xa2 #x25 #x22 #x7c #x3b #x01 #x21 #x78 #x87 #xd4 #x00 #x46 #x57 #x9f #xd3 #x27 #x52 #x4c #x36 #x02 #xe7 #xa0 #xc4 #xc8 #x9e #xea #xbf #x8a #xd2 #x40 #xc7 #x38 #xb5 #xa3 #xf7 #xf2 #xce #xf9 #x61 #x15 #xa1 #xe0 #xae #x5d #xa4 #x9b #x34 #x1a #x55 #xad #x93 #x32 #x30 #xf5 #x8c #xb1 #xe3 #x1d #xf6 #xe2 #x2e #x82 #x66 #xca #x60 #xc0 #x29 #x23 #xab #x0d #x53 #x4e #x6f #xd5 #xdb #x37 #x45 #xde #xfd #x8e #x2f #x03 #xff #x6a #x72 #x6d #x6c #x5b #x51 #x8d #x1b #xaf #x92 #xbb #xdd #xbc #x7f #x11 #xd9 #x5c #x41 #x1f #x10 #x5a #xd8 #x0a #xc1 #x31 #x88 #xa5 #xcd #x7b #xbd #x2d #x74 #xd0 #x12 #xb8 #xe5 #xb4 #xb0 #x89 #x69 #x97 #x4a #x0c #x96 #x77 #x7e #x65 #xb9 #xf1 #x09 #xc5 #x6e #xc6 #x84 #x18 #xf0 #x7d #xec #x3a #xdc #x4d #x20 #x79 #xee #x5f #x3e #xd7 #xcb #x39 #x48)) (defconst +sm4-ck+ #32@(#x00070e15 #x1c232a31 #x383f464d #x545b6269 #x70777e85 #x8c939aa1 #xa8afb6bd #xc4cbd2d9 #xe0e7eef5 #xfc030a11 #x181f262d #x343b4249 #x50575e65 #x6c737a81 #x888f969d #xa4abb2b9 #xc0c7ced5 #xdce3eaf1 #xf8ff060d #x141b2229 #x30373e45 #x4c535a61 #x686f767d #x848b9299 #xa0a7aeb5 #xbcc3cad1 #xd8dfe6ed #xf4fb0209 #x10171e25 #x2c333a41 #x484f565d #x646b7279))) ;;; ;;; SM4 round ;;; (defmacro sm4-h (x) `(logior (mod32ash (aref +sm4-s+ (logand (mod32ash ,x -24) #xff)) 24) (mod32ash (aref +sm4-s+ (logand (mod32ash ,x -16) #xff)) 16) (mod32ash (aref +sm4-s+ (logand (mod32ash ,x -8) #xff)) 8) (aref +sm4-s+ (logand ,x #xff)))) (defmacro sm4-g (x) (let ((y (gensym))) `(let ((,y (sm4-h ,x))) (declare (type (unsigned-byte 32) ,y)) (logxor ,y (rol32 ,y 13) (rol32 ,y 23))))) (defmacro sm4-f (x) (let ((y (gensym))) `(let ((,y (sm4-h ,x))) (declare (type (unsigned-byte 32) ,y)) (logxor ,y (rol32 ,y 2) (rol32 ,y 10) (rol32 ,y 18) (rol32 ,y 24))))) (defmacro sm4-round (w0 w1 w2 w3 round-keys r encrypt-p) `(setf ,w0 (logxor ,w0 (sm4-f (logxor ,w1 ,w2 ,w3 (aref ,round-keys ,r)))) ,w1 (logxor ,w1 (sm4-f (logxor ,w0 ,w2 ,w3 (aref ,round-keys ,(if encrypt-p (+ r 1) (- r 1)))))) ,w2 (logxor ,w2 (sm4-f (logxor ,w0 ,w1 ,w3 (aref ,round-keys ,(if encrypt-p (+ r 2) (- r 2)))))) ,w3 (logxor ,w3 (sm4-f (logxor ,w0 ,w1 ,w2 (aref ,round-keys ,(if encrypt-p (+ r 3) (- r 3)))))))) ;;; ;;; Key schedule ;;; (defclass sm4 (cipher 16-byte-block-mixin) ((round-keys :accessor sm4-round-keys :initform (make-array 32 :element-type '(unsigned-byte 32)) :type (simple-array (unsigned-byte 32) (32))))) (defmethod schedule-key ((cipher sm4) key) (let ((round-keys (sm4-round-keys cipher)) (k0 (logxor (ub32ref/be key 0) #xa3b1bac6)) (k1 (logxor (ub32ref/be key 4) #x56aa3350)) (k2 (logxor (ub32ref/be key 8) #x677d9197)) (k3 (logxor (ub32ref/be key 12) #xb27022dc))) (declare (type (simple-array (unsigned-byte 32) (32)) round-keys) (type (unsigned-byte 32) k0 k1 k2 k3)) (dotimes (i 8) (setf k0 (logxor k0 (sm4-g (logxor k1 k2 k3 (aref +sm4-ck+ (* 4 i))))) (aref round-keys (* 4 i)) k0 k1 (logxor k1 (sm4-g (logxor k2 k3 k0 (aref +sm4-ck+ (+ (* 4 i) 1))))) (aref round-keys (+ (* 4 i) 1)) k1 k2 (logxor k2 (sm4-g (logxor k3 k0 k1 (aref +sm4-ck+ (+ (* 4 i) 2))))) (aref round-keys (+ (* 4 i) 2)) k2 k3 (logxor k3 (sm4-g (logxor k0 k1 k2 (aref +sm4-ck+ (+ (* 4 i) 3))))) (aref round-keys (+ (* 4 i) 3)) k3)) cipher)) ;;; ;;; Rounds ;;; (define-block-encryptor sm4 16 (let ((round-keys (sm4-round-keys context))) (declare (type (simple-array (unsigned-byte 32) (32)) round-keys)) (with-words ((w0 w1 w2 w3) plaintext plaintext-start :size 4) (sm4-round w0 w1 w2 w3 round-keys 0 t) (sm4-round w0 w1 w2 w3 round-keys 4 t) (sm4-round w0 w1 w2 w3 round-keys 8 t) (sm4-round w0 w1 w2 w3 round-keys 12 t) (sm4-round w0 w1 w2 w3 round-keys 16 t) (sm4-round w0 w1 w2 w3 round-keys 20 t) (sm4-round w0 w1 w2 w3 round-keys 24 t) (sm4-round w0 w1 w2 w3 round-keys 28 t) (store-words ciphertext ciphertext-start w3 w2 w1 w0))) (values)) (define-block-decryptor sm4 16 (let ((round-keys (sm4-round-keys context))) (declare (type (simple-array (unsigned-byte 32) (32)) round-keys)) (with-words ((w0 w1 w2 w3) ciphertext ciphertext-start :size 4) (sm4-round w0 w1 w2 w3 round-keys 31 nil) (sm4-round w0 w1 w2 w3 round-keys 27 nil) (sm4-round w0 w1 w2 w3 round-keys 23 nil) (sm4-round w0 w1 w2 w3 round-keys 19 nil) (sm4-round w0 w1 w2 w3 round-keys 15 nil) (sm4-round w0 w1 w2 w3 round-keys 11 nil) (sm4-round w0 w1 w2 w3 round-keys 7 nil) (sm4-round w0 w1 w2 w3 round-keys 3 nil) (store-words plaintext plaintext-start w3 w2 w1 w0))) (values)) (defcipher sm4 (:encrypt-function sm4-encrypt-block) (:decrypt-function sm4-decrypt-block) (:block-length 16) (:key-length (:fixed 16))) ironclad-0.57/src/ciphers/sosemanuk.lisp000066400000000000000000000721121420372057600203730ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; sosemanuk.lisp - implementation of the Sosemanuk stream cipher (in-package :crypto) (defconst +sosemanuk-mul-a+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#x00000000 #xE19FCF13 #x6B973726 #x8A08F835 #xD6876E4C #x3718A15F #xBD10596A #x5C8F9679 #x05A7DC98 #xE438138B #x6E30EBBE #x8FAF24AD #xD320B2D4 #x32BF7DC7 #xB8B785F2 #x59284AE1 #x0AE71199 #xEB78DE8A #x617026BF #x80EFE9AC #xDC607FD5 #x3DFFB0C6 #xB7F748F3 #x566887E0 #x0F40CD01 #xEEDF0212 #x64D7FA27 #x85483534 #xD9C7A34D #x38586C5E #xB250946B #x53CF5B78 #x1467229B #xF5F8ED88 #x7FF015BD #x9E6FDAAE #xC2E04CD7 #x237F83C4 #xA9777BF1 #x48E8B4E2 #x11C0FE03 #xF05F3110 #x7A57C925 #x9BC80636 #xC747904F #x26D85F5C #xACD0A769 #x4D4F687A #x1E803302 #xFF1FFC11 #x75170424 #x9488CB37 #xC8075D4E #x2998925D #xA3906A68 #x420FA57B #x1B27EF9A #xFAB82089 #x70B0D8BC #x912F17AF #xCDA081D6 #x2C3F4EC5 #xA637B6F0 #x47A879E3 #x28CE449F #xC9518B8C #x435973B9 #xA2C6BCAA #xFE492AD3 #x1FD6E5C0 #x95DE1DF5 #x7441D2E6 #x2D699807 #xCCF65714 #x46FEAF21 #xA7616032 #xFBEEF64B #x1A713958 #x9079C16D #x71E60E7E #x22295506 #xC3B69A15 #x49BE6220 #xA821AD33 #xF4AE3B4A #x1531F459 #x9F390C6C #x7EA6C37F #x278E899E #xC611468D #x4C19BEB8 #xAD8671AB #xF109E7D2 #x109628C1 #x9A9ED0F4 #x7B011FE7 #x3CA96604 #xDD36A917 #x573E5122 #xB6A19E31 #xEA2E0848 #x0BB1C75B #x81B93F6E #x6026F07D #x390EBA9C #xD891758F #x52998DBA #xB30642A9 #xEF89D4D0 #x0E161BC3 #x841EE3F6 #x65812CE5 #x364E779D #xD7D1B88E #x5DD940BB #xBC468FA8 #xE0C919D1 #x0156D6C2 #x8B5E2EF7 #x6AC1E1E4 #x33E9AB05 #xD2766416 #x587E9C23 #xB9E15330 #xE56EC549 #x04F10A5A #x8EF9F26F #x6F663D7C #x50358897 #xB1AA4784 #x3BA2BFB1 #xDA3D70A2 #x86B2E6DB #x672D29C8 #xED25D1FD #x0CBA1EEE #x5592540F #xB40D9B1C #x3E056329 #xDF9AAC3A #x83153A43 #x628AF550 #xE8820D65 #x091DC276 #x5AD2990E #xBB4D561D #x3145AE28 #xD0DA613B #x8C55F742 #x6DCA3851 #xE7C2C064 #x065D0F77 #x5F754596 #xBEEA8A85 #x34E272B0 #xD57DBDA3 #x89F22BDA #x686DE4C9 #xE2651CFC #x03FAD3EF #x4452AA0C #xA5CD651F #x2FC59D2A #xCE5A5239 #x92D5C440 #x734A0B53 #xF942F366 #x18DD3C75 #x41F57694 #xA06AB987 #x2A6241B2 #xCBFD8EA1 #x977218D8 #x76EDD7CB #xFCE52FFE #x1D7AE0ED #x4EB5BB95 #xAF2A7486 #x25228CB3 #xC4BD43A0 #x9832D5D9 #x79AD1ACA #xF3A5E2FF #x123A2DEC #x4B12670D #xAA8DA81E #x2085502B #xC11A9F38 #x9D950941 #x7C0AC652 #xF6023E67 #x179DF174 #x78FBCC08 #x9964031B #x136CFB2E #xF2F3343D #xAE7CA244 #x4FE36D57 #xC5EB9562 #x24745A71 #x7D5C1090 #x9CC3DF83 #x16CB27B6 #xF754E8A5 #xABDB7EDC #x4A44B1CF #xC04C49FA #x21D386E9 #x721CDD91 #x93831282 #x198BEAB7 #xF81425A4 #xA49BB3DD #x45047CCE #xCF0C84FB #x2E934BE8 #x77BB0109 #x9624CE1A #x1C2C362F #xFDB3F93C #xA13C6F45 #x40A3A056 #xCAAB5863 #x2B349770 #x6C9CEE93 #x8D032180 #x070BD9B5 #xE69416A6 #xBA1B80DF #x5B844FCC #xD18CB7F9 #x301378EA #x693B320B #x88A4FD18 #x02AC052D #xE333CA3E #xBFBC5C47 #x5E239354 #xD42B6B61 #x35B4A472 #x667BFF0A #x87E43019 #x0DECC82C #xEC73073F #xB0FC9146 #x51635E55 #xDB6BA660 #x3AF46973 #x63DC2392 #x8243EC81 #x084B14B4 #xE9D4DBA7 #xB55B4DDE #x54C482CD #xDECC7AF8 #x3F53B5EB))) (defconst +sosemanuk-mul-ia+ (make-array 256 :element-type '(unsigned-byte 32) :initial-contents '(#x00000000 #x180F40CD #x301E8033 #x2811C0FE #x603CA966 #x7833E9AB #x50222955 #x482D6998 #xC078FBCC #xD877BB01 #xF0667BFF #xE8693B32 #xA04452AA #xB84B1267 #x905AD299 #x88559254 #x29F05F31 #x31FF1FFC #x19EEDF02 #x01E19FCF #x49CCF657 #x51C3B69A #x79D27664 #x61DD36A9 #xE988A4FD #xF187E430 #xD99624CE #xC1996403 #x89B40D9B #x91BB4D56 #xB9AA8DA8 #xA1A5CD65 #x5249BE62 #x4A46FEAF #x62573E51 #x7A587E9C #x32751704 #x2A7A57C9 #x026B9737 #x1A64D7FA #x923145AE #x8A3E0563 #xA22FC59D #xBA208550 #xF20DECC8 #xEA02AC05 #xC2136CFB #xDA1C2C36 #x7BB9E153 #x63B6A19E #x4BA76160 #x53A821AD #x1B854835 #x038A08F8 #x2B9BC806 #x339488CB #xBBC11A9F #xA3CE5A52 #x8BDF9AAC #x93D0DA61 #xDBFDB3F9 #xC3F2F334 #xEBE333CA #xF3EC7307 #xA492D5C4 #xBC9D9509 #x948C55F7 #x8C83153A #xC4AE7CA2 #xDCA13C6F #xF4B0FC91 #xECBFBC5C #x64EA2E08 #x7CE56EC5 #x54F4AE3B #x4CFBEEF6 #x04D6876E #x1CD9C7A3 #x34C8075D #x2CC74790 #x8D628AF5 #x956DCA38 #xBD7C0AC6 #xA5734A0B #xED5E2393 #xF551635E #xDD40A3A0 #xC54FE36D #x4D1A7139 #x551531F4 #x7D04F10A #x650BB1C7 #x2D26D85F #x35299892 #x1D38586C #x053718A1 #xF6DB6BA6 #xEED42B6B #xC6C5EB95 #xDECAAB58 #x96E7C2C0 #x8EE8820D #xA6F942F3 #xBEF6023E #x36A3906A #x2EACD0A7 #x06BD1059 #x1EB25094 #x569F390C #x4E9079C1 #x6681B93F #x7E8EF9F2 #xDF2B3497 #xC724745A #xEF35B4A4 #xF73AF469 #xBF179DF1 #xA718DD3C #x8F091DC2 #x97065D0F #x1F53CF5B #x075C8F96 #x2F4D4F68 #x37420FA5 #x7F6F663D #x676026F0 #x4F71E60E #x577EA6C3 #xE18D0321 #xF98243EC #xD1938312 #xC99CC3DF #x81B1AA47 #x99BEEA8A #xB1AF2A74 #xA9A06AB9 #x21F5F8ED #x39FAB820 #x11EB78DE #x09E43813 #x41C9518B #x59C61146 #x71D7D1B8 #x69D89175 #xC87D5C10 #xD0721CDD #xF863DC23 #xE06C9CEE #xA841F576 #xB04EB5BB #x985F7545 #x80503588 #x0805A7DC #x100AE711 #x381B27EF #x20146722 #x68390EBA #x70364E77 #x58278E89 #x4028CE44 #xB3C4BD43 #xABCBFD8E #x83DA3D70 #x9BD57DBD #xD3F81425 #xCBF754E8 #xE3E69416 #xFBE9D4DB #x73BC468F #x6BB30642 #x43A2C6BC #x5BAD8671 #x1380EFE9 #x0B8FAF24 #x239E6FDA #x3B912F17 #x9A34E272 #x823BA2BF #xAA2A6241 #xB225228C #xFA084B14 #xE2070BD9 #xCA16CB27 #xD2198BEA #x5A4C19BE #x42435973 #x6A52998D #x725DD940 #x3A70B0D8 #x227FF015 #x0A6E30EB #x12617026 #x451FD6E5 #x5D109628 #x750156D6 #x6D0E161B #x25237F83 #x3D2C3F4E #x153DFFB0 #x0D32BF7D #x85672D29 #x9D686DE4 #xB579AD1A #xAD76EDD7 #xE55B844F #xFD54C482 #xD545047C #xCD4A44B1 #x6CEF89D4 #x74E0C919 #x5CF109E7 #x44FE492A #x0CD320B2 #x14DC607F #x3CCDA081 #x24C2E04C #xAC977218 #xB49832D5 #x9C89F22B #x8486B2E6 #xCCABDB7E #xD4A49BB3 #xFCB55B4D #xE4BA1B80 #x17566887 #x0F59284A #x2748E8B4 #x3F47A879 #x776AC1E1 #x6F65812C #x477441D2 #x5F7B011F #xD72E934B #xCF21D386 #xE7301378 #xFF3F53B5 #xB7123A2D #xAF1D7AE0 #x870CBA1E #x9F03FAD3 #x3EA637B6 #x26A9777B #x0EB8B785 #x16B7F748 #x5E9A9ED0 #x4695DE1D #x6E841EE3 #x768B5E2E #xFEDECC7A #xE6D18CB7 #xCEC04C49 #xD6CF0C84 #x9EE2651C #x86ED25D1 #xAEFCE52F #xB6F3A5E2))) (defmacro sosemanuk-s0 (x0 x1 x2 x3 x4) `(setf ,x3 (logxor ,x3 ,x0) ,x4 ,x1 ,x1 (logand ,x1 ,x3) ,x4 (logxor ,x4 ,x2) ,x1 (logxor ,x1 ,x0) ,x0 (logior ,x0 ,x3) ,x0 (logxor ,x0 ,x4) ,x4 (logxor ,x4 ,x3) ,x3 (logxor ,x3 ,x2) ,x2 (logior ,x2 ,x1) ,x2 (logxor ,x2 ,x4) ,x4 (mod32lognot ,x4) ,x4 (logior ,x4 ,x1) ,x1 (logxor ,x1 ,x3) ,x1 (logxor ,x1 ,x4) ,x3 (logior ,x3 ,x0) ,x1 (logxor ,x1 ,x3) ,x4 (logxor ,x4 ,x3))) (defmacro sosemanuk-s1 (x0 x1 x2 x3 x4) `(setf ,x0 (mod32lognot ,x0) ,x2 (mod32lognot ,x2) ,x4 ,x0 ,x0 (logand ,x0 ,x1) ,x2 (logxor ,x2 ,x0) ,x0 (logior ,x0 ,x3) ,x3 (logxor ,x3 ,x2) ,x1 (logxor ,x1 ,x0) ,x0 (logxor ,x0 ,x4) ,x4 (logior ,x4 ,x1) ,x1 (logxor ,x1 ,x3) ,x2 (logior ,x2 ,x0) ,x2 (logand ,x2 ,x4) ,x0 (logxor ,x0 ,x1) ,x1 (logand ,x1 ,x2) ,x1 (logxor ,x1 ,x0) ,x0 (logand ,x0 ,x2) ,x0 (logxor ,x0 ,x4))) (defmacro sosemanuk-s2 (x0 x1 x2 x3 x4) `(setf ,x4 ,x0 ,x0 (logand ,x0 ,x2) ,x0 (logxor ,x0 ,x3) ,x2 (logxor ,x2 ,x1) ,x2 (logxor ,x2 ,x0) ,x3 (logior ,x3 ,x4) ,x3 (logxor ,x3 ,x1) ,x4 (logxor ,x4 ,x2) ,x1 ,x3 ,x3 (logior ,x3 ,x4) ,x3 (logxor ,x3 ,x0) ,x0 (logand ,x0 ,x1) ,x4 (logxor ,x4 ,x0) ,x1 (logxor ,x1 ,x3) ,x1 (logxor ,x1 ,x4) ,x4 (mod32lognot ,x4))) (defmacro sosemanuk-s3 (x0 x1 x2 x3 x4) `(setf ,x4 ,x0 ,x0 (logior ,x0 ,x3) ,x3 (logxor ,x3 ,x1) ,x1 (logand ,x1 ,x4) ,x4 (logxor ,x4 ,x2) ,x2 (logxor ,x2 ,x3) ,x3 (logand ,x3 ,x0) ,x4 (logior ,x4 ,x1) ,x3 (logxor ,x3 ,x4) ,x0 (logxor ,x0 ,x1) ,x4 (logand ,x4 ,x0) ,x1 (logxor ,x1 ,x3) ,x4 (logxor ,x4 ,x2) ,x1 (logior ,x1 ,x0) ,x1 (logxor ,x1 ,x2) ,x0 (logxor ,x0 ,x3) ,x2 ,x1 ,x1 (logior ,x1 ,x3) ,x1 (logxor ,x1 ,x0))) (defmacro sosemanuk-s4 (x0 x1 x2 x3 x4) `(setf ,x1 (logxor ,x1 ,x3) ,x3 (mod32lognot ,x3) ,x2 (logxor ,x2 ,x3) ,x3 (logxor ,x3 ,x0) ,x4 ,x1 ,x1 (logand ,x1 ,x3) ,x1 (logxor ,x1 ,x2) ,x4 (logxor ,x4 ,x3) ,x0 (logxor ,x0 ,x4) ,x2 (logand ,x2 ,x4) ,x2 (logxor ,x2 ,x0) ,x0 (logand ,x0 ,x1) ,x3 (logxor ,x3 ,x0) ,x4 (logior ,x4 ,x1) ,x4 (logxor ,x4 ,x0) ,x0 (logior ,x0 ,x3) ,x0 (logxor ,x0 ,x2) ,x2 (logand ,x2 ,x3) ,x0 (mod32lognot ,x0) ,x4 (logxor ,x4 ,x2))) (defmacro sosemanuk-s5 (x0 x1 x2 x3 x4) `(setf ,x0 (logxor ,x0 ,x1) ,x1 (logxor ,x1 ,x3) ,x3 (mod32lognot ,x3) ,x4 ,x1 ,x1 (logand ,x1 ,x0) ,x2 (logxor ,x2 ,x3) ,x1 (logxor ,x1 ,x2) ,x2 (logior ,x2 ,x4) ,x4 (logxor ,x4 ,x3) ,x3 (logand ,x3 ,x1) ,x3 (logxor ,x3 ,x0) ,x4 (logxor ,x4 ,x1) ,x4 (logxor ,x4 ,x2) ,x2 (logxor ,x2 ,x0) ,x0 (logand ,x0 ,x3) ,x2 (mod32lognot ,x2) ,x0 (logxor ,x0 ,x4) ,x4 (logior ,x4 ,x3) ,x2 (logxor ,x2 ,x4))) (defmacro sosemanuk-s6 (x0 x1 x2 x3 x4) `(setf ,x2 (mod32lognot ,x2) ,x4 ,x3 ,x3 (logand ,x3 ,x0) ,x0 (logxor ,x0 ,x4) ,x3 (logxor ,x3 ,x2) ,x2 (logior ,x2 ,x4) ,x1 (logxor ,x1 ,x3) ,x2 (logxor ,x2 ,x0) ,x0 (logior ,x0 ,x1) ,x2 (logxor ,x2 ,x1) ,x4 (logxor ,x4 ,x0) ,x0 (logior ,x0 ,x3) ,x0 (logxor ,x0 ,x2) ,x4 (logxor ,x4 ,x3) ,x4 (logxor ,x4 ,x0) ,x3 (mod32lognot ,x3) ,x2 (logand ,x2 ,x4) ,x2 (logxor ,x2 ,x3))) (defmacro sosemanuk-s7 (x0 x1 x2 x3 x4) `(setf ,x4 ,x1 ,x1 (logior ,x1 ,x2) ,x1 (logxor ,x1 ,x3) ,x4 (logxor ,x4 ,x2) ,x2 (logxor ,x2 ,x1) ,x3 (logior ,x3 ,x4) ,x3 (logand ,x3 ,x0) ,x4 (logxor ,x4 ,x2) ,x3 (logxor ,x3 ,x1) ,x1 (logior ,x1 ,x4) ,x1 (logxor ,x1 ,x0) ,x0 (logior ,x0 ,x4) ,x0 (logxor ,x0 ,x2) ,x1 (logxor ,x1 ,x4) ,x2 (logxor ,x2 ,x1) ,x1 (logand ,x1 ,x0) ,x1 (logxor ,x1 ,x4) ,x2 (mod32lognot ,x2) ,x2 (logior ,x2 ,x0) ,x4 (logxor ,x4 ,x2))) (defmacro sosemanuk-lt (x0 x1 x2 x3) `(setf ,x0 (rol32 ,x0 13) ,x2 (rol32 ,x2 3) ,x1 (logxor ,x1 ,x0 ,x2) ,x3 (logxor ,x3 ,x2 (mod32ash ,x0 3)) ,x1 (rol32 ,x1 1) ,x3 (rol32 ,x3 7) ,x0 (logxor ,x0 ,x1 ,x3) ,x2 (logxor ,x2 ,x3 (mod32ash ,x1 7)) ,x0 (rol32 ,x0 5) ,x2 (rol32 ,x2 22))) (defmacro sosemanuk-mkname (prefix n) `,(read-from-string (format nil "~a~d" prefix n))) (defclass sosemanuk (stream-cipher) ((state :accessor sosemanuk-state :initform (make-array 10 :element-type '(unsigned-byte 32)) :type (simple-array (unsigned-byte 32) (10))) (state-r :accessor sosemanuk-state-r :initform (make-array 2 :element-type '(unsigned-byte 32)) :type (simple-array (unsigned-byte 32) (2))) (keystream-buffer :accessor sosemanuk-keystream-buffer :initform (make-array 80 :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (80))) (keystream-buffer-remaining :accessor sosemanuk-keystream-buffer-remaining :initform 0 :type (integer 0 80)) (subkeys :accessor sosemanuk-subkeys :type (or (simple-array (unsigned-byte 32) (100)) null)))) (defmethod schedule-key ((cipher sosemanuk) key) (let ((key-length (length key)) (subkeys (make-array 100 :element-type '(unsigned-byte 32))) (buffer (make-array 32 :element-type '(unsigned-byte 8))) (w0 0) (w1 0) (w2 0) (w3 0) (w4 0) (w5 0) (w6 0) (w7 0) (i 0)) (declare (type (simple-array (unsigned-byte 32) (100)) subkeys) (type (simple-array (unsigned-byte 8) (32)) buffer) (type (unsigned-byte 32) w0 w1 w2 w3 w4 w5 w6 w7) (type fixnum key-length i)) (replace buffer key :end2 key-length) (when (< key-length 32) (setf (aref buffer key-length) 1) (when (< key-length 31) (fill buffer 0 :start (1+ key-length)))) (setf w0 (ub32ref/le buffer 0) w1 (ub32ref/le buffer 4) w2 (ub32ref/le buffer 8) w3 (ub32ref/le buffer 12) w4 (ub32ref/le buffer 16) w5 (ub32ref/le buffer 20) w6 (ub32ref/le buffer 24) w7 (ub32ref/le buffer 28)) (macrolet ((sks (s o0 o1 o2 o3 d0 d1 d2 d3) `(let ((r0 (sosemanuk-mkname "w" ,o0)) (r1 (sosemanuk-mkname "w" ,o1)) (r2 (sosemanuk-mkname "w" ,o2)) (r3 (sosemanuk-mkname "w" ,o3)) (r4 0)) (declare (type (unsigned-byte 32) r0 r1 r2 r3)) (,s r0 r1 r2 r3 r4) (setf (aref subkeys i) (sosemanuk-mkname "r" ,d0)) (incf i) (setf (aref subkeys i) (sosemanuk-mkname "r" ,d1)) (incf i) (setf (aref subkeys i) (sosemanuk-mkname "r" ,d2)) (incf i) (setf (aref subkeys i) (sosemanuk-mkname "r" ,d3)) (incf i))) (sks0 () `(sks sosemanuk-s0 4 5 6 7 1 4 2 0)) (sks1 () `(sks sosemanuk-s1 0 1 2 3 2 0 3 1)) (sks2 () `(sks sosemanuk-s2 4 5 6 7 2 3 1 4)) (sks3 () `(sks sosemanuk-s3 0 1 2 3 1 2 3 4)) (sks4 () `(sks sosemanuk-s4 4 5 6 7 1 4 0 3)) (sks5 () `(sks sosemanuk-s5 0 1 2 3 1 3 0 2)) (sks6 () `(sks sosemanuk-s6 4 5 6 7 0 1 4 2)) (sks7 () `(sks sosemanuk-s7 0 1 2 3 4 3 1 0)) (wup (wi wi5 wi3 wi1 cc) `(setf ,wi (rol32 (logxor ,wi ,wi5 ,wi3 ,wi1 ,cc #x9e3779b9) 11))) (wup0 (cc) `(progn (wup w0 w3 w5 w7 ,cc) (wup w1 w4 w6 w0 ,(+ cc 1)) (wup w2 w5 w7 w1 ,(+ cc 2)) (wup w3 w6 w0 w2 ,(+ cc 3)))) (wup1 (cc) `(progn (wup w4 w7 w1 w3 ,cc) (wup w5 w0 w2 w4 ,(+ cc 1)) (wup w6 w1 w3 w5 ,(+ cc 2)) (wup w7 w2 w4 w6 ,(+ cc 3))))) (wup0 0) (sks3) (wup1 4) (sks2) (wup0 8) (sks1) (wup1 12) (sks0) (wup0 16) (sks7) (wup1 20) (sks6) (wup0 24) (sks5) (wup1 28) (sks4) (wup0 32) (sks3) (wup1 36) (sks2) (wup0 40) (sks1) (wup1 44) (sks0) (wup0 48) (sks7) (wup1 52) (sks6) (wup0 56) (sks5) (wup1 60) (sks4) (wup0 64) (sks3) (wup1 68) (sks2) (wup0 72) (sks1) (wup1 76) (sks0) (wup0 80) (sks7) (wup1 84) (sks6) (wup0 88) (sks5) (wup1 92) (sks4) (wup0 96) (sks3) (setf (sosemanuk-subkeys cipher) subkeys))) cipher) (defmethod shared-initialize :after ((cipher sosemanuk) slot-names &rest initargs &key initialization-vector &allow-other-keys) (declare (ignore slot-names initargs)) (let ((state (sosemanuk-state cipher)) (state-r (sosemanuk-state-r cipher)) (subkeys (sosemanuk-subkeys cipher)) (r0 0) (r1 0) (r2 0) (r3 0) (r4 0)) (declare (type (simple-array (unsigned-byte 32) (*)) state state-r subkeys) (type (unsigned-byte 32) r0 r1 r2 r3 r4)) (when initialization-vector (if (= (length initialization-vector) 16) (setf r0 (ub32ref/le initialization-vector 0) r1 (ub32ref/le initialization-vector 4) r2 (ub32ref/le initialization-vector 8) r3 (ub32ref/le initialization-vector 12)) (error 'invalid-initialization-vector :cipher (class-name (class-of cipher)) :block-length 16))) (macrolet ((ka (zc x0 x1 x2 x3) `(setf ,x0 (logxor ,x0 (aref subkeys ,zc)) ,x1 (logxor ,x1 (aref subkeys ,(+ zc 1))) ,x2 (logxor ,x2 (aref subkeys ,(+ zc 2))) ,x3 (logxor ,x3 (aref subkeys ,(+ zc 3))))) (fss (zc s i0 i1 i2 i3 i4 o0 o1 o2 o3) `(progn (ka ,zc (sosemanuk-mkname "r" ,i0) (sosemanuk-mkname "r" ,i1) (sosemanuk-mkname "r" ,i2) (sosemanuk-mkname "r" ,i3)) (,s (sosemanuk-mkname "r" ,i0) (sosemanuk-mkname "r" ,i1) (sosemanuk-mkname "r" ,i2) (sosemanuk-mkname "r" ,i3) (sosemanuk-mkname "r" ,i4)) (sosemanuk-lt (sosemanuk-mkname "r" ,o0) (sosemanuk-mkname "r" ,o1) (sosemanuk-mkname "r" ,o2) (sosemanuk-mkname "r" ,o3)))) (fsf (zc s i0 i1 i2 i3 i4 o0 o1 o2 o3) `(progn (fss ,zc ,s ,i0 ,i1 ,i2 ,i3 ,i4 ,o0 ,o1 ,o2 ,o3) (ka ,(+ zc 4) (sosemanuk-mkname "r" ,o0) (sosemanuk-mkname "r" ,o1) (sosemanuk-mkname "r" ,o2) (sosemanuk-mkname "r" ,o3))))) (fss 0 sosemanuk-s0 0 1 2 3 4 1 4 2 0) (fss 4 sosemanuk-s1 1 4 2 0 3 2 1 0 4) (fss 8 sosemanuk-s2 2 1 0 4 3 0 4 1 3) (fss 12 sosemanuk-s3 0 4 1 3 2 4 1 3 2) (fss 16 sosemanuk-s4 4 1 3 2 0 1 0 4 2) (fss 20 sosemanuk-s5 1 0 4 2 3 0 2 1 4) (fss 24 sosemanuk-s6 0 2 1 4 3 0 2 3 1) (fss 28 sosemanuk-s7 0 2 3 1 4 4 1 2 0) (fss 32 sosemanuk-s0 4 1 2 0 3 1 3 2 4) (fss 36 sosemanuk-s1 1 3 2 4 0 2 1 4 3) (fss 40 sosemanuk-s2 2 1 4 3 0 4 3 1 0) (fss 44 sosemanuk-s3 4 3 1 0 2 3 1 0 2) (setf (aref state 9) r3 (aref state 8) r1 (aref state 7) r0 (aref state 6) r2) (fss 48 sosemanuk-s4 3 1 0 2 4 1 4 3 2) (fss 52 sosemanuk-s5 1 4 3 2 0 4 2 1 3) (fss 56 sosemanuk-s6 4 2 1 3 0 4 2 0 1) (fss 60 sosemanuk-s7 4 2 0 1 3 3 1 2 4) (fss 64 sosemanuk-s0 3 1 2 4 0 1 0 2 3) (fss 68 sosemanuk-s1 1 0 2 3 4 2 1 3 0) (setf (aref state-r 0) r2 (aref state 4) r1 (aref state-r 1) r3 (aref state 5) r0) (fss 72 sosemanuk-s2 2 1 3 0 4 3 0 1 4) (fss 76 sosemanuk-s3 3 0 1 4 2 0 1 4 2) (fss 80 sosemanuk-s4 0 1 4 2 3 1 3 0 2) (fss 84 sosemanuk-s5 1 3 0 2 4 3 2 1 0) (fss 88 sosemanuk-s6 3 2 1 0 4 3 2 4 1) (fsf 92 sosemanuk-s7 3 2 4 1 0 0 1 2 3) (setf (aref state 3) r0 (aref state 2) r1 (aref state 1) r2 (aref state 0) r3)) (fill subkeys 0) (setf (sosemanuk-subkeys cipher) nil (sosemanuk-keystream-buffer-remaining cipher) 0)) cipher) (defun sosemanuk-compute-block (state state-r buffer) (declare (type (simple-array (unsigned-byte 32) (*)) state state-r) (type (simple-array (unsigned-byte 8) (80)) buffer) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((s0 (aref state 0)) (s1 (aref state 1)) (s2 (aref state 2)) (s3 (aref state 3)) (s4 (aref state 4)) (s5 (aref state 5)) (s6 (aref state 6)) (s7 (aref state 7)) (s8 (aref state 8)) (s9 (aref state 9)) (r1 (aref state-r 0)) (r2 (aref state-r 1)) (u0 0) (u1 0) (u2 0) (u3 0) (u4 0) (v0 0) (v1 0) (v2 0) (v3 0)) (declare (type (unsigned-byte 32) s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 r1 r2) (type (unsigned-byte 32) u0 u1 u2 u3 u4 v0 v1 v2 v3)) (macrolet ((mul-a (x) `(logxor (mod32ash ,x 8) (aref +sosemanuk-mul-a+ (mod32ash ,x -24)))) (mul-g (x) `(logxor (mod32ash ,x -8) (aref +sosemanuk-mul-ia+ (logand ,x 255)))) (xmux (c x y) `(if (zerop (logand ,c 1)) ,x (logxor ,x ,y))) (fsm (x1 x8) `(let ((tt 0) (or1 0)) (declare (type (unsigned-byte 32) tt or1)) (setf tt (xmux r1 (sosemanuk-mkname "s" ,x1) (sosemanuk-mkname "s" ,x8)) or1 r1 r1 (mod32+ r2 tt) tt (mod32* or1 #x54655307) r2 (rol32 tt 7)))) (lru (x0 x3 x9 dd) `(setf ,dd (sosemanuk-mkname "s" ,x0) (sosemanuk-mkname "s" ,x0) (logxor (mul-a (sosemanuk-mkname "s" ,x0)) (mul-g (sosemanuk-mkname "s" ,x3)) (sosemanuk-mkname "s" ,x9)))) (cc1 (x9 ee) `(setf ,ee (logxor (mod32+ (sosemanuk-mkname "s" ,x9) r1) r2))) (stp (x0 x1 x3 x8 x9 dd ee) `(progn (fsm ,x1 ,x8) (lru ,x0 ,x3 ,x9 ,dd) (cc1 ,x9 ,ee))) (srd (s x0 x1 x2 x3 ooff) `(progn (,s u0 u1 u2 u3 u4) (setf (ub32ref/le buffer ,ooff) (logxor (sosemanuk-mkname "u" ,x0) v0) (ub32ref/le buffer ,(+ ooff 4)) (logxor (sosemanuk-mkname "u" ,x1) v1) (ub32ref/le buffer ,(+ ooff 8)) (logxor (sosemanuk-mkname "u" ,x2) v2) (ub32ref/le buffer ,(+ ooff 12)) (logxor (sosemanuk-mkname "u" ,x3) v3))))) (stp 0 1 3 8 9 v0 u0) (stp 1 2 4 9 0 v1 u1) (stp 2 3 5 0 1 v2 u2) (stp 3 4 6 1 2 v3 u3) (srd sosemanuk-s2 2 3 1 4 0) (stp 4 5 7 2 3 v0 u0) (stp 5 6 8 3 4 v1 u1) (stp 6 7 9 4 5 v2 u2) (stp 7 8 0 5 6 v3 u3) (srd sosemanuk-s2 2 3 1 4 16) (stp 8 9 1 6 7 v0 u0) (stp 9 0 2 7 8 v1 u1) (stp 0 1 3 8 9 v2 u2) (stp 1 2 4 9 0 v3 u3) (srd sosemanuk-s2 2 3 1 4 32) (stp 2 3 5 0 1 v0 u0) (stp 3 4 6 1 2 v1 u1) (stp 4 5 7 2 3 v2 u2) (stp 5 6 8 3 4 v3 u3) (srd sosemanuk-s2 2 3 1 4 48) (stp 6 7 9 4 5 v0 u0) (stp 7 8 0 5 6 v1 u1) (stp 8 9 1 6 7 v2 u2) (stp 9 0 2 7 8 v3 u3) (srd sosemanuk-s2 2 3 1 4 64) (setf (aref state 0) s0 (aref state 1) s1 (aref state 2) s2 (aref state 3) s3 (aref state 4) s4 (aref state 5) s5 (aref state 6) s6 (aref state 7) s7 (aref state 8) s8 (aref state 9) s9 (aref state-r 0) r1 (aref state-r 1) r2))) (values)) (define-stream-cryptor sosemanuk (let ((state (sosemanuk-state context)) (state-r (sosemanuk-state-r context)) (keystream-buffer (sosemanuk-keystream-buffer context)) (keystream-buffer-remaining (sosemanuk-keystream-buffer-remaining context))) (declare (type (simple-array (unsigned-byte 32) (*)) state state-r) (type (simple-array (unsigned-byte 8) (80)) keystream-buffer) (type (integer 0 80) keystream-buffer-remaining)) (unless (zerop length) (unless (zerop keystream-buffer-remaining) (let ((size (min length keystream-buffer-remaining))) (declare (type (integer 0 80) size)) (xor-block size keystream-buffer (- 80 keystream-buffer-remaining) plaintext plaintext-start ciphertext ciphertext-start) (decf keystream-buffer-remaining size) (decf length size) (incf ciphertext-start size) (incf plaintext-start size))) (unless (zerop length) (loop (sosemanuk-compute-block state state-r keystream-buffer) (when (<= length 80) (xor-block length keystream-buffer 0 plaintext plaintext-start ciphertext ciphertext-start) (setf (sosemanuk-keystream-buffer-remaining context) (- 80 length)) (return-from sosemanuk-crypt (values))) (xor-block 80 keystream-buffer 0 plaintext plaintext-start ciphertext ciphertext-start) (decf length 80) (incf ciphertext-start 80) (incf plaintext-start 80))) (setf (sosemanuk-keystream-buffer-remaining context) keystream-buffer-remaining)) (values))) (defcipher sosemanuk (:mode :stream) (:crypt-function sosemanuk-crypt) (:key-length (:variable 16 32 1))) ironclad-0.57/src/ciphers/square.lisp000066400000000000000000000436541420372057600176770ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; square.lisp -- implementation of the Square block cipher ;;; based on a public domain implementation by Paulo Baretto (FIXME!) (in-package :crypto) (in-ironclad-readtable) (declaim (type (simple-array (unsigned-byte 8) (256)) alogtable logtable)) (eval-when (:compile-toplevel :load-toplevel :execute) (defconst alogtable #.(let ((table (make-array 256 :element-type '(unsigned-byte 8) :initial-element 1))) (do ((i 1 (1+ i))) ((>= i 256) table) (let ((j (ash (aref table (1- i)) 1))) (when (logbitp 8 j) (setf j (logxor j #x1f5))) (setf (aref table i) (logand j #xff)))))) ) (defconst logtable #.(let ((table (make-array 256 :element-type '(unsigned-byte 8) :initial-element 0))) (do ((i 1 (1+ i))) ((>= i 256) (setf (aref table 1) 0) table) (setf (aref table (aref alogtable i)) i)))) (declaim (type (simple-array (unsigned-byte 8) (4 4)) g-matrix inverse-g-matrix)) (defconst g-matrix (make-array (list 4 4) :element-type '(unsigned-byte 8) :initial-contents (list (list 2 1 1 3) (list 3 2 1 1) (list 1 3 2 1) (list 1 1 3 2)))) (defconst inverse-g-matrix (make-array (list 4 4) :element-type '(unsigned-byte 8) :initial-contents (list (list #xe #x9 #xd #xb) (list #xb #xe #x9 #xd) (list #xd #xb #xe #x9) (list #x9 #xd #xb #xe)))) (declaim (type (simple-array (unsigned-byte 8) (256)) s-encryption-table s-decryption-table)) (defconst s-encryption-table #8@(177 206 195 149 90 173 231 2 77 68 251 145 12 135 161 80 203 103 84 221 70 143 225 78 240 253 252 235 249 196 26 110 94 245 204 141 28 86 67 254 7 97 248 117 89 255 3 34 138 209 19 238 136 0 14 52 21 128 148 227 237 181 83 35 75 71 23 167 144 53 171 216 184 223 79 87 154 146 219 27 60 200 153 4 142 224 215 125 133 187 64 44 58 69 241 66 101 32 65 24 114 37 147 112 54 5 242 11 163 121 236 8 39 49 50 182 124 176 10 115 91 123 183 129 210 13 106 38 158 88 156 131 116 179 172 48 122 105 119 15 174 33 222 208 46 151 16 164 152 168 212 104 45 98 41 109 22 73 118 199 232 193 150 55 229 202 244 233 99 18 194 166 20 188 211 40 175 47 230 36 82 198 160 9 189 140 207 93 17 95 1 197 159 61 162 155 201 59 190 81 25 31 63 92 178 239 74 205 191 186 111 100 217 243 62 180 170 220 213 6 192 126 246 102 108 132 113 56 185 29 127 157 72 139 42 218 165 51 130 57 214 120 134 250 228 43 169 30 137 96 107 234 85 76 247 226)) (defconst s-decryption-table #8@(53 190 7 46 83 105 219 40 111 183 118 107 12 125 54 139 146 188 169 50 172 56 156 66 99 200 30 79 36 229 247 201 97 141 47 63 179 101 127 112 175 154 234 245 91 152 144 177 135 113 114 237 55 69 104 163 227 239 92 197 80 193 214 202 90 98 95 38 9 93 20 65 232 157 206 64 253 8 23 74 15 199 180 62 18 252 37 75 129 44 4 120 203 187 32 189 249 41 153 168 211 96 223 17 151 137 126 250 224 155 31 210 103 226 100 119 132 43 158 138 241 109 136 121 116 87 221 230 57 123 238 131 225 88 242 13 52 248 48 233 185 35 84 21 68 11 77 102 58 3 162 145 148 82 76 195 130 231 128 192 182 14 194 108 147 236 171 67 149 246 216 70 134 5 140 176 117 0 204 133 215 61 115 122 72 228 209 89 173 184 198 208 220 161 170 2 29 191 181 159 81 196 165 16 34 207 1 186 143 49 124 174 150 218 240 86 71 212 235 78 217 19 142 73 85 22 255 59 244 164 178 6 160 167 251 27 110 60 51 205 24 94 106 213 166 33 222 254 42 28 243 10 26 25 39 45)) (declaim (type (simple-array (unsigned-byte 32) (256)) t-encryption-table t-decryption-table)) (defconst t-encryption-table #32@(#x97b1b126 #x69cecea7 #x73c3c3b0 #xdf95954a #xb45a5aee #xafadad02 #x3be7e7dc #x04020206 #x9a4d4dd7 #x884444cc #x03fbfbf8 #xd7919146 #x180c0c14 #xfb87877c #xb7a1a116 #xa05050f0 #x63cbcba8 #xce6767a9 #xa85454fc #x4fdddd92 #x8c4646ca #xeb8f8f64 #x37e1e1d6 #x9c4e4ed2 #x15f0f0e5 #x0ffdfdf2 #x0dfcfcf1 #x23ebebc8 #x07f9f9fe #x7dc4c4b9 #x341a1a2e #xdc6e6eb2 #xbc5e5ee2 #x1ff5f5ea #x6dcccca1 #xef8d8d62 #x381c1c24 #xac5656fa #x864343c5 #x09fefef7 #x0e070709 #xc26161a3 #x05f8f8fd #xea75759f #xb25959eb #x0bfffff4 #x06030305 #x44222266 #xe18a8a6b #x57d1d186 #x26131335 #x29eeeec7 #xe588886d #x00000000 #x1c0e0e12 #x6834345c #x2a15153f #xf5808075 #xdd949449 #x33e3e3d0 #x2fededc2 #x9fb5b52a #xa65353f5 #x46232365 #x964b4bdd #x8e4747c9 #x2e171739 #xbba7a71c #xd5909045 #x6a35355f #xa3abab08 #x45d8d89d #x85b8b83d #x4bdfdf94 #x9e4f4fd1 #xae5757f9 #xc19a9a5b #xd1929243 #x43dbdb98 #x361b1b2d #x783c3c44 #x65c8c8ad #xc799995e #x0804040c #xe98e8e67 #x35e0e0d5 #x5bd7d78c #xfa7d7d87 #xff85857a #x83bbbb38 #x804040c0 #x582c2c74 #x743a3a4e #x8a4545cf #x17f1f1e6 #x844242c6 #xca6565af #x40202060 #x824141c3 #x30181828 #xe4727296 #x4a25256f #xd3939340 #xe0707090 #x6c36365a #x0a05050f #x11f2f2e3 #x160b0b1d #xb3a3a310 #xf279798b #x2dececc1 #x10080818 #x4e272769 #x62313153 #x64323256 #x99b6b62f #xf87c7c84 #x95b0b025 #x140a0a1e #xe6737395 #xb65b5bed #xf67b7b8d #x9bb7b72c #xf7818176 #x51d2d283 #x1a0d0d17 #xd46a6abe #x4c26266a #xc99e9e57 #xb05858e8 #xcd9c9c51 #xf3838370 #xe874749c #x93b3b320 #xadacac01 #x60303050 #xf47a7a8e #xd26969bb #xee777799 #x1e0f0f11 #xa9aeae07 #x42212163 #x49dede97 #x55d0d085 #x5c2e2e72 #xdb97974c #x20101030 #xbda4a419 #xc598985d #xa5a8a80d #x5dd4d489 #xd06868b8 #x5a2d2d77 #xc46262a6 #x5229297b #xda6d6db7 #x2c16163a #x924949db #xec76769a #x7bc7c7bc #x25e8e8cd #x77c1c1b6 #xd996964f #x6e373759 #x3fe5e5da #x61cacaab #x1df4f4e9 #x27e9e9ce #xc66363a5 #x24121236 #x71c2c2b3 #xb9a6a61f #x2814143c #x8dbcbc31 #x53d3d380 #x50282878 #xabafaf04 #x5e2f2f71 #x39e6e6df #x4824246c #xa45252f6 #x79c6c6bf #xb5a0a015 #x1209091b #x8fbdbd32 #xed8c8c61 #x6bcfcfa4 #xba5d5de7 #x22111133 #xbe5f5fe1 #x02010103 #x7fc5c5ba #xcb9f9f54 #x7a3d3d47 #xb1a2a213 #xc39b9b58 #x67c9c9ae #x763b3b4d #x89bebe37 #xa25151f3 #x3219192b #x3e1f1f21 #x7e3f3f41 #xb85c5ce4 #x91b2b223 #x2befefc4 #x944a4ade #x6fcdcda2 #x8bbfbf34 #x81baba3b #xde6f6fb1 #xc86464ac #x47d9d99e #x13f3f3e0 #x7c3e3e42 #x9db4b429 #xa1aaaa0b #x4ddcdc91 #x5fd5d58a #x0c06060a #x75c0c0b5 #xfc7e7e82 #x19f6f6ef #xcc6666aa #xd86c6cb4 #xfd848479 #xe2717193 #x70383848 #x87b9b93e #x3a1d1d27 #xfe7f7f81 #xcf9d9d52 #x904848d8 #xe38b8b68 #x542a2a7e #x41dada9b #xbfa5a51a #x66333355 #xf1828273 #x7239394b #x59d6d68f #xf0787888 #xf986867f #x01fafafb #x3de4e4d9 #x562b2b7d #xa7a9a90e #x3c1e1e22 #xe789896e #xc06060a0 #xd66b6bbd #x21eaeacb #xaa5555ff #x984c4cd4 #x1bf7f7ec #x31e2e2d3)) (defconst t-decryption-table #32@(#xe368bc02 #x5585620c #x2a3f2331 #x61ab13f7 #x98d46d72 #x21cb9a19 #x3c22a461 #x459d3dcd #x05fdb423 #x2bc4075f #x9b2c01c0 #x3dd9800f #x486c5c74 #xf97f7e85 #xf173ab1f #xb6edde0e #x283c6bed #x4997781a #x9f2a918d #xc9579f33 #xa907a8aa #xa50ded7d #x7c422d8f #x764db0c9 #x4d91e857 #xcea963cc #xb4ee96d2 #x3028e1b6 #x0df161b9 #xbd196726 #x419bad80 #xc0a06ec7 #x5183f241 #x92dbf034 #x6fa21efc #x8f32ce4c #x13e03373 #x69a7c66d #xe56d6493 #xbf1a2ffa #xbb1cbfb7 #x587403b5 #xe76e2c4f #x5d89b796 #xe89c052a #x446619a3 #x342e71fb #x0ff22965 #xfe81827a #xb11322f1 #xa30835ec #xcd510f7e #xff7aa614 #x5c7293f8 #x2fc29712 #xf370e3c3 #x992f491c #xd1431568 #xc2a3261b #x88cc32b3 #x8acf7a6f #xb0e8069f #x7a47f51e #xd2bb79da #xe6950821 #x4398e55c #xd0b83106 #x11e37baf #x7e416553 #xccaa2b10 #xd8b4e49c #x6456a7d4 #xfb7c3659 #x724b2084 #xea9f4df6 #x6a5faadf #x2dc1dfce #x70486858 #xcaaff381 #x0605d891 #x5a774b69 #x94de28a5 #x39df1042 #x813bc347 #xfc82caa6 #x23c8d2c5 #x03f86cb2 #x080cd59a #xdab7ac40 #x7db909e1 #x3824342c #xcf5247a2 #xdcb274d1 #x63a85b2b #x35d55595 #x479e7511 #x15e5ebe2 #x4b9430c6 #x4a6f14a8 #x91239c86 #x4c6acc39 #x5f8aff4a #x0406904d #xee99ddbb #x1e1152ca #xaaffc418 #xeb646998 #x07fefcff #x8b345e01 #x567d0ebe #xbae79bd9 #x4263c132 #x75b5dc7b #x97264417 #x67aecb66 #x95250ccb #xec9a9567 #x57862ad0 #x60503799 #xb8e4d305 #x65ad83ba #x19efae35 #xa4f6c913 #xc15b4aa9 #x873e1bd6 #xa0f0595e #x18148a5b #xaf02703b #xab04e076 #xdd4950bf #xdf4a1863 #xc6a5b656 #x853d530a #xfa871237 #x77b694a7 #x4665517f #xed61b109 #x1bece6e9 #xd5458525 #xf5753b52 #x7fba413d #x27ce4288 #xb2eb4e43 #xd6bde997 #x527b9ef3 #x62537f45 #x2c3afba0 #x7bbcd170 #xb91ff76b #x121b171d #xfd79eec8 #x3a277cf0 #x0c0a45d7 #x96dd6079 #x2233f6ab #xacfa1c89 #xc8acbb5d #xa10b7d30 #xd4bea14b #xbee10b94 #x25cd0a54 #x547e4662 #xa2f31182 #x17e6a33e #x263566e6 #xc3580275 #x83388b9b #x7844bdc2 #x020348dc #x4f92a08b #x2e39b37c #x4e6984e5 #xf0888f71 #x362d3927 #x9cd2fd3f #x01fb246e #x893716dd #x00000000 #xf68d57e0 #xe293986c #x744ef815 #x9320d45a #xad0138e7 #xd3405db4 #x1a17c287 #xb3106a2d #x5078d62f #xf48e1f3c #xa70ea5a1 #x71b34c36 #x9ad725ae #x5e71db24 #x161d8750 #xef62f9d5 #x8d318690 #x1c121a16 #xa6f581cf #x5b8c6f07 #x37d61d49 #x6e593a92 #x84c67764 #x86c53fb8 #xd746cdf9 #xe090d0b0 #x29c74f83 #xe49640fd #x0e090d0b #x6da15620 #x8ec9ea22 #xdb4c882e #xf776738e #xb515b2bc #x10185fc1 #x322ba96a #x6ba48eb1 #xaef95455 #x406089ee #x6655ef08 #xe9672144 #x3e21ecbd #x2030be77 #xf28bc7ad #x80c0e729 #x141ecf8c #xbce24348 #xc4a6fe8a #x31d3c5d8 #xb716fa60 #x5380ba9d #xd94fc0f2 #x1de93e78 #x24362e3a #xe16bf4de #xcb54d7ef #x09f7f1f4 #x82c3aff5 #x0bf4b928 #x9d29d951 #xc75e9238 #xf8845aeb #x90d8b8e8 #xdeb13c0d #x33d08d04 #x685ce203 #xc55ddae4 #x3bdc589e #x0a0f9d46 #x3fdac8d3 #x598f27db #xa8fc8cc4 #x79bf99ac #x6c5a724e #x8ccaa2fe #x9ed1b5e3 #x1fea76a4 #x73b004ea)) (declaim (inline mul8)) (defun mul8 (a b) (declare (type (unsigned-byte 8) a b)) (if (or (zerop a) (zerop b)) 0 (aref alogtable (mod (+ (aref logtable a) (aref logtable b)) 255)))) ;;; this function only runs during the key generation process, so consing ;;; is acceptable. (defun transform (in in-offset out out-offset) (declare (type (simple-array (unsigned-byte 32) (*)) in out)) (let ((a-matrix (make-array (list 4 4) :element-type '(unsigned-byte 8))) (b-matrix (make-array (list 4 4) :element-type '(unsigned-byte 8) :initial-element 0))) (macrolet ((inref (index) `(aref in (+ ,index in-offset))) (outref (index) `(aref out (+ ,index out-offset)))) (dotimes (i 4) (dotimes (j 4) (setf (aref a-matrix i j) (logand (ash (inref i) (- (- 24 (* j 8)))) #xff)))) (dotimes (i 4) (dotimes (j 4) (dotimes (k 4) (setf (aref b-matrix i j) (logand (logxor (mul8 (aref a-matrix i k) (aref g-matrix k j)) (aref b-matrix i j)) #xff))))) (dotimes (i 4) (setf (outref i) 0) (dotimes (j 4) (setf (outref i) (logxor (outref i) (ash (aref b-matrix i j) (- 24 (* j 8)))))))))) (defun generate-round-keys (key n-rounds encrypt-roundkeys decrypt-roundkeys) (declare (type (simple-array (unsigned-byte 32) (*)) encrypt-roundkeys decrypt-roundkeys) (type (simple-array (unsigned-byte 8) (16)) key)) (let ((offset (make-array n-rounds :element-type '(unsigned-byte 8) :initial-element 1)) (tempkeys (make-array (* (1+ n-rounds) 4) :element-type '(unsigned-byte 32)))) (declare (type (simple-array (unsigned-byte 8) (*)) offset) (type (simple-array (unsigned-byte 32) (*)) tempkeys)) ;; hack for stupid C array punning (macrolet ((mdref (array i j) `(aref ,array (+ (* ,i 4) ,j)))) (do ((i 1 (1+ i))) ((>= i n-rounds)) (setf (aref offset i) (mul8 2 (aref offset (1- i))))) (dotimes (i 4) (setf (mdref tempkeys 0 i) (ub32ref/be key (* 4 i)))) (do ((i 1 (1+ i))) ((>= i (1+ n-rounds))) (setf (mdref tempkeys i 0) (logxor (mdref tempkeys (1- i) 0) (rol32 (mdref tempkeys (1- i) 3) 8) (ash (aref offset (1- i)) 24)) (mdref tempkeys i 1) (logxor (mdref tempkeys (1- i) 1) (mdref tempkeys i 0)) (mdref tempkeys i 2) (logxor (mdref tempkeys (1- i) 2) (mdref tempkeys i 1)) (mdref tempkeys i 3) (logxor (mdref tempkeys (1- i) 3) (mdref tempkeys i 2)))) (dotimes (i n-rounds) (transform tempkeys (* i 4) encrypt-roundkeys (* i 4))) (dotimes (i 4) (setf (mdref encrypt-roundkeys n-rounds i) (mdref tempkeys n-rounds i))) (dotimes (i n-rounds) (dotimes (j 4) (setf (mdref decrypt-roundkeys i j) (mdref tempkeys (- n-rounds i) j)))) (dotimes (i 4) (setf (mdref decrypt-roundkeys n-rounds i) (mdref encrypt-roundkeys 0 i)))))) (declaim (inline square-munge-block)) (defun square-munge-block (round-keys n-rounds t-array s-array plaintext plaintext-start ciphertext ciphertext-start) (declare (type (simple-array (unsigned-byte 8) (*)) plaintext ciphertext) (type (simple-array (unsigned-byte 8) (256)) s-array) (type (simple-array (unsigned-byte 32) (*)) round-keys) (type (simple-array (unsigned-byte 32) (256)) t-array)) (declare (type (integer 0 #.(- array-dimension-limit 16)) plaintext-start ciphertext-start)) (with-words ((b0 b1 b2 b3) plaintext plaintext-start) (let ((a0 0) (a1 0) (a2 0) (a3 0)) (declare (type (unsigned-byte 32) a0 a1 a2 a3)) ;; initial key addition (setf b0 (logxor b0 (aref round-keys 0)) b1 (logxor b1 (aref round-keys 1)) b2 (logxor b2 (aref round-keys 2)) b3 (logxor b3 (aref round-keys 3))) ;; full rounds (do ((i 0 (1+ i)) (rk-offset 4 (+ rk-offset 4))) ((>= i (1- n-rounds))) (macrolet ((mix (tmpvar bytefun) `(setf ,tmpvar (logxor (aref t-array (,bytefun b0)) (mod32+ (mod32ash (aref t-array (,bytefun b1)) -8) (mod32ash (aref t-array (,bytefun b1)) 24)) (mod32+ (mod32ash (aref t-array (,bytefun b2)) -16) (mod32ash (aref t-array (,bytefun b2)) 16)) (mod32+ (mod32ash (aref t-array (,bytefun b3)) -24) (mod32ash (aref t-array (,bytefun b3)) 8)))))) (mix a0 fourth-byte) (mix a1 third-byte) (mix a2 second-byte) (mix a3 first-byte) (setf b0 (logxor a0 (aref round-keys (+ rk-offset 0))) b1 (logxor a1 (aref round-keys (+ rk-offset 1))) b2 (logxor a2 (aref round-keys (+ rk-offset 2))) b3 (logxor a3 (aref round-keys (+ rk-offset 3))))))) ;; last round (macrolet ((last-round (bytefun) `(mod32+ (mod32ash (aref s-array (,bytefun b0)) 24) (mod32+ (mod32ash (aref s-array (,bytefun b1)) 16) (mod32+ (mod32ash (aref s-array (,bytefun b2)) 8) (mod32ash (aref s-array (,bytefun b3)) 0))))) (rkref (index) `(aref round-keys (+ ,index (* n-rounds 4))))) (let ((t0 (last-round fourth-byte)) (t1 (last-round third-byte)) (t2 (last-round second-byte)) (t3 (last-round first-byte))) (declare (type (unsigned-byte 32) t0 t1 t2 t3)) (flet ((apply-rk (temp round-key) (declare (type (unsigned-byte 32) temp round-key)) (logxor temp round-key))) (declare (inline apply-rk)) (store-words ciphertext ciphertext-start (apply-rk t0 (rkref 0)) (apply-rk t1 (rkref 1)) (apply-rk t2 (rkref 2)) (apply-rk t3 (rkref 3)))))))) (defclass square (cipher 16-byte-block-mixin) ((encryption-round-keys :accessor encryption-round-keys :type (simple-array (unsigned-byte 32) (*))) (decryption-round-keys :accessor decryption-round-keys :type (simple-array (unsigned-byte 32) (*))) (n-rounds :initarg :n-rounds :reader n-rounds)) (:default-initargs :n-rounds 8)) (define-block-encryptor square 16 (let ((n-rounds (n-rounds context)) (round-keys (encryption-round-keys context))) (square-munge-block round-keys n-rounds t-encryption-table s-encryption-table plaintext plaintext-start ciphertext ciphertext-start))) (define-block-decryptor square 16 (let ((n-rounds (n-rounds context)) (round-keys (decryption-round-keys context))) (square-munge-block round-keys n-rounds t-decryption-table s-decryption-table ciphertext ciphertext-start plaintext plaintext-start))) (defmethod schedule-key ((cipher square) key) (let ((encryption-schedule (make-array (* 4 (1+ (n-rounds cipher))) :element-type '(unsigned-byte 32))) (decryption-schedule (make-array (* 4 (1+ (n-rounds cipher))) :element-type '(unsigned-byte 32)))) (generate-round-keys key (n-rounds cipher) encryption-schedule decryption-schedule) (setf (encryption-round-keys cipher) encryption-schedule (decryption-round-keys cipher) decryption-schedule) cipher)) (defcipher square (:encrypt-function square-encrypt-block) (:decrypt-function square-decrypt-block) (:block-length 16) (:key-length (:fixed 16))) ironclad-0.57/src/ciphers/tea.lisp000066400000000000000000000043661420372057600171450ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto) (defconstant +tea-n-rounds+ 32) (defconstant +tea-delta+ #x9e3779b9) (defclass tea (cipher 8-byte-block-mixin) ((key :accessor key))) (define-block-encryptor tea 8 (with-words ((y z) plaintext plaintext-start) (let ((key (key context)) (sum 0)) (declare (type (simple-array (unsigned-byte 32) (4)) key)) (declare (type (unsigned-byte 32) sum)) ;; could probably unroll this loop for reasonable performance gain (dotimes (i +tea-n-rounds+) (setf sum (mod32+ sum +tea-delta+)) (setf y (mod32+ y (logxor (mod32+ (mod32ash z 4) (aref key 0)) (mod32+ z sum) (mod32+ (mod32ash z -5) (aref key 1))))) (setf z (mod32+ z (logxor (mod32+ (mod32ash y 4) (aref key 2)) (mod32+ y sum) (mod32+ (mod32ash y -5) (aref key 3)))))) (store-words ciphertext ciphertext-start y z)))) (define-block-decryptor tea 8 (with-words ((y z) ciphertext ciphertext-start) (let ((key (key context)) (sum (mod32ash +tea-delta+ 5))) (declare (type (simple-array (unsigned-byte 32) (4)) key)) (declare (type (unsigned-byte 32) sum)) (dotimes (i +tea-n-rounds+) (setf z (mod32- z (logxor (mod32+ (mod32ash y 4) (aref key 2)) (mod32+ y sum) (mod32+ (mod32ash y -5) (aref key 3))))) (setf y (mod32- y (logxor (mod32+ (mod32ash z 4) (aref key 0)) (mod32+ z sum) (mod32+ (mod32ash z -5) (aref key 1))))) (setf sum (mod32- sum +tea-delta+))) (store-words plaintext plaintext-start y z)))) (defmethod schedule-key ((cipher tea) key) (let ((ub32key (make-array 4 :element-type '(unsigned-byte 32)))) (with-words ((a b c d) key 0) (setf (aref ub32key 0) a (aref ub32key 1) b (aref ub32key 2) c (aref ub32key 3) d) (setf (key cipher) ub32key) cipher))) (defcipher tea (:encrypt-function tea-encrypt-block) (:decrypt-function tea-decrypt-block) (:block-length 8) (:key-length (:fixed 16))) ironclad-0.57/src/ciphers/threefish.lisp000066400000000000000000001273571420372057600203630ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; threefish.lisp -- implementation of the Threefish block cipher (in-package :crypto) ;;; Constants (defconstant +threefish-key-schedule-constant+ #x1bd11bdaa9fc1a22) ;;; Functions common to all the block sizes (defun threefish-set-key (cipher key-data) (let* ((key-words (/ (block-length cipher) 8)) (key (make-array (1+ key-words) :element-type '(unsigned-byte 64) :initial-element 0)) (parity +threefish-key-schedule-constant+)) (dotimes (i key-words) (let ((n (ub64ref/le key-data (* 8 i)))) (setf (aref key i) n) (setf parity (logxor parity n)))) (setf (aref key key-words) parity) (setf (threefish-key cipher) key) (values))) (defun threefish-set-tweak (cipher tweak-data) (unless (= (length tweak-data) 16) (error 'ironclad-error :format-control "The tweak size must be 16 bytes.")) (let ((tweak (threefish-tweak cipher))) (setf (aref tweak 0) (ub64ref/le tweak-data 0) (aref tweak 1) (ub64ref/le tweak-data 8) (aref tweak 2) (logxor (aref tweak 0) (aref tweak 1))))) ;;; Implementation for blocks of 256 bits (defclass threefish256 (cipher 32-byte-block-mixin) ((key :accessor threefish-key :type (simple-array (unsigned-byte 64) (5))) (tweak :accessor threefish-tweak :initform (make-array 3 :element-type '(unsigned-byte 64) :initial-contents '(0 0 0)) :type (simple-array (unsigned-byte 64) (3))))) (defmethod shared-initialize :after ((cipher threefish256) slot-names &rest initargs &key (tweak nil tweak-p) &allow-other-keys) (declare (ignore initargs tweak-p)) (when tweak (threefish-set-tweak cipher tweak)) cipher) (defmethod schedule-key ((cipher threefish256) key) (threefish-set-key cipher key) cipher) (define-block-encryptor threefish256 32 (let* ((key (threefish-key context)) (tweak (threefish-tweak context)) (k0 (aref key 0)) (k1 (aref key 1)) (k2 (aref key 2)) (k3 (aref key 3)) (k4 (aref key 4)) (t0 (aref tweak 0)) (t1 (aref tweak 1)) (t2 (aref tweak 2))) (declare (type (simple-array (unsigned-byte 64) (5)) key) (type (simple-array (unsigned-byte 64) (3)) tweak) (type (unsigned-byte 64) k0 k1 k2 k3 k4 t0 t1 t2)) (with-words ((b0 b1 b2 b3) plaintext plaintext-start :big-endian nil :size 8) (macrolet ((arx (x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15) `(setf b1 (mod64+ b1 (mod64+ ,x0 ,x1)) b0 (mod64+ b0 (mod64+ ,x2 ,x3)) b1 (logxor (rol64 b1 14) b0) b3 (mod64+ b3 (mod64+ ,x4 ,x5)) b2 (mod64+ b2 (mod64+ b3 (mod64+ ,x6 ,x7))) b3 (logxor (rol64 b3 16) b2) b0 (mod64+ b0 b3) b3 (logxor (rol64 b3 52) b0) b2 (mod64+ b2 b1) b1 (logxor (rol64 b1 57) b2) b0 (mod64+ b0 b1) b1 (logxor (rol64 b1 23) b0) b2 (mod64+ b2 b3) b3 (logxor (rol64 b3 40) b2) b0 (mod64+ b0 b3) b3 (logxor (rol64 b3 5) b0) b2 (mod64+ b2 b1) b1 (logxor (rol64 b1 37) b2) b1 (mod64+ b1 (mod64+ ,x8 ,x9)) b0 (mod64+ b0 (mod64+ ,x10 ,x11)) b1 (logxor (rol64 b1 25) b0) b3 (mod64+ b3 (mod64+ ,x12 ,x13)) b2 (mod64+ b2 (mod64+ b3 (mod64+ ,x14 ,x15))) b3 (logxor (rol64 b3 33) b2) b0 (mod64+ b0 b3) b3 (logxor (rol64 b3 46) b0) b2 (mod64+ b2 b1) b1 (logxor (rol64 b1 12) b2) b0 (mod64+ b0 b1) b1 (logxor (rol64 b1 58) b0) b2 (mod64+ b2 b3) b3 (logxor (rol64 b3 22) b2) b0 (mod64+ b0 b3) b3 (logxor (rol64 b3 32) b0) b2 (mod64+ b2 b1) b1 (logxor (rol64 b1 32) b2)))) (arx k1 t0 b1 k0 k3 0 k2 t1 k2 t1 b1 k1 k4 1 k3 t2) (arx k3 t2 b1 k2 k0 2 k4 t0 k4 t0 b1 k3 k1 3 k0 t1) (arx k0 t1 b1 k4 k2 4 k1 t2 k1 t2 b1 k0 k3 5 k2 t0) (arx k2 t0 b1 k1 k4 6 k3 t1 k3 t1 b1 k2 k0 7 k4 t2) (arx k4 t2 b1 k3 k1 8 k0 t0 k0 t0 b1 k4 k2 9 k1 t1) (arx k1 t1 b1 k0 k3 10 k2 t2 k2 t2 b1 k1 k4 11 k3 t0) (arx k3 t0 b1 k2 k0 12 k4 t1 k4 t1 b1 k3 k1 13 k0 t2) (arx k0 t2 b1 k4 k2 14 k1 t0 k1 t0 b1 k0 k3 15 k2 t1) (arx k2 t1 b1 k1 k4 16 k3 t2 k3 t2 b1 k2 k0 17 k4 t0)) (setf b0 (mod64+ b0 k3) b1 (mod64+ b1 (mod64+ k4 t0)) b2 (mod64+ b2 (mod64+ k0 t1)) b3 (mod64+ b3 (mod64+ k1 18))) (store-words ciphertext ciphertext-start b0 b1 b2 b3) (values)))) (define-block-decryptor threefish256 32 (let* ((key (threefish-key context)) (tweak (threefish-tweak context)) (k0 (aref key 0)) (k1 (aref key 1)) (k2 (aref key 2)) (k3 (aref key 3)) (k4 (aref key 4)) (t0 (aref tweak 0)) (t1 (aref tweak 1)) (t2 (aref tweak 2))) (declare (type (simple-array (unsigned-byte 64) (5)) key) (type (simple-array (unsigned-byte 64) (3)) tweak) (type (unsigned-byte 64) k0 k1 k2 k3 k4 t0 t1 t2)) (with-words ((b0 b1 b2 b3) ciphertext ciphertext-start :big-endian nil :size 8) (setf b0 (mod64- b0 k3) b1 (mod64- b1 (mod64+ k4 t0)) b2 (mod64- b2 (mod64+ k0 t1)) b3 (mod64- b3 (mod64+ k1 18))) (macrolet ((arx (x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13) `(setf b3 (ror64 (logxor b3 b0) 32) b0 (mod64- b0 b3) b1 (ror64 (logxor b1 b2) 32) b2 (mod64- b2 b1) b1 (ror64 (logxor b1 b0) 58) b0 (mod64- b0 b1) b3 (ror64 (logxor b3 b2) 22) b2 (mod64- b2 b3) b3 (ror64 (logxor b3 b0) 46) b0 (mod64- b0 b3) b1 (ror64 (logxor b1 b2) 12) b2 (mod64- b2 b1) b1 (ror64 (logxor b1 b0) 25) b0 (mod64- b0 (mod64+ b1 ,x0)) b1 (mod64- b1 (mod64+ ,x1 ,x2)) b3 (ror64 (logxor b3 b2) 33) b2 (mod64- b2 (mod64+ b3 (mod64+ ,x3 ,x4))) b3 (mod64- b3 (mod64+ ,x5 ,x6)) b3 (ror64 (logxor b3 b0) 5) b0 (mod64- b0 b3) b1 (ror64 (logxor b1 b2) 37) b2 (mod64- b2 b1) b1 (ror64 (logxor b1 b0) 23) b0 (mod64- b0 b1) b3 (ror64 (logxor b3 b2) 40) b2 (mod64- b2 b3) b3 (ror64 (logxor b3 b0) 52) b0 (mod64- b0 b3) b1 (ror64 (logxor b1 b2) 57) b2 (mod64- b2 b1) b1 (ror64 (logxor b1 b0) 14) b0 (mod64- b0 (mod64+ b1 ,x7)) b1 (mod64- b1 (mod64+ ,x8 ,x9)) b3 (ror64 (logxor b3 b2) 16) b2 (mod64- b2 (mod64+ b3 (mod64+ ,x10 ,x11))) b3 (mod64- b3 (mod64+ ,x12 ,x13))))) (arx k2 k3 t2 k4 t0 k0 17 k1 k2 t1 k3 t2 k4 16) (arx k0 k1 t0 k2 t1 k3 15 k4 k0 t2 k1 t0 k2 14) (arx k3 k4 t1 k0 t2 k1 13 k2 k3 t0 k4 t1 k0 12) (arx k1 k2 t2 k3 t0 k4 11 k0 k1 t1 k2 t2 k3 10) (arx k4 k0 t0 k1 t1 k2 9 k3 k4 t2 k0 t0 k1 8) (arx k2 k3 t1 k4 t2 k0 7 k1 k2 t0 k3 t1 k4 6) (arx k0 k1 t2 k2 t0 k3 5 k4 k0 t1 k1 t2 k2 4) (arx k3 k4 t0 k0 t1 k1 3 k2 k3 t2 k4 t0 k0 2) (arx k1 k2 t1 k3 t2 k4 1 k0 k1 t0 k2 t1 k3 0)) (store-words plaintext plaintext-start b0 b1 b2 b3) (values)))) (defcipher threefish256 (:encrypt-function threefish256-encrypt-block) (:decrypt-function threefish256-decrypt-block) (:block-length 32) (:key-length (:fixed 32))) ;;; Implementation for blocks of 512 bits (defclass threefish512 (cipher 64-byte-block-mixin) ((key :accessor threefish-key :type (simple-array (unsigned-byte 64) (9))) (tweak :accessor threefish-tweak :initform (make-array 3 :element-type '(unsigned-byte 64) :initial-contents '(0 0 0)) :type (simple-array (unsigned-byte 64) (3))))) (defmethod shared-initialize :after ((cipher threefish512) slot-names &rest initargs &key (tweak nil tweak-p) &allow-other-keys) (declare (ignore initargs tweak-p)) (when tweak (threefish-set-tweak cipher tweak)) cipher) (defmethod schedule-key ((cipher threefish512) key) (threefish-set-key cipher key) cipher) (define-block-encryptor threefish512 64 (let* ((key (threefish-key context)) (tweak (threefish-tweak context)) (k0 (aref key 0)) (k1 (aref key 1)) (k2 (aref key 2)) (k3 (aref key 3)) (k4 (aref key 4)) (k5 (aref key 5)) (k6 (aref key 6)) (k7 (aref key 7)) (k8 (aref key 8)) (t0 (aref tweak 0)) (t1 (aref tweak 1)) (t2 (aref tweak 2))) (declare (type (simple-array (unsigned-byte 64) (9)) key) (type (simple-array (unsigned-byte 64) (3)) tweak) (type (unsigned-byte 64) k0 k1 k2 k3 k4 k5 k6 k7 k8 t0 t1 t2)) (with-words ((b0 b1 b2 b3 b4 b5 b6 b7) plaintext plaintext-start :big-endian nil :size 8) (macrolet ((arx (x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21) `(setf b1 (mod64+ b1 ,x0) b0 (mod64+ b0 (mod64+ b1 ,x1)) b1 (logxor (rol64 b1 46) b0) b3 (mod64+ b3 ,x2) b2 (mod64+ b2 (mod64+ b3 ,x3)) b3 (logxor (rol64 b3 36) b2) b5 (mod64+ b5 (mod64+ ,x4 ,x5)) b4 (mod64+ b4 (mod64+ b5 ,x6)) b5 (logxor (rol64 b5 19) b4) b7 (mod64+ b7 (mod64+ ,x7 ,x8)) b6 (mod64+ b6 (mod64+ b7 (mod64+ ,x9 ,x10))) b7 (logxor (rol64 b7 37) b6) b2 (mod64+ b2 b1) b1 (logxor (rol64 b1 33) b2) b4 (mod64+ b4 b7) b7 (logxor (rol64 b7 27) b4) b6 (mod64+ b6 b5) b5 (logxor (rol64 b5 14) b6) b0 (mod64+ b0 b3) b3 (logxor (rol64 b3 42) b0) b4 (mod64+ b4 b1) b1 (logxor (rol64 b1 17) b4) b6 (mod64+ b6 b3) b3 (logxor (rol64 b3 49) b6) b0 (mod64+ b0 b5) b5 (logxor (rol64 b5 36) b0) b2 (mod64+ b2 b7) b7 (logxor (rol64 b7 39) b2) b6 (mod64+ b6 b1) b1 (logxor (rol64 b1 44) b6) b0 (mod64+ b0 b7) b7 (logxor (rol64 b7 9) b0) b2 (mod64+ b2 b5) b5 (logxor (rol64 b5 54) b2) b4 (mod64+ b4 b3) b3 (logxor (rol64 b3 56) b4) b1 (mod64+ b1 ,x11) b0 (mod64+ b0 (mod64+ b1 ,x12)) b1 (logxor (rol64 b1 39) b0) b3 (mod64+ b3 ,x13) b2 (mod64+ b2 (mod64+ b3 ,x14)) b3 (logxor (rol64 b3 30) b2) b5 (mod64+ b5 (mod64+ ,x15 ,x16)) b4 (mod64+ b4 (mod64+ b5 ,x17)) b5 (logxor (rol64 b5 34) b4) b7 (mod64+ b7 (mod64+ ,x18 ,x19)) b6 (mod64+ b6 (mod64+ b7 (mod64+ ,x20 ,x21))) b7 (logxor (rol64 b7 24) b6) b2 (mod64+ b2 b1) b1 (logxor (rol64 b1 13) b2) b4 (mod64+ b4 b7) b7 (logxor (rol64 b7 50) b4) b6 (mod64+ b6 b5) b5 (logxor (rol64 b5 10) b6) b0 (mod64+ b0 b3) b3 (logxor (rol64 b3 17) b0) b4 (mod64+ b4 b1) b1 (logxor (rol64 b1 25) b4) b6 (mod64+ b6 b3) b3 (logxor (rol64 b3 29) b6) b0 (mod64+ b0 b5) b5 (logxor (rol64 b5 39) b0) b2 (mod64+ b2 b7) b7 (logxor (rol64 b7 43) b2) b6 (mod64+ b6 b1) b1 (logxor (rol64 b1 8) b6) b0 (mod64+ b0 b7) b7 (logxor (rol64 b7 35) b0) b2 (mod64+ b2 b5) b5 (logxor (rol64 b5 56) b2) b4 (mod64+ b4 b3) b3 (logxor (rol64 b3 22) b4)))) (arx k1 k0 k3 k2 k5 t0 k4 k7 0 k6 t1 k2 k1 k4 k3 k6 t1 k5 k8 1 k7 t2) (arx k3 k2 k5 k4 k7 t2 k6 k0 2 k8 t0 k4 k3 k6 k5 k8 t0 k7 k1 3 k0 t1) (arx k5 k4 k7 k6 k0 t1 k8 k2 4 k1 t2 k6 k5 k8 k7 k1 t2 k0 k3 5 k2 t0) (arx k7 k6 k0 k8 k2 t0 k1 k4 6 k3 t1 k8 k7 k1 k0 k3 t1 k2 k5 7 k4 t2) (arx k0 k8 k2 k1 k4 t2 k3 k6 8 k5 t0 k1 k0 k3 k2 k5 t0 k4 k7 9 k6 t1) (arx k2 k1 k4 k3 k6 t1 k5 k8 10 k7 t2 k3 k2 k5 k4 k7 t2 k6 k0 11 k8 t0) (arx k4 k3 k6 k5 k8 t0 k7 k1 12 k0 t1 k5 k4 k7 k6 k0 t1 k8 k2 13 k1 t2) (arx k6 k5 k8 k7 k1 t2 k0 k3 14 k2 t0 k7 k6 k0 k8 k2 t0 k1 k4 15 k3 t1) (arx k8 k7 k1 k0 k3 t1 k2 k5 16 k4 t2 k0 k8 k2 k1 k4 t2 k3 k6 17 k5 t0)) (setf b0 (mod64+ b0 k0) b1 (mod64+ b1 k1) b2 (mod64+ b2 k2) b3 (mod64+ b3 k3) b4 (mod64+ b4 k4) b5 (mod64+ b5 (mod64+ k5 t0)) b6 (mod64+ b6 (mod64+ k6 t1)) b7 (mod64+ b7 (mod64+ k7 18))) (store-words ciphertext ciphertext-start b0 b1 b2 b3 b4 b5 b6 b7) (values)))) (define-block-decryptor threefish512 64 (let* ((key (threefish-key context)) (tweak (threefish-tweak context)) (k0 (aref key 0)) (k1 (aref key 1)) (k2 (aref key 2)) (k3 (aref key 3)) (k4 (aref key 4)) (k5 (aref key 5)) (k6 (aref key 6)) (k7 (aref key 7)) (k8 (aref key 8)) (t0 (aref tweak 0)) (t1 (aref tweak 1)) (t2 (aref tweak 2))) (declare (type (simple-array (unsigned-byte 64) (9)) key) (type (simple-array (unsigned-byte 64) (3)) tweak) (type (unsigned-byte 64) k0 k1 k2 k3 k4 k5 k6 k7 k8 t0 t1 t2)) (with-words ((b0 b1 b2 b3 b4 b5 b6 b7) ciphertext ciphertext-start :big-endian nil :size 8) (setf b0 (mod64- b0 k0) b1 (mod64- b1 k1) b2 (mod64- b2 k2) b3 (mod64- b3 k3) b4 (mod64- b4 k4) b5 (mod64- b5 (mod64+ k5 t0)) b6 (mod64- b6 (mod64+ k6 t1)) b7 (mod64- b7 (mod64+ k7 18))) (macrolet ((arx (x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21) `(setf b3 (ror64 (logxor b3 b4) 22) b4 (mod64- b4 b3) b5 (ror64 (logxor b5 b2) 56) b2 (mod64- b2 b5) b7 (ror64 (logxor b7 b0) 35) b0 (mod64- b0 b7) b1 (ror64 (logxor b1 b6) 8) b6 (mod64- b6 b1) b7 (ror64 (logxor b7 b2) 43) b2 (mod64- b2 b7) b5 (ror64 (logxor b5 b0) 39) b0 (mod64- b0 b5) b3 (ror64 (logxor b3 b6) 29) b6 (mod64- b6 b3) b1 (ror64 (logxor b1 b4) 25) b4 (mod64- b4 b1) b3 (ror64 (logxor b3 b0) 17) b0 (mod64- b0 b3) b5 (ror64 (logxor b5 b6) 10) b6 (mod64- b6 b5) b7 (ror64 (logxor b7 b4) 50) b4 (mod64- b4 b7) b1 (ror64 (logxor b1 b2) 13) b2 (mod64- b2 b1) b7 (ror64 (logxor b7 b6) 24) b6 (mod64- b6 (mod64+ b7 (mod64+ ,x0 ,x1))) b7 (mod64- b7 (mod64+ ,x2 ,x3)) b5 (ror64 (logxor b5 b4) 34) b4 (mod64- b4 (mod64+ b5 ,x4)) b5 (mod64- b5 (mod64+ ,x5 ,x6)) b3 (ror64 (logxor b3 b2) 30) b2 (mod64- b2 (mod64+ b3 ,x7)) b3 (mod64- b3 ,x8) b1 (ror64 (logxor b1 b0) 39) b0 (mod64- b0 (mod64+ b1 ,x9)) b1 (mod64- b1 ,x10) b3 (ror64 (logxor b3 b4) 56) b4 (mod64- b4 b3) b5 (ror64 (logxor b5 b2) 54) b2 (mod64- b2 b5) b7 (ror64 (logxor b7 b0) 9) b0 (mod64- b0 b7) b1 (ror64 (logxor b1 b6) 44) b6 (mod64- b6 b1) b7 (ror64 (logxor b7 b2) 39) b2 (mod64- b2 b7) b5 (ror64 (logxor b5 b0) 36) b0 (mod64- b0 b5) b3 (ror64 (logxor b3 b6) 49) b6 (mod64- b6 b3) b1 (ror64 (logxor b1 b4) 17) b4 (mod64- b4 b1) b3 (ror64 (logxor b3 b0) 42) b0 (mod64- b0 b3) b5 (ror64 (logxor b5 b6) 14) b6 (mod64- b6 b5) b7 (ror64 (logxor b7 b4) 27) b4 (mod64- b4 b7) b1 (ror64 (logxor b1 b2) 33) b2 (mod64- b2 b1) b7 (ror64 (logxor b7 b6) 37) b6 (mod64- b6 (mod64+ b7 (mod64+ ,x11 ,x12))) b7 (mod64- b7 (mod64+ ,x13 ,x14)) b5 (ror64 (logxor b5 b4) 19) b4 (mod64- b4 (mod64+ b5 ,x15)) b5 (mod64- b5 (mod64+ ,x16 ,x17)) b3 (ror64 (logxor b3 b2) 36) b2 (mod64- b2 (mod64+ b3 ,x18)) b3 (mod64- b3 ,x19) b1 (ror64 (logxor b1 b0) 46) b0 (mod64- b0 (mod64+ b1 ,x20)) b1 (mod64- b1 ,x21)))) (arx k5 t0 k6 17 k3 k4 t2 k1 k2 k8 k0 k4 t2 k5 16 k2 k3 t1 k0 k1 k7 k8) (arx k3 t1 k4 15 k1 k2 t0 k8 k0 k6 k7 k2 t0 k3 14 k0 k1 t2 k7 k8 k5 k6) (arx k1 t2 k2 13 k8 k0 t1 k6 k7 k4 k5 k0 t1 k1 12 k7 k8 t0 k5 k6 k3 k4) (arx k8 t0 k0 11 k6 k7 t2 k4 k5 k2 k3 k7 t2 k8 10 k5 k6 t1 k3 k4 k1 k2) (arx k6 t1 k7 9 k4 k5 t0 k2 k3 k0 k1 k5 t0 k6 8 k3 k4 t2 k1 k2 k8 k0) (arx k4 t2 k5 7 k2 k3 t1 k0 k1 k7 k8 k3 t1 k4 6 k1 k2 t0 k8 k0 k6 k7) (arx k2 t0 k3 5 k0 k1 t2 k7 k8 k5 k6 k1 t2 k2 4 k8 k0 t1 k6 k7 k4 k5) (arx k0 t1 k1 3 k7 k8 t0 k5 k6 k3 k4 k8 t0 k0 2 k6 k7 t2 k4 k5 k2 k3) (arx k7 t2 k8 1 k5 k6 t1 k3 k4 k1 k2 k6 t1 k7 0 k4 k5 t0 k2 k3 k0 k1)) (store-words plaintext plaintext-start b0 b1 b2 b3 b4 b5 b6 b7) (values)))) (defcipher threefish512 (:encrypt-function threefish512-encrypt-block) (:decrypt-function threefish512-decrypt-block) (:block-length 64) (:key-length (:fixed 64))) ;;; Implementation for blocks of 1024 bits (defclass threefish1024 (cipher 128-byte-block-mixin) ((key :accessor threefish-key :type (simple-array (unsigned-byte 64) (17))) (tweak :accessor threefish-tweak :initform (make-array 3 :element-type '(unsigned-byte 64) :initial-contents '(0 0 0)) :type (simple-array (unsigned-byte 64) (3))))) (defmethod shared-initialize :after ((cipher threefish1024) slot-names &rest initargs &key (tweak nil tweak-p) &allow-other-keys) (declare (ignore initargs tweak-p)) (when tweak (threefish-set-tweak cipher tweak)) cipher) (defmethod schedule-key ((cipher threefish1024) key) (threefish-set-key cipher key) cipher) (define-block-encryptor threefish1024 128 (let* ((key (threefish-key context)) (tweak (threefish-tweak context)) (k0 (aref key 0)) (k1 (aref key 1)) (k2 (aref key 2)) (k3 (aref key 3)) (k4 (aref key 4)) (k5 (aref key 5)) (k6 (aref key 6)) (k7 (aref key 7)) (k8 (aref key 8)) (k9 (aref key 9)) (k10 (aref key 10)) (k11 (aref key 11)) (k12 (aref key 12)) (k13 (aref key 13)) (k14 (aref key 14)) (k15 (aref key 15)) (k16 (aref key 16)) (t0 (aref tweak 0)) (t1 (aref tweak 1)) (t2 (aref tweak 2))) (declare (type (simple-array (unsigned-byte 64) (17)) key) (type (simple-array (unsigned-byte 64) (3)) tweak) (type (unsigned-byte 64) k0 k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13 k14 k15 k16 t0 t1 t2)) (with-words ((b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15) plaintext plaintext-start :big-endian nil :size 8) (macrolet ((arx (x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 x37) `(setf b1 (mod64+ b1 ,x0) b0 (mod64+ b0 (mod64+ b1 ,x1)) b1 (logxor (rol64 b1 24) b0) b3 (mod64+ b3 ,x2) b2 (mod64+ b2 (mod64+ b3 ,x3)) b3 (logxor (rol64 b3 13) b2) b5 (mod64+ b5 ,x4) b4 (mod64+ b4 (mod64+ b5 ,x5)) b5 (logxor (rol64 b5 8) b4) b7 (mod64+ b7 ,x6) b6 (mod64+ b6 (mod64+ b7 ,x7)) b7 (logxor (rol64 b7 47) b6) b9 (mod64+ b9 ,x8) b8 (mod64+ b8 (mod64+ b9 ,x9)) b9 (logxor (rol64 b9 8) b8) b11 (mod64+ b11 ,x10) b10 (mod64+ b10 (mod64+ b11 ,x11)) b11 (logxor (rol64 b11 17) b10) b13 (mod64+ b13 (mod64+ ,x12 ,x13)) b12 (mod64+ b12 (mod64+ b13 ,x14)) b13 (logxor (rol64 b13 22) b12) b15 (mod64+ b15 (mod64+ ,x15 ,x16)) b14 (mod64+ b14 (mod64+ b15 (mod64+ ,x17 ,x18))) b15 (logxor (rol64 b15 37) b14) b0 (mod64+ b0 b9) b9 (logxor (rol64 b9 38) b0) b2 (mod64+ b2 b13) b13 (logxor (rol64 b13 19) b2) b6 (mod64+ b6 b11) b11 (logxor (rol64 b11 10) b6) b4 (mod64+ b4 b15) b15 (logxor (rol64 b15 55) b4) b10 (mod64+ b10 b7) b7 (logxor (rol64 b7 49) b10) b12 (mod64+ b12 b3) b3 (logxor (rol64 b3 18) b12) b14 (mod64+ b14 b5) b5 (logxor (rol64 b5 23) b14) b8 (mod64+ b8 b1) b1 (logxor (rol64 b1 52) b8) b0 (mod64+ b0 b7) b7 (logxor (rol64 b7 33) b0) b2 (mod64+ b2 b5) b5 (logxor (rol64 b5 4) b2) b4 (mod64+ b4 b3) b3 (logxor (rol64 b3 51) b4) b6 (mod64+ b6 b1) b1 (logxor (rol64 b1 13) b6) b12 (mod64+ b12 b15) b15 (logxor (rol64 b15 34) b12) b14 (mod64+ b14 b13) b13 (logxor (rol64 b13 41) b14) b8 (mod64+ b8 b11) b11 (logxor (rol64 b11 59) b8) b10 (mod64+ b10 b9) b9 (logxor (rol64 b9 17) b10) b0 (mod64+ b0 b15) b15 (logxor (rol64 b15 5) b0) b2 (mod64+ b2 b11) b11 (logxor (rol64 b11 20) b2) b6 (mod64+ b6 b13) b13 (logxor (rol64 b13 48) b6) b4 (mod64+ b4 b9) b9 (logxor (rol64 b9 41) b4) b14 (mod64+ b14 b1) b1 (logxor (rol64 b1 47) b14) b8 (mod64+ b8 b5) b5 (logxor (rol64 b5 28) b8) b10 (mod64+ b10 b3) b3 (logxor (rol64 b3 16) b10) b12 (mod64+ b12 b7) b7 (logxor (rol64 b7 25) b12) b1 (mod64+ b1 ,x19) b0 (mod64+ b0 (mod64+ b1 ,x20)) b1 (logxor (rol64 b1 41) b0) b3 (mod64+ b3 ,x21) b2 (mod64+ b2 (mod64+ b3 ,x22)) b3 (logxor (rol64 b3 9) b2) b5 (mod64+ b5 ,x23) b4 (mod64+ b4 (mod64+ b5 ,x24)) b5 (logxor (rol64 b5 37) b4) b7 (mod64+ b7 ,x25) b6 (mod64+ b6 (mod64+ b7 ,x26)) b7 (logxor (rol64 b7 31) b6) b9 (mod64+ b9 ,x27) b8 (mod64+ b8 (mod64+ b9 ,x28)) b9 (logxor (rol64 b9 12) b8) b11 (mod64+ b11 ,x29) b10 (mod64+ b10 (mod64+ b11 ,x30)) b11 (logxor (rol64 b11 47) b10) b13 (mod64+ b13 (mod64+ ,x31 ,x32)) b12 (mod64+ b12 (mod64+ b13 ,x33)) b13 (logxor (rol64 b13 44) b12) b15 (mod64+ b15 (mod64+ ,x34 ,x35)) b14 (mod64+ b14 (mod64+ b15 (mod64+ ,x36 ,x37))) b15 (logxor (rol64 b15 30) b14) b0 (mod64+ b0 b9) b9 (logxor (rol64 b9 16) b0) b2 (mod64+ b2 b13) b13 (logxor (rol64 b13 34) b2) b6 (mod64+ b6 b11) b11 (logxor (rol64 b11 56) b6) b4 (mod64+ b4 b15) b15 (logxor (rol64 b15 51) b4) b10 (mod64+ b10 b7) b7 (logxor (rol64 b7 4) b10) b12 (mod64+ b12 b3) b3 (logxor (rol64 b3 53) b12) b14 (mod64+ b14 b5) b5 (logxor (rol64 b5 42) b14) b8 (mod64+ b8 b1) b1 (logxor (rol64 b1 41) b8) b0 (mod64+ b0 b7) b7 (logxor (rol64 b7 31) b0) b2 (mod64+ b2 b5) b5 (logxor (rol64 b5 44) b2) b4 (mod64+ b4 b3) b3 (logxor (rol64 b3 47) b4) b6 (mod64+ b6 b1) b1 (logxor (rol64 b1 46) b6) b12 (mod64+ b12 b15) b15 (logxor (rol64 b15 19) b12) b14 (mod64+ b14 b13) b13 (logxor (rol64 b13 42) b14) b8 (mod64+ b8 b11) b11 (logxor (rol64 b11 44) b8) b10 (mod64+ b10 b9) b9 (logxor (rol64 b9 25) b10) b0 (mod64+ b0 b15) b15 (logxor (rol64 b15 9) b0) b2 (mod64+ b2 b11) b11 (logxor (rol64 b11 48) b2) b6 (mod64+ b6 b13) b13 (logxor (rol64 b13 35) b6) b4 (mod64+ b4 b9) b9 (logxor (rol64 b9 52) b4) b14 (mod64+ b14 b1) b1 (logxor (rol64 b1 23) b14) b8 (mod64+ b8 b5) b5 (logxor (rol64 b5 31) b8) b10 (mod64+ b10 b3) b3 (logxor (rol64 b3 37) b10) b12 (mod64+ b12 b7) b7 (logxor (rol64 b7 20) b12)))) (arx k1 k0 k3 k2 k5 k4 k7 k6 k9 k8 k11 k10 k13 t0 k12 k15 0 k14 t1 k2 k1 k4 k3 k6 k5 k8 k7 k10 k9 k12 k11 k14 t1 k13 k16 1 k15 t2) (arx k3 k2 k5 k4 k7 k6 k9 k8 k11 k10 k13 k12 k15 t2 k14 k0 2 k16 t0 k4 k3 k6 k5 k8 k7 k10 k9 k12 k11 k14 k13 k16 t0 k15 k1 3 k0 t1) (arx k5 k4 k7 k6 k9 k8 k11 k10 k13 k12 k15 k14 k0 t1 k16 k2 4 k1 t2 k6 k5 k8 k7 k10 k9 k12 k11 k14 k13 k16 k15 k1 t2 k0 k3 5 k2 t0) (arx k7 k6 k9 k8 k11 k10 k13 k12 k15 k14 k0 k16 k2 t0 k1 k4 6 k3 t1 k8 k7 k10 k9 k12 k11 k14 k13 k16 k15 k1 k0 k3 t1 k2 k5 7 k4 t2) (arx k9 k8 k11 k10 k13 k12 k15 k14 k0 k16 k2 k1 k4 t2 k3 k6 8 k5 t0 k10 k9 k12 k11 k14 k13 k16 k15 k1 k0 k3 k2 k5 t0 k4 k7 9 k6 t1) (arx k11 k10 k13 k12 k15 k14 k0 k16 k2 k1 k4 k3 k6 t1 k5 k8 10 k7 t2 k12 k11 k14 k13 k16 k15 k1 k0 k3 k2 k5 k4 k7 t2 k6 k9 11 k8 t0) (arx k13 k12 k15 k14 k0 k16 k2 k1 k4 k3 k6 k5 k8 t0 k7 k10 12 k9 t1 k14 k13 k16 k15 k1 k0 k3 k2 k5 k4 k7 k6 k9 t1 k8 k11 13 k10 t2) (arx k15 k14 k0 k16 k2 k1 k4 k3 k6 k5 k8 k7 k10 t2 k9 k12 14 k11 t0 k16 k15 k1 k0 k3 k2 k5 k4 k7 k6 k9 k8 k11 t0 k10 k13 15 k12 t1) (arx k0 k16 k2 k1 k4 k3 k6 k5 k8 k7 k10 k9 k12 t1 k11 k14 16 k13 t2 k1 k0 k3 k2 k5 k4 k7 k6 k9 k8 k11 k10 k13 t2 k12 k15 17 k14 t0) (arx k2 k1 k4 k3 k6 k5 k8 k7 k10 k9 k12 k11 k14 t0 k13 k16 18 k15 t1 k3 k2 k5 k4 k7 k6 k9 k8 k11 k10 k13 k12 k15 t1 k14 k0 19 k16 t2)) (setf b0 (mod64+ b0 k3) b1 (mod64+ b1 k4) b2 (mod64+ b2 k5) b3 (mod64+ b3 k6) b4 (mod64+ b4 k7) b5 (mod64+ b5 k8) b6 (mod64+ b6 k9) b7 (mod64+ b7 k10) b8 (mod64+ b8 k11) b9 (mod64+ b9 k12) b10 (mod64+ b10 k13) b11 (mod64+ b11 k14) b12 (mod64+ b12 k15) b13 (mod64+ b13 (mod64+ k16 t2)) b14 (mod64+ b14 (mod64+ k0 t0)) b15 (mod64+ b15 (mod64+ k1 20))) (store-words ciphertext ciphertext-start b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15) (values)))) (define-block-decryptor threefish1024 128 (let* ((key (threefish-key context)) (tweak (threefish-tweak context)) (k0 (aref key 0)) (k1 (aref key 1)) (k2 (aref key 2)) (k3 (aref key 3)) (k4 (aref key 4)) (k5 (aref key 5)) (k6 (aref key 6)) (k7 (aref key 7)) (k8 (aref key 8)) (k9 (aref key 9)) (k10 (aref key 10)) (k11 (aref key 11)) (k12 (aref key 12)) (k13 (aref key 13)) (k14 (aref key 14)) (k15 (aref key 15)) (k16 (aref key 16)) (t0 (aref tweak 0)) (t1 (aref tweak 1)) (t2 (aref tweak 2))) (declare (type (simple-array (unsigned-byte 64) (17)) key) (type (simple-array (unsigned-byte 64) (3)) tweak) (type (unsigned-byte 64) k0 k1 k2 k3 k4 k5 k6 k7 k8 k9 k10 k11 k12 k13 k14 k15 k16 t0 t1 t2)) (with-words ((b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15) ciphertext ciphertext-start :big-endian nil :size 8) (setf b0 (mod64- b0 k3) b1 (mod64- b1 k4) b2 (mod64- b2 k5) b3 (mod64- b3 k6) b4 (mod64- b4 k7) b5 (mod64- b5 k8) b6 (mod64- b6 k9) b7 (mod64- b7 k10) b8 (mod64- b8 k11) b9 (mod64- b9 k12) b10 (mod64- b10 k13) b11 (mod64- b11 k14) b12 (mod64- b12 k15) b13 (mod64- b13 (mod64+ k16 t2)) b14 (mod64- b14 (mod64+ k0 t0)) b15 (mod64- b15 (mod64+ k1 20))) (macrolet ((arx (x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25 x26 x27 x28 x29 x30 x31 x32 x33 x34 x35 x36 x37) `(setf b7 (ror64 (logxor b7 b12) 20) b12 (mod64- b12 b7) b3 (ror64 (logxor b3 b10) 37) b10 (mod64- b10 b3) b5 (ror64 (logxor b5 b8) 31) b8 (mod64- b8 b5) b1 (ror64 (logxor b1 b14) 23) b14 (mod64- b14 b1) b9 (ror64 (logxor b9 b4) 52) b4 (mod64- b4 b9) b13 (ror64 (logxor b13 b6) 35) b6 (mod64- b6 b13) b11 (ror64 (logxor b11 b2) 48) b2 (mod64- b2 b11) b15 (ror64 (logxor b15 b0) 9) b0 (mod64- b0 b15) b9 (ror64 (logxor b9 b10) 25) b10 (mod64- b10 b9) b11 (ror64 (logxor b11 b8) 44) b8 (mod64- b8 b11) b13 (ror64 (logxor b13 b14) 42) b14 (mod64- b14 b13) b15 (ror64 (logxor b15 b12) 19) b12 (mod64- b12 b15) b1 (ror64 (logxor b1 b6) 46) b6 (mod64- b6 b1) b3 (ror64 (logxor b3 b4) 47) b4 (mod64- b4 b3) b5 (ror64 (logxor b5 b2) 44) b2 (mod64- b2 b5) b7 (ror64 (logxor b7 b0) 31) b0 (mod64- b0 b7) b1 (ror64 (logxor b1 b8) 41) b8 (mod64- b8 b1) b5 (ror64 (logxor b5 b14) 42) b14 (mod64- b14 b5) b3 (ror64 (logxor b3 b12) 53) b12 (mod64- b12 b3) b7 (ror64 (logxor b7 b10) 4) b10 (mod64- b10 b7) b15 (ror64 (logxor b15 b4) 51) b4 (mod64- b4 b15) b11 (ror64 (logxor b11 b6) 56) b6 (mod64- b6 b11) b13 (ror64 (logxor b13 b2) 34) b2 (mod64- b2 b13) b9 (ror64 (logxor b9 b0) 16) b0 (mod64- b0 b9) b15 (ror64 (logxor b15 b14) 30) b14 (mod64- b14 (mod64+ b15 (mod64+ ,x0 ,x1))) b15 (mod64- b15 (mod64+ ,x2 ,x3)) b13 (ror64 (logxor b13 b12) 44) b12 (mod64- b12 (mod64+ b13 ,x4)) b13 (mod64- b13 (mod64+ ,x5 ,x6)) b11 (ror64 (logxor b11 b10) 47) b10 (mod64- b10 (mod64+ b11 ,x7)) b11 (mod64- b11 ,x8) b9 (ror64 (logxor b9 b8) 12) b8 (mod64- b8 (mod64+ b9 ,x9)) b9 (mod64- b9 ,x10) b7 (ror64 (logxor b7 b6) 31) b6 (mod64- b6 (mod64+ b7 ,x11)) b7 (mod64- b7 ,x12) b5 (ror64 (logxor b5 b4) 37) b4 (mod64- b4 (mod64+ b5 ,x13)) b5 (mod64- b5 ,x14) b3 (ror64 (logxor b3 b2) 9) b2 (mod64- b2 (mod64+ b3 ,x15)) b3 (mod64- b3 ,x16) b1 (ror64 (logxor b1 b0) 41) b0 (mod64- b0 (mod64+ b1 ,x17)) b1 (mod64- b1 ,x18) b7 (ror64 (logxor b7 b12) 25) b12 (mod64- b12 b7) b3 (ror64 (logxor b3 b10) 16) b10 (mod64- b10 b3) b5 (ror64 (logxor b5 b8) 28) b8 (mod64- b8 b5) b1 (ror64 (logxor b1 b14) 47) b14 (mod64- b14 b1) b9 (ror64 (logxor b9 b4) 41) b4 (mod64- b4 b9) b13 (ror64 (logxor b13 b6) 48) b6 (mod64- b6 b13) b11 (ror64 (logxor b11 b2) 20) b2 (mod64- b2 b11) b15 (ror64 (logxor b0 b15) 5) b0 (mod64- b0 b15) b9 (ror64 (logxor b9 b10) 17) b10 (mod64- b10 b9) b11 (ror64 (logxor b11 b8) 59) b8 (mod64- b8 b11) b13 (ror64 (logxor b13 b14) 41) b14 (mod64- b14 b13) b15 (ror64 (logxor b15 b12) 34) b12 (mod64- b12 b15) b1 (ror64 (logxor b1 b6) 13) b6 (mod64- b6 b1) b3 (ror64 (logxor b3 b4) 51) b4 (mod64- b4 b3) b5 (ror64 (logxor b5 b2) 4) b2 (mod64- b2 b5) b7 (ror64 (logxor b7 b0) 33) b0 (mod64- b0 b7) b1 (ror64 (logxor b1 b8) 52) b8 (mod64- b8 b1) b5 (ror64 (logxor b5 b14) 23) b14 (mod64- b14 b5) b3 (ror64 (logxor b3 b12) 18) b12 (mod64- b12 b3) b7 (ror64 (logxor b7 b10) 49) b10 (mod64- b10 b7) b15 (ror64 (logxor b15 b4) 55) b4 (mod64- b4 b15) b11 (ror64 (logxor b11 b6) 10) b6 (mod64- b6 b11) b13 (ror64 (logxor b13 b2) 19) b2 (mod64- b2 b13) b9 (ror64 (logxor b9 b0) 38) b0 (mod64- b0 b9) b15 (ror64 (logxor b15 b14) 37) b14 (mod64- b14 (mod64+ b15 (mod64+ ,x19 ,x20))) b15 (mod64- b15 (mod64+ ,x21 ,x22)) b13 (ror64 (logxor b13 b12) 22) b12 (mod64- b12 (mod64+ b13 ,x23)) b13 (mod64- b13 (mod64+ ,x24 ,x25)) b11 (ror64 (logxor b11 b10) 17) b10 (mod64- b10 (mod64+ b11 ,x26)) b11 (mod64- b11 ,x27) b9 (ror64 (logxor b9 b8) 8) b8 (mod64- b8 (mod64+ b9 ,x28)) b9 (mod64- b9 ,x29) b7 (ror64 (logxor b7 b6) 47) b6 (mod64- b6 (mod64+ b7 ,x30)) b7 (mod64- b7 ,x31) b5 (ror64 (logxor b5 b4) 8) b4 (mod64- b4 (mod64+ b5 ,x32)) b5 (mod64- b5 ,x33) b3 (ror64 (logxor b3 b2) 13) b2 (mod64- b2 (mod64+ b3 ,x34)) b3 (mod64- b3 ,x35) b1 (ror64 (logxor b1 b0) 24) b0 (mod64- b0 (mod64+ b1 ,x36)) b1 (mod64- b1 ,x37)))) (arx k16 t2 k0 19 k14 k15 t1 k12 k13 k10 k11 k8 k9 k6 k7 k4 k5 k2 k3 k15 t1 k16 18 k13 k14 t0 k11 k12 k9 k10 k7 k8 k5 k6 k3 k4 k1 k2) (arx k14 t0 k15 17 k12 k13 t2 k10 k11 k8 k9 k6 k7 k4 k5 k2 k3 k0 k1 k13 t2 k14 16 k11 k12 t1 k9 k10 k7 k8 k5 k6 k3 k4 k1 k2 k16 k0) (arx k12 t1 k13 15 k10 k11 t0 k8 k9 k6 k7 k4 k5 k2 k3 k0 k1 k15 k16 k11 t0 k12 14 k9 k10 t2 k7 k8 k5 k6 k3 k4 k1 k2 k16 k0 k14 k15) (arx k10 t2 k11 13 k8 k9 t1 k6 k7 k4 k5 k2 k3 k0 k1 k15 k16 k13 k14 k9 t1 k10 12 k7 k8 t0 k5 k6 k3 k4 k1 k2 k16 k0 k14 k15 k12 k13) (arx k8 t0 k9 11 k6 k7 t2 k4 k5 k2 k3 k0 k1 k15 k16 k13 k14 k11 k12 k7 t2 k8 10 k5 k6 t1 k3 k4 k1 k2 k16 k0 k14 k15 k12 k13 k10 k11) (arx k6 t1 k7 9 k4 k5 t0 k2 k3 k0 k1 k15 k16 k13 k14 k11 k12 k9 k10 k5 t0 k6 8 k3 k4 t2 k1 k2 k16 k0 k14 k15 k12 k13 k10 k11 k8 k9) (arx k4 t2 k5 7 k2 k3 t1 k0 k1 k15 k16 k13 k14 k11 k12 k9 k10 k7 k8 k3 t1 k4 6 k1 k2 t0 k16 k0 k14 k15 k12 k13 k10 k11 k8 k9 k6 k7) (arx k2 t0 k3 5 k0 k1 t2 k15 k16 k13 k14 k11 k12 k9 k10 k7 k8 k5 k6 k1 t2 k2 4 k16 k0 t1 k14 k15 k12 k13 k10 k11 k8 k9 k6 k7 k4 k5) (arx k0 t1 k1 3 k15 k16 t0 k13 k14 k11 k12 k9 k10 k7 k8 k5 k6 k3 k4 k16 t0 k0 2 k14 k15 t2 k12 k13 k10 k11 k8 k9 k6 k7 k4 k5 k2 k3) (arx k15 t2 k16 1 k13 k14 t1 k11 k12 k9 k10 k7 k8 k5 k6 k3 k4 k1 k2 k14 t1 k15 0 k12 k13 t0 k10 k11 k8 k9 k6 k7 k4 k5 k2 k3 k0 k1)) (store-words plaintext plaintext-start b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15) (values)))) (defcipher threefish1024 (:encrypt-function threefish1024-encrypt-block) (:decrypt-function threefish1024-decrypt-block) (:block-length 128) (:key-length (:fixed 128))) ironclad-0.57/src/ciphers/twofish.lisp000066400000000000000000000775761420372057600200740ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; twofish.lisp -- implementation of Counterpane's Twofish AES candidate (in-package :crypto) (in-ironclad-readtable) ;;; various constant data arrays used by Twofish (declaim (type (simple-octet-vector 256) +twofish-q0+ +twofish-q1+)) (declaim (type (simple-octet-vector 255) +twofish-exp-to-poly+ +twofish-poly-to-exp+)) (defconst +twofish-q0+ #8@(#xA9 #x67 #xB3 #xE8 #x04 #xFD #xA3 #x76 #x9A #x92 #x80 #x78 #xE4 #xDD #xD1 #x38 #x0D #xC6 #x35 #x98 #x18 #xF7 #xEC #x6C #x43 #x75 #x37 #x26 #xFA #x13 #x94 #x48 #xF2 #xD0 #x8B #x30 #x84 #x54 #xDF #x23 #x19 #x5B #x3D #x59 #xF3 #xAE #xA2 #x82 #x63 #x01 #x83 #x2E #xD9 #x51 #x9B #x7C #xA6 #xEB #xA5 #xBE #x16 #x0C #xE3 #x61 #xC0 #x8C #x3A #xF5 #x73 #x2C #x25 #x0B #xBB #x4E #x89 #x6B #x53 #x6A #xB4 #xF1 #xE1 #xE6 #xBD #x45 #xE2 #xF4 #xB6 #x66 #xCC #x95 #x03 #x56 #xD4 #x1C #x1E #xD7 #xFB #xC3 #x8E #xB5 #xE9 #xCF #xBF #xBA #xEA #x77 #x39 #xAF #x33 #xC9 #x62 #x71 #x81 #x79 #x09 #xAD #x24 #xCD #xF9 #xD8 #xE5 #xC5 #xB9 #x4D #x44 #x08 #x86 #xE7 #xA1 #x1D #xAA #xED #x06 #x70 #xB2 #xD2 #x41 #x7B #xA0 #x11 #x31 #xC2 #x27 #x90 #x20 #xF6 #x60 #xFF #x96 #x5C #xB1 #xAB #x9E #x9C #x52 #x1B #x5F #x93 #x0A #xEF #x91 #x85 #x49 #xEE #x2D #x4F #x8F #x3B #x47 #x87 #x6D #x46 #xD6 #x3E #x69 #x64 #x2A #xCE #xCB #x2F #xFC #x97 #x05 #x7A #xAC #x7F #xD5 #x1A #x4B #x0E #xA7 #x5A #x28 #x14 #x3F #x29 #x88 #x3C #x4C #x02 #xB8 #xDA #xB0 #x17 #x55 #x1F #x8A #x7D #x57 #xC7 #x8D #x74 #xB7 #xC4 #x9F #x72 #x7E #x15 #x22 #x12 #x58 #x07 #x99 #x34 #x6E #x50 #xDE #x68 #x65 #xBC #xDB #xF8 #xC8 #xA8 #x2B #x40 #xDC #xFE #x32 #xA4 #xCA #x10 #x21 #xF0 #xD3 #x5D #x0F #x00 #x6F #x9D #x36 #x42 #x4A #x5E #xC1 #xE0)) (defconst +twofish-q1+ #8@(#x75 #xF3 #xC6 #xF4 #xDB #x7B #xFB #xC8 #x4A #xD3 #xE6 #x6B #x45 #x7D #xE8 #x4B #xD6 #x32 #xD8 #xFD #x37 #x71 #xF1 #xE1 #x30 #x0F #xF8 #x1B #x87 #xFA #x06 #x3F #x5E #xBA #xAE #x5B #x8A #x00 #xBC #x9D #x6D #xC1 #xB1 #x0E #x80 #x5D #xD2 #xD5 #xA0 #x84 #x07 #x14 #xB5 #x90 #x2C #xA3 #xB2 #x73 #x4C #x54 #x92 #x74 #x36 #x51 #x38 #xB0 #xBD #x5A #xFC #x60 #x62 #x96 #x6C #x42 #xF7 #x10 #x7C #x28 #x27 #x8C #x13 #x95 #x9C #xC7 #x24 #x46 #x3B #x70 #xCA #xE3 #x85 #xCB #x11 #xD0 #x93 #xB8 #xA6 #x83 #x20 #xFF #x9F #x77 #xC3 #xCC #x03 #x6F #x08 #xBF #x40 #xE7 #x2B #xE2 #x79 #x0C #xAA #x82 #x41 #x3A #xEA #xB9 #xE4 #x9A #xA4 #x97 #x7E #xDA #x7A #x17 #x66 #x94 #xA1 #x1D #x3D #xF0 #xDE #xB3 #x0B #x72 #xA7 #x1C #xEF #xD1 #x53 #x3E #x8F #x33 #x26 #x5F #xEC #x76 #x2A #x49 #x81 #x88 #xEE #x21 #xC4 #x1A #xEB #xD9 #xC5 #x39 #x99 #xCD #xAD #x31 #x8B #x01 #x18 #x23 #xDD #x1F #x4E #x2D #xF9 #x48 #x4F #xF2 #x65 #x8E #x78 #x5C #x58 #x19 #x8D #xE5 #x98 #x57 #x67 #x7F #x05 #x64 #xAF #x63 #xB6 #xFE #xF5 #xB7 #x3C #xA5 #xCE #xE9 #x68 #x44 #xE0 #x4D #x43 #x69 #x29 #x2E #xAC #x15 #x59 #xA8 #x0A #x9E #x6E #x47 #xDF #x34 #x35 #x6A #xCF #xDC #x22 #xC9 #xC0 #x9B #x89 #xD4 #xED #xAB #x12 #xA2 #x0D #x52 #xBB #x02 #x2F #xA9 #xD7 #x61 #x1E #xB4 #x50 #x04 #xF6 #xC2 #x16 #x25 #x86 #x56 #x55 #x09 #xBE #x91)) (defconst +twofish-rs+ #8@(#x01 #xA4 #x02 #xA4 #xA4 #x56 #xA1 #x55 #x55 #x82 #xFC #x87 #x87 #xF3 #xC1 #x5A #x5A #x1E #x47 #x58 #x58 #xC6 #xAE #xDB #xDB #x68 #x3D #x9E #x9E #xE5 #x19 #x03)) (defconst +twofish-exp-to-poly+ #8@(#x01 #x02 #x04 #x08 #x10 #x20 #x40 #x80 #x4D #x9A #x79 #xF2 #xA9 #x1F #x3E #x7C #xF8 #xBD #x37 #x6E #xDC #xF5 #xA7 #x03 #x06 #x0C #x18 #x30 #x60 #xC0 #xCD #xD7 #xE3 #x8B #x5B #xB6 #x21 #x42 #x84 #x45 #x8A #x59 #xB2 #x29 #x52 #xA4 #x05 #x0A #x14 #x28 #x50 #xA0 #x0D #x1A #x34 #x68 #xD0 #xED #x97 #x63 #xC6 #xC1 #xCF #xD3 #xEB #x9B #x7B #xF6 #xA1 #x0F #x1E #x3C #x78 #xF0 #xAD #x17 #x2E #x5C #xB8 #x3D #x7A #xF4 #xA5 #x07 #x0E #x1C #x38 #x70 #xE0 #x8D #x57 #xAE #x11 #x22 #x44 #x88 #x5D #xBA #x39 #x72 #xE4 #x85 #x47 #x8E #x51 #xA2 #x09 #x12 #x24 #x48 #x90 #x6D #xDA #xF9 #xBF #x33 #x66 #xCC #xD5 #xE7 #x83 #x4B #x96 #x61 #xC2 #xC9 #xDF #xF3 #xAB #x1B #x36 #x6C #xD8 #xFD #xB7 #x23 #x46 #x8C #x55 #xAA #x19 #x32 #x64 #xC8 #xDD #xF7 #xA3 #x0B #x16 #x2C #x58 #xB0 #x2D #x5A #xB4 #x25 #x4A #x94 #x65 #xCA #xD9 #xFF #xB3 #x2B #x56 #xAC #x15 #x2A #x54 #xA8 #x1D #x3A #x74 #xE8 #x9D #x77 #xEE #x91 #x6F #xDE #xF1 #xAF #x13 #x26 #x4C #x98 #x7D #xFA #xB9 #x3F #x7E #xFC #xB5 #x27 #x4E #x9C #x75 #xEA #x99 #x7F #xFE #xB1 #x2F #x5E #xBC #x35 #x6A #xD4 #xE5 #x87 #x43 #x86 #x41 #x82 #x49 #x92 #x69 #xD2 #xE9 #x9F #x73 #xE6 #x81 #x4F #x9E #x71 #xE2 #x89 #x5F #xBE #x31 #x62 #xC4 #xC5 #xC7 #xC3 #xCB #xDB #xFB #xBB #x3B #x76 #xEC #x95 #x67 #xCE #xD1 #xEF #x93 #x6B #xD6 #xE1 #x8F #x53 #xA6)) (defconst +twofish-poly-to-exp+ #8@(#x00 #x01 #x17 #x02 #x2E #x18 #x53 #x03 #x6A #x2F #x93 #x19 #x34 #x54 #x45 #x04 #x5C #x6B #xB6 #x30 #xA6 #x94 #x4B #x1A #x8C #x35 #x81 #x55 #xAA #x46 #x0D #x05 #x24 #x5D #x87 #x6C #x9B #xB7 #xC1 #x31 #x2B #xA7 #xA3 #x95 #x98 #x4C #xCA #x1B #xE6 #x8D #x73 #x36 #xCD #x82 #x12 #x56 #x62 #xAB #xF0 #x47 #x4F #x0E #xBD #x06 #xD4 #x25 #xD2 #x5E #x27 #x88 #x66 #x6D #xD6 #x9C #x79 #xB8 #x08 #xC2 #xDF #x32 #x68 #x2C #xFD #xA8 #x8A #xA4 #x5A #x96 #x29 #x99 #x22 #x4D #x60 #xCB #xE4 #x1C #x7B #xE7 #x3B #x8E #x9E #x74 #xF4 #x37 #xD8 #xCE #xF9 #x83 #x6F #x13 #xB2 #x57 #xE1 #x63 #xDC #xAC #xC4 #xF1 #xAF #x48 #x0A #x50 #x42 #x0F #xBA #xBE #xC7 #x07 #xDE #xD5 #x78 #x26 #x65 #xD3 #xD1 #x5F #xE3 #x28 #x21 #x89 #x59 #x67 #xFC #x6E #xB1 #xD7 #xF8 #x9D #xF3 #x7A #x3A #xB9 #xC6 #x09 #x41 #xC3 #xAE #xE0 #xDB #x33 #x44 #x69 #x92 #x2D #x52 #xFE #x16 #xA9 #x0C #x8B #x80 #xA5 #x4A #x5B #xB5 #x97 #xC9 #x2A #xA2 #x9A #xC0 #x23 #x86 #x4E #xBC #x61 #xEF #xCC #x11 #xE5 #x72 #x1D #x3D #x7C #xEB #xE8 #xE9 #x3C #xEA #x8F #x7D #x9F #xEC #x75 #x1E #xF5 #x3E #x38 #xF6 #xD9 #x3F #xCF #x76 #xFA #x1F #x84 #xA0 #x70 #xED #x14 #x90 #xB3 #x7E #x58 #xFB #xE2 #x20 #x64 #xD0 #xDD #x77 #xAD #xDA #xC5 #x40 #xF2 #x39 #xB0 #xF7 #x49 #xB4 #x0B #x7F #x51 #x15 #x43 #x91 #x10 #x71 #xBB #xEE #xBF #x85 #xC8 #xA1)) (declaim (type (simple-array (unsigned-byte 32) (256)) +twofish-mds0+ +twofish-mds1+ +twofish-mds2+ +twofish-mds3+)) (defconst +twofish-mds0+ #32@(#xBCBC3275 #xECEC21F3 #x202043C6 #xB3B3C9F4 #xDADA03DB #x02028B7B #xE2E22BFB #x9E9EFAC8 #xC9C9EC4A #xD4D409D3 #x18186BE6 #x1E1E9F6B #x98980E45 #xB2B2387D #xA6A6D2E8 #x2626B74B #x3C3C57D6 #x93938A32 #x8282EED8 #x525298FD #x7B7BD437 #xBBBB3771 #x5B5B97F1 #x474783E1 #x24243C30 #x5151E20F #xBABAC6F8 #x4A4AF31B #xBFBF4887 #x0D0D70FA #xB0B0B306 #x7575DE3F #xD2D2FD5E #x7D7D20BA #x666631AE #x3A3AA35B #x59591C8A #x00000000 #xCDCD93BC #x1A1AE09D #xAEAE2C6D #x7F7FABC1 #x2B2BC7B1 #xBEBEB90E #xE0E0A080 #x8A8A105D #x3B3B52D2 #x6464BAD5 #xD8D888A0 #xE7E7A584 #x5F5FE807 #x1B1B1114 #x2C2CC2B5 #xFCFCB490 #x3131272C #x808065A3 #x73732AB2 #x0C0C8173 #x79795F4C #x6B6B4154 #x4B4B0292 #x53536974 #x94948F36 #x83831F51 #x2A2A3638 #xC4C49CB0 #x2222C8BD #xD5D5F85A #xBDBDC3FC #x48487860 #xFFFFCE62 #x4C4C0796 #x4141776C #xC7C7E642 #xEBEB24F7 #x1C1C1410 #x5D5D637C #x36362228 #x6767C027 #xE9E9AF8C #x4444F913 #x1414EA95 #xF5F5BB9C #xCFCF18C7 #x3F3F2D24 #xC0C0E346 #x7272DB3B #x54546C70 #x29294CCA #xF0F035E3 #x0808FE85 #xC6C617CB #xF3F34F11 #x8C8CE4D0 #xA4A45993 #xCACA96B8 #x68683BA6 #xB8B84D83 #x38382820 #xE5E52EFF #xADAD569F #x0B0B8477 #xC8C81DC3 #x9999FFCC #x5858ED03 #x19199A6F #x0E0E0A08 #x95957EBF #x70705040 #xF7F730E7 #x6E6ECF2B #x1F1F6EE2 #xB5B53D79 #x09090F0C #x616134AA #x57571682 #x9F9F0B41 #x9D9D803A #x111164EA #x2525CDB9 #xAFAFDDE4 #x4545089A #xDFDF8DA4 #xA3A35C97 #xEAEAD57E #x353558DA #xEDEDD07A #x4343FC17 #xF8F8CB66 #xFBFBB194 #x3737D3A1 #xFAFA401D #xC2C2683D #xB4B4CCF0 #x32325DDE #x9C9C71B3 #x5656E70B #xE3E3DA72 #x878760A7 #x15151B1C #xF9F93AEF #x6363BFD1 #x3434A953 #x9A9A853E #xB1B1428F #x7C7CD133 #x88889B26 #x3D3DA65F #xA1A1D7EC #xE4E4DF76 #x8181942A #x91910149 #x0F0FFB81 #xEEEEAA88 #x161661EE #xD7D77321 #x9797F5C4 #xA5A5A81A #xFEFE3FEB #x6D6DB5D9 #x7878AEC5 #xC5C56D39 #x1D1DE599 #x7676A4CD #x3E3EDCAD #xCBCB6731 #xB6B6478B #xEFEF5B01 #x12121E18 #x6060C523 #x6A6AB0DD #x4D4DF61F #xCECEE94E #xDEDE7C2D #x55559DF9 #x7E7E5A48 #x2121B24F #x03037AF2 #xA0A02665 #x5E5E198E #x5A5A6678 #x65654B5C #x62624E58 #xFDFD4519 #x0606F48D #x404086E5 #xF2F2BE98 #x3333AC57 #x17179067 #x05058E7F #xE8E85E05 #x4F4F7D64 #x89896AAF #x10109563 #x74742FB6 #x0A0A75FE #x5C5C92F5 #x9B9B74B7 #x2D2D333C #x3030D6A5 #x2E2E49CE #x494989E9 #x46467268 #x77775544 #xA8A8D8E0 #x9696044D #x2828BD43 #xA9A92969 #xD9D97929 #x8686912E #xD1D187AC #xF4F44A15 #x8D8D1559 #xD6D682A8 #xB9B9BC0A #x42420D9E #xF6F6C16E #x2F2FB847 #xDDDD06DF #x23233934 #xCCCC6235 #xF1F1C46A #xC1C112CF #x8585EBDC #x8F8F9E22 #x7171A1C9 #x9090F0C0 #xAAAA539B #x0101F189 #x8B8BE1D4 #x4E4E8CED #x8E8E6FAB #xABABA212 #x6F6F3EA2 #xE6E6540D #xDBDBF252 #x92927BBB #xB7B7B602 #x6969CA2F #x3939D9A9 #xD3D30CD7 #xA7A72361 #xA2A2AD1E #xC3C399B4 #x6C6C4450 #x07070504 #x04047FF6 #x272746C2 #xACACA716 #xD0D07625 #x50501386 #xDCDCF756 #x84841A55 #xE1E15109 #x7A7A25BE #x1313EF91)) (defconst +twofish-mds1+ #32@(#xA9D93939 #x67901717 #xB3719C9C #xE8D2A6A6 #x04050707 #xFD985252 #xA3658080 #x76DFE4E4 #x9A084545 #x92024B4B #x80A0E0E0 #x78665A5A #xE4DDAFAF #xDDB06A6A #xD1BF6363 #x38362A2A #x0D54E6E6 #xC6432020 #x3562CCCC #x98BEF2F2 #x181E1212 #xF724EBEB #xECD7A1A1 #x6C774141 #x43BD2828 #x7532BCBC #x37D47B7B #x269B8888 #xFA700D0D #x13F94444 #x94B1FBFB #x485A7E7E #xF27A0303 #xD0E48C8C #x8B47B6B6 #x303C2424 #x84A5E7E7 #x54416B6B #xDF06DDDD #x23C56060 #x1945FDFD #x5BA33A3A #x3D68C2C2 #x59158D8D #xF321ECEC #xAE316666 #xA23E6F6F #x82165757 #x63951010 #x015BEFEF #x834DB8B8 #x2E918686 #xD9B56D6D #x511F8383 #x9B53AAAA #x7C635D5D #xA63B6868 #xEB3FFEFE #xA5D63030 #xBE257A7A #x16A7ACAC #x0C0F0909 #xE335F0F0 #x6123A7A7 #xC0F09090 #x8CAFE9E9 #x3A809D9D #xF5925C5C #x73810C0C #x2C273131 #x2576D0D0 #x0BE75656 #xBB7B9292 #x4EE9CECE #x89F10101 #x6B9F1E1E #x53A93434 #x6AC4F1F1 #xB499C3C3 #xF1975B5B #xE1834747 #xE66B1818 #xBDC82222 #x450E9898 #xE26E1F1F #xF4C9B3B3 #xB62F7474 #x66CBF8F8 #xCCFF9999 #x95EA1414 #x03ED5858 #x56F7DCDC #xD4E18B8B #x1C1B1515 #x1EADA2A2 #xD70CD3D3 #xFB2BE2E2 #xC31DC8C8 #x8E195E5E #xB5C22C2C #xE9894949 #xCF12C1C1 #xBF7E9595 #xBA207D7D #xEA641111 #x77840B0B #x396DC5C5 #xAF6A8989 #x33D17C7C #xC9A17171 #x62CEFFFF #x7137BBBB #x81FB0F0F #x793DB5B5 #x0951E1E1 #xADDC3E3E #x242D3F3F #xCDA47676 #xF99D5555 #xD8EE8282 #xE5864040 #xC5AE7878 #xB9CD2525 #x4D049696 #x44557777 #x080A0E0E #x86135050 #xE730F7F7 #xA1D33737 #x1D40FAFA #xAA346161 #xED8C4E4E #x06B3B0B0 #x706C5454 #xB22A7373 #xD2523B3B #x410B9F9F #x7B8B0202 #xA088D8D8 #x114FF3F3 #x3167CBCB #xC2462727 #x27C06767 #x90B4FCFC #x20283838 #xF67F0404 #x60784848 #xFF2EE5E5 #x96074C4C #x5C4B6565 #xB1C72B2B #xAB6F8E8E #x9E0D4242 #x9CBBF5F5 #x52F2DBDB #x1BF34A4A #x5FA63D3D #x9359A4A4 #x0ABCB9B9 #xEF3AF9F9 #x91EF1313 #x85FE0808 #x49019191 #xEE611616 #x2D7CDEDE #x4FB22121 #x8F42B1B1 #x3BDB7272 #x47B82F2F #x8748BFBF #x6D2CAEAE #x46E3C0C0 #xD6573C3C #x3E859A9A #x6929A9A9 #x647D4F4F #x2A948181 #xCE492E2E #xCB17C6C6 #x2FCA6969 #xFCC3BDBD #x975CA3A3 #x055EE8E8 #x7AD0EDED #xAC87D1D1 #x7F8E0505 #xD5BA6464 #x1AA8A5A5 #x4BB72626 #x0EB9BEBE #xA7608787 #x5AF8D5D5 #x28223636 #x14111B1B #x3FDE7575 #x2979D9D9 #x88AAEEEE #x3C332D2D #x4C5F7979 #x02B6B7B7 #xB896CACA #xDA583535 #xB09CC4C4 #x17FC4343 #x551A8484 #x1FF64D4D #x8A1C5959 #x7D38B2B2 #x57AC3333 #xC718CFCF #x8DF40606 #x74695353 #xB7749B9B #xC4F59797 #x9F56ADAD #x72DAE3E3 #x7ED5EAEA #x154AF4F4 #x229E8F8F #x12A2ABAB #x584E6262 #x07E85F5F #x99E51D1D #x34392323 #x6EC1F6F6 #x50446C6C #xDE5D3232 #x68724646 #x6526A0A0 #xBC93CDCD #xDB03DADA #xF8C6BABA #xC8FA9E9E #xA882D6D6 #x2BCF6E6E #x40507070 #xDCEB8585 #xFE750A0A #x328A9393 #xA48DDFDF #xCA4C2929 #x10141C1C #x2173D7D7 #xF0CCB4B4 #xD309D4D4 #x5D108A8A #x0FE25151 #x00000000 #x6F9A1919 #x9DE01A1A #x368F9494 #x42E6C7C7 #x4AECC9C9 #x5EFDD2D2 #xC1AB7F7F #xE0D8A8A8)) (defconst +twofish-mds2+ #32@(#xBC75BC32 #xECF3EC21 #x20C62043 #xB3F4B3C9 #xDADBDA03 #x027B028B #xE2FBE22B #x9EC89EFA #xC94AC9EC #xD4D3D409 #x18E6186B #x1E6B1E9F #x9845980E #xB27DB238 #xA6E8A6D2 #x264B26B7 #x3CD63C57 #x9332938A #x82D882EE #x52FD5298 #x7B377BD4 #xBB71BB37 #x5BF15B97 #x47E14783 #x2430243C #x510F51E2 #xBAF8BAC6 #x4A1B4AF3 #xBF87BF48 #x0DFA0D70 #xB006B0B3 #x753F75DE #xD25ED2FD #x7DBA7D20 #x66AE6631 #x3A5B3AA3 #x598A591C #x00000000 #xCDBCCD93 #x1A9D1AE0 #xAE6DAE2C #x7FC17FAB #x2BB12BC7 #xBE0EBEB9 #xE080E0A0 #x8A5D8A10 #x3BD23B52 #x64D564BA #xD8A0D888 #xE784E7A5 #x5F075FE8 #x1B141B11 #x2CB52CC2 #xFC90FCB4 #x312C3127 #x80A38065 #x73B2732A #x0C730C81 #x794C795F #x6B546B41 #x4B924B02 #x53745369 #x9436948F #x8351831F #x2A382A36 #xC4B0C49C #x22BD22C8 #xD55AD5F8 #xBDFCBDC3 #x48604878 #xFF62FFCE #x4C964C07 #x416C4177 #xC742C7E6 #xEBF7EB24 #x1C101C14 #x5D7C5D63 #x36283622 #x672767C0 #xE98CE9AF #x441344F9 #x149514EA #xF59CF5BB #xCFC7CF18 #x3F243F2D #xC046C0E3 #x723B72DB #x5470546C #x29CA294C #xF0E3F035 #x088508FE #xC6CBC617 #xF311F34F #x8CD08CE4 #xA493A459 #xCAB8CA96 #x68A6683B #xB883B84D #x38203828 #xE5FFE52E #xAD9FAD56 #x0B770B84 #xC8C3C81D #x99CC99FF #x580358ED #x196F199A #x0E080E0A #x95BF957E #x70407050 #xF7E7F730 #x6E2B6ECF #x1FE21F6E #xB579B53D #x090C090F #x61AA6134 #x57825716 #x9F419F0B #x9D3A9D80 #x11EA1164 #x25B925CD #xAFE4AFDD #x459A4508 #xDFA4DF8D #xA397A35C #xEA7EEAD5 #x35DA3558 #xED7AEDD0 #x431743FC #xF866F8CB #xFB94FBB1 #x37A137D3 #xFA1DFA40 #xC23DC268 #xB4F0B4CC #x32DE325D #x9CB39C71 #x560B56E7 #xE372E3DA #x87A78760 #x151C151B #xF9EFF93A #x63D163BF #x345334A9 #x9A3E9A85 #xB18FB142 #x7C337CD1 #x8826889B #x3D5F3DA6 #xA1ECA1D7 #xE476E4DF #x812A8194 #x91499101 #x0F810FFB #xEE88EEAA #x16EE1661 #xD721D773 #x97C497F5 #xA51AA5A8 #xFEEBFE3F #x6DD96DB5 #x78C578AE #xC539C56D #x1D991DE5 #x76CD76A4 #x3EAD3EDC #xCB31CB67 #xB68BB647 #xEF01EF5B #x1218121E #x602360C5 #x6ADD6AB0 #x4D1F4DF6 #xCE4ECEE9 #xDE2DDE7C #x55F9559D #x7E487E5A #x214F21B2 #x03F2037A #xA065A026 #x5E8E5E19 #x5A785A66 #x655C654B #x6258624E #xFD19FD45 #x068D06F4 #x40E54086 #xF298F2BE #x335733AC #x17671790 #x057F058E #xE805E85E #x4F644F7D #x89AF896A #x10631095 #x74B6742F #x0AFE0A75 #x5CF55C92 #x9BB79B74 #x2D3C2D33 #x30A530D6 #x2ECE2E49 #x49E94989 #x46684672 #x77447755 #xA8E0A8D8 #x964D9604 #x284328BD #xA969A929 #xD929D979 #x862E8691 #xD1ACD187 #xF415F44A #x8D598D15 #xD6A8D682 #xB90AB9BC #x429E420D #xF66EF6C1 #x2F472FB8 #xDDDFDD06 #x23342339 #xCC35CC62 #xF16AF1C4 #xC1CFC112 #x85DC85EB #x8F228F9E #x71C971A1 #x90C090F0 #xAA9BAA53 #x018901F1 #x8BD48BE1 #x4EED4E8C #x8EAB8E6F #xAB12ABA2 #x6FA26F3E #xE60DE654 #xDB52DBF2 #x92BB927B #xB702B7B6 #x692F69CA #x39A939D9 #xD3D7D30C #xA761A723 #xA21EA2AD #xC3B4C399 #x6C506C44 #x07040705 #x04F6047F #x27C22746 #xAC16ACA7 #xD025D076 #x50865013 #xDC56DCF7 #x8455841A #xE109E151 #x7ABE7A25 #x139113EF)) (defconst +twofish-mds3+ #32@(#xD939A9D9 #x90176790 #x719CB371 #xD2A6E8D2 #x05070405 #x9852FD98 #x6580A365 #xDFE476DF #x08459A08 #x024B9202 #xA0E080A0 #x665A7866 #xDDAFE4DD #xB06ADDB0 #xBF63D1BF #x362A3836 #x54E60D54 #x4320C643 #x62CC3562 #xBEF298BE #x1E12181E #x24EBF724 #xD7A1ECD7 #x77416C77 #xBD2843BD #x32BC7532 #xD47B37D4 #x9B88269B #x700DFA70 #xF94413F9 #xB1FB94B1 #x5A7E485A #x7A03F27A #xE48CD0E4 #x47B68B47 #x3C24303C #xA5E784A5 #x416B5441 #x06DDDF06 #xC56023C5 #x45FD1945 #xA33A5BA3 #x68C23D68 #x158D5915 #x21ECF321 #x3166AE31 #x3E6FA23E #x16578216 #x95106395 #x5BEF015B #x4DB8834D #x91862E91 #xB56DD9B5 #x1F83511F #x53AA9B53 #x635D7C63 #x3B68A63B #x3FFEEB3F #xD630A5D6 #x257ABE25 #xA7AC16A7 #x0F090C0F #x35F0E335 #x23A76123 #xF090C0F0 #xAFE98CAF #x809D3A80 #x925CF592 #x810C7381 #x27312C27 #x76D02576 #xE7560BE7 #x7B92BB7B #xE9CE4EE9 #xF10189F1 #x9F1E6B9F #xA93453A9 #xC4F16AC4 #x99C3B499 #x975BF197 #x8347E183 #x6B18E66B #xC822BDC8 #x0E98450E #x6E1FE26E #xC9B3F4C9 #x2F74B62F #xCBF866CB #xFF99CCFF #xEA1495EA #xED5803ED #xF7DC56F7 #xE18BD4E1 #x1B151C1B #xADA21EAD #x0CD3D70C #x2BE2FB2B #x1DC8C31D #x195E8E19 #xC22CB5C2 #x8949E989 #x12C1CF12 #x7E95BF7E #x207DBA20 #x6411EA64 #x840B7784 #x6DC5396D #x6A89AF6A #xD17C33D1 #xA171C9A1 #xCEFF62CE #x37BB7137 #xFB0F81FB #x3DB5793D #x51E10951 #xDC3EADDC #x2D3F242D #xA476CDA4 #x9D55F99D #xEE82D8EE #x8640E586 #xAE78C5AE #xCD25B9CD #x04964D04 #x55774455 #x0A0E080A #x13508613 #x30F7E730 #xD337A1D3 #x40FA1D40 #x3461AA34 #x8C4EED8C #xB3B006B3 #x6C54706C #x2A73B22A #x523BD252 #x0B9F410B #x8B027B8B #x88D8A088 #x4FF3114F #x67CB3167 #x4627C246 #xC06727C0 #xB4FC90B4 #x28382028 #x7F04F67F #x78486078 #x2EE5FF2E #x074C9607 #x4B655C4B #xC72BB1C7 #x6F8EAB6F #x0D429E0D #xBBF59CBB #xF2DB52F2 #xF34A1BF3 #xA63D5FA6 #x59A49359 #xBCB90ABC #x3AF9EF3A #xEF1391EF #xFE0885FE #x01914901 #x6116EE61 #x7CDE2D7C #xB2214FB2 #x42B18F42 #xDB723BDB #xB82F47B8 #x48BF8748 #x2CAE6D2C #xE3C046E3 #x573CD657 #x859A3E85 #x29A96929 #x7D4F647D #x94812A94 #x492ECE49 #x17C6CB17 #xCA692FCA #xC3BDFCC3 #x5CA3975C #x5EE8055E #xD0ED7AD0 #x87D1AC87 #x8E057F8E #xBA64D5BA #xA8A51AA8 #xB7264BB7 #xB9BE0EB9 #x6087A760 #xF8D55AF8 #x22362822 #x111B1411 #xDE753FDE #x79D92979 #xAAEE88AA #x332D3C33 #x5F794C5F #xB6B702B6 #x96CAB896 #x5835DA58 #x9CC4B09C #xFC4317FC #x1A84551A #xF64D1FF6 #x1C598A1C #x38B27D38 #xAC3357AC #x18CFC718 #xF4068DF4 #x69537469 #x749BB774 #xF597C4F5 #x56AD9F56 #xDAE372DA #xD5EA7ED5 #x4AF4154A #x9E8F229E #xA2AB12A2 #x4E62584E #xE85F07E8 #xE51D99E5 #x39233439 #xC1F66EC1 #x446C5044 #x5D32DE5D #x72466872 #x26A06526 #x93CDBC93 #x03DADB03 #xC6BAF8C6 #xFA9EC8FA #x82D6A882 #xCF6E2BCF #x50704050 #xEB85DCEB #x750AFE75 #x8A93328A #x8DDFA48D #x4C29CA4C #x141C1014 #x73D72173 #xCCB4F0CC #x09D4D309 #x108A5D10 #xE2510FE2 #x00000000 #x9A196F9A #xE01A9DE0 #x8F94368F #xE6C742E6 #xECC94AEC #xFDD25EFD #xAB7FC1AB #xD8A8E0D8)) ;;; the actual implementation of Twofish (deftype twofish-s-boxes () '(simple-array (unsigned-byte 32) (1024))) (deftype twofish-round-keys () '(simple-array (unsigned-byte 32) (40))) (defclass twofish (cipher 16-byte-block-mixin) ((round-keys :accessor round-keys :type twofish-round-keys) (s-boxes :accessor s-boxes :type twofish-s-boxes))) (defun reed-solomon-multiply (box box-offset key rs0 rs1 rs2 rs3) (declare (type (simple-octet-vector 16) box)) (declare (type (integer 0 12) box-offset)) (unless (zerop key) (let ((temp (aref +twofish-poly-to-exp+ (1- key)))) ;; Lispworks doesn't seem to like doing this with a straight ;; MACROLET and no #., so we go ahead and build everything at ;; read-time. #.(flet ((mod-box-element (index) (let ((rs-sym (intern (format nil "~A~D" '#:rs index)))) `(setf (aref box (+ box-offset ,index)) (logxor (aref box (+ box-offset ,index)) (aref +twofish-exp-to-poly+ (mod (+ temp (aref +twofish-poly-to-exp+ (1- ,rs-sym))) 255))))))) `(progn ,(mod-box-element 0) ,(mod-box-element 1) ,(mod-box-element 2) ,(mod-box-element 3))))) (values)) (defun twofish-key-schedule (key) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (let ((rs-box (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0)) (round-keys (make-array 40 :element-type '(unsigned-byte 32))) (s-boxes (make-array 1024 :element-type '(unsigned-byte 32)))) (declare (type (simple-octet-vector 16) rs-box)) (declare (dynamic-extent rs-box)) ;; fill the rs-box (dotimes (i (length key)) (reed-solomon-multiply rs-box (* 4 (truncate i 8)) (aref key i) (aref +twofish-rs+ (mod (* 4 i) 32)) (aref +twofish-rs+ (mod (+ (* 4 i) 1) 32)) (aref +twofish-rs+ (mod (+ (* 4 i) 2) 32)) (aref +twofish-rs+ (mod (+ (* 4 i) 3) 32)))) (case (length key) (16 (twofish-schedule-16-byte-key round-keys s-boxes key rs-box)) (24 (twofish-schedule-24-byte-key round-keys s-boxes key rs-box)) (32 (twofish-schedule-32-byte-key round-keys s-boxes key rs-box))))) (macrolet ((s-box (s-boxes which index) `(aref ,s-boxes (+ (* 256 ,which) ,index))) (s-box-0 (s-boxes index) `(s-box ,s-boxes 0 ,index)) (s-box-1 (s-boxes index) `(s-box ,s-boxes 1 ,index)) (s-box-2 (s-boxes index) `(s-box ,s-boxes 2 ,index)) (s-box-3 (s-boxes index) `(s-box ,s-boxes 3 ,index))) (defun twofish-schedule-16-byte-key (round-keys s-boxes key box) (declare (type twofish-round-keys round-keys) (type twofish-s-boxes s-boxes) (type (simple-octet-vector 16) key box)) (macrolet ((q-frob (i1 i2 d1 d2) (let ((q0 (intern (format nil "+~A~A+" '#:twofish-q (ldb (byte 1 1) i1)))) (q1 (intern (format nil "+~A~A+" '#:twofish-q (ldb (byte 1 0) i1))))) `(logxor (aref ,q0 (logxor (aref ,q1 ,i2) ,d1)) ,d2)))) (dotimes (i 256) (setf (s-box-0 s-boxes i) (aref +twofish-mds0+ (q-frob 0 i (aref box 0) (aref box 4))) (s-box-1 s-boxes i) (aref +twofish-mds1+ (q-frob 1 i (aref box 1) (aref box 5))) (s-box-2 s-boxes i) (aref +twofish-mds2+ (q-frob 2 i (aref box 2) (aref box 6))) (s-box-3 s-boxes i) (aref +twofish-mds3+ (q-frob 3 i (aref box 3) (aref box 7))))) (loop for i from 0 below 40 by 2 do (let ((x (logxor (aref +twofish-mds0+ (q-frob 0 i (aref key 8) (aref key 0))) (aref +twofish-mds1+ (q-frob 1 i (aref key 9) (aref key 1))) (aref +twofish-mds2+ (q-frob 2 i (aref key 10) (aref key 2))) (aref +twofish-mds3+ (q-frob 3 i (aref key 11) (aref key 3))))) (y (logxor (aref +twofish-mds0+ (q-frob 0 (1+ i) (aref key 12) (aref key 4))) (aref +twofish-mds1+ (q-frob 1 (1+ i) (aref key 13) (aref key 5))) (aref +twofish-mds2+ (q-frob 2 (1+ i) (aref key 14) (aref key 6))) (aref +twofish-mds3+ (q-frob 3 (1+ i) (aref key 15) (aref key 7)))))) (declare (type (unsigned-byte 32) x y)) (setf y (rol32 y 8)) (setf x (mod32+ x y)) (setf y (mod32+ y x)) (setf (aref round-keys i) x (aref round-keys (1+ i)) (rol32 y 9))) finally (return (values round-keys s-boxes))))) (defun twofish-schedule-24-byte-key (round-keys s-boxes key box) (declare (type twofish-round-keys round-keys) (type twofish-s-boxes s-boxes) (type (simple-octet-vector 24) key) (type (simple-octet-vector 16) box)) (macrolet ((q-frob (i1 i2 d1 d2 d3) (let ((q0 (intern (format nil "+~A~A+" '#:twofish-q (ldb (byte 1 2) i1)))) (q1 (intern (format nil "+~A~A+" '#:twofish-q (ldb (byte 1 1) i1)))) (q2 (intern (format nil "+~A~A+" '#:twofish-q (ldb (byte 1 0) i1))))) `(logxor (aref ,q0 (logxor (aref ,q1 (logxor (aref ,q2 ,i2) ,d1)) ,d2)) ,d3)))) (dotimes (i 256) (setf (s-box-0 s-boxes i) (aref +twofish-mds0+ (q-frob 1 i (aref box 0) (aref box 4) (aref box 8))) (s-box-1 s-boxes i) (aref +twofish-mds1+ (q-frob 3 i (aref box 1) (aref box 5) (aref box 9))) (s-box-2 s-boxes i) (aref +twofish-mds2+ (q-frob 4 i (aref box 2) (aref box 6) (aref box 10))) (s-box-3 s-boxes i) (aref +twofish-mds3+ (q-frob 6 i (aref box 3) (aref box 7) (aref box 11))))) (loop for i from 0 below 40 by 2 do (let ((x (logxor (aref +twofish-mds0+ (q-frob 1 i (aref key 16) (aref key 8) (aref key 0))) (aref +twofish-mds1+ (q-frob 3 i (aref key 17) (aref key 9) (aref key 1))) (aref +twofish-mds2+ (q-frob 4 i (aref key 18) (aref key 10) (aref key 2))) (aref +twofish-mds3+ (q-frob 6 i (aref key 19) (aref key 11) (aref key 3))))) (y (logxor (aref +twofish-mds0+ (q-frob 1 (1+ i) (aref key 20) (aref key 12) (aref key 4))) (aref +twofish-mds1+ (q-frob 3 (1+ i) (aref key 21) (aref key 13) (aref key 5))) (aref +twofish-mds2+ (q-frob 4 (1+ i) (aref key 22) (aref key 14) (aref key 6))) (aref +twofish-mds3+ (q-frob 6 (1+ i) (aref key 23) (aref key 15) (aref key 7)))))) (declare (type (unsigned-byte 32) x y)) (setf y (rol32 y 8)) (setf x (mod32+ x y)) (setf y (mod32+ y x)) (setf (aref round-keys i) x (aref round-keys (1+ i)) (rol32 y 9))) finally (return (values round-keys s-boxes))))) (defun twofish-schedule-32-byte-key (round-keys s-boxes key box) (declare (type twofish-round-keys round-keys) (type twofish-s-boxes s-boxes) (type (simple-octet-vector 32) key) (type (simple-octet-vector 16) box)) (macrolet ((q-frob (i1 i2 d1 d2 d3 d4) (let ((q0 (intern (format nil "+~A~A+" '#:twofish-q (ldb (byte 1 3) i1)))) (q1 (intern (format nil "+~A~A+" '#:twofish-q (ldb (byte 1 2) i1)))) (q2 (intern (format nil "+~A~A+" '#:twofish-q (ldb (byte 1 1) i1)))) (q3 (intern (format nil "+~A~A+" '#:twofish-q (ldb (byte 1 0) i1))))) `(logxor (aref ,q0 (logxor (aref ,q1 (logxor (aref ,q2 (logxor (aref ,q3 ,i2) ,d1)) ,d2)) ,d3)) ,d4)))) (dotimes (i 256) (setf (s-box-0 s-boxes i) (aref +twofish-mds0+ (q-frob #b0011 i (aref box 0) (aref box 4) (aref box 8) (aref box 12))) (s-box-1 s-boxes i) (aref +twofish-mds1+ (q-frob #b0110 i (aref box 1) (aref box 5) (aref box 9) (aref box 13))) (s-box-2 s-boxes i) (aref +twofish-mds2+ (q-frob #b1000 i (aref box 2) (aref box 6) (aref box 10) (aref box 14))) (s-box-3 s-boxes i) (aref +twofish-mds3+ (q-frob #b1101 i (aref box 3) (aref box 7) (aref box 11) (aref box 15))))) (loop for i from 0 below 40 by 2 do (let ((x (logxor (aref +twofish-mds0+ (q-frob #b0011 i (aref key 24) (aref key 16) (aref key 8) (aref key 0))) (aref +twofish-mds1+ (q-frob #b0110 i (aref key 25) (aref key 17) (aref key 9) (aref key 1))) (aref +twofish-mds2+ (q-frob #b1000 i (aref key 26) (aref key 18) (aref key 10) (aref key 2))) (aref +twofish-mds3+ (q-frob #b1101 i (aref key 27) (aref key 19) (aref key 11) (aref key 3))))) (y (logxor (aref +twofish-mds0+ (q-frob #b0011 (1+ i) (aref key 28) (aref key 20) (aref key 12) (aref key 4))) (aref +twofish-mds1+ (q-frob #b0110 (1+ i) (aref key 29) (aref key 21) (aref key 13) (aref key 5))) (aref +twofish-mds2+ (q-frob #b1000 (1+ i) (aref key 30) (aref key 22) (aref key 14) (aref key 6))) (aref +twofish-mds3+ (q-frob #b1101 (1+ i) (aref key 31) (aref key 23) (aref key 15) (aref key 7)))))) (declare (type (unsigned-byte 32) x y)) (setf y (rol32 y 8)) (setf x (mod32+ x y)) (setf y (mod32+ y x)) (setf (aref round-keys i) x (aref round-keys (1+ i)) (rol32 y 9))) finally (return (values round-keys s-boxes))))) (define-block-encryptor twofish 16 (let ((round-keys (round-keys context)) (s-boxes (s-boxes context))) (declare (type twofish-round-keys round-keys)) (declare (type twofish-s-boxes s-boxes)) (macrolet ((encrypt-round (a b c d round) `(let ((x (logxor (s-box-0 s-boxes (first-byte ,a)) (s-box-1 s-boxes (second-byte ,a)) (s-box-2 s-boxes (third-byte ,a)) (s-box-3 s-boxes (fourth-byte ,a)))) (y (logxor (s-box-0 s-boxes (fourth-byte ,b)) (s-box-1 s-boxes (first-byte ,b)) (s-box-2 s-boxes (second-byte ,b)) (s-box-3 s-boxes (third-byte ,b))))) (declare (type (unsigned-byte 32) x y)) (setf x (mod32+ x y)) (setf y (mod32+ y (mod32+ x (aref round-keys (+ (* ,round 2) 9))))) (setf x (mod32+ x (aref round-keys (+ (* ,round 2) 8)))) (setf ,c (rol32 (logxor ,c x) 31) ,d (logxor (rol32 ,d 1) y))))) (with-words ((a b c d) plaintext plaintext-start :big-endian nil) (setf a (logxor a (aref round-keys 0)) b (logxor b (aref round-keys 1)) c (logxor c (aref round-keys 2)) d (logxor d (aref round-keys 3))) #.(loop for i from 0 below 16 if (evenp i) collect `(encrypt-round a b c d ,i) into rounds else collect `(encrypt-round c d a b ,i) into rounds finally (return `(progn ,@rounds))) (setf c (logxor c (aref round-keys 4)) d (logxor d (aref round-keys 5)) a (logxor a (aref round-keys 6)) b (logxor b (aref round-keys 7))) (store-words ciphertext ciphertext-start c d a b) (values))))) (define-block-decryptor twofish 16 (let ((round-keys (round-keys context)) (s-boxes (s-boxes context))) (declare (type twofish-round-keys round-keys)) (declare (type twofish-s-boxes s-boxes)) (macrolet ((decrypt-round (a b c d round) `(let ((x (logxor (s-box-0 s-boxes (first-byte ,a)) (s-box-1 s-boxes (second-byte ,a)) (s-box-2 s-boxes (third-byte ,a)) (s-box-3 s-boxes (fourth-byte ,a)))) (y (logxor (s-box-0 s-boxes (fourth-byte ,b)) (s-box-1 s-boxes (first-byte ,b)) (s-box-2 s-boxes (second-byte ,b)) (s-box-3 s-boxes (third-byte ,b))))) (declare (type (unsigned-byte 32) x y)) (setf x (mod32+ x y)) (setf y (mod32+ y (mod32+ x (aref round-keys (+ (* ,round 2) 9))))) (setf x (mod32+ x (aref round-keys (+ (* ,round 2) 8)))) (setf ,c (logxor (rol32 ,c 1) x) ,d (rol32 (logxor ,d y) 31))))) (with-words ((c d a b) ciphertext ciphertext-start :big-endian nil) (setf c (logxor c (aref round-keys 4)) d (logxor d (aref round-keys 5)) a (logxor a (aref round-keys 6)) b (logxor b (aref round-keys 7))) #.(loop for i from 15 downto 0 if (evenp i) collect `(decrypt-round a b c d ,i) into rounds else collect `(decrypt-round c d a b ,i) into rounds finally (return `(progn ,@rounds))) (setf a (logxor a (aref round-keys 0)) b (logxor b (aref round-keys 1)) c (logxor c (aref round-keys 2)) d (logxor d (aref round-keys 3))) (store-words plaintext plaintext-start a b c d) (values))))) ) ; MACROLET (defmethod schedule-key ((cipher twofish) key) (multiple-value-bind (round-keys s-boxes) (twofish-key-schedule key) (setf (round-keys cipher) round-keys (s-boxes cipher) s-boxes) cipher)) (defcipher twofish (:encrypt-function twofish-encrypt-block) (:decrypt-function twofish-decrypt-block) (:block-length 16) (:key-length (:fixed 16 24 32))) ironclad-0.57/src/ciphers/xchacha.lisp000066400000000000000000000050771420372057600177730ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; xchacha.lisp -- implementation of the XChacha stream cipher (in-package :crypto) (defclass xchacha (chacha) ()) (defclass xchacha/12 (xchacha) () (:default-initargs :core-function #'chacha/12-core)) (defclass xchacha/8 (xchacha) () (:default-initargs :core-function #'chacha/8-core)) (defmethod shared-initialize :after ((cipher xchacha) slot-names &rest initargs &key (key nil key-p) (initialization-vector nil iv-p) &allow-other-keys) (declare (ignore initargs key key-p iv-p)) (let ((state (chacha-state cipher)) (buffer (make-array 64 :element-type '(unsigned-byte 8)))) (declare (type chacha-state state) (type chacha-keystream-buffer buffer)) (when initialization-vector (when (< (length initialization-vector) 24) (error 'invalid-initialization-vector :cipher (class-name (class-of cipher)) :block-length 24)) (setf (aref state 12) (ub32ref/le initialization-vector 0) (aref state 13) (ub32ref/le initialization-vector 4) (aref state 14) (ub32ref/le initialization-vector 8) (aref state 15) (ub32ref/le initialization-vector 12))) (funcall (chacha-core-function cipher) buffer state) (setf (aref state 4) (mod32- (ub32ref/le buffer 0) (aref state 0)) (aref state 5) (mod32- (ub32ref/le buffer 4) (aref state 1)) (aref state 6) (mod32- (ub32ref/le buffer 8) (aref state 2)) (aref state 7) (mod32- (ub32ref/le buffer 12) (aref state 3)) (aref state 8) (mod32- (ub32ref/le buffer 48) (aref state 12)) (aref state 9) (mod32- (ub32ref/le buffer 52) (aref state 13)) (aref state 10) (mod32- (ub32ref/le buffer 56) (aref state 14)) (aref state 11) (mod32- (ub32ref/le buffer 60) (aref state 15)) (aref state 12) 0 (aref state 13) 0) (if initialization-vector (setf (aref state 14) (ub32ref/le initialization-vector 16) (aref state 15) (ub32ref/le initialization-vector 20)) (setf (aref state 14) 0 (aref state 15) 0))) cipher) (defcipher xchacha (:mode :stream) (:crypt-function chacha-crypt) (:key-length (:fixed 16 32))) (defcipher xchacha/12 (:mode :stream) (:crypt-function chacha-crypt) (:key-length (:fixed 16 32))) (defcipher xchacha/8 (:mode :stream) (:crypt-function chacha-crypt) (:key-length (:fixed 16 32))) ironclad-0.57/src/ciphers/xor.lisp000066400000000000000000000042531420372057600171770ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; xor.lisp -- the do-nothing cipher ;;; It's not very secure, but it does come in handy to serve as a dummy ;;; cipher in security protocols before ciphers and keys have been ;;; established. (cl:in-package :crypto) (eval-when (:compile-toplevel :load-toplevel :execute) (defconstant +xor-block-length+ 8)) (defclass xor (cipher 8-byte-block-mixin) ((key :accessor xor-key :type simple-octet-vector) (key-index :accessor xor-key-index :initform 0 :type fixnum))) (defun xor-crypt-block (context in in-start out out-start) (declare (type simple-octet-vector in out)) (let* ((key (xor-key context)) (key-index (xor-key-index context)) (key-length (length key))) (declare (type simple-octet-vector key)) (cond ((= key-length 1) (let ((byte (aref key 0))) ;; Ignore the case where we just crypt in place. (unless (and (zerop byte) (eq in out) (= in-start out-start)) (dotimes (i +xor-block-length+) (setf (aref out (+ out-start i)) (logxor byte (aref in (+ in-start i)))))))) (t (dotimes (i +xor-block-length+) (setf (aref out (+ out-start i)) (logxor (aref key key-index) (aref in (+ in-start i)))) (incf key-index) (when (>= key-index key-length) (setf key-index 0))) (setf (xor-key-index context) key-index))))) (define-block-encryptor xor #.+xor-block-length+ (xor-crypt-block context plaintext plaintext-start ciphertext ciphertext-start)) (define-block-decryptor xor #.+xor-block-length+ (xor-crypt-block context ciphertext ciphertext-start plaintext plaintext-start)) (defmethod schedule-key ((cipher xor) key) ;; Optimize the probable common case of a key with bytes all the same. (let ((short-key (remove-duplicates key))) (if (= (length short-key) 1) (setf (xor-key cipher) short-key) (setf (xor-key cipher) key)) cipher)) (defcipher xor (:encrypt-function xor-encrypt-block) (:decrypt-function xor-decrypt-block) (:block-length #.+xor-block-length+) (:key-length (:variable 1 256 1))) ironclad-0.57/src/ciphers/xsalsa20.lisp000066400000000000000000000047141420372057600200260ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; xsalsa20.lisp -- implementation of the XSalsa20 stream cipher (in-package :crypto) (defclass xsalsa20 (salsa20) ()) (defclass xsalsa20/12 (xsalsa20) () (:default-initargs :core-function #'salsa20/12-core)) (defclass xsalsa20/8 (xsalsa20) () (:default-initargs :core-function #'salsa20/8-core)) (defmethod shared-initialize :after ((cipher xsalsa20) slot-names &rest initargs &key (key nil key-p) (initialization-vector nil iv-p) &allow-other-keys) (declare (ignore initargs key key-p iv-p)) (let ((state (salsa20-state cipher)) (buffer (make-array 64 :element-type '(unsigned-byte 8)))) (declare (type salsa20-state state) (type salsa20-keystream-buffer buffer)) (when initialization-vector (when (< (length initialization-vector) 24) (error 'invalid-initialization-vector :cipher (class-name (class-of cipher)) :block-length 24)) (setf (aref state 8) (ub32ref/le initialization-vector 8) (aref state 9) (ub32ref/le initialization-vector 12))) (funcall (salsa20-core-function cipher) buffer state) (setf (aref state 1) (mod32- (ub32ref/le buffer 0) (aref state 0)) (aref state 2) (mod32- (ub32ref/le buffer 20) (aref state 5)) (aref state 3) (mod32- (ub32ref/le buffer 40) (aref state 10)) (aref state 4) (mod32- (ub32ref/le buffer 60) (aref state 15)) (aref state 11) (mod32- (ub32ref/le buffer 24) (aref state 6)) (aref state 12) (mod32- (ub32ref/le buffer 28) (aref state 7)) (aref state 13) (mod32- (ub32ref/le buffer 32) (aref state 8)) (aref state 14) (mod32- (ub32ref/le buffer 36) (aref state 9)) (aref state 8) 0 (aref state 9) 0) (if initialization-vector (setf (aref state 6) (ub32ref/le initialization-vector 16) (aref state 7) (ub32ref/le initialization-vector 20)) (setf (aref state 6) 0 (aref state 7) 0))) cipher) (defcipher xsalsa20 (:mode :stream) (:crypt-function salsa20-crypt) (:key-length (:fixed 16 32))) (defcipher xsalsa20/12 (:mode :stream) (:crypt-function salsa20-crypt) (:key-length (:fixed 16 32))) (defcipher xsalsa20/8 (:mode :stream) (:crypt-function salsa20-crypt) (:key-length (:fixed 16 32))) ironclad-0.57/src/ciphers/xtea.lisp000066400000000000000000000053441420372057600173320ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto) (defconstant +xtea-n-rounds+ 32) (defconstant +xtea-delta+ #x9e3779b9) (defclass xtea (cipher 8-byte-block-mixin) ((key :accessor key))) (define-block-encryptor xtea 8 (with-words ((y z) plaintext plaintext-start) (let ((key (key context)) (sum 0)) (declare (type (simple-array (unsigned-byte 32) (4)) key)) (declare (type (unsigned-byte 32) sum)) ;; could probably unroll this loop for reasonable performance gain (dotimes (i +xtea-n-rounds+) (setf y (mod32+ y (logxor (mod32+ z (logxor (mod32ash z 4) (mod32ash z -5))) (mod32+ sum (aref key (logand sum #x3)))))) (setf sum (mod32+ sum +xtea-delta+)) (setf z (mod32+ z (logxor (mod32+ y (logxor (mod32ash y 4) (mod32ash y -5))) (mod32+ sum (aref key (logand (mod32ash sum -11) #x3)))))) ) (store-words ciphertext ciphertext-start y z)))) (define-block-decryptor xtea 8 (with-words ((y z) ciphertext ciphertext-start) (let ((key (key context)) (sum (mod32ash +xtea-delta+ 5))) (declare (type (simple-array (unsigned-byte 32) (4)) key)) (declare (type (unsigned-byte 32) sum)) ;; could probably unroll this loop for reasonable performance gain (dotimes (i +xtea-n-rounds+) (setf z (mod32- z (logxor (mod32+ y (logxor (mod32ash y 4) (mod32ash y -5))) (mod32+ sum (aref key (logand (mod32ash sum -11) #x3)))))) (setf sum (mod32- sum +xtea-delta+)) (setf y (mod32- y (logxor (mod32+ z (logxor (mod32ash z 4) (mod32ash z -5))) (mod32+ sum (aref key (logand sum #x3))))))) (store-words plaintext plaintext-start y z)))) (defmethod schedule-key ((cipher xtea) key) (let ((ub32key (make-array 4 :element-type '(unsigned-byte 32)))) (with-words ((a b c d) key 0) (setf (aref ub32key 0) a (aref ub32key 1) b (aref ub32key 2) c (aref ub32key 3) d) (setf (key cipher) ub32key) cipher))) (defcipher xtea (:encrypt-function xtea-encrypt-block) (:decrypt-function xtea-decrypt-block) (:block-length 8) (:key-length (:fixed 16))) ironclad-0.57/src/common.lisp000066400000000000000000001065741420372057600162330ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; common.lisp -- efficient implementations of mod32 arithmetic and macros ;;; Functions in this file are intended to be fast (in-package :crypto) (defmacro defconst (name value) `(defconstant ,name (if (boundp ',name) (symbol-value ',name) ,value))) ;;; CMUCL and SBCL both have an internal type for this, but we'd like to ;;; be portable, so we define our own. (deftype index () '(mod #.array-dimension-limit)) (deftype index+1 () `(mod ,(1+ array-dimension-limit))) ;;; We write something like this all over the place. (deftype simple-octet-vector (&optional length) (let ((length (or length '*))) `(simple-array (unsigned-byte 8) (,length)))) ;;; a global specification of optimization settings (eval-when (:compile-toplevel :load-toplevel :execute) (defun burn-baby-burn () '(optimize (speed 3) (safety 0) (space 0) (debug 0) (compilation-speed 0))) (defun hold-me-back () '(declare (optimize (speed 3) (space 0) (compilation-speed 0) #-cmu (safety 1) #-cmu (debug 1) #+cmu (safety 0) #+cmu (debug 0)) #+cmu (ext:optimize-interface (safety 1) (debug 1)))) ) ; EVAL-WHEN ;;; extracting individual bytes from integers ;;; We used to declare these functions with much stricter types (e.g. ;;; (UNSIGNED-BYTE 32) as the lone argument), but we need to access ;;; bytes of both 32-bit and 64-bit words and the types would just get ;;; in our way. We declare these functions as inline; a good Common ;;; Lisp compiler should be able to generate efficient code from the ;;; declarations at the point of the call. ;;; These functions are named according to big-endian conventions. The ;;; comment is here because I always forget and need to be reminded. #.(loop for i from 1 to 8 collect (let ((name (read-from-string (format nil "~:R-~A" i '#:byte)))) `(progn (declaim (inline ,name)) (declaim (ftype (function (unsigned-byte) (unsigned-byte 8)) ,name)) (defun ,name (ub) (declare (type unsigned-byte ub)) (ldb (byte 8 ,(* 8 (1- i))) ub)))) into forms finally (return `(progn ,@forms))) ;;; fetching/storing appropriately-sized integers from octet vectors (eval-when (:compile-toplevel :load-toplevel :execute) (defun ubref-fun-name (bitsize big-endian-p) (read-from-string (format nil "ub~dref/~a" bitsize (if big-endian-p "be" "le")))) ) ; EVAL-WHEN (declaim (inline ub16ref/le (setf ub16ref/le) ub16ref/be (setf ub16ref/be) ub32ref/le (setf ub32ref/le) ub32ref/be (setf ub32ref/be) ub64ref/le (setf ub64ref/le) ub64ref/be (setf ub64ref/be))) (defun ub16ref/le (vector offset) (declare (type simple-octet-vector vector) (type index offset)) #+ccl (ccl::%little-endian-u8-ref-u16 vector offset) #+(and ecl ironclad-assembly little-endian) (ffi:c-inline (vector offset) (t :unsigned-int) :uint16-t "*((uint16_t *) ((#0)->array.self.b8 + #1))" :one-liner t :side-effects nil) #+(and sbcl little-endian) (sb-sys:sap-ref-16 (sb-sys:vector-sap vector) offset) #-(or ccl (and ecl ironclad-assembly little-endian) (and sbcl little-endian)) (dpb (aref vector (1+ offset)) (byte 8 8) (aref vector offset))) (defun (setf ub16ref/le) (value vector offset) (declare (type (unsigned-byte 16) value) (type simple-octet-vector vector) (type index offset)) #+ccl (setf (ccl::%little-endian-u8-ref-u16 vector offset) value) #+(and ecl ironclad-assembly little-endian) (ffi:c-inline (vector offset value) (t :unsigned-int :uint16-t) :void "*((uint16_t *) ((#0)->array.self.b8 + #1)) = #2" :one-liner t) #+(and sbcl little-endian) (setf (sb-sys:sap-ref-16 (sb-sys:vector-sap vector) offset) value) #-(or ccl (and ecl ironclad-assembly little-endian) (and sbcl little-endian)) (setf (aref vector offset) (logand value #xff) (aref vector (1+ offset)) (ldb (byte 8 8) value)) value) (defun ub16ref/be (vector offset) (declare (type simple-octet-vector vector) (type index offset)) #+ccl (ccl::%big-endian-u8-ref-u16 vector offset) #+(and sbcl big-endian) (sb-sys:sap-ref-16 (sb-sys:vector-sap vector) offset) #-(or ccl (and sbcl big-endian)) (dpb (aref vector offset) (byte 8 8) (aref vector (1+ offset)))) (defun (setf ub16ref/be) (value vector offset) (declare (type (unsigned-byte 16) value) (type simple-octet-vector vector) (type index offset)) #+ccl (setf (ccl::%big-endian-u8-ref-u16 vector offset) value) #+(and sbcl big-endian) (setf (sb-sys:sap-ref-16 (sb-sys:vector-sap vector) offset) value) #-(or ccl (and sbcl big-endian)) (setf (aref vector (1+ offset)) (logand value #xff) (aref vector offset) (ldb (byte 8 8) value)) value) (defun ub32ref/le (vector offset) (declare (type simple-octet-vector vector) (type index offset)) #+(and ccl ironclad-assembly x86-64) (%ub32ref/le vector offset) #+(and ecl ironclad-assembly little-endian) (ffi:c-inline (vector offset) (t :unsigned-int) :uint32-t "*((uint32_t *) ((#0)->array.self.b8 + #1))" :one-liner t :side-effects nil) #+(and sbcl little-endian) (sb-sys:sap-ref-32 (sb-sys:vector-sap vector) offset) #-(or (and ccl ironclad-assembly x86-64) (and ecl ironclad-assembly little-endian) (and sbcl little-endian)) (dpb (ub16ref/le vector (+ offset 2)) (byte 16 16) (ub16ref/le vector offset))) (defun (setf ub32ref/le) (value vector offset) (declare (type (unsigned-byte 32) value) (type simple-octet-vector vector) (type index offset)) #+(and ccl ironclad-assembly x86-64) (%ub32set/le value vector offset) #+(and ecl ironclad-assembly little-endian) (ffi:c-inline (vector offset value) (t :unsigned-int :uint32-t) :void "*((uint32_t *) ((#0)->array.self.b8 + #1)) = #2" :one-liner t) #+(and sbcl little-endian) (setf (sb-sys:sap-ref-32 (sb-sys:vector-sap vector) offset) value) #-(or (and ccl ironclad-assembly x86-64) (and ecl ironclad-assembly little-endian) (and sbcl little-endian)) (setf (ub16ref/le vector offset) (logand value #xffff) (ub16ref/le vector (+ offset 2)) (ldb (byte 16 16) value)) value) (defun ub32ref/be (vector offset) (declare (type simple-octet-vector vector) (type index offset)) #+(and ccl ironclad-assembly x86-64) (%ub32ref/be vector offset) #+(and ecl ironclad-assembly little-endian) (ffi:c-inline (vector offset) (t :unsigned-int) :uint32-t "{ uint32_t n = *((uint32_t *) ((#0)->array.self.b8 + #1)); uint32_t r = (n << 24) | ((n & 0xff00) << 8) | ((n >> 8) & 0xff00) | (n >> 24); @(return 0) = r; }" :side-effects nil) #+(and sbcl big-endian) (sb-sys:sap-ref-32 (sb-sys:vector-sap vector) offset) #+(and sbcl ironclad-assembly (or x86 x86-64)) (swap32 (sb-sys:sap-ref-32 (sb-sys:vector-sap vector) offset)) #-(or (and ccl ironclad-assembly x86-64) (and ecl ironclad-assembly little-endian) (and sbcl big-endian) (and sbcl ironclad-assembly (or x86 x86-64))) (dpb (ub16ref/be vector offset) (byte 16 16) (ub16ref/be vector (+ offset 2)))) (defun (setf ub32ref/be) (value vector offset) (declare (type (unsigned-byte 32) value) (type simple-octet-vector vector) (type index offset)) #+(and ccl ironclad-assembly x86-64) (%ub32set/be value vector offset) #+(and ecl ironclad-assembly little-endian) (ffi:c-inline (vector offset value) (t :unsigned-int :uint32-t) :void "{ uint32_t n = #2; uint32_t r = (n << 24) | ((n & 0xff00) << 8) | ((n >> 8) & 0xff00) | (n >> 24); *((uint32_t *) ((#0)->array.self.b8 + #1)) = r; }") #+(and sbcl big-endian) (setf (sb-sys:sap-ref-32 (sb-sys:vector-sap vector) offset) value) #+(and sbcl ironclad-assembly (or x86 x86-64)) (setf (sb-sys:sap-ref-32 (sb-sys:vector-sap vector) offset) (swap32 value)) #-(or (and ccl ironclad-assembly x86-64) (and ecl ironclad-assembly little-endian) (and sbcl big-endian) (and sbcl ironclad-assembly (or x86 x86-64))) (setf (ub16ref/be vector (+ offset 2)) (logand value #xffff) (ub16ref/be vector offset) (ldb (byte 16 16) value)) value) (defun ub64ref/le (vector offset) (declare (type simple-octet-vector vector) (type index offset)) #+(and ccl ironclad-assembly x86-64) (%ub64ref/le vector offset) #+(and ecl ironclad-assembly little-endian uint64-t) (ffi:c-inline (vector offset) (t :unsigned-int) :uint64-t "*((uint64_t *) ((#0)->array.self.b8 + #1))" :one-liner t :side-effects nil) #+(and sbcl little-endian 64-bit) (sb-sys:sap-ref-64 (sb-sys:vector-sap vector) offset) #-(or (and ccl ironclad-assembly x86-64) (and ecl ironclad-assembly little-endian uint64-t) (and sbcl little-endian 64-bit)) (dpb (ub32ref/le vector (+ offset 4)) (byte 32 32) (ub32ref/le vector offset))) (defun (setf ub64ref/le) (value vector offset) (declare (type (unsigned-byte 64) value) (type simple-octet-vector vector) (type index offset)) #+(and ccl ironclad-assembly x86-64) (%ub64set/le value vector offset) #+(and ecl ironclad-assembly little-endian uint64-t) (ffi:c-inline (vector offset value) (t :unsigned-int :uint64-t) :void "*((uint64_t *) ((#0)->array.self.b8 + #1)) = #2" :one-liner t) #+(and sbcl little-endian 64-bit) (setf (sb-sys:sap-ref-64 (sb-sys:vector-sap vector) offset) value) #-(or (and ccl ironclad-assembly x86-64) (and ecl ironclad-assembly little-endian uint64-t) (and sbcl little-endian 64-bit)) (setf (ub32ref/le vector offset) (logand value #xffffffff) (ub32ref/le vector (+ offset 4)) (ldb (byte 32 32) value)) value) (defun ub64ref/be (vector offset) (declare (type simple-octet-vector vector) (type index offset)) #+(and ccl ironclad-assembly x86-64) (%ub64ref/be vector offset) #+(and ecl ironclad-assembly little-endian uint64-t) (ffi:c-inline (vector offset) (t :unsigned-int) :uint64-t "{ uint64_t n = *((uint64_t *) ((#0)->array.self.b8 + #1)); uint64_t r = (n << 56) | ((n & 0xff00) << 40) | ((n & 0xff0000) << 24) | ((n & 0xff000000) << 8) | ((n >> 8) & 0xff000000) | ((n >> 24) & 0xff0000) | ((n >> 40) & 0xff00) | (n >> 56); @(return 0) = r; }" :side-effects nil) #+(and sbcl big-endian 64-bit) (sb-sys:sap-ref-64 (sb-sys:vector-sap vector) offset) #+(and sbcl ironclad-assembly x86-64) (swap64 (sb-sys:sap-ref-64 (sb-sys:vector-sap vector) offset)) #-(or (and ccl ironclad-assembly x86-64) (and ecl ironclad-assembly little-endian uint64-t) (and sbcl big-endian 64-bit) (and sbcl ironclad-assembly x86-64)) (dpb (ub32ref/be vector offset) (byte 32 32) (ub32ref/be vector (+ offset 4)))) (defun (setf ub64ref/be) (value vector offset) (declare (type (unsigned-byte 64) value) (type simple-octet-vector vector) (type index offset)) #+(and ccl ironclad-assembly x86-64) (%ub64set/be value vector offset) #+(and ecl ironclad-assembly little-endian uint64-t) (ffi:c-inline (vector offset value) (t :unsigned-int :uint64-t) :void "{ uint64_t n = #2; uint64_t r = (n << 56) | ((n & 0xff00) << 40) | ((n & 0xff0000) << 24) | ((n & 0xff000000) << 8) | ((n >> 8) & 0xff000000) | ((n >> 24) & 0xff0000) | ((n >> 40) & 0xff00) | (n >> 56); *((uint64_t *) ((#0)->array.self.b8 + #1)) = r; }") #+(and sbcl big-endian 64-bit) (setf (sb-sys:sap-ref-64 (sb-sys:vector-sap vector) offset) value) #+(and sbcl ironclad-assembly x86-64) (setf (sb-sys:sap-ref-64 (sb-sys:vector-sap vector) offset) (swap64 value)) #-(or (and ccl ironclad-assembly x86-64) (and ecl ironclad-assembly little-endian uint64-t) (and sbcl big-endian 64-bit) (and sbcl ironclad-assembly x86-64)) (setf (ub32ref/be vector (+ offset 4)) (logand value #xffffffff) (ub32ref/be vector offset) (ldb (byte 32 32) value)) value) ;;; efficient 32-bit arithmetic, which a lot of algorithms require (declaim #+ironclad-fast-mod32-arithmetic (inline mod32+) (ftype (function ((unsigned-byte 32) (unsigned-byte 32)) (unsigned-byte 32)) mod32+)) (defun mod32+ (a b) (declare (type (unsigned-byte 32) a b)) #+(and ccl x86-64 ironclad-assembly) (%mod32+ a b) #+(and ecl ironclad-assembly) (ffi:c-inline (a b) (:uint32-t :uint32-t) :uint32-t "#0 + #1" :one-liner t :side-effects nil) #-(or (and ccl x86-64 ironclad-assembly) (and ecl ironclad-assembly)) (ldb (byte 32 0) (+ a b))) #+cmu (define-compiler-macro mod32+ (a b) `(ext:truly-the (unsigned-byte 32) (+ ,a ,b))) #+sbcl (define-compiler-macro mod32+ (a b) `(ldb (byte 32 0) (+ ,a ,b))) ;;; mostly needed for CAST* (declaim #+ironclad-fast-mod32-arithmetic (inline mod32-) (ftype (function ((unsigned-byte 32) (unsigned-byte 32)) (unsigned-byte 32)) mod32-)) (defun mod32- (a b) (declare (type (unsigned-byte 32) a b)) #+(and ccl x86-64 ironclad-assembly) (%mod32- a b) #+(and ecl ironclad-assembly) (ffi:c-inline (a b) (:uint32-t :uint32-t) :uint32-t "#0 - #1" :one-liner t :side-effects nil) #-(or (and ccl x86-64 ironclad-assembly) (and ecl ironclad-assembly)) (ldb (byte 32 0) (- a b))) #+cmu (define-compiler-macro mod32- (a b) `(ext:truly-the (unsigned-byte 32) (- ,a ,b))) #+sbcl (define-compiler-macro mod32- (a b) `(ldb (byte 32 0) (- ,a ,b))) ;;; mostly needed for RC6 (declaim #+ironclad-fast-mod32-arithmetic (inline mod32*) (ftype (function ((unsigned-byte 32) (unsigned-byte 32)) (unsigned-byte 32)) mod32*)) (defun mod32* (a b) (declare (type (unsigned-byte 32) a b)) #+(and ccl x86-64 ironclad-assembly) (%mod32* a b) #+(and ecl ironclad-assembly) (ffi:c-inline (a b) (:uint32-t :uint32-t) :uint32-t "#0 * #1" :one-liner t :side-effects nil) #-(or (and ccl x86-64 ironclad-assembly) (and ecl ironclad-assembly)) (ldb (byte 32 0) (* a b))) #+cmu (define-compiler-macro mod32* (a b) `(ext:truly-the (unsigned-byte 32) (* ,a ,b))) #+sbcl (define-compiler-macro mod32* (a b) `(ldb (byte 32 0) (* ,a ,b))) (declaim #+ironclad-fast-mod32-arithmetic (inline mod32ash) (ftype (function ((unsigned-byte 32) (integer -31 31)) (unsigned-byte 32)) mod32ash)) (defun mod32ash (num count) (declare (type (unsigned-byte 32) num) (type (integer -31 31) count)) #+(and ccl x86-64 ironclad-assembly) (%mod32ash num count) #+(and ecl ironclad-assembly) (ffi:c-inline (num count) (:uint32-t :int8-t) :uint32-t "(#1 > 0) ? (#0 << #1) : (#0 >> -#1)" :one-liner t :side-effects nil) #-(or (and ccl x86-64 ironclad-assembly) (and ecl ironclad-assembly)) (ldb (byte 32 0) (ash num count))) #+sbcl (define-compiler-macro mod32ash (num count) ;; work around SBCL optimizing bug as described by APD: ;; http://www.caddr.com/macho/archives/sbcl-devel/2004-8/3877.html `(logand #xffffffff (ash ,num ,count))) (declaim #+ironclad-fast-mod32-arithmetic (inline mod32lognot) (ftype (function ((unsigned-byte 32)) (unsigned-byte 32)) mod32lognot)) (defun mod32lognot (num) (declare (type (unsigned-byte 32) num)) #+(and ccl x86-64 ironclad-assembly) (%mod32lognot num) #+(and ecl ironclad-assembly) (ffi:c-inline (num) (:uint32-t) :uint32-t "~#0" :one-liner t :side-effects nil) #-(or (and ccl x86-64 ironclad-assembly) (and ecl ironclad-assembly)) (ldb (byte 32 0) (lognot num))) #+sbcl (define-compiler-macro mod32lognot (num) `(ldb (byte 32 0) (lognot ,num))) (declaim #+ironclad-fast-mod32-arithmetic (inline rol32 ror32) (ftype (function ((unsigned-byte 32) (unsigned-byte 5)) (unsigned-byte 32)) rol32 ror32)) (defun rol32 (a s) (declare (type (unsigned-byte 32) a) (type (integer 0 32) s)) #+(and ccl x86-64 ironclad-assembly) (%rol32 a s) #+cmu (kernel:32bit-logical-or #+little-endian (kernel:shift-towards-end a s) #+big-endian (kernel:shift-towards-start a s) (ash a (- s 32))) #+(and ecl ironclad-assembly) (ffi:c-inline (a s) (:uint32-t :uint8-t) :uint32-t "(#0 << #1) | (#0 >> (32 - #1))" :one-liner t :side-effects nil) #+sbcl (sb-rotate-byte:rotate-byte s (byte 32 0) a) #-(or (and ccl x86-64 ironclad-assembly) cmu (and ecl ironclad-assembly) sbcl) (logior (ldb (byte 32 0) (ash a s)) (ash a (- s 32)))) (defun ror32 (a s) (declare (type (unsigned-byte 32) a) (type (integer 0 32) s)) #+(and ccl x86-64 ironclad-assembly) (%ror32 a s) #+(and ecl ironclad-assembly) (ffi:c-inline (a s) (:uint32-t :uint8-t) :uint32-t "(#0 << (32 - #1)) | (#0 >> #1)" :one-liner t :side-effects nil) #+sbcl (sb-rotate-byte:rotate-byte (- s) (byte 32 0) a) #-(or (and ccl x86-64 ironclad-assembly) (and ecl ironclad-assembly) sbcl) (rol32 a (- 32 s))) (declaim #+ironclad-fast-mod64-arithmetic (inline mod64+ mod64- mod64*) (ftype (function ((unsigned-byte 64) (unsigned-byte 64)) (unsigned-byte 64)) mod64+)) (defun mod64+ (a b) (declare (type (unsigned-byte 64) a b)) #+(and ccl x86-64 ironclad-assembly) (%mod64+ a b) #+(and ecl ironclad-assembly uint64-t) (ffi:c-inline (a b) (:uint64-t :uint64-t) :uint64-t "#0 + #1" :one-liner t :side-effects nil) #-(or (and ccl x86-64 ironclad-assembly) (and ecl ironclad-assembly uint64-t)) (ldb (byte 64 0) (+ a b))) #+sbcl (define-compiler-macro mod64+ (a b) `(ldb (byte 64 0) (+ ,a ,b))) (defun mod64- (a b) (declare (type (unsigned-byte 64) a b)) #+(and ccl x86-64 ironclad-assembly) (%mod64- a b) #+(and ecl ironclad-assembly uint64-t) (ffi:c-inline (a b) (:uint64-t :uint64-t) :uint64-t "#0 - #1" :one-liner t :side-effects nil) #-(or (and ccl x86-64 ironclad-assembly) (and ecl ironclad-assembly uint64-t)) (ldb (byte 64 0) (- a b))) #+sbcl (define-compiler-macro mod64- (a b) `(ldb (byte 64 0) (- ,a ,b))) (defun mod64* (a b) (declare (type (unsigned-byte 64) a b)) #+(and ccl x86-64 ironclad-assembly) (%mod64* a b) #+(and ecl ironclad-assembly uint64-t) (ffi:c-inline (a b) (:uint64-t :uint64-t) :uint64-t "#0 * #1" :one-liner t :side-effects nil) #-(or (and ccl x86-64 ironclad-assembly) (and ecl ironclad-assembly uint64-t)) (ldb (byte 64 0) (* a b))) #+sbcl (define-compiler-macro mod64* (a b) `(ldb (byte 64 0) (* ,a ,b))) (declaim #+ironclad-fast-mod64-arithmetic (inline mod64ash) (ftype (function ((unsigned-byte 64) (integer -63 63)) (unsigned-byte 64)) mod64ash)) (defun mod64ash (num count) (declare (type (unsigned-byte 64) num) (type (integer -63 63) count)) #+(and ccl x86-64 ironclad-assembly) (%mod64ash num count) #+(and ecl ironclad-assembly uint64-t) (ffi:c-inline (num count) (:uint64-t :int8-t) :uint64-t "(#1 > 0) ? (#0 << #1) : (#0 >> -#1)" :one-liner t :side-effects nil) #-(or (and ccl x86-64 ironclad-assembly) (and ecl ironclad-assembly uint64-t)) (ldb (byte 64 0) (ash num count))) #+sbcl (define-compiler-macro mod64ash (num count) ;; work around SBCL optimizing bug as described by APD: ;; http://www.caddr.com/macho/archives/sbcl-devel/2004-8/3877.html `(logand #xffffffffffffffff (ash ,num ,count))) (declaim #+ironclad-fast-mod64-arithmetic (inline mod64lognot) (ftype (function ((unsigned-byte 64)) (unsigned-byte 64)) mod64lognot)) (defun mod64lognot (num) (declare (type (unsigned-byte 64) num)) #+(and ccl x86-64 ironclad-assembly) (%mod64lognot num) #+(and ecl ironclad-assembly uint64-t) (ffi:c-inline (num) (:uint64-t) :uint64-t "~#0" :one-liner t :side-effects nil) #-(or (and ccl x86-64 ironclad-assembly) (and ecl ironclad-assembly uint64-t)) (ldb (byte 64 0) (lognot num))) #+sbcl (define-compiler-macro mod64lognot (num) `(ldb (byte 64 0) (lognot ,num))) (declaim #+ironclad-fast-mod64-arithmetic (inline rol64 ror64) (ftype (function ((unsigned-byte 64) (unsigned-byte 6)) (unsigned-byte 64)) rol64 ror64)) (defun rol64 (a s) (declare (type (unsigned-byte 64) a) (type (integer 0 64) s)) #+(and ccl x86-64 ironclad-assembly) (%rol64 a s) #+(and ecl ironclad-assembly uint64-t) (ffi:c-inline (a s) (:uint64-t :uint8-t) :uint64-t "(#0 << #1) | (#0 >> (64 - #1))" :one-liner t :side-effects nil) #+sbcl (sb-rotate-byte:rotate-byte s (byte 64 0) a) #-(or (and ccl x86-64 ironclad-assembly) (and ecl ironclad-assembly uint64-t) sbcl) (logior (ldb (byte 64 0) (ash a s)) (ash a (- s 64)))) (defun ror64 (a s) (declare (type (unsigned-byte 64) a) (type (integer 0 64) s)) #+(and ccl x86-64 ironclad-assembly) (%ror64 a s) #+(and ecl ironclad-assembly uint64-t) (ffi:c-inline (a s) (:uint64-t :uint8-t) :uint64-t "(#0 << (64 - #1)) | (#0 >> #1)" :one-liner t :side-effects nil) #+sbcl (sb-rotate-byte:rotate-byte (- s) (byte 64 0) a) #-(or (and ccl x86-64 ironclad-assembly) (and ecl ironclad-assembly uint64-t) sbcl) (rol64 a (- 64 s))) ;;; 64-bit utilities (declaim #+ironclad-fast-mod32-arithmetic (inline %add-with-carry %subtract-with-borrow)) ;;; The names are taken from sbcl and cmucl's bignum routines. ;;; Naturally, they work the same way (which means %SUBTRACT-WITH-BORROW ;;; is a little weird). (defun %add-with-carry (x y carry) (declare (type (unsigned-byte 32) x y) (type (mod 2) carry)) #+(and sbcl 32-bit) (sb-bignum:%add-with-carry x y carry) #+(and cmucl 32-bit) (bignum:%add-with-carry x y carry) #-(or (and sbcl 32-bit) (and cmucl 32-bit)) (let* ((temp (mod32+ x y)) (temp-carry (if (< temp x) 1 0)) (result (mod32+ temp carry))) (values result (logior temp-carry (if (< result temp) 1 0))))) (defun %subtract-with-borrow (x y borrow) (declare (type (unsigned-byte 32) x y) (type (mod 2) borrow)) #+(and sbcl 32-bit) (sb-bignum:%subtract-with-borrow x y borrow) #+(and cmucl 32-bit) (bignum:%subtract-with-borrow x y borrow) #-(or (and sbcl 32-bit) (and cmucl 32-bit)) (let ((temp (mod32- x y))) (cond ((zerop borrow) (values (mod32- temp 1) (if (< y x) 1 0))) (t (values temp (logxor (if (< x y) 1 0) 1)))))) ;;; efficient 8-byte -> 32-byte buffer copy routines, mostly used by ;;; the hash functions. we provide big-endian and little-endian ;;; versions. (declaim (inline fill-block-le-ub8 fill-block-be-ub8)) (declaim (inline copy-to-buffer)) (defun copy-to-buffer (from from-offset count buffer buffer-offset) "Copy a partial segment from input vector from starting at from-offset and copying count elements into the 64 byte buffer starting at buffer-offset." (declare (type index from-offset) (type (integer 0 127) count buffer-offset) (type simple-octet-vector from) (type simple-octet-vector buffer) #.(burn-baby-burn)) #+cmu (kernel:bit-bash-copy from (+ (* vm:vector-data-offset vm:word-bits) (* from-offset vm:byte-bits)) buffer (+ (* vm:vector-data-offset vm:word-bits) (* buffer-offset vm:byte-bits)) (* count vm:byte-bits)) #+sbcl (sb-kernel:ub8-bash-copy from from-offset buffer buffer-offset count) #-(or cmu sbcl) (loop for buffer-index of-type (integer 0 64) from buffer-offset for from-index of-type fixnum from from-offset below (+ from-offset count) do (setf (aref buffer buffer-index) (aref from from-index)))) (defun fill-block-ub8-le (block buffer offset) "Convert a complete 64 (UNSIGNED-BYTE 8) input BUFFER starting from OFFSET into the given (UNSIGNED-BYTE 32) BLOCK." (declare (type (integer 0 #.(- array-dimension-limit 64)) offset) (type (simple-array (unsigned-byte 32) (16)) block) (type simple-octet-vector buffer)) #+(and :cmu :little-endian) (kernel:bit-bash-copy buffer (+ (* vm:vector-data-offset vm:word-bits) (* offset vm:byte-bits)) block (* vm:vector-data-offset vm:word-bits) (* 64 vm:byte-bits)) #+(and :sbcl :little-endian) (sb-kernel:ub8-bash-copy buffer offset block 0 64) #-(or (and :sbcl :little-endian) (and :cmu :little-endian)) (loop for i of-type (integer 0 16) from 0 for j of-type (integer 0 #.array-dimension-limit) from offset to (+ offset 63) by 4 do (setf (aref block i) (ub32ref/le buffer j))) (values)) (defun fill-block-ub8-be (block buffer offset) "Convert a complete 64 (unsigned-byte 8) input vector segment starting from offset into the given 16 word SHA1 block. Calling this function without subsequently calling EXPAND-BLOCK results in undefined behavior." (declare (type (integer 0 #.(- array-dimension-limit 64)) offset) (type (simple-array (unsigned-byte 32) (*)) block) (type simple-octet-vector buffer)) ;; convert to 32-bit words #+(and :cmu :big-endian) (kernel:bit-bash-copy buffer (+ (* vm:vector-data-offset vm:word-bits) (* offset vm:byte-bits)) block (* vm:vector-data-offset vm:word-bits) (* 64 vm:byte-bits)) #+(and :sbcl :big-endian) (sb-kernel:ub8-bash-copy buffer offset block 0 64) #-(or (and :sbcl :big-endian) (and :cmu :big-endian)) (loop for i of-type (integer 0 16) from 0 for j of-type (integer 0 #.array-dimension-limit) from offset to (+ offset 63) by 4 do (setf (aref block i) (ub32ref/be buffer j))) (values)) (defun fill-block-ub8-le/64 (block buffer offset) "Convert a complete 128 (unsigned-byte 8) input vector segment starting from offset into the given 16 qword SHA1 block. Calling this function without subsequently calling EXPAND-BLOCK results in undefined behavior." (declare (type (integer 0 #.(- array-dimension-limit 64)) offset) (type (simple-array (unsigned-byte 64) (*)) block) (type simple-octet-vector buffer) #.(burn-baby-burn)) ;; convert to 64-bit words #+(and :cmu :little-endian :64-bit) (kernel:bit-bash-copy buffer (+ (* vm:vector-data-offset vm:word-bits) (* offset vm:byte-bits)) block (* vm:vector-data-offset vm:word-bits) (* 64 vm:byte-bits)) #+(and :sbcl :little-endian :64-bit) (sb-kernel:ub8-bash-copy buffer offset block 0 64) #-(or (and :sbcl :little-endian :64-bit) (and :cmu :little-endian :64-bit)) (loop for i of-type (integer 0 8) from 0 for j of-type (integer 0 #.array-dimension-limit) from offset to (+ offset 63) by 8 do (setf (aref block i) (ub64ref/le buffer j))) (values)) (defun fill-block-ub8-be/64 (block buffer offset) "Convert a complete 128 (unsigned-byte 8) input vector segment starting from offset into the given 16 qword SHA1 block. Calling this function without subsequently calling EXPAND-BLOCK results in undefined behavior." (declare (type (integer 0 #.(- array-dimension-limit 128)) offset) (type (simple-array (unsigned-byte 64) (*)) block) (type simple-octet-vector buffer) #.(burn-baby-burn)) ;; convert to 64-bit words #+(and :cmu :big-endian :64-bit) (kernel:bit-bash-copy buffer (+ (* vm:vector-data-offset vm:word-bits) (* offset vm:byte-bits)) block (* vm:vector-data-offset vm:word-bits) (* 128 vm:byte-bits)) #+(and :sbcl :big-endian :64-bit) (sb-kernel:ub8-bash-copy buffer offset block 0 128) #-(or (and :sbcl :big-endian) (and :cmu :big-endian)) (loop for i of-type (integer 0 16) from 0 for j of-type (integer 0 #.array-dimension-limit) from offset to (+ offset 127) by 8 do (setf (aref block i) (ub64ref/be buffer j))) (values)) (defun xor-block (block-length input-block1 input-block1-start input-block2 input-block2-start output-block output-block-start) (declare (type (simple-array (unsigned-byte 8) (*)) input-block1 input-block2 output-block) (type index block-length input-block1-start input-block2-start output-block-start) #.(burn-baby-burn)) (macrolet ((xor-bytes (size xor-form) `(loop until (< block-length ,size) do ,xor-form (incf output-block-start ,size) (incf input-block1-start ,size) (incf input-block2-start ,size) (decf block-length ,size)))) #+(and sbcl x86-64 ironclad-assembly) (xor-bytes 16 (xor128 input-block1 input-block1-start input-block2 input-block2-start output-block output-block-start)) #+(and sbcl x86-64) (xor-bytes 8 (setf (ub64ref/le output-block output-block-start) (logxor (ub64ref/le input-block1 input-block1-start) (ub64ref/le input-block2 input-block2-start)))) #+(and sbcl (or x86 x86-64)) (xor-bytes 4 (setf (ub32ref/le output-block output-block-start) (logxor (ub32ref/le input-block1 input-block1-start) (ub32ref/le input-block2 input-block2-start)))) (xor-bytes 1 (setf (aref output-block output-block-start) (logxor (aref input-block1 input-block1-start) (aref input-block2 input-block2-start)))))) (define-compiler-macro xor-block (&whole form &environment env block-length input-block1 input-block1-start input-block2 input-block2-start output-block output-block-start) (cond #+(and sbcl x86-64 ironclad-assembly) ((and (constantp block-length env) (= block-length 16)) `(xor128 ,input-block1 ,input-block1-start ,input-block2 ,input-block2-start ,output-block ,output-block-start)) #+(and sbcl x86-64 ironclad-assembly) ((and (constantp block-length env) (zerop (mod block-length 16))) (let ((i (gensym))) `(loop for ,i from 0 below ,block-length by 16 do (xor128 ,input-block1 (+ ,input-block1-start ,i) ,input-block2 (+ ,input-block2-start ,i) ,output-block (+ ,output-block-start ,i))))) #+(and sbcl x86-64) ((and (constantp block-length env) (= block-length 8)) `(setf (ub64ref/le ,output-block ,output-block-start) (logxor (ub64ref/le ,input-block1 ,input-block1-start) (ub64ref/le ,input-block2 ,input-block2-start)))) #+(and sbcl (or x86 x86-64)) ((and (constantp block-length env) (= block-length 4)) `(setf (ub32ref/le ,output-block ,output-block-start) (logxor (ub32ref/le ,input-block1 ,input-block1-start) (ub32ref/le ,input-block2 ,input-block2-start)))) #+(and sbcl x86) ((and (constantp block-length env) (zerop (mod block-length 4))) (let ((i (gensym))) `(loop for ,i from 0 below ,block-length by 4 do (setf (ub32ref/le ,output-block (+ ,output-block-start ,i)) (logxor (ub32ref/le ,input-block1 (+ ,input-block1-start ,i)) (ub32ref/le ,input-block2 (+ ,input-block2-start ,i))))))) (t form))) (defun copy-block (block-length input-block input-block-start output-block output-block-start) (declare (type (simple-array (unsigned-byte 8) (*)) input-block output-block) (type index block-length input-block-start output-block-start) #.(burn-baby-burn)) (macrolet ((copy-bytes (size copy-form) `(loop until (< block-length ,size) do ,copy-form (incf input-block-start ,size) (incf output-block-start ,size) (decf block-length ,size)))) #+(and sbcl x86-64 ironclad-assembly) (copy-bytes 16 (mov128 input-block input-block-start output-block output-block-start)) #+(and sbcl x86-64) (copy-bytes 8 (setf (ub64ref/le output-block output-block-start) (ub64ref/le input-block input-block-start))) #+(and sbcl (or x86 x86-64)) (copy-bytes 4 (setf (ub32ref/le output-block output-block-start) (ub32ref/le input-block input-block-start))) (replace output-block input-block :start1 output-block-start :end1 (+ output-block-start block-length) :start2 input-block-start :end2 (+ input-block-start block-length)))) (define-compiler-macro copy-block (&whole form &environment env block-length input-block input-block-start output-block output-block-start) (cond #+(and sbcl x86-64 ironclad-assembly) ((and (constantp block-length env) (= block-length 16)) `(mov128 ,input-block ,input-block-start ,output-block ,output-block-start)) #+(and sbcl x86-64 ironclad-assembly) ((and (constantp block-length env) (zerop (mod block-length 16))) (let ((i (gensym))) `(loop for ,i from 0 below ,block-length by 16 do (mov128 ,input-block (+ ,input-block-start ,i) ,output-block (+ ,output-block-start ,i))))) #+(and sbcl x86-64) ((and (constantp block-length env) (= block-length 8)) `(setf (ub64ref/le ,output-block ,output-block-start) (ub64ref/le ,input-block ,input-block-start))) #+(and sbcl (or x86 x86-64)) ((and (constantp block-length env) (= block-length 4)) `(setf (ub32ref/le ,output-block ,output-block-start) (ub32ref/le ,input-block ,input-block-start))) #+(and sbcl x86) ((and (constantp block-length env) (zerop (mod block-length 4))) (let ((i (gensym))) `(loop for ,i from 0 below ,block-length by 4 do (setf (ub32ref/le ,output-block (+ ,output-block-start ,i)) (ub32ref/le ,input-block (+ ,input-block-start ,i)))))) (t form))) ironclad-0.57/src/conditions.lisp000066400000000000000000000251621420372057600171050ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; conditions.lisp -- various error conditions (in-package :ironclad) (define-condition ironclad-error (simple-error) ()) (define-condition key-not-supplied (ironclad-error) ((cipher :initarg :cipher :reader cipher)) (:report (lambda (condition stream) (format stream "Cipher ~A requires a key." (cipher condition)))) (:documentation "Signaled when a key is not provided at the initialization of a cipher.")) (define-condition initialization-vector-not-supplied (ironclad-error) ((mode :initarg :mode :reader mode)) (:report (lambda (condition stream) (format stream "Mode ~A requires an initialization vector." (mode condition)))) (:documentation "Signaled when an initialization vector is required for a particular mode of operation but not supplied.")) (define-condition invalid-initialization-vector (ironclad-error) ((cipher :initarg :cipher :reader cipher) (block-length :initarg :block-length :reader block-length)) (:report (lambda (condition stream) (format stream "Cipher ~A requires an initialization vector of length ~D." (cipher condition) (block-length condition)))) (:documentation "Signaled when an invalid initialization vector is supplied to MAKE-CIPHER.")) (define-condition invalid-key-length (ironclad-error) ((cipher :initarg :cipher :reader cipher) (lengths :initarg :accepted-lengths :reader accepted-lengths)) (:report (lambda (condition stream) (format stream "Cipher ~A only accepts keys of these lengths: ~A." (cipher condition) (accepted-lengths condition)))) (:documentation "Signaled when a key is not the proper length for a cipher.")) (define-condition unsupported-cipher (ironclad-error) ((cipher :initarg :name :reader cipher)) (:report (lambda (condition stream) (format stream "Cipher ~A is not a supported cipher." (cipher condition)))) (:documentation "Signaled when an invalid cipher name is provided to MAKE-CIPHER.")) (define-condition unsupported-mode (ironclad-error) ((mode :initarg :mode :reader mode) (cipher :initarg :cipher :reader cipher)) (:report (lambda (condition stream) (if (cipher condition) (format stream "Mode ~A is not a supported mode for ~A." (mode condition) (cipher condition)) (format stream "Mode ~A is not a supported mode." (mode condition))))) (:documentation "Signaled when an invalid mode name is provided to MAKE-CIPHER.")) (define-condition unsupported-padding (ironclad-error) ((padding :initarg :name :reader padding)) (:report (lambda (condition stream) (format stream "Padding ~A is not a supported padding." (padding condition)))) (:documentation "Signaled when an invalid padding name is provided to MAKE-CIPHER.")) (define-condition unsupported-digest (ironclad-error) ((digest :initarg :name :reader digest)) (:report (lambda (condition stream) (format stream "Digest ~A is not a supported digest." (digest condition)))) (:documentation "Signaled when an invalid digest name is provided to MAKE-DIGEST.")) (define-condition unsupported-mac (ironclad-error) ((mac :initarg :name :reader mac)) (:report (lambda (condition stream) (format stream "MAC ~A is not a supported MAC." (mac condition)))) (:documentation "Signaled when an invalid MAC name is provided to MAKE-MAC.")) (define-condition unsupported-kdf (ironclad-error) ((kdf :initarg :kdf :reader kdf)) (:report (lambda (condition stream) (format stream "~A is not a supported key derivation function." (kdf condition)))) (:documentation "Signaled when an invalid key derivation function name is provided to MAKE-KDF.")) (define-condition unsupported-scrypt-cost-factors (ironclad-error) ((N :initarg :N :reader cost-N) (r :initarg :r :reader cost-r) (p :initarg :p :reader cost-p)) (:report (lambda (condition stream) (format stream "Scrypt cost factors not supported. N=~A must be a power of two and (r=~A * p=~A) <= 2^30." (cost-N condition) (cost-r condition) (cost-p condition)))) (:documentation "Signaled when invalid Scrypt cost factors are provided to MAKE-KDF.")) (define-condition unsupported-argon2-parameters (ironclad-error) () (:report (lambda (condition stream) (declare (ignore condition)) (format stream "Argon2 parameters not supported. block-count must be at least 8, key-length must be at least 4, salt must be at least 8 bytes long and iteration-count must be at least 1."))) (:documentation "Signaled when invalid Argon2 parameters are provided to MAKE-KDF.")) (define-condition insufficient-buffer-space (ironclad-error) ((buffer :initarg :buffer :reader insufficient-buffer-space-buffer) (start :initarg :start :reader insufficient-buffer-space-start) (length :initarg :length :reader insufficient-buffer-space-length)) (:report (lambda (condition stream) (format stream "Buffer ~A cannot accommodate ~D elements starting at index ~D." (insufficient-buffer-space-buffer condition) (insufficient-buffer-space-length condition) (insufficient-buffer-space-start condition)))) (:documentation "Signaled when insufficient buffer space exists for an operation.")) (define-condition invalid-padding (ironclad-error) ((padding-name :initarg :name :reader invalid-padding-padding-name) (block :initarg :block :reader invalid-padding-block)) (:report (lambda (condition stream) (format stream "The ~A padding in block ~A is invalid." (invalid-padding-padding-name condition) (invalid-padding-block condition)))) (:documentation "Signaled when padding in a block is determined to be invalid.")) (define-condition invalid-mac-parameter (ironclad-error) ((mac-name :initarg :mac-name :reader mac-name) (message :initarg :message :reader message)) (:report (lambda (condition stream) (format stream "Invalid parameter for MAC ~A. ~A." (mac-name condition) (message condition)))) (:documentation "Signaled when an invalid parameter is provided to MAKE-MAC.")) (define-condition invalid-signature-length (ironclad-error) ((kind :initarg :kind :reader kind)) (:report (lambda (condition stream) (format stream "Invalid signature length for ~A." (kind condition)))) (:documentation "Signaled when a signature with an invalid length is provided to VERIFY-SIGNATURE or DESTRUCTURE-SIGNATURE.")) (define-condition invalid-message-length (ironclad-error) ((kind :initarg :kind :reader kind)) (:report (lambda (condition stream) (format stream "Invalid message length for ~A." (kind condition)))) (:documentation "Signaled when a message with an invalid length is provided to ENCRYPT-MESSAGE, DECRYPT-MESSAGE or DESTRUCTURE-MESSAGE.")) (define-condition missing-key-parameter (ironclad-error) ((kind :initarg :kind :reader kind) (parameter :initarg :parameter :reader parameter) (description :initarg :description :reader description)) (:report (lambda (condition stream) (format stream "Missing ~A ~A for ~A key." (description condition) (parameter condition) (kind condition)))) (:documentation "Signaled when it is determined that a parameter is missing in a call to MAKE-PUBLIC-KEY or MAKE-PRIVATE-KEY.")) (define-condition missing-message-parameter (ironclad-error) ((kind :initarg :kind :reader kind) (parameter :initarg :parameter :reader parameter) (description :initarg :description :reader description)) (:report (lambda (condition stream) (format stream "Missing ~A ~A for ~A message." (description condition) (parameter condition) (kind condition)))) (:documentation "Signaled when it is determined that a parameter is missing in a call to MAKE-MESSAGE.")) (define-condition missing-signature-parameter (ironclad-error) ((kind :initarg :kind :reader kind) (parameter :initarg :parameter :reader parameter) (description :initarg :description :reader description)) (:report (lambda (condition stream) (format stream "Missing ~A ~A for ~A signature." (description condition) (parameter condition) (kind condition)))) (:documentation "Signaled when it is determined that a parameter is missing in a call to MAKE-SIGNATURE.")) (define-condition incompatible-keys (ironclad-error) ((kind :initarg :kind :reader kind)) (:report (lambda (condition stream) (format stream "The ~A keys are not compatible because they are not in the same group." (kind condition)))) (:documentation "Signaled when providing keys that are not compatible to DIFFIE-HELLMAN.")) (define-condition invalid-curve-point (ironclad-error) ((kind :initarg :kind :reader kind)) (:report (lambda (condition stream) (format stream "Point not on curve ~A." (kind condition)))) (:documentation "Signaled when trying to use an invalid curve point.")) (define-condition invalid-public-key-length (ironclad-error) ((kind :initarg :kind :reader kind)) (:report (lambda (condition stream) (format stream "Invalid public key length for ~A." (kind condition)))) (:documentation "Signaled when a public key with an invalid length is provided to VERIFY-SIGNATURE.")) (define-condition oaep-decoding-error (ironclad-error) () (:report (lambda (condition stream) (declare (ignore condition)) (format stream "OAEP decoding of the message failed."))) (:documentation "Signaled when the OAEP decoding of a message fails.")) (define-condition unsupported-authenticated-encryption-mode (ironclad-error) ((name :initarg :name :reader name)) (:report (lambda (condition stream) (format stream "~A is not a supported authenticated encryption mode." (name condition)))) (:documentation "Signaled when an invalid mode name is provided to MAKE-AUTHENTICATED-ENCRYPTION-MODE.")) (define-condition bad-authentication-tag (ironclad-error) () (:report (lambda (condition stream) (declare (ignore condition)) (format stream "Bad authentication tag."))) (:documentation "Signaled when the verification of authenticity of a message fails.")) ironclad-0.57/src/digests/000077500000000000000000000000001420372057600154775ustar00rootroot00000000000000ironclad-0.57/src/digests/adler32.lisp000066400000000000000000000042201420372057600176220ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; adler32.lisp - computing adler32 checksums (rfc1950) of a byte array (in-package :crypto) ;;; smallest prime < 65536 (defconstant adler32-modulo 65521) (defstruct (adler32 (:constructor %make-adler32-digest nil) (:constructor %make-adler32-state (s1 s2)) (:copier nil)) (s1 1 :type fixnum) (s2 0 :type fixnum)) (defmethod reinitialize-instance ((state adler32) &rest initargs) (declare (ignore initargs)) (setf (adler32-s1 state) 1 (adler32-s2 state) 0) state) (defmethod copy-digest ((state adler32) &optional copy) (check-type copy (or null adler32)) (cond (copy (setf (adler32-s1 copy) (adler32-s1 state) (adler32-s2 copy) (adler32-s2 copy)) copy) (t (%make-adler32-state (adler32-s1 state) (adler32-s2 state))))) (define-digest-updater adler32 ;; many thanks to Xach for his code from Salza. (let ((length (- end start)) (i 0) (k 0) (s1 (adler32-s1 state)) (s2 (adler32-s2 state))) (declare (type index i k length) (type fixnum s1 s2)) (unless (zerop length) (tagbody loop (setf k (min 16 length)) (decf length k) sum (setf s1 (+ (aref sequence (+ start i)) s1)) (setf s2 (+ s1 s2)) (decf k) (incf i) (unless (zerop k) (go sum)) (setf s1 (mod s1 adler32-modulo)) (setf s2 (mod s2 adler32-modulo)) (unless (zerop length) (go loop)) (setf (adler32-s1 state) s1 (adler32-s2 state) s2))) state)) (define-digest-finalizer (adler32 4) (flet ((stuff-state (state digest start) (declare (type (simple-array (unsigned-byte 8) (*)) digest)) (declare (type (integer 0 #.(- array-dimension-limit 4)) start)) (setf (ub32ref/be digest start) (logior (ash (adler32-s2 state) 16) (adler32-s1 state))) digest)) (declare (inline stuff-state)) (stuff-state state digest digest-start))) (defdigest adler32 :digest-length 4 :block-length 1) ironclad-0.57/src/digests/blake2.lisp000066400000000000000000000270401420372057600175330ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; blake2.lisp -- implementation of the BLAKE2b hash function (RFC 7693) (in-package :crypto) ;;; ;;; Parameters ;;; (eval-when (:compile-toplevel :load-toplevel :execute) (defconstant +blake2-rounds+ 12) (defconstant +blake2-block-size+ 128) (defconst +blake2-sigma+ (make-array '(12 16) :element-type '(integer 0 15) :initial-contents '((0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (14 10 4 8 9 15 13 6 1 12 0 2 11 7 5 3) (11 8 12 0 5 2 15 13 10 14 3 6 7 1 9 4) (7 9 3 1 13 12 11 14 2 6 5 10 4 0 15 8) (9 0 5 7 2 4 10 15 14 1 11 12 6 8 3 13) (2 12 6 10 0 11 8 3 4 13 7 5 15 14 1 9) (12 5 1 15 14 13 4 10 0 7 6 3 9 2 8 11) (13 11 7 14 12 1 3 9 5 0 15 4 8 6 2 10) (6 15 14 9 11 3 0 8 12 2 13 7 1 4 10 5) (10 2 8 4 7 6 1 5 15 11 9 14 3 12 13 0) (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (14 10 4 8 9 15 13 6 1 12 0 2 11 7 5 3)))) (defconst +blake2-iv+ (make-array 8 :element-type '(unsigned-byte 64) :initial-contents '(#x6A09E667F3BCC908 #xBB67AE8584CAA73B #x3C6EF372FE94F82B #xA54FF53A5F1D36F1 #x510E527FADE682D1 #x9B05688C2B3E6C1F #x1F83D9ABFB41BD6B #x5BE0CD19137E2179)))) (defun blake2-make-initial-state (output-length &optional (key-length 0)) (when (> output-length 64) (error 'ironclad-error :format-control "The output length must be at most 64 bytes.")) (when (> key-length 64) (error 'ironclad-error :format-control "The key length must be at most 64 bytes.")) (let ((state (copy-seq +blake2-iv+))) (setf (aref state 0) (logxor (aref state 0) #x01010000 (ash key-length 8) output-length)) state)) ;;; ;;; Blake2b rounds ;;; (declaim (ftype (function ((simple-array (unsigned-byte 64) (8)) (simple-array (unsigned-byte 8) (*)) fixnum (unsigned-byte 128) boolean)) blake2-rounds)) (defun blake2-rounds (state input start offset final) (declare (type (simple-array (unsigned-byte 64) (8)) state) (type (simple-array (unsigned-byte 8) (*)) input) (type fixnum start) (type (unsigned-byte 128) offset) (type boolean final) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (macrolet ((blake2-mixing (va vb vc vd x y) `(setf ,va (mod64+ (mod64+ ,va ,vb) ,x) ,vd (ror64 (logxor ,vd ,va) 32) ,vc (mod64+ ,vc ,vd) ,vb (ror64 (logxor ,vb ,vc) 24) ,va (mod64+ (mod64+ ,va ,vb) ,y) ,vd (ror64 (logxor ,vd ,va) 16) ,vc (mod64+ ,vc ,vd) ,vb (ror64 (logxor ,vb ,vc) 63)))) (let ((v0 (aref state 0)) (v1 (aref state 1)) (v2 (aref state 2)) (v3 (aref state 3)) (v4 (aref state 4)) (v5 (aref state 5)) (v6 (aref state 6)) (v7 (aref state 7)) (v8 (aref +blake2-iv+ 0)) (v9 (aref +blake2-iv+ 1)) (v10 (aref +blake2-iv+ 2)) (v11 (aref +blake2-iv+ 3)) (v12 (aref +blake2-iv+ 4)) (v13 (aref +blake2-iv+ 5)) (v14 (aref +blake2-iv+ 6)) (v15 (aref +blake2-iv+ 7)) (m (make-array 16 :element-type '(unsigned-byte 64) :initial-element 0))) (declare (type (unsigned-byte 64) v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15) (type (simple-array (unsigned-byte 64) (16)) m) (dynamic-extent m)) (setf v12 (logxor v12 (ldb (byte 64 0) offset)) v13 (logxor v13 (ldb (byte 64 64) offset))) (when final (setf v14 (logxor v14 #xFFFFFFFFFFFFFFFF))) ;; Get input data as 64-bit little-endian integers (dotimes-unrolled (i 16) (setf (aref m i) (ub64ref/le input (+ start (* i 8))))) ;; Mixing rounds (dotimes-unrolled (i +blake2-rounds+) (blake2-mixing v0 v4 v8 v12 (aref m (aref +blake2-sigma+ i 0)) (aref m (aref +blake2-sigma+ i 1))) (blake2-mixing v1 v5 v9 v13 (aref m (aref +blake2-sigma+ i 2)) (aref m (aref +blake2-sigma+ i 3))) (blake2-mixing v2 v6 v10 v14 (aref m (aref +blake2-sigma+ i 4)) (aref m (aref +blake2-sigma+ i 5))) (blake2-mixing v3 v7 v11 v15 (aref m (aref +blake2-sigma+ i 6)) (aref m (aref +blake2-sigma+ i 7))) (blake2-mixing v0 v5 v10 v15 (aref m (aref +blake2-sigma+ i 8)) (aref m (aref +blake2-sigma+ i 9))) (blake2-mixing v1 v6 v11 v12 (aref m (aref +blake2-sigma+ i 10)) (aref m (aref +blake2-sigma+ i 11))) (blake2-mixing v2 v7 v8 v13 (aref m (aref +blake2-sigma+ i 12)) (aref m (aref +blake2-sigma+ i 13))) (blake2-mixing v3 v4 v9 v14 (aref m (aref +blake2-sigma+ i 14)) (aref m (aref +blake2-sigma+ i 15)))) ;; Compute new state (setf (aref state 0) (logxor (aref state 0) v0 v8) (aref state 1) (logxor (aref state 1) v1 v9) (aref state 2) (logxor (aref state 2) v2 v10) (aref state 3) (logxor (aref state 3) v3 v11) (aref state 4) (logxor (aref state 4) v4 v12) (aref state 5) (logxor (aref state 5) v5 v13) (aref state 6) (logxor (aref state 6) v6 v14) (aref state 7) (logxor (aref state 7) v7 v15)))) (values)) ;;; ;;; Digest structures and functions ;;; (defstruct (blake2 (:constructor %make-blake2-digest nil) (:copier nil)) (state (blake2-make-initial-state 64) :type (simple-array (unsigned-byte 64) (8))) (offset 0 :type (unsigned-byte 128)) (buffer (make-array 128 :element-type '(unsigned-byte 8) :initial-element 0) :type (simple-array (unsigned-byte 8) (128))) (buffer-index 0 :type (integer 0 128))) (defstruct (blake2/384 (:include blake2) (:constructor %make-blake2/384-digest (&aux (state (blake2-make-initial-state 48)))) (:copier nil))) (defstruct (blake2/256 (:include blake2) (:constructor %make-blake2/256-digest (&aux (state (blake2-make-initial-state 32)))) (:copier nil))) (defstruct (blake2/160 (:include blake2) (:constructor %make-blake2/160-digest (&aux (state (blake2-make-initial-state 20)))) (:copier nil))) (defmethod reinitialize-instance ((state blake2) &rest initargs) (declare (ignore initargs)) (setf (blake2-state state) (etypecase state (blake2/160 (blake2-make-initial-state 20)) (blake2/256 (blake2-make-initial-state 32)) (blake2/384 (blake2-make-initial-state 48)) (blake2 (blake2-make-initial-state 64))) (blake2-offset state) 0 (blake2-buffer-index state) 0) state) (defmethod copy-digest ((state blake2) &optional copy) (check-type copy (or null blake2)) (let ((copy (if copy copy (etypecase state (blake2/160 (%make-blake2/160-digest)) (blake2/256 (%make-blake2/256-digest)) (blake2/384 (%make-blake2/384-digest)) (blake2 (%make-blake2-digest)))))) (declare (type blake2 copy)) (replace (blake2-state copy) (blake2-state state)) (setf (blake2-offset copy) (blake2-offset state)) (replace (blake2-buffer copy) (blake2-buffer state)) (setf (blake2-buffer-index copy) (blake2-buffer-index state)) copy)) (defun blake2-update (state input start end final) (declare (type blake2 state) (type (simple-array (unsigned-byte 8) (*)) input) (type fixnum start end) (type boolean final) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((blake2-state (blake2-state state)) (offset (blake2-offset state)) (buffer (blake2-buffer state)) (buffer-index (blake2-buffer-index state)) (length (- end start)) (n 0)) (declare (type (simple-array (unsigned-byte 64) (8)) blake2-state) (type (unsigned-byte 128) offset) (type (simple-array (unsigned-byte 8) (128)) buffer) (type (integer 0 128) buffer-index) (type fixnum length n)) ;; Try to fill the buffer with the new data (setf n (min length (- +blake2-block-size+ buffer-index))) (replace buffer input :start1 buffer-index :start2 start :end2 (+ start n)) (unless final (incf offset n)) (incf buffer-index n) (incf start n) (decf length n) ;; Process as many blocks as we can, but unless we are in the ;; final call, keep some data in the buffer (so that it can be ;; processed with the 'final' flag in the final call ;; Process data in buffer (when (and (= buffer-index +blake2-block-size+) (or final (plusp length))) (blake2-rounds blake2-state buffer 0 offset final) (setf buffer-index 0)) ;; Process data in message (unless final (loop until (<= length +blake2-block-size+) do (incf offset +blake2-block-size+) (blake2-rounds blake2-state input start offset nil) (incf start +blake2-block-size+) (decf length +blake2-block-size+))) ;; Put remaining message data in buffer (when (plusp length) (replace buffer input :end1 length :start2 start) (incf offset length) (incf buffer-index length)) ;; Save the new state (setf (blake2-offset state) offset (blake2-buffer-index state) buffer-index) (values))) (defun blake2-finalize (state digest digest-start) (let* ((digest-length (digest-length state)) (blake2-state (blake2-state state)) (buffer-index (blake2-buffer-index state)) (padding-length (- +blake2-block-size+ buffer-index)) (padding (make-array padding-length :element-type '(unsigned-byte 8) :initial-element 0))) ;; Process remaining data after padding it (blake2-update state padding 0 padding-length t) ;; Get output (let ((output (make-array +blake2-block-size+ :element-type '(unsigned-byte 8) :initial-element 0))) (dotimes (i 8) (setf (ub64ref/le output (* i 8)) (aref blake2-state i))) (replace digest output :start1 digest-start :end2 digest-length) digest))) (define-digest-updater blake2 (blake2-update state sequence start end nil)) (define-digest-finalizer ((blake2 64) (blake2/384 48) (blake2/256 32) (blake2/160 20)) (blake2-finalize state digest digest-start)) (defdigest blake2 :digest-length 64 :block-length 128) (defdigest blake2/384 :digest-length 48 :block-length 128) (defdigest blake2/256 :digest-length 32 :block-length 128) (defdigest blake2/160 :digest-length 20 :block-length 128) ironclad-0.57/src/digests/blake2s.lisp000066400000000000000000000303771420372057600177250ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; blake2s.lisp -- implementation of the BLAKE2s hash function (RFC 7693) (in-package :crypto) ;;; ;;; Parameters ;;; (eval-when (:compile-toplevel :load-toplevel :execute) (defconstant +blake2s-rounds+ 10) (defconstant +blake2s-block-size+ 64) (defconst +blake2s-sigma+ (make-array '(10 16) :element-type '(integer 0 15) :initial-contents '((0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (14 10 4 8 9 15 13 6 1 12 0 2 11 7 5 3) (11 8 12 0 5 2 15 13 10 14 3 6 7 1 9 4) (7 9 3 1 13 12 11 14 2 6 5 10 4 0 15 8) (9 0 5 7 2 4 10 15 14 1 11 12 6 8 3 13) (2 12 6 10 0 11 8 3 4 13 7 5 15 14 1 9) (12 5 1 15 14 13 4 10 0 7 6 3 9 2 8 11) (13 11 7 14 12 1 3 9 5 0 15 4 8 6 2 10) (6 15 14 9 11 3 0 8 12 2 13 7 1 4 10 5) (10 2 8 4 7 6 1 5 15 11 9 14 3 12 13 0)))) (defconst +blake2s-iv+ (make-array 8 :element-type '(unsigned-byte 32) :initial-contents '(#x6A09E667 #xBB67AE85 #x3C6EF372 #xA54FF53A #x510E527F #x9B05688C #x1F83D9AB #x5BE0CD19)))) (defun blake2s-make-initial-state (output-length &optional (key-length 0)) (when (> output-length 32) (error 'ironclad-error :format-control "The output length must be at most 32 bytes.")) (when (> key-length 32) (error 'ironclad-error :format-control "The key length must be at most 32 bytes.")) (let ((state (copy-seq +blake2s-iv+))) (setf (aref state 0) (logxor (aref state 0) #x01010000 (ash key-length 8) output-length)) state)) ;;; ;;; Blake2s rounds ;;; (declaim (ftype (function ((simple-array (unsigned-byte 32) (8)) (simple-array (unsigned-byte 8) (*)) fixnum (unsigned-byte 64) boolean)) blake2s-rounds)) (defun blake2s-rounds (state input start offset final) (declare (type (simple-array (unsigned-byte 32) (8)) state) (type (simple-array (unsigned-byte 8) (*)) input) (type fixnum start) (type (unsigned-byte 64) offset) (type boolean final) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (macrolet ((blake2s-mixing (va vb vc vd x y) ;; Bug in SBCL (< 1.3.6), ror32 doesn't give the right result ;; because it is not compiled correctly. ;; Using rol32 instead for now. ;; `(setf ,va (mod32+ (mod32+ ,va ,vb) ,x) ;; ,vd (ror32 (logxor ,vd ,va) 16) ;; ,vc (mod32+ ,vc ,vd) ;; ,vb (ror32 (logxor ,vb ,vc) 12) ;; ,va (mod32+ (mod32+ ,va ,vb) ,y) ;; ,vd (ror32 (logxor ,vd ,va) 8) ;; ,vc (mod32+ ,vc ,vd) ;; ,vb (ror32 (logxor ,vb ,vc) 7)))) #+(and sbcl x86-64 ironclad-assembly) `(multiple-value-setq (,va ,vb ,vc ,vd) (fast-blake2s-mixing ,va ,vb ,vc ,vd ,x ,y)) #-(and sbcl x86-64 ironclad-assembly) `(setf ,va (mod32+ (mod32+ ,va ,vb) ,x) ,vd (rol32 (logxor ,vd ,va) 16) ,vc (mod32+ ,vc ,vd) ,vb (rol32 (logxor ,vb ,vc) 20) ,va (mod32+ (mod32+ ,va ,vb) ,y) ,vd (rol32 (logxor ,vd ,va) 24) ,vc (mod32+ ,vc ,vd) ,vb (rol32 (logxor ,vb ,vc) 25)))) (let ((v0 (aref state 0)) (v1 (aref state 1)) (v2 (aref state 2)) (v3 (aref state 3)) (v4 (aref state 4)) (v5 (aref state 5)) (v6 (aref state 6)) (v7 (aref state 7)) (v8 (aref +blake2s-iv+ 0)) (v9 (aref +blake2s-iv+ 1)) (v10 (aref +blake2s-iv+ 2)) (v11 (aref +blake2s-iv+ 3)) (v12 (aref +blake2s-iv+ 4)) (v13 (aref +blake2s-iv+ 5)) (v14 (aref +blake2s-iv+ 6)) (v15 (aref +blake2s-iv+ 7)) (m (make-array 16 :element-type '(unsigned-byte 32) :initial-element 0))) (declare (type (unsigned-byte 32) v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15) (type (simple-array (unsigned-byte 32) (16)) m) (dynamic-extent m)) (setf v12 (logxor v12 (ldb (byte 32 0) offset)) v13 (logxor v13 (ldb (byte 32 32) offset))) (when final (setf v14 (logxor v14 #xFFFFFFFF))) ;; Get input data as 32-bit little-endian integers (dotimes-unrolled (i 16) (setf (aref m i) (ub32ref/le input (+ start (* i 4))))) ;; Mixing rounds (dotimes-unrolled (i +blake2s-rounds+) (blake2s-mixing v0 v4 v8 v12 (aref m (aref +blake2s-sigma+ i 0)) (aref m (aref +blake2s-sigma+ i 1))) (blake2s-mixing v1 v5 v9 v13 (aref m (aref +blake2s-sigma+ i 2)) (aref m (aref +blake2s-sigma+ i 3))) (blake2s-mixing v2 v6 v10 v14 (aref m (aref +blake2s-sigma+ i 4)) (aref m (aref +blake2s-sigma+ i 5))) (blake2s-mixing v3 v7 v11 v15 (aref m (aref +blake2s-sigma+ i 6)) (aref m (aref +blake2s-sigma+ i 7))) (blake2s-mixing v0 v5 v10 v15 (aref m (aref +blake2s-sigma+ i 8)) (aref m (aref +blake2s-sigma+ i 9))) (blake2s-mixing v1 v6 v11 v12 (aref m (aref +blake2s-sigma+ i 10)) (aref m (aref +blake2s-sigma+ i 11))) (blake2s-mixing v2 v7 v8 v13 (aref m (aref +blake2s-sigma+ i 12)) (aref m (aref +blake2s-sigma+ i 13))) (blake2s-mixing v3 v4 v9 v14 (aref m (aref +blake2s-sigma+ i 14)) (aref m (aref +blake2s-sigma+ i 15)))) ;; Compute new state (setf (aref state 0) (logxor (aref state 0) v0 v8) (aref state 1) (logxor (aref state 1) v1 v9) (aref state 2) (logxor (aref state 2) v2 v10) (aref state 3) (logxor (aref state 3) v3 v11) (aref state 4) (logxor (aref state 4) v4 v12) (aref state 5) (logxor (aref state 5) v5 v13) (aref state 6) (logxor (aref state 6) v6 v14) (aref state 7) (logxor (aref state 7) v7 v15)))) (values)) ;;; ;;; Digest structures and functions ;;; (defstruct (blake2s (:constructor %make-blake2s-digest nil) (:copier nil)) (state (blake2s-make-initial-state 32) :type (simple-array (unsigned-byte 32) (8))) (offset 0 :type (unsigned-byte 64)) (buffer (make-array 64 :element-type '(unsigned-byte 8) :initial-element 0) :type (simple-array (unsigned-byte 8) (64))) (buffer-index 0 :type (integer 0 64))) (defstruct (blake2s/224 (:include blake2s) (:constructor %make-blake2s/224-digest (&aux (state (blake2s-make-initial-state 28)))) (:copier nil))) (defstruct (blake2s/160 (:include blake2s) (:constructor %make-blake2s/160-digest (&aux (state (blake2s-make-initial-state 20)))) (:copier nil))) (defstruct (blake2s/128 (:include blake2s) (:constructor %make-blake2s/128-digest (&aux (state (blake2s-make-initial-state 16)))) (:copier nil))) (defmethod reinitialize-instance ((state blake2s) &rest initargs) (declare (ignore initargs)) (setf (blake2s-state state) (etypecase state (blake2s/128 (blake2s-make-initial-state 16)) (blake2s/160 (blake2s-make-initial-state 20)) (blake2s/224 (blake2s-make-initial-state 28)) (blake2s (blake2s-make-initial-state 32))) (blake2s-offset state) 0 (blake2s-buffer-index state) 0) state) (defmethod copy-digest ((state blake2s) &optional copy) (check-type copy (or null blake2s)) (let ((copy (if copy copy (etypecase state (blake2s/128 (%make-blake2s/128-digest)) (blake2s/160 (%make-blake2s/160-digest)) (blake2s/224 (%make-blake2s/224-digest)) (blake2s (%make-blake2s-digest)))))) (declare (type blake2s copy)) (replace (blake2s-state copy) (blake2s-state state)) (setf (blake2s-offset copy) (blake2s-offset state)) (replace (blake2s-buffer copy) (blake2s-buffer state)) (setf (blake2s-buffer-index copy) (blake2s-buffer-index state)) copy)) (defun blake2s-update (state input start end final) (declare (type blake2s state) (type (simple-array (unsigned-byte 8) (*)) input) (type fixnum start end) (type boolean final) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((blake2s-state (blake2s-state state)) (offset (blake2s-offset state)) (buffer (blake2s-buffer state)) (buffer-index (blake2s-buffer-index state)) (length (- end start)) (n 0)) (declare (type (simple-array (unsigned-byte 32) (8)) blake2s-state) (type (unsigned-byte 64) offset) (type (simple-array (unsigned-byte 8) (64)) buffer) (type (integer 0 64) buffer-index) (type fixnum length n)) ;; Try to fill the buffer with the new data (setf n (min length (- +blake2s-block-size+ buffer-index))) (replace buffer input :start1 buffer-index :start2 start :end2 (+ start n)) (unless final (incf offset n)) (incf buffer-index n) (incf start n) (decf length n) ;; Process as many blocks as we can, but unless we are in the ;; final call, keep some data in the buffer (so that it can be ;; processed with the 'final' flag in the final call ;; Process data in buffer (when (and (= buffer-index +blake2s-block-size+) (or final (plusp length))) (blake2s-rounds blake2s-state buffer 0 offset final) (setf buffer-index 0)) ;; Process data in message (unless final (loop until (<= length +blake2s-block-size+) do (incf offset +blake2s-block-size+) (blake2s-rounds blake2s-state input start offset nil) (incf start +blake2s-block-size+) (decf length +blake2s-block-size+))) ;; Put remaining message data in buffer (when (plusp length) (replace buffer input :end1 length :start2 start) (incf offset length) (incf buffer-index length)) ;; Save the new state (setf (blake2s-offset state) offset (blake2s-buffer-index state) buffer-index) (values))) (defun blake2s-finalize (state digest digest-start) (let* ((digest-length (digest-length state)) (blake2s-state (blake2s-state state)) (buffer-index (blake2s-buffer-index state)) (padding-length (- +blake2s-block-size+ buffer-index)) (padding (make-array padding-length :element-type '(unsigned-byte 8) :initial-element 0))) ;; Process remaining data after padding it (blake2s-update state padding 0 padding-length t) ;; Get output (let ((output (make-array +blake2s-block-size+ :element-type '(unsigned-byte 8) :initial-element 0))) (dotimes (i 8) (setf (ub32ref/le output (* i 4)) (aref blake2s-state i))) (replace digest output :start1 digest-start :end2 digest-length) digest))) (define-digest-updater blake2s (blake2s-update state sequence start end nil)) (define-digest-finalizer ((blake2s 32) (blake2s/224 28) (blake2s/160 20) (blake2s/128 16)) (blake2s-finalize state digest digest-start)) (defdigest blake2s :digest-length 32 :block-length 64) (defdigest blake2s/224 :digest-length 28 :block-length 64) (defdigest blake2s/160 :digest-length 20 :block-length 64) (defdigest blake2s/128 :digest-length 16 :block-length 64) ironclad-0.57/src/digests/crc24.lisp000066400000000000000000000111071420372057600173050ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; crc24.lisp (in-package :crypto) (in-ironclad-readtable) (declaim (type (simple-array (unsigned-byte 32) (256)) +crc24-table+)) (defconst +crc24-table+ #32@(#x00000000 #x00864CFB #x008AD50D #x000C99F6 #x0093E6E1 #x0015AA1A #x001933EC #x009F7F17 #x00A18139 #x0027CDC2 #x002B5434 #x00AD18CF #x003267D8 #x00B42B23 #x00B8B2D5 #x003EFE2E #x00C54E89 #x00430272 #x004F9B84 #x00C9D77F #x0056A868 #x00D0E493 #x00DC7D65 #x005A319E #x0064CFB0 #x00E2834B #x00EE1ABD #x00685646 #x00F72951 #x007165AA #x007DFC5C #x00FBB0A7 #x000CD1E9 #x008A9D12 #x008604E4 #x0000481F #x009F3708 #x00197BF3 #x0015E205 #x0093AEFE #x00AD50D0 #x002B1C2B #x002785DD #x00A1C926 #x003EB631 #x00B8FACA #x00B4633C #x00322FC7 #x00C99F60 #x004FD39B #x00434A6D #x00C50696 #x005A7981 #x00DC357A #x00D0AC8C #x0056E077 #x00681E59 #x00EE52A2 #x00E2CB54 #x006487AF #x00FBF8B8 #x007DB443 #x00712DB5 #x00F7614E #x0019A3D2 #x009FEF29 #x009376DF #x00153A24 #x008A4533 #x000C09C8 #x0000903E #x0086DCC5 #x00B822EB #x003E6E10 #x0032F7E6 #x00B4BB1D #x002BC40A #x00AD88F1 #x00A11107 #x00275DFC #x00DCED5B #x005AA1A0 #x00563856 #x00D074AD #x004F0BBA #x00C94741 #x00C5DEB7 #x0043924C #x007D6C62 #x00FB2099 #x00F7B96F #x0071F594 #x00EE8A83 #x0068C678 #x00645F8E #x00E21375 #x0015723B #x00933EC0 #x009FA736 #x0019EBCD #x008694DA #x0000D821 #x000C41D7 #x008A0D2C #x00B4F302 #x0032BFF9 #x003E260F #x00B86AF4 #x002715E3 #x00A15918 #x00ADC0EE #x002B8C15 #x00D03CB2 #x00567049 #x005AE9BF #x00DCA544 #x0043DA53 #x00C596A8 #x00C90F5E #x004F43A5 #x0071BD8B #x00F7F170 #x00FB6886 #x007D247D #x00E25B6A #x00641791 #x00688E67 #x00EEC29C #x003347A4 #x00B50B5F #x00B992A9 #x003FDE52 #x00A0A145 #x0026EDBE #x002A7448 #x00AC38B3 #x0092C69D #x00148A66 #x00181390 #x009E5F6B #x0001207C #x00876C87 #x008BF571 #x000DB98A #x00F6092D #x007045D6 #x007CDC20 #x00FA90DB #x0065EFCC #x00E3A337 #x00EF3AC1 #x0069763A #x00578814 #x00D1C4EF #x00DD5D19 #x005B11E2 #x00C46EF5 #x0042220E #x004EBBF8 #x00C8F703 #x003F964D #x00B9DAB6 #x00B54340 #x00330FBB #x00AC70AC #x002A3C57 #x0026A5A1 #x00A0E95A #x009E1774 #x00185B8F #x0014C279 #x00928E82 #x000DF195 #x008BBD6E #x00872498 #x00016863 #x00FAD8C4 #x007C943F #x00700DC9 #x00F64132 #x00693E25 #x00EF72DE #x00E3EB28 #x0065A7D3 #x005B59FD #x00DD1506 #x00D18CF0 #x0057C00B #x00C8BF1C #x004EF3E7 #x00426A11 #x00C426EA #x002AE476 #x00ACA88D #x00A0317B #x00267D80 #x00B90297 #x003F4E6C #x0033D79A #x00B59B61 #x008B654F #x000D29B4 #x0001B042 #x0087FCB9 #x001883AE #x009ECF55 #x009256A3 #x00141A58 #x00EFAAFF #x0069E604 #x00657FF2 #x00E33309 #x007C4C1E #x00FA00E5 #x00F69913 #x0070D5E8 #x004E2BC6 #x00C8673D #x00C4FECB #x0042B230 #x00DDCD27 #x005B81DC #x0057182A #x00D154D1 #x0026359F #x00A07964 #x00ACE092 #x002AAC69 #x00B5D37E #x00339F85 #x003F0673 #x00B94A88 #x0087B4A6 #x0001F85D #x000D61AB #x008B2D50 #x00145247 #x00921EBC #x009E874A #x0018CBB1 #x00E37B16 #x006537ED #x0069AE1B #x00EFE2E0 #x00709DF7 #x00F6D10C #x00FA48FA #x007C0401 #x0042FA2F #x00C4B6D4 #x00C82F22 #x004E63D9 #x00D11CCE #x00575035 #x005BC9C3 #x00DD8538)) (defstruct (crc24 (:constructor %make-crc24-digest nil) (:constructor %make-crc24-state (crc)) (:copier nil)) (crc #xb704ce :type (unsigned-byte 32))) (defmethod reinitialize-instance ((state crc24) &rest initargs) (declare (ignore initargs)) (setf (crc24-crc state) #xb704ce) state) (defmethod copy-digest ((state crc24) &optional copy) (check-type copy (or null crc24)) (cond (copy (setf (crc24-crc copy) (crc24-crc state)) copy) (t (%make-crc24-state (crc24-crc state))))) (define-digest-updater crc24 (let ((crc (crc24-crc state))) (declare (type (unsigned-byte 32) crc)) (do ((i start (1+ i)) (table +crc24-table+)) ((>= i end) (setf (crc24-crc state) (ldb (byte 24 0) crc)) state) (setf crc (logxor (aref table (logand (logxor (mod32ash crc -16) (aref sequence i)) #xff)) (mod32ash crc 8)))))) (define-digest-finalizer (crc24 3) (flet ((stuff-state (crc digest start) (declare (type (simple-array (unsigned-byte 8) (*)) digest)) (declare (type (integer 0 #.(- array-dimension-limit 3)) start)) (setf (aref digest (+ start 0)) (ldb (byte 8 16) crc) (aref digest (+ start 1)) (ldb (byte 8 8) crc) (aref digest (+ start 2)) (ldb (byte 8 0) crc)) digest)) (declare (inline stuff-state)) (stuff-state (crc24-crc state) digest digest-start))) (defdigest crc24 :digest-length 3 :block-length 1) ironclad-0.57/src/digests/crc32.lisp000066400000000000000000000105671420372057600173150ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; crc32.lisp (in-package :crypto) (in-ironclad-readtable) (declaim (type (simple-array (unsigned-byte 32) (256)) +crc32-table+)) (defconst +crc32-table+ #32@(#x00000000 #x77073096 #xEE0E612C #x990951BA #x076DC419 #x706AF48F #xE963A535 #x9E6495A3 #x0EDB8832 #x79DCB8A4 #xE0D5E91E #x97D2D988 #x09B64C2B #x7EB17CBD #xE7B82D07 #x90BF1D91 #x1DB71064 #x6AB020F2 #xF3B97148 #x84BE41DE #x1ADAD47D #x6DDDE4EB #xF4D4B551 #x83D385C7 #x136C9856 #x646BA8C0 #xFD62F97A #x8A65C9EC #x14015C4F #x63066CD9 #xFA0F3D63 #x8D080DF5 #x3B6E20C8 #x4C69105E #xD56041E4 #xA2677172 #x3C03E4D1 #x4B04D447 #xD20D85FD #xA50AB56B #x35B5A8FA #x42B2986C #xDBBBC9D6 #xACBCF940 #x32D86CE3 #x45DF5C75 #xDCD60DCF #xABD13D59 #x26D930AC #x51DE003A #xC8D75180 #xBFD06116 #x21B4F4B5 #x56B3C423 #xCFBA9599 #xB8BDA50F #x2802B89E #x5F058808 #xC60CD9B2 #xB10BE924 #x2F6F7C87 #x58684C11 #xC1611DAB #xB6662D3D #x76DC4190 #x01DB7106 #x98D220BC #xEFD5102A #x71B18589 #x06B6B51F #x9FBFE4A5 #xE8B8D433 #x7807C9A2 #x0F00F934 #x9609A88E #xE10E9818 #x7F6A0DBB #x086D3D2D #x91646C97 #xE6635C01 #x6B6B51F4 #x1C6C6162 #x856530D8 #xF262004E #x6C0695ED #x1B01A57B #x8208F4C1 #xF50FC457 #x65B0D9C6 #x12B7E950 #x8BBEB8EA #xFCB9887C #x62DD1DDF #x15DA2D49 #x8CD37CF3 #xFBD44C65 #x4DB26158 #x3AB551CE #xA3BC0074 #xD4BB30E2 #x4ADFA541 #x3DD895D7 #xA4D1C46D #xD3D6F4FB #x4369E96A #x346ED9FC #xAD678846 #xDA60B8D0 #x44042D73 #x33031DE5 #xAA0A4C5F #xDD0D7CC9 #x5005713C #x270241AA #xBE0B1010 #xC90C2086 #x5768B525 #x206F85B3 #xB966D409 #xCE61E49F #x5EDEF90E #x29D9C998 #xB0D09822 #xC7D7A8B4 #x59B33D17 #x2EB40D81 #xB7BD5C3B #xC0BA6CAD #xEDB88320 #x9ABFB3B6 #x03B6E20C #x74B1D29A #xEAD54739 #x9DD277AF #x04DB2615 #x73DC1683 #xE3630B12 #x94643B84 #x0D6D6A3E #x7A6A5AA8 #xE40ECF0B #x9309FF9D #x0A00AE27 #x7D079EB1 #xF00F9344 #x8708A3D2 #x1E01F268 #x6906C2FE #xF762575D #x806567CB #x196C3671 #x6E6B06E7 #xFED41B76 #x89D32BE0 #x10DA7A5A #x67DD4ACC #xF9B9DF6F #x8EBEEFF9 #x17B7BE43 #x60B08ED5 #xD6D6A3E8 #xA1D1937E #x38D8C2C4 #x4FDFF252 #xD1BB67F1 #xA6BC5767 #x3FB506DD #x48B2364B #xD80D2BDA #xAF0A1B4C #x36034AF6 #x41047A60 #xDF60EFC3 #xA867DF55 #x316E8EEF #x4669BE79 #xCB61B38C #xBC66831A #x256FD2A0 #x5268E236 #xCC0C7795 #xBB0B4703 #x220216B9 #x5505262F #xC5BA3BBE #xB2BD0B28 #x2BB45A92 #x5CB36A04 #xC2D7FFA7 #xB5D0CF31 #x2CD99E8B #x5BDEAE1D #x9B64C2B0 #xEC63F226 #x756AA39C #x026D930A #x9C0906A9 #xEB0E363F #x72076785 #x05005713 #x95BF4A82 #xE2B87A14 #x7BB12BAE #x0CB61B38 #x92D28E9B #xE5D5BE0D #x7CDCEFB7 #x0BDBDF21 #x86D3D2D4 #xF1D4E242 #x68DDB3F8 #x1FDA836E #x81BE16CD #xF6B9265B #x6FB077E1 #x18B74777 #x88085AE6 #xFF0F6A70 #x66063BCA #x11010B5C #x8F659EFF #xF862AE69 #x616BFFD3 #x166CCF45 #xA00AE278 #xD70DD2EE #x4E048354 #x3903B3C2 #xA7672661 #xD06016F7 #x4969474D #x3E6E77DB #xAED16A4A #xD9D65ADC #x40DF0B66 #x37D83BF0 #xA9BCAE53 #xDEBB9EC5 #x47B2CF7F #x30B5FFE9 #xBDBDF21C #xCABAC28A #x53B39330 #x24B4A3A6 #xBAD03605 #xCDD70693 #x54DE5729 #x23D967BF #xB3667A2E #xC4614AB8 #x5D681B02 #x2A6F2B94 #xB40BBE37 #xC30C8EA1 #x5A05DF1B #x2D02EF8D)) (defstruct (crc32 (:constructor %make-crc32-digest nil) (:constructor %make-crc32-state (crc)) (:copier nil)) (crc 4294967295 :type (unsigned-byte 32))) (defmethod reinitialize-instance ((state crc32) &rest initargs) (declare (ignore initargs)) (setf (crc32-crc state) #xffffffff) state) (defmethod copy-digest ((state crc32) &optional copy) (check-type copy (or null crc32)) (cond (copy (setf (crc32-crc copy) (crc32-crc state)) copy) (t (%make-crc32-state (crc32-crc state))))) (define-digest-updater crc32 (let ((crc (crc32-crc state))) (declare (type (unsigned-byte 32) crc)) (do ((i start (1+ i)) (table +crc32-table+)) ((>= i end) (setf (crc32-crc state) crc) state) (setf crc (logxor (aref table (logand (logxor crc (aref sequence i)) #xff)) (mod32ash crc -8)))))) (define-digest-finalizer (crc32 4) (flet ((stuff-state (crc digest start) (declare (type (simple-array (unsigned-byte 8) (*)) digest)) (declare (type (integer 0 #.(- array-dimension-limit 4)) start)) (setf (ub32ref/be digest start) crc) digest)) (declare (inline stuff-state)) (let ((result (logxor #xffffffff (crc32-crc state)))) (stuff-state result digest digest-start)))) (defdigest crc32 :digest-length 4 :block-length 1) ironclad-0.57/src/digests/digest.lisp000066400000000000000000000462521420372057600176600ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; digest.lisp -- common functions for hashing (in-package :crypto) ;;; defining digest (hash) functions (eval-when (:compile-toplevel :load-toplevel) (defconstant +buffer-size+ (* 128 1024)) (defconstant +seq-copy-buffer-size+ 512) ) ; EVAL-WHEN (deftype buffer-index () `(integer 0 (,+buffer-size+))) (defun update-digest-from-stream (digest stream &key buffer (start 0) end) (cond ((subtypep (stream-element-type stream) '(unsigned-byte 8)) (flet ((frob (read-buffer start end) (loop for last-updated = (read-sequence read-buffer stream :start start :end end) do (update-digest digest read-buffer :start start :end last-updated) until (< last-updated end) finally (return digest)))) (if buffer (frob buffer start (or end (length buffer))) (let ((buffer (make-array +buffer-size+ :element-type '(unsigned-byte 8)))) (declare (dynamic-extent buffer)) (frob buffer 0 +buffer-size+))))) (t (error 'ironclad-error :format-control "Unsupported stream element-type ~S for stream ~S." :format-arguments (list (stream-element-type stream) stream))))) (declaim (inline update-digest-from-vector)) #+(or cmucl sbcl) (defun update-digest-from-vector (digest vector start end) ;; SBCL and CMUCL have with-array-data, so copying can be avoided even ;; for non-simple vectors. (declare (type (vector (unsigned-byte 8)) vector) (type index start end)) (#+cmucl lisp::with-array-data #+sbcl sb-kernel:with-array-data ((data vector) (real-start start) (real-end end)) (declare (ignore real-end)) (update-digest digest data :start real-start :end (+ real-start (- end start))))) #-(or cmu sbcl) (defun update-digest-from-vector (state vector start end) (declare (optimize speed) (type (vector (unsigned-byte 8)) vector) (type index start end)) (if (typep vector 'simple-octet-vector) (update-digest state vector :start start :end end) ;; It's a non-simple vector. Update the digest using a temporary buffer. (let ((buffer (make-array +seq-copy-buffer-size+ :element-type '(unsigned-byte 8)))) (declare (dynamic-extent buffer)) (loop with offset of-type index = start for length of-type index = (min +seq-copy-buffer-size+ (- end offset)) while (< offset end) do (replace buffer vector :start1 0 :end1 length :start2 offset :end2 (+ offset length)) (update-digest state buffer :start 0 :end length) (incf offset length))))) ;;; Storing a length at the end of the hashed data is very common and ;;; can be a small bottleneck when generating lots of hashes over small ;;; quantities of data. We assume that the appropriate locations have ;;; already been zeroed if necessary. LENGTH is also assumed to be an ;;; (effectively) 64-bit quantity. (declaim (inline store-data-length)) (defun store-data-length (block length offset &optional big-endian-p) (let ((lo (if big-endian-p (1+ offset) offset)) (hi (if big-endian-p offset (1+ offset)))) #+(and sbcl 32-bit) (cond ((sb-int:fixnump length) (setf (aref block lo) length)) ;; Otherwise, we have a bignum. (t (locally (declare (optimize (safety 0)) (type bignum length)) (cond ((= (sb-bignum:%bignum-length length) 1) (setf (aref block lo) (sb-bignum:%bignum-ref length 0))) (t (setf (aref block lo) (sb-bignum:%bignum-ref length 0) (aref block hi) (sb-bignum:%bignum-ref length 1))))))) #+(and cmu 32-bit) (cond ((ext:fixnump length) (setf (aref block lo) length)) ;; Otherwise, we have a bignum. (t (locally (declare (optimize (safety 0)) (type bignum:bignum-type length)) (cond ((= (bignum:%bignum-length length) 1) (setf (aref block lo) (bignum:%bignum-ref length 0))) (t (setf (aref block lo) (bignum:%bignum-ref length 0) (aref block hi) (bignum:%bignum-ref length 1))))))) #-(or (and sbcl 32-bit) (and cmu 32-bit)) (setf (aref block lo) (ldb (byte 32 0) length) (aref block hi) (ldb (byte 32 32) length)))) ;;; macros for "mid-level" functions (defmacro define-digest-registers ((digest-name &key (endian :big) (size 4) (digest-registers nil)) &rest registers) (let* ((struct-name (read-from-string (format nil "~A-~A" digest-name '#:regs))) (constructor (read-from-string (format nil "~A-~A" '#:initial struct-name))) (copier (read-from-string (format nil "%~A-~A" '#:copy struct-name))) (digest-fun (read-from-string (format nil "~A~A" digest-name '#:regs-digest))) (register-bit-size (* size 8)) (digest-size (* size (or digest-registers (length registers)))) (ref-fun (ubref-fun-name register-bit-size (eq endian :big)))) `(progn (eval-when (:compile-toplevel :load-toplevel :execute) (defstruct (,struct-name (:type (vector (unsigned-byte ,register-bit-size))) (:constructor ,constructor ()) (:copier ,copier)) ,@registers) ;; Some versions of LispWorks incorrectly define STRUCT-NAME as ;; a type with DEFSTRUCT, so avoid gratuitous warnings. #-(and lispworks lispworks5.0) (deftype ,struct-name () '(simple-array (unsigned-byte ,register-bit-size) (,(length registers))))) (defun ,digest-fun (regs buffer start) (declare (type ,struct-name regs) (type simple-octet-vector buffer) (type (integer 0 ,(- array-dimension-limit digest-size)) start) ,(burn-baby-burn)) ,(let ((inlined-unpacking `(setf ,@(loop for (reg value) in registers for index from 0 below digest-size by size nconc `((,ref-fun buffer (+ start ,index)) (,(read-from-string (format nil "~A-~A-~A" digest-name '#:regs reg)) regs)))))) (cond #+(and sbcl :little-endian) ((eq endian :little) `(if (and (= start 0) (<= ,register-bit-size sb-vm:n-word-bits)) (sb-kernel:ub8-bash-copy regs 0 buffer 0 ,digest-size) ,inlined-unpacking)) #+(and sbcl :big-endian) ((eq endian :big) `(if (and (= start 0) (<= ,register-bit-size sb-vm:n-word-bits)) (sb-kernel:ub8-bash-copy regs 0 buffer 0 ,digest-size) ,inlined-unpacking)) (t inlined-unpacking))) buffer)))) (defmacro define-digest-updater (digest-name &body body) (destructuring-bind (maybe-doc-string &rest rest) body `(defmethod update-digest ((state ,digest-name) (sequence vector) &key (start 0) (end (length sequence))) ,@(when (stringp maybe-doc-string) `(,maybe-doc-string)) ,(hold-me-back) (check-type sequence simple-octet-vector) (check-type start index) (check-type end index) ,@(if (stringp maybe-doc-string) rest body)))) ;;; SPECS is either (DIGEST-NAME DIGEST-BYTES) or a list of the same. ;;; The latter spelling is for digests that are related, but have ;;; different output sizes (e.g. SHA2-512 and SHA2-384). In that case, ;;; the first list is expected to be for the "major" variant of the ;;; pair; its digest type is expected to be the supertype of the ;;; variants. (defmacro define-digest-finalizer (specs &body body) (let* ((single-digest-p (not (consp (car specs)))) (specs (if single-digest-p (list specs) specs)) (inner-fun-name (read-from-string (format nil "%~A-~A-~A" '#:finalize (caar specs) '#:state)))) (destructuring-bind (maybe-doc-string &rest rest) body (let ((primary-digest (caar specs))) `(defmethod produce-digest ((state ,primary-digest) &key digest (digest-start 0)) ,@(when (stringp maybe-doc-string) `(,maybe-doc-string)) (flet ((,inner-fun-name (state digest digest-start) ;; CCL requires special treatment to not introduce ;; array indexing errors. ,(cond ((member :ccl *features*) '(declare (optimize (speed 0)))) (t (hold-me-back))) (macrolet ((finalize-registers (state regs) (declare (ignorable state)) (let ((clauses (loop for (digest-name digest-length) in ',specs collect `(,digest-name (,(read-from-string (format nil "~A~A" digest-name '#:regs-digest)) ,regs digest digest-start))))) (if ,single-digest-p (second (first clauses)) (list* 'etypecase state (reverse clauses)))))) ,@(if (stringp maybe-doc-string) rest body)))) (let ((digest-size ,(if single-digest-p (second (first specs)) `(etypecase state ,@(reverse specs)))) (state-copy (copy-digest state))) (etypecase digest (simple-octet-vector ;; verify that the buffer is large enough (if (<= digest-size (- (length digest) digest-start)) (,inner-fun-name state-copy digest digest-start) (error 'insufficient-buffer-space :buffer digest :start digest-start :length digest-size))) (null (,inner-fun-name state-copy (make-array digest-size :element-type '(unsigned-byte 8)) 0)))))))))) ;;; common superclass (superstructure?) for MD5-style digest functions (defstruct (mdx (:constructor nil) (:copier nil)) ;; This is technically an (UNSIGNED-BYTE 61). But the type-checking ;; penalties that imposes on a good 32-bit implementation are ;; significant. We've opted to omit the type declaration here. If ;; you really need to digest exabytes of data, I'm sure we can work ;; something out. (amount 0) ;; Most "64-bit" digest functions (e.g. SHA512) will need to override ;; this initial value in an &AUX. (buffer (make-array 64 :element-type '(unsigned-byte 8)) :read-only t :type simple-octet-vector) ;; This fixed type should be big enough for "64-bit" digest functions. (buffer-index 0 :type (integer 0 128))) (declaim (inline mdx-updater)) (defun mdx-updater (state compressor seq start end) (declare (type mdx state)) (declare (type function compressor)) (declare (type index start end)) (let* ((buffer (mdx-buffer state)) (buffer-index (mdx-buffer-index state)) (buffer-length (length buffer)) (length (- end start))) (declare (type fixnum length)) (unless (zerop buffer-index) (let ((amount (min (- buffer-length buffer-index) length))) (copy-to-buffer seq start amount buffer buffer-index) (setq start (+ start amount)) (let ((new-index (logand (+ buffer-index amount) (1- buffer-length)))) (when (zerop new-index) (funcall compressor state buffer 0)) (when (>= start end) (setf (mdx-buffer-index state) new-index) (incf (mdx-amount state) length) (return-from mdx-updater state))))) (loop until (< (- end start) buffer-length) do (funcall compressor state seq start) (setq start (the fixnum (+ start buffer-length))) finally (return (let ((amount (- end start))) (unless (zerop amount) (copy-to-buffer seq start amount buffer 0)) (setf (mdx-buffer-index state) amount) (incf (mdx-amount state) length) state))))) (declaim (notinline mdx-updater)) ;;; high-level generic function drivers ;;; These three functions are intended to be one-shot ways to digest ;;; an object of some kind. You could write these in terms of the more ;;; familiar digest interface below, but these are likely to be slightly ;;; more efficient, as well as more obvious about what you're trying to ;;; do. (declaim (notinline make-digest)) (defmethod digest-file ((digest-name cons) pathname &rest kwargs) (apply #'digest-file (apply #'make-digest digest-name) pathname kwargs)) (defmethod digest-file ((digest-name symbol) pathname &rest kwargs) (apply #'digest-file (make-digest digest-name) pathname kwargs)) (defmethod digest-file (state pathname &key buffer (start 0) end digest (digest-start 0)) (with-open-file (stream pathname :element-type '(unsigned-byte 8) :direction :input :if-does-not-exist :error) (update-digest-from-stream state stream :buffer buffer :start start :end end) (produce-digest state :digest digest :digest-start digest-start))) (defmethod digest-stream ((digest-name cons) stream &rest kwargs) (apply #'digest-stream (apply #'make-digest digest-name) stream kwargs)) (defmethod digest-stream ((digest-name symbol) stream &rest kwargs) (apply #'digest-stream (make-digest digest-name) stream kwargs)) (defmethod digest-stream (state stream &key buffer (start 0) end digest (digest-start 0)) (update-digest-from-stream state stream :buffer buffer :start start :end end) (produce-digest state :digest digest :digest-start digest-start)) (defmethod digest-sequence ((digest-name symbol) sequence &rest kwargs) (apply #'digest-sequence (make-digest digest-name) sequence kwargs)) (defmethod digest-sequence (state sequence &key (start 0) end digest (digest-start 0)) (declare (type index start)) (check-type sequence (vector (unsigned-byte 8))) (let ((end (or end (length sequence)))) (update-digest-from-vector state sequence start end)) (produce-digest state :digest digest :digest-start digest-start)) ;;; These four functions represent the common interface for digests in ;;; other crypto toolkits (OpenSSL, Botan, Python, etc.). You obtain ;;; some state object for a particular digest, you update it with some ;;; data, and then you get the actual digest. Flexibility is the name ;;; of the game with these functions. (defun make-digest (digest-name &rest keys &key &allow-other-keys) "Return a digest object which uses the algorithm DIGEST-NAME." (typecase digest-name (symbol (let ((name (massage-symbol digest-name))) (if (digestp name) (apply (the function (get name '%make-digest)) keys) (error 'unsupported-digest :name digest-name)))) (t (error 'type-error :datum digest-name :expected-type 'symbol)))) ;;; the digest-defining macro (defun digestp (sym) (get sym '%digest-length)) (defun list-all-digests () (loop for symbol being each external-symbol of (find-package :ironclad) if (digestp symbol) collect (intern (symbol-name symbol) :keyword) into digests finally (return (sort digests #'string<)))) (defun digest-supported-p (name) "Return T if the digest NAME is a valid digest name." (and (symbolp name) (not (null (digestp (massage-symbol name)))))) (defmethod digest-length ((digest-name symbol)) (or (digestp (massage-symbol digest-name)) (error 'unsupported-digest :name digest-name))) (defmethod digest-length (digest-name) (error 'unsupported-digest :name digest-name)) (defmethod update-digest (digester (stream stream) &key buffer (start 0) end &allow-other-keys) (update-digest-from-stream digester stream :buffer buffer :start start :end end)) (defun optimized-maker-name (name) (let ((*package* (find-package :ironclad))) ;; Ironclad gets compiled with *PRINT-CASE* set to :UPCASE; ensure ;; that names we return match what got compiled.n (intern (format nil "%~A-~A-~A" (symbol-name '#:make) (symbol-name name) (symbol-name '#:digest))))) (defmacro defdigest (name &key digest-length block-length) (let ((optimized-maker-name (optimized-maker-name name))) `(progn (setf (get ',name '%digest-length) ,digest-length) (setf (get ',name '%make-digest) (symbol-function ',optimized-maker-name)) (defmethod digest-length ((digest ,name)) ,digest-length) (defmethod block-length ((digest ,name)) ,block-length)))) ;;; If we pass a constant argument to MAKE-DIGEST, convert the ;;; MAKE-DIGEST call to a direct call to the state creation function. (define-compiler-macro make-digest (&whole form &environment env name &rest keys &key &allow-other-keys) (declare (ignore env)) (cond ((or (keywordp name) (and (quotationp name) (symbolp name))) (let ((name (massage-symbol (unquote name)))) (if (digestp name) `(,(optimized-maker-name name) ,@keys) form))) (t form))) ;;; And do the same for various one-shot digest functions. (defun maybe-expand-one-shot-call (form funname name 2nd-arg keys) (cond ((or (keywordp name) (and (quotationp name) (symbolp name))) (let ((name (massage-symbol (unquote name)))) (if (digestp name) `(,funname (,(optimized-maker-name name)) ,2nd-arg ,@keys) form))) (t form))) (define-compiler-macro digest-sequence (&whole form &environment env name sequence &rest keys) (declare (ignore env)) (maybe-expand-one-shot-call form 'digest-sequence name sequence keys)) (define-compiler-macro digest-stream (&whole form &environment env name stream &rest keys) (declare (ignore env)) (maybe-expand-one-shot-call form 'digest-stream name stream keys)) (define-compiler-macro digest-file (&whole form &environment env name file &rest keys) (declare (ignore env)) (maybe-expand-one-shot-call form 'digest-file name file keys)) ironclad-0.57/src/digests/groestl.lisp000066400000000000000000002761151420372057600200630ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; groestl.lisp -- implementation of the Grøstl hash function (in-package :crypto) ;;; ;;; Parameters ;;; (eval-when (:compile-toplevel :load-toplevel :execute) (defconstant +groestl-rows+ 8) (defconstant +groestl-length-field-length+ +groestl-rows+) (defconstant +groestl-cols-512+ 8) (defconstant +groestl-cols-1024+ 16) (defconstant +groestl-size-512+ (* +groestl-rows+ +groestl-cols-512+)) (defconstant +groestl-size-1024+ (* +groestl-rows+ +groestl-cols-1024+)) (defconstant +groestl-rounds-512+ 10) (defconstant +groestl-rounds-1024+ 14) (defconst +groestl-table+ (make-array 2048 :element-type '(unsigned-byte 64) :initial-contents '(#xc632f4a5f497a5c6 #xf86f978497eb84f8 #xee5eb099b0c799ee #xf67a8c8d8cf78df6 #xffe8170d17e50dff #xd60adcbddcb7bdd6 #xde16c8b1c8a7b1de #x916dfc54fc395491 #x6090f050f0c05060 #x0207050305040302 #xce2ee0a9e087a9ce #x56d1877d87ac7d56 #xe7cc2b192bd519e7 #xb513a662a67162b5 #x4d7c31e6319ae64d #xec59b59ab5c39aec #x8f40cf45cf05458f #x1fa3bc9dbc3e9d1f #x8949c040c0094089 #xfa68928792ef87fa #xefd03f153fc515ef #xb29426eb267febb2 #x8ece40c94007c98e #xfbe61d0b1ded0bfb #x416e2fec2f82ec41 #xb31aa967a97d67b3 #x5f431cfd1cbefd5f #x456025ea258aea45 #x23f9dabfda46bf23 #x535102f702a6f753 #xe445a196a1d396e4 #x9b76ed5bed2d5b9b #x75285dc25deac275 #xe1c5241c24d91ce1 #x3dd4e9aee97aae3d #x4cf2be6abe986a4c #x6c82ee5aeed85a6c #x7ebdc341c3fc417e #xf5f3060206f102f5 #x8352d14fd11d4f83 #x688ce45ce4d05c68 #x515607f407a2f451 #xd18d5c345cb934d1 #xf9e1180818e908f9 #xe24cae93aedf93e2 #xab3e9573954d73ab #x6297f553f5c45362 #x2a6b413f41543f2a #x081c140c14100c08 #x9563f652f6315295 #x46e9af65af8c6546 #x9d7fe25ee2215e9d #x3048782878602830 #x37cff8a1f86ea137 #x0a1b110f11140f0a #x2febc4b5c45eb52f #x0e151b091b1c090e #x247e5a365a483624 #x1badb69bb6369b1b #xdf98473d47a53ddf #xcda76a266a8126cd #x4ef5bb69bb9c694e #x7f334ccd4cfecd7f #xea50ba9fbacf9fea #x123f2d1b2d241b12 #x1da4b99eb93a9e1d #x58c49c749cb07458 #x3446722e72682e34 #x3641772d776c2d36 #xdc11cdb2cda3b2dc #xb49d29ee2973eeb4 #x5b4d16fb16b6fb5b #xa4a501f60153f6a4 #x76a1d74dd7ec4d76 #xb714a361a37561b7 #x7d3449ce49face7d #x52df8d7b8da47b52 #xdd9f423e42a13edd #x5ecd937193bc715e #x13b1a297a2269713 #xa6a204f50457f5a6 #xb901b868b86968b9 #x0000000000000000 #xc1b5742c74992cc1 #x40e0a060a0806040 #xe3c2211f21dd1fe3 #x793a43c843f2c879 #xb69a2ced2c77edb6 #xd40dd9bed9b3bed4 #x8d47ca46ca01468d #x671770d970ced967 #x72afdd4bdde44b72 #x94ed79de7933de94 #x98ff67d4672bd498 #xb09323e8237be8b0 #x855bde4ade114a85 #xbb06bd6bbd6d6bbb #xc5bb7e2a7e912ac5 #x4f7b34e5349ee54f #xedd73a163ac116ed #x86d254c55417c586 #x9af862d7622fd79a #x6699ff55ffcc5566 #x11b6a794a7229411 #x8ac04acf4a0fcf8a #xe9d9301030c910e9 #x040e0a060a080604 #xfe66988198e781fe #xa0ab0bf00b5bf0a0 #x78b4cc44ccf04478 #x25f0d5bad54aba25 #x4b753ee33e96e34b #xa2ac0ef30e5ff3a2 #x5d4419fe19bafe5d #x80db5bc05b1bc080 #x0580858a850a8a05 #x3fd3ecadec7ead3f #x21fedfbcdf42bc21 #x70a8d848d8e04870 #xf1fd0c040cf904f1 #x63197adf7ac6df63 #x772f58c158eec177 #xaf309f759f4575af #x42e7a563a5846342 #x2070503050403020 #xe5cb2e1a2ed11ae5 #xfdef120e12e10efd #xbf08b76db7656dbf #x8155d44cd4194c81 #x18243c143c301418 #x26795f355f4c3526 #xc3b2712f719d2fc3 #xbe8638e13867e1be #x35c8fda2fd6aa235 #x88c74fcc4f0bcc88 #x2e654b394b5c392e #x936af957f93d5793 #x55580df20daaf255 #xfc619d829de382fc #x7ab3c947c9f4477a #xc827efacef8bacc8 #xba8832e7326fe7ba #x324f7d2b7d642b32 #xe642a495a4d795e6 #xc03bfba0fb9ba0c0 #x19aab398b3329819 #x9ef668d16827d19e #xa322817f815d7fa3 #x44eeaa66aa886644 #x54d6827e82a87e54 #x3bdde6abe676ab3b #x0b959e839e16830b #x8cc945ca4503ca8c #xc7bc7b297b9529c7 #x6b056ed36ed6d36b #x286c443c44503c28 #xa72c8b798b5579a7 #xbc813de23d63e2bc #x1631271d272c1d16 #xad379a769a4176ad #xdb964d3b4dad3bdb #x649efa56fac85664 #x74a6d24ed2e84e74 #x1436221e22281e14 #x92e476db763fdb92 #x0c121e0a1e180a0c #x48fcb46cb4906c48 #xb88f37e4376be4b8 #x9f78e75de7255d9f #xbd0fb26eb2616ebd #x43692aef2a86ef43 #xc435f1a6f193a6c4 #x39dae3a8e372a839 #x31c6f7a4f762a431 #xd38a593759bd37d3 #xf274868b86ff8bf2 #xd583563256b132d5 #x8b4ec543c50d438b #x6e85eb59ebdc596e #xda18c2b7c2afb7da #x018e8f8c8f028c01 #xb11dac64ac7964b1 #x9cf16dd26d23d29c #x49723be03b92e049 #xd81fc7b4c7abb4d8 #xacb915fa1543faac #xf3fa090709fd07f3 #xcfa06f256f8525cf #xca20eaafea8fafca #xf47d898e89f38ef4 #x476720e9208ee947 #x1038281828201810 #x6f0b64d564ded56f #xf073838883fb88f0 #x4afbb16fb1946f4a #x5cca967296b8725c #x38546c246c702438 #x575f08f108aef157 #x732152c752e6c773 #x9764f351f3355197 #xcbae6523658d23cb #xa125847c84597ca1 #xe857bf9cbfcb9ce8 #x3e5d6321637c213e #x96ea7cdd7c37dd96 #x611e7fdc7fc2dc61 #x0d9c9186911a860d #x0f9b9485941e850f #xe04bab90abdb90e0 #x7cbac642c6f8427c #x712657c457e2c471 #xcc29e5aae583aacc #x90e373d8733bd890 #x06090f050f0c0506 #xf7f4030103f501f7 #x1c2a36123638121c #xc23cfea3fe9fa3c2 #x6a8be15fe1d45f6a #xaebe10f91047f9ae #x69026bd06bd2d069 #x17bfa891a82e9117 #x9971e858e8295899 #x3a5369276974273a #x27f7d0b9d04eb927 #xd991483848a938d9 #xebde351335cd13eb #x2be5ceb3ce56b32b #x2277553355443322 #xd204d6bbd6bfbbd2 #xa9399070904970a9 #x07878089800e8907 #x33c1f2a7f266a733 #x2decc1b6c15ab62d #x3c5a66226678223c #x15b8ad92ad2a9215 #xc9a96020608920c9 #x875cdb49db154987 #xaab01aff1a4fffaa #x50d8887888a07850 #xa52b8e7a8e517aa5 #x03898a8f8a068f03 #x594a13f813b2f859 #x09929b809b128009 #x1a2339173934171a #x651075da75cada65 #xd784533153b531d7 #x84d551c65113c684 #xd003d3b8d3bbb8d0 #x82dc5ec35e1fc382 #x29e2cbb0cb52b029 #x5ac3997799b4775a #x1e2d3311333c111e #x7b3d46cb46f6cb7b #xa8b71ffc1f4bfca8 #x6d0c61d661dad66d #x2c624e3a4e583a2c #xc6c632f4a5f497a5 #xf8f86f978497eb84 #xeeee5eb099b0c799 #xf6f67a8c8d8cf78d #xffffe8170d17e50d #xd6d60adcbddcb7bd #xdede16c8b1c8a7b1 #x91916dfc54fc3954 #x606090f050f0c050 #x0202070503050403 #xcece2ee0a9e087a9 #x5656d1877d87ac7d #xe7e7cc2b192bd519 #xb5b513a662a67162 #x4d4d7c31e6319ae6 #xecec59b59ab5c39a #x8f8f40cf45cf0545 #x1f1fa3bc9dbc3e9d #x898949c040c00940 #xfafa68928792ef87 #xefefd03f153fc515 #xb2b29426eb267feb #x8e8ece40c94007c9 #xfbfbe61d0b1ded0b #x41416e2fec2f82ec #xb3b31aa967a97d67 #x5f5f431cfd1cbefd #x45456025ea258aea #x2323f9dabfda46bf #x53535102f702a6f7 #xe4e445a196a1d396 #x9b9b76ed5bed2d5b #x7575285dc25deac2 #xe1e1c5241c24d91c #x3d3dd4e9aee97aae #x4c4cf2be6abe986a #x6c6c82ee5aeed85a #x7e7ebdc341c3fc41 #xf5f5f3060206f102 #x838352d14fd11d4f #x68688ce45ce4d05c #x51515607f407a2f4 #xd1d18d5c345cb934 #xf9f9e1180818e908 #xe2e24cae93aedf93 #xabab3e9573954d73 #x626297f553f5c453 #x2a2a6b413f41543f #x08081c140c14100c #x959563f652f63152 #x4646e9af65af8c65 #x9d9d7fe25ee2215e #x3030487828786028 #x3737cff8a1f86ea1 #x0a0a1b110f11140f #x2f2febc4b5c45eb5 #x0e0e151b091b1c09 #x24247e5a365a4836 #x1b1badb69bb6369b #xdfdf98473d47a53d #xcdcda76a266a8126 #x4e4ef5bb69bb9c69 #x7f7f334ccd4cfecd #xeaea50ba9fbacf9f #x12123f2d1b2d241b #x1d1da4b99eb93a9e #x5858c49c749cb074 #x343446722e72682e #x363641772d776c2d #xdcdc11cdb2cda3b2 #xb4b49d29ee2973ee #x5b5b4d16fb16b6fb #xa4a4a501f60153f6 #x7676a1d74dd7ec4d #xb7b714a361a37561 #x7d7d3449ce49face #x5252df8d7b8da47b #xdddd9f423e42a13e #x5e5ecd937193bc71 #x1313b1a297a22697 #xa6a6a204f50457f5 #xb9b901b868b86968 #x0000000000000000 #xc1c1b5742c74992c #x4040e0a060a08060 #xe3e3c2211f21dd1f #x79793a43c843f2c8 #xb6b69a2ced2c77ed #xd4d40dd9bed9b3be #x8d8d47ca46ca0146 #x67671770d970ced9 #x7272afdd4bdde44b #x9494ed79de7933de #x9898ff67d4672bd4 #xb0b09323e8237be8 #x85855bde4ade114a #xbbbb06bd6bbd6d6b #xc5c5bb7e2a7e912a #x4f4f7b34e5349ee5 #xededd73a163ac116 #x8686d254c55417c5 #x9a9af862d7622fd7 #x666699ff55ffcc55 #x1111b6a794a72294 #x8a8ac04acf4a0fcf #xe9e9d9301030c910 #x04040e0a060a0806 #xfefe66988198e781 #xa0a0ab0bf00b5bf0 #x7878b4cc44ccf044 #x2525f0d5bad54aba #x4b4b753ee33e96e3 #xa2a2ac0ef30e5ff3 #x5d5d4419fe19bafe #x8080db5bc05b1bc0 #x050580858a850a8a #x3f3fd3ecadec7ead #x2121fedfbcdf42bc #x7070a8d848d8e048 #xf1f1fd0c040cf904 #x6363197adf7ac6df #x77772f58c158eec1 #xafaf309f759f4575 #x4242e7a563a58463 #x2020705030504030 #xe5e5cb2e1a2ed11a #xfdfdef120e12e10e #xbfbf08b76db7656d #x818155d44cd4194c #x1818243c143c3014 #x2626795f355f4c35 #xc3c3b2712f719d2f #xbebe8638e13867e1 #x3535c8fda2fd6aa2 #x8888c74fcc4f0bcc #x2e2e654b394b5c39 #x93936af957f93d57 #x5555580df20daaf2 #xfcfc619d829de382 #x7a7ab3c947c9f447 #xc8c827efacef8bac #xbaba8832e7326fe7 #x32324f7d2b7d642b #xe6e642a495a4d795 #xc0c03bfba0fb9ba0 #x1919aab398b33298 #x9e9ef668d16827d1 #xa3a322817f815d7f #x4444eeaa66aa8866 #x5454d6827e82a87e #x3b3bdde6abe676ab #x0b0b959e839e1683 #x8c8cc945ca4503ca #xc7c7bc7b297b9529 #x6b6b056ed36ed6d3 #x28286c443c44503c #xa7a72c8b798b5579 #xbcbc813de23d63e2 #x161631271d272c1d #xadad379a769a4176 #xdbdb964d3b4dad3b #x64649efa56fac856 #x7474a6d24ed2e84e #x141436221e22281e #x9292e476db763fdb #x0c0c121e0a1e180a #x4848fcb46cb4906c #xb8b88f37e4376be4 #x9f9f78e75de7255d #xbdbd0fb26eb2616e #x4343692aef2a86ef #xc4c435f1a6f193a6 #x3939dae3a8e372a8 #x3131c6f7a4f762a4 #xd3d38a593759bd37 #xf2f274868b86ff8b #xd5d583563256b132 #x8b8b4ec543c50d43 #x6e6e85eb59ebdc59 #xdada18c2b7c2afb7 #x01018e8f8c8f028c #xb1b11dac64ac7964 #x9c9cf16dd26d23d2 #x4949723be03b92e0 #xd8d81fc7b4c7abb4 #xacacb915fa1543fa #xf3f3fa090709fd07 #xcfcfa06f256f8525 #xcaca20eaafea8faf #xf4f47d898e89f38e #x47476720e9208ee9 #x1010382818282018 #x6f6f0b64d564ded5 #xf0f073838883fb88 #x4a4afbb16fb1946f #x5c5cca967296b872 #x3838546c246c7024 #x57575f08f108aef1 #x73732152c752e6c7 #x979764f351f33551 #xcbcbae6523658d23 #xa1a125847c84597c #xe8e857bf9cbfcb9c #x3e3e5d6321637c21 #x9696ea7cdd7c37dd #x61611e7fdc7fc2dc #x0d0d9c9186911a86 #x0f0f9b9485941e85 #xe0e04bab90abdb90 #x7c7cbac642c6f842 #x71712657c457e2c4 #xcccc29e5aae583aa #x9090e373d8733bd8 #x0606090f050f0c05 #xf7f7f4030103f501 #x1c1c2a3612363812 #xc2c23cfea3fe9fa3 #x6a6a8be15fe1d45f #xaeaebe10f91047f9 #x6969026bd06bd2d0 #x1717bfa891a82e91 #x999971e858e82958 #x3a3a536927697427 #x2727f7d0b9d04eb9 #xd9d991483848a938 #xebebde351335cd13 #x2b2be5ceb3ce56b3 #x2222775533554433 #xd2d204d6bbd6bfbb #xa9a9399070904970 #x0707878089800e89 #x3333c1f2a7f266a7 #x2d2decc1b6c15ab6 #x3c3c5a6622667822 #x1515b8ad92ad2a92 #xc9c9a96020608920 #x87875cdb49db1549 #xaaaab01aff1a4fff #x5050d8887888a078 #xa5a52b8e7a8e517a #x0303898a8f8a068f #x59594a13f813b2f8 #x0909929b809b1280 #x1a1a233917393417 #x65651075da75cada #xd7d784533153b531 #x8484d551c65113c6 #xd0d003d3b8d3bbb8 #x8282dc5ec35e1fc3 #x2929e2cbb0cb52b0 #x5a5ac3997799b477 #x1e1e2d3311333c11 #x7b7b3d46cb46f6cb #xa8a8b71ffc1f4bfc #x6d6d0c61d661dad6 #x2c2c624e3a4e583a #xa5c6c632f4a5f497 #x84f8f86f978497eb #x99eeee5eb099b0c7 #x8df6f67a8c8d8cf7 #x0dffffe8170d17e5 #xbdd6d60adcbddcb7 #xb1dede16c8b1c8a7 #x5491916dfc54fc39 #x50606090f050f0c0 #x0302020705030504 #xa9cece2ee0a9e087 #x7d5656d1877d87ac #x19e7e7cc2b192bd5 #x62b5b513a662a671 #xe64d4d7c31e6319a #x9aecec59b59ab5c3 #x458f8f40cf45cf05 #x9d1f1fa3bc9dbc3e #x40898949c040c009 #x87fafa68928792ef #x15efefd03f153fc5 #xebb2b29426eb267f #xc98e8ece40c94007 #x0bfbfbe61d0b1ded #xec41416e2fec2f82 #x67b3b31aa967a97d #xfd5f5f431cfd1cbe #xea45456025ea258a #xbf2323f9dabfda46 #xf753535102f702a6 #x96e4e445a196a1d3 #x5b9b9b76ed5bed2d #xc27575285dc25dea #x1ce1e1c5241c24d9 #xae3d3dd4e9aee97a #x6a4c4cf2be6abe98 #x5a6c6c82ee5aeed8 #x417e7ebdc341c3fc #x02f5f5f3060206f1 #x4f838352d14fd11d #x5c68688ce45ce4d0 #xf451515607f407a2 #x34d1d18d5c345cb9 #x08f9f9e1180818e9 #x93e2e24cae93aedf #x73abab3e9573954d #x53626297f553f5c4 #x3f2a2a6b413f4154 #x0c08081c140c1410 #x52959563f652f631 #x654646e9af65af8c #x5e9d9d7fe25ee221 #x2830304878287860 #xa13737cff8a1f86e #x0f0a0a1b110f1114 #xb52f2febc4b5c45e #x090e0e151b091b1c #x3624247e5a365a48 #x9b1b1badb69bb636 #x3ddfdf98473d47a5 #x26cdcda76a266a81 #x694e4ef5bb69bb9c #xcd7f7f334ccd4cfe #x9feaea50ba9fbacf #x1b12123f2d1b2d24 #x9e1d1da4b99eb93a #x745858c49c749cb0 #x2e343446722e7268 #x2d363641772d776c #xb2dcdc11cdb2cda3 #xeeb4b49d29ee2973 #xfb5b5b4d16fb16b6 #xf6a4a4a501f60153 #x4d7676a1d74dd7ec #x61b7b714a361a375 #xce7d7d3449ce49fa #x7b5252df8d7b8da4 #x3edddd9f423e42a1 #x715e5ecd937193bc #x971313b1a297a226 #xf5a6a6a204f50457 #x68b9b901b868b869 #x0000000000000000 #x2cc1c1b5742c7499 #x604040e0a060a080 #x1fe3e3c2211f21dd #xc879793a43c843f2 #xedb6b69a2ced2c77 #xbed4d40dd9bed9b3 #x468d8d47ca46ca01 #xd967671770d970ce #x4b7272afdd4bdde4 #xde9494ed79de7933 #xd49898ff67d4672b #xe8b0b09323e8237b #x4a85855bde4ade11 #x6bbbbb06bd6bbd6d #x2ac5c5bb7e2a7e91 #xe54f4f7b34e5349e #x16ededd73a163ac1 #xc58686d254c55417 #xd79a9af862d7622f #x55666699ff55ffcc #x941111b6a794a722 #xcf8a8ac04acf4a0f #x10e9e9d9301030c9 #x0604040e0a060a08 #x81fefe66988198e7 #xf0a0a0ab0bf00b5b #x447878b4cc44ccf0 #xba2525f0d5bad54a #xe34b4b753ee33e96 #xf3a2a2ac0ef30e5f #xfe5d5d4419fe19ba #xc08080db5bc05b1b #x8a050580858a850a #xad3f3fd3ecadec7e #xbc2121fedfbcdf42 #x487070a8d848d8e0 #x04f1f1fd0c040cf9 #xdf6363197adf7ac6 #xc177772f58c158ee #x75afaf309f759f45 #x634242e7a563a584 #x3020207050305040 #x1ae5e5cb2e1a2ed1 #x0efdfdef120e12e1 #x6dbfbf08b76db765 #x4c818155d44cd419 #x141818243c143c30 #x352626795f355f4c #x2fc3c3b2712f719d #xe1bebe8638e13867 #xa23535c8fda2fd6a #xcc8888c74fcc4f0b #x392e2e654b394b5c #x5793936af957f93d #xf25555580df20daa #x82fcfc619d829de3 #x477a7ab3c947c9f4 #xacc8c827efacef8b #xe7baba8832e7326f #x2b32324f7d2b7d64 #x95e6e642a495a4d7 #xa0c0c03bfba0fb9b #x981919aab398b332 #xd19e9ef668d16827 #x7fa3a322817f815d #x664444eeaa66aa88 #x7e5454d6827e82a8 #xab3b3bdde6abe676 #x830b0b959e839e16 #xca8c8cc945ca4503 #x29c7c7bc7b297b95 #xd36b6b056ed36ed6 #x3c28286c443c4450 #x79a7a72c8b798b55 #xe2bcbc813de23d63 #x1d161631271d272c #x76adad379a769a41 #x3bdbdb964d3b4dad #x5664649efa56fac8 #x4e7474a6d24ed2e8 #x1e141436221e2228 #xdb9292e476db763f #x0a0c0c121e0a1e18 #x6c4848fcb46cb490 #xe4b8b88f37e4376b #x5d9f9f78e75de725 #x6ebdbd0fb26eb261 #xef4343692aef2a86 #xa6c4c435f1a6f193 #xa83939dae3a8e372 #xa43131c6f7a4f762 #x37d3d38a593759bd #x8bf2f274868b86ff #x32d5d583563256b1 #x438b8b4ec543c50d #x596e6e85eb59ebdc #xb7dada18c2b7c2af #x8c01018e8f8c8f02 #x64b1b11dac64ac79 #xd29c9cf16dd26d23 #xe04949723be03b92 #xb4d8d81fc7b4c7ab #xfaacacb915fa1543 #x07f3f3fa090709fd #x25cfcfa06f256f85 #xafcaca20eaafea8f #x8ef4f47d898e89f3 #xe947476720e9208e #x1810103828182820 #xd56f6f0b64d564de #x88f0f073838883fb #x6f4a4afbb16fb194 #x725c5cca967296b8 #x243838546c246c70 #xf157575f08f108ae #xc773732152c752e6 #x51979764f351f335 #x23cbcbae6523658d #x7ca1a125847c8459 #x9ce8e857bf9cbfcb #x213e3e5d6321637c #xdd9696ea7cdd7c37 #xdc61611e7fdc7fc2 #x860d0d9c9186911a #x850f0f9b9485941e #x90e0e04bab90abdb #x427c7cbac642c6f8 #xc471712657c457e2 #xaacccc29e5aae583 #xd89090e373d8733b #x050606090f050f0c #x01f7f7f4030103f5 #x121c1c2a36123638 #xa3c2c23cfea3fe9f #x5f6a6a8be15fe1d4 #xf9aeaebe10f91047 #xd06969026bd06bd2 #x911717bfa891a82e #x58999971e858e829 #x273a3a5369276974 #xb92727f7d0b9d04e #x38d9d991483848a9 #x13ebebde351335cd #xb32b2be5ceb3ce56 #x3322227755335544 #xbbd2d204d6bbd6bf #x70a9a93990709049 #x890707878089800e #xa73333c1f2a7f266 #xb62d2decc1b6c15a #x223c3c5a66226678 #x921515b8ad92ad2a #x20c9c9a960206089 #x4987875cdb49db15 #xffaaaab01aff1a4f #x785050d8887888a0 #x7aa5a52b8e7a8e51 #x8f0303898a8f8a06 #xf859594a13f813b2 #x800909929b809b12 #x171a1a2339173934 #xda65651075da75ca #x31d7d784533153b5 #xc68484d551c65113 #xb8d0d003d3b8d3bb #xc38282dc5ec35e1f #xb02929e2cbb0cb52 #x775a5ac3997799b4 #x111e1e2d3311333c #xcb7b7b3d46cb46f6 #xfca8a8b71ffc1f4b #xd66d6d0c61d661da #x3a2c2c624e3a4e58 #x97a5c6c632f4a5f4 #xeb84f8f86f978497 #xc799eeee5eb099b0 #xf78df6f67a8c8d8c #xe50dffffe8170d17 #xb7bdd6d60adcbddc #xa7b1dede16c8b1c8 #x395491916dfc54fc #xc050606090f050f0 #x0403020207050305 #x87a9cece2ee0a9e0 #xac7d5656d1877d87 #xd519e7e7cc2b192b #x7162b5b513a662a6 #x9ae64d4d7c31e631 #xc39aecec59b59ab5 #x05458f8f40cf45cf #x3e9d1f1fa3bc9dbc #x0940898949c040c0 #xef87fafa68928792 #xc515efefd03f153f #x7febb2b29426eb26 #x07c98e8ece40c940 #xed0bfbfbe61d0b1d #x82ec41416e2fec2f #x7d67b3b31aa967a9 #xbefd5f5f431cfd1c #x8aea45456025ea25 #x46bf2323f9dabfda #xa6f753535102f702 #xd396e4e445a196a1 #x2d5b9b9b76ed5bed #xeac27575285dc25d #xd91ce1e1c5241c24 #x7aae3d3dd4e9aee9 #x986a4c4cf2be6abe #xd85a6c6c82ee5aee #xfc417e7ebdc341c3 #xf102f5f5f3060206 #x1d4f838352d14fd1 #xd05c68688ce45ce4 #xa2f451515607f407 #xb934d1d18d5c345c #xe908f9f9e1180818 #xdf93e2e24cae93ae #x4d73abab3e957395 #xc453626297f553f5 #x543f2a2a6b413f41 #x100c08081c140c14 #x3152959563f652f6 #x8c654646e9af65af #x215e9d9d7fe25ee2 #x6028303048782878 #x6ea13737cff8a1f8 #x140f0a0a1b110f11 #x5eb52f2febc4b5c4 #x1c090e0e151b091b #x483624247e5a365a #x369b1b1badb69bb6 #xa53ddfdf98473d47 #x8126cdcda76a266a #x9c694e4ef5bb69bb #xfecd7f7f334ccd4c #xcf9feaea50ba9fba #x241b12123f2d1b2d #x3a9e1d1da4b99eb9 #xb0745858c49c749c #x682e343446722e72 #x6c2d363641772d77 #xa3b2dcdc11cdb2cd #x73eeb4b49d29ee29 #xb6fb5b5b4d16fb16 #x53f6a4a4a501f601 #xec4d7676a1d74dd7 #x7561b7b714a361a3 #xface7d7d3449ce49 #xa47b5252df8d7b8d #xa13edddd9f423e42 #xbc715e5ecd937193 #x26971313b1a297a2 #x57f5a6a6a204f504 #x6968b9b901b868b8 #x0000000000000000 #x992cc1c1b5742c74 #x80604040e0a060a0 #xdd1fe3e3c2211f21 #xf2c879793a43c843 #x77edb6b69a2ced2c #xb3bed4d40dd9bed9 #x01468d8d47ca46ca #xced967671770d970 #xe44b7272afdd4bdd #x33de9494ed79de79 #x2bd49898ff67d467 #x7be8b0b09323e823 #x114a85855bde4ade #x6d6bbbbb06bd6bbd #x912ac5c5bb7e2a7e #x9ee54f4f7b34e534 #xc116ededd73a163a #x17c58686d254c554 #x2fd79a9af862d762 #xcc55666699ff55ff #x22941111b6a794a7 #x0fcf8a8ac04acf4a #xc910e9e9d9301030 #x080604040e0a060a #xe781fefe66988198 #x5bf0a0a0ab0bf00b #xf0447878b4cc44cc #x4aba2525f0d5bad5 #x96e34b4b753ee33e #x5ff3a2a2ac0ef30e #xbafe5d5d4419fe19 #x1bc08080db5bc05b #x0a8a050580858a85 #x7ead3f3fd3ecadec #x42bc2121fedfbcdf #xe0487070a8d848d8 #xf904f1f1fd0c040c #xc6df6363197adf7a #xeec177772f58c158 #x4575afaf309f759f #x84634242e7a563a5 #x4030202070503050 #xd11ae5e5cb2e1a2e #xe10efdfdef120e12 #x656dbfbf08b76db7 #x194c818155d44cd4 #x30141818243c143c #x4c352626795f355f #x9d2fc3c3b2712f71 #x67e1bebe8638e138 #x6aa23535c8fda2fd #x0bcc8888c74fcc4f #x5c392e2e654b394b #x3d5793936af957f9 #xaaf25555580df20d #xe382fcfc619d829d #xf4477a7ab3c947c9 #x8bacc8c827efacef #x6fe7baba8832e732 #x642b32324f7d2b7d #xd795e6e642a495a4 #x9ba0c0c03bfba0fb #x32981919aab398b3 #x27d19e9ef668d168 #x5d7fa3a322817f81 #x88664444eeaa66aa #xa87e5454d6827e82 #x76ab3b3bdde6abe6 #x16830b0b959e839e #x03ca8c8cc945ca45 #x9529c7c7bc7b297b #xd6d36b6b056ed36e #x503c28286c443c44 #x5579a7a72c8b798b #x63e2bcbc813de23d #x2c1d161631271d27 #x4176adad379a769a #xad3bdbdb964d3b4d #xc85664649efa56fa #xe84e7474a6d24ed2 #x281e141436221e22 #x3fdb9292e476db76 #x180a0c0c121e0a1e #x906c4848fcb46cb4 #x6be4b8b88f37e437 #x255d9f9f78e75de7 #x616ebdbd0fb26eb2 #x86ef4343692aef2a #x93a6c4c435f1a6f1 #x72a83939dae3a8e3 #x62a43131c6f7a4f7 #xbd37d3d38a593759 #xff8bf2f274868b86 #xb132d5d583563256 #x0d438b8b4ec543c5 #xdc596e6e85eb59eb #xafb7dada18c2b7c2 #x028c01018e8f8c8f #x7964b1b11dac64ac #x23d29c9cf16dd26d #x92e04949723be03b #xabb4d8d81fc7b4c7 #x43faacacb915fa15 #xfd07f3f3fa090709 #x8525cfcfa06f256f #x8fafcaca20eaafea #xf38ef4f47d898e89 #x8ee947476720e920 #x2018101038281828 #xded56f6f0b64d564 #xfb88f0f073838883 #x946f4a4afbb16fb1 #xb8725c5cca967296 #x70243838546c246c #xaef157575f08f108 #xe6c773732152c752 #x3551979764f351f3 #x8d23cbcbae652365 #x597ca1a125847c84 #xcb9ce8e857bf9cbf #x7c213e3e5d632163 #x37dd9696ea7cdd7c #xc2dc61611e7fdc7f #x1a860d0d9c918691 #x1e850f0f9b948594 #xdb90e0e04bab90ab #xf8427c7cbac642c6 #xe2c471712657c457 #x83aacccc29e5aae5 #x3bd89090e373d873 #x0c050606090f050f #xf501f7f7f4030103 #x38121c1c2a361236 #x9fa3c2c23cfea3fe #xd45f6a6a8be15fe1 #x47f9aeaebe10f910 #xd2d06969026bd06b #x2e911717bfa891a8 #x2958999971e858e8 #x74273a3a53692769 #x4eb92727f7d0b9d0 #xa938d9d991483848 #xcd13ebebde351335 #x56b32b2be5ceb3ce #x4433222277553355 #xbfbbd2d204d6bbd6 #x4970a9a939907090 #x0e89070787808980 #x66a73333c1f2a7f2 #x5ab62d2decc1b6c1 #x78223c3c5a662266 #x2a921515b8ad92ad #x8920c9c9a9602060 #x154987875cdb49db #x4fffaaaab01aff1a #xa0785050d8887888 #x517aa5a52b8e7a8e #x068f0303898a8f8a #xb2f859594a13f813 #x12800909929b809b #x34171a1a23391739 #xcada65651075da75 #xb531d7d784533153 #x13c68484d551c651 #xbbb8d0d003d3b8d3 #x1fc38282dc5ec35e #x52b02929e2cbb0cb #xb4775a5ac3997799 #x3c111e1e2d331133 #xf6cb7b7b3d46cb46 #x4bfca8a8b71ffc1f #xdad66d6d0c61d661 #x583a2c2c624e3a4e #xf497a5c6c632f4a5 #x97eb84f8f86f9784 #xb0c799eeee5eb099 #x8cf78df6f67a8c8d #x17e50dffffe8170d #xdcb7bdd6d60adcbd #xc8a7b1dede16c8b1 #xfc395491916dfc54 #xf0c050606090f050 #x0504030202070503 #xe087a9cece2ee0a9 #x87ac7d5656d1877d #x2bd519e7e7cc2b19 #xa67162b5b513a662 #x319ae64d4d7c31e6 #xb5c39aecec59b59a #xcf05458f8f40cf45 #xbc3e9d1f1fa3bc9d #xc00940898949c040 #x92ef87fafa689287 #x3fc515efefd03f15 #x267febb2b29426eb #x4007c98e8ece40c9 #x1ded0bfbfbe61d0b #x2f82ec41416e2fec #xa97d67b3b31aa967 #x1cbefd5f5f431cfd #x258aea45456025ea #xda46bf2323f9dabf #x02a6f753535102f7 #xa1d396e4e445a196 #xed2d5b9b9b76ed5b #x5deac27575285dc2 #x24d91ce1e1c5241c #xe97aae3d3dd4e9ae #xbe986a4c4cf2be6a #xeed85a6c6c82ee5a #xc3fc417e7ebdc341 #x06f102f5f5f30602 #xd11d4f838352d14f #xe4d05c68688ce45c #x07a2f451515607f4 #x5cb934d1d18d5c34 #x18e908f9f9e11808 #xaedf93e2e24cae93 #x954d73abab3e9573 #xf5c453626297f553 #x41543f2a2a6b413f #x14100c08081c140c #xf63152959563f652 #xaf8c654646e9af65 #xe2215e9d9d7fe25e #x7860283030487828 #xf86ea13737cff8a1 #x11140f0a0a1b110f #xc45eb52f2febc4b5 #x1b1c090e0e151b09 #x5a483624247e5a36 #xb6369b1b1badb69b #x47a53ddfdf98473d #x6a8126cdcda76a26 #xbb9c694e4ef5bb69 #x4cfecd7f7f334ccd #xbacf9feaea50ba9f #x2d241b12123f2d1b #xb93a9e1d1da4b99e #x9cb0745858c49c74 #x72682e343446722e #x776c2d363641772d #xcda3b2dcdc11cdb2 #x2973eeb4b49d29ee #x16b6fb5b5b4d16fb #x0153f6a4a4a501f6 #xd7ec4d7676a1d74d #xa37561b7b714a361 #x49face7d7d3449ce #x8da47b5252df8d7b #x42a13edddd9f423e #x93bc715e5ecd9371 #xa226971313b1a297 #x0457f5a6a6a204f5 #xb86968b9b901b868 #x0000000000000000 #x74992cc1c1b5742c #xa080604040e0a060 #x21dd1fe3e3c2211f #x43f2c879793a43c8 #x2c77edb6b69a2ced #xd9b3bed4d40dd9be #xca01468d8d47ca46 #x70ced967671770d9 #xdde44b7272afdd4b #x7933de9494ed79de #x672bd49898ff67d4 #x237be8b0b09323e8 #xde114a85855bde4a #xbd6d6bbbbb06bd6b #x7e912ac5c5bb7e2a #x349ee54f4f7b34e5 #x3ac116ededd73a16 #x5417c58686d254c5 #x622fd79a9af862d7 #xffcc55666699ff55 #xa722941111b6a794 #x4a0fcf8a8ac04acf #x30c910e9e9d93010 #x0a080604040e0a06 #x98e781fefe669881 #x0b5bf0a0a0ab0bf0 #xccf0447878b4cc44 #xd54aba2525f0d5ba #x3e96e34b4b753ee3 #x0e5ff3a2a2ac0ef3 #x19bafe5d5d4419fe #x5b1bc08080db5bc0 #x850a8a050580858a #xec7ead3f3fd3ecad #xdf42bc2121fedfbc #xd8e0487070a8d848 #x0cf904f1f1fd0c04 #x7ac6df6363197adf #x58eec177772f58c1 #x9f4575afaf309f75 #xa584634242e7a563 #x5040302020705030 #x2ed11ae5e5cb2e1a #x12e10efdfdef120e #xb7656dbfbf08b76d #xd4194c818155d44c #x3c30141818243c14 #x5f4c352626795f35 #x719d2fc3c3b2712f #x3867e1bebe8638e1 #xfd6aa23535c8fda2 #x4f0bcc8888c74fcc #x4b5c392e2e654b39 #xf93d5793936af957 #x0daaf25555580df2 #x9de382fcfc619d82 #xc9f4477a7ab3c947 #xef8bacc8c827efac #x326fe7baba8832e7 #x7d642b32324f7d2b #xa4d795e6e642a495 #xfb9ba0c0c03bfba0 #xb332981919aab398 #x6827d19e9ef668d1 #x815d7fa3a322817f #xaa88664444eeaa66 #x82a87e5454d6827e #xe676ab3b3bdde6ab #x9e16830b0b959e83 #x4503ca8c8cc945ca #x7b9529c7c7bc7b29 #x6ed6d36b6b056ed3 #x44503c28286c443c #x8b5579a7a72c8b79 #x3d63e2bcbc813de2 #x272c1d161631271d #x9a4176adad379a76 #x4dad3bdbdb964d3b #xfac85664649efa56 #xd2e84e7474a6d24e #x22281e141436221e #x763fdb9292e476db #x1e180a0c0c121e0a #xb4906c4848fcb46c #x376be4b8b88f37e4 #xe7255d9f9f78e75d #xb2616ebdbd0fb26e #x2a86ef4343692aef #xf193a6c4c435f1a6 #xe372a83939dae3a8 #xf762a43131c6f7a4 #x59bd37d3d38a5937 #x86ff8bf2f274868b #x56b132d5d5835632 #xc50d438b8b4ec543 #xebdc596e6e85eb59 #xc2afb7dada18c2b7 #x8f028c01018e8f8c #xac7964b1b11dac64 #x6d23d29c9cf16dd2 #x3b92e04949723be0 #xc7abb4d8d81fc7b4 #x1543faacacb915fa #x09fd07f3f3fa0907 #x6f8525cfcfa06f25 #xea8fafcaca20eaaf #x89f38ef4f47d898e #x208ee947476720e9 #x2820181010382818 #x64ded56f6f0b64d5 #x83fb88f0f0738388 #xb1946f4a4afbb16f #x96b8725c5cca9672 #x6c70243838546c24 #x08aef157575f08f1 #x52e6c773732152c7 #xf33551979764f351 #x658d23cbcbae6523 #x84597ca1a125847c #xbfcb9ce8e857bf9c #x637c213e3e5d6321 #x7c37dd9696ea7cdd #x7fc2dc61611e7fdc #x911a860d0d9c9186 #x941e850f0f9b9485 #xabdb90e0e04bab90 #xc6f8427c7cbac642 #x57e2c471712657c4 #xe583aacccc29e5aa #x733bd89090e373d8 #x0f0c050606090f05 #x03f501f7f7f40301 #x3638121c1c2a3612 #xfe9fa3c2c23cfea3 #xe1d45f6a6a8be15f #x1047f9aeaebe10f9 #x6bd2d06969026bd0 #xa82e911717bfa891 #xe82958999971e858 #x6974273a3a536927 #xd04eb92727f7d0b9 #x48a938d9d9914838 #x35cd13ebebde3513 #xce56b32b2be5ceb3 #x5544332222775533 #xd6bfbbd2d204d6bb #x904970a9a9399070 #x800e890707878089 #xf266a73333c1f2a7 #xc15ab62d2decc1b6 #x6678223c3c5a6622 #xad2a921515b8ad92 #x608920c9c9a96020 #xdb154987875cdb49 #x1a4fffaaaab01aff #x88a0785050d88878 #x8e517aa5a52b8e7a #x8a068f0303898a8f #x13b2f859594a13f8 #x9b12800909929b80 #x3934171a1a233917 #x75cada65651075da #x53b531d7d7845331 #x5113c68484d551c6 #xd3bbb8d0d003d3b8 #x5e1fc38282dc5ec3 #xcb52b02929e2cbb0 #x99b4775a5ac39977 #x333c111e1e2d3311 #x46f6cb7b7b3d46cb #x1f4bfca8a8b71ffc #x61dad66d6d0c61d6 #x4e583a2c2c624e3a #xa5f497a5c6c632f4 #x8497eb84f8f86f97 #x99b0c799eeee5eb0 #x8d8cf78df6f67a8c #x0d17e50dffffe817 #xbddcb7bdd6d60adc #xb1c8a7b1dede16c8 #x54fc395491916dfc #x50f0c050606090f0 #x0305040302020705 #xa9e087a9cece2ee0 #x7d87ac7d5656d187 #x192bd519e7e7cc2b #x62a67162b5b513a6 #xe6319ae64d4d7c31 #x9ab5c39aecec59b5 #x45cf05458f8f40cf #x9dbc3e9d1f1fa3bc #x40c00940898949c0 #x8792ef87fafa6892 #x153fc515efefd03f #xeb267febb2b29426 #xc94007c98e8ece40 #x0b1ded0bfbfbe61d #xec2f82ec41416e2f #x67a97d67b3b31aa9 #xfd1cbefd5f5f431c #xea258aea45456025 #xbfda46bf2323f9da #xf702a6f753535102 #x96a1d396e4e445a1 #x5bed2d5b9b9b76ed #xc25deac27575285d #x1c24d91ce1e1c524 #xaee97aae3d3dd4e9 #x6abe986a4c4cf2be #x5aeed85a6c6c82ee #x41c3fc417e7ebdc3 #x0206f102f5f5f306 #x4fd11d4f838352d1 #x5ce4d05c68688ce4 #xf407a2f451515607 #x345cb934d1d18d5c #x0818e908f9f9e118 #x93aedf93e2e24cae #x73954d73abab3e95 #x53f5c453626297f5 #x3f41543f2a2a6b41 #x0c14100c08081c14 #x52f63152959563f6 #x65af8c654646e9af #x5ee2215e9d9d7fe2 #x2878602830304878 #xa1f86ea13737cff8 #x0f11140f0a0a1b11 #xb5c45eb52f2febc4 #x091b1c090e0e151b #x365a483624247e5a #x9bb6369b1b1badb6 #x3d47a53ddfdf9847 #x266a8126cdcda76a #x69bb9c694e4ef5bb #xcd4cfecd7f7f334c #x9fbacf9feaea50ba #x1b2d241b12123f2d #x9eb93a9e1d1da4b9 #x749cb0745858c49c #x2e72682e34344672 #x2d776c2d36364177 #xb2cda3b2dcdc11cd #xee2973eeb4b49d29 #xfb16b6fb5b5b4d16 #xf60153f6a4a4a501 #x4dd7ec4d7676a1d7 #x61a37561b7b714a3 #xce49face7d7d3449 #x7b8da47b5252df8d #x3e42a13edddd9f42 #x7193bc715e5ecd93 #x97a226971313b1a2 #xf50457f5a6a6a204 #x68b86968b9b901b8 #x0000000000000000 #x2c74992cc1c1b574 #x60a080604040e0a0 #x1f21dd1fe3e3c221 #xc843f2c879793a43 #xed2c77edb6b69a2c #xbed9b3bed4d40dd9 #x46ca01468d8d47ca #xd970ced967671770 #x4bdde44b7272afdd #xde7933de9494ed79 #xd4672bd49898ff67 #xe8237be8b0b09323 #x4ade114a85855bde #x6bbd6d6bbbbb06bd #x2a7e912ac5c5bb7e #xe5349ee54f4f7b34 #x163ac116ededd73a #xc55417c58686d254 #xd7622fd79a9af862 #x55ffcc55666699ff #x94a722941111b6a7 #xcf4a0fcf8a8ac04a #x1030c910e9e9d930 #x060a080604040e0a #x8198e781fefe6698 #xf00b5bf0a0a0ab0b #x44ccf0447878b4cc #xbad54aba2525f0d5 #xe33e96e34b4b753e #xf30e5ff3a2a2ac0e #xfe19bafe5d5d4419 #xc05b1bc08080db5b #x8a850a8a05058085 #xadec7ead3f3fd3ec #xbcdf42bc2121fedf #x48d8e0487070a8d8 #x040cf904f1f1fd0c #xdf7ac6df6363197a #xc158eec177772f58 #x759f4575afaf309f #x63a584634242e7a5 #x3050403020207050 #x1a2ed11ae5e5cb2e #x0e12e10efdfdef12 #x6db7656dbfbf08b7 #x4cd4194c818155d4 #x143c30141818243c #x355f4c352626795f #x2f719d2fc3c3b271 #xe13867e1bebe8638 #xa2fd6aa23535c8fd #xcc4f0bcc8888c74f #x394b5c392e2e654b #x57f93d5793936af9 #xf20daaf25555580d #x829de382fcfc619d #x47c9f4477a7ab3c9 #xacef8bacc8c827ef #xe7326fe7baba8832 #x2b7d642b32324f7d #x95a4d795e6e642a4 #xa0fb9ba0c0c03bfb #x98b332981919aab3 #xd16827d19e9ef668 #x7f815d7fa3a32281 #x66aa88664444eeaa #x7e82a87e5454d682 #xabe676ab3b3bdde6 #x839e16830b0b959e #xca4503ca8c8cc945 #x297b9529c7c7bc7b #xd36ed6d36b6b056e #x3c44503c28286c44 #x798b5579a7a72c8b #xe23d63e2bcbc813d #x1d272c1d16163127 #x769a4176adad379a #x3b4dad3bdbdb964d #x56fac85664649efa #x4ed2e84e7474a6d2 #x1e22281e14143622 #xdb763fdb9292e476 #x0a1e180a0c0c121e #x6cb4906c4848fcb4 #xe4376be4b8b88f37 #x5de7255d9f9f78e7 #x6eb2616ebdbd0fb2 #xef2a86ef4343692a #xa6f193a6c4c435f1 #xa8e372a83939dae3 #xa4f762a43131c6f7 #x3759bd37d3d38a59 #x8b86ff8bf2f27486 #x3256b132d5d58356 #x43c50d438b8b4ec5 #x59ebdc596e6e85eb #xb7c2afb7dada18c2 #x8c8f028c01018e8f #x64ac7964b1b11dac #xd26d23d29c9cf16d #xe03b92e04949723b #xb4c7abb4d8d81fc7 #xfa1543faacacb915 #x0709fd07f3f3fa09 #x256f8525cfcfa06f #xafea8fafcaca20ea #x8e89f38ef4f47d89 #xe9208ee947476720 #x1828201810103828 #xd564ded56f6f0b64 #x8883fb88f0f07383 #x6fb1946f4a4afbb1 #x7296b8725c5cca96 #x246c70243838546c #xf108aef157575f08 #xc752e6c773732152 #x51f33551979764f3 #x23658d23cbcbae65 #x7c84597ca1a12584 #x9cbfcb9ce8e857bf #x21637c213e3e5d63 #xdd7c37dd9696ea7c #xdc7fc2dc61611e7f #x86911a860d0d9c91 #x85941e850f0f9b94 #x90abdb90e0e04bab #x42c6f8427c7cbac6 #xc457e2c471712657 #xaae583aacccc29e5 #xd8733bd89090e373 #x050f0c050606090f #x0103f501f7f7f403 #x123638121c1c2a36 #xa3fe9fa3c2c23cfe #x5fe1d45f6a6a8be1 #xf91047f9aeaebe10 #xd06bd2d06969026b #x91a82e911717bfa8 #x58e82958999971e8 #x276974273a3a5369 #xb9d04eb92727f7d0 #x3848a938d9d99148 #x1335cd13ebebde35 #xb3ce56b32b2be5ce #x3355443322227755 #xbbd6bfbbd2d204d6 #x70904970a9a93990 #x89800e8907078780 #xa7f266a73333c1f2 #xb6c15ab62d2decc1 #x226678223c3c5a66 #x92ad2a921515b8ad #x20608920c9c9a960 #x49db154987875cdb #xff1a4fffaaaab01a #x7888a0785050d888 #x7a8e517aa5a52b8e #x8f8a068f0303898a #xf813b2f859594a13 #x809b12800909929b #x173934171a1a2339 #xda75cada65651075 #x3153b531d7d78453 #xc65113c68484d551 #xb8d3bbb8d0d003d3 #xc35e1fc38282dc5e #xb0cb52b02929e2cb #x7799b4775a5ac399 #x11333c111e1e2d33 #xcb46f6cb7b7b3d46 #xfc1f4bfca8a8b71f #xd661dad66d6d0c61 #x3a4e583a2c2c624e #xf4a5f497a5c6c632 #x978497eb84f8f86f #xb099b0c799eeee5e #x8c8d8cf78df6f67a #x170d17e50dffffe8 #xdcbddcb7bdd6d60a #xc8b1c8a7b1dede16 #xfc54fc395491916d #xf050f0c050606090 #x0503050403020207 #xe0a9e087a9cece2e #x877d87ac7d5656d1 #x2b192bd519e7e7cc #xa662a67162b5b513 #x31e6319ae64d4d7c #xb59ab5c39aecec59 #xcf45cf05458f8f40 #xbc9dbc3e9d1f1fa3 #xc040c00940898949 #x928792ef87fafa68 #x3f153fc515efefd0 #x26eb267febb2b294 #x40c94007c98e8ece #x1d0b1ded0bfbfbe6 #x2fec2f82ec41416e #xa967a97d67b3b31a #x1cfd1cbefd5f5f43 #x25ea258aea454560 #xdabfda46bf2323f9 #x02f702a6f7535351 #xa196a1d396e4e445 #xed5bed2d5b9b9b76 #x5dc25deac2757528 #x241c24d91ce1e1c5 #xe9aee97aae3d3dd4 #xbe6abe986a4c4cf2 #xee5aeed85a6c6c82 #xc341c3fc417e7ebd #x060206f102f5f5f3 #xd14fd11d4f838352 #xe45ce4d05c68688c #x07f407a2f4515156 #x5c345cb934d1d18d #x180818e908f9f9e1 #xae93aedf93e2e24c #x9573954d73abab3e #xf553f5c453626297 #x413f41543f2a2a6b #x140c14100c08081c #xf652f63152959563 #xaf65af8c654646e9 #xe25ee2215e9d9d7f #x7828786028303048 #xf8a1f86ea13737cf #x110f11140f0a0a1b #xc4b5c45eb52f2feb #x1b091b1c090e0e15 #x5a365a483624247e #xb69bb6369b1b1bad #x473d47a53ddfdf98 #x6a266a8126cdcda7 #xbb69bb9c694e4ef5 #x4ccd4cfecd7f7f33 #xba9fbacf9feaea50 #x2d1b2d241b12123f #xb99eb93a9e1d1da4 #x9c749cb0745858c4 #x722e72682e343446 #x772d776c2d363641 #xcdb2cda3b2dcdc11 #x29ee2973eeb4b49d #x16fb16b6fb5b5b4d #x01f60153f6a4a4a5 #xd74dd7ec4d7676a1 #xa361a37561b7b714 #x49ce49face7d7d34 #x8d7b8da47b5252df #x423e42a13edddd9f #x937193bc715e5ecd #xa297a226971313b1 #x04f50457f5a6a6a2 #xb868b86968b9b901 #x0000000000000000 #x742c74992cc1c1b5 #xa060a080604040e0 #x211f21dd1fe3e3c2 #x43c843f2c879793a #x2ced2c77edb6b69a #xd9bed9b3bed4d40d #xca46ca01468d8d47 #x70d970ced9676717 #xdd4bdde44b7272af #x79de7933de9494ed #x67d4672bd49898ff #x23e8237be8b0b093 #xde4ade114a85855b #xbd6bbd6d6bbbbb06 #x7e2a7e912ac5c5bb #x34e5349ee54f4f7b #x3a163ac116ededd7 #x54c55417c58686d2 #x62d7622fd79a9af8 #xff55ffcc55666699 #xa794a722941111b6 #x4acf4a0fcf8a8ac0 #x301030c910e9e9d9 #x0a060a080604040e #x988198e781fefe66 #x0bf00b5bf0a0a0ab #xcc44ccf0447878b4 #xd5bad54aba2525f0 #x3ee33e96e34b4b75 #x0ef30e5ff3a2a2ac #x19fe19bafe5d5d44 #x5bc05b1bc08080db #x858a850a8a050580 #xecadec7ead3f3fd3 #xdfbcdf42bc2121fe #xd848d8e0487070a8 #x0c040cf904f1f1fd #x7adf7ac6df636319 #x58c158eec177772f #x9f759f4575afaf30 #xa563a584634242e7 #x5030504030202070 #x2e1a2ed11ae5e5cb #x120e12e10efdfdef #xb76db7656dbfbf08 #xd44cd4194c818155 #x3c143c3014181824 #x5f355f4c35262679 #x712f719d2fc3c3b2 #x38e13867e1bebe86 #xfda2fd6aa23535c8 #x4fcc4f0bcc8888c7 #x4b394b5c392e2e65 #xf957f93d5793936a #x0df20daaf2555558 #x9d829de382fcfc61 #xc947c9f4477a7ab3 #xefacef8bacc8c827 #x32e7326fe7baba88 #x7d2b7d642b32324f #xa495a4d795e6e642 #xfba0fb9ba0c0c03b #xb398b332981919aa #x68d16827d19e9ef6 #x817f815d7fa3a322 #xaa66aa88664444ee #x827e82a87e5454d6 #xe6abe676ab3b3bdd #x9e839e16830b0b95 #x45ca4503ca8c8cc9 #x7b297b9529c7c7bc #x6ed36ed6d36b6b05 #x443c44503c28286c #x8b798b5579a7a72c #x3de23d63e2bcbc81 #x271d272c1d161631 #x9a769a4176adad37 #x4d3b4dad3bdbdb96 #xfa56fac85664649e #xd24ed2e84e7474a6 #x221e22281e141436 #x76db763fdb9292e4 #x1e0a1e180a0c0c12 #xb46cb4906c4848fc #x37e4376be4b8b88f #xe75de7255d9f9f78 #xb26eb2616ebdbd0f #x2aef2a86ef434369 #xf1a6f193a6c4c435 #xe3a8e372a83939da #xf7a4f762a43131c6 #x593759bd37d3d38a #x868b86ff8bf2f274 #x563256b132d5d583 #xc543c50d438b8b4e #xeb59ebdc596e6e85 #xc2b7c2afb7dada18 #x8f8c8f028c01018e #xac64ac7964b1b11d #x6dd26d23d29c9cf1 #x3be03b92e0494972 #xc7b4c7abb4d8d81f #x15fa1543faacacb9 #x090709fd07f3f3fa #x6f256f8525cfcfa0 #xeaafea8fafcaca20 #x898e89f38ef4f47d #x20e9208ee9474767 #x2818282018101038 #x64d564ded56f6f0b #x838883fb88f0f073 #xb16fb1946f4a4afb #x967296b8725c5cca #x6c246c7024383854 #x08f108aef157575f #x52c752e6c7737321 #xf351f33551979764 #x6523658d23cbcbae #x847c84597ca1a125 #xbf9cbfcb9ce8e857 #x6321637c213e3e5d #x7cdd7c37dd9696ea #x7fdc7fc2dc61611e #x9186911a860d0d9c #x9485941e850f0f9b #xab90abdb90e0e04b #xc642c6f8427c7cba #x57c457e2c4717126 #xe5aae583aacccc29 #x73d8733bd89090e3 #x0f050f0c05060609 #x030103f501f7f7f4 #x36123638121c1c2a #xfea3fe9fa3c2c23c #xe15fe1d45f6a6a8b #x10f91047f9aeaebe #x6bd06bd2d0696902 #xa891a82e911717bf #xe858e82958999971 #x69276974273a3a53 #xd0b9d04eb92727f7 #x483848a938d9d991 #x351335cd13ebebde #xceb3ce56b32b2be5 #x5533554433222277 #xd6bbd6bfbbd2d204 #x9070904970a9a939 #x8089800e89070787 #xf2a7f266a73333c1 #xc1b6c15ab62d2dec #x66226678223c3c5a #xad92ad2a921515b8 #x6020608920c9c9a9 #xdb49db154987875c #x1aff1a4fffaaaab0 #x887888a0785050d8 #x8e7a8e517aa5a52b #x8a8f8a068f030389 #x13f813b2f859594a #x9b809b1280090992 #x39173934171a1a23 #x75da75cada656510 #x533153b531d7d784 #x51c65113c68484d5 #xd3b8d3bbb8d0d003 #x5ec35e1fc38282dc #xcbb0cb52b02929e2 #x997799b4775a5ac3 #x3311333c111e1e2d #x46cb46f6cb7b7b3d #x1ffc1f4bfca8a8b7 #x61d661dad66d6d0c #x4e3a4e583a2c2c62 #x32f4a5f497a5c6c6 #x6f978497eb84f8f8 #x5eb099b0c799eeee #x7a8c8d8cf78df6f6 #xe8170d17e50dffff #x0adcbddcb7bdd6d6 #x16c8b1c8a7b1dede #x6dfc54fc39549191 #x90f050f0c0506060 #x0705030504030202 #x2ee0a9e087a9cece #xd1877d87ac7d5656 #xcc2b192bd519e7e7 #x13a662a67162b5b5 #x7c31e6319ae64d4d #x59b59ab5c39aecec #x40cf45cf05458f8f #xa3bc9dbc3e9d1f1f #x49c040c009408989 #x68928792ef87fafa #xd03f153fc515efef #x9426eb267febb2b2 #xce40c94007c98e8e #xe61d0b1ded0bfbfb #x6e2fec2f82ec4141 #x1aa967a97d67b3b3 #x431cfd1cbefd5f5f #x6025ea258aea4545 #xf9dabfda46bf2323 #x5102f702a6f75353 #x45a196a1d396e4e4 #x76ed5bed2d5b9b9b #x285dc25deac27575 #xc5241c24d91ce1e1 #xd4e9aee97aae3d3d #xf2be6abe986a4c4c #x82ee5aeed85a6c6c #xbdc341c3fc417e7e #xf3060206f102f5f5 #x52d14fd11d4f8383 #x8ce45ce4d05c6868 #x5607f407a2f45151 #x8d5c345cb934d1d1 #xe1180818e908f9f9 #x4cae93aedf93e2e2 #x3e9573954d73abab #x97f553f5c4536262 #x6b413f41543f2a2a #x1c140c14100c0808 #x63f652f631529595 #xe9af65af8c654646 #x7fe25ee2215e9d9d #x4878287860283030 #xcff8a1f86ea13737 #x1b110f11140f0a0a #xebc4b5c45eb52f2f #x151b091b1c090e0e #x7e5a365a48362424 #xadb69bb6369b1b1b #x98473d47a53ddfdf #xa76a266a8126cdcd #xf5bb69bb9c694e4e #x334ccd4cfecd7f7f #x50ba9fbacf9feaea #x3f2d1b2d241b1212 #xa4b99eb93a9e1d1d #xc49c749cb0745858 #x46722e72682e3434 #x41772d776c2d3636 #x11cdb2cda3b2dcdc #x9d29ee2973eeb4b4 #x4d16fb16b6fb5b5b #xa501f60153f6a4a4 #xa1d74dd7ec4d7676 #x14a361a37561b7b7 #x3449ce49face7d7d #xdf8d7b8da47b5252 #x9f423e42a13edddd #xcd937193bc715e5e #xb1a297a226971313 #xa204f50457f5a6a6 #x01b868b86968b9b9 #x0000000000000000 #xb5742c74992cc1c1 #xe0a060a080604040 #xc2211f21dd1fe3e3 #x3a43c843f2c87979 #x9a2ced2c77edb6b6 #x0dd9bed9b3bed4d4 #x47ca46ca01468d8d #x1770d970ced96767 #xafdd4bdde44b7272 #xed79de7933de9494 #xff67d4672bd49898 #x9323e8237be8b0b0 #x5bde4ade114a8585 #x06bd6bbd6d6bbbbb #xbb7e2a7e912ac5c5 #x7b34e5349ee54f4f #xd73a163ac116eded #xd254c55417c58686 #xf862d7622fd79a9a #x99ff55ffcc556666 #xb6a794a722941111 #xc04acf4a0fcf8a8a #xd9301030c910e9e9 #x0e0a060a08060404 #x66988198e781fefe #xab0bf00b5bf0a0a0 #xb4cc44ccf0447878 #xf0d5bad54aba2525 #x753ee33e96e34b4b #xac0ef30e5ff3a2a2 #x4419fe19bafe5d5d #xdb5bc05b1bc08080 #x80858a850a8a0505 #xd3ecadec7ead3f3f #xfedfbcdf42bc2121 #xa8d848d8e0487070 #xfd0c040cf904f1f1 #x197adf7ac6df6363 #x2f58c158eec17777 #x309f759f4575afaf #xe7a563a584634242 #x7050305040302020 #xcb2e1a2ed11ae5e5 #xef120e12e10efdfd #x08b76db7656dbfbf #x55d44cd4194c8181 #x243c143c30141818 #x795f355f4c352626 #xb2712f719d2fc3c3 #x8638e13867e1bebe #xc8fda2fd6aa23535 #xc74fcc4f0bcc8888 #x654b394b5c392e2e #x6af957f93d579393 #x580df20daaf25555 #x619d829de382fcfc #xb3c947c9f4477a7a #x27efacef8bacc8c8 #x8832e7326fe7baba #x4f7d2b7d642b3232 #x42a495a4d795e6e6 #x3bfba0fb9ba0c0c0 #xaab398b332981919 #xf668d16827d19e9e #x22817f815d7fa3a3 #xeeaa66aa88664444 #xd6827e82a87e5454 #xdde6abe676ab3b3b #x959e839e16830b0b #xc945ca4503ca8c8c #xbc7b297b9529c7c7 #x056ed36ed6d36b6b #x6c443c44503c2828 #x2c8b798b5579a7a7 #x813de23d63e2bcbc #x31271d272c1d1616 #x379a769a4176adad #x964d3b4dad3bdbdb #x9efa56fac8566464 #xa6d24ed2e84e7474 #x36221e22281e1414 #xe476db763fdb9292 #x121e0a1e180a0c0c #xfcb46cb4906c4848 #x8f37e4376be4b8b8 #x78e75de7255d9f9f #x0fb26eb2616ebdbd #x692aef2a86ef4343 #x35f1a6f193a6c4c4 #xdae3a8e372a83939 #xc6f7a4f762a43131 #x8a593759bd37d3d3 #x74868b86ff8bf2f2 #x83563256b132d5d5 #x4ec543c50d438b8b #x85eb59ebdc596e6e #x18c2b7c2afb7dada #x8e8f8c8f028c0101 #x1dac64ac7964b1b1 #xf16dd26d23d29c9c #x723be03b92e04949 #x1fc7b4c7abb4d8d8 #xb915fa1543faacac #xfa090709fd07f3f3 #xa06f256f8525cfcf #x20eaafea8fafcaca #x7d898e89f38ef4f4 #x6720e9208ee94747 #x3828182820181010 #x0b64d564ded56f6f #x73838883fb88f0f0 #xfbb16fb1946f4a4a #xca967296b8725c5c #x546c246c70243838 #x5f08f108aef15757 #x2152c752e6c77373 #x64f351f335519797 #xae6523658d23cbcb #x25847c84597ca1a1 #x57bf9cbfcb9ce8e8 #x5d6321637c213e3e #xea7cdd7c37dd9696 #x1e7fdc7fc2dc6161 #x9c9186911a860d0d #x9b9485941e850f0f #x4bab90abdb90e0e0 #xbac642c6f8427c7c #x2657c457e2c47171 #x29e5aae583aacccc #xe373d8733bd89090 #x090f050f0c050606 #xf4030103f501f7f7 #x2a36123638121c1c #x3cfea3fe9fa3c2c2 #x8be15fe1d45f6a6a #xbe10f91047f9aeae #x026bd06bd2d06969 #xbfa891a82e911717 #x71e858e829589999 #x5369276974273a3a #xf7d0b9d04eb92727 #x91483848a938d9d9 #xde351335cd13ebeb #xe5ceb3ce56b32b2b #x7755335544332222 #x04d6bbd6bfbbd2d2 #x399070904970a9a9 #x878089800e890707 #xc1f2a7f266a73333 #xecc1b6c15ab62d2d #x5a66226678223c3c #xb8ad92ad2a921515 #xa96020608920c9c9 #x5cdb49db15498787 #xb01aff1a4fffaaaa #xd8887888a0785050 #x2b8e7a8e517aa5a5 #x898a8f8a068f0303 #x4a13f813b2f85959 #x929b809b12800909 #x2339173934171a1a #x1075da75cada6565 #x84533153b531d7d7 #xd551c65113c68484 #x03d3b8d3bbb8d0d0 #xdc5ec35e1fc38282 #xe2cbb0cb52b02929 #xc3997799b4775a5a #x2d3311333c111e1e #x3d46cb46f6cb7b7b #xb71ffc1f4bfca8a8 #x0c61d661dad66d6d #x624e3a4e583a2c2c)))) (declaim (inline groestl-table) (ftype (function ((integer 0 2048)) (unsigned-byte 64)) groestl-table)) (defun groestl-table (i) (declare (type (integer 0 2048) i)) (aref +groestl-table+ i)) ;;; ;;; Rounds ;;; (defmacro groestl-ext-byte (v n) `(logand (ash ,v (* 8 (- ,n 7))) #xff)) (defmacro groestl-column (x y i c0 c1 c2 c3 c4 c5 c6 c7) "Compute one new state column." `(setf (aref ,y ,i) (logxor (groestl-table (groestl-ext-byte (aref ,x ,c0) 0)) (groestl-table (+ 256 (groestl-ext-byte (aref ,x ,c1) 1))) (groestl-table (+ 512 (groestl-ext-byte (aref ,x ,c2) 2))) (groestl-table (+ 768 (groestl-ext-byte (aref ,x ,c3) 3))) (groestl-table (+ 1024 (groestl-ext-byte (aref ,x ,c4) 4))) (groestl-table (+ 1280 (groestl-ext-byte (aref ,x ,c5) 5))) (groestl-table (+ 1536 (groestl-ext-byte (aref ,x ,c6) 6))) (groestl-table (+ 1792 (groestl-ext-byte (aref ,x ,c7) 7)))))) (declaim (inline groestl-rnd512p) (ftype (function ((simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) (simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) (unsigned-byte 64))) groestl-end512p)) (defun groestl-rnd512p (x y r) "Compute a round in P (short variants)." (declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) x y) (type (unsigned-byte 64) r) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (setf (aref x 0) (logxor (aref x 0) #x0000000000000000 r) (aref x 1) (logxor (aref x 1) #x1000000000000000 r) (aref x 2) (logxor (aref x 2) #x2000000000000000 r) (aref x 3) (logxor (aref x 3) #x3000000000000000 r) (aref x 4) (logxor (aref x 4) #x4000000000000000 r) (aref x 5) (logxor (aref x 5) #x5000000000000000 r) (aref x 6) (logxor (aref x 6) #x6000000000000000 r) (aref x 7) (logxor (aref x 7) #x7000000000000000 r)) (groestl-column x y 0 0 1 2 3 4 5 6 7) (groestl-column x y 1 1 2 3 4 5 6 7 0) (groestl-column x y 2 2 3 4 5 6 7 0 1) (groestl-column x y 3 3 4 5 6 7 0 1 2) (groestl-column x y 4 4 5 6 7 0 1 2 3) (groestl-column x y 5 5 6 7 0 1 2 3 4) (groestl-column x y 6 6 7 0 1 2 3 4 5) (groestl-column x y 7 7 0 1 2 3 4 5 6) (values)) (declaim (inline groestl-rnd512q) (ftype (function ((simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) (simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) (unsigned-byte 64))) groestl-end512q)) (defun groestl-rnd512q (x y r) "Compute a round in Q (short variants)." (declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) x y) (type (unsigned-byte 64) r) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (setf (aref x 0) (logxor (aref x 0) #xffffffffffffffff r) (aref x 1) (logxor (aref x 1) #xffffffffffffffef r) (aref x 2) (logxor (aref x 2) #xffffffffffffffdf r) (aref x 3) (logxor (aref x 3) #xffffffffffffffcf r) (aref x 4) (logxor (aref x 4) #xffffffffffffffbf r) (aref x 5) (logxor (aref x 5) #xffffffffffffffaf r) (aref x 6) (logxor (aref x 6) #xffffffffffffff9f r) (aref x 7) (logxor (aref x 7) #xffffffffffffff8f r)) (groestl-column x y 0 1 3 5 7 0 2 4 6) (groestl-column x y 1 2 4 6 0 1 3 5 7) (groestl-column x y 2 3 5 7 1 2 4 6 0) (groestl-column x y 3 4 6 0 2 3 5 7 1) (groestl-column x y 4 5 7 1 3 4 6 0 2) (groestl-column x y 5 6 0 2 4 5 7 1 3) (groestl-column x y 6 7 1 3 5 6 0 2 4) (groestl-column x y 7 0 2 4 6 7 1 3 5) (values)) (declaim (inline groestl-rnd1024p) (ftype (function ((simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) (simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) (unsigned-byte 64))) groestl-end1024p)) (defun groestl-rnd1024p (x y r) "Compute a round in P (long variants)." (declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) x y) (type (unsigned-byte 64) r) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (setf (aref x 0) (logxor (aref x 0) #x0000000000000000 r) (aref x 1) (logxor (aref x 1) #x1000000000000000 r) (aref x 2) (logxor (aref x 2) #x2000000000000000 r) (aref x 3) (logxor (aref x 3) #x3000000000000000 r) (aref x 4) (logxor (aref x 4) #x4000000000000000 r) (aref x 5) (logxor (aref x 5) #x5000000000000000 r) (aref x 6) (logxor (aref x 6) #x6000000000000000 r) (aref x 7) (logxor (aref x 7) #x7000000000000000 r) (aref x 8) (logxor (aref x 8) #x8000000000000000 r) (aref x 9) (logxor (aref x 9) #x9000000000000000 r) (aref x 10) (logxor (aref x 10) #xa000000000000000 r) (aref x 11) (logxor (aref x 11) #xb000000000000000 r) (aref x 12) (logxor (aref x 12) #xc000000000000000 r) (aref x 13) (logxor (aref x 13) #xd000000000000000 r) (aref x 14) (logxor (aref x 14) #xe000000000000000 r) (aref x 15) (logxor (aref x 15) #xf000000000000000 r)) (groestl-column x y 15 15 0 1 2 3 4 5 10) (groestl-column x y 14 14 15 0 1 2 3 4 9) (groestl-column x y 13 13 14 15 0 1 2 3 8) (groestl-column x y 12 12 13 14 15 0 1 2 7) (groestl-column x y 11 11 12 13 14 15 0 1 6) (groestl-column x y 10 10 11 12 13 14 15 0 5) (groestl-column x y 9 9 10 11 12 13 14 15 4) (groestl-column x y 8 8 9 10 11 12 13 14 3) (groestl-column x y 7 7 8 9 10 11 12 13 2) (groestl-column x y 6 6 7 8 9 10 11 12 1) (groestl-column x y 5 5 6 7 8 9 10 11 0) (groestl-column x y 4 4 5 6 7 8 9 10 15) (groestl-column x y 3 3 4 5 6 7 8 9 14) (groestl-column x y 2 2 3 4 5 6 7 8 13) (groestl-column x y 1 1 2 3 4 5 6 7 12) (groestl-column x y 0 0 1 2 3 4 5 6 11) (values)) (declaim (inline groestl-rnd1024q) (ftype (function ((simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) (simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) (unsigned-byte 64))) groestl-end1024q)) (defun groestl-rnd1024q (x y r) "Compute a round in Q (long variants)." (declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) x y) (type (unsigned-byte 64) r) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (setf (aref x 0) (logxor (aref x 0) #xffffffffffffffff r) (aref x 1) (logxor (aref x 1) #xffffffffffffffef r) (aref x 2) (logxor (aref x 2) #xffffffffffffffdf r) (aref x 3) (logxor (aref x 3) #xffffffffffffffcf r) (aref x 4) (logxor (aref x 4) #xffffffffffffffbf r) (aref x 5) (logxor (aref x 5) #xffffffffffffffaf r) (aref x 6) (logxor (aref x 6) #xffffffffffffff9f r) (aref x 7) (logxor (aref x 7) #xffffffffffffff8f r) (aref x 8) (logxor (aref x 8) #xffffffffffffff7f r) (aref x 9) (logxor (aref x 9) #xffffffffffffff6f r) (aref x 10) (logxor (aref x 10) #xffffffffffffff5f r) (aref x 11) (logxor (aref x 11) #xffffffffffffff4f r) (aref x 12) (logxor (aref x 12) #xffffffffffffff3f r) (aref x 13) (logxor (aref x 13) #xffffffffffffff2f r) (aref x 14) (logxor (aref x 14) #xffffffffffffff1f r) (aref x 15) (logxor (aref x 15) #xffffffffffffff0f r)) (groestl-column x y 15 0 2 4 10 15 1 3 5) (groestl-column x y 14 15 1 3 9 14 0 2 4) (groestl-column x y 13 14 0 2 8 13 15 1 3) (groestl-column x y 12 13 15 1 7 12 14 0 2) (groestl-column x y 11 12 14 0 6 11 13 15 1) (groestl-column x y 10 11 13 15 5 10 12 14 0) (groestl-column x y 9 10 12 14 4 9 11 13 15) (groestl-column x y 8 9 11 13 3 8 10 12 14) (groestl-column x y 7 8 10 12 2 7 9 11 13) (groestl-column x y 6 7 9 11 1 6 8 10 12) (groestl-column x y 5 6 8 10 0 5 7 9 11) (groestl-column x y 4 5 7 9 15 4 6 8 10) (groestl-column x y 3 4 6 8 14 3 5 7 9) (groestl-column x y 2 3 5 7 13 2 4 6 8) (groestl-column x y 1 2 4 6 12 1 3 5 7) (groestl-column x y 0 1 3 5 11 0 2 4 6) (values)) ;;; ;;; Compression ;;; (defun groestl-f512 (state input start) "The compression function (short variants)." (declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) state) (type (simple-array (unsigned-byte 8) (*)) input) (type (unsigned-byte 64) start) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((y (make-array #.+groestl-cols-512+ :element-type '(unsigned-byte 64))) (z (make-array #.+groestl-cols-512+ :element-type '(unsigned-byte 64))) (outq (make-array #.+groestl-cols-512+ :element-type '(unsigned-byte 64))) (inp (make-array #.+groestl-cols-512+ :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) y z outq inp) (dynamic-extent y z outq inp)) (dotimes (i +groestl-cols-512+) (declare (type (integer 0 #.+groestl-cols-512+) i)) (let ((n (ub64ref/be input (+ start (* 8 i))))) (declare (type (unsigned-byte 64) n)) (setf (aref z i) n (aref inp i) (logxor (aref state i) n)))) ;; Compute Q(m) (groestl-rnd512q z y 0) (loop for i from 1 below (1- +groestl-rounds-512+) by 2 do (groestl-rnd512q y z i) (groestl-rnd512q z y (1+ i))) (groestl-rnd512q y outq (1- +groestl-rounds-512+)) ;; Compute P(h + m) (groestl-rnd512p inp z 0) (loop for i of-type fixnum from 1 below (1- +groestl-rounds-512+) by 2 do (groestl-rnd512p z y (ash i 56)) (groestl-rnd512p y z (ash (1+ i) 56))) (groestl-rnd512p z y (ash (1- +groestl-rounds-512+) 56)) ;; h' = h + Q(m) + P(h + m) (dotimes (i +groestl-cols-512+) (declare (type (integer 0 #.+groestl-cols-512+) i)) (setf (aref state i) (logxor (aref state i) (aref outq i) (aref y i)))) (values))) (defun groestl-f1024 (state input start) "The compression function (long variants)." (declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) state) (type (simple-array (unsigned-byte 8) (*)) input) (type (unsigned-byte 64) start) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((y (make-array #.+groestl-cols-1024+ :element-type '(unsigned-byte 64))) (z (make-array #.+groestl-cols-1024+ :element-type '(unsigned-byte 64))) (outq (make-array #.+groestl-cols-1024+ :element-type '(unsigned-byte 64))) (inp (make-array #.+groestl-cols-1024+ :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) y z outq inp) (dynamic-extent y z outq inp)) (dotimes (i +groestl-cols-1024+) (declare (type (integer 0 #.+groestl-cols-1024+) i)) (let ((n (ub64ref/be input (+ start (* 8 i))))) (declare (type (unsigned-byte 64) n)) (setf (aref z i) n (aref inp i) (logxor (aref state i) n)))) ;; Compute Q(m) (groestl-rnd1024q z y 0) (loop for i from 1 below (1- +groestl-rounds-1024+) by 2 do (groestl-rnd1024q y z i) (groestl-rnd1024q z y (1+ i))) (groestl-rnd1024q y outq (1- +groestl-rounds-1024+)) ;; Compute P(h + m) (groestl-rnd1024p inp z 0) (loop for i of-type fixnum from 1 below (1- +groestl-rounds-1024+) by 2 do (groestl-rnd1024p z y (ash i 56)) (groestl-rnd1024p y z (ash (1+ i) 56))) (groestl-rnd1024p z y (ash (1- +groestl-rounds-1024+) 56)) ;; h' = h + Q(m) + P(h + m) (dotimes (i +groestl-cols-1024+) (declare (type (integer 0 #.+groestl-cols-1024+) i)) (setf (aref state i) (logxor (aref state i) (aref outq i) (aref y i)))) (values))) ;;; ;;; Digest structures and functions ;;; (defun groestl-make-initial-state (output-bit-length) (let ((state (make-array (if (<= output-bit-length 256) #.+groestl-cols-512+ #.+groestl-cols-1024+) :element-type '(unsigned-byte 64) :initial-element 0))) (setf (aref state (1- (length state))) output-bit-length) state)) (defstruct (groestl (:constructor %make-groestl-digest nil) (:copier nil)) (state (groestl-make-initial-state 512) :type (simple-array (unsigned-byte 64) (*))) (block-counter 0 :type (unsigned-byte 64)) (buffer (make-array #.+groestl-size-1024+ :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (*))) (buffer-index 0 :type (integer 0 #.+groestl-size-1024+))) (defstruct (groestl/384 (:include groestl) (:constructor %make-groestl/384-digest (&aux (state (groestl-make-initial-state 384)))) (:copier nil))) (defstruct (groestl/256 (:include groestl) (:constructor %make-groestl/256-digest (&aux (state (groestl-make-initial-state 256)) (buffer (make-array #.+groestl-size-512+ :element-type '(unsigned-byte 8))))))) (defstruct (groestl/224 (:include groestl) (:constructor %make-groestl/224-digest (&aux (state (groestl-make-initial-state 224)) (buffer (make-array #.+groestl-size-512+ :element-type '(unsigned-byte 8))))))) (defmethod reinitialize-instance ((state groestl) &rest initargs) (declare (ignore initargs)) (setf (groestl-state state) (etypecase state (groestl/224 (groestl-make-initial-state 224)) (groestl/256 (groestl-make-initial-state 256)) (groestl/384 (groestl-make-initial-state 384)) (groestl (groestl-make-initial-state 512))) (groestl-block-counter state) 0 (groestl-buffer-index state) 0) state) (defmethod copy-digest ((state groestl) &optional copy) (check-type copy (or null groestl)) (let ((copy (if copy copy (etypecase state (groestl/224 (%make-groestl/224-digest)) (groestl/256 (%make-groestl/256-digest)) (groestl/384 (%make-groestl/384-digest)) (groestl (%make-groestl-digest)))))) (declare (type groestl copy)) (replace (groestl-state copy) (groestl-state state)) (replace (groestl-buffer copy) (groestl-buffer state)) (setf (groestl-block-counter copy) (groestl-block-counter state) (groestl-buffer-index copy) (groestl-buffer-index state)) copy)) (defun groestl-update (state input start end) (declare (type (simple-array (unsigned-byte 8) (*)) input) (type (unsigned-byte 64) start end) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let* ((groestl-state (groestl-state state)) (buffer (groestl-buffer state)) (buffer-index (groestl-buffer-index state)) (block-counter (groestl-block-counter state)) (block-size (length buffer)) (transform (if (= block-size +groestl-size-512+) #'groestl-f512 #'groestl-f1024)) (length (- end start)) (n 0)) (declare (type (simple-array (unsigned-byte 64) (*)) groestl-state) (type (simple-array (unsigned-byte 8) (*)) buffer) (type (integer 0 #.+groestl-size-1024+) block-size buffer-index n) (type (unsigned-byte 64) length)) ;; Try to fill the buffer with the new data (setf n (min length (- block-size buffer-index))) (replace buffer input :start1 buffer-index :start2 start :end2 (+ start n)) (incf buffer-index n) (incf start n) (decf length n) ;; Process data in buffer (when (= buffer-index block-size) (funcall transform groestl-state buffer 0) (setf buffer-index 0) (incf block-counter)) ;; Process data in message (loop until (< length block-size) do (funcall transform groestl-state input start) (incf block-counter) (incf start block-size) (decf length block-size)) ;; Put remaining message data in buffer (when (plusp length) (replace buffer input :end1 length :start2 start) (setf buffer-index length)) ;; Save the new state (setf (groestl-block-counter state) block-counter (groestl-buffer-index state) buffer-index) (values))) (defun groestl-finalize (state digest digest-start) (let* ((digest-length (digest-length state)) (groestl-state (groestl-state state)) (buffer (groestl-buffer state)) (buffer-index (groestl-buffer-index state)) (block-counter (groestl-block-counter state)) (block-size (length buffer)) (transform (if (= block-size +groestl-size-512+) #'groestl-f512 #'groestl-f1024))) (declare (type (simple-array (unsigned-byte 64) (*)) groestl-state) (type (simple-array (unsigned-byte 8) (*)) buffer) (type (integer 0 #.+groestl-size-1024+) block-size buffer-index) (optimize (speed 3) (space 0) (safety 0) (debug 0))) ;; Pad with 0s (setf (aref buffer buffer-index) #x80) (incf buffer-index) (when (> buffer-index (- block-size +groestl-length-field-length+)) ;; Padding requires two blocks (fill buffer 0 :start buffer-index) (funcall transform groestl-state buffer 0) (incf block-counter) (setf buffer-index 0)) (fill buffer 0 :start buffer-index) (setf buffer-index (- block-size +groestl-length-field-length+)) ;; Length padding (incf block-counter) (setf (ub64ref/be buffer buffer-index) block-counter) (funcall transform groestl-state buffer 0) ;; Output transformation: h = P(h) + h (if (= block-size +groestl-size-512+) (let ((temp (copy-seq groestl-state)) (y (make-array +groestl-cols-512+ :element-type '(unsigned-byte 64))) (z (make-array +groestl-cols-512+ :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-512+)) temp y z) (dynamic-extent temp y z)) (groestl-rnd512p temp z 0) (loop for i from 1 below (1- +groestl-rounds-512+) by 2 do (groestl-rnd512p z y (ash i 56)) (groestl-rnd512p y z (ash (1+ i) 56))) (groestl-rnd512p z temp (ash (1- +groestl-rounds-512+) 56)) (dotimes (i +groestl-cols-512+) (setf (aref groestl-state i) (logxor (aref groestl-state i) (aref temp i))))) (let ((temp (copy-seq groestl-state)) (y (make-array +groestl-cols-1024+ :element-type '(unsigned-byte 64))) (z (make-array +groestl-cols-1024+ :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (#.+groestl-cols-1024+)) temp y z) (dynamic-extent temp y z)) (groestl-rnd1024p temp y 0) (loop for i from 1 below (1- +groestl-rounds-1024+) by 2 do (groestl-rnd1024p y z (ash i 56)) (groestl-rnd1024p z y (ash (1+ i) 56))) (groestl-rnd1024p y temp (ash (1- +groestl-rounds-1024+) 56)) (dotimes (i +groestl-cols-1024+) (setf (aref groestl-state i) (logxor (aref groestl-state i) (aref temp i)))))) ;; Truncate the final hash value to generate the message digest (let ((output (make-array block-size :element-type '(unsigned-byte 8)))) (dotimes (i (length groestl-state)) (setf (ub64ref/be output (* i 8)) (aref groestl-state i))) (replace digest output :start1 digest-start :start2 (- block-size digest-length)) digest))) (define-digest-updater groestl (groestl-update state sequence start end)) (define-digest-finalizer ((groestl 64) (groestl/384 48) (groestl/256 32) (groestl/224 28)) (groestl-finalize state digest digest-start)) (defdigest groestl :digest-length 64 :block-length 128) (defdigest groestl/384 :digest-length 48 :block-length 128) (defdigest groestl/256 :digest-length 32 :block-length 64) (defdigest groestl/224 :digest-length 28 :block-length 64) ironclad-0.57/src/digests/jh.lisp000066400000000000000000000532211420372057600167740ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; jh.lisp -- implementation of the JH hash function (in-package :crypto) ;;; ;;; Parameters ;;; (eval-when (:compile-toplevel :load-toplevel :execute) (defconstant +jh-rounds+ 42) (defconstant +jh-block-size+ 64) ;;; Initial hash values (defconst +jh224-h0+ (make-array 16 :element-type '(unsigned-byte 64) :initial-contents '(#xac989af962ddfe2d #xe734d619d6ac7cae #x161230bc051083a4 #x941466c9c63860b8 #x6f7080259f89d966 #xdc1a9b1d1ba39ece #x106e367b5f32e811 #xc106fa027f8594f9 #xb340c8d85c1b4f1b #x9980736e7fa1f697 #xd3a3eaada593dfdc #x689a53c9dee831a4 #xe4a186ec8aa9b422 #xf06ce59c95ac74d5 #xbf2babb5ea0d9615 #x6eea64ddf0dc1196))) (defconst +jh256-h0+ (make-array 16 :element-type '(unsigned-byte 64) :initial-contents '(#xebd3202c41a398eb #xc145b29c7bbecd92 #xfac7d4609151931c #x038a507ed6820026 #x45b92677269e23a4 #x77941ad4481afbe0 #x7a176b0226abb5cd #xa82fff0f4224f056 #x754d2e7f8996a371 #x62e27df70849141d #x948f2476f7957627 #x6c29804757b6d587 #x6c0d8eac2d275e5c #x0f7a0557c6508451 #xea12247067d3e47b #x69d71cd313abe389))) (defconst +jh384-h0+ (make-array 16 :element-type '(unsigned-byte 64) :initial-contents '(#x8a3913d8c63b1e48 #x9b87de4a895e3b6d #x2ead80d468eafa63 #x67820f4821cb2c33 #x28b982904dc8ae98 #x4942114130ea55d4 #xec474892b255f536 #xe13cf4ba930a25c7 #x4c45db278a7f9b56 #x0eaf976349bdfc9e #xcd80aa267dc29f58 #xda2eeb9d8c8bc080 #x3a37d5f8e881798a #x717ad1ddad6739f4 #x94d375a4bdd3b4a9 #x7f734298ba3f6c97))) (defconst +jh512-h0+ (make-array 16 :element-type '(unsigned-byte 64) :initial-contents '(#x17aa003e964bd16f #x43d5157a052e6a63 #x0bef970c8d5e228a #x61c3b3f2591234e9 #x1e806f53c1a01d89 #x806d2bea6b05a92a #xa6ba7520dbcc8e58 #xf73bf8ba763a0fa9 #x694ae34105e66901 #x5ae66f2e8e8ab546 #x243c84c1d0a74710 #x99c15a2db1716e3b #x56f8b19decf657cf #x56b116577c8806a7 #xfb1785e6dffcc2e3 #x4bdd8ccc78465a54))) ;;; Round constants (defconst +jh-round-constants+ (make-array 168 :element-type '(unsigned-byte 64) :initial-contents '(#x67f815dfa2ded572 #x571523b70a15847b #xf6875a4d90d6ab81 #x402bd1c3c54f9f4e #x9cfa455ce03a98ea #x9a99b26699d2c503 #x8a53bbf2b4960266 #x31a2db881a1456b5 #xdb0e199a5c5aa303 #x1044c1870ab23f40 #x1d959e848019051c #xdccde75eadeb336f #x416bbf029213ba10 #xd027bbf7156578dc #x5078aa3739812c0a #xd3910041d2bf1a3f #x907eccf60d5a2d42 #xce97c0929c9f62dd #xac442bc70ba75c18 #x23fcc663d665dfd1 #x1ab8e09e036c6e97 #xa8ec6c447e450521 #xfa618e5dbb03f1ee #x97818394b29796fd #x2f3003db37858e4a #x956a9ffb2d8d672a #x6c69b8f88173fe8a #x14427fc04672c78a #xc45ec7bd8f15f4c5 #x80bb118fa76f4475 #xbc88e4aeb775de52 #xf4a3a6981e00b882 #x1563a3a9338ff48e #x89f9b7d524565faa #xfde05a7c20edf1b6 #x362c42065ae9ca36 #x3d98fe4e433529ce #xa74b9a7374f93a53 #x86814e6f591ff5d0 #x9f5ad8af81ad9d0e #x6a6234ee670605a7 #x2717b96ebe280b8b #x3f1080c626077447 #x7b487ec66f7ea0e0 #xc0a4f84aa50a550d #x9ef18e979fe7e391 #xd48d605081727686 #x62b0e5f3415a9e7e #x7a205440ec1f9ffc #x84c9f4ce001ae4e3 #xd895fa9df594d74f #xa554c324117e2e55 #x286efebd2872df5b #xb2c4a50fe27ff578 #x2ed349eeef7c8905 #x7f5928eb85937e44 #x4a3124b337695f70 #x65e4d61df128865e #xe720b95104771bc7 #x8a87d423e843fe74 #xf2947692a3e8297d #xc1d9309b097acbdd #xe01bdc5bfb301b1d #xbf829cf24f4924da #xffbf70b431bae7a4 #x48bcf8de0544320d #x39d3bb5332fcae3b #xa08b29e0c1c39f45 #x0f09aef7fd05c9e5 #x34f1904212347094 #x95ed44e301b771a2 #x4a982f4f368e3be9 #x15f66ca0631d4088 #xffaf52874b44c147 #x30c60ae2f14abb7e #xe68c6eccc5b67046 #x00ca4fbd56a4d5a4 #xae183ec84b849dda #xadd1643045ce5773 #x67255c1468cea6e8 #x16e10ecbf28cdaa3 #x9a99949a5806e933 #x7b846fc220b2601f #x1885d1a07facced1 #xd319dd8da15b5932 #x46b4a5aac01c9a50 #xba6b04e467633d9f #x7eee560bab19caf6 #x742128a9ea79b11f #xee51363b35f7bde9 #x76d350755aac571d #x01707da3fec2463a #x42d8a498afc135f7 #x79676b9e20eced78 #xa8db3aea15638341 #x832c83324d3bc3fa #xf347271c1f3b40a7 #x9a762db734f04059 #xfd4f21d26c4e3ee7 #xef5957dc398dfdb8 #xdaeb492b490c9b8d #x0d70f36849d7a25b #x84558d7ad0ae3b7d #x658ef8e4f0e9a5f5 #x533b1036f4a2b8a0 #x5aec3e759e07a80c #x4f88e85692946891 #x4cbcbaf8555cb05b #x7b9487f3993bbbe3 #x5d1c6b72d6f4da75 #x6db334dc28acae64 #x71db28b850a5346c #x2a518d10f2e261f8 #xfc75dd593364dbe3 #xa23fce43f1bcac1c #xb043e8023cd1bb67 #x75a12988ca5b0a33 #x5c5316b44d19347f #x1e4d790ec3943b92 #x3fafeeb6d7757479 #x21391abef7d4a8ea #x5127234c097ef45c #xd23c32ba5324a326 #xadd5a66d4a17a344 #x08c9f2afa63e1db5 #x563c6b91983d5983 #x4d608672a17cf84c #xf6c76e08cc3ee246 #x5e76bcb1b333982f #x2ae6c4efa566d62b #x36d4c1bee8b6f406 #x6321efbc1582ee74 #x69c953f40d4ec1fd #x26585806c45a7da7 #x16fae0061614c17e #x3f9d63283daf907e #x0cd29b00e3f2c9d2 #x300cd4b730ceaa5f #x9832e0f216512a74 #x9af8cee3d830eb0d #x9279f1b57b9ec54b #xd36886046ee651ff #x316796e6574d239b #x05750a17f3a6e6cc #xce6c3213d98176b1 #x62a205f88452173c #x47154778b3cb2bf4 #x486a9323825446ff #x65655e4e0758df38 #x8e5086fc897cfcf2 #x86ca0bd0442e7031 #x4e477830a20940f0 #x8338f7d139eea065 #xbd3a2ce437e95ef7 #x6ff8130126b29721 #xe7de9fefd1ed44a3 #xd992257615dfa08b #xbe42dc12f6f7853c #x7eb027ab7ceca7d8 #xdea83eaada7d8d53 #xd86902bd93ce25aa #xf908731afd43f65a #xa5194a17daef5fc0 #x6a21fd4c33664d97 #x701541db3198b435 #x9b54cdedbb0f1eea #x72409751a163d09a #xe26f4791bf9d75f6)))) ;;; ;;; Transformations ;;; (defmacro jh-swap-1 (x) "Swapping bit 2i with bit 2i+1 of 64-bit X." `(setf ,x (logior (ash (logand ,x #x5555555555555555) 1) (ash (logand ,x #xaaaaaaaaaaaaaaaa) -1)))) (defmacro jh-swap-2 (x) "Swapping bits 4i||4i+1 with bits 4i+2||4i+3 of 64-bit X." `(setf ,x (logior (ash (logand ,x #x3333333333333333) 2) (ash (logand ,x #xcccccccccccccccc) -2)))) (defmacro jh-swap-4 (x) "Swapping bits 8i||8i+1||8i+2||8i+3 with bits 8i+4||8i+5||8i+6||8i+7 of 64-bit X." `(setf ,x (logior (ash (logand ,x #x0f0f0f0f0f0f0f0f) 4) (ash (logand ,x #xf0f0f0f0f0f0f0f0) -4)))) (defmacro jh-swap-8 (x) "Swapping bits 16i||16i+1||......||16i+7 with bits 16i+8||16i+9||......||16i+15 of 64-bit X." `(setf ,x (logior (ash (logand ,x #x00ff00ff00ff00ff) 8) (ash (logand ,x #xff00ff00ff00ff00) -8)))) (defmacro jh-swap-16 (x) "Swapping bits 32i||32i+1||......||32i+15 with bits 32i+16||32i+17||......||32i+31 of 64-bit X." `(setf ,x (logior (ash (logand ,x #x0000ffff0000ffff) 16) (ash (logand ,x #xffff0000ffff0000) -16)))) (defmacro jh-swap-32 (x) "Swapping bits 64i||64i+1||......||64i+31 with bits 64i+32||64i+33||......||64i+63 of 64-bit X." `(setf ,x (logior (ash (logand ,x #x00000000ffffffff) 32) (ash (logand ,x #xffffffff00000000) -32)))) (defmacro jh-l (m0 m1 m2 m3 m4 m5 m6 m7) "The MDS transform." `(setf ,m4 (logxor ,m4 ,m1) ,m5 (logxor ,m5 ,m2) ,m6 (logxor ,m6 (logxor ,m0 ,m3)) ,m7 (logxor ,m7 ,m0) ,m0 (logxor ,m0 ,m5) ,m1 (logxor ,m1 ,m6) ,m2 (logxor ,m2 (logxor ,m4 ,m7)) ,m3 (logxor ,m3 ,m4))) (defmacro jh-ss (m0 m1 m2 m3 m4 m5 m6 m7 cc0 cc1 t0 t1) "The S-boxes." `(setf ,m3 (mod64lognot ,m3) ,m7 (mod64lognot ,m7) ,m0 (logxor ,m0 (logand (mod64lognot ,m2) ,cc0)) ,m4 (logxor ,m4 (logand (mod64lognot ,m6) ,cc1)) ,t0 (logxor ,cc0 (logand ,m0 ,m1)) ,t1 (logxor ,cc1 (logand ,m4 ,m5)) ,m0 (logxor ,m0 (logand ,m2 ,m3)) ,m4 (logxor ,m4 (logand ,m6 ,m7)) ,m3 (logxor ,m3 (logand (mod64lognot ,m1) ,m2)) ,m7 (logxor ,m7 (logand (mod64lognot ,m5) ,m6)) ,m1 (logxor ,m1 (logand ,m0 ,m2)) ,m5 (logxor ,m5 (logand ,m4 ,m6)) ,m2 (logxor ,m2 (logand ,m0 (mod64lognot ,m3))) ,m6 (logxor ,m6 (logand ,m4 (mod64lognot ,m7))) ,m0 (logxor ,m0 (logior ,m1 ,m3)) ,m4 (logxor ,m4 (logior ,m5 ,m7)) ,m3 (logxor ,m3 (logand ,m1 ,m2)) ,m7 (logxor ,m7 (logand ,m5 ,m6)) ,m1 (logxor ,m1 (logand ,t0 ,m0)) ,m5 (logxor ,m5 (logand ,t1 ,m4)) ,m2 (logxor ,m2 ,t0) ,m6 (logxor ,m6 ,t1))) ;;; ;;; Rounds ;;; (declaim (ftype (function ((simple-array (unsigned-byte 64) (16)))) jh-e8)) (defun jh-e8 (s) "The bijective function." (declare (type (simple-array (unsigned-byte 64) (16)) s) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((constants (load-time-value +jh-round-constants+ t)) (v0 (aref s 0)) (v1 (aref s 1)) (v2 (aref s 2)) (v3 (aref s 3)) (v4 (aref s 4)) (v5 (aref s 5)) (v6 (aref s 6)) (v7 (aref s 7)) (v8 (aref s 8)) (v9 (aref s 9)) (v10 (aref s 10)) (v11 (aref s 11)) (v12 (aref s 12)) (v13 (aref s 13)) (v14 (aref s 14)) (v15 (aref s 15)) (t0 0) (t1 0)) (declare (type (simple-array (unsigned-byte 64) (168)) constants) (type (unsigned-byte 64) v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 t0 t1)) (do ((round 0 (+ round 7))) ((= round +jh-rounds+)) (declare (type (integer 0 42) round)) (macrolet ((constant (i j) `(aref constants (+ (* 4 ,i) ,j))) (sub-round (i) (let ((swap (ecase i ((0) 'jh-swap-1) ((1) 'jh-swap-2) ((2) 'jh-swap-4) ((3) 'jh-swap-8) ((4) 'jh-swap-16) ((5) 'jh-swap-32) ((6) nil)))) `(progn (jh-ss v0 v4 v8 v12 v2 v6 v10 v14 (constant (+ round ,i) 0) (constant (+ round ,i) 2) t0 t1) (jh-l v0 v4 v8 v12 v2 v6 v10 v14) ,(when swap `(,swap v2)) ,(when swap `(,swap v6)) ,(when swap `(,swap v10)) ,(when swap `(,swap v14)) (jh-ss v1 v5 v9 v13 v3 v7 v11 v15 (constant (+ round ,i) 1) (constant (+ round ,i) 3) t0 t1) (jh-l v1 v5 v9 v13 v3 v7 v11 v15) ,(when swap `(,swap v3)) ,(when swap `(,swap v7)) ,(when swap `(,swap v11)) ,(when swap `(,swap v15)))))) ;; Round 7*roundnumber+0: S-box, MDS and swapping layers (sub-round 0) ;; Round 7*roundnumber+1: S-box, MDS and swapping layers (sub-round 1) ;; Round 7*roundnumber+2: S-box, MDS and swapping layers (sub-round 2) ;; Round 7*roundnumber+3: S-box, MDS and swapping layers (sub-round 3) ;; Round 7*roundnumber+4: S-box, MDS and swapping layers (sub-round 4) ;; Round 7*roundnumber+5: S-box, MDS and swapping layers (sub-round 5) ;; Round 7*roundnumber+6: S-box and MDS layers (sub-round 6) ;; Round 7*roundnumber+6: swapping layer (rotatef v2 v3) (rotatef v6 v7) (rotatef v10 v11) (rotatef v14 v15))) ;; Save the new state (setf (aref s 0) v0 (aref s 1) v1 (aref s 2) v2 (aref s 3) v3 (aref s 4) v4 (aref s 5) v5 (aref s 6) v6 (aref s 7) v7 (aref s 8) v8 (aref s 9) v9 (aref s 10) v10 (aref s 11) v11 (aref s 12) v12 (aref s 13) v13 (aref s 14) v14 (aref s 15) v15) (values))) (defun jh-f8 (state) "The compression function." (declare (notinline jh-buffer jh-state)) (let ((s (jh-state state)) (buffer (jh-buffer state)) (b (make-array 8 :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (16)) s) (type (simple-array (unsigned-byte 8) (64)) buffer) (type (simple-array (unsigned-byte 64) (8)) b) (dynamic-extent b)) ;; Get input data as 64-bit little-endian integers (dotimes (i 8) (setf (aref b i) (ub64ref/le buffer (* 8 i)))) ;; Xor the 512-bit message with the fist half of the 1024-bit hash state (dotimes (i 8) (setf (aref s i) (logxor (aref s i) (aref b i)))) ;; Apply the bijective function E8 (jh-e8 s) ;; Xor the 512-bit message with the second half of the 1024-bit hash state (dotimes (i 8) (setf (aref s (+ i 8)) (logxor (aref s (+ i 8)) (aref b i)))) (values))) ;;; ;;; Digest structures and functions ;;; (defstruct (jh (:constructor %make-jh-digest nil) (:copier nil)) (state (copy-seq +jh512-h0+) :type (simple-array (unsigned-byte 64) (16))) (data-length 0 :type (unsigned-byte 64)) (buffer (make-array 64 :element-type '(unsigned-byte 8) :initial-element 0) :type (simple-array (unsigned-byte 8) (64))) (buffer-index 0 :type (integer 0 64))) (defstruct (jh/384 (:include jh) (:constructor %make-jh/384-digest (&aux (state (copy-seq +jh384-h0+)))) (:copier nil))) (defstruct (jh/256 (:include jh) (:constructor %make-jh/256-digest (&aux (state (copy-seq +jh256-h0+)))) (:copier nil))) (defstruct (jh/224 (:include jh) (:constructor %make-jh/224-digest (&aux (state (copy-seq +jh224-h0+)))) (:copier nil))) (defmethod reinitialize-instance ((state jh) &rest initargs) (declare (ignore initargs)) (setf (jh-state state) (etypecase state (jh/224 (copy-seq +jh224-h0+)) (jh/256 (copy-seq +jh256-h0+)) (jh/384 (copy-seq +jh384-h0+)) (jh (copy-seq +jh512-h0+))) (jh-data-length state) 0 (jh-buffer-index state) 0) state) (defmethod copy-digest ((state jh) &optional copy) (check-type copy (or null jh)) (let ((copy (if copy copy (etypecase state (jh/224 (%make-jh/224-digest)) (jh/256 (%make-jh/256-digest)) (jh/384 (%make-jh/384-digest)) (jh (%make-jh-digest)))))) (declare (type jh copy)) (replace (jh-state copy) (jh-state state)) (replace (jh-buffer copy) (jh-buffer state)) (setf (jh-data-length copy) (jh-data-length state) (jh-buffer-index copy) (jh-buffer-index state)) copy)) (defun jh-update (state input start end) (declare (type (simple-array (unsigned-byte 8) (*)) input) (type (unsigned-byte 64) start end)) (let ((data-length (jh-data-length state)) (buffer (jh-buffer state)) (buffer-index (jh-buffer-index state)) (length (- end start)) (n 0)) (declare (type (simple-array (unsigned-byte 8) (64)) buffer) (type (unsigned-byte 64) data-length length) (type (integer 0 64) buffer-index n)) ;; Try to fill the buffer with the new data (setf n (min length (- +jh-block-size+ buffer-index))) (replace buffer input :start1 buffer-index :start2 start :end2 (+ start n)) (incf data-length n) (incf buffer-index n) (incf start n) (decf length n) ;; Process data in buffer (when (= buffer-index +jh-block-size+) (jh-f8 state) (setf buffer-index 0)) ;; Process data in message (loop until (< length +jh-block-size+) do (replace buffer input :start2 start) (jh-f8 state) (incf data-length +jh-block-size+) (incf start +jh-block-size+) (decf length +jh-block-size+)) ;; Put remaining message data in buffer (when (plusp length) (replace buffer input :end1 length :start2 start) (incf data-length length) (incf buffer-index length)) ;; Save the new state (setf (jh-data-length state) data-length (jh-buffer-index state) buffer-index) (values))) (defun jh-finalize (state digest digest-start) (let ((digest-length (digest-length state)) (jh-state (jh-state state)) (data-length (jh-data-length state)) (buffer (jh-buffer state)) (buffer-index (jh-buffer-index state))) (declare (type (simple-array (unsigned-byte 64) (16)) jh-state) (type (simple-array (unsigned-byte 8) (64)) buffer) (type (unsigned-byte 64) data-length) (type (integer 0 64) buffer-index)) ;; Set the rest of the bytes in the buffer to 0 (fill buffer 0 :start buffer-index) ;; Pad and process the partial block (if (zerop buffer-index) (progn (setf (aref buffer buffer-index) #x80) (setf (ub64ref/be buffer 56) (* data-length 8)) (jh-f8 state)) (progn (setf (aref buffer buffer-index) #x80) (jh-f8 state) (fill buffer 0) (setf (ub64ref/be buffer 56) (* data-length 8)) (jh-f8 state))) ;; Truncate the final hash value to generate the message digest (let ((output (make-array +jh-block-size+ :element-type '(unsigned-byte 8)))) (dotimes (i 8) (setf (ub64ref/le output (* i 8)) (aref jh-state (+ i 8)))) (replace digest output :start1 digest-start :start2 (- +jh-block-size+ digest-length)) digest))) (define-digest-updater jh (jh-update state sequence start end)) (define-digest-finalizer ((jh 64) (jh/384 48) (jh/256 32) (jh/224 28)) (jh-finalize state digest digest-start)) (defdigest jh :digest-length 64 :block-length 64) (defdigest jh/384 :digest-length 48 :block-length 64) (defdigest jh/256 :digest-length 32 :block-length 64) (defdigest jh/224 :digest-length 28 :block-length 64) ironclad-0.57/src/digests/kupyna.lisp000066400000000000000000000350251420372057600177040ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; kupyna.lisp -- implementation of the Kupyna hash functions (DSTU 7564:2014) (in-package :crypto) ;;; ;;; Constants ;;; (eval-when (:compile-toplevel :load-toplevel :execute) (defconst +kupyna-t+ +kalyna-t+)) (declaim (type (simple-array (unsigned-byte 64) (8 256)) +kupyna-t+)) ;;; ;;; Rounds for 256-bit output ;;; (declaim (inline kupyna-g256)) (defun kupyna-g256 (x y) (declare (type (simple-array (unsigned-byte 64) (*)) x y) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kupyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y 0) (logxor (m 0 0 0) (m 1 7 -8) (m 2 6 -16) (m 3 5 -24) (m 4 4 -32) (m 5 3 -40) (m 6 2 -48) (m 7 1 -56))) (setf (aref y 1) (logxor (m 0 1 0) (m 1 0 -8) (m 2 7 -16) (m 3 6 -24) (m 4 5 -32) (m 5 4 -40) (m 6 3 -48) (m 7 2 -56))) (setf (aref y 2) (logxor (m 0 2 0) (m 1 1 -8) (m 2 0 -16) (m 3 7 -24) (m 4 6 -32) (m 5 5 -40) (m 6 4 -48) (m 7 3 -56))) (setf (aref y 3) (logxor (m 0 3 0) (m 1 2 -8) (m 2 1 -16) (m 3 0 -24) (m 4 7 -32) (m 5 6 -40) (m 6 5 -48) (m 7 4 -56))) (setf (aref y 4) (logxor (m 0 4 0) (m 1 3 -8) (m 2 2 -16) (m 3 1 -24) (m 4 0 -32) (m 5 7 -40) (m 6 6 -48) (m 7 5 -56))) (setf (aref y 5) (logxor (m 0 5 0) (m 1 4 -8) (m 2 3 -16) (m 3 2 -24) (m 4 1 -32) (m 5 0 -40) (m 6 7 -48) (m 7 6 -56))) (setf (aref y 6) (logxor (m 0 6 0) (m 1 5 -8) (m 2 4 -16) (m 3 3 -24) (m 4 2 -32) (m 5 1 -40) (m 6 0 -48) (m 7 7 -56))) (setf (aref y 7) (logxor (m 0 7 0) (m 1 6 -8) (m 2 5 -16) (m 3 4 -24) (m 4 3 -32) (m 5 2 -40) (m 6 1 -48) (m 7 0 -56)))) (values)) (declaim (inline kupyna-round-p256)) (defun kupyna-round-p256 (x y n) (declare (type (simple-array (unsigned-byte 64) (*)) x y) (type (unsigned-byte 64) n) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (dotimes-unrolled (i 8) (setf (aref x i) (logxor (aref x i) (mod64ash i 4) n))) (kupyna-g256 x y) (values)) (declaim (inline kupyna-round-q256)) (defun kupyna-round-q256 (x y n) (declare (type (simple-array (unsigned-byte 64) (*)) x y) (type (unsigned-byte 64) n) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (dotimes-unrolled (i 8) (setf (aref x i) (mod64+ (aref x i) (logxor #x00F0F0F0F0F0F0F3 (mod64ash (logxor (mod64* (- 7 i) #x10) (logand n #xff)) 56))))) (kupyna-g256 x y) (values)) (defun kupyna-output-transform256 (h) (declare (type (simple-array (unsigned-byte 64) (*)) h) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (let ((t1 (make-array 8 :element-type '(unsigned-byte 64))) (t2 (make-array 8 :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (8)) t1 t2) (dynamic-extent t1 t2)) (replace t1 h) (loop for r from 0 below 10 by 2 do (kupyna-round-p256 t1 t2 r) (kupyna-round-p256 t2 t1 (1+ r))) (dotimes (i 8) (setf (aref h i) (logxor (aref h i) (aref t1 i))))) (values)) (defun kupyna-transform256 (h m start) (declare (type (simple-array (unsigned-byte 64) (16)) h) (type (simple-array (unsigned-byte 8) (*)) m) (type index start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (let ((ap1 (make-array 8 :element-type '(unsigned-byte 64))) (aq1 (make-array 8 :element-type '(unsigned-byte 64))) (ap2 (make-array 8 :element-type '(unsigned-byte 64))) (aq2 (make-array 8 :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (8)) ap1 aq1 ap2 aq2) (dynamic-extent ap1 aq1 ap2 aq2)) (dotimes (i 8) (setf (aref aq1 i) (ub64ref/le m (+ start (* 8 i))) (aref ap1 i) (logxor (aref h i) (aref aq1 i)))) (loop for r from 0 below 10 by 2 do (kupyna-round-p256 ap1 ap2 r) (kupyna-round-p256 ap2 ap1 (1+ r)) (kupyna-round-q256 aq1 aq2 r) (kupyna-round-q256 aq2 aq1 (1+ r))) (dotimes (i 8) (setf (aref h i) (logxor (aref h i) (aref ap1 i) (aref aq1 i))))) (values)) ;;; ;;; Rounds for 512-bit output ;;; (declaim (inline kupyna-g512)) (defun kupyna-g512 (x y) (declare (type (simple-array (unsigned-byte 64) (*)) x y) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (macrolet ((m (a b c) `(aref +kupyna-t+ ,a (logand (mod64ash (aref x ,b) ,c) #xff)))) (setf (aref y 0) (logxor (m 0 0 0) (m 1 15 -8) (m 2 14 -16) (m 3 13 -24) (m 4 12 -32) (m 5 11 -40) (m 6 10 -48) (m 7 5 -56))) (setf (aref y 1) (logxor (m 0 1 0) (m 1 0 -8) (m 2 15 -16) (m 3 14 -24) (m 4 13 -32) (m 5 12 -40) (m 6 11 -48) (m 7 6 -56))) (setf (aref y 2) (logxor (m 0 2 0) (m 1 1 -8) (m 2 0 -16) (m 3 15 -24) (m 4 14 -32) (m 5 13 -40) (m 6 12 -48) (m 7 7 -56))) (setf (aref y 3) (logxor (m 0 3 0) (m 1 2 -8) (m 2 1 -16) (m 3 0 -24) (m 4 15 -32) (m 5 14 -40) (m 6 13 -48) (m 7 8 -56))) (setf (aref y 4) (logxor (m 0 4 0) (m 1 3 -8) (m 2 2 -16) (m 3 1 -24) (m 4 0 -32) (m 5 15 -40) (m 6 14 -48) (m 7 9 -56))) (setf (aref y 5) (logxor (m 0 5 0) (m 1 4 -8) (m 2 3 -16) (m 3 2 -24) (m 4 1 -32) (m 5 0 -40) (m 6 15 -48) (m 7 10 -56))) (setf (aref y 6) (logxor (m 0 6 0) (m 1 5 -8) (m 2 4 -16) (m 3 3 -24) (m 4 2 -32) (m 5 1 -40) (m 6 0 -48) (m 7 11 -56))) (setf (aref y 7) (logxor (m 0 7 0) (m 1 6 -8) (m 2 5 -16) (m 3 4 -24) (m 4 3 -32) (m 5 2 -40) (m 6 1 -48) (m 7 12 -56))) (setf (aref y 8) (logxor (m 0 8 0) (m 1 7 -8) (m 2 6 -16) (m 3 5 -24) (m 4 4 -32) (m 5 3 -40) (m 6 2 -48) (m 7 13 -56))) (setf (aref y 9) (logxor (m 0 9 0) (m 1 8 -8) (m 2 7 -16) (m 3 6 -24) (m 4 5 -32) (m 5 4 -40) (m 6 3 -48) (m 7 14 -56))) (setf (aref y 10) (logxor (m 0 10 0) (m 1 9 -8) (m 2 8 -16) (m 3 7 -24) (m 4 6 -32) (m 5 5 -40) (m 6 4 -48) (m 7 15 -56))) (setf (aref y 11) (logxor (m 0 11 0) (m 1 10 -8) (m 2 9 -16) (m 3 8 -24) (m 4 7 -32) (m 5 6 -40) (m 6 5 -48) (m 7 0 -56))) (setf (aref y 12) (logxor (m 0 12 0) (m 1 11 -8) (m 2 10 -16) (m 3 9 -24) (m 4 8 -32) (m 5 7 -40) (m 6 6 -48) (m 7 1 -56))) (setf (aref y 13) (logxor (m 0 13 0) (m 1 12 -8) (m 2 11 -16) (m 3 10 -24) (m 4 9 -32) (m 5 8 -40) (m 6 7 -48) (m 7 2 -56))) (setf (aref y 14) (logxor (m 0 14 0) (m 1 13 -8) (m 2 12 -16) (m 3 11 -24) (m 4 10 -32) (m 5 9 -40) (m 6 8 -48) (m 7 3 -56))) (setf (aref y 15) (logxor (m 0 15 0) (m 1 14 -8) (m 2 13 -16) (m 3 12 -24) (m 4 11 -32) (m 5 10 -40) (m 6 9 -48) (m 7 4 -56)))) (values)) (declaim (inline kupyna-round-p512)) (defun kupyna-round-p512 (x y n) (declare (type (simple-array (unsigned-byte 64) (*)) x y) (type (unsigned-byte 64) n) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (dotimes-unrolled (i 16) (setf (aref x i) (logxor (aref x i) (mod64ash i 4) n))) (kupyna-g512 x y) (values)) (declaim (inline kupyna-round-q512)) (defun kupyna-round-q512 (x y n) (declare (type (simple-array (unsigned-byte 64) (*)) x y) (type (unsigned-byte 64) n) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (dotimes-unrolled (i 16) (setf (aref x i) (mod64+ (aref x i) (logxor #x00F0F0F0F0F0F0F3 (mod64ash (logxor (mod64* (- 15 i) #x10) (logand n #xff)) 56))))) (kupyna-g512 x y) (values)) (defun kupyna-output-transform512 (h) (declare (type (simple-array (unsigned-byte 64) (*)) h) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (let ((t1 (make-array 16 :element-type '(unsigned-byte 64))) (t2 (make-array 16 :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (16)) t1 t2) (dynamic-extent t1 t2)) (replace t1 h) (loop for r from 0 below 14 by 2 do (kupyna-round-p512 t1 t2 r) (kupyna-round-p512 t2 t1 (1+ r))) (dotimes (i 16) (setf (aref h i) (logxor (aref h i) (aref t1 i))))) (values)) (defun kupyna-transform512 (h m start) (declare (type (simple-array (unsigned-byte 64) (16)) h) (type (simple-array (unsigned-byte 8) (*)) m) (type index start) (optimize (speed 3) (space 0) (debug 0) (safety 0))) (let ((ap1 (make-array 16 :element-type '(unsigned-byte 64))) (aq1 (make-array 16 :element-type '(unsigned-byte 64))) (ap2 (make-array 16 :element-type '(unsigned-byte 64))) (aq2 (make-array 16 :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 64) (16)) ap1 aq1 ap2 aq2) (dynamic-extent ap1 aq1 ap2 aq2)) (dotimes (i 16) (setf (aref aq1 i) (ub64ref/le m (+ start (* 8 i))) (aref ap1 i) (logxor (aref h i) (aref aq1 i)))) (loop for r from 0 below 14 by 2 do (kupyna-round-p512 ap1 ap2 r) (kupyna-round-p512 ap2 ap1 (1+ r)) (kupyna-round-q512 aq1 aq2 r) (kupyna-round-q512 aq2 aq1 (1+ r))) (dotimes (i 16) (setf (aref h i) (logxor (aref h i) (aref ap1 i) (aref aq1 i))))) (values)) ;;; ;;; Digest structures and functions ;;; (defstruct (kupyna (:constructor %make-kupyna-digest nil) (:copier nil)) (buffer (make-array 128 :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (128))) (buffer-index 0 :type (integer 0 128)) (h (make-array 16 :element-type '(unsigned-byte 64) :initial-contents '(128 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)) :type (simple-array (unsigned-byte 64) (16))) (total 0 :type (unsigned-byte 64))) (defstruct (kupyna/256 (:include kupyna) (:constructor %make-kupyna/256-digest (&aux (h (make-array 16 :element-type '(unsigned-byte 64) :initial-contents '(64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))))) (:copier nil))) (defmethod reinitialize-instance ((state kupyna) &rest initargs) (declare (ignore initargs)) (setf (kupyna-buffer-index state) 0) (setf (aref (kupyna-h state) 0) (etypecase state (kupyna/256 64) (kupyna 128))) (fill (kupyna-h state) 0 :start 1) (setf (kupyna-total state) 0) state) (defmethod copy-digest ((state kupyna) &optional copy) (check-type copy (or null kupyna)) (let ((copy (if copy copy (etypecase state (kupyna/256 (%make-kupyna/256-digest)) (kupyna (%make-kupyna-digest)))))) (declare (type kupyna copy)) (replace (kupyna-buffer copy) (kupyna-buffer state)) (setf (kupyna-buffer-index copy) (kupyna-buffer-index state)) (replace (kupyna-h copy) (kupyna-h state)) (setf (kupyna-total copy) (kupyna-total state)) copy)) (define-digest-updater kupyna (let ((block-length (block-length state)) (buffer (kupyna-buffer state)) (buffer-index (kupyna-buffer-index state)) (h (kupyna-h state)) (total (kupyna-total state)) (length (- end start)) (n 0)) (declare (type (simple-array (unsigned-byte 8) (128)) buffer) (type (integer 0 128) block-length buffer-index n) (type (simple-array (unsigned-byte 64) (16)) h) (type (unsigned-byte 64) total) (type index length)) (when (plusp buffer-index) (setf n (min length (- block-length buffer-index))) (replace buffer sequence :start1 buffer-index :start2 start :end2 (+ start n)) (incf buffer-index n) (incf start n) (decf length n) (when (= buffer-index block-length) (ecase block-length (64 (kupyna-transform256 h buffer 0)) (128 (kupyna-transform512 h buffer 0))) (incf total (* 8 block-length)) (setf buffer-index 0))) (ecase block-length (64 (loop until (< length 64) do (kupyna-transform256 h sequence start) (incf total 512) (incf start 64) (decf length 64))) (128 (loop until (< length 128) do (kupyna-transform512 h sequence start) (incf total 1024) (incf start 128) (decf length 128)))) (when (plusp length) (replace buffer sequence :start2 start :end2 end) (setf buffer-index length)) (setf (kupyna-buffer-index state) buffer-index) (setf (kupyna-total state) total) (values))) (define-digest-finalizer ((kupyna 64) (kupyna/256 32)) (let ((block-length (block-length state)) (digest-length (digest-length state)) (buffer (kupyna-buffer state)) (buffer-index (kupyna-buffer-index state)) (h (kupyna-h state)) (total (kupyna-total state))) (incf total (* 8 buffer-index)) (setf (aref buffer buffer-index) #x80) (incf buffer-index) (when (> (+ buffer-index 12) block-length) (fill buffer 0 :start buffer-index) (ecase block-length (64 (kupyna-transform256 h buffer 0)) (128 (kupyna-transform512 h buffer 0))) (setf buffer-index 0)) (fill buffer 0 :start buffer-index) (setf (ub64ref/le buffer (- block-length 12)) total) (ecase block-length (64 (kupyna-transform256 h buffer 0) (kupyna-output-transform256 h)) (128 (kupyna-transform512 h buffer 0) (kupyna-output-transform512 h))) (let ((output (make-array 128 :element-type '(unsigned-byte 8)))) (dotimes (i 16) (setf (ub64ref/le output (* 8 i)) (aref h i))) (replace digest output :start1 digest-start :start2 (- block-length digest-length) :end2 block-length) digest))) (defdigest kupyna :digest-length 64 :block-length 128) (defdigest kupyna/256 :digest-length 32 :block-length 64) ironclad-0.57/src/digests/md2.lisp000066400000000000000000000123611420372057600170550ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; md2.lisp -- the MD2 message digest algorithm from RFC 1319 (in-package :crypto) (in-ironclad-readtable) (defconst +md2-permutation+ #8@(41 46 67 201 162 216 124 1 61 54 84 161 236 240 6 19 98 167 5 243 192 199 115 140 152 147 43 217 188 76 130 202 30 155 87 60 253 212 224 22 103 66 111 24 138 23 229 18 190 78 196 214 218 158 222 73 160 251 245 142 187 47 238 122 169 104 121 145 21 178 7 63 148 194 16 137 11 34 95 33 128 127 93 154 90 144 50 39 53 62 204 231 191 247 151 3 255 25 48 179 72 165 181 209 215 94 146 42 172 86 170 198 79 184 56 210 150 164 125 182 118 252 107 226 156 116 4 241 69 157 112 89 100 113 135 32 134 91 207 101 230 45 168 2 27 96 37 173 174 176 185 246 28 70 97 105 52 64 126 15 85 71 163 35 221 81 175 58 195 92 249 206 186 197 234 38 44 83 13 110 133 40 132 9 211 223 205 244 65 129 77 82 106 220 55 200 108 193 171 250 36 225 123 8 12 189 177 74 120 136 149 139 227 99 232 109 233 203 213 254 59 0 29 57 242 239 183 14 102 88 208 228 166 119 114 248 235 117 75 10 49 68 80 180 143 237 31 26 219 153 141 51 159 17 131 20)) (eval-when (:compile-toplevel) (defmacro stateref (regs i) `(aref ,regs (+ ,i 0))) (defmacro blockref (regs i) `(aref ,regs (+ ,i 16))) (defmacro workref (regs i) `(aref ,regs (+ ,i 32))) ) ; EVAL-WHEN (defun update-md2-regs (regs buffer offset checksum) (declare (type (simple-array (unsigned-byte 8) (48)) regs) (type (simple-array (unsigned-byte 8) (16)) checksum) (type simple-octet-vector buffer) #.(burn-baby-burn)) (let ((x 0)) (declare (type (unsigned-byte 8) x)) ;; save original input and prepare encryption block (dotimes (i 16) (setf (workref regs i) (logxor (stateref regs i) (aref buffer (+ i offset))) (blockref regs i) (aref buffer (+ i offset)))) ;; encrypt block (dotimes (i 18) (dotimes (j 48) (setf x (logxor (aref +md2-permutation+ x) (aref regs j)) (aref regs j) x)) (setf x (mod (+ x i) 256))) ;; update checksum (setf x (aref checksum 15)) (dotimes (i 16) (setf x (logxor (aref checksum i) (aref +md2-permutation+ (logxor (aref buffer (+ i offset)) x))) (aref checksum i) x)))) (declaim (inline md2regs-digest)) (defun md2regs-digest (regs buffer start) (declare (type (simple-array (unsigned-byte 8) (48)) regs) #.(burn-baby-burn)) (flet ((stuff-registers (buffer start) (declare (type (simple-array (unsigned-byte 8) (*)) buffer)) (dotimes (i 16 buffer) (setf (aref buffer (+ start i)) (stateref regs i))))) (declare (inline stuff-registers)) (cond (buffer (stuff-registers buffer start)) (t (stuff-registers (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0) 0))))) (defstruct (md2 (:constructor %make-md2-digest (&aux (buffer (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0)))) (:constructor %make-md2-state (regs checksum buffer buffer-index)) (:copier nil) (:include mdx)) (regs (make-array 48 :element-type '(unsigned-byte 8) :initial-element 0) :type (simple-array (unsigned-byte 8) (48)) :read-only t) (checksum (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0) :type (simple-array (unsigned-byte 8) (16)) :read-only t)) (defmethod reinitialize-instance ((state md2) &rest initargs) (declare (ignore initargs)) (fill (md2-regs state) 0) (fill (md2-checksum state) 0) (setf (md2-buffer-index state) 0) state) (defmethod copy-digest ((state md2) &optional copy) (check-type copy (or null md2)) (cond (copy (replace (md2-regs copy) (md2-regs state)) (replace (md2-checksum copy) (md2-checksum state)) (replace (md2-buffer copy) (md2-buffer state)) (setf (md2-buffer-index copy) (md2-buffer-index state)) copy) (t (%make-md2-state (copy-seq (md2-regs state)) (copy-seq (md2-checksum state)) (copy-seq (md2-buffer state)) (md2-buffer-index state))))) (define-digest-updater md2 (flet ((compress (state sequence offset) (update-md2-regs (md2-regs state) sequence offset (md2-checksum state)))) (declare (dynamic-extent #'compress)) (declare (notinline mdx-updater)) (mdx-updater state #'compress sequence start end))) (define-digest-finalizer (md2 16) (let* ((regs (md2-regs state)) (checksum (md2-checksum state)) (buffer (md2-buffer state)) (buffer-index (md2-buffer-index state)) (pad-amount (- 16 buffer-index))) ;; pad with appropriate padding (dotimes (i pad-amount) (setf (aref buffer (+ buffer-index i)) pad-amount)) (update-md2-regs regs buffer 0 checksum) ;; extend the message with the checksum (dotimes (i 16) (setf (aref buffer i) (aref checksum i))) (update-md2-regs regs buffer 0 checksum) (finalize-registers state regs))) (defdigest md2 :digest-length 16 :block-length 16) ironclad-0.57/src/digests/md4.lisp000066400000000000000000000141631420372057600170610ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; md4.lisp -- the MD4 digest algorithm as given in RFC1320 (in-package :crypto) (define-digest-registers (md4 :endian :little) (a #x67452301) (b #xefcdab89) (c #x98badcfe) (d #x10325476)) (defconst +pristine-md4-registers+ (initial-md4-regs)) (defun update-md4-block (regs block) (declare (type md4-regs regs)) (declare (type (simple-array (unsigned-byte 32) (16)) block) #.(burn-baby-burn)) (let ((a (md4-regs-a regs)) (b (md4-regs-b regs)) (c (md4-regs-c regs)) (d (md4-regs-d regs))) (declare (type (unsigned-byte 32) a b c d)) (flet ((f (x y z) (declare (type (unsigned-byte 32) x y z)) (logior (logand x y) (logandc1 x z))) (g (x y z) (declare (type (unsigned-byte 32) x y z)) (logior (logand x y) (logand x z) (logand y z))) (h (x y z) (declare (type (unsigned-byte 32) x y z)) (logxor x y z))) #+ironclad-fast-mod32-arithmetic (declare (inline f g h)) (macrolet ((with-md4-round ((op block constant) &rest clauses) (loop for (a b c d k s) in clauses collect `(setq ,a (rol32 (mod32+ (mod32+ ,a (mod32+ (,op ,b ,c ,d) (aref ,block ,k))) ,constant) ,s)) into result finally (return `(progn ,@result))))) (with-md4-round (f block 0) (a b c d 0 3) (d a b c 1 7) (c d a b 2 11) (b c d a 3 19) (a b c d 4 3) (d a b c 5 7) (c d a b 6 11) (b c d a 7 19) (a b c d 8 3) (d a b c 9 7) (c d a b 10 11) (b c d a 11 19) (a b c d 12 3) (d a b c 13 7) (c d a b 14 11) (b c d a 15 19)) (with-md4-round (g block #x5a827999) (a b c d 0 3) (d a b c 4 5) (c d a b 8 9) (b c d a 12 13) (a b c d 1 3) (d a b c 5 5) (c d a b 9 9) (b c d a 13 13) (a b c d 2 3) (d a b c 6 5) (c d a b 10 9) (b c d a 14 13) (a b c d 3 3) (d a b c 7 5) (c d a b 11 9) (b c d a 15 13)) (with-md4-round (h block #x6ed9eba1) (a b c d 0 3) (d a b c 8 9) (c d a b 4 11) (b c d a 12 15) (a b c d 2 3) (d a b c 10 9) (c d a b 6 11) (b c d a 14 15) (a b c d 1 3) (d a b c 9 9) (c d a b 5 11) (b c d a 13 15) (a b c d 3 3) (d a b c 11 9) (c d a b 7 11) (b c d a 15 15)) (setf (md4-regs-a regs) (mod32+ (md4-regs-a regs) a) (md4-regs-b regs) (mod32+ (md4-regs-b regs) b) (md4-regs-c regs) (mod32+ (md4-regs-c regs) c) (md4-regs-d regs) (mod32+ (md4-regs-d regs) d)) regs)))) (defstruct (md4 (:constructor %make-md4-digest nil) (:constructor %make-md4-state (regs amount block buffer buffer-index)) (:copier nil) (:include mdx)) (regs (initial-md4-regs) :type md4-regs :read-only t) (block (make-array 16 :element-type '(unsigned-byte 32)) :type (simple-array (unsigned-byte 32) (16)) :read-only t)) (defmethod reinitialize-instance ((state md4) &rest initargs) (declare (ignore initargs)) (replace (md4-regs state) +pristine-md4-registers+) (setf (md4-amount state) 0 (md4-buffer-index state) 0) state) (defmethod copy-digest ((state md4) &optional copy) (check-type copy (or null md4)) (cond (copy (replace (md4-regs copy) (md4-regs state)) (replace (md4-buffer copy) (md4-buffer state)) (setf (md4-amount copy) (md4-amount state) (md4-buffer-index copy) (md4-buffer-index state)) copy) (t (%make-md4-state (copy-seq (md4-regs state)) (md4-amount state) (copy-seq (md4-block state)) (copy-seq (md4-buffer state)) (md4-buffer-index state))))) (define-digest-updater md4 "Update the given md4-state from sequence, which is either a simple-string or a simple-array with element-type (unsigned-byte 8), bounded by start and end, which must be numeric bounding-indices." (flet ((compress (state sequence offset) (let ((block (md4-block state))) (fill-block-ub8-le block sequence offset) (update-md4-block (md4-regs state) block)))) (declare (dynamic-extent #'compress)) (declare (notinline mdx-updater)) (mdx-updater state #'compress sequence start end))) (define-digest-finalizer (md4 16) "If the given md4-state has not already been finalized, finalize it, by processing any remaining input in its buffer, with suitable padding and appended bit-length, as specified by the MD4 standard. The resulting MD4 message-digest is returned as an array of sixteen (unsigned-byte 8) values. Calling UPDATE-MD4-STATE after a call to FINALIZE-MD4-STATE results in unspecified behaviour." (let ((regs (md4-regs state)) (block (md4-block state)) (buffer (md4-buffer state)) (buffer-index (md4-buffer-index state)) (total-length (* 8 (md4-amount state)))) (declare (type md4-regs regs) (type (integer 0 63) buffer-index) (type (simple-array (unsigned-byte 32) (16)) block) (type (simple-array (unsigned-byte 8) (*)) buffer)) ;; Add mandatory bit 1 padding (setf (aref buffer buffer-index) #x80) ;; Fill with 0 bit padding (loop for index of-type (integer 0 64) from (1+ buffer-index) below 64 do (setf (aref buffer index) #x00)) (fill-block-ub8-le block buffer 0) ;; Flush block first if length wouldn't fit (when (>= buffer-index 56) (update-md4-block regs block) ;; Create new fully 0 padded block (loop for index of-type (integer 0 16) from 0 below 16 do (setf (aref block index) #x00000000))) ;; Add 64bit message bit length (store-data-length block total-length 14) ;; Flush last block (update-md4-block regs block) ;; Done, remember digest for later calls (finalize-registers state regs))) (defdigest md4 :digest-length 16 :block-length 64) ironclad-0.57/src/digests/md5-lispworks-int32.lisp000066400000000000000000000514361420372057600220560ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; ;;;; MD5-LISPWORKS-INT32 - MD5 implementation using SYS:INT32 in Lispworks ;;;; ;;;; This file implements The MD5 Message-Digest Algorithm, as defined in ;;;; RFC 1321 by R. Rivest, published April 1992. ;;;; ;;;; It was written by Pierre R. Mai, with copious input from the ;;;; cmucl-help mailing-list hosted at cons.org, in November 2001 and ;;;; has been placed into the public domain. ;;;; ;;;; This software is "as is", and has no warranty of any kind. The ;;;; authors assume no responsibility for the consequences of any use ;;;; of this software. ;;;; ;;;; Subsequent modifications: ;;;; - LispWorks 4.4 sys:int32 port by Dmitriy Ivanov. ;;;; - Ironclad integration by Klaus Harbo ;;;; #+ironclad-md5-lispworks-int32 (cl:defpackage :md5-lispworks-int32 (:use :cl)) #+ironclad-md5-lispworks-int32 (in-package :md5-lispworks-int32) #-ironclad-md5-lispworks-int32 (in-package :cl-user) #+ironclad-md5-lispworks-int32 (eval-when (:compile-toplevel :load-toplevel :execute) (unless (fboundp (find-symbol "INT32+" '#:SYSTEM)) (error 'ironclad-error :format-control "It does not look like this version of Lispworks supports the SYS:INT32 API."))) #+ironclad-md5-lispworks-int32 (eval-when (:compile-toplevel :load-toplevel :execute) (defun %optimization-settings () '(optimize (speed 3) (safety 0) (space 0) (debug 0) (float 0))) (defun %optimization-settings/no-fixnum-safety () '(optimize (speed 3) (safety 0) (space 0) (debug 0) (float 0) (hcl:fixnum-safety 0))) (defmacro assemble-ub32 (a b c d) "Assemble an ub32 value from the given (unsigned-byte 8) values, where a is the intended low-order byte and d the high-order byte." `(sys:int32-logior (sys:int32<< ,d 24) (sys:int32-logior (sys:int32<< ,c 16) (sys:int32-logior (sys:int32<< ,b 8) ,a)))) (defmacro make-ub32-vector (length &rest args) `(sys:make-simple-int32-vector ,length ,@args)) (defparameter *t* (make-ub32-vector 64 :initial-contents (flet ((int32-unsigned-to-signed (unsigned) (dpb (ldb (byte 32 0) unsigned) (byte 32 0) (if (logbitp 31 unsigned) -1 0)))) (loop for i from 1 to 64 collect (int32-unsigned-to-signed (truncate (* 4294967296 (abs (sin (float i 0.0d0))))))))))) #+ironclad-md5-lispworks-int32 (progn ;;; This PROGN covers the rest of the file. ;;; Non-Lispworks implementation of MD5 in md5.lisp ;;; -------------------------------------------------------------------------------- ;;; Section 2: Basic Datatypes ;;; -------------------------------------------------------------------------------- (defmacro int32-vector-store-int32u (int32-vec index unsigned-int) "Stores the lowest 32 bit of the non-negative integer `INT' in the the sys:simple-int32-vector `INT32-VEC' at index `INDEX'. Since the sys:int32 API uses signed integers, the most significant bit of `UNSIGNED-INT' must be handled explicitly. If `UNSIGNED-INT' is >= 2^31, the sys:int32 value stored will appear to be a negative value. Use `INT32-VECTOR-READ-INT32U' to read the value as an unsigned integer. For maximum efficiency the entire function must be compiled with `(OPTIMIZE (FLOAT 0))'." (let ((_tmp (gensym "TMP")) (_int (gensym "INT"))) `(let* ((,_int ,unsigned-int) (,_tmp (sys:integer-to-int32 (ldb (byte 31 0) ,_int)))) (setf (sys:int32-aref ,int32-vec ,index) (if (>= (ldb (byte 32 0) ,_int) #x80000000) (sys:int32-logior ,_tmp #.(sys:int32<< sys:+int32-1+ 31)) ,_tmp))))) (deftype ub32 () "Corresponds to the 32bit quantity word of the MD5 Spec" 'sys:int32) ;;; -------------------------------------------------------------------------------- ;;; Section 3.4: Auxilliary functions ;;; -------------------------------------------------------------------------------- (declaim (inline f g h i) (ftype (function (ub32 ub32 ub32) ub32) f g h i)) (defun f (x y z) (declare (type ub32 x y z) #.(%optimization-settings)) (sys:int32-logior (sys:int32-logand x y) (sys:int32-logandc1 x z))) (defun g (x y z) (declare (type ub32 x y z) #.(%optimization-settings)) (sys:int32-logior (sys:int32-logand x z) (sys:int32-logandc2 y z))) (defun h (x y z) (declare (type ub32 x y z) #.(%optimization-settings)) (sys:int32-logxor x (sys:int32-logxor y z))) (defun i (x y z) (declare (type ub32 x y z) #.(%optimization-settings)) (sys:int32-logxor y (sys:int32-logorc2 x z))) (declaim (inline mod32+) (ftype (function (ub32 ub32) ub32) mod32+)) (defun mod32+ (a b) (declare (type ub32 a b) #.(%optimization-settings)) (sys:int32+ a b)) (define-compiler-macro mod32+ (a b) `(sys:int32+ ,a ,b)) (declaim (inline int32>>logical) (ftype (function (sys:int32 (unsigned-byte 5)) sys:int32) int32>>logical)) (defun int32>>logical (a s) ;; Logical right shift, suppressing sign bits. ;; Args: 0 < s < 32 as sys:int32<< does not work with zero or negative shift offsets. (if (sys:int32-minusp a) (sys:int32-logandc2 (sys:int32>> a s) (sys:int32<< -1 (- 32 s))) (sys:int32>> a s))) (declaim (inline rol32) (ftype (function (ub32 (unsigned-byte 5)) ub32) rol32)) (defun rol32 (a s) (declare (type ub32 a) (type (unsigned-byte 5) s) #.(%optimization-settings)) (sys:int32-logior (sys:int32<< a s) (int32>>logical a (- 32 s)))) ;;; -------------------------------------------------------------------------------- ;;; Section 3.4: Table T ;;; -------------------------------------------------------------------------------- (deftype ub32-vector (length) `(sys:simple-int32-vector ,length)) (defmacro ub32-aref (vector index) `(sys:int32-aref ,vector ,index)) (defmacro with-md5-round ((op block) &rest clauses) (loop for (a b c d k s i) in clauses collect `(setq ,a (mod32+ ,b (rol32 (mod32+ (mod32+ ,a (,op ,b ,c ,d)) (mod32+ (ub32-aref ,block ,k) ,(sys:int32-to-integer ; due to LW bug (ub32-aref *t* (1- i))))) ,s))) into result finally (return `(progn ,@result)))) ;;; -------------------------------------------------------------------------------- ;;; Section 3.3: (Initial) MD5 Working Set ;;; -------------------------------------------------------------------------------- (deftype md5-regs () "The working state of the MD5 algorithm, which contains the 4 32-bit registers A, B, C and D." `(ub32-vector 4)) (defmacro md5-regs-a (regs) `(ub32-aref ,regs 0)) (defmacro md5-regs-b (regs) `(ub32-aref ,regs 1)) (defmacro md5-regs-c (regs) `(ub32-aref ,regs 2)) (defmacro md5-regs-d (regs) `(ub32-aref ,regs 3)) (defconstant +md5-magic-a+ (assemble-ub32 #x01 #x23 #x45 #x67) "Initial value of Register A of the MD5 working state.") (defconstant +md5-magic-b+ (assemble-ub32 #x89 #xab #xcd #xef) "Initial value of Register B of the MD5 working state.") (defconstant +md5-magic-c+ (assemble-ub32 #xfe #xdc #xba #x98) "Initial value of Register C of the MD5 working state.") (defconstant +md5-magic-d+ (assemble-ub32 #x76 #x54 #x32 #x10) "Initial value of Register D of the MD5 working state.") (declaim (inline initial-md5-regs)) (defun initial-md5-regs () "Create the initial working state of an MD5 run." (declare #.(%optimization-settings)) (let ((regs (make-ub32-vector 4))) (declare (type md5-regs regs)) (setf (md5-regs-a regs) +md5-magic-a+ (md5-regs-b regs) +md5-magic-b+ (md5-regs-c regs) +md5-magic-c+ (md5-regs-d regs) +md5-magic-d+) regs)) ;;; -------------------------------------------------------------------------------- ;;; Section 3.4: Operation on 16-Word Blocks ;;; -------------------------------------------------------------------------------- (defun update-md5-block (regs block) "This is the core part of the MD5 algorithm. It takes a complete 16 word block of input, and updates the working state in A, B, C, and D accordingly." (declare (type md5-regs regs) (type (ub32-vector 16) block) #.(%optimization-settings)) (let ((a (md5-regs-a regs)) (b (md5-regs-b regs)) (c (md5-regs-c regs)) (d (md5-regs-d regs))) (declare (type ub32 a b c d)) ;; Round 1 (with-md5-round (f block) (A B C D 0 7 1)(D A B C 1 12 2)(C D A B 2 17 3)(B C D A 3 22 4) (A B C D 4 7 5)(D A B C 5 12 6)(C D A B 6 17 7)(B C D A 7 22 8) (A B C D 8 7 9)(D A B C 9 12 10)(C D A B 10 17 11)(B C D A 11 22 12) (A B C D 12 7 13)(D A B C 13 12 14)(C D A B 14 17 15)(B C D A 15 22 16)) ;; Round 2 (with-md5-round (g block) (A B C D 1 5 17)(D A B C 6 9 18)(C D A B 11 14 19)(B C D A 0 20 20) (A B C D 5 5 21)(D A B C 10 9 22)(C D A B 15 14 23)(B C D A 4 20 24) (A B C D 9 5 25)(D A B C 14 9 26)(C D A B 3 14 27)(B C D A 8 20 28) (A B C D 13 5 29)(D A B C 2 9 30)(C D A B 7 14 31)(B C D A 12 20 32)) ;; Round 3 (with-md5-round (h block) (A B C D 5 4 33)(D A B C 8 11 34)(C D A B 11 16 35)(B C D A 14 23 36) (A B C D 1 4 37)(D A B C 4 11 38)(C D A B 7 16 39)(B C D A 10 23 40) (A B C D 13 4 41)(D A B C 0 11 42)(C D A B 3 16 43)(B C D A 6 23 44) (A B C D 9 4 45)(D A B C 12 11 46)(C D A B 15 16 47)(B C D A 2 23 48)) ;; Round 4 (with-md5-round (i block) (A B C D 0 6 49)(D A B C 7 10 50)(C D A B 14 15 51)(B C D A 5 21 52) (A B C D 12 6 53)(D A B C 3 10 54)(C D A B 10 15 55)(B C D A 1 21 56) (A B C D 8 6 57)(D A B C 15 10 58)(C D A B 6 15 59)(B C D A 13 21 60) (A B C D 4 6 61)(D A B C 11 10 62)(C D A B 2 15 63)(B C D A 9 21 64)) ;; Update and return (setf (md5-regs-a regs) (mod32+ (md5-regs-a regs) a) (md5-regs-b regs) (mod32+ (md5-regs-b regs) b) (md5-regs-c regs) (mod32+ (md5-regs-c regs) c) (md5-regs-d regs) (mod32+ (md5-regs-d regs) d)) regs)) ;;; -------------------------------------------------------------------------------- ;;; Section 3.4: Converting 8bit-vectors into 16-Word Blocks ;;; -------------------------------------------------------------------------------- (declaim (inline fill-block-ub8)) (defun fill-block-ub8 (block buffer offset) "Convert a complete 64 (unsigned-byte 8) input vector segment starting from offset into the given 16 word MD5 block." (declare (type (integer 0 #.(- most-positive-fixnum 64)) offset) (type (ub32-vector 16) block) (type (simple-array (unsigned-byte 8) (*)) buffer) #.(%optimization-settings/no-fixnum-safety)) (loop for i of-type (integer 0 16) from 0 for j of-type (integer 0 #.most-positive-fixnum) from offset to (+ offset 63) by 4 do (setf (ub32-aref block i) (assemble-ub32 (aref buffer j) (aref buffer (+ j 1)) (aref buffer (+ j 2)) (aref buffer (+ j 3)))))) ;;; -------------------------------------------------------------------------------- ;;; Section 3.5: Message Digest Output ;;; -------------------------------------------------------------------------------- (declaim (inline md5regs-digest)) (defun md5regs-digest (regs buffer buffer-start) "Create the final 16 byte message-digest from the MD5 working state in regs. Returns a (simple-array (unsigned-byte 8) (16))." (declare #.(%optimization-settings/no-fixnum-safety) (type md5-regs regs)) (macrolet ((frob (reg offset) (let ((var (gensym))) `(let ((,var (sys:int32-to-integer ,reg))) (declare (type (unsigned-byte 32) ,var)) (setf (aref buffer (+ buffer-start ,offset)) (ldb (byte 8 0) ,var) (aref buffer (+ buffer-start ,(+ offset 1))) (ldb (byte 8 8) ,var) (aref buffer (+ buffer-start ,(+ offset 2))) (ldb (byte 8 16) ,var) (aref buffer (+ buffer-start ,(+ offset 3))) (ldb (byte 8 24) ,var)))))) (frob (md5-regs-a regs) 0) (frob (md5-regs-b regs) 4) (frob (md5-regs-c regs) 8) (frob (md5-regs-d regs) 12)) buffer) (defstruct (ironclad::md5 (:constructor make-md5-int32 ()) (:copier)) (regs (initial-md5-regs) :type md5-regs :read-only t) (amount 0 :type (integer 0 *)) (block (make-ub32-vector 16) :read-only t :type (ub32-vector 16)) (buffer (make-array 64 :element-type '(unsigned-byte 8)) :read-only t :type (simple-array (unsigned-byte 8) (64))) (buffer-index 0 :type (integer 0 63)) (finalized-p nil)) (defmacro %md5-regs (x) `(md5-regs ,x)) (defmacro %md5-amount (x) `(md5-amount ,x)) (defmacro %md5-block (x) `(md5-block ,x)) (defmacro %md5-buffer (x) `(md5-buffer ,x)) (defmacro %md5-buffer-index (x) `(md5-buffer-index ,x)) (defmacro %md5-finalized-p (x) `(md5-finalized-p ,x)) (declaim (inline copy-to-buffer)) (defun copy-to-buffer (from from-offset count buffer buffer-offset) "Copy a partial segment from input vector from starting at from-offset and copying count elements into the 64 byte buffer starting at buffer-offset." (declare #.(%optimization-settings/no-fixnum-safety) (type fixnum from-offset) (type (integer 0 63) count buffer-offset) (type (simple-array * (*)) from) (type (simple-array (unsigned-byte 8) (64)) buffer)) (etypecase from ((simple-array (unsigned-byte 8) (*)) (loop for buffer-index of-type (integer 0 64) from buffer-offset for from-index of-type fixnum from from-offset below (+ from-offset count) do (setf (aref buffer buffer-index) (aref (the (simple-array (unsigned-byte 8) (*)) from) from-index)))))) (defun %md5-lispworks-int32-update-state (state sequence &key (start 0) (end (length sequence))) "Update the given md5-state from sequence, which must be simple-array with element-type (unsigned-byte 8), bounded by start and end, which must be numeric bounding-indices." (declare (type ironclad::md5 state) (type (simple-array * (*)) sequence) (type fixnum start end) #.(%optimization-settings/no-fixnum-safety)) (let ((regs (%md5-regs state)) (block (%md5-block state)) (buffer (%md5-buffer state)) (buffer-index (%md5-buffer-index state)) (length (- end start))) (declare (type md5-regs regs) (type fixnum length) (type (integer 0 63) buffer-index) (type (ub32-vector 16) block) (type (simple-array (unsigned-byte 8) (64)) buffer)) ;; Handle old rest (unless (zerop buffer-index) (let ((amount (min (- 64 buffer-index) length))) (declare (type (integer 0 63) amount)) (copy-to-buffer sequence start amount buffer buffer-index) (setq start (the fixnum (+ start amount))) (let ((new-index (mod (+ buffer-index amount) 64))) (when (zerop new-index) (fill-block-ub8 block buffer 0) (update-md5-block regs block)) (when (>= start end) (setf (%md5-buffer-index state) new-index) (incf (%md5-amount state) length) (return-from %md5-lispworks-int32-update-state state))))) ;; Handle main-part and new-rest (etypecase sequence ((simple-array (unsigned-byte 8) (*)) (locally (declare (type (simple-array (unsigned-byte 8) (*)) sequence)) (loop for offset of-type fixnum from start below end by 64 until (< (- end offset) 64) do (fill-block-ub8 block sequence offset) (update-md5-block regs block) finally (let ((amount (- end offset))) (unless (zerop amount) (copy-to-buffer sequence offset amount buffer 0)) (setf (%md5-buffer-index state) amount)))))) (locally (declare (optimize (hcl:fixnum-safety 3))) (setf (%md5-amount state) (+ (%md5-amount state) length))) state)) (defun %md5-lispworks-int32-finalize-state (state digest-buffer digest-buffer-start) "If the given md5-state has not already been finalized, finalize it, by processing any remaining input in its buffer, with suitable padding and appended bit-length, as specified by the MD5 standard. The resulting MD5 message-digest is returned as an array of sixteen \(unsigned-byte 8) values. Calling `update-md5-state' after a call to `finalize-md5-state' results in unspecified behaviour." (declare (type ironclad::md5 state) (optimize (speed 0) (space 0) (debug 2) (float 0)) (optimize (hcl:fixnum-safety 0))) (or (%md5-finalized-p state) (let ((regs (%md5-regs state)) (block (%md5-block state)) (buffer (%md5-buffer state)) (buffer-index (%md5-buffer-index state)) (total-length (* 8 (%md5-amount state)))) ; potentially bignum (declare (type md5-regs regs) (type (integer 0 63) buffer-index) (type (ub32-vector 16) block) (type (simple-array (unsigned-byte 8) (*)) buffer)) ;; Add mandatory bit 1 padding (setf (aref buffer buffer-index) #x80) ;; Fill with 0 bit padding (loop for index of-type (integer 0 64) from (1+ buffer-index) below 64 do (setf (aref buffer index) #x00)) (fill-block-ub8 block buffer 0) ;; Flush block first if length wouldn't fit (when (>= buffer-index 56) (update-md5-block regs block) ;; Create new fully 0 padded block (loop for index of-type (integer 0 16) from 0 below 16 do (setf (ub32-aref block index) #x00000000))) ;; Add 64bit message bit length (int32-vector-store-int32u block 14 total-length) (int32-vector-store-int32u block 15 (ldb (byte 32 32) total-length)) ;; Flush last block (update-md5-block regs block) ;; Done, remember digest for later calls (setf (%md5-finalized-p state) (md5regs-digest regs digest-buffer digest-buffer-start))))) ;;; -------------------------------------------------------------------------------- ;;; IRONCLAD INTERFACING SUPPORT FUNCTIONS ;;; -------------------------------------------------------------------------------- (defun %md5-lispworks-int32-reinitialize (state) (let ((regs (%md5-regs state))) (setf (md5-regs-a regs) +md5-magic-a+ (md5-regs-b regs) +md5-magic-b+ (md5-regs-c regs) +md5-magic-c+ (md5-regs-d regs) +md5-magic-d+)) (setf (%md5-amount state) 0) (setf (%md5-buffer-index state) 0) (setf (%md5-finalized-p state) nil) state) (defmethod %md5-lispworks-int32-copy ((old ironclad::md5) copy) (let* ((new (or copy (make-md5-int32))) (old-regs (%md5-regs old)) (new-regs (%md5-regs new))) (setf (md5-regs-a new-regs) (md5-regs-a old-regs) (md5-regs-b new-regs) (md5-regs-b old-regs) (md5-regs-c new-regs) (md5-regs-c old-regs) (md5-regs-d new-regs) (md5-regs-d old-regs)) (replace (%md5-buffer new) (%md5-buffer old)) (setf (%md5-amount new) (%md5-amount old) (%md5-buffer-index new) (%md5-buffer-index old) (%md5-finalized-p new) (%md5-finalized-p old)) new)) ;;; -------------------------------------------------------------------------------- ;;; IRONCLAD INTERFACE ;;; -------------------------------------------------------------------------------- (defmethod reinitialize-instance ((state ironclad::md5) &rest initargs) (%md5-lispworks-int32-reinitialize state)) (defmethod ironclad:copy-digest ((state ironclad::md5) &optional copy) (%md5-lispworks-int32-copy state (or copy (ironclad::%make-md5-digest)))) (ironclad::define-digest-updater ironclad::md5 (%md5-lispworks-int32-update-state ironclad::state ironclad::sequence :start ironclad::start :end ironclad::end )) (ironclad::define-digest-finalizer (ironclad::md5 16) (%md5-lispworks-int32-finalize-state ironclad::state ironclad::%buffer ironclad::buffer-start)) (defun ironclad::%make-md5-digest () (make-md5-int32)) (ironclad::defdigest ironclad::md5 :digest-length 16 :block-length 64) ) ; all-encompassing progn ;eof ironclad-0.57/src/digests/md5.lisp000066400000000000000000000245221420372057600170620ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; This file implements The MD5 Message-Digest Algorithm, as defined in ;;;; RFC 1321 by R. Rivest, published April 1992. ;;;; ;;;; It was written by Pierre R. Mai, with copious input from the ;;;; cmucl-help mailing-list hosted at cons.org, in November 2001 and ;;;; has been placed into the public domain. ;;;; ;;;; $Id: md5.lisp,v 1.3 2003/09/16 12:07:39 crhodes Exp $ ;;;; ;;;; While the implementation should work on all conforming Common ;;;; Lisp implementations, it has only been optimized for CMU CL, ;;;; where it achieved comparable performance to the standard md5sum ;;;; utility (within a factor of 1.5 or less on iA32 and UltraSparc ;;;; hardware). ;;;; ;;;; Since the implementation makes heavy use of arithmetic on ;;;; (unsigned-byte 32) numbers, acceptable performance is likely only ;;;; on CL implementations that support unboxed arithmetic on such ;;;; numbers in some form. For other CL implementations a 16bit ;;;; implementation of MD5 is probably more suitable. ;;;; ;;;; The code implements correct operation for files of unbounded size ;;;; as is, at the cost of having to do a single generic integer ;;;; addition for each call to update-md5-state. If you call ;;;; update-md5-state frequently with little data, this can pose a ;;;; performance problem. If you can live with a size restriction of ;;;; 512 MB, then you can enable fast fixnum arithmetic by putting ;;;; :md5-small-length onto *features* prior to compiling this file. ;;;; ;;;; This software is "as is", and has no warranty of any kind. The ;;;; authors assume no responsibility for the consequences of any use ;;;; of this software. (in-package :crypto) #-ironclad-md5-lispworks-int32 (eval-when (:compile-toplevel :load-toplevel :execute) ;;; Section 3.4: Table T (defparameter *t* (make-array 64 :element-type '(unsigned-byte 32) :initial-contents (loop for i from 1 to 64 collect (truncate (* 4294967296 (abs (sin (float i 0.0d0))))))))) #-ironclad-md5-lispworks-int32 (progn ;;; This PROGN covers the rest of the file. ;;; Lispworks implementation of MD5 in md5-lispworks-int32.lisp. ;;; Section 3.3: (Initial) MD5 Working Set (define-digest-registers (md5 :endian :little) (a #x67452301) (b #xefcdab89) (c #x98badcfe) (d #x10325476)) (defconst +pristine-md5-registers+ (initial-md5-regs)) ;;; Section 3.4: Operation on 16-Word Blocks (defun update-md5-block (regs block) "This is the core part of the MD5 algorithm. It takes a complete 16 word block of input, and updates the working state in A, B, C, and D accordingly." (declare (type md5-regs regs) (type (simple-array (unsigned-byte 32) (16)) block) #.(burn-baby-burn)) (let ((a (md5-regs-a regs)) (b (md5-regs-b regs)) (c (md5-regs-c regs)) (d (md5-regs-d regs))) (declare (type (unsigned-byte 32) a b c d)) (flet ((f (x y z) (declare (type (unsigned-byte 32) x y z)) #+cmu (kernel:32bit-logical-xor z (kernel:32bit-logical-and x (kernel:32bit-logical-xor y z))) #-cmu (logxor z (logand x (logxor y z)))) (g (x y z) (declare (type (unsigned-byte 32) x y z)) #+cmu (kernel:32bit-logical-xor y (kernel:32bit-logical-and z (kernel:32bit-logical-xor x y))) #-cmu (logxor y (logand z (logxor x y)))) (h (x y z) (declare (type (unsigned-byte 32) x y z)) #+cmu (kernel:32bit-logical-xor x (kernel:32bit-logical-xor y z)) #-cmu (logxor x y z)) (i (x y z) (declare (type (unsigned-byte 32) x y z)) #+cmu (kernel:32bit-logical-xor y (kernel:32bit-logical-orc2 x z)) #-cmu (ldb (byte 32 0) (logxor y (logorc2 x z))))) #+ironclad-fast-mod32-arithmetic (declare (inline f g h i)) (macrolet ((with-md5-round ((op block) &rest clauses) (loop for (a b c d k s i) in clauses collect `(setq ,a (mod32+ ,b (rol32 (mod32+ (mod32+ ,a (,op ,b ,c ,d)) (mod32+ (aref ,block ,k) ,(aref *t* (1- i)))) ,s))) into result finally (return `(progn ,@result))))) ;; Round 1 (with-md5-round (f block) (a b c d 0 7 1)(d a b c 1 12 2)(c d a b 2 17 3)(b c d a 3 22 4) (a b c d 4 7 5)(d a b c 5 12 6)(c d a b 6 17 7)(b c d a 7 22 8) (a b c d 8 7 9)(d a b c 9 12 10)(c d a b 10 17 11)(b c d a 11 22 12) (a b c d 12 7 13)(d a b c 13 12 14)(c d a b 14 17 15)(b c d a 15 22 16)) ;; round 2 (with-md5-round (g block) (a b c d 1 5 17)(d a b c 6 9 18)(c d a b 11 14 19)(b c d a 0 20 20) (a b c d 5 5 21)(d a b c 10 9 22)(c d a b 15 14 23)(b c d a 4 20 24) (a b c d 9 5 25)(d a b c 14 9 26)(c d a b 3 14 27)(b c d a 8 20 28) (a b c d 13 5 29)(d a b c 2 9 30)(c d a b 7 14 31)(b c d a 12 20 32)) ;; round 3 (with-md5-round (h block) (a b c d 5 4 33)(d a b c 8 11 34)(c d a b 11 16 35)(b c d a 14 23 36) (a b c d 1 4 37)(d a b c 4 11 38)(c d a b 7 16 39)(b c d a 10 23 40) (a b c d 13 4 41)(d a b c 0 11 42)(c d a b 3 16 43)(b c d a 6 23 44) (a b c d 9 4 45)(d a b c 12 11 46)(c d a b 15 16 47)(b c d a 2 23 48)) ;; round 4 (with-md5-round (i block) (a b c d 0 6 49)(d a b c 7 10 50)(c d a b 14 15 51)(b c d a 5 21 52) (a b c d 12 6 53)(d a b c 3 10 54)(c d a b 10 15 55)(b c d a 1 21 56) (a b c d 8 6 57)(d a b c 15 10 58)(c d a b 6 15 59)(b c d a 13 21 60) (a b c d 4 6 61)(d a b c 11 10 62)(c d a b 2 15 63)(b c d a 9 21 64)) ;; Update and return (setf (md5-regs-a regs) (mod32+ (md5-regs-a regs) a) (md5-regs-b regs) (mod32+ (md5-regs-b regs) b) (md5-regs-c regs) (mod32+ (md5-regs-c regs) c) (md5-regs-d regs) (mod32+ (md5-regs-d regs) d)) regs)))) ;;; Mid-Level Drivers (defstruct (md5 (:constructor %make-md5-digest nil) (:constructor %make-md5-state (regs amount block buffer buffer-index)) (:copier nil) (:include mdx)) (regs (initial-md5-regs) :type md5-regs :read-only t) (block (make-array 16 :element-type '(unsigned-byte 32)) :type (simple-array (unsigned-byte 32) (16)) :read-only t)) (defmethod reinitialize-instance ((state md5) &rest initargs) (declare (ignore initargs)) (replace (md5-regs state) +pristine-md5-registers+) (setf (md5-amount state) 0 (md5-buffer-index state) 0) state) (defmethod copy-digest ((state md5) &optional copy) (check-type copy (or null md5)) (cond (copy (replace (md5-regs copy) (md5-regs state)) (replace (md5-buffer copy) (md5-buffer state)) (setf (md5-amount copy) (md5-amount state) (md5-buffer-index copy) (md5-buffer-index state)) copy) (t (%make-md5-state (copy-seq (md5-regs state)) (md5-amount state) (copy-seq (md5-block state)) (copy-seq (md5-buffer state)) (md5-buffer-index state))))) (define-digest-updater md5 "Update the given md5-state from sequence, which is either a simple-string or a simple-array with element-type (unsigned-byte 8), bounded by start and end, which must be numeric bounding-indices." (flet ((compress (state sequence offset) (let ((block (md5-block state))) (fill-block-ub8-le block sequence offset) (update-md5-block (md5-regs state) block)))) (declare (dynamic-extent #'compress)) (declare (notinline mdx-updater)) (mdx-updater state #'compress sequence start end))) (define-digest-finalizer (md5 16) "If the given md5-state has not already been finalized, finalize it, by processing any remaining input in its buffer, with suitable padding and appended bit-length, as specified by the MD5 standard. The resulting MD5 message-digest is returned as an array of sixteen (unsigned-byte 8) values. Calling UPDATE-MD5-STATE after a call to FINALIZE-MD5-STATE results in unspecified behaviour." (let ((regs (md5-regs state)) (block (md5-block state)) (buffer (md5-buffer state)) (buffer-index (md5-buffer-index state)) (total-length (* 8 (md5-amount state)))) (declare (type md5-regs regs) (type (integer 0 63) buffer-index) (type (simple-array (unsigned-byte 32) (16)) block) (type (simple-array (unsigned-byte 8) (64)) buffer)) ;; Add mandatory bit 1 padding (setf (aref buffer buffer-index) #x80) ;; Fill with 0 bit padding (loop for index of-type (integer 0 64) from (1+ buffer-index) below 64 do (setf (aref buffer index) #x00)) (fill-block-ub8-le block buffer 0) ;; Flush block first if length wouldn't fit (when (>= buffer-index 56) (update-md5-block regs block) ;; Create new fully 0 padded block (loop for index of-type (integer 0 16) from 0 below 16 do (setf (aref block index) #x00000000))) ;; Add 64bit message bit length (store-data-length block total-length 14) ;; Flush last block (update-md5-block regs block) ;; Done, remember digest for later calls (finalize-registers state regs))) (defdigest md5 :digest-length 16 :block-length 64) ) ; all-encompassing progn ironclad-0.57/src/digests/ripemd-128.lisp000066400000000000000000000230731420372057600201650ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; ripemd-128.lisp -- the RIPEMD-128 digest function (in-package :crypto) (define-digest-registers (ripemd-128 :endian :little) (a #x67452301) (b #xefcdab89) (c #x98badcfe) (d #x10325476)) (defconst +pristine-ripemd-128-registers+ (initial-ripemd-128-regs)) (defun update-ripemd-128-block (regs block) (declare (type ripemd-128-regs regs) (type (simple-array (unsigned-byte 32) (16)) block) #.(burn-baby-burn)) (let* ((a1 (ripemd-128-regs-a regs)) (a2 a1) (b1 (ripemd-128-regs-b regs)) (b2 b1) (c1 (ripemd-128-regs-c regs)) (c2 c1) (d1 (ripemd-128-regs-d regs)) (d2 d1)) (declare (type (unsigned-byte 32) a1 a2 b1 b2 c1 c2 d1 d2)) ;; define the necessary logical functions (flet ((f (x y z) (declare (type (unsigned-byte 32) x y z)) (ldb (byte 32 0) (logxor x y z))) (g (x y z) (declare (type (unsigned-byte 32) x y z)) (ldb (byte 32 0) (logxor z (logand x (logxor y z))))) (h (x y z) (declare (type (unsigned-byte 32) x y z)) (ldb (byte 32 0) (logxor z (logior x (lognot y))))) (i (x y z) (declare (type (unsigned-byte 32) x y z)) (ldb (byte 32 0) (logxor y (logand z (logxor x y)))))) #+ironclad-fast-mod32-arithmetic (declare (inline f g h i)) (macrolet ((subround (func a b c d x s k) `(progn (setf ,a (mod32+ ,a (mod32+ (funcall (function ,func) ,b ,c ,d) (mod32+ ,x ,k)))) (setf ,a (rol32 ,a ,s)))) (with-ripemd-round ((block func constant) &rest clauses) (loop for (a b c d i s) in clauses collect `(subround ,func ,a ,b ,c ,d (aref ,block ,i) ,s ,constant) into result finally (return `(progn ,@result))))) (with-ripemd-round (block f 0) (a1 b1 c1 d1 0 11) (d1 a1 b1 c1 1 14) (c1 d1 a1 b1 2 15) (b1 c1 d1 a1 3 12) (a1 b1 c1 d1 4 5) (d1 a1 b1 c1 5 8) (c1 d1 a1 b1 6 7) (b1 c1 d1 a1 7 9) (a1 b1 c1 d1 8 11) (d1 a1 b1 c1 9 13) (c1 d1 a1 b1 10 14) (b1 c1 d1 a1 11 15) (a1 b1 c1 d1 12 6) (d1 a1 b1 c1 13 7) (c1 d1 a1 b1 14 9) (b1 c1 d1 a1 15 8)) (with-ripemd-round (block g #x5a827999) (a1 b1 c1 d1 7 7) (d1 a1 b1 c1 4 6) (c1 d1 a1 b1 13 8) (b1 c1 d1 a1 1 13) (a1 b1 c1 d1 10 11) (d1 a1 b1 c1 6 9) (c1 d1 a1 b1 15 7) (b1 c1 d1 a1 3 15) (a1 b1 c1 d1 12 7) (d1 a1 b1 c1 0 12) (c1 d1 a1 b1 9 15) (b1 c1 d1 a1 5 9) (a1 b1 c1 d1 2 11) (d1 a1 b1 c1 14 7) (c1 d1 a1 b1 11 13) (b1 c1 d1 a1 8 12)) (with-ripemd-round (block h #x6ed9eba1) (a1 b1 c1 d1 3 11) (d1 a1 b1 c1 10 13) (c1 d1 a1 b1 14 6) (b1 c1 d1 a1 4 7) (a1 b1 c1 d1 9 14) (d1 a1 b1 c1 15 9) (c1 d1 a1 b1 8 13) (b1 c1 d1 a1 1 15) (a1 b1 c1 d1 2 14) (d1 a1 b1 c1 7 8) (c1 d1 a1 b1 0 13) (b1 c1 d1 a1 6 6) (a1 b1 c1 d1 13 5) (d1 a1 b1 c1 11 12) (c1 d1 a1 b1 5 7) (b1 c1 d1 a1 12 5)) (with-ripemd-round (block i #x8f1bbcdc) (a1 b1 c1 d1 1 11) (d1 a1 b1 c1 9 12) (c1 d1 a1 b1 11 14) (b1 c1 d1 a1 10 15) (a1 b1 c1 d1 0 14) (d1 a1 b1 c1 8 15) (c1 d1 a1 b1 12 9) (b1 c1 d1 a1 4 8) (a1 b1 c1 d1 13 9) (d1 a1 b1 c1 3 14) (c1 d1 a1 b1 7 5) (b1 c1 d1 a1 15 6) (a1 b1 c1 d1 14 8) (d1 a1 b1 c1 5 6) (c1 d1 a1 b1 6 5) (b1 c1 d1 a1 2 12)) (with-ripemd-round (block i #x50a28be6) (a2 b2 c2 d2 5 8) (d2 a2 b2 c2 14 9) (c2 d2 a2 b2 7 9) (b2 c2 d2 a2 0 11) (a2 b2 c2 d2 9 13) (d2 a2 b2 c2 2 15) (c2 d2 a2 b2 11 15) (b2 c2 d2 a2 4 5) (a2 b2 c2 d2 13 7) (d2 a2 b2 c2 6 7) (c2 d2 a2 b2 15 8) (b2 c2 d2 a2 8 11) (a2 b2 c2 d2 1 14) (d2 a2 b2 c2 10 14) (c2 d2 a2 b2 3 12) (b2 c2 d2 a2 12 6)) (with-ripemd-round (block h #x5c4dd124) (a2 b2 c2 d2 6 9) (d2 a2 b2 c2 11 13) (c2 d2 a2 b2 3 15) (b2 c2 d2 a2 7 7) (a2 b2 c2 d2 0 12) (d2 a2 b2 c2 13 8) (c2 d2 a2 b2 5 9) (b2 c2 d2 a2 10 11) (a2 b2 c2 d2 14 7) (d2 a2 b2 c2 15 7) (c2 d2 a2 b2 8 12) (b2 c2 d2 a2 12 7) (a2 b2 c2 d2 4 6) (d2 a2 b2 c2 9 15) (c2 d2 a2 b2 1 13) (b2 c2 d2 a2 2 11)) (with-ripemd-round (block g #x6d703ef3) (a2 b2 c2 d2 15 9) (d2 a2 b2 c2 5 7) (c2 d2 a2 b2 1 15) (b2 c2 d2 a2 3 11) (a2 b2 c2 d2 7 8) (d2 a2 b2 c2 14 6) (c2 d2 a2 b2 6 6) (b2 c2 d2 a2 9 14) (a2 b2 c2 d2 11 12) (d2 a2 b2 c2 8 13) (c2 d2 a2 b2 12 5) (b2 c2 d2 a2 2 14) (a2 b2 c2 d2 10 13) (d2 a2 b2 c2 0 13) (c2 d2 a2 b2 4 7) (b2 c2 d2 a2 13 5)) (with-ripemd-round (block f 0) (a2 b2 c2 d2 8 15) (d2 a2 b2 c2 6 5) (c2 d2 a2 b2 4 8) (b2 c2 d2 a2 1 11) (a2 b2 c2 d2 3 14) (d2 a2 b2 c2 11 14) (c2 d2 a2 b2 15 6) (b2 c2 d2 a2 0 14) (a2 b2 c2 d2 5 6) (d2 a2 b2 c2 12 9) (c2 d2 a2 b2 2 12) (b2 c2 d2 a2 13 9) (a2 b2 c2 d2 9 12) (d2 a2 b2 c2 7 5) (c2 d2 a2 b2 10 15) (b2 c2 d2 a2 14 8)) (setf d2 (mod32+ (ripemd-128-regs-b regs) (mod32+ c1 d2)) (ripemd-128-regs-b regs) (mod32+ (ripemd-128-regs-c regs) (mod32+ d1 a2)) (ripemd-128-regs-c regs) (mod32+ (ripemd-128-regs-d regs) (mod32+ a1 b2)) (ripemd-128-regs-d regs) (mod32+ (ripemd-128-regs-a regs) (mod32+ b1 c2)) (ripemd-128-regs-a regs) d2) regs)))) (defstruct (ripemd-128 (:constructor %make-ripemd-128-digest nil) (:constructor %make-ripemd-128-state (regs amount block buffer buffer-index)) (:copier nil) (:include mdx)) (regs (initial-ripemd-128-regs) :type ripemd-128-regs :read-only t) (block (make-array 16 :element-type '(unsigned-byte 32)) :type (simple-array (unsigned-byte 32) (16)) :read-only t)) (defmethod reinitialize-instance ((state ripemd-128) &rest initargs) (declare (ignore initargs)) (replace (ripemd-128-regs state) +pristine-ripemd-128-registers+) (setf (ripemd-128-amount state) 0 (ripemd-128-buffer-index state) 0) state) (defmethod copy-digest ((state ripemd-128) &optional copy) (check-type copy (or null ripemd-128)) (cond (copy (replace (ripemd-128-regs copy) (ripemd-128-regs state)) (replace (ripemd-128-buffer copy) (ripemd-128-buffer state)) (setf (ripemd-128-amount copy) (ripemd-128-amount state) (ripemd-128-buffer-index copy) (ripemd-128-buffer-index state)) copy) (t (%make-ripemd-128-state (copy-seq (ripemd-128-regs state)) (ripemd-128-amount state) (copy-seq (ripemd-128-block state)) (copy-seq (ripemd-128-buffer state)) (ripemd-128-buffer-index state))))) (define-digest-updater ripemd-128 "Update the given ripemd-128-state from sequence, which is either a simple-string or a simple-array with element-type (unsigned-byte 8), bounded by start and end, which must be numeric bounding-indices." (flet ((compress (state sequence offset) (let ((block (ripemd-128-block state))) (fill-block-ub8-le block sequence offset) (update-ripemd-128-block (ripemd-128-regs state) block)))) (declare (dynamic-extent #'compress)) (declare (notinline mdx-updater)) (mdx-updater state #'compress sequence start end))) (define-digest-finalizer (ripemd-128 16) "If the given ripemd-128-state has not already been finalized, finalize it, by processing any remaining input in its buffer, with suitable padding and appended bit-length, as specified by the RIPEMD-128 standard. The resulting RIPEMD-128 message-digest is returned as an array of twenty (unsigned-byte 8) values. Calling UPDATE-RIPEMD-128-STATE after a call to FINALIZE-RIPEMD-128-STATE results in unspecified behaviour." (let ((regs (ripemd-128-regs state)) (block (ripemd-128-block state)) (buffer (ripemd-128-buffer state)) (buffer-index (ripemd-128-buffer-index state)) (total-length (* 8 (ripemd-128-amount state)))) (declare (type ripemd-128-regs regs) (type (integer 0 63) buffer-index) (type (simple-array (unsigned-byte 32) (16)) block) (type (simple-array (unsigned-byte 8) (*)) buffer)) ;; Add mandatory bit 1 padding (setf (aref buffer buffer-index) #x80) ;; Fill with 0 bit padding (loop for index of-type (integer 0 64) from (1+ buffer-index) below 64 do (setf (aref buffer index) #x00)) (fill-block-ub8-le block buffer 0) ;; Flush block first if length wouldn't fit (when (>= buffer-index 56) (update-ripemd-128-block regs block) ;; Create new fully 0 padded block (loop for index of-type (integer 0 16) from 0 below 16 do (setf (aref block index) #x00000000))) ;; Add 64bit message bit length (store-data-length block total-length 14) ;; Flush last block (update-ripemd-128-block regs block) ;; Done, remember digest for later calls (finalize-registers state regs))) (defdigest ripemd-128 :digest-length 16 :block-length 64) ironclad-0.57/src/digests/ripemd-160.lisp000066400000000000000000000263411420372057600201620ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; ripemd-160.lisp -- the RIPEMD-160 digest function (in-package :crypto) (define-digest-registers (ripemd-160 :endian :little) (a #x67452301) (b #xefcdab89) (c #x98badcfe) (d #x10325476) (e #xc3d2e1f0)) (defconst +pristine-ripemd-160-registers+ (initial-ripemd-160-regs)) (defun update-ripemd-160-block (regs block) (declare (type ripemd-160-regs regs) (type (simple-array (unsigned-byte 32) (16)) block) #.(burn-baby-burn)) (let* ((a1 (ripemd-160-regs-a regs)) (a2 a1) (b1 (ripemd-160-regs-b regs)) (b2 b1) (c1 (ripemd-160-regs-c regs)) (c2 c1) (d1 (ripemd-160-regs-d regs)) (d2 d1) (e1 (ripemd-160-regs-e regs)) (e2 e1)) (declare (type (unsigned-byte 32) a1 a2 b1 b2 c1 c2 d1 d2 e1 e2)) (flet ((f (x y z) (declare (type (unsigned-byte 32) x y z)) (ldb (byte 32 0) (logxor x y z))) (g (x y z) (declare (type (unsigned-byte 32) x y z)) (ldb (byte 32 0) (logxor z (logand x (logxor y z))))) (h (x y z) (declare (type (unsigned-byte 32) x y z)) (ldb (byte 32 0) (logxor z (logior x (lognot y))))) (i (x y z) (declare (type (unsigned-byte 32) x y z)) (ldb (byte 32 0) (logxor y (logand z (logxor x y))))) (j (x y z) (declare (type (unsigned-byte 32) x y z)) (ldb (byte 32 0) (logxor x (logior y (lognot z)))))) #+ironclad-fast-mod32-arithmetic (declare (inline f g h i j)) (macrolet ((subround (func a b c d e x s k) `(progn (setf ,a (mod32+ ,a (mod32+ (funcall (function ,func) ,b ,c ,d) (mod32+ ,x ,k)))) (setf ,a (mod32+ (rol32 ,a ,s) ,e)) (setf ,c (rol32 ,c 10)))) (with-ripemd-round ((block func constant) &rest clauses) (loop for (a b c d e i s) in clauses collect `(subround ,func ,a ,b ,c ,d ,e (aref ,block ,i) ,s ,constant) into result finally (return `(progn ,@result))))) (with-ripemd-round (block f 0) (a1 b1 c1 d1 e1 0 11) (e1 a1 b1 c1 d1 1 14) (d1 e1 a1 b1 c1 2 15) (c1 d1 e1 a1 b1 3 12) (b1 c1 d1 e1 a1 4 5) (a1 b1 c1 d1 e1 5 8) (e1 a1 b1 c1 d1 6 7) (d1 e1 a1 b1 c1 7 9) (c1 d1 e1 a1 b1 8 11) (b1 c1 d1 e1 a1 9 13) (a1 b1 c1 d1 e1 10 14) (e1 a1 b1 c1 d1 11 15) (d1 e1 a1 b1 c1 12 6) (c1 d1 e1 a1 b1 13 7) (b1 c1 d1 e1 a1 14 9) (a1 b1 c1 d1 e1 15 8)) (with-ripemd-round (block g #x5a827999) (e1 a1 b1 c1 d1 7 7) (d1 e1 a1 b1 c1 4 6) (c1 d1 e1 a1 b1 13 8) (b1 c1 d1 e1 a1 1 13) (a1 b1 c1 d1 e1 10 11) (e1 a1 b1 c1 d1 6 9) (d1 e1 a1 b1 c1 15 7) (c1 d1 e1 a1 b1 3 15) (b1 c1 d1 e1 a1 12 7) (a1 b1 c1 d1 e1 0 12) (e1 a1 b1 c1 d1 9 15) (d1 e1 a1 b1 c1 5 9) (c1 d1 e1 a1 b1 2 11) (b1 c1 d1 e1 a1 14 7) (a1 b1 c1 d1 e1 11 13) (e1 a1 b1 c1 d1 8 12)) (with-ripemd-round (block h #x6ed9eba1) (d1 e1 a1 b1 c1 3 11) (c1 d1 e1 a1 b1 10 13) (b1 c1 d1 e1 a1 14 6) (a1 b1 c1 d1 e1 4 7) (e1 a1 b1 c1 d1 9 14) (d1 e1 a1 b1 c1 15 9) (c1 d1 e1 a1 b1 8 13) (b1 c1 d1 e1 a1 1 15) (a1 b1 c1 d1 e1 2 14) (e1 a1 b1 c1 d1 7 8) (d1 e1 a1 b1 c1 0 13) (c1 d1 e1 a1 b1 6 6) (b1 c1 d1 e1 a1 13 5) (a1 b1 c1 d1 e1 11 12) (e1 a1 b1 c1 d1 5 7) (d1 e1 a1 b1 c1 12 5)) (with-ripemd-round (block i #x8f1bbcdc) (c1 d1 e1 a1 b1 1 11) (b1 c1 d1 e1 a1 9 12) (a1 b1 c1 d1 e1 11 14) (e1 a1 b1 c1 d1 10 15) (d1 e1 a1 b1 c1 0 14) (c1 d1 e1 a1 b1 8 15) (b1 c1 d1 e1 a1 12 9) (a1 b1 c1 d1 e1 4 8) (e1 a1 b1 c1 d1 13 9) (d1 e1 a1 b1 c1 3 14) (c1 d1 e1 a1 b1 7 5) (b1 c1 d1 e1 a1 15 6) (a1 b1 c1 d1 e1 14 8) (e1 a1 b1 c1 d1 5 6) (d1 e1 a1 b1 c1 6 5) (c1 d1 e1 a1 b1 2 12)) (with-ripemd-round (block j #xa953fd4e) (b1 c1 d1 e1 a1 4 9) (a1 b1 c1 d1 e1 0 15) (e1 a1 b1 c1 d1 5 5) (d1 e1 a1 b1 c1 9 11) (c1 d1 e1 a1 b1 7 6) (b1 c1 d1 e1 a1 12 8) (a1 b1 c1 d1 e1 2 13) (e1 a1 b1 c1 d1 10 12) (d1 e1 a1 b1 c1 14 5) (c1 d1 e1 a1 b1 1 12) (b1 c1 d1 e1 a1 3 13) (a1 b1 c1 d1 e1 8 14) (e1 a1 b1 c1 d1 11 11) (d1 e1 a1 b1 c1 6 8) (c1 d1 e1 a1 b1 15 5) (b1 c1 d1 e1 a1 13 6)) (with-ripemd-round (block j #x50a28be6) (a2 b2 c2 d2 e2 5 8) (e2 a2 b2 c2 d2 14 9) (d2 e2 a2 b2 c2 7 9) (c2 d2 e2 a2 b2 0 11) (b2 c2 d2 e2 a2 9 13) (a2 b2 c2 d2 e2 2 15) (e2 a2 b2 c2 d2 11 15) (d2 e2 a2 b2 c2 4 5) (c2 d2 e2 a2 b2 13 7) (b2 c2 d2 e2 a2 6 7) (a2 b2 c2 d2 e2 15 8) (e2 a2 b2 c2 d2 8 11) (d2 e2 a2 b2 c2 1 14) (c2 d2 e2 a2 b2 10 14) (b2 c2 d2 e2 a2 3 12) (a2 b2 c2 d2 e2 12 6)) (with-ripemd-round (block i #x5c4dd124) (e2 a2 b2 c2 d2 6 9) (d2 e2 a2 b2 c2 11 13) (c2 d2 e2 a2 b2 3 15) (b2 c2 d2 e2 a2 7 7) (a2 b2 c2 d2 e2 0 12) (e2 a2 b2 c2 d2 13 8) (d2 e2 a2 b2 c2 5 9) (c2 d2 e2 a2 b2 10 11) (b2 c2 d2 e2 a2 14 7) (a2 b2 c2 d2 e2 15 7) (e2 a2 b2 c2 d2 8 12) (d2 e2 a2 b2 c2 12 7) (c2 d2 e2 a2 b2 4 6) (b2 c2 d2 e2 a2 9 15) (a2 b2 c2 d2 e2 1 13) (e2 a2 b2 c2 d2 2 11)) (with-ripemd-round (block h #x6d703ef3) (d2 e2 a2 b2 c2 15 9) (c2 d2 e2 a2 b2 5 7) (b2 c2 d2 e2 a2 1 15) (a2 b2 c2 d2 e2 3 11) (e2 a2 b2 c2 d2 7 8) (d2 e2 a2 b2 c2 14 6) (c2 d2 e2 a2 b2 6 6) (b2 c2 d2 e2 a2 9 14) (a2 b2 c2 d2 e2 11 12) (e2 a2 b2 c2 d2 8 13) (d2 e2 a2 b2 c2 12 5) (c2 d2 e2 a2 b2 2 14) (b2 c2 d2 e2 a2 10 13) (a2 b2 c2 d2 e2 0 13) (e2 a2 b2 c2 d2 4 7) (d2 e2 a2 b2 c2 13 5)) (with-ripemd-round (block g #x7a6d76e9) (c2 d2 e2 a2 b2 8 15) (b2 c2 d2 e2 a2 6 5) (a2 b2 c2 d2 e2 4 8) (e2 a2 b2 c2 d2 1 11) (d2 e2 a2 b2 c2 3 14) (c2 d2 e2 a2 b2 11 14) (b2 c2 d2 e2 a2 15 6) (a2 b2 c2 d2 e2 0 14) (e2 a2 b2 c2 d2 5 6) (d2 e2 a2 b2 c2 12 9) (c2 d2 e2 a2 b2 2 12) (b2 c2 d2 e2 a2 13 9) (a2 b2 c2 d2 e2 9 12) (e2 a2 b2 c2 d2 7 5) (d2 e2 a2 b2 c2 10 15) (c2 d2 e2 a2 b2 14 8)) (with-ripemd-round (block f 0) (b2 c2 d2 e2 a2 12 8) (a2 b2 c2 d2 e2 15 5) (e2 a2 b2 c2 d2 10 12) (d2 e2 a2 b2 c2 4 9) (c2 d2 e2 a2 b2 1 12) (b2 c2 d2 e2 a2 5 5) (a2 b2 c2 d2 e2 8 14) (e2 a2 b2 c2 d2 7 6) (d2 e2 a2 b2 c2 6 8) (c2 d2 e2 a2 b2 2 13) (b2 c2 d2 e2 a2 13 6) (a2 b2 c2 d2 e2 14 5) (e2 a2 b2 c2 d2 0 15) (d2 e2 a2 b2 c2 3 13) (c2 d2 e2 a2 b2 9 11) (b2 c2 d2 e2 a2 11 11)) (setf c1 (mod32+ (ripemd-160-regs-b regs) (mod32+ c1 d2)) (ripemd-160-regs-b regs) (mod32+ (ripemd-160-regs-c regs) (mod32+ d1 e2)) (ripemd-160-regs-c regs) (mod32+ (ripemd-160-regs-d regs) (mod32+ e1 a2)) (ripemd-160-regs-d regs) (mod32+ (ripemd-160-regs-e regs) (mod32+ a1 b2)) (ripemd-160-regs-e regs) (mod32+ (ripemd-160-regs-a regs) (mod32+ b1 c2)) (ripemd-160-regs-a regs) c1) regs)))) (defstruct (ripemd-160 (:constructor %make-ripemd-160-digest nil) (:constructor %make-ripemd-160-state (regs amount block buffer buffer-index)) (:copier nil) (:include mdx)) (regs (initial-ripemd-160-regs) :type ripemd-160-regs :read-only t) (block (make-array 16 :element-type '(unsigned-byte 32)) :type (simple-array (unsigned-byte 32) (16)) :read-only t)) (defmethod reinitialize-instance ((state ripemd-160) &rest initargs) (declare (ignore initargs)) (replace (ripemd-160-regs state) +pristine-ripemd-160-registers+) (setf (ripemd-160-amount state) 0 (ripemd-160-buffer-index state) 0) state) (defmethod copy-digest ((state ripemd-160) &optional copy) (check-type copy (or null ripemd-160)) (cond (copy (replace (ripemd-160-regs copy) (ripemd-160-regs state)) (replace (ripemd-160-buffer copy) (ripemd-160-buffer state)) (setf (ripemd-160-amount copy) (ripemd-160-amount state) (ripemd-160-buffer-index copy) (ripemd-160-buffer-index state)) copy) (t (%make-ripemd-160-state (copy-seq (ripemd-160-regs state)) (ripemd-160-amount state) (copy-seq (ripemd-160-block state)) (copy-seq (ripemd-160-buffer state)) (ripemd-160-buffer-index state))))) (define-digest-updater ripemd-160 "Update the given ripemd-160-state from sequence, which is either a simple-string or a simple-array with element-type (unsigned-byte 8), bounded by start and end, which must be numeric bounding-indices." (flet ((compress (state sequence offset) (let ((block (ripemd-160-block state))) (fill-block-ub8-le block sequence offset) (update-ripemd-160-block (ripemd-160-regs state) block)))) (declare (dynamic-extent #'compress)) (declare (notinline mdx-updater)) (mdx-updater state #'compress sequence start end))) (define-digest-finalizer (ripemd-160 20) "If the given ripemd-160-state has not already been finalized, finalize it, by processing any remaining input in its buffer, with suitable padding and appended bit-length, as specified by the RIPEMD-160 standard. The resulting RIPEMD-160 message-digest is returned as an array of twenty (unsigned-byte 8) values. Calling `update-ripemd-160-state' after a call to `finalize-ripemd-160-state' results in unspecified behaviour." (let ((regs (ripemd-160-regs state)) (block (ripemd-160-block state)) (buffer (ripemd-160-buffer state)) (buffer-index (ripemd-160-buffer-index state)) (total-length (* 8 (ripemd-160-amount state)))) (declare (type ripemd-160-regs regs) (type (integer 0 63) buffer-index) (type (simple-array (unsigned-byte 32) (16)) block) (type (simple-array (unsigned-byte 8) (*)) buffer)) ;; Add mandatory bit 1 padding (setf (aref buffer buffer-index) #x80) ;; Fill with 0 bit padding (loop for index of-type (integer 0 64) from (1+ buffer-index) below 64 do (setf (aref buffer index) #x00)) (fill-block-ub8-le block buffer 0) ;; Flush block first if length wouldn't fit (when (>= buffer-index 56) (update-ripemd-160-block regs block) ;; Create new fully 0 padded block (loop for index of-type (integer 0 16) from 0 below 16 do (setf (aref block index) #x00000000))) ;; Add 64bit message bit length (store-data-length block total-length 14) ;; Flush last block (update-ripemd-160-block regs block) ;; Done, remember digest for later calls (finalize-registers state regs))) (defdigest ripemd-160 :digest-length 20 :block-length 64) ironclad-0.57/src/digests/sha1.lisp000066400000000000000000000216721420372057600172340ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; This is an implementation of the US Secure Hash Algorithm 1 (SHA1), ;;;; defined in RFC 3174, written by D. Eastlake and P. Jones, September ;;;; 2001. The RFC was based on the document "Secure Hash Standard", ;;;; United States of America, National Institute of Science and Technology, ;;;; Federal Information Processing Standard (FIPS) 180-1, April 1993. ;;;; ;;;; It was written by Nathan J. Froyd, with many of the main ideas and ;;;; functions grabbed from Pierre R. Mai's CL implementation of MD5, ;;;; available at http://www.pmsf.de/pmai/MD5.html. ;;;; ;;;; This implementation should work on any conforming Common Lisp ;;;; implementation, but it has been optimized for CMU CL and SBCL. ;;;; ;;;; The implementation makes heavy use of (UNSIGNED-BYTE 32) arithmetic; ;;;; if your CL implementation does not implement unboxed arithmetic on ;;;; such numbers, performance will likely be greater in a 16-bit ;;;; implementation. ;;;; ;;;; This software is "as is", and has no warranty of any kind. The ;;;; authors assume no responsibility for the consequences of any use ;;;; of this software. (in-package :crypto) ;;; nonlinear functions (defconstant +k1+ #x5a827999) (defconstant +k2+ #x6ed9eba1) (defconstant +k3+ #x8f1bbcdc) (defconstant +k4+ #xca62c1d6) ;;; working set (define-digest-registers (sha1 :endian :big) (a #x67452301) (b #xefcdab89) (c #x98badcfe) (d #x10325476) (e #xc3d2e1f0)) (defconst +pristine-sha1-registers+ (initial-sha1-regs)) (defun update-sha1-block (regs block) (declare (type sha1-regs regs) (type (simple-array (unsigned-byte 32) (80)) block) #.(burn-baby-burn)) ;; FIXME: There must be a better way to do this ;; per-implementation/architecture specialization. #+(and sbcl x86-64 ironclad-assembly) (%update-sha1-block regs block) #-(and sbcl x86-64 ironclad-assembly) (let ((a (sha1-regs-a regs)) (b (sha1-regs-b regs)) (c (sha1-regs-c regs)) (d (sha1-regs-d regs)) (e (sha1-regs-e regs))) (macrolet ((sha1-rounds (block func constant low high &rest initial-order) ;; Yay for "implementation-dependent" behavior (6.1.1.4). (let ((xvars (apply #'make-circular-list initial-order))) (loop for i from low upto high for vars on xvars by #'cddddr collect (let ((a-var (first vars)) (b-var (second vars)) (c-var (third vars)) (d-var (fourth vars)) (e-var (fifth vars))) `(setf ,e-var (mod32+ (rol32 ,a-var 5) (mod32+ (mod32+ (,func ,b-var ,c-var ,d-var) ,e-var) (mod32+ (aref ,block ,i) ,constant))) ,b-var (rol32 ,b-var 30))) into forms finally (return `(progn ,@forms)))))) (flet ((f1 (x y z) (declare (type (unsigned-byte 32) x y z)) #+cmu (kernel:32bit-logical-xor z (kernel:32bit-logical-and x (kernel:32bit-logical-xor y z))) #-cmu (logxor z (logand x (logxor y z)))) (f2 (x y z) (declare (type (unsigned-byte 32) x y z)) #+cmu (kernel:32bit-logical-xor x (kernel:32bit-logical-xor y z)) #-cmu (ldb (byte 32 0) (logxor x y z))) (f3 (x y z) (declare (type (unsigned-byte 32) x y z)) #+cmu (kernel:32bit-logical-or (kernel:32bit-logical-or (kernel:32bit-logical-and x y) (kernel:32bit-logical-and x z)) (kernel:32bit-logical-and y z)) #-cmu (ldb (byte 32 0) (logior (logand x y) (logand x z) (logand y z))))) #+ironclad-fast-mod32-arithmetic (declare (inline f1 f2 f3)) ;; core of the algorithm (sha1-rounds block f1 +k1+ 0 19 a b c d e) (sha1-rounds block f2 +k2+ 20 39 a b c d e) (sha1-rounds block f3 +k3+ 40 59 a b c d e) (sha1-rounds block f2 +k4+ 60 79 a b c d e) ;; update and return (setf (sha1-regs-a regs) (mod32+ (sha1-regs-a regs) a) (sha1-regs-b regs) (mod32+ (sha1-regs-b regs) b) (sha1-regs-c regs) (mod32+ (sha1-regs-c regs) c) (sha1-regs-d regs) (mod32+ (sha1-regs-d regs) d) (sha1-regs-e regs) (mod32+ (sha1-regs-e regs) e)) regs)))) ;; ugh. #+(and ironclad-fast-mod32-arithmetic (not (and sbcl (or x86 x86-64)))) (declaim (inline expand-block)) (defun expand-block (block) "Expand the first 16 words in BLOCK to fill the entire 80 word space available." (declare (type (simple-array (unsigned-byte 32) (80)) block) #.(burn-baby-burn)) (loop for i of-type (integer 16 80) from 16 below 80 do (setf (aref block i) (rol32 #+cmu (kernel:32bit-logical-xor (kernel:32bit-logical-xor (aref block (- i 3)) (aref block (- i 8))) (kernel:32bit-logical-xor (aref block (- i 14)) (aref block (- i 16)))) #-cmu (ldb (byte 32 0) (logxor (aref block (- i 3)) (aref block (- i 8)) (aref block (- i 14)) (aref block (- i 16)))) 1))) (values)) ;;; mid-level (defstruct (sha1 (:constructor %make-sha1-digest nil) (:constructor %make-sha1-state (regs amount block buffer buffer-index)) (:copier nil) (:include mdx)) (regs (initial-sha1-regs) :type sha1-regs :read-only t) (block (make-array 80 :element-type '(unsigned-byte 32)) :type (simple-array (unsigned-byte 32) (80)) :read-only t)) (defmethod reinitialize-instance ((state sha1) &rest initargs) (declare (ignore initargs)) (replace (sha1-regs state) +pristine-sha1-registers+) (setf (sha1-amount state) 0 (sha1-buffer-index state) 0) state) (defmethod copy-digest ((state sha1) &optional copy) (check-type copy (or null sha1)) (cond (copy (replace (sha1-regs copy) (sha1-regs state)) (replace (sha1-buffer copy) (sha1-buffer state)) (setf (sha1-amount copy) (sha1-amount state) (sha1-buffer-index copy) (sha1-buffer-index state)) copy) (t (%make-sha1-state (copy-seq (sha1-regs state)) (sha1-amount state) (copy-seq (sha1-block state)) (copy-seq (sha1-buffer state)) (sha1-buffer-index state))))) (define-digest-updater sha1 (flet ((compress (state sequence offset) (let ((block (sha1-block state))) (fill-block-ub8-be block sequence offset) (expand-block block) (update-sha1-block (sha1-regs state) block)))) (declare (dynamic-extent #'compress)) (declare (notinline mdx-updater)) (mdx-updater state #'compress sequence start end))) (define-digest-finalizer (sha1 20) (let ((regs (sha1-regs state)) (block (sha1-block state)) (buffer (sha1-buffer state)) (buffer-index (sha1-buffer-index state)) (total-length (* 8 (sha1-amount state)))) (declare (type sha1-regs regs) (type (integer 0 63) buffer-index) (type (simple-array (unsigned-byte 32) (80)) block) (type (simple-array (unsigned-byte 8) (64)) buffer)) (declare (notinline update-sha1-block)) (setf (aref buffer buffer-index) #x80) (when (> buffer-index 55) (loop for index of-type (integer 0 64) from (1+ buffer-index) below 64 do (setf (aref buffer index) #x00)) (fill-block-ub8-be block buffer 0) (expand-block block) (update-sha1-block regs block) (loop for index of-type (integer 0 16) from 0 below 16 do (setf (aref block index) #x00000000))) (when (<= buffer-index 55) (loop for index of-type (integer 0 64) from (1+ buffer-index) below 64 do (setf (aref buffer index) #x00)) ;; copy the data to BLOCK prematurely (fill-block-ub8-be block buffer 0)) ;; fill in the remaining block data (store-data-length block total-length 14 t) (expand-block block) (update-sha1-block regs block) (finalize-registers state regs))) (defdigest sha1 :digest-length 20 :block-length 64) ironclad-0.57/src/digests/sha256.lisp000066400000000000000000000176551420372057600174160ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; sha256.lisp -- implementation of SHA-2/256 from NIST (in-package :crypto) (in-ironclad-readtable) (define-digest-registers (sha224 :endian :big :digest-registers 7) (a #xc1059ed8) (b #x367cd507) (c #x3070dd17) (d #xf70e5939) (e #xffc00b31) (f #x68581511) (g #x64f98fa7) (h #xbefa4fa4)) (defconst +pristine-sha224-registers+ (initial-sha224-regs)) (define-digest-registers (sha256 :endian :big) (a #x6a09e667) (b #xbb67ae85) (c #x3c6ef372) (d #xa54ff53a) (e #x510e527f) (f #x9b05688c) (g #x1f83d9ab) (h #x5be0cd19)) (defconst +pristine-sha256-registers+ (initial-sha256-regs)) (defconst +sha256-round-constants+ #32@(#x428A2F98 #x71374491 #xB5C0FBCF #xE9B5DBA5 #x3956C25B #x59F111F1 #x923F82A4 #xAB1C5ED5 #xD807AA98 #x12835B01 #x243185BE #x550C7DC3 #x72BE5D74 #x80DEB1FE #x9BDC06A7 #xC19BF174 #xE49B69C1 #xEFBE4786 #x0FC19DC6 #x240CA1CC #x2DE92C6F #x4A7484AA #x5CB0A9DC #x76F988DA #x983E5152 #xA831C66D #xB00327C8 #xBF597FC7 #xC6E00BF3 #xD5A79147 #x06CA6351 #x14292967 #x27B70A85 #x2E1B2138 #x4D2C6DFC #x53380D13 #x650A7354 #x766A0ABB #x81C2C92E #x92722C85 #xA2BFE8A1 #xA81A664B #xC24B8B70 #xC76C51A3 #xD192E819 #xD6990624 #xF40E3585 #x106AA070 #x19A4C116 #x1E376C08 #x2748774C #x34B0BCB5 #x391C0CB3 #x4ED8AA4A #x5B9CCA4F #x682E6FF3 #x748F82EE #x78A5636F #x84C87814 #x8CC70208 #x90BEFFFA #xA4506CEB #xBEF9A3F7 #xC67178F2)) (defun update-sha256-block (regs block) (declare (type sha256-regs regs)) (declare (type (simple-array (unsigned-byte 32) (64)) block) #.(burn-baby-burn)) (let ((a (sha256-regs-a regs)) (b (sha256-regs-b regs)) (c (sha256-regs-c regs)) (d (sha256-regs-d regs)) (e (sha256-regs-e regs)) (f (sha256-regs-f regs)) (g (sha256-regs-g regs)) (h (sha256-regs-h regs))) (flet ((ch (x y z) #+cmu (kernel:32bit-logical-xor z (kernel:32bit-logical-and x (kernel:32bit-logical-xor y z))) #-cmu (logxor z (logand x (logxor y z)))) (maj (x y z) (ldb (byte 32 0) (logxor (logand x y) (logand x z) (logand y z)))) (sigma0 (x) (logxor (rol32 x 30) (rol32 x 19) (rol32 x 10))) (sigma1 (x) (logxor (rol32 x 26) (rol32 x 21) (rol32 x 7)))) #+ironclad-fast-mod32-arithmetic (declare (inline ch maj sigma0 sigma1)) (macrolet ((sha256-round (i a b c d e f g h) `(let ((x (mod32+ (sigma1 ,e) (mod32+ (ch ,e ,f ,g) (mod32+ ,h (mod32+ (aref block ,i) (aref +sha256-round-constants+ ,i))))))) (declare (type (unsigned-byte 32) x)) (setf ,d (mod32+ ,d x) ,h (mod32+ (sigma0 ,a) (mod32+ (maj ,a ,b ,c) x)))))) ;; Yay for "implementation-dependent" behavior (6.1.1.4). #.(let ((xvars (make-circular-list 'a 'b 'c 'd 'e 'f 'g 'h))) (loop for i from 0 below 64 for vars on xvars by #'(lambda (x) (nthcdr 7 x)) collect `(sha256-round ,i ,@(circular-list-subseq vars 0 8)) into forms finally (return `(progn ,@forms)))) #.(loop for slot in '(a b c d e f g h) collect (let ((regs-accessor (intern (format nil "~A-~A" '#:sha256-regs slot)))) `(setf (,regs-accessor regs) (mod32+ (,regs-accessor regs) ,slot))) into forms finally (return `(progn ,@forms))) regs)))) (defun sha256-expand-block (block) (declare (type (simple-array (unsigned-byte 32) (64)) block) #.(burn-baby-burn)) (flet ((sigma0 (x) (declare (type (unsigned-byte 32) x)) (logxor (rol32 x 25) (rol32 x 14) (mod32ash x -3))) (sigma1 (x) (declare (type (unsigned-byte 32) x)) (logxor (rol32 x 15) (rol32 x 13) (mod32ash x -10)))) #+ironclad-fast-mod32-arithmetic (declare (inline sigma0 sigma1)) (loop for i from 16 below 64 do (setf (aref block i) (mod32+ (sigma1 (aref block (- i 2))) (mod32+ (aref block (- i 7)) (mod32+ (sigma0 (aref block (- i 15))) (aref block (- i 16))))))) (values))) ;;; mid-level (defstruct (sha256 (:constructor %make-sha256-digest nil) (:copier nil) (:include mdx)) (regs (initial-sha256-regs) :type sha256-regs :read-only t) (block (make-array 64 :element-type '(unsigned-byte 32)) :type (simple-array (unsigned-byte 32) (64)) :read-only t)) (defstruct (sha224 (:include sha256) (:constructor %make-sha224-digest (&aux (regs (initial-sha224-regs)))) (:copier nil)) ;; No slots. ) (defmethod reinitialize-instance ((state sha256) &rest initargs) (declare (ignore initargs)) (replace (sha256-regs state) +pristine-sha256-registers+) (setf (sha256-amount state) 0 (sha256-buffer-index state) 0) state) (defmethod reinitialize-instance ((state sha224) &rest initargs) (declare (ignore initargs)) (replace (sha224-regs state) +pristine-sha224-registers+) (setf (sha224-amount state) 0 (sha224-buffer-index state) 0) state) (defmethod copy-digest ((state sha256) &optional copy) (check-type copy (or null sha256)) (let ((copy (if copy copy (etypecase state (sha224 (%make-sha224-digest)) (sha256 (%make-sha256-digest)))))) (declare (type sha256 copy)) (replace (sha256-regs copy) (sha256-regs state)) (replace (sha256-buffer copy) (sha256-buffer state)) (setf (sha256-amount copy) (sha256-amount state) (sha256-buffer-index copy) (sha256-buffer-index state)) copy)) (define-digest-updater sha256 (flet ((compress (state sequence offset) (let ((block (sha256-block state))) (fill-block-ub8-be block sequence offset) (sha256-expand-block block) (update-sha256-block (sha256-regs state) block)))) (declare (dynamic-extent #'compress)) (declare (notinline mdx-updater)) (mdx-updater state #'compress sequence start end))) (define-digest-finalizer ((sha256 32) (sha224 28)) (let ((regs (sha256-regs state)) (block (sha256-block state)) (buffer (sha256-buffer state)) (buffer-index (sha256-buffer-index state)) (total-length (* 8 (sha256-amount state)))) (declare (type sha256-regs regs) (type (integer 0 63) buffer-index) (type (simple-array (unsigned-byte 32) (64)) block) (type (simple-array (unsigned-byte 8) (64)) buffer)) (setf (aref buffer buffer-index) #x80) (when (> buffer-index 55) (loop for index of-type (integer 0 64) from (1+ buffer-index) below 64 do (setf (aref buffer index) #x00)) (fill-block-ub8-be block buffer 0) (sha256-expand-block block) (update-sha256-block regs block) (loop for index of-type (integer 0 16) from 0 below 16 do (setf (aref block index) #x00000000))) (when (<= buffer-index 55) (loop for index of-type (integer 0 64) from (1+ buffer-index) below 64 do (setf (aref buffer index) #x00)) ;; copy the data to BLOCK prematurely (fill-block-ub8-be block buffer 0)) ;; fill in the remaining block data (store-data-length block total-length 14 t) (sha256-expand-block block) (update-sha256-block regs block) (finalize-registers state regs))) (defdigest sha256 :digest-length 32 :block-length 64) (defdigest sha224 :digest-length 28 :block-length 64) ironclad-0.57/src/digests/sha3.lisp000066400000000000000000000536301420372057600172350ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; sha3.lisp -- implementation of SHA-3 from NIST (in-package :crypto) ;;; ;;; Keccak state and parameters ;;; (eval-when (:compile-toplevel :load-toplevel :execute) (defconstant +keccak-state-columns+ 5) (defconstant +keccak-state-rows+ 5) (defconstant +keccak-state-lanes+ 25) (defconstant +keccak-lane-width+ 64) (defconstant +keccak-lane-byte-width+ 8) (defconstant +keccak-rounds+ 24)) (deftype keccak-lane () `(unsigned-byte ,+keccak-lane-width+)) (deftype keccak-state () `(simple-array keccak-lane (,+keccak-state-lanes+))) (eval-when (:compile-toplevel :load-toplevel :execute) (defconst +keccak-rotate-offsets+ (make-array (list +keccak-state-columns+ +keccak-state-rows+) :element-type '(unsigned-byte 8) :initial-contents '(( 0 36 3 41 18) ( 1 44 10 45 2) (62 6 43 15 61) (28 55 25 21 56) (27 20 39 8 14)))) (defconst +keccak-round-constants+ (make-array 24 :element-type 'keccak-lane :initial-contents '(#x0000000000000001 #x0000000000008082 #x800000000000808a #x8000000080008000 #x000000000000808b #x0000000080000001 #x8000000080008081 #x8000000000008009 #x000000000000008a #x0000000000000088 #x0000000080008009 #x000000008000000a #x000000008000808b #x800000000000008b #x8000000000008089 #x8000000000008003 #x8000000000008002 #x8000000000000080 #x000000000000800a #x800000008000000a #x8000000080008081 #x8000000000008080 #x0000000080000001 #x8000000080008008)))) (defmacro get-keccak-rotate-offset (x y &environment env) (aref +keccak-rotate-offsets+ (eval (trivial-macroexpand-all x env)) (eval (trivial-macroexpand-all y env)))) (declaim (inline get-keccak-round-constant) (ftype (function ((integer 0 23)) keccak-lane) get-keccak-round-constant)) (defun get-keccak-round-constant (i) (declare (type (integer 0 23) i) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((constants (load-time-value +keccak-round-constants+ t))) (declare (type (simple-array keccak-lane (24)) constants)) (aref constants i))) (declaim (inline make-keccak-state) (ftype (function () keccak-state) make-keccak-state)) (defun make-keccak-state () (declare (optimize (speed 3) (space 0) (safety 0) (debug 0))) (make-array #.+keccak-state-lanes+ :element-type 'keccak-lane :initial-element 0)) ;;; ;;; Transforming linear input/output to state array ;;; (defun keccak-state-merge-input (state bit-rate input start) (declare (type keccak-state state) (type (integer 0 1600) bit-rate) (type (simple-array (unsigned-byte 8) (*)) input) (type fixnum start) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((rate-bytes (truncate bit-rate 8))) (declare (type (integer 0 200) rate-bytes)) (dotimes (y +keccak-state-rows+) (dotimes (x +keccak-state-columns+) (let* ((element (+ (the fixnum (* y +keccak-state-columns+)) x)) (offset (* element +keccak-lane-byte-width+)) (index (the fixnum (+ start offset)))) (when (>= offset rate-bytes) (return-from keccak-state-merge-input)) (setf (aref state element) (logxor (aref state element) . #.(loop for byte-index from 0 below +keccak-lane-byte-width+ collect `(the keccak-lane (ash (aref input (+ index ,byte-index)) ,(* byte-index 8))))))))))) (defun keccak-state-extract-output (state output-bytes) (let ((digest (make-array (list output-bytes) :element-type '(unsigned-byte 8)))) (dotimes (x +keccak-state-columns+) (dotimes (y +keccak-state-rows+) (let* ((element (+ (* y +keccak-state-columns+) x)) (offset (* element +keccak-lane-byte-width+))) (unless (>= offset output-bytes) (loop with value = (aref state element) for index from offset below (min (+ offset +keccak-lane-byte-width+) output-bytes) do (setf (aref digest index) (ldb (byte 8 0) value) value (ash value -8))))))) digest)) ;;; ;;; Keccak rounds ;;; (defmacro with-keccak-state-accessors ((&rest states) &body body) "Bind the contents of the state(s) array(s) to local variables, and save the content on normal form exit." (let ((bindings nil) (mappings nil) (save-forms nil)) (loop for state in states for map = (make-array '(#.+keccak-state-columns+ #.+keccak-state-rows+)) do (dotimes (y +keccak-state-rows+) (dotimes (x +keccak-state-columns+) (let ((sym (make-symbol (format nil "~A-~D-~D" state x y)))) (setf (aref map x y) sym) (push `(,sym (aref ,state ,(+ x (* y +keccak-state-columns+)))) bindings) (push `(setf (aref ,state ,(+ x (* y +keccak-state-columns+))) ,sym) save-forms)))) (push (cons state map) mappings)) `(let (,@bindings) (declare (ignorable ,@(mapcar #'car bindings)) (type keccak-lane ,@(mapcar #'car bindings))) (macrolet ((state-aref (state x y &environment env) (let ((entry (assoc state ',mappings))) (unless entry (error 'ironclad-error :format-control "Strange: ~S!" :format-arguments (list state))) (aref (cdr entry) (eval (trivial-macroexpand-all x env)) (eval (trivial-macroexpand-all y env)))))) (multiple-value-prog1 (progn ,@body) ,@save-forms))))) (defmacro with-temp-keccak-state ((&rest temps) &body body) "Bind local variables for each temporary state." (let ((bindings nil) (mappings nil)) (loop for temp in temps for map = (make-array '(#.+keccak-state-columns+ #.+keccak-state-rows+)) do (dotimes (y +keccak-state-rows+) (dotimes (x +keccak-state-columns+) (let ((sym (make-symbol (format nil "~A-~D-~D" temp x y)))) (setf (aref map x y) sym) (push `(,sym 0) bindings)))) (push (cons temp map) mappings)) `(let (,@bindings) (declare (ignorable ,@(mapcar #'car bindings)) (type keccak-lane ,@(mapcar #'car bindings))) (macrolet ((temp-state-aref (temp x y &environment env) (let ((entry (assoc temp ',mappings))) (unless entry (error 'ironclad-error :format-control "Strange: ~S!" :format-arguments (list temp))) (aref (cdr entry) (eval (trivial-macroexpand-all x env)) (eval (trivial-macroexpand-all y env)))))) ,@body)))) (defmacro with-temp-keccak-rows ((&rest rows) &body body) "Bind local variables for each temporary row." (let ((bindings nil) (mappings nil)) (loop for row in rows for map = (make-array '(#.+keccak-state-columns+)) do (dotimes (x +keccak-state-columns+) (let ((sym (make-symbol (format nil "~A-~D" row x)))) (setf (aref map x) sym) (push `(,sym 0) bindings))) (push (cons row map) mappings)) `(let (,@bindings) (declare (ignorable ,@(mapcar #'car bindings)) (type keccak-lane ,@(mapcar #'car bindings))) (macrolet ((temp-row-aref (row x &environment env) (let ((entry (assoc row ',mappings))) (unless entry (error 'ironclad-error :format-control "Strange: ~S!" :format-arguments (list row))) (aref (cdr entry) (eval (trivial-macroexpand-all x env)))))) ,@body)))) (declaim (ftype (function (keccak-state)) keccak-rounds)) (defun keccak-rounds (state) (declare (type keccak-state state) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (with-keccak-state-accessors (state) (with-temp-keccak-state (b) (with-temp-keccak-rows (c d) (dotimes (i #.+keccak-rounds+) (dotimes-unrolled (x +keccak-state-columns+) (setf (temp-row-aref c x) (logxor (state-aref state x 0) (state-aref state x 1) (state-aref state x 2) (state-aref state x 3) (state-aref state x 4)))) (dotimes-unrolled (x +keccak-state-columns+) (setf (temp-row-aref d x) (logxor (temp-row-aref c (mod (+ +keccak-state-columns+ (1- x)) +keccak-state-columns+)) (rol64 (temp-row-aref c (mod (1+ x) +keccak-state-columns+)) 1)))) (dotimes-unrolled (x +keccak-state-columns+) (dotimes-unrolled (y +keccak-state-rows+) (setf (state-aref state x y) (logxor (state-aref state x y) (temp-row-aref d x))))) (dotimes-unrolled (x +keccak-state-columns+) (dotimes-unrolled (y +keccak-state-rows+) (setf (temp-state-aref b y (mod (+ (* 2 x) (* 3 y)) +keccak-state-rows+)) (rol64 (state-aref state x y) (get-keccak-rotate-offset x y))))) (dotimes-unrolled (x +keccak-state-columns+) (dotimes-unrolled (y +keccak-state-rows+) (setf (state-aref state x y) (logxor (temp-state-aref b x y) (logandc1 (temp-state-aref b (mod (1+ x) +keccak-state-columns+) y) (temp-state-aref b (mod (+ x 2) +keccak-state-columns+) y)))))) (setf (state-aref state 0 0) (logxor (state-aref state 0 0) (get-keccak-round-constant i))))))) (values)) ;;; ;;; Message Padding for last block ;;; (defun pad-message-to-width (message bit-width padding-type) (let* ((message-byte-length (length message)) (width-bytes (truncate bit-width 8)) (padding-bytes (- width-bytes (mod message-byte-length width-bytes))) (padded-message-byte-length (+ message-byte-length padding-bytes)) (padded-message (make-array padded-message-byte-length :element-type '(unsigned-byte 8)))) (replace padded-message message :end2 message-byte-length) (setf (aref padded-message message-byte-length) (ecase padding-type (:xof #x1f) (:keccak #x01) (:sha3 #x06))) (loop for index from (1+ message-byte-length) below padded-message-byte-length do (setf (aref padded-message index) #x00)) (setf (aref padded-message (1- padded-message-byte-length)) (logior #x80 (aref padded-message (1- padded-message-byte-length)))) padded-message)) ;;; ;;; SHA-3 ;;; (defstruct (sha3 (:constructor %make-sha3-digest nil) (:copier nil)) (state (make-keccak-state) :type keccak-state) (bit-rate 576 :type (integer 0 1600)) (buffer (make-array 200 :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (200))) (buffer-index 0 :type (integer 0 199)) (output-length 64)) (defstruct (sha3/384 (:include sha3) (:constructor %make-sha3/384-digest (&aux (bit-rate 832) (output-length 48))) (:copier nil))) (defstruct (sha3/256 (:include sha3) (:constructor %make-sha3/256-digest (&aux (bit-rate 1088) (output-length 32))) (:copier nil))) (defstruct (sha3/224 (:include sha3) (:constructor %make-sha3/224-digest (&aux (bit-rate 1152) (output-length 28))) (:copier nil))) (defstruct (keccak (:include sha3) (:constructor %make-keccak-digest (&aux (bit-rate 576) (output-length 64))) (:copier nil))) (defstruct (keccak/384 (:include sha3) (:constructor %make-keccak/384-digest (&aux (bit-rate 832) (output-length 48))) (:copier nil))) (defstruct (keccak/256 (:include sha3) (:constructor %make-keccak/256-digest (&aux (bit-rate 1088) (output-length 32))) (:copier nil))) (defstruct (keccak/224 (:include sha3) (:constructor %make-keccak/224-digest (&aux (bit-rate 1152) (output-length 28))) (:copier nil))) (defstruct (shake256 (:include sha3) (:constructor %make-shake256 (bit-rate output-length)) (:copier nil))) (defstruct (shake128 (:include sha3) (:constructor %make-shake128 (bit-rate output-length)) (:copier nil))) (defun %make-shake256-digest (&key (output-length 32)) (%make-shake256 1088 output-length)) (defun %make-shake128-digest (&key (output-length 16)) (%make-shake128 1344 output-length)) (defmethod block-length ((state shake256)) 136) (defmethod block-length ((state shake128)) 168) (defmethod digest-length ((state shake256)) (sha3-output-length state)) (defmethod digest-length ((state shake128)) (sha3-output-length state)) (defmethod reinitialize-instance ((state sha3) &rest initargs) (declare (ignore initargs)) (setf (sha3-state state) (make-keccak-state)) (setf (sha3-buffer-index state) 0) state) (defmethod copy-digest ((state sha3) &optional copy) (check-type copy (or null sha3)) (let ((copy (if copy copy (etypecase state (shake128 (%make-shake128-digest)) (shake256 (%make-shake256-digest)) (keccak/224 (%make-keccak/224-digest)) (keccak/256 (%make-keccak/256-digest)) (keccak/384 (%make-keccak/384-digest)) (keccak (%make-keccak-digest)) (sha3/224 (%make-sha3/224-digest)) (sha3/256 (%make-sha3/256-digest)) (sha3/384 (%make-sha3/384-digest)) (sha3 (%make-sha3-digest)))))) (declare (type sha3 copy)) (replace (sha3-state copy) (sha3-state state)) (setf (sha3-bit-rate copy) (sha3-bit-rate state)) (replace (sha3-buffer copy) (sha3-buffer state)) (setf (sha3-buffer-index copy) (sha3-buffer-index state)) (setf (sha3-output-length copy) (sha3-output-length state)) copy)) (defun sha3-update (state vector start end) (declare (type sha3 state) (type (simple-array (unsigned-byte 8) (*)) vector) (type fixnum start end) (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let* ((keccak-state (sha3-state state)) (buffer (sha3-buffer state)) (buffer-index (sha3-buffer-index state)) (bit-rate (sha3-bit-rate state)) (rate-bytes (truncate bit-rate 8))) (declare (type keccak-state keccak-state) (type (simple-array (unsigned-byte 8) (200)) buffer) (type (integer 0 199) buffer-index) (type (integer 0 1600) bit-rate) (type (integer 0 200) rate-bytes)) ;; Handle potential remaining bytes (unless (zerop buffer-index) (let ((remainder (- rate-bytes buffer-index)) (length (- end start))) (declare (type fixnum remainder length)) (replace buffer vector :start1 buffer-index :end1 rate-bytes :start2 start :end2 end) ;; Return if still unfilled buffer (when (< length remainder) (incf (sha3-buffer-index state) length) (return-from sha3-update)) ;; Else handle now complete buffer (keccak-state-merge-input keccak-state bit-rate buffer 0) (keccak-rounds keccak-state) (setf (sha3-buffer-index state) 0) (setf start (+ start remainder)))) ;; Now handle full blocks, stuff any remainder into buffer (loop for block-offset of-type fixnum from start below end by rate-bytes do (cond ((<= (+ block-offset rate-bytes) end) (keccak-state-merge-input keccak-state bit-rate vector block-offset) (keccak-rounds keccak-state)) (t (replace buffer vector :start1 0 :end1 rate-bytes :start2 block-offset :end2 end) (setf (sha3-buffer-index state) (- end block-offset)))))) (values)) (defun sha3-finalize (state digest digest-start) (declare (type sha3 state) (type (simple-array (unsigned-byte 8) (*)) digest) (type integer digest-start) (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let ((padding-type (typecase state (shake128 :xof) (shake256 :xof) (keccak/224 :keccak) (keccak/256 :keccak) (keccak/384 :keccak) (keccak :keccak) (t :sha3))) (keccak-state (sha3-state state)) (buffer (sha3-buffer state)) (buffer-index (sha3-buffer-index state)) (bit-rate (sha3-bit-rate state)) (output-byte-length (digest-length state))) (declare (type keccak-state keccak-state) (type (simple-array (unsigned-byte 8) (200)) buffer) (type (integer 0 199) buffer-index) (type (integer 0 1600) bit-rate) (type (integer 0 64) output-byte-length)) ;; Process remaining data after padding it (keccak-state-merge-input keccak-state bit-rate (pad-message-to-width (subseq buffer 0 buffer-index) bit-rate padding-type) 0) (keccak-rounds keccak-state) (setf (sha3-buffer-index state) 0) ;; Get output (let ((output-size 0) (chunk-size (truncate bit-rate 8))) (loop until (= output-size output-byte-length) do (let* ((n (min (- output-byte-length output-size) chunk-size)) (output (keccak-state-extract-output keccak-state n))) (replace digest output :start1 (+ digest-start output-size) :end2 n) (incf output-size n) (keccak-rounds keccak-state)))) digest)) (define-digest-updater sha3 (sha3-update state sequence start end)) (define-digest-finalizer ((sha3 64) (sha3/384 48) (sha3/256 32) (sha3/224 28) (keccak 64) (keccak/384 48) (keccak/256 32) (keccak/224 28)) (sha3-finalize state digest digest-start)) (defdigest sha3 :digest-length 64 :block-length 72) (defdigest sha3/384 :digest-length 48 :block-length 104) (defdigest sha3/256 :digest-length 32 :block-length 136) (defdigest sha3/224 :digest-length 28 :block-length 144) (defdigest keccak :digest-length 64 :block-length 72) (defdigest keccak/384 :digest-length 48 :block-length 104) (defdigest keccak/256 :digest-length 32 :block-length 136) (defdigest keccak/224 :digest-length 28 :block-length 144) (defmethod produce-digest ((state shake256) &key digest (digest-start 0)) (let ((digest-size (digest-length state)) (state-copy (copy-digest state))) (if digest (if (> digest-size (- (length digest) digest-start)) (error 'insufficient-buffer-space :buffer digest :start digest-start :length digest-size) (sha3-finalize state-copy digest digest-start)) (sha3-finalize state-copy (make-array digest-size :element-type '(unsigned-byte 8)) 0)))) (defmethod produce-digest ((state shake128) &key digest (digest-start 0)) (let ((digest-size (digest-length state)) (state-copy (copy-digest state))) (if digest (if (> digest-size (- (length digest) digest-start)) (error 'insufficient-buffer-space :buffer digest :start digest-start :length digest-size) (sha3-finalize state-copy digest digest-start)) (sha3-finalize state-copy (make-array digest-size :element-type '(unsigned-byte 8)) 0)))) (setf (get 'shake256 '%digest-length) 32) (setf (get 'shake256 '%make-digest) (symbol-function '%make-shake256-digest)) (setf (get 'shake128 '%digest-length) 16) (setf (get 'shake128 '%make-digest) (symbol-function '%make-shake128-digest)) ironclad-0.57/src/digests/sha512.lisp000066400000000000000000000223641420372057600174020ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;; sha512.lisp -- implementation of SHA-384/512 from NIST (in-package :crypto) (in-ironclad-readtable) (define-digest-registers (sha384 :endian :big :size 8 :digest-registers 6) (a #xCBBB9D5DC1059ED8) (b #x629A292A367CD507) (c #x9159015A3070DD17) (d #x152FECD8F70E5939) (e #x67332667FFC00B31) (f #x8EB44A8768581511) (g #xDB0C2E0D64F98FA7) (h #x47B5481DBEFA4FA4)) (defconst +pristine-sha384-registers+ (initial-sha384-regs)) (define-digest-registers (sha512 :endian :big :size 8) (a #x6A09E667F3BCC908) (b #xBB67AE8584CAA73B) (c #x3C6EF372FE94F82B) (d #xA54FF53A5F1D36F1) (e #x510E527FADE682D1) (f #x9B05688C2B3E6C1F) (g #x1F83D9ABFB41BD6B) (h #x5BE0CD19137E2179)) (defconst +pristine-sha512-registers+ (initial-sha512-regs)) (defconst +sha512-round-constants+ #64@(#x428A2F98D728AE22 #x7137449123EF65CD #xB5C0FBCFEC4D3B2F #xE9B5DBA58189DBBC #x3956C25BF348B538 #x59F111F1B605D019 #x923F82A4AF194F9B #xAB1C5ED5DA6D8118 #xD807AA98A3030242 #x12835B0145706FBE #x243185BE4EE4B28C #x550C7DC3D5FFB4E2 #x72BE5D74F27B896F #x80DEB1FE3B1696B1 #x9BDC06A725C71235 #xC19BF174CF692694 #xE49B69C19EF14AD2 #xEFBE4786384F25E3 #x0FC19DC68B8CD5B5 #x240CA1CC77AC9C65 #x2DE92C6F592B0275 #x4A7484AA6EA6E483 #x5CB0A9DCBD41FBD4 #x76F988DA831153B5 #x983E5152EE66DFAB #xA831C66D2DB43210 #xB00327C898FB213F #xBF597FC7BEEF0EE4 #xC6E00BF33DA88FC2 #xD5A79147930AA725 #x06CA6351E003826F #x142929670A0E6E70 #x27B70A8546D22FFC #x2E1B21385C26C926 #x4D2C6DFC5AC42AED #x53380D139D95B3DF #x650A73548BAF63DE #x766A0ABB3C77B2A8 #x81C2C92E47EDAEE6 #x92722C851482353B #xA2BFE8A14CF10364 #xA81A664BBC423001 #xC24B8B70D0F89791 #xC76C51A30654BE30 #xD192E819D6EF5218 #xD69906245565A910 #xF40E35855771202A #x106AA07032BBD1B8 #x19A4C116B8D2D0C8 #x1E376C085141AB53 #x2748774CDF8EEB99 #x34B0BCB5E19B48A8 #x391C0CB3C5C95A63 #x4ED8AA4AE3418ACB #x5B9CCA4F7763E373 #x682E6FF3D6B2B8A3 #x748F82EE5DEFB2FC #x78A5636F43172F60 #x84C87814A1F0AB72 #x8CC702081A6439EC #x90BEFFFA23631E28 #xA4506CEBDE82BDE9 #xBEF9A3F7B2C67915 #xC67178F2E372532B #xCA273ECEEA26619C #xD186B8C721C0C207 #xEADA7DD6CDE0EB1E #xF57D4F7FEE6ED178 #x06F067AA72176FBA #x0A637DC5A2C898A6 #x113F9804BEF90DAE #x1B710B35131C471B #x28DB77F523047D84 #x32CAAB7B40C72493 #x3C9EBE0A15C9BEBC #x431D67C49C100D4C #x4CC5D4BECB3E42B6 #x597F299CFC657E2A #x5FCB6FAB3AD6FAEC #x6C44198C4A475817)) (defun update-sha512-block (regs block) (declare (type sha512-regs regs)) (declare (type (simple-array (unsigned-byte 64) (80)) block) #.(burn-baby-burn)) (let ((a (sha512-regs-a regs)) (b (sha512-regs-b regs)) (c (sha512-regs-c regs)) (d (sha512-regs-d regs)) (e (sha512-regs-e regs)) (f (sha512-regs-f regs)) (g (sha512-regs-g regs)) (h (sha512-regs-h regs))) (flet ((rho (x r1 r2 r3) (logxor (ror64 x r1) (ror64 x r2) (ror64 x r3)))) ;; FIXME: Implement inline 64-bit rotates for x86-64 SBCL. ;; #+ironclad-fast-mod64-arithmetic ;; (declare (inline rho)) (macrolet ((sha512-round (i a b c d e f g h) `(let ((x (mod64+ (rho ,e 14 18 41) (mod64+ (logxor (logand ,e ,f) (logandc1 ,e ,g)) (mod64+ (aref block ,i) (aref +sha512-round-constants+ ,i)))))) (setf ,d (mod64+ ,d (mod64+ ,h x)) ,h (mod64+ ,h (mod64+ x (mod64+ (rho ,a 28 34 39) (logxor (logand ,a ,b) (logand ,a ,c) (logand ,b ,c))))))))) #.(let ((xvars (make-circular-list 'a 'b 'c 'd 'e 'f 'g 'h))) (loop for i from 0 below 80 for vars on xvars by #'(lambda (x) (nthcdr 7 x)) collect `(sha512-round ,i ,@(circular-list-subseq vars 0 8)) into forms finally (return `(progn ,@forms)))) #.(loop for slot in '(a b c d e f g h) collect (let ((regs-accessor (intern (format nil "~A-~A" '#:sha512-regs slot)))) `(setf (,regs-accessor regs) (mod64+ (,regs-accessor regs) ,slot))) into forms finally (return `(progn ,@forms))))))) (defun sha512-expand-block (block) (declare (type (simple-array (unsigned-byte 64) (80)) block) #.(burn-baby-burn)) (flet ((sigma (x r1 r2 r3) (logxor (ror64 x r1) (ror64 x r2) (ash x (- r3))))) #+ironclad-fast-mod64-arithmetic (declare (inline sigma)) (loop for i from 16 below 80 do (setf (aref block i) (mod64+ (sigma (aref block (- i 2)) 19 61 6) (mod64+ (aref block (- i 7)) (mod64+ (sigma (aref block (- i 15)) 1 8 7) (aref block (- i 16))))))) (values))) ;;; mid-level (defstruct (sha512 (:constructor %make-sha512-digest (&aux (buffer (make-array 128 :element-type '(unsigned-byte 8))))) (:copier nil) (:include mdx)) (regs (initial-sha512-regs) :type sha512-regs :read-only t) (block (make-array 80 :element-type '(unsigned-byte 64)) :read-only t :type (simple-array (unsigned-byte 64) (80)))) (defstruct (sha384 (:include sha512) (:constructor %make-sha384-digest (&aux (regs (initial-sha384-regs)) (buffer (make-array 128 :element-type '(unsigned-byte 8))))) (:copier nil)) ;; No slots. ) (defmethod reinitialize-instance ((state sha512) &rest initargs) (declare (ignore initargs)) ;; Some versions of Clozure CCL have a bug where the elements of ;; +PRISTINE-SHA512-REGISTERS+ are considered to be negative. Force ;; the compiler to see them as positive. #+ccl (let ((regs (sha512-regs state))) (dotimes (i (length +pristine-sha512-registers+)) (setf (aref regs i) (ldb (byte 64 0) (aref +pristine-sha512-registers+ i))))) #-ccl (replace (sha512-regs state) +pristine-sha512-registers+) (setf (sha512-amount state) 0 (sha512-buffer-index state) 0) state) (defmethod reinitialize-instance ((state sha384) &rest initargs) (declare (ignore initargs)) ;; Some versions of Clozure CCL have a bug where the elements of ;; +PRISTINE-SHA384-REGISTERS+ are considered to be negative. Force ;; the compiler to see them as positive. #+ccl (let ((regs (sha384-regs state))) (dotimes (i (length +pristine-sha384-registers+)) (setf (aref regs i) (ldb (byte 64 0) (aref +pristine-sha384-registers+ i))))) #-ccl (replace (sha384-regs state) +pristine-sha384-registers+) (setf (sha384-amount state) 0 (sha384-buffer-index state) 0) state) (defmethod copy-digest ((state sha512) &optional copy) (check-type copy (or null sha512)) (let ((copy (if copy copy (etypecase state (sha384 (%make-sha384-digest)) (sha512 (%make-sha512-digest)))))) (declare (type sha512 copy)) (replace (sha512-regs copy) (sha512-regs state)) (replace (sha512-buffer copy) (sha512-buffer state)) (setf (sha512-amount copy) (sha512-amount state) (sha512-buffer-index copy) (sha512-buffer-index state)) copy)) (define-digest-updater sha512 (flet ((compress (state sequence offset) (let ((block (sha512-block state))) (fill-block-ub8-be/64 block sequence offset) (sha512-expand-block block) (update-sha512-block (sha512-regs state) block)))) (declare (dynamic-extent #'compress)) (declare (notinline mdx-updater)) (mdx-updater state #'compress sequence start end))) (define-digest-finalizer ((sha512 64) (sha384 48)) (let ((regs (sha512-regs state)) (block (sha512-block state)) (buffer (sha512-buffer state)) (buffer-index (sha512-buffer-index state)) (total-length (* 8 (sha512-amount state)))) (declare (type sha512-regs regs) (type (integer 0 127) buffer-index) (type (simple-array (unsigned-byte 64) (80)) block) (type (simple-array (unsigned-byte 8) (128)) buffer)) (setf (aref buffer buffer-index) #x80) (when (> buffer-index 111) (loop for index of-type (integer 0 128) from (1+ buffer-index) below 128 do (setf (aref buffer index) #x00)) (fill-block-ub8-be/64 block buffer 0) (sha512-expand-block block) (update-sha512-block regs block) (loop for index of-type (integer 0 16) from 0 below 16 do (setf (aref block index) #x00000000))) (when (<= buffer-index 111) (loop for index of-type (integer 0 128) from (1+ buffer-index) below 128 do (setf (aref buffer index) #x00)) ;; copy the data to BLOCK prematurely (fill-block-ub8-be/64 block buffer 0)) ;; fill in the remaining block data (setf (aref block 15) total-length) (sha512-expand-block block) (update-sha512-block regs block) (finalize-registers state regs))) (defdigest sha512 :digest-length 64 :block-length 128) (defdigest sha384 :digest-length 48 :block-length 128) ironclad-0.57/src/digests/skein.lisp000066400000000000000000001032301420372057600175000ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; skein.lisp -- implementation of the Skein hash functions (in-package :crypto) (in-ironclad-readtable) ;;; Parameter identifiers (defconstant +skein-key+ 0) (defconstant +skein-cfg+ 4) (defconstant +skein-prs+ 8) (defconstant +skein-pk+ 12) (defconstant +skein-kdf+ 16) (defconstant +skein-non+ 20) (defconstant +skein-msg+ 48) (defconstant +skein-out+ 63) ;;; Initial values (declaim (type (simple-array (unsigned-byte 8) (32)) +skein256-iv-128+ +skein256-iv-160+ +skein256-iv-224+ +skein256-iv-256+)) (declaim (type (simple-array (unsigned-byte 8) (64)) +skein512-iv-128+ +skein512-iv-160+ +skein512-iv-224+ +skein512-iv-256+ +skein512-iv-384+ +skein512-iv-512+)) (declaim (type (simple-array (unsigned-byte 8) (128)) +skein1024-iv-384+ +skein1024-iv-512+ +skein1024-iv-1024+)) (defconst +skein256-iv-128+ #8@(96 114 77 150 6 25 17 225 28 129 141 124 167 170 61 136 122 15 150 145 244 13 8 16 194 193 91 180 229 221 247 204)) (defconst +skein256-iv-160+ #8@(152 94 130 114 20 35 32 20 144 229 119 90 162 233 196 42 62 214 56 136 86 88 122 212 125 171 134 133 150 228 210 45)) (defconst +skein256-iv-224+ #8@(11 234 229 154 140 138 9 198 28 25 197 8 134 86 109 135 132 56 245 215 215 136 203 153 222 181 221 174 177 221 75 56)) (defconst +skein256-iv-256+ #8@(73 180 72 208 96 168 157 252 51 216 167 159 71 102 202 47 15 132 86 102 137 195 59 179 105 218 232 253 32 233 84 106)) (defconst +skein512-iv-128+ #8@(82 159 191 111 243 123 188 168 170 240 26 189 206 114 152 30 211 144 33 179 144 23 155 48 92 128 148 63 84 184 251 188 27 177 49 110 205 27 166 13 227 50 106 212 234 235 24 26 130 170 132 206 24 91 204 162 45 152 70 157 40 171 130 105)) (defconst +skein512-iv-160+ #8@(145 189 19 224 42 26 184 40 143 247 189 181 104 22 241 194 18 111 165 246 243 216 96 23 79 144 57 130 88 71 183 79 86 80 175 126 127 224 237 33 184 112 237 99 46 146 8 217 250 82 203 236 255 118 236 184 110 122 242 163 184 123 164 1)) (defconst +skein512-iv-224+ #8@(36 114 103 72 98 97 208 204 239 57 35 169 243 92 166 203 100 75 255 82 214 105 205 140 180 144 184 58 123 237 138 57 208 43 125 69 177 209 89 15 61 235 212 117 101 254 118 103 233 19 116 153 14 199 251 153 247 30 196 225 207 252 44 158)) (defconst +skein512-iv-256+ #8@(19 62 219 47 161 68 208 204 235 169 121 26 48 144 53 232 111 110 129 79 97 160 174 85 219 148 155 174 164 103 39 42 131 118 221 116 94 2 6 236 81 98 116 196 205 54 164 231 133 209 58 57 249 186 111 195 19 252 237 51 24 186 237 62)) (defconst +skein512-iv-384+ #8@(95 239 117 58 191 198 246 163 164 250 132 253 204 249 254 176 254 12 119 61 102 221 119 157 218 253 104 180 243 203 152 215 101 68 14 138 102 166 196 27 7 116 128 229 52 212 215 126 214 68 236 212 172 193 143 84 248 143 161 106 84 23 110 38)) (defconst +skein512-iv-512+ #8@(206 81 156 116 255 173 3 73 3 223 70 151 57 222 149 13 206 155 199 39 65 147 209 143 177 44 53 255 41 86 37 154 176 167 108 223 153 37 182 93 244 195 213 169 76 57 190 234 35 181 117 26 199 18 17 153 51 204 15 102 11 164 24 174)) (defconst +skein1024-iv-384+ #8@(53 74 137 193 184 182 2 81 26 241 138 254 227 201 235 254 113 237 43 227 6 127 128 12 246 145 26 180 82 58 193 96 56 124 145 212 93 211 22 151 58 29 211 111 18 223 128 231 58 48 152 200 182 70 120 121 59 42 87 179 168 194 114 177 108 74 16 166 3 130 188 201 244 36 86 215 56 147 144 101 160 129 63 75 104 197 188 148 70 253 236 16 30 245 187 62 66 133 176 238 11 15 245 45 22 101 188 13 48 101 90 59 225 188 123 22 210 156 75 72 234 175 203 212 71 105 19 45)) (defconst +skein1024-iv-512+ #8@(24 27 27 124 93 14 236 202 2 232 3 95 4 14 27 160 133 40 145 237 81 4 132 51 28 46 236 234 4 251 74 55 247 129 53 129 226 160 37 223 210 249 18 139 147 64 0 228 182 57 237 194 57 213 98 166 90 199 216 69 207 133 139 250 150 231 237 41 142 237 22 131 184 145 159 46 192 137 50 5 115 139 81 109 29 239 248 195 46 51 239 213 196 195 206 189 135 68 151 34 82 126 154 84 22 152 116 91 114 8 7 103 209 27 88 240 251 40 205 185 116 73 128 21 184 64 41 14)) (defconst +skein1024-iv-1024+ #8@(85 35 231 65 7 218 147 213 12 224 115 172 17 229 181 21 240 196 242 186 174 229 128 81 175 175 188 252 211 65 189 3 152 168 131 25 253 198 174 28 159 88 208 205 139 11 81 110 218 74 57 198 253 189 226 119 163 176 220 36 181 29 30 193 181 154 50 198 249 74 209 214 13 126 182 110 252 11 155 106 50 19 255 204 13 198 67 146 212 2 63 116 222 29 31 26 184 11 237 16 60 117 150 9 154 150 180 242 34 221 114 101 154 87 10 208 98 48 253 97 57 229 130 134 110 83 224 29)) (defun skein-get-iv (block-bits digest-bits) (ecase block-bits (256 (ecase digest-bits (128 +skein256-iv-128+) (160 +skein256-iv-160+) (224 +skein256-iv-224+) (256 +skein256-iv-256+))) (512 (ecase digest-bits (128 +skein512-iv-128+) (160 +skein512-iv-160+) (224 +skein512-iv-224+) (256 +skein512-iv-256+) (384 +skein512-iv-384+) (512 +skein512-iv-512+))) (1024 (ecase digest-bits (384 +skein1024-iv-384+) (512 +skein1024-iv-512+) (1024 +skein1024-iv-1024+))))) ;;; Functions to generate and update the tweak ;;; This function is called a lot by skein-ubi, ;;; so we try to optimize it for speed. (declaim (inline skein-increment-counter)) (defun skein-increment-counter (tweak n) (declare (type (simple-array (unsigned-byte 64) (2)) tweak) (type (unsigned-byte 32) n) #.(burn-baby-burn)) (let* ((x (mod64+ (aref tweak 0) n)) (y (mod32+ (logand (aref tweak 1) #xffffffff) (if (< x n) 1 0)))) (declare (type (unsigned-byte 64) x) (type (unsigned-byte 32) y)) (setf (aref tweak 0) x (ldb (byte 32 0) (aref tweak 1)) y) (values))) (defun skein-update-tweak (tweak &key (first nil first-p) (final nil final-p) (type nil type-p) (position nil position-p) (position-increment nil position-increment-p)) (when first-p (setf (ldb (byte 1 62) (aref tweak 1)) (if first 1 0))) (when final-p (setf (ldb (byte 1 63) (aref tweak 1)) (if final 1 0))) (when type-p (setf (ldb (byte 6 56) (aref tweak 1)) type)) (when position-p (setf (aref tweak 0) (ldb (byte 64 0) position)) (setf (ldb (byte 32 0) (aref tweak 1)) (ldb (byte 32 64) position))) (when position-increment-p (skein-increment-counter tweak position-increment)) (values)) (defun skein-make-tweak (first final type position) (let ((tweak (make-array 2 :element-type '(unsigned-byte 64) :initial-element 0))) (skein-update-tweak tweak :first first :final final :type type :position position) tweak)) (defun skein-make-configuration-string (output-length) (let ((cfg (make-array 32 :element-type '(unsigned-byte 8) :initial-element 0))) (setf (subseq cfg 0 4) #(83 72 65 51)) (setf (subseq cfg 4 6) (integer-to-octets 1 :n-bits 16 :big-endian nil)) (setf (subseq cfg 8 16) (integer-to-octets output-length :n-bits 64 :big-endian nil)) cfg)) ;;; UBI (unique block iteration chaining) (defgeneric skein-value (state)) (defgeneric skein-tweak (state)) (defgeneric skein-cfg (state)) (defgeneric skein-buffer (state)) (defgeneric skein-buffer-length (state)) (defgeneric skein-cipher (state)) ;;; This function is called a lot by skein-ubi, ;;; so we try to optimize it for speed. (declaim (inline skein-update-cipher)) (defun skein-update-cipher (block-length cipher-key cipher-tweak key tweak) (declare (type fixnum block-length) (type (simple-array (unsigned-byte 64) (*)) cipher-key) (type (simple-array (unsigned-byte 64) (3)) cipher-tweak) (type (simple-array (unsigned-byte 8) (*)) key) (type (simple-array (unsigned-byte 64) (2)) tweak) #.(burn-baby-burn)) (let ((key-words (ash block-length -3)) (parity +threefish-key-schedule-constant+) (n 0)) (declare (type (unsigned-byte 64) parity n key-words)) ;; Update key (loop for i of-type fixnum from 0 below key-words do (setf n (ub64ref/le key (ash i 3)) (aref cipher-key i) n parity (logxor parity n))) (setf (aref cipher-key key-words) parity) ;; Update tweak (setf (aref cipher-tweak 0) (aref tweak 0) (aref cipher-tweak 1) (aref tweak 1) (aref cipher-tweak 2) (logxor (aref tweak 0) (aref tweak 1))) (values))) (defun skein-ubi (state message start end &optional final) (declare (type (simple-array (unsigned-byte 8) (*)) message) (type index start end) #.(burn-baby-burn)) (let* ((cipher (skein-cipher state)) (encryption-function (encrypt-function cipher)) (cipher-key (threefish-key cipher)) (cipher-tweak (threefish-tweak cipher)) (block-length (block-length state)) (value (skein-value state)) (tweak (skein-tweak state)) (buffer (skein-buffer state)) (buffer-length (skein-buffer-length state)) (message-start start) (message-length (- end start)) (ciphertext (make-array 128 :element-type '(unsigned-byte 8) :initial-element 0)) (n 0)) (declare (type (simple-array (unsigned-byte 64) (*)) cipher-key) (type (simple-array (unsigned-byte 64) (3)) cipher-tweak) (type (simple-array (unsigned-byte 8) (*)) value buffer) (type (simple-array (unsigned-byte 8) (128)) ciphertext) (dynamic-extent ciphertext) (type (simple-array (unsigned-byte 64) (2)) tweak) (type (integer 0 128) block-length buffer-length n) (type index message-start message-length)) ;; Try to fill the buffer with the new data (setf n (min message-length (- block-length buffer-length))) (replace buffer message :start1 buffer-length :start2 message-start :end2 (+ message-start n)) (incf buffer-length n) (incf message-start n) (decf message-length n) ;; Process as many blocks as we can, but unless we are in the ;; final call, keep some data in the buffer (so that it can be ;; processed with the 'final' tweak flag in the final call) ;; Process data in buffer (when (and (= buffer-length block-length) (or final (plusp message-length))) (unless final (skein-increment-counter tweak block-length)) (skein-update-cipher block-length cipher-key cipher-tweak value tweak) (funcall encryption-function cipher buffer 0 ciphertext 0) (skein-update-tweak tweak :first nil) (xor-block block-length ciphertext 0 buffer 0 value 0) (setf buffer-length 0)) ;; Process data in message (unless final (loop until (<= message-length block-length) do (skein-increment-counter tweak block-length) (skein-update-cipher block-length cipher-key cipher-tweak value tweak) (funcall encryption-function cipher message message-start ciphertext 0) (xor-block block-length ciphertext 0 message message-start value 0) (incf message-start block-length) (decf message-length block-length))) ;; Put remaining message data in buffer (when (plusp message-length) (replace buffer message :end1 message-length :start2 message-start) (incf buffer-length message-length)) ;; Save the new state (setf (skein-buffer-length state) buffer-length) (values))) (defun skein-finalize (state digest digest-start) (let* ((block-length (block-length state)) (digest-length (digest-length state)) (tweak (skein-tweak state)) (buffer-length (skein-buffer-length state)) (padding-length (- block-length buffer-length)) (padding (make-array padding-length :element-type '(unsigned-byte 8) :initial-element 0))) ;; Process remaining data after padding it (skein-update-tweak tweak :final t :position-increment buffer-length) (skein-ubi state padding 0 padding-length t) ;; Generate output (do* ((value (copy-seq (skein-value state))) (noutputs (ceiling digest-length block-length)) (output (make-array (* noutputs block-length) :element-type '(unsigned-byte 8))) (i 0 (1+ i)) (msg (make-array block-length :element-type '(unsigned-byte 8) :initial-element 0))) ((= i noutputs) (progn (replace digest output :start1 digest-start :end2 digest-length) digest)) (replace msg (integer-to-octets i :n-bits 64 :big-endian nil) :end2 8) (replace (skein-value state) value) (skein-update-tweak tweak :first t :final t :type +skein-out+ :position 8) (skein-ubi state msg 0 block-length t) (replace output (skein-value state) :start1 (* i block-length) :end2 block-length)))) (defun skein-copy-cipher (cipher &optional copy) (let* ((tmp-key (make-array (block-length cipher) :element-type '(unsigned-byte 8))) (cipher-name (ecase (block-length cipher) (32 :threefish256) (64 :threefish512) (128 :threefish1024))) (copy (if copy copy (make-cipher cipher-name :key tmp-key :mode :ecb)))) (setf (threefish-key copy) (copy-seq (threefish-key cipher))) (setf (threefish-tweak copy) (copy-seq (threefish-tweak cipher))) copy)) ;;; Implementation for blocks of 256 bits (defstruct (skein256 (:constructor %make-skein256-digest nil) (:copier nil)) (value (copy-seq (skein-get-iv 256 256)) :type (simple-array (unsigned-byte 8) (32))) (tweak (skein-make-tweak t nil +skein-msg+ 0) :type (simple-array (unsigned-byte 64) (2))) (cfg (skein-make-configuration-string 256) :type (simple-array (unsigned-byte 8) (32))) (buffer (make-array 32 :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (32))) (buffer-length 0 :type integer) (cipher (make-cipher :threefish256 :key (skein-get-iv 256 256) :mode :ecb))) (defstruct (skein256/128 (:include skein256) (:constructor %make-skein256/128-digest (&aux (value (copy-seq (skein-get-iv 256 128))) (cfg (skein-make-configuration-string 128)) (cipher (make-cipher :threefish256 :key (skein-get-iv 256 128) :mode :ecb)))) (:copier nil))) (defstruct (skein256/160 (:include skein256) (:constructor %make-skein256/160-digest (&aux (value (copy-seq (skein-get-iv 256 160))) (cfg (skein-make-configuration-string 160)) (cipher (make-cipher :threefish256 :key (skein-get-iv 256 160) :mode :ecb)))) (:copier nil))) (defstruct (skein256/224 (:include skein256) (:constructor %make-skein256/224-digest (&aux (value (copy-seq (skein-get-iv 256 224))) (cfg (skein-make-configuration-string 224)) (cipher (make-cipher :threefish256 :key (skein-get-iv 256 224) :mode :ecb)))) (:copier nil))) (defmethod skein-value ((state skein256)) (skein256-value state)) (defmethod skein-tweak ((state skein256)) (skein256-tweak state)) (defmethod skein-cfg ((state skein256)) (skein256-cfg state)) (defmethod skein-buffer ((state skein256)) (skein256-buffer state)) (defmethod skein-buffer-length ((state skein256)) (skein256-buffer-length state)) (defmethod (setf skein-buffer-length) (n (state skein256)) (setf (skein256-buffer-length state) n)) (defmethod skein-cipher ((state skein256)) (skein256-cipher state)) (defmethod (setf skein-cipher) (cipher (state skein256)) (setf (skein256-cipher state) cipher)) (defun %reinitialize-skein256 (state digest-bits) (declare (type skein256 state)) (replace (skein256-value state) (skein-get-iv 256 digest-bits)) (replace (skein256-tweak state) (skein-make-tweak t nil +skein-msg+ 0)) (replace (skein256-cfg state) (skein-make-configuration-string digest-bits)) (setf (skein256-buffer-length state) 0) (setf (skein256-cipher state) (make-cipher :threefish256 :key (skein-get-iv 256 digest-bits) :mode :ecb)) state) (defmethod reinitialize-instance ((state skein256) &rest initargs) (declare (ignore initargs)) (%reinitialize-skein256 state 256)) (defmethod reinitialize-instance ((state skein256/128) &rest initargs) (declare (ignore initargs)) (%reinitialize-skein256 state 128)) (defmethod reinitialize-instance ((state skein256/160) &rest initargs) (declare (ignore initargs)) (%reinitialize-skein256 state 160)) (defmethod reinitialize-instance ((state skein256/224) &rest initargs) (declare (ignore initargs)) (%reinitialize-skein256 state 224)) (defmethod copy-digest ((state skein256) &optional copy) (check-type copy (or null skein256)) (let ((copy (if copy copy (etypecase state (skein256/128 (%make-skein256/128-digest)) (skein256/160 (%make-skein256/160-digest)) (skein256/224 (%make-skein256/224-digest)) (skein256 (%make-skein256-digest)))))) (declare (type skein256 copy)) (replace (skein256-value copy) (skein256-value state)) (replace (skein256-tweak copy) (skein256-tweak state)) (replace (skein256-cfg copy) (skein256-cfg state)) (replace (skein256-buffer copy) (skein256-buffer state)) (setf (skein256-buffer-length copy) (skein256-buffer-length state)) (setf (skein256-cipher copy) (skein-copy-cipher (skein256-cipher state))) copy)) (define-digest-updater skein256 (skein-ubi state sequence start end)) (define-digest-finalizer ((skein256 32) (skein256/224 28) (skein256/160 20) (skein256/128 16)) (skein-finalize state digest digest-start)) (defdigest skein256 :digest-length 32 :block-length 32) (defdigest skein256/128 :digest-length 16 :block-length 32) (defdigest skein256/160 :digest-length 20 :block-length 32) (defdigest skein256/224 :digest-length 28 :block-length 32) ;;; Implementation for blocks of 512 bits (defstruct (skein512 (:constructor %make-skein512-digest nil) (:copier nil)) (value (copy-seq (skein-get-iv 512 512)) :type (simple-array (unsigned-byte 8) (64))) (tweak (skein-make-tweak t nil +skein-msg+ 0) :type (simple-array (unsigned-byte 64) (2))) (cfg (skein-make-configuration-string 512) :type (simple-array (unsigned-byte 8) (32))) (buffer (make-array 64 :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (64))) (buffer-length 0 :type integer) (cipher (make-cipher :threefish512 :key (skein-get-iv 512 512) :mode :ecb))) (defstruct (skein512/128 (:include skein512) (:constructor %make-skein512/128-digest (&aux (value (copy-seq (skein-get-iv 512 128))) (cfg (skein-make-configuration-string 128)) (cipher (make-cipher :threefish512 :key (skein-get-iv 512 128) :mode :ecb)))) (:copier nil))) (defstruct (skein512/160 (:include skein512) (:constructor %make-skein512/160-digest (&aux (value (copy-seq (skein-get-iv 512 160))) (cfg (skein-make-configuration-string 160)) (cipher (make-cipher :threefish512 :key (skein-get-iv 512 160) :mode :ecb)))) (:copier nil))) (defstruct (skein512/224 (:include skein512) (:constructor %make-skein512/224-digest (&aux (value (copy-seq (skein-get-iv 512 224))) (cfg (skein-make-configuration-string 224)) (cipher (make-cipher :threefish512 :key (skein-get-iv 512 224) :mode :ecb)))) (:copier nil))) (defstruct (skein512/256 (:include skein512) (:constructor %make-skein512/256-digest (&aux (value (copy-seq (skein-get-iv 512 256))) (cfg (skein-make-configuration-string 256)) (cipher (make-cipher :threefish512 :key (skein-get-iv 512 256) :mode :ecb)))) (:copier nil))) (defstruct (skein512/384 (:include skein512) (:constructor %make-skein512/384-digest (&aux (value (copy-seq (skein-get-iv 512 384))) (cfg (skein-make-configuration-string 384)) (cipher (make-cipher :threefish512 :key (skein-get-iv 512 384) :mode :ecb)))) (:copier nil))) (defmethod skein-value ((state skein512)) (skein512-value state)) (defmethod skein-tweak ((state skein512)) (skein512-tweak state)) (defmethod skein-cfg ((state skein512)) (skein512-cfg state)) (defmethod skein-buffer ((state skein512)) (skein512-buffer state)) (defmethod skein-buffer-length ((state skein512)) (skein512-buffer-length state)) (defmethod (setf skein-buffer-length) (n (state skein512)) (setf (skein512-buffer-length state) n)) (defmethod skein-cipher ((state skein512)) (skein512-cipher state)) (defmethod (setf skein-cipher) (cipher (state skein512)) (setf (skein512-cipher state) cipher)) (defun %reinitialize-skein512 (state digest-bits) (declare (type skein512 state)) (replace (skein512-value state) (skein-get-iv 512 digest-bits)) (replace (skein512-tweak state) (skein-make-tweak t nil +skein-msg+ 0)) (replace (skein512-cfg state) (skein-make-configuration-string digest-bits)) (setf (skein512-buffer-length state) 0) (setf (skein512-cipher state) (make-cipher :threefish512 :key (skein-get-iv 512 digest-bits) :mode :ecb)) state) (defmethod reinitialize-instance ((state skein512) &rest initargs) (declare (ignore initargs)) (%reinitialize-skein512 state 512)) (defmethod reinitialize-instance ((state skein512/128) &rest initargs) (declare (ignore initargs)) (%reinitialize-skein512 state 128)) (defmethod reinitialize-instance ((state skein512/160) &rest initargs) (declare (ignore initargs)) (%reinitialize-skein512 state 160)) (defmethod reinitialize-instance ((state skein512/224) &rest initargs) (declare (ignore initargs)) (%reinitialize-skein512 state 224)) (defmethod reinitialize-instance ((state skein512/256) &rest initargs) (declare (ignore initargs)) (%reinitialize-skein512 state 256)) (defmethod reinitialize-instance ((state skein512/384) &rest initargs) (declare (ignore initargs)) (%reinitialize-skein512 state 384)) (defmethod copy-digest ((state skein512) &optional copy) (declare (type (or null skein512) copy)) (let ((copy (if copy copy (etypecase state (skein512/128 (%make-skein512/128-digest)) (skein512/160 (%make-skein512/160-digest)) (skein512/224 (%make-skein512/224-digest)) (skein512/256 (%make-skein512/256-digest)) (skein512/384 (%make-skein512/384-digest)) (skein512 (%make-skein512-digest)))))) (declare (type skein512 copy)) (replace (skein512-value copy) (skein512-value state)) (replace (skein512-tweak copy) (skein512-tweak state)) (replace (skein512-cfg copy) (skein512-cfg state)) (replace (skein512-buffer copy) (skein512-buffer state)) (setf (skein512-buffer-length copy) (skein512-buffer-length state)) (setf (skein512-cipher copy) (skein-copy-cipher (skein512-cipher state))) copy)) (define-digest-updater skein512 (skein-ubi state sequence start end)) (define-digest-finalizer ((skein512 64) (skein512/128 16) (skein512/160 20) (skein512/224 28) (skein512/256 32) (skein512/384 48)) (skein-finalize state digest digest-start)) (defdigest skein512 :digest-length 64 :block-length 64) (defdigest skein512/128 :digest-length 16 :block-length 64) (defdigest skein512/160 :digest-length 20 :block-length 64) (defdigest skein512/224 :digest-length 28 :block-length 64) (defdigest skein512/256 :digest-length 32 :block-length 64) (defdigest skein512/384 :digest-length 48 :block-length 64) ;;; Implementation for blocks of 1024 bits (defstruct (skein1024 (:constructor %make-skein1024-digest nil) (:copier nil)) (value (copy-seq (skein-get-iv 1024 1024)) :type (simple-array (unsigned-byte 8) (128))) (tweak (skein-make-tweak t nil +skein-msg+ 0) :type (simple-array (unsigned-byte 64) (2))) (cfg (skein-make-configuration-string 1024) :type (simple-array (unsigned-byte 8) (32))) (buffer (make-array 128 :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (128))) (buffer-length 0 :type integer) (cipher (make-cipher :threefish1024 :key (skein-get-iv 1024 1024) :mode :ecb))) (defstruct (skein1024/384 (:include skein1024) (:constructor %make-skein1024/384-digest (&aux (value (copy-seq (skein-get-iv 1024 384))) (cfg (skein-make-configuration-string 384)) (cipher (make-cipher :threefish1024 :key (skein-get-iv 1024 384) :mode :ecb)))) (:copier nil))) (defstruct (skein1024/512 (:include skein1024) (:constructor %make-skein1024/512-digest (&aux (value (copy-seq (skein-get-iv 1024 512))) (cfg (skein-make-configuration-string 512)) (cipher (make-cipher :threefish1024 :key (skein-get-iv 1024 512) :mode :ecb)))) (:copier nil))) (defmethod skein-value ((state skein1024)) (skein1024-value state)) (defmethod skein-tweak ((state skein1024)) (skein1024-tweak state)) (defmethod skein-cfg ((state skein1024)) (skein1024-cfg state)) (defmethod skein-buffer ((state skein1024)) (skein1024-buffer state)) (defmethod skein-buffer-length ((state skein1024)) (skein1024-buffer-length state)) (defmethod (setf skein-buffer-length) (n (state skein1024)) (setf (skein1024-buffer-length state) n)) (defmethod skein-cipher ((state skein1024)) (skein1024-cipher state)) (defmethod (setf skein-cipher) (cipher (state skein1024)) (setf (skein1024-cipher state) cipher)) (defun %reinitialize-skein1024 (state digest-bits) (declare (type skein1024 state)) (replace (skein1024-value state) (skein-get-iv 1024 digest-bits)) (replace (skein1024-tweak state) (skein-make-tweak t nil +skein-msg+ 0)) (replace (skein1024-cfg state) (skein-make-configuration-string digest-bits)) (setf (skein1024-buffer-length state) 0) (setf (skein1024-cipher state) (make-cipher :threefish1024 :key (skein-get-iv 1024 digest-bits) :mode :ecb)) state) (defmethod reinitialize-instance ((state skein1024) &rest initargs) (declare (ignore initargs)) (%reinitialize-skein1024 state 1024)) (defmethod reinitialize-instance ((state skein1024/384) &rest initargs) (declare (ignore initargs)) (%reinitialize-skein1024 state 384)) (defmethod reinitialize-instance ((state skein1024/512) &rest initargs) (declare (ignore initargs)) (%reinitialize-skein1024 state 512)) (defmethod copy-digest ((state skein1024) &optional copy) (declare (type (or null skein1024) copy)) (let ((copy (if copy copy (etypecase state (skein1024/384 (%make-skein1024/384-digest)) (skein1024/512 (%make-skein1024/512-digest)) (skein1024 (%make-skein1024-digest)))))) (declare (type skein1024 copy)) (replace (skein1024-value copy) (skein1024-value state)) (replace (skein1024-tweak copy) (skein1024-tweak state)) (replace (skein1024-cfg copy) (skein1024-cfg state)) (replace (skein1024-buffer copy) (skein1024-buffer state)) (setf (skein1024-buffer-length copy) (skein1024-buffer-length state)) (setf (skein1024-cipher copy) (skein-copy-cipher (skein1024-cipher state))) copy)) (define-digest-updater skein1024 (skein-ubi state sequence start end)) (define-digest-finalizer ((skein1024 128) (skein1024/384 48) (skein1024/512 64)) (skein-finalize state digest digest-start)) (defdigest skein1024 :digest-length 128 :block-length 128) (defdigest skein1024/384 :digest-length 48 :block-length 128) (defdigest skein1024/512 :digest-length 64 :block-length 128) ironclad-0.57/src/digests/sm3.lisp000066400000000000000000000313071420372057600170760ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; sm3.lisp -- implementation of SM3 (GM/T 0004-2012) (in-package :crypto) (in-ironclad-readtable) ;;; ;;; Parameters ;;; (defconst +sm3-initial-state+ #32@(#x7380166f #x4914b2b9 #x172442d7 #xda8a0600 #xa96f30bc #x163138aa #xe38dee4d #xb0fb0e4e)) ;;; ;;; SM3 rounds ;;; (defmacro sm3-p0 (x) `(logxor ,x (rol32 ,x 9) (rol32 ,x 17))) (defmacro sm3-p1 (x) `(logxor ,x (rol32 ,x 15) (rol32 ,x 23))) (defmacro sm3-ee (w0 w7 w13 w3 w10) `(logxor (sm3-p1 (logxor ,w0 ,w7 (rol32 ,w13 15))) (rol32 ,w3 7) ,w10)) (defmacro sm3-ff (x y z) `(logior (logand ,x ,y) (logand (logior ,x ,y) ,z))) (defmacro sm3-gg (x y z) `(logxor ,z (logand ,x (logxor ,y ,z)))) (defmacro sm3-r1 (a b c d e f g h tj wi wj) (let ((a12 (gensym)) (tt0 (gensym)) (tt1 (gensym)) (tt2 (gensym))) `(let* ((,a12 (rol32 ,a 12)) (,tt0 (rol32 (mod32+ ,a12 (mod32+ ,e,tj)) 7)) (,tt1 (mod32+ (mod32+ (logxor ,a ,b ,c) ,d) (mod32+ (logxor ,tt0 ,a12) ,wj))) (,tt2 (mod32+ (mod32+ (logxor ,e ,f ,g) ,h) (mod32+ ,tt0 ,wi)))) (declare (type (unsigned-byte 32) ,a12 ,tt0 ,tt1 ,tt2)) (setf ,b (rol32 ,b 9) ,d ,tt1 ,f (rol32 ,f 19) ,h (sm3-p0 ,tt2))))) (defmacro sm3-r2 (a b c d e f g h tj wi wj) (let ((a12 (gensym)) (tt0 (gensym)) (tt1 (gensym)) (tt2 (gensym))) `(let* ((,a12 (rol32 ,a 12)) (,tt0 (rol32 (mod32+ ,a12 (mod32+ ,e ,tj)) 7)) (,tt1 (mod32+ (mod32+ (sm3-ff ,a ,b ,c) ,d) (mod32+ (logxor ,tt0 ,a12) ,wj))) (,tt2 (mod32+ (mod32+ (sm3-gg ,e ,f ,g) ,h) (mod32+ ,tt0 ,wi)))) (declare (type (unsigned-byte 32) ,a12 ,tt0 ,tt1 ,tt2)) (setf ,b (rol32 ,b 9) ,d ,tt1 ,f (rol32 ,f 19) ,h (sm3-p0 ,tt2))))) (defun sm3-hash (state data start) (declare (type (simple-array (unsigned-byte 32) (8)) state) (type (simple-array (unsigned-byte 8) (*)) data) (type fixnum start) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((a (aref state 0)) (b (aref state 1)) (c (aref state 2)) (d (aref state 3)) (e (aref state 4)) (f (aref state 5)) (g (aref state 6)) (h (aref state 7)) (w00 (ub32ref/be data start)) (w01 (ub32ref/be data (+ start 4))) (w02 (ub32ref/be data (+ start 8))) (w03 (ub32ref/be data (+ start 12))) (w04 (ub32ref/be data (+ start 16))) (w05 (ub32ref/be data (+ start 20))) (w06 (ub32ref/be data (+ start 24))) (w07 (ub32ref/be data (+ start 28))) (w08 (ub32ref/be data (+ start 32))) (w09 (ub32ref/be data (+ start 36))) (w10 (ub32ref/be data (+ start 40))) (w11 (ub32ref/be data (+ start 44))) (w12 (ub32ref/be data (+ start 48))) (w13 (ub32ref/be data (+ start 52))) (w14 (ub32ref/be data (+ start 56))) (w15 (ub32ref/be data (+ start 60)))) (declare (type (unsigned-byte 32) a b c d e f g h) (type (unsigned-byte 32) w00 w01 w02 w03 w04 w05 w06 w07) (type (unsigned-byte 32) w08 w09 w10 w11 w12 w13 w14 w15)) (sm3-r1 a b c d e f g h #x79cc4519 w00 (logxor w00 w04)) (setf w00 (sm3-ee w00 w07 w13 w03 w10)) (sm3-r1 d a b c h e f g #xf3988a32 w01 (logxor w01 w05)) (setf w01 (sm3-ee w01 w08 w14 w04 w11)) (sm3-r1 c d a b g h e f #xe7311465 w02 (logxor w02 w06)) (setf w02 (sm3-ee w02 w09 w15 w05 w12)) (sm3-r1 b c d a f g h e #xce6228cb w03 (logxor w03 w07)) (setf w03 (sm3-ee w03 w10 w00 w06 w13)) (sm3-r1 a b c d e f g h #x9cc45197 w04 (logxor w04 w08)) (setf w04 (sm3-ee w04 w11 w01 w07 w14)) (sm3-r1 d a b c h e f g #x3988a32f w05 (logxor w05 w09)) (setf w05 (sm3-ee w05 w12 w02 w08 w15)) (sm3-r1 c d a b g h e f #x7311465e w06 (logxor w06 w10)) (setf w06 (sm3-ee w06 w13 w03 w09 w00)) (sm3-r1 b c d a f g h e #xe6228cbc w07 (logxor w07 w11)) (setf w07 (sm3-ee w07 w14 w04 w10 w01)) (sm3-r1 a b c d e f g h #xcc451979 w08 (logxor w08 w12)) (setf w08 (sm3-ee w08 w15 w05 w11 w02)) (sm3-r1 d a b c h e f g #x988a32f3 w09 (logxor w09 w13)) (setf w09 (sm3-ee w09 w00 w06 w12 w03)) (sm3-r1 c d a b g h e f #x311465e7 w10 (logxor w10 w14)) (setf w10 (sm3-ee w10 w01 w07 w13 w04)) (sm3-r1 b c d a f g h e #x6228cbce w11 (logxor w11 w15)) (setf w11 (sm3-ee w11 w02 w08 w14 w05)) (sm3-r1 a b c d e f g h #xc451979c w12 (logxor w12 w00)) (setf w12 (sm3-ee w12 w03 w09 w15 w06)) (sm3-r1 d a b c h e f g #x88a32f39 w13 (logxor w13 w01)) (setf w13 (sm3-ee w13 w04 w10 w00 w07)) (sm3-r1 c d a b g h e f #x11465e73 w14 (logxor w14 w02)) (setf w14 (sm3-ee w14 w05 w11 w01 w08)) (sm3-r1 b c d a f g h e #x228cbce6 w15 (logxor w15 w03)) (setf w15 (sm3-ee w15 w06 w12 w02 w09)) (sm3-r2 a b c d e f g h #x9d8a7a87 w00 (logxor w00 w04)) (setf w00 (sm3-ee w00 w07 w13 w03 w10)) (sm3-r2 d a b c h e f g #x3b14f50f w01 (logxor w01 w05)) (setf w01 (sm3-ee w01 w08 w14 w04 w11)) (sm3-r2 c d a b g h e f #x7629ea1e w02 (logxor w02 w06)) (setf w02 (sm3-ee w02 w09 w15 w05 w12)) (sm3-r2 b c d a f g h e #xec53d43c w03 (logxor w03 w07)) (setf w03 (sm3-ee w03 w10 w00 w06 w13)) (sm3-r2 a b c d e f g h #xd8a7a879 w04 (logxor w04 w08)) (setf w04 (sm3-ee w04 w11 w01 w07 w14)) (sm3-r2 d a b c h e f g #xb14f50f3 w05 (logxor w05 w09)) (setf w05 (sm3-ee w05 w12 w02 w08 w15)) (sm3-r2 c d a b g h e f #x629ea1e7 w06 (logxor w06 w10)) (setf w06 (sm3-ee w06 w13 w03 w09 w00)) (sm3-r2 b c d a f g h e #xc53d43ce w07 (logxor w07 w11)) (setf w07 (sm3-ee w07 w14 w04 w10 w01)) (sm3-r2 a b c d e f g h #x8a7a879d w08 (logxor w08 w12)) (setf w08 (sm3-ee w08 w15 w05 w11 w02)) (sm3-r2 d a b c h e f g #x14f50f3b w09 (logxor w09 w13)) (setf w09 (sm3-ee w09 w00 w06 w12 w03)) (sm3-r2 c d a b g h e f #x29ea1e76 w10 (logxor w10 w14)) (setf w10 (sm3-ee w10 w01 w07 w13 w04)) (sm3-r2 b c d a f g h e #x53d43cec w11 (logxor w11 w15)) (setf w11 (sm3-ee w11 w02 w08 w14 w05)) (sm3-r2 a b c d e f g h #xa7a879d8 w12 (logxor w12 w00)) (setf w12 (sm3-ee w12 w03 w09 w15 w06)) (sm3-r2 d a b c h e f g #x4f50f3b1 w13 (logxor w13 w01)) (setf w13 (sm3-ee w13 w04 w10 w00 w07)) (sm3-r2 c d a b g h e f #x9ea1e762 w14 (logxor w14 w02)) (setf w14 (sm3-ee w14 w05 w11 w01 w08)) (sm3-r2 b c d a f g h e #x3d43cec5 w15 (logxor w15 w03)) (setf w15 (sm3-ee w15 w06 w12 w02 w09)) (sm3-r2 a b c d e f g h #x7a879d8a w00 (logxor w00 w04)) (setf w00 (sm3-ee w00 w07 w13 w03 w10)) (sm3-r2 d a b c h e f g #xf50f3b14 w01 (logxor w01 w05)) (setf w01 (sm3-ee w01 w08 w14 w04 w11)) (sm3-r2 c d a b g h e f #xea1e7629 w02 (logxor w02 w06)) (setf w02 (sm3-ee w02 w09 w15 w05 w12)) (sm3-r2 b c d a f g h e #xd43cec53 w03 (logxor w03 w07)) (setf w03 (sm3-ee w03 w10 w00 w06 w13)) (sm3-r2 a b c d e f g h #xa879d8a7 w04 (logxor w04 w08)) (setf w04 (sm3-ee w04 w11 w01 w07 w14)) (sm3-r2 d a b c h e f g #x50f3b14f w05 (logxor w05 w09)) (setf w05 (sm3-ee w05 w12 w02 w08 w15)) (sm3-r2 c d a b g h e f #xa1e7629e w06 (logxor w06 w10)) (setf w06 (sm3-ee w06 w13 w03 w09 w00)) (sm3-r2 b c d a f g h e #x43cec53d w07 (logxor w07 w11)) (setf w07 (sm3-ee w07 w14 w04 w10 w01)) (sm3-r2 a b c d e f g h #x879d8a7a w08 (logxor w08 w12)) (setf w08 (sm3-ee w08 w15 w05 w11 w02)) (sm3-r2 d a b c h e f g #x0f3b14f5 w09 (logxor w09 w13)) (setf w09 (sm3-ee w09 w00 w06 w12 w03)) (sm3-r2 c d a b g h e f #x1e7629ea w10 (logxor w10 w14)) (setf w10 (sm3-ee w10 w01 w07 w13 w04)) (sm3-r2 b c d a f g h e #x3cec53d4 w11 (logxor w11 w15)) (setf w11 (sm3-ee w11 w02 w08 w14 w05)) (sm3-r2 a b c d e f g h #x79d8a7a8 w12 (logxor w12 w00)) (setf w12 (sm3-ee w12 w03 w09 w15 w06)) (sm3-r2 d a b c h e f g #xf3b14f50 w13 (logxor w13 w01)) (setf w13 (sm3-ee w13 w04 w10 w00 w07)) (sm3-r2 c d a b g h e f #xe7629ea1 w14 (logxor w14 w02)) (setf w14 (sm3-ee w14 w05 w11 w01 w08)) (sm3-r2 b c d a f g h e #xcec53d43 w15 (logxor w15 w03)) (setf w15 (sm3-ee w15 w06 w12 w02 w09)) (sm3-r2 a b c d e f g h #x9d8a7a87 w00 (logxor w00 w04)) (setf w00 (sm3-ee w00 w07 w13 w03 w10)) (sm3-r2 d a b c h e f g #x3b14f50f w01 (logxor w01 w05)) (setf w01 (sm3-ee w01 w08 w14 w04 w11)) (sm3-r2 c d a b g h e f #x7629ea1e w02 (logxor w02 w06)) (setf w02 (sm3-ee w02 w09 w15 w05 w12)) (sm3-r2 b c d a f g h e #xec53d43c w03 (logxor w03 w07)) (setf w03 (sm3-ee w03 w10 w00 w06 w13)) (sm3-r2 a b c d e f g h #xd8a7a879 w04 (logxor w04 w08)) (sm3-r2 d a b c h e f g #xb14f50f3 w05 (logxor w05 w09)) (sm3-r2 c d a b g h e f #x629ea1e7 w06 (logxor w06 w10)) (sm3-r2 b c d a f g h e #xc53d43ce w07 (logxor w07 w11)) (sm3-r2 a b c d e f g h #x8a7a879d w08 (logxor w08 w12)) (sm3-r2 d a b c h e f g #x14f50f3b w09 (logxor w09 w13)) (sm3-r2 c d a b g h e f #x29ea1e76 w10 (logxor w10 w14)) (sm3-r2 b c d a f g h e #x53d43cec w11 (logxor w11 w15)) (sm3-r2 a b c d e f g h #xa7a879d8 w12 (logxor w12 w00)) (sm3-r2 d a b c h e f g #x4f50f3b1 w13 (logxor w13 w01)) (sm3-r2 c d a b g h e f #x9ea1e762 w14 (logxor w14 w02)) (sm3-r2 b c d a f g h e #x3d43cec5 w15 (logxor w15 w03)) (setf (aref state 0) (logxor (aref state 0) a) (aref state 1) (logxor (aref state 1) b) (aref state 2) (logxor (aref state 2) c) (aref state 3) (logxor (aref state 3) d) (aref state 4) (logxor (aref state 4) e) (aref state 5) (logxor (aref state 5) f) (aref state 6) (logxor (aref state 6) g) (aref state 7) (logxor (aref state 7) h)))) ;;; ;;; Digest structures and functions ;;; (defstruct (sm3 (:constructor %make-sm3-digest nil) (:copier nil)) (state (copy-seq +sm3-initial-state+) :type (simple-array (unsigned-byte 32) (8))) (count 0 :type (unsigned-byte 64)) (buffer (make-array 64 :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (64))) (buffer-index 0 :type (integer 0 64))) (defmethod reinitialize-instance ((state sm3) &rest initargs) (declare (ignore initargs)) (replace (sm3-state state) +sm3-initial-state+) (setf (sm3-count state) 0 (sm3-buffer-index state) 0) state) (defmethod copy-digest ((state sm3) &optional copy) (check-type copy (or null sm3)) (let ((copy (if copy copy (%make-sm3-digest)))) (declare (type sm3 copy)) (replace (sm3-state copy) (sm3-state state)) (replace (sm3-buffer copy) (sm3-buffer state)) (setf (sm3-count copy) (sm3-count state) (sm3-buffer-index copy) (sm3-buffer-index state)) copy)) (define-digest-updater sm3 (let ((s (sm3-state state)) (count (sm3-count state)) (buffer (sm3-buffer state)) (buffer-index (sm3-buffer-index state)) (length (- end start)) (n 0)) (declare (type (simple-array (unsigned-byte 32) (8)) s) (type (simple-array (unsigned-byte 8) (64)) buffer) (type (unsigned-byte 64) count) (type (integer 0 64) buffer-index n) (type fixnum length)) (when (plusp buffer-index) (setf n (min length (- 64 buffer-index))) (replace buffer sequence :start1 buffer-index :start2 start :end2 (+ start n)) (incf count n) (incf buffer-index n) (incf start n) (decf length n) (when (= buffer-index 64) (sm3-hash s buffer 0) (setf buffer-index 0))) (loop until (< length 64) do (sm3-hash s sequence start) (incf count 64) (incf start 64) (decf length 64)) (when (plusp length) (replace buffer sequence :start2 start :end2 end) (incf count length) (setf buffer-index length)) (setf (sm3-count state) count (sm3-buffer-index state) buffer-index) (values))) (define-digest-finalizer (sm3 32) (let ((s (sm3-state state)) (bit-count (* 8 (sm3-count state))) (buffer (sm3-buffer state)) (buffer-index (sm3-buffer-index state))) (setf (aref buffer buffer-index) #x80) (incf buffer-index) (when (> buffer-index 56) (fill buffer 0 :start buffer-index :end 64) (sm3-hash s buffer 0) (setf buffer-index 0)) (fill buffer 0 :start buffer-index :end 56) (setf (ub64ref/be buffer 56) bit-count) (sm3-hash s buffer 0) (let ((output (make-array 32 :element-type '(unsigned-byte 8)))) (dotimes (i 8) (setf (ub32ref/be output (* i 4)) (aref s i))) (replace digest output :start1 digest-start) digest))) (defdigest sm3 :digest-length 32 :block-length 64) ironclad-0.57/src/digests/streebog.lisp000066400000000000000000002561611420372057600202150ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; streebog.lisp -- implementation of Streebog (GOST R 34.11-2012) (in-package :crypto) (in-ironclad-readtable) ;;; ;;; Parameters ;;; (eval-when (:compile-toplevel :load-toplevel :execute) (defconst +streebog-buffer0+ #64@(0 0 0 0 0 0 0 0)) (defconst +streebog-buffer512+ #64@(#x200 0 0 0 0 0 0 0)) (defconst +streebog-c+ (vector #64@(#xdd806559f2a64507 #x05767436cc744d23 #xa2422a08a460d315 #x4b7ce09192676901 #x714eb88d7585c4fc #x2f6a76432e45d016 #xebcb2f81c0657c1f #xb1085bda1ecadae9) #64@(#xe679047021b19bb7 #x55dda21bd7cbcd56 #x5cb561c2db0aa7ca #x9ab5176b12d69958 #x61d55e0f16b50131 #xf3feea720a232b98 #x4fe39d460f70b5d7 #x6fa3b58aa99d2f1a) #64@(#x991e96f50aba0ab2 #xc2b6f443867adb31 #xc1c93a376062db09 #xd3e20fe490359eb1 #xf2ea7514b1297b7b #x06f15e5f529c1f8b #x0a39fc286a3d8435 #xf574dcac2bce2fc7) #64@(#x220cbebc84e3d12e #x3453eaa193e837f1 #xd8b71333935203be #xa9d72c82ed03d675 #x9d721cad685e353f #x488e857e335c3c7d #xf948e1a05d71e4dd #xef1fdfb3e81566d2) #64@(#x601758fd7c6cfe57 #x7a56a27ea9ea63f5 #xdfff00b723271a16 #xbfcd1747253af5a3 #x359e35d7800fffbd #x7f151c1f1686104a #x9a3f410c6ca92363 #x4bea6bacad474799) #64@(#xfa68407a46647d6e #xbf71c57236904f35 #x0af21f66c2bec6b6 #xcffaa6b71c9ab7b4 #x187f9ab49af08ec6 #x2d66c4f95142a46c #x6fa4c33b7a3039c0 #xae4faeae1d3ad3d9) #64@(#x8886564d3a14d493 #x3517454ca23c4af3 #x06476983284a0504 #x0992abc52d822c37 #xd3473e33197a93c9 #x399ec6c7e6bf87c9 #x51ac86febf240954 #xf4c70e16eeaac5ec) #64@(#xa47f0dd4bf02e71e #x36acc2355951a8d9 #x69d18d2bd1a5c42f #xf4892bcb929b0690 #x89b4443b4ddbc49a #x4eb7f8719c36de1e #x03e7aa020c6e4141 #x9b1f5b424d93c9a7) #64@(#x7261445183235adb #x0e38dc92cb1f2a60 #x7b2b8a9aa6079c54 #x800a440bdbb2ceb1 #x3cd955b7e00d0984 #x3a7d3a1b25894224 #x944c9ad8ec165fde #x378f5a541631229b) #64@(#x74b4c7fb98459ced #x3698fad1153bb6c3 #x7a1e6c303b7652f4 #x9fe76702af69334b #x1fffe18a1b336103 #x8941e71cff8a78db #x382ae548b2e4f3f3 #xabbedea680056f52) #64@(#x6bcaa4cd81f32d1b #xdea2594ac06fd85d #xefbacd1d7d476e98 #x8a1d71efea48b9ca #x2001802114846679 #xd8fa6bbbebab0761 #x3002c6cd635afe94 #x7bcd9ed0efc889fb) #64@(#x48bc924af11bd720 #xfaf417d5d9b21b99 #xe71da4aa88e12852 #x5d80ef9d1891cc86 #xf82012d430219f9b #xcda43c32bcdf1d77 #xd21380b00449b17a #x378ee767f11631ba))) (defconst +streebog-ax+ (make-array '(8 256) :element-type '(unsigned-byte 64) :initial-contents '((#xd01f715b5c7ef8e6 #x16fa240980778325 #xa8a42e857ee049c8 #x6ac1068fa186465b #x6e417bd7a2e9320b #x665c8167a437daab #x7666681aa89617f6 #x4b959163700bdcf5 #xf14be6b78df36248 #xc585bd689a625cff #x9557d7fca67d82cb #x89f0b969af6dd366 #xb0833d48749f6c35 #xa1998c23b1ecbc7c #x8d70c431ac02a736 #xd6dfbc2fd0a8b69e #x37aeb3e551fa198b #x0b7d128a40b5cf9c #x5a8f2008b5780cbc #xedec882284e333e5 #xd25fc177d3c7c2ce #x5e0f5d50b61778ec #x1d873683c0c24cb9 #xad040bcbb45d208c #x2f89a0285b853c76 #x5732fff6791b8d58 #x3e9311439ef6ec3f #xc9183a809fd3c00f #x83adf3f5260a01ee #xa6791941f4e8ef10 #x103ae97d0ca1cd5d #x2ce948121dee1b4a #x39738421dbf2bf53 #x093da2a6cf0cf5b4 #xcd9847d89cbcb45f #xf9561c078b2d8ae8 #x9c6a755a6971777f #xbc1ebaa0712ef0c5 #x72e61542abf963a6 #x78bb5fde229eb12e #x14ba94250fceb90d #x844d6697630e5282 #x98ea08026a1e032f #xf06bbea144217f5c #xdb6263d11ccb377a #x641c314b2b8ee083 #x320e96ab9b4770cf #x1ee7deb986a96b85 #xe96cf57a878c47b5 #xfdd6615f8842feb8 #xc83862965601dd1b #x2ea9f83e92572162 #xf876441142ff97fc #xeb2c455608357d9d #x5612a7e0b0c9904c #x6c01cbfb2d500823 #x4548a6a7fa037a2d #xabc4c6bf388b6ef4 #xbade77d4fdf8bebd #x799b07c8eb4cac3a #x0c9d87e805b19cf0 #xcb588aac106afa27 #xea0c1d40c1e76089 #x2869354a1e816f1a #xff96d17307fbc490 #x9f0a9d602f1a5043 #x96373fc6e016a5f7 #x5292dab8b3a6e41c #x9b8ae0382c752413 #x4f15ec3b7364a8a5 #x3fb349555724f12b #xc7c50d4415db66d7 #x92b7429ee379d1a7 #xd37f99611a15dfda #x231427c05e34a086 #xa439a96d7b51d538 #xb403401077f01865 #xdda2aea5901d7902 #x0a5d4a9c8967d288 #xc265280adf660f93 #x8bb0094520d4e94e #x2a29856691385532 #x42a833c5bf072941 #x73c64d54622b7eb2 #x07e095624504536c #x8a905153e906f45a #x6f6123c16b3b2f1f #xc6e55552dc097bc3 #x4468feb133d16739 #xe211e7f0c7398829 #xa2f96419f7879b40 #x19074bdbc3ad38e9 #xf4ebc3f9474e0b0c #x43886bd376d53455 #xd8028beb5aa01046 #x51f23282f5cdc320 #xe7b1c2be0d84e16d #x081dfab006dee8a0 #x3b33340d544b857b #x7f5bcabc679ae242 #x0edd37c48a08a6d8 #x81ed43d9a9b33bc6 #xb1a3655ebd4d7121 #x69a1eeb5e7ed6167 #xf6ab73d5c8f73124 #x1a67a3e185c61fd5 #x2dc91004d43c065e #x0240b02c8fb93a28 #x90f7f2b26cc0eb8f #x3cd3a16f114fd617 #xaae49ea9f15973e0 #x06c0cd748cd64e78 #xda423bc7d5192a6e #xc345701c16b41287 #x6d2193ede4821537 #xfcf639494190e3ac #x7c3b228621f1c57e #xfb16ac2b0494b0c0 #xbf7e529a3745d7f9 #x6881b6a32e3f7c73 #xca78d2bad9b8e733 #xbbfe2fc2342aa3a9 #x0dbddffecc6381e4 #x70a6a56e2440598e #xe4d12a844befc651 #x8c509c2765d0ba22 #xee8c6018c28814d9 #x17da7c1f49a59e31 #x609c4c1328e194d3 #xb3e3d57232f44b09 #x91d7aaa4a512f69b #x0ffd6fd243dabbcc #x50d26a943c1fde34 #x6be15e9968545b4f #x94778fea6faf9fdf #x2b09dd7058ea4826 #x677cd9716de5c7bf #x49d5214fffb2e6dd #x0360e83a466b273c #x1fc786af4f7b7691 #xa0b9d435783ea168 #xd49f0c035f118cb6 #x01205816c9d21d14 #xac2453dd7d8f3d98 #x545217cc3f70aa64 #x26b4028e9489c9c2 #xdec2469fd6765e3e #x04807d58036f7450 #xe5f17292823ddb45 #xf30b569b024a5860 #x62dcfc3fa758aefb #xe84cad6c4e5e5aa1 #xccb81fce556ea94b #x53b282ae7a74f908 #x1b47fbf74c1402c1 #x368eebf39828049f #x7afbeff2ad278b06 #xbe5e0a8cfe97caed #xcfd8f7f413058e77 #xf78b2bc301252c30 #x4d555c17fcdd928d #x5f2f05467fc565f8 #x24f4b2a21b30f3ea #x860dd6bbecb768aa #x4c750401350f8f99 #x0000000000000000 #xecccd0344d312ef1 #xb5231806be220571 #xc105c030990d28af #x653c695de25cfd97 #x159acc33c61ca419 #xb89ec7f872418495 #xa9847693b73254dc #x58cf90243ac13694 #x59efc832f3132b80 #x5c4fed7c39ae42c4 #x828dabe3efd81cfa #xd13f294d95ace5f2 #x7d1b7a90e823d86a #xb643f03cf849224d #x3df3f979d89dcb03 #x7426d836272f2dde #xdfe21e891fa4432a #x3a136c1b9d99986f #xfa36f43dcd46add4 #xc025982650df35bb #x856d3e81aadc4f96 #xc4a5e57e53b041eb #x4708168b75ba4005 #xaf44bbe73be41aa4 #x971767d029c4b8e3 #xb9be9feebb939981 #x215497ecd18d9aae #x316e7e91dd2c57f3 #xcef8afe2dad79363 #x3853dc371220a247 #x35ee03c9de4323a3 #xe6919aa8c456fc79 #xe05157dc4880b201 #x7bdbb7e464f59612 #x127a59518318f775 #x332ecebd52956ddb #x8f30741d23bb9d1e #xd922d3fd93720d52 #x7746300c61440ae2 #x25d4eab4d2e2eefe #x75068020eefd30ca #x135a01474acaea61 #x304e268714fe4ae7 #xa519f17bb283c82c #xdc82f6b359cf6416 #x5baf781e7caa11a8 #xb2c38d64fb26561d #x34ce5bdf17913eb7 #x5d6fb56af07c5fd0 #x182713cd0a7f25fd #x9e2ac576e6c84d57 #x9aaab82ee5a73907 #xa3d93c0f3e558654 #x7e7b92aaae48ff56 #x872d8ead256575be #x41c8dbfff96c0e7d #x99ca5014a3cc1e3b #x40e883e930be1369 #x1ca76e95091051ad #x4e35b42dbab6b5b1 #x05a0254ecabd6944 #xe1710fca8152af15 #xf22b0e8dcb984574 #xb763a82a319b3f59 #x63fca4296e8ab3ef #x9d4a2d4ca0a36a6b #xe331bfe60eeb953d #xd5bf541596c391a2 #xf5cb9bef8e9c1618 #x46284e9dbc685d11 #x2074cffa185f87ba #xbd3ee2b6b8fcedd1 #xae64e3f1f23607b0 #xfeb68965ce29d984 #x55724fdaf6a2b770 #x29496d5cd753720e #xa75941573d3af204 #x8e102c0bea69800a #x111ab16bc573d049 #xd7ffe439197aab8a #xefac380e0b5a09cd #x48f579593660fbc9 #x22347fd697e6bd92 #x61bc1405e13389c7 #x4ab5c975b9d9c1e1 #x80cd1bcf606126d2 #x7186fd78ed92449a #x93971a882aabccb3 #x88d0e17f66bfce72 #x27945a985d5bd4d6) (#xde553f8c05a811c8 #x1906b59631b4f565 #x436e70d6b1964ff7 #x36d343cb8b1e9d85 #x843dfacc858aab5a #xfdfc95c299bfc7f9 #x0f634bdea1d51fa2 #x6d458b3b76efb3cd #x85c3f77cf8593f80 #x3c91315fbe737cb2 #x2148b03366ace398 #x18f8b8264c6761bf #xc830c1c495c9fb0f #x981a76102086a0aa #xaa16012142f35760 #x35cc54060c763cf6 #x42907d66cc45db2d #x8203d44b965af4bc #x3d6f3cefc3a0e868 #xbc73ff69d292bda7 #x8722ed0102e20a29 #x8f8185e8cd34deb7 #x9b0561dda7ee01d9 #x5335a0193227fad6 #xc9cecc74e81a6fd5 #x54f5832e5c2431ea #x99e47ba05d553470 #xf7bee756acd226ce #x384e05a5571816fd #xd1367452a47d0e6a #xf29fde1c386ad85b #x320c77316275f7ca #xd0c879e2d9ae9ab0 #xdb7406c69110ef5d #x45505e51a2461011 #xfc029872e46c5323 #xfa3cb6f5f7bc0cc5 #x031f17cd8768a173 #xbd8df2d9af41297d #x9d3b4f5ab43e5e3f #x4071671b36feee84 #x716207e7d3e3b83d #x48d20ff2f9283a1a #x27769eb4757cbc7e #x5c56ebc793f2e574 #xa48b474f9ef5dc18 #x52cbada94ff46e0c #x60c7da982d8199c6 #x0e9d466edc068b78 #x4eec2175eaf865fc #x550b8e9e21f7a530 #x6b7ba5bc653fec2b #x5eb7f1ba6949d0dd #x57ea94e3db4c9099 #xf640eae6d101b214 #xdd4a284182c0b0bb #xff1d8fbf6304f250 #xb8accb933bf9d7e8 #xe8867c478eb68c4d #x3f8e2692391bddc1 #xcb2fd60912a15a7c #xaec935dbab983d2f #xf55ffd2b56691367 #x80e2ce366ce1c115 #x179bf3f8edb27e1d #x01fe0db07dd394da #xda8a0b76ecc37b87 #x44ae53e1df9584cb #xb310b4b77347a205 #xdfab323c787b8512 #x3b511268d070b78e #x65e6e3d2b9396753 #x6864b271e2574d58 #x259784c98fc789d7 #x02e11a7dfabb35a9 #x8841a6dfa337158b #x7ade78c39b5dcdd0 #xb7cf804d9a2cc84a #x20b6bd831b7f7742 #x75bd331d3a88d272 #x418f6aab4b2d7a5e #xd9951cbb6babdaf4 #xb6318dfde7ff5c90 #x1f389b112264aa83 #x492c024284fbaec0 #xe33a0363c608f9a0 #x2688930408af28a4 #xc7538a1a341ce4ad #x5da8e677ee2171ae #x8c9e92254a5c7fc4 #x63d8cd55aae938b5 #x29ebd8daa97a3706 #x959827b37be88aa1 #x1484e4356adadf6e #xa7945082199d7d6b #xbf6ce8a455fa1cd4 #x9cc542eac9edcae5 #x79c16f0e1c356ca3 #x89bfab6fdee48151 #xd4174d1830c5f0ff #x9258048415eb419d #x6139d72850520d1c #x6a85a80c18ec78f1 #xcd11f88e0171059a #xcceff53e7ca29140 #xd229639f2315af19 #x90b91ef9ef507434 #x5977d28d074a1be1 #x311360fce51d56b9 #xc093a92d5a1f2f91 #x1a19a25bb6dc5416 #xeb996b8a09de2d3e #xfee3820f1ed7668a #xd7085ad5b7ad518c #x7fff41890fe53345 #xec5948bd67dde602 #x2fd5f65dbaaa68e0 #xa5754affe32648c2 #xf8ddac880d07396c #x6fa491468c548664 #x0c7c5c1326bdbed1 #x4a33158f03930fb3 #x699abfc19f84d982 #xe4fa2054a80b329c #x6707f9af438252fa #x08a368e9cfd6d49e #x47b1442c58fd25b8 #xbbb3dc5ebc91769b #x1665fe489061eac7 #x33f27a811fa66310 #x93a609346838d547 #x30ed6d4c98cec263 #x1dd9816cd8df9f2a #x94662a03063b1e7b #x83fdd9fbeb896066 #x7b207573e68e590a #x5f49fc0a149a4407 #x343259b671a5a82c #xfbc2bb458a6f981f #xc272b350a0a41a38 #x3aaf1fd8ada32354 #x6cbb868b0b3c2717 #xa2b569c88d2583fe #xf180c9d1bf027928 #xaf37386bd64ba9f5 #x12bacab2790a8088 #x4c0d3b0810435055 #xb2eeb9070e9436df #xc5b29067cea7d104 #xdcb425f1ff132461 #x4f122cc5972bf126 #xac282fa651230886 #xe7e537992f6393ef #xe61b3a2952b00735 #x709c0a57ae302ce7 #xe02514ae416058d3 #xc44c9dd7b37445de #x5a68c5408022ba92 #x1c278cdca50c0bf0 #x6e5a9cf6f18712be #x86dce0b17f319ef3 #x2d34ec2040115d49 #x4bcd183f7e409b69 #x2815d56ad4a9a3dc #x24698979f2141d0d #x0000000000000000 #x1ec696a15fb73e59 #xd86b110b16784e2e #x8e7f8858b0e74a6d #x063e2e8713d05fe6 #xe2c40ed3bbdb6d7a #xb1f1aeca89fc97ac #xe1db191e3cb3cc09 #x6418ee62c4eaf389 #xc6ad87aa49cf7077 #xd6f65765ca7ec556 #x9afb6c6dda3d9503 #x7ce05644888d9236 #x8d609f95378feb1e #x23a9aa4e9c17d631 #x6226c0e5d73aac6f #x56149953a69f0443 #xeeb852c09d66d3ab #x2b0ac2a753c102af #x07c023376e03cb3c #x2ccae1903dc2c993 #xd3d76e2f5ec63bc3 #x9e2458973356ff4c #xa66a5d32644ee9b1 #x0a427294356de137 #x783f62be61e6f879 #x1344c70204d91452 #x5b96c8f0fdf12e48 #xa90916ecc59bf613 #xbe92e5142829880e #x727d102a548b194e #x1be7afebcb0fc0cc #x3e702b2244c8491b #xd5e940a84d166425 #x66f9f41f3e51c620 #xabe80c913f20c3ba #xf07ec461c2d1edf2 #xf361d3ac45b94c81 #x0521394a94b8fe95 #xadd622162cf09c5c #xe97871f7f3651897 #xf4a1f09b2bba87bd #x095d6559b2054044 #x0bbc7f2448be75ed #x2af4cf172e129675 #x157ae98517094bb4 #x9fda55274e856b96 #x914713499283e0ee #xb952c623462a4332 #x74433ead475b46a8 #x8b5eb112245fb4f8 #xa34b6478f0f61724 #x11a5dd7ffe6221fb #xc16da49d27ccbb4b #x76a224d0bde07301 #x8aa0bca2598c2022 #x4df336b86d90c48f #xea67663a740db9e4 #xef465f70e0b54771 #x39b008152acb8227 #x7d1e5bf4f55e06ec #x105bd0cf83b1b521 #x775c2960c033e7db #x7e014c397236a79f #x811cc386113255cf #xeda7450d1a0e72d8 #x5889df3d7a998f3b #x2e2bfbedc779fc3a #xce0eef438619a4e9 #x372d4e7bf6cd095f #x04df34fae96b6a4f #xf923a13870d4adb6 #xa1aa7e050a4d228d #xa8f71b5cb84862c9 #xb52e9a306097fde3 #x0d8251a35b6e2a0b #x2257a7fee1c442eb #x73831d9a29588d94 #x51d4ba64c89ccf7f #x502ab7d4b54f5ba5 #x97793dce8153bf08 #xe5042de4d5d8a646 #x9687307efc802bd2 #xa05473b5779eb657 #xb4d097801d446939 #xcff0e2f3fbca3033 #xc38cbee0dd778ee2 #x464f499c252eb162 #xcad1dbb96f72cea6 #xba4dd1eec142e241 #xb00fa37af42f0376) (#xcce4cd3aa968b245 #x089d5484e80b7faf #x638246c1b3548304 #xd2fe0ec8c2355492 #xa7fbdf7ff2374eee #x4df1600c92337a16 #x84e503ea523b12fb #x0790bbfd53ab0c4a #x198a780f38f6ea9d #x2ab30c8f55ec48cb #xe0f7fed6b2c49db5 #xb6ecf3f422cadbdc #x409c9a541358df11 #xd3ce8a56dfde3fe3 #xc3e9224312c8c1a0 #x0d6dfa58816ba507 #xddf3e1b179952777 #x04c02a42748bb1d9 #x94c2abff9f2decb8 #x4f91752da8f8acf4 #x78682befb169bf7b #xe1c77a48af2ff6c4 #x0c5d7ec69c80ce76 #x4cc1e4928fd81167 #xfeed3d24d9997b62 #x518bb6dfc3a54a23 #x6dbf2d26151f9b90 #xb5bc624b05ea664f #xe86aaa525acfe21a #x4801ced0fb53a0be #xc91463e6c00868ed #x1027a815cd16fe43 #xf67069a0319204cd #xb04ccc976c8abce7 #xc0b9b3fc35e87c33 #xf380c77c58f2de65 #x50bb3241de4e2152 #xdf93f490435ef195 #xf1e0d25d62390887 #xaf668bfb1a3c3141 #xbc11b251f00a7291 #x73a5eed47e427d47 #x25bee3f6ee4c3b2e #x43cc0beb34786282 #xc824e778dde3039c #xf97d86d98a327728 #xf2b043e24519b514 #xe297ebf7880f4b57 #x3a94a49a98fab688 #x868516cb68f0c419 #xeffa11af0964ee50 #xa4ab4ec0d517f37d #xa9c6b498547c567a #x8e18424f80fbbbb6 #x0bcdc53bcf2bc23c #x137739aaea3643d0 #x2c1333ec1bac2ff0 #x8d48d3f0a7db0625 #x1e1ac3f26b5de6d7 #xf520f81f16b2b95e #x9f0f6ec450062e84 #x0130849e1deb6b71 #xd45e31ab8c7533a9 #x652279a2fd14e43f #x3209f01e70f1c927 #xbe71a770cac1a473 #x0e3d6be7a64b1894 #x7ec8148cff29d840 #xcb7476c7fac3be0f #x72956a4a63a91636 #x37f95ec21991138f #x9e3fea5a4ded45f5 #x7b38ba50964902e8 #x222e580bbde73764 #x61e253e0899f55e6 #xfc8d2805e352ad80 #x35994be3235ac56d #x09add01af5e014de #x5e8659a6780539c6 #xb17c48097161d796 #x026015213acbd6e2 #xd1ae9f77e515e901 #xb7dc776a3f21b0ad #xaba6a1b96eb78098 #x9bcf4486248d9f5d #x582666c536455efd #xfdbdac9bfeb9c6f1 #xc47999be4163cdea #x765540081722a7ef #x3e548ed8ec710751 #x3d041f67cb51bac2 #x7958af71ac82d40a #x36c9da5c047a78fe #xed9a048e33af38b2 #x26ee7249c96c86bd #x900281bdeba65d61 #x11172c8bd0fd9532 #xea0abf73600434f8 #x42fc8f75299309f3 #x34a9cf7d3eb1ae1c #x2b838811480723ba #x5ce64c8742ceef24 #x1adae9b01fd6570e #x3c349bf9d6bad1b3 #x82453c891c7b75c0 #x97923a40b80d512b #x4a61dbf1c198765c #xb48ce6d518010d3e #xcfb45c858e480fd6 #xd933cbf30d1e96ae #xd70ea014ab558e3a #xc189376228031742 #x9262949cd16d8b83 #xeb3a3bed7def5f89 #x49314a4ee6b8cbcf #xdcc3652f647e4c06 #xda635a4c2a3e2b3d #x470c21a940f3d35b #x315961a157d174b4 #x6672e81dda3459ac #x5b76f77a1165e36e #x445cb01667d36ec8 #xc5491d205c88a69b #x456c34887a3805b9 #xffddb9bac4721013 #x99af51a71e4649bf #xa15be01cbc7729d5 #x52db2760e485f7b0 #x8c78576eba306d54 #xae560f6507d75a30 #x95f22f6182c687c9 #x71c5fbf54489aba5 #xca44f259e728d57e #x88b87d2ccebbdc8d #xbab18d32be4a15aa #x8be8ec93e99b611e #x17b713e89ebdf209 #xb31c5d284baa0174 #xeeca9531148f8521 #xb8d198138481c348 #x8988f9b2d350b7fc #xb9e11c8d996aa839 #x5a4673e40c8e881f #x1687977683569978 #xbf4123eed72acf02 #x4ea1f1b3b513c785 #xe767452be16f91ff #x7505d1b730021a7c #xa59bca5ec8fc980c #xad069eda20f7e7a3 #x38f4b1bba231606a #x60d2d77e94743e97 #x9affc0183966f42c #x248e6768f3a7505f #xcdd449a4b483d934 #x87b59255751baf68 #x1bea6d2e023d3c7f #x6b1f12455b5ffcab #x743555292de9710d #xd8034f6d10f5fddf #xc6198c9f7ba81b08 #xbb8109aca3a17edb #xfa2d1766ad12cabb #xc729080166437079 #x9c5fff7b77269317 #x0000000000000000 #x15d706c9a47624eb #x6fdf38072fd44d72 #x5fb6dd3865ee52b7 #xa33bf53d86bcff37 #xe657c1b5fc84fa8e #xaa962527735cebe9 #x39c43525bfda0b1b #x204e4d2a872ce186 #x7a083ece8ba26999 #x554b9c9db72efbfa #xb22cd9b656416a05 #x96a2bedea5e63a5a #x802529a826b0a322 #x8115ad363b5bc853 #x8375b81701901eb1 #x3069e53f4a3a1fc5 #xbd2136cfede119e0 #x18bafc91251d81ec #x1d4a524d4c7d5b44 #x05f0aedc6960daa8 #x29e39d3072ccf558 #x70f57f6b5962c0d4 #x989fd53903ad22ce #xf84d024797d91c59 #x547b1803aac5908b #xf0d056c37fd263f6 #xd56eb535919e58d8 #x1c7ad6d351963035 #x2e7326cd2167f912 #xac361a443d1c8cd2 #x697f076461942a49 #x4b515f6fdc731d2d #x8ad8680df4700a6f #x41ac1eca0eb3b460 #x7d988533d80965d3 #xa8f6300649973d0b #x7765c4960ac9cc9e #x7ca801adc5e20ea2 #xdea3700e5eb59ae4 #xa06b6482a19c42a4 #x6a2f96db46b497da #x27def6d7d487edcc #x463ca5375d18b82a #xa6cb5be1efdc259f #x53eba3fef96e9cc1 #xce84d81b93a364a7 #xf4107c810b59d22f #x333974806d1aa256 #x0f0def79bba073e5 #x231edc95a00c5c15 #xe437d494c64f2c6c #x91320523f64d3610 #x67426c83c7df32dd #x6eefbc99323f2603 #x9d6f7be56acdf866 #x5916e25b2bae358c #x7ff89012e2c2b331 #x035091bf2720bd93 #x561b0d22900e4669 #x28d319ae6f279e29 #x2f43a2533c8c9263 #xd09e1be9f8fe8270 #xf740ed3e2c796fbc #xdb53ded237d5404c #x62b2c25faebfe875 #x0afd41a5d2c0a94d #x6412fd3ce0ff8f4e #xe3a76f6995e42026 #x6c8fa9b808f4f0e1 #xc2d9a6dd0f23aad1 #x8f28c6d19d10d0c7 #x85d587744fd0798a #xa20b71a39b579446 #x684f83fa7c7f4138 #xe507500adba4471d #x3f640a46f19a6c20 #x1247bd34f7dd28a1 #x2d23b77206474481 #x93521002cc86e0f2 #x572b89bc8de52d18 #xfb1d93f8b0f9a1ca #xe95a2ecc4724896b #x3ba420048511ddf9 #xd63e248ab6bee54b #x5dd6c8195f258455 #x06a03f634e40673b #x1f2a476c76b68da6 #x217ec9b49ac78af7 #xecaa80102e4453c3 #x14e78257b99d4f9a) (#x20329b2cc87bba05 #x4f5eb6f86546a531 #xd4f44775f751b6b1 #x8266a47b850dfa8b #xbb986aa15a6ca985 #xc979eb08f9ae0f99 #x2da6f447a2375ea1 #x1e74275dcd7d8576 #xbc20180a800bc5f8 #xb4a2f701b2dc65be #xe726946f981b6d66 #x48e6c453bf21c94c #x42cad9930f0a4195 #xefa47b64aacccd20 #x71180a8960409a42 #x8bb3329bf6a44e0c #xd34c35de2d36dacc #xa92f5b7cbc23dc96 #xb31a85aa68bb09c3 #x13e04836a73161d2 #xb24dfc4129c51d02 #x8ae44b70b7da5acd #xe671ed84d96579a7 #xa4bb3417d66f3832 #x4572ab38d56d2de8 #xb1b47761ea47215c #xe81c09cf70aba15d #xffbdb872ce7f90ac #xa8782297fd5dc857 #x0d946f6b6a4ce4a4 #xe4df1f4f5b995138 #x9ebc71edca8c5762 #x0a2c1dc0b02b88d9 #x3b503c115d9d7b91 #xc64376a8111ec3a2 #xcec199a323c963e4 #xdc76a87ec58616f7 #x09d596e073a9b487 #x14583a9d7d560daf #xf4c6dc593f2a0cb4 #xdd21d19584f80236 #x4a4836983ddde1d3 #xe58866a41ae745f9 #xf591a5b27e541875 #x891dc05074586693 #x5b068c651810a89e #xa30346bc0c08544f #x3dbf3751c684032d #x2a1e86ec785032dc #xf73f5779fca830ea #xb60c05ca30204d21 #x0cc316802b32f065 #x8770241bdd96be69 #xb861e18199ee95db #xf805cad91418fcd1 #x29e70dccbbd20e82 #xc7140f435060d763 #x0f3a9da0e8b0cc3b #xa2543f574d76408e #xbd7761e1c175d139 #x4b1f4f737ca3f512 #x6dc2df1f2fc137ab #xf1d05c3967b14856 #xa742bf3715ed046c #x654030141d1697ed #x07b872abda676c7d #x3ce84eba87fa17ec #xc1fb0403cb79afdf #x3e46bc7105063f73 #x278ae987121cd678 #xa1adb4778ef47cd0 #x26dd906c5362c2b9 #x05168060589b44e2 #xfbfc41f9d79ac08f #x0e6de44ba9ced8fa #x9feb08068bf243a3 #x7b341749d06b129b #x229c69e74a87929a #xe09ee6c4427c011b #x5692e30e725c4c3a #xda99a33e5e9f6e4b #x353dd85af453a36b #x25241b4c90e0fee7 #x5de987258309d022 #xe230140fc0802984 #x93281e86a0c0b3c6 #xf229d719a4337408 #x6f6c2dd4ad3d1f34 #x8ea5b2fbae3f0aee #x8331dd90c473ee4a #x346aa1b1b52db7aa #xdf8f235e06042aa9 #xcc6f6b68a1354b7b #x6c95a6f46ebf236a #x52d31a856bb91c19 #x1a35ded6d498d555 #xf37eaef2e54d60c9 #x72e181a9a3c2a61c #x98537aad51952fde #x16f6c856ffaa2530 #xd960281e9d1d5215 #x3a0745fa1ce36f50 #x0b7b642bf1559c18 #x59a87eae9aec8001 #x5e100c05408bec7c #x0441f98b19e55023 #xd70dcc5534d38aef #x927f676de1bea707 #x9769e70db925e3e5 #x7a636ea29115065a #x468b201816ef11b6 #xab81a9b73edff409 #xc0ac7de88a07bb1e #x1f235eb68c0391b7 #x6056b074458dd30f #xbe8eeac102f7ed67 #xcd381283e04b5fba #x5cbefecec277c4e3 #xd21b4c356c48ce0d #x1019c31664b35d8c #x247362a7d19eea26 #xebe582efb3299d03 #x02aef2cb82fc289f #x86275df09ce8aaa8 #x28b07427faac1a43 #x38a9b7319e1f47cf #xc82e92e3b8d01b58 #x06ef0b409b1978bc #x62f842bfc771fb90 #x9904034610eb3b1f #xded85ab5477a3e68 #x90d195a663428f98 #x5384636e2ac708d8 #xcbd719c37b522706 #xae9729d76644b0eb #x7c8c65e20a0c7ee6 #x80c856b007f1d214 #x8c0b40302cc32271 #xdbcedad51fe17a8a #x740e8ae938dbdea0 #xa615c6dc549310ad #x19cc55f6171ae90b #x49b1bdb8fe5fdd8d #xed0a89af2830e5bf #x6a7aadb4f5a65bd6 #x7e22972988f05679 #xf952b3325566e810 #x39fecedadf61530e #x6101c99f04f3c7ce #x2e5f7f6761b562ff #xf08725d226cf5c97 #x63af3b54860fef51 #x8ff2cb10ef411e2f #x884ab9bb35267252 #x4df04433e7ba8dae #x9afd8866d3690741 #x66b9bb34de94abb3 #x9baaf18d92171380 #x543c11c5f0a064a5 #x17a1b1bdbed431f1 #xb5f58eeaf3a2717f #xc355f6c849858740 #xec5df044694ef17e #xd83751f5dc6346d4 #xfc4433520dfdacf2 #x0000000000000000 #x5a51f58e596ebc5f #x3285aaf12e34cf16 #x8d5c39db6dbd36b0 #x12b731dde64f7513 #x94906c2d7aa7dfbb #x302b583aacc8e789 #x9d45facd090e6b3c #x2165e2c78905aec4 #x68d45f7f775a7349 #x189b2c1d5664fdca #xe1c99f2f030215da #x6983269436246788 #x8489af3b1e148237 #xe94b702431d5b59c #x33d2d31a6f4adbd7 #xbfd9932a4389f9a6 #xb0e30e8aab39359d #xd1e2c715afcaf253 #x150f43763c28196e #xc4ed846393e2eb3d #x03f98b20c3823c5e #xfd134ab94c83b833 #x556b682eb1de7064 #x36c4537a37d19f35 #x7559f30279a5ca61 #x799ae58252973a04 #x9c12832648707ffd #x78cd9c6913e92ec5 #x1d8dac7d0effb928 #x439da0784e745554 #x413352b3cc887dcb #xbacf134a1b12bd44 #x114ebafd25cd494d #x2f08068c20cb763e #x76a07822ba27f63f #xeab2fb04f25789c2 #xe3676de481fe3d45 #x1b62a73d95e6c194 #x641749ff5c68832c #xa5ec4dfc97112cf3 #xf6682e92bdd6242b #x3f11c59a44782bb2 #x317c21d1edb6f348 #xd65ab5be75ad9e2e #x6b2dd45fb4d84f17 #xfaab381296e4d44e #xd0b5befeeeb4e692 #x0882ef0b32d7a046 #x512a91a5a83b2047 #x963e9ee6f85bf724 #x4e09cf132438b1f0 #x77f701c9fb59e2fe #x7ddb1c094b726a27 #x5f4775ee01f5f8bd #x9186ec4d223c9b59 #xfeeac1998f01846d #xac39db1ce4b89874 #xb75b7c21715e59e0 #xafc0503c273aa42a #x6e3b543fec430bf5 #x704f7362213e8e83 #x58ff0745db9294c0 #x67eec2df9feabf72 #xa0facd9ccf8a6811 #xb936986ad890811a #x95c715c63bd9cb7a #xca8060283a2c33c7 #x507de84ee9453486 #x85ded6d05f6a96f6 #x1cdad5964f81ade9 #xd5a33e9eb62fa270 #x40642b588df6690a #x7f75eec2c98e42b8 #x2cf18dace3494a60 #x23cb100c0bf9865b #xeef3028febb2d9e1 #x4425d2d394133929 #xaad6d05c7fa1e0c8 #xad6ea2f7a5c68cb5 #xc2028f2308fb9381 #x819f2f5b468fc6d5 #xc5bafd88d29cfffc #x47dc59f357910577 #x2b49ff07392e261d #x57c59ae5332258fb #x73b6f842e2bcb2dd #xcf96e04862b77725 #x4ca73dd8a6c4996f #x015779eb417e14c1 #x37932a9176af8bf4) (#x190a2c9b249df23e #x2f62f8b62263e1e9 #x7a7f754740993655 #x330b7ba4d5564d9f #x4c17a16a46672582 #xb22f08eb7d05f5b8 #x535f47f40bc148cc #x3aec5d27d4883037 #x10ed0a1825438f96 #x516101f72c233d17 #x13cc6f949fd04eae #x739853c441474bfd #x653793d90d3f5b1b #x5240647b96b0fc2f #x0c84890ad27623e0 #xd7189b32703aaea3 #x2685de3523bd9c41 #x99317c5b11bffefa #x0d9baa854f079703 #x70b93648fbd48ac5 #xa80441fce30bc6be #x7287704bdc36ff1e #xb65384ed33dc1f13 #xd36417343ee34408 #x39cd38ab6e1bf10f #x5ab861770a1f3564 #x0ebacf09f594563b #xd04572b884708530 #x3cae9722bdb3af47 #x4a556b6f2f5cbaf2 #xe1704f1f76c4bd74 #x5ec4ed7144c6dfcf #x16afc01d4c7810e6 #x283f113cd629ca7a #xaf59a8761741ed2d #xeed5a3991e215fac #x3bf37ea849f984d4 #xe413e096a56ce33c #x2c439d3a98f020d1 #x637559dc6404c46b #x9e6c95d1e5f5d569 #x24bb9836045fe99a #x44efa466dac8ecc9 #xc6eab2a5c80895d6 #x803b50c035220cc4 #x0321658cba93c138 #x8f9ebc465dc7ee1c #xd15a5137190131d3 #x0fa5ec8668e5e2d8 #x91c979578d1037b1 #x0642ca05693b9f70 #xefca80168350eb4f #x38d21b24f36a45ec #xbeab81e1af73d658 #x8cbfd9cae7542f24 #xfd19cc0d81f11102 #x0ac6430fbb4dbc90 #x1d76a09d6a441895 #x2a01573ff1cbbfa1 #xb572e161894fde2b #x8124734fa853b827 #x614b1fdf43e6b1b0 #x68ac395c4238cc18 #x21d837bfd7f7b7d2 #x20c714304a860331 #x5cfaab726324aa14 #x74c5ba4eb50d606e #xf3a3030474654739 #x23e671bcf015c209 #x45f087e947b9582a #xd8bd77b418df4c7b #xe06f6c90ebb50997 #x0bd96080263c0873 #x7e03f9410e40dcfe #xb8e94be4c6484928 #xfb5b0608e8ca8e72 #x1a2b49179e0e3306 #x4e29e76961855059 #x4f36c4e6fcf4e4ba #x49740ee395cf7bca #xc2963ea386d17f7d #x90d65ad810618352 #x12d34c1b02a1fa4d #xfa44258775bb3a91 #x18150f14b9ec46dd #x1491861e6b9a653d #x9a1019d7ab2c3fc2 #x3668d42d06fe13d7 #xdcc1fbb25606a6d0 #x969490dd795a1c22 #x3549b1a1bc6dd2ef #xc94f5e23a0ed770e #xb9f6686b5b39fdcb #xc4d4f4a6efeae00d #xe732851a1fff2204 #x94aad6de5eb869f9 #x3f8ff2ae07206e7f #xfe38a9813b62d03a #xa7a1ad7a8bee2466 #x7b6056c8dde882b6 #x302a1e286fc58ca7 #x8da0fa457a259bc7 #xb3302b64e074415b #x5402ae7eff8b635f #x08f8050c9cafc94b #xae468bf98a3059ce #x88c355cca98dc58f #xb10e6d67c7963480 #xbad70de7e1aa3cf3 #xbfb4a26e320262bb #xcb711820870f02d5 #xce12b7a954a75c9d #x563ce87dd8691684 #x9f73b65e7884618a #x2b1e74b06cba0b42 #x47cec1ea605b2df1 #x1c698312f735ac76 #x5fdbcefed9b76b2c #x831a354c8fb1cdfc #x820516c312c0791f #xb74ca762aeadabf0 #xfc06ef821c80a5e1 #x5723cbf24518a267 #x9d4df05d5f661451 #x588627742dfd40bf #xda8331b73f3d39a0 #x17b0e392d109a405 #xf965400bcf28fba9 #x7c3dbf4229a2a925 #x023e460327e275db #x6cd0b55a0ce126b3 #xe62da695828e96e7 #x42ad6e63b3f373b9 #xe50cc319381d57df #xc5cbd729729b54ee #x46d1e265fd2a9912 #x6428b056904eeff8 #x8be23040131e04b7 #x6709d5da2add2ec0 #x075de98af44a2b93 #x8447dcc67bfbe66f #x6616f655b7ac9a23 #xd607b8bded4b1a40 #x0563af89d3a85e48 #x3db1b4ad20c21ba4 #x11f22997b8323b75 #x292032b34b587e99 #x7f1cdace9331681d #x8e819fc9c0b65aff #xa1e3677fe2d5bb16 #xcd33d225ee349da5 #xd9a2543b85aef898 #x795e10cbfa0af76d #x25a4bbb9992e5d79 #x78413344677b438e #xf0826688cef68601 #xd27b34bba392f0eb #x551d8df162fad7bc #x1e57c511d0d7d9ad #xdeffbdb171e4d30b #xf4feea8e802f6caa #xa480c8f6317de55e #xa0fc44f07fa40ff5 #x95b5f551c3c9dd1a #x22f952336d6476ea #x0000000000000000 #xa6be8ef5169f9085 #xcc2cf1aa73452946 #x2e7ddb39bf12550a #xd526dd3157d8db78 #x486b2d6c08becf29 #x9b0f3a58365d8b21 #xac78cdfaadd22c15 #xbc95c7e28891a383 #x6a927f5f65dab9c3 #xc3891d2c1ba0cb9e #xeaa92f9f50f8b507 #xcf0d9426c9d6e87e #xca6e3baf1a7eb636 #xab25247059980786 #x69b31ad3df4978fb #xe2512a93cc577c4c #xff278a0ea61364d9 #x71a615c766a53e26 #x89dc764334fc716c #xf87a638452594f4a #xf2bc208be914f3da #x8766b94ac1682757 #xbbc82e687cdb8810 #x626a7a53f9757088 #xa2c202f358467a2e #x4d0882e5db169161 #x09e7268301de7da8 #xe897699c771ac0dc #xc8507dac3d9cc3ed #xc0a878a0a1330aa6 #x978bb352e42ba8c1 #xe9884a13ea6b743f #x279afdbabecc28a2 #x047c8c064ed9eaab #x507e2278b15289f4 #x599904fbb08cf45c #xbd8ae46d15e01760 #x31353da7f2b43844 #x8558ff49e68a528c #x76fbfc4d92ef15b5 #x3456922e211c660c #x86799ac55c1993b4 #x3e90d1219a51da9c #x2d5cbeb505819432 #x982e5fd48cce4a19 #xdb9c1238a24c8d43 #xd439febecaa96f9b #x418c0bef0960b281 #x158ea591f6ebd1de #x1f48e69e4da66d4e #x8afd13cf8e6fb054 #xf5e1c9011d5ed849 #xe34e091c5126c8af #xad67ee7530a398f6 #x43b24dec2e82c75a #x75da99c1287cd48d #x92e81cdb3783f689 #xa3dd217cc537cecd #x60543c50de970553 #x93f73f54aaf2426a #xa91b62737e7a725d #xf19d4507538732e2 #x77e4dfc20f9ea156 #x7d229ccdb4d31dc6 #x1b346a98037f87e5 #xedf4c615a4b29e94 #x4093286094110662 #xb0114ee85ae78063 #x6ff1d0d6b672e78b #x6dcf96d591909250 #xdfe09e3eec9567e8 #x3214582b4827f97c #xb46dc2ee143e6ac8 #xf6c0ac8da7cd1971 #xebb60c10cd8901e4 #xf7df8f023abcad92 #x9c52d3d2c217a0b2 #x6b8d5cd0f8ab0d20 #x3777f7a29b8fa734 #x011f238f9d71b4e3 #xc1b75b2f3c42be45 #x5de588fdfe551ef7 #x6eeef3592b035368 #xaa3a07ffc4e9b365 #xecebe59a39c32a77 #x5ba742f8976e8187 #x4b4a48e0b22d0e11 #xddded83dcb771233 #xa59feb79ac0c51bd #xc7f5912a55792135) (#x6d6ae04668a9b08a #x3ab3f04b0be8c743 #xe51e166b54b3c908 #xbe90a9eb35c2f139 #xb2c7066637f2bec1 #xaa6945613392202c #x9a28c36f3b5201eb #xddce5a93ab536994 #x0e34133ef6382827 #x52a02ba1ec55048b #xa2f88f97c4b2a177 #x8640e513ca2251a5 #xcdf1d36258137622 #xfe6cb708dedf8ddb #x8a174a9ec8121e5d #x679896036b81560e #x59ed033395795fee #x1dd778ab8b74edaf #xee533ef92d9f926d #x2a8c79baf8a8d8f5 #x6bcf398e69b119f6 #xe20491742fafdd95 #x276488e0809c2aec #xea955b82d88f5cce #x7102c63a99d9e0c4 #xf9763017a5c39946 #x429fa2501f151b3d #x4659c72bea05d59e #x984b7fdccf5a6634 #xf742232953fbb161 #x3041860e08c021c7 #x747bfd9616cd9386 #x4bb1367192312787 #x1b72a1638a6c44d3 #x4a0e68a6e8359a66 #x169a5039f258b6ca #xb98a2ef44edee5a4 #xd9083fe85e43a737 #x967f6ce239624e13 #x8874f62d3c1a7982 #x3c1629830af06e3f #x9165ebfd427e5a8e #xb5dd81794ceeaa5c #x0de8f15a7834f219 #x70bd98ede3dd5d25 #xaccc9ca9328a8950 #x56664eda1945ca28 #x221db34c0f8859ae #x26dbd637fa98970d #x1acdffb4f068f932 #x4585254f64090fa0 #x72de245e17d53afa #x1546b25d7c546cf4 #x207e0ffffb803e71 #xfaaad2732bcf4378 #xb462dfae36ea17bd #xcf926fd1ac1b11fd #xe0672dc7dba7ba4a #xd3fa49ad5d6b41b3 #x8ba81449b216a3bc #x14f9ec8a0650d115 #x40fc1ee3eb1d7ce2 #x23a2ed9b758ce44f #x782c521b14fddc7e #x1c68267cf170504e #xbcf31558c1ca96e6 #xa781b43b4ba6d235 #xf6fd7dfe29ff0c80 #xb0a4bad5c3fad91e #xd199f51ea963266c #x414340349119c103 #x5405f269ed4dadf7 #xabd61bb649969dcd #x6813dbeae7bdc3c8 #x65fb2ab09f8931d1 #xf1e7fae152e3181d #xc1a67cef5a2339da #x7a4feea8e0f5bba1 #x1e0b9acf05783791 #x5b8ebf8061713831 #x80e53cdbcb3af8d9 #x7e898bd315e57502 #xc6bcfbf0213f2d47 #x95a38e86b76e942d #x092e94218d243cba #x8339debf453622e7 #xb11be402b9fe64ff #x57d9100d634177c9 #xcc4e8db52217cbc3 #x3b0cae9c71ec7aa2 #xfb158ca451cbfe99 #x2b33276d82ac6514 #x01bf5ed77a04bde1 #xc5601994af33f779 #x75c4a3416cc92e67 #xf3844652a6eb7fc2 #x3487e375fdd0ef64 #x18ae430704609eed #x4d14efb993298efb #x815a620cb13e4538 #x125c354207487869 #x9eeea614ce42cf48 #xce2d3106d61fac1c #xbbe99247bad6827b #x071a871f7b1c149d #x2e4a1cc10db81656 #x77a71ff298c149b8 #x06a5d9c80118a97c #xad73c27e488e34b1 #x443a7b981e0db241 #xe3bbcfa355ab6074 #x0af276450328e684 #x73617a896dd1871b #x58525de4ef7de20f #xb7be3dcab8e6cd83 #x19111dd07e64230c #x842359a03e2a367a #x103f89f1f3401fb6 #xdc710444d157d475 #xb835702334da5845 #x4320fc876511a6dc #xd026abc9d3679b8d #x17250eee885c0b2b #x90dab52a387ae76f #x31fed8d972c49c26 #x89cba8fa461ec463 #x2ff5421677bcabb7 #x396f122f85e41d7d #xa09b332430bac6a8 #xc888e8ced7070560 #xaeaf201ac682ee8f #x1180d7268944a257 #xf058a43628e7a5fc #xbd4c4b8fbbce2b07 #xa1246df34abe7b49 #x7d5569b79be9af3c #xa9b5a705bd9efa12 #xdb6b835baa4bc0e8 #x05793bac8f147342 #x21c1512881848390 #xfdb0556c50d357e5 #x613d4fcb6a99ff72 #x03dce2648e0cda3e #xe949b9e6568386f0 #xfc0f0bbb2ad7ea04 #x6a70675913b5a417 #x7f36d5046fe1c8e3 #x0c57af8d02304ff8 #x32223abdfcc84618 #x0891caf6f720815b #xa63eeaec31a26fd4 #x2507345374944d33 #x49d28ac266394058 #xf5219f9aa7f3d6be #x2d96fea583b4cc68 #x5a31e1571b7585d0 #x8ed12fe53d02d0fe #xdfade6205f5b0e4b #x4cabb16ee92d331a #x04c6657bf510cea3 #xd73c2cd6a87b8f10 #xe1d87310a1a307ab #x6cd5be9112ad0d6b #x97c032354366f3f2 #xd4e0ceb22677552e #x0000000000000000 #x29509bde76a402cb #xc27a9e8bd42fe3e4 #x5ef7842cee654b73 #xaf107ecdbc86536e #x3fcacbe784fcb401 #xd55f90655c73e8cf #xe6c2f40fdabf1336 #xe8f6e7312c873b11 #xeb2a0555a28be12f #xe4a148bc2eb774e9 #x9b979db84156bc0a #x6eb60222e6a56ab4 #x87ffbbc4b026ec44 #xc703a5275b3b90a6 #x47e699fc9001687f #x9c8d1aa73a4aa897 #x7cea3760e1ed12dd #x4ec80ddd1d2554c5 #x13e36b957d4cc588 #x5d2b66486069914d #x92b90999cc7280b0 #x517cc9c56259deb5 #xc937b619ad03b881 #xec30824ad997f5b2 #xa45d565fc5aa080b #xd6837201d27f32f1 #x635ef3789e9198ad #x531f75769651b96a #x4f77530a6721e924 #x486dd4151c3dfdb9 #x5f48dafb9461f692 #x375b011173dc355a #x3da9775470f4d3de #x8d0dcd81b30e0ac0 #x36e45fc609d888bb #x55baacbe97491016 #x8cb29356c90ab721 #x76184125e2c5f459 #x99f4210bb55edbd5 #x6f095cf59ca1d755 #x9f51f8c3b44672a9 #x3538bda287d45285 #x50c39712185d6354 #xf23b1885dcefc223 #x79930ccc6ef9619f #xed8fdc9da3934853 #xcb540aaa590bdf5e #x5c94389f1a6d2cac #xe77daad8a0bbaed7 #x28efc5090ca0bf2a #xbf2ff73c4fc64cd8 #xb37858b14df60320 #xf8c96ec0dfc724a7 #x828680683f329f06 #x941cd051cd6a29cc #xc3c5c05cae2b5e05 #xb601631dc2e27062 #xc01922382027843b #x24b86a840e90f0d2 #xd245177a276ffc52 #x0f8b4de98c3c95c6 #x3e759530fef809e0 #x0b4d2892792c5b65 #xc4df4743d5374a98 #xa5e20888bfaeb5ea #xba56cc90c0d23f9a #x38d04cf8ffe0a09c #x62e1adafe495254c #x0263bcb3f40867df #xcaeb547d230f62bf #x6082111c109d4293 #xdad4dd8cd04f7d09 #xefec602e579b2f8c #x1fb4c4187f7c8a70 #xffd3e9dfa4db303a #x7bf0b07f9af10640 #xf49ec14dddf76b5f #x8f6e713247066d1f #x339d646a86ccfbf9 #x64447467e58d8c30 #x2c29a072f9b07189 #xd8b7613f24471ad6 #x6627c8d41185ebef #xa347d140beb61c96 #xde12b8f7255fb3aa #x9d324470404e1576 #x9306574eb6763d51 #xa80af9d2c79a47f3 #x859c0777442e8b9b #x69ac853d9db97e29) (#xc3407dfc2de6377e #x5b9e93eea4256f77 #xadb58fdd50c845e0 #x5219ff11a75bed86 #x356b61cfd90b1de9 #xfb8f406e25abe037 #x7a5a0231c0f60796 #x9d3cd216e1f5020b #x0c6550fb6b48d8f3 #xf57508c427ff1c62 #x4ad35ffa71cb407d #x6290a2da1666aa6d #xe284ec2349355f9f #xb3c307c53d7c84ec #x05e23c0468365a02 #x190bac4d6c9ebfa8 #x94bbbee9e28b80fa #xa34fc777529cb9b5 #xcc7b39f095bcd978 #x2426addb0ce532e3 #x7e79329312ce4fc7 #xab09a72eebec2917 #xf8d15499f6b9d6c2 #x1a55b8babf8c895d #xdb8add17fb769a85 #xb57f2f368658e81b #x8acd36f18f3f41f6 #x5ce3b7bba50f11d3 #x114dcc14d5ee2f0a #xb91a7fcded1030e8 #x81d5425fe55de7a1 #xb6213bc1554adeee #x80144ef95f53f5f2 #x1e7688186db4c10c #x3b912965db5fe1bc #xc281715a97e8252d #x54a5d7e21c7f8171 #x4b12535ccbc5522e #x1d289cefbea6f7f9 #x6ef5f2217d2e729e #xe6a7dc819b0d17ce #x1b94b41c05829b0e #x33d7493c622f711e #xdcf7f942fa5ce421 #x600fba8b7f7a8ecb #x46b60f011a83988e #x235b898e0dcf4c47 #x957ab24f588592a9 #x4354330572b5c28c #xa5f3ef84e9b8d542 #x8c711e02341b2d01 #x0b1874ae6a62a657 #x1213d8e306fc19ff #xfe6d7c6a4d9dba35 #x65ed868f174cd4c9 #x88522ea0e6236550 #x899322065c2d7703 #xc01e690bfef4018b #x915982ed8abddaf8 #xbe675b98ec3a4e4c #xa996bf7f82f00db1 #xe1daf8d49a27696a #x2effd5d3dc8986e7 #xd153a51f2b1a2e81 #x18caa0ebd690adfb #x390e3134b243c51a #x2778b92cdff70416 #x029f1851691c24a6 #x5e7cafeacc133575 #xfa4e4cc89fa5f264 #x5a5f9f481e2b7d24 #x484c47ab18d764db #x400a27f2a1a7f479 #xaeeb9b2a83da7315 #x721c626879869734 #x042330a2d2384851 #x85f672fd3765aff0 #xba446b3a3e02061d #x73dd6ecec3888567 #xffac70ccf793a866 #xdfa9edb5294ed2d4 #x6c6aea7014325638 #x834a5a0e8c41c307 #xcdba35562fb2cb2b #x0ad97808d06cb404 #x0f3b440cb85aee06 #xe5f9c876481f213b #x98deee1289c35809 #x59018bbfcd394bd1 #xe01bf47220297b39 #xde68e1139340c087 #x9fa3ca4788e926ad #xbb85679c840c144e #x53d8f3b71d55ffd5 #x0da45c5dd146caa0 #x6f34fe87c72060cd #x57fbc315cf6db784 #xcee421a1fca0fdde #x3d2d0196607b8d4b #x642c8a29ad42c69a #x14aff010bdd87508 #xac74837beac657b3 #x3216459ad821634d #x3fb219c70967a9ed #x06bc28f3bb246cf7 #xf2082c9126d562c6 #x66b39278c45ee23c #xbd394f6f3f2878b9 #xfd33689d9e8f8cc0 #x37f4799eb017394f #x108cc0b26fe03d59 #xda4bd1b1417888d6 #xb09d1332ee6eb219 #x2f3ed975668794b4 #x58c0871977375982 #x7561463d78ace990 #x09876cff037e82f1 #x7fb83e35a8c05d94 #x26b9b58a65f91645 #xef20b07e9873953f #x3148516d0b3355b8 #x41cb2b541ba9e62a #x790416c613e43163 #xa011d380818e8f40 #x3a5025c36151f3ef #xd57095bdf92266d0 #x498d4b0da2d97688 #x8b0c3a57353153a5 #x21c491df64d368e1 #x8f2f0af5e7091bf4 #x2da1c1240f9bb012 #xc43d59a92ccc49da #xbfa6573e56345c1f #x828b56a8364fd154 #x9a41f643e0df7caf #xbcf843c985266aea #x2b1de9d7b4bfdce5 #x20059d79dedd7ab2 #x6dabe6d6ae3c446b #x45e81bf6c991ae7b #x6351ae7cac68b83e #xa432e32253b6c711 #xd092a9b991143cd2 #xcac711032e98b58f #xd8d4c9e02864ac70 #xc5fc550f96c25b89 #xd7ef8dec903e4276 #x67729ede7e50f06f #xeac28c7af045cf3d #xb15c1f945460a04a #x9cfddeb05bfb1058 #x93c69abce3a1fe5e #xeb0380dc4a4bdd6e #xd20db1e8f8081874 #x229a8528b7c15e14 #x44291750739fbc28 #xd3ccbd4e42060a27 #xf62b1c33f4ed2a97 #x86a8660ae4779905 #xd62e814a2a305025 #x477703a7a08d8add #x7b9b0e977af815c5 #x78c51a60a9ea2330 #xa6adfb733aaae3b7 #x97e5aa1e3199b60f #x0000000000000000 #xf4b404629df10e31 #x5564db44a6719322 #x9207961a59afec0d #x9624a6b88b97a45c #x363575380a192b1c #x2c60cd82b595a241 #x7d272664c1dc7932 #x7142769faa94a1c1 #xa1d0df263b809d13 #x1630e841d4c451ae #xc1df65ad44fa13d8 #x13d2d445bcf20bac #xd915c546926abe23 #x38cf3d92084dd749 #xe766d0272103059d #xc7634d5effde7f2f #x077d2455012a7ea4 #xedbfa82ff16fb199 #xaf2a978c39d46146 #x42953fa3c8bbd0df #xcb061da59496a7dc #x25e7a17db6eb20b0 #x34aa6d6963050fba #xa76cf7d580a4f1e4 #xf7ea10954ee338c4 #xfcf2643b24819e93 #xcf252d0746aeef8d #x4ef06f58a3f3082c #x563acfb37563a5d7 #x5086e740ce47c920 #x2982f186dda3f843 #x87696aac5e798b56 #x5d22bb1d1f010380 #x035e14f7d31236f5 #x3cec0d30da759f18 #xf3c920379cdb7095 #xb8db736b571e22bb #xdd36f5e44052f672 #xaac8ab8851e23b44 #xa857b3d938fe1fe2 #x17f1e4e76eca43fd #xec7ea4894b61a3ca #x9e62c6e132e734fe #xd4b1991b432c7483 #x6ad6c283af163acf #x1ce9904904a8e5aa #x5fbda34c761d2726 #xf910583f4cb7c491 #xc6a241f845d06d7c #x4f3163fe19fd1a7f #xe99c988d2357f9c8 #x8eee06535d0709a7 #x0efa48aa0254fc55 #xb4be23903c56fa48 #x763f52caabbedf65 #xeee1bcd8227d876c #xe345e085f33b4dcc #x3e731561b369bbbe #x2843fd2067adea10 #x2adce5710eb1ceb6 #xb7e03767ef44ccbd #x8db012a48e153f52 #x61ceb62dc5749c98 #xe85d942b9959eb9b #x4c6f7709caef2c8a #x84377e5b8d6bbda3 #x30895dcbb13d47eb #x74a04a9bc2a2fbc3 #x6b17ce251518289c #xe438c4d0f2113368 #x1fb784bed7bad35f #x9b80fae55ad16efc #x77fe5e6c11b0cd36 #xc858095247849129 #x08466059b97090a2 #x01c10ca6ba0e1253 #x6988d6747c040c3a #x6849dad2c60a1e69 #x5147ebe67449db73 #xc99905f4fd8a837a #x991fe2b433cd4a5a #xf09734c04fc94660 #xa28ecbd1e892abe6 #xf1563866f5c75433 #x4dae7baf70e13ed9 #x7ce62ac27bd26b61 #x70837a39109ab392 #x90988e4b30b3c8ab #xb2020b63877296bf #x156efcb607d6675b) (#xe63f55ce97c331d0 #x25b506b0015bba16 #xc8706e29e6ad9ba8 #x5b43d3775d521f6a #x0bfa3d577035106e #xab95fc172afb0e66 #xf64b63979e7a3276 #xf58b4562649dad4b #x48f7c3dbae0c83f1 #xff31916642f5c8c5 #xcbb048dc1c4a0495 #x66b8f83cdf622989 #x35c130e908e2b9b0 #x7c761a61f0b34fa1 #x3601161cf205268d #x9e54ccfe2219b7d6 #x8b7d90a538940837 #x9cd403588ea35d0b #xbc3c6fea9ccc5b5a #xe5ff733b6d24aeed #xceed22de0f7eb8d2 #xec8581cab1ab545e #xb96105e88ff8e71d #x8ca03501871a5ead #x76ccce65d6db2a2f #x5883f582a7b58057 #x3f7be4ed2e8adc3e #x0fe7be06355cd9c9 #xee054e6c1d11be83 #x1074365909b903a6 #x5dde9f80b4813c10 #x4a770c7d02b6692c #x5379c8d5d7809039 #xb4067448161ed409 #x5f5e5026183bd6cd #xe898029bf4c29df9 #x7fb63c940a54d09c #xc5171f897f4ba8bc #xa6f28db7b31d3d72 #x2e4f3be7716eaa78 #x0d6771a099e63314 #x82076254e41bf284 #x2f0fd2b42733df98 #x5c9e76d3e2dc49f0 #x7aeb569619606cdb #x83478b07b2468764 #xcfadcb8d5923cd32 #x85dac7f05b95a41e #xb5469d1b4043a1e9 #xb821ecbbd9a592fd #x1b8e0b0e798c13c8 #x62a57b6d9a0be02e #xfcf1b793b81257f8 #x9d94ea0bd8fe28eb #x4cea408aeb654a56 #x23284a47e888996c #x2d8f1d128b893545 #xf4cbac3132c0d8ab #xbd7c86b9ca912eba #x3a268eef3dbe6079 #xf0d62f6077a9110c #x2735c916ade150cb #x89fd5f03942ee2ea #x1acee25d2fd16628 #x90f39bab41181bff #x430dfe8cde39939f #xf70b8ac4c8274796 #x1c53aeaac6024552 #x13b410acf35e9c9b #xa532ab4249faa24f #x2b1251e5625a163f #xd7e3e676da4841c7 #xa7b264e4e5404892 #xda8497d643ae72d3 #x861ae105a1723b23 #x38a6414991048aa4 #x6578dec92585b6b4 #x0280cfa6acbaeadd #x88bdb650c273970a #x9333bd5ebbff84c2 #x4e6a8f2c47dfa08b #x321c954db76cef2a #x418d312a72837942 #xb29b38bfffcdf773 #x6c022c38f90a4c07 #x5a033a240b0f6a8a #x1f93885f3ce5da6f #xc38a537e96988bc6 #x39e6a81ac759ff44 #x29929e43cee0fce2 #x40cdd87924de0ca2 #xe9d8ebc8a29fe819 #x0c2798f3cfbb46f4 #x55e484223e53b343 #x4650948ecd0d2fd8 #x20e86cb2126f0651 #x6d42c56baf5739e7 #xa06fc1405ace1e08 #x7babbfc54f3d193b #x424d17df8864e67f #xd8045870ef14980e #xc6d7397c85ac3781 #x21a885e1443273b1 #x67f8116f893f5c69 #x24f5efe35706cff6 #xd56329d076f2ab1a #x5e1eb9754e66a32d #x28d2771098bd8902 #x8f6013f47dfdc190 #x17a993fdb637553c #xe0a219397e1012aa #x786b9930b5da8606 #x6e82e39e55b0a6da #x875a0856f72f4ec3 #x3741ff4fa458536d #xac4859b3957558fc #x7ef6d5c75c09a57c #xc04a758b6c7f14fb #xf9acdd91ab26ebbf #x7391a467c5ef9668 #x335c7c1ee1319aca #xa91533b18641e4bb #xe4bf9a683b79db0d #x8e20faa72ba0b470 #x51f907737b3a7ae4 #x2268a314bed5ec8c #xd944b123b949edee #x31dcb3b84d8b7017 #xd3fe65279f218860 #x097af2f1dc8ffab3 #x9b09a6fc312d0b91 #xcc6ded78a3c4520f #x3481d9ba5ebfcc50 #x4f2a667f1182d56b #xdfd9fdd4509ace94 #x26752045fbbc252b #xbffc491f662bc467 #xdd593272fc202449 #x3cbbc218d46d4303 #x91b372f817456e1f #x681faf69bc6385a0 #xb686bbeebaa43ed4 #x1469b5084cd0ca01 #x98c98009cbca94ac #x6438379a73d8c354 #xc2caba2dc0c5fe26 #x3e3b0dbe78d7a9de #x50b9ee202d670f04 #x4590b27b37eab0e5 #x6025b4cb36b10af3 #xfb2c1237079c0162 #xa12f28130c936be8 #x4b37e52e54eb1ccc #x083a1ba28ad28f53 #xc10a9cd83a22611b #x9f1425ad7444c236 #x069d4cf7e9d3237a #xedc56899e7f621be #x778c273680865fcf #x309c5aeb1bd605f7 #x8de0dc52d1472b4d #xf8ec34c2fd7b9e5f #xea18cd3d58787724 #xaad515447ca67b86 #x9989695a9d97e14c #x0000000000000000 #xf196c63321f464ec #x71116bc169557cb5 #xaf887f466f92c7c1 #x972e3e0ffe964d65 #x190ec4a8d536f915 #x95aef1a9522ca7b8 #xdc19db21aa7d51a9 #x94ee18fa0471d258 #x8087adf248a11859 #xc457f6da2916dd5c #xfa6cfb6451c17482 #xf256e0c6db13fbd1 #x6a9f60cf10d96f7d #x4daaa9d9bd383fb6 #x03c026f5fae79f3d #xde99148706c7bb74 #x2a52b8b6340763df #x6fc20acd03edd33a #xd423c08320afdefa #xbbe1ca4e23420dc0 #x966ed75ca8cb3885 #xeb58246e0e2502c4 #x055d6a021334bc47 #xa47242111fa7d7af #xe3623fcc84f78d97 #x81c744a11efc6db9 #xaec8961539cfb221 #xf31609958d4e8e31 #x63e5923ecc5695ce #x47107ddd9b505a38 #xa3afe7b5a0298135 #x792b7063e387f3e6 #x0140e953565d75e0 #x12f4f9ffa503e97b #x750ce8902c3cb512 #xdbc47e8515f30733 #x1ed3610c6ab8af8f #x5239218681dde5d9 #xe222d69fd2aaf877 #xfe71783514a8bd25 #xcaf0a18f4a177175 #x61655d9860ec7f13 #xe77fbc9dc19e4430 #x2ccff441ddd440a5 #x16e97aaee06a20dc #xa855dae2d01c915b #x1d1347f9905f30b2 #xb7c652bdecf94b34 #xd03e43d265c6175d #xfdb15ec0ee4f2218 #x57644b8492e9599e #x07dda5a4bf8e569a #x54a46d71680ec6a3 #x5624a2d7c4b42c7e #xbebca04c3076b187 #x7d36f332a6ee3a41 #x3b6667bc6be31599 #x695f463aea3ef040 #xad08b0e0c3282d1c #xb15b1e4a052a684e #x44d05b2861b7c505 #x15295c5b1a8dbfe1 #x744c01c37a61c0f2 #x59c31cd1f1e8f5b7 #xef45a73f4b4ccb63 #x6bdf899c46841a9d #x3dfb2b4b823036e3 #xa2ef0ee6f674f4d5 #x184e2dfb836b8cf5 #x1134df0a5fe47646 #xbaa1231d751f7820 #xd17eaa81339b62bd #xb01bf71953771dae #x849a2ea30dc8d1fe #x705182923f080955 #x0ea757556301ac29 #x041d83514569c9a7 #x0abad4042668658e #x49b72a88f851f611 #x8a3d79f66ec97dd7 #xcd2d042bf59927ef #xc930877ab0f0ee48 #x9273540deda2f122 #xc797d02fd3f14261 #xe1e2f06a284d674a #xd2be8c74c97cfd80 #x9a494faf67707e71 #xb3dbd1eca9908293 #x72d14d3493b2e388 #xd6a30f258c153427))))) (declaim (inline streebog-ax) (ftype (function ((integer 0 7) (integer 0 255)) (unsigned-byte 64)) streebog-ax)) (defun streebog-ax (i j) (declare (type (integer 0 7) i) (type (integer 0 255) j) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((constants (load-time-value +streebog-ax+ t))) (declare (type (simple-array (unsigned-byte 64) (8 256)) constants)) (aref constants i j))) ;;; ;;; Steebog rounds ;;; (defmacro streebog-x (x y z) `(setf (aref ,z 0) (logxor (aref ,x 0) (aref ,y 0)) (aref ,z 1) (logxor (aref ,x 1) (aref ,y 1)) (aref ,z 2) (logxor (aref ,x 2) (aref ,y 2)) (aref ,z 3) (logxor (aref ,x 3) (aref ,y 3)) (aref ,z 4) (logxor (aref ,x 4) (aref ,y 4)) (aref ,z 5) (logxor (aref ,x 5) (aref ,y 5)) (aref ,z 6) (logxor (aref ,x 6) (aref ,y 6)) (aref ,z 7) (logxor (aref ,x 7) (aref ,y 7)))) (defmacro streebog-xlps (x y data) `(let ((r0 (logxor (aref ,x 0) (aref ,y 0))) (r1 (logxor (aref ,x 1) (aref ,y 1))) (r2 (logxor (aref ,x 2) (aref ,y 2))) (r3 (logxor (aref ,x 3) (aref ,y 3))) (r4 (logxor (aref ,x 4) (aref ,y 4))) (r5 (logxor (aref ,x 5) (aref ,y 5))) (r6 (logxor (aref ,x 6) (aref ,y 6))) (r7 (logxor (aref ,x 7) (aref ,y 7)))) (declare (type (unsigned-byte 64) r0 r1 r2 r3 r4 r5 r6 r7)) (dotimes-unrolled (i 8) (let ((r (- (ash i 3)))) (setf (aref ,data i) (logxor (streebog-ax 0 (logand (ash r0 r) #xff)) (streebog-ax 1 (logand (ash r1 r) #xff)) (streebog-ax 2 (logand (ash r2 r) #xff)) (streebog-ax 3 (logand (ash r3 r) #xff)) (streebog-ax 4 (logand (ash r4 r) #xff)) (streebog-ax 5 (logand (ash r5 r) #xff)) (streebog-ax 6 (logand (ash r6 r) #xff)) (streebog-ax 7 (logand (ash r7 r) #xff)))))))) (defmacro streebog-round (i ki data) `(progn (streebog-xlps ,ki (the (simple-array (unsigned-byte 64) (8)) (aref +streebog-c+ ,i)) ,ki) (streebog-xlps ,ki ,data ,data))) (defun streebog-add512 (x y r) (declare (type (simple-array (unsigned-byte 64) (8)) x y r) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((cf 0) (of 0) (tmp 0)) (declare (type (unsigned-byte 8) cf of) (type (unsigned-byte 64) tmp)) (dotimes (i 8) (setf tmp (mod64+ (aref x i) (aref y i))) (setf of (if (< tmp (aref x i)) 1 0)) (setf tmp (mod64+ tmp cf)) (when (and (plusp cf) (zerop tmp)) (setf of 1)) (setf cf of) (setf (aref r i) tmp))) (values)) (defun streebog-g (h n m) (declare (type (simple-array (unsigned-byte 64) (8)) h n m) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((ki (make-array 8 :element-type '(unsigned-byte 64) :initial-element 0)) (data (make-array 8 :element-type '(unsigned-byte 64) :initial-element 0))) (declare (type (simple-array (unsigned-byte 64) (8)) ki data) (dynamic-extent ki data)) (streebog-xlps h n data) (replace ki data) (streebog-xlps ki m data) (dotimes (i 11) (streebog-round i ki data)) (streebog-xlps ki (the (simple-array (unsigned-byte 64) (8)) (aref +streebog-c+ 11)) ki) (streebog-x ki data data) (streebog-x data h data) (streebog-x data m h)) (values)) ;;; ;;; Digest structures and functions ;;; (defstruct (streebog (:constructor %make-streebog-digest nil) (:copier nil)) (buffer (make-array 64 :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (64))) (buffer-index 0 :type (integer 0 64)) (h (make-array 8 :element-type '(unsigned-byte 64) :initial-element 0) :type (simple-array (unsigned-byte 64) (8))) (n (make-array 8 :element-type '(unsigned-byte 64) :initial-element 0) :type (simple-array (unsigned-byte 64) (8))) (sigma (make-array 8 :element-type '(unsigned-byte 64) :initial-element 0) :type (simple-array (unsigned-byte 64) (8)))) (defstruct (streebog/256 (:include streebog) (:constructor %make-streebog/256-digest (&aux (h (make-array 8 :element-type '(unsigned-byte 64) :initial-element #x0101010101010101)))) (:copier nil))) (defmethod reinitialize-instance ((state streebog) &rest initargs) (declare (ignore initargs)) (setf (streebog-buffer-index state) 0) (fill (streebog-h state) (etypecase state (streebog/256 #x0101010101010101) (streebog 0))) (fill (streebog-n state) 0) (fill (streebog-sigma state) 0) state) (defmethod copy-digest ((state streebog) &optional copy) (check-type copy (or null streebog)) (let ((copy (if copy copy (etypecase state (streebog/256 (%make-streebog/256-digest)) (streebog (%make-streebog-digest)))))) (declare (type streebog copy)) (replace (streebog-buffer copy) (streebog-buffer state)) (setf (streebog-buffer-index copy) (streebog-buffer-index state)) (replace (streebog-h copy) (streebog-h state)) (replace (streebog-n copy) (streebog-n state)) (replace (streebog-sigma copy) (streebog-sigma state)) copy)) (defun streebog-stage2 (state data start) (declare (type streebog state) (type (simple-array (unsigned-byte 8) (*)) data) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((tmp (make-array 8 :element-type '(unsigned-byte 64))) (h (streebog-h state)) (n (streebog-n state)) (sigma (streebog-sigma state))) (declare (type (simple-array (unsigned-byte 64) (8)) tmp h n sigma) (dynamic-extent tmp)) (dotimes (i 8) (setf (aref tmp i) (ub64ref/le data (+ start (* i 8))))) (streebog-g h n tmp) (streebog-add512 n +streebog-buffer512+ n) (streebog-add512 sigma tmp sigma)) (values)) (defun streebog-pad (state) (declare (type streebog state) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((buffer (streebog-buffer state)) (buffer-index (streebog-buffer-index state))) (when (< buffer-index 64) (fill buffer 0 :start buffer-index) (setf (aref buffer buffer-index) 1))) (values)) (defun streebog-stage3 (state) (declare (type streebog state) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((buffer (streebog-buffer state)) (buffer-index (streebog-buffer-index state)) (h (streebog-h state)) (n (streebog-n state)) (sigma (streebog-sigma state)) (buf (make-array 8 :element-type '(unsigned-byte 64) :initial-element 0)) (tmp (make-array 8 :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 8) (64)) buffer) (type (integer 0 64) buffer-index) (type (simple-array (unsigned-byte 64) (8)) h n sigma buf tmp) (dynamic-extent buf tmp)) (setf (aref buf 0) (ash buffer-index 3)) (streebog-pad state) (dotimes (i 8) (setf (aref tmp i) (ub64ref/le buffer (* i 8)))) (streebog-g h n tmp) (streebog-add512 n buf n) (streebog-add512 sigma tmp sigma) (streebog-g h +streebog-buffer0+ n) (streebog-g h +streebog-buffer0+ sigma)) (values)) (define-digest-updater streebog (let ((buffer (streebog-buffer state)) (buffer-index (streebog-buffer-index state)) (length (- end start)) (n 0)) (declare (type (simple-array (unsigned-byte 8) (64)) buffer) (type (integer 0 64) buffer-index n) (type fixnum length)) (when (plusp buffer-index) (setf n (min length (- 64 buffer-index))) (replace buffer sequence :start1 buffer-index :start2 start :end2 (+ start n)) (incf buffer-index n) (incf start n) (decf length n) (when (= buffer-index 64) (streebog-stage2 state buffer 0) (setf buffer-index 0))) (loop until (< length 64) do (streebog-stage2 state sequence start) (incf start 64) (decf length 64)) (when (plusp length) (replace buffer sequence :start2 start :end2 end) (setf buffer-index length)) (setf (streebog-buffer-index state) buffer-index) (values))) (define-digest-finalizer ((streebog 64) (streebog/256 32)) (streebog-stage3 state) (let ((h (streebog-h state)) (output (make-array 64 :element-type '(unsigned-byte 8))) (offset (ecase (digest-length state) ((32) 32) ((64) 0)))) (dotimes (i 8) (setf (ub64ref/le output (* i 8)) (aref h i))) (replace digest output :start1 digest-start :start2 offset :end2 64) digest)) (defdigest streebog :digest-length 64 :block-length 64) (defdigest streebog/256 :digest-length 32 :block-length 64) ironclad-0.57/src/digests/tiger.lisp000066400000000000000000001244171420372057600175130ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; tiger.lisp -- implementation of the Tiger digest function (in-package :crypto) (eval-when (:compile-toplevel :load-toplevel :execute) (defconstant +tiger-wordsize+ #-(and sbcl x86-64) 32 #+(and sbcl x86-64) 64) (defconstant +tiger-block-n-words+ (if (= +tiger-wordsize+ 32) 16 8)) (defconstant +tiger-block-copy-fn+ (if (= +tiger-wordsize+ 32) 'fill-block-ub8-le 'fill-block-ub8-le/64))) (deftype tiger-state-block () `(simple-array (unsigned-byte ,+tiger-wordsize+) (,+tiger-block-n-words+))) (deftype tiger-sbox () (let ((n-words (truncate 64 +tiger-wordsize+))) `(simple-array (unsigned-byte ,+tiger-wordsize+) (,(* n-words 256))))) #.(cl:if (cl:= +tiger-wordsize+ 32) '(define-digest-registers (tiger :endian :little) (a0 #x89abcdef) (a1 #x01234567) (b0 #x76543210) (b1 #xfedcba98) (c0 #xc3b2e187) (c1 #xf096a5b4)) '(define-digest-registers (tiger :endian :little :size 8) (a #x0123456789abcdef) (b #xfedcba9876543210) (c #xf096a5b4c3b2e187))) (defconst +pristine-tiger-registers+ (initial-tiger-regs)) (declaim (type tiger-sbox tiger-t1 tiger-t2 tiger-t3 tiger-t4)) (eval-when (:compile-toplevel :load-toplevel :execute) (defun make-tiger-sbox (elements) (let ((n-elements (length elements))) (if (= +tiger-wordsize+ 32) (make-array n-elements :element-type '(unsigned-byte 32) :initial-contents elements) (loop for (xlo xhi . rest) on elements by #'cddr collect (logior (ash xhi 32) xlo) into contents finally (return (make-array (truncate n-elements 2) :element-type '(unsigned-byte 64) :initial-contents contents))))))) (defconst tiger-t1 (make-tiger-sbox '(#xF7E90C5E #x02AAB17C #xE243A8EC #xAC424B03 #x0DD5FCD3 #x72CD5BE3 #xF6F97F3A #x6D019B93 #xD21F9193 #xCD9978FF #x708029E2 #x7573A1C9 #x922A83C3 #xB164326B #x04915870 #x46883EEE #x7103ECE6 #xEAACE305 #x08A3535C #xC54169B8 #x8DDEC47C #x4CE75491 #xDC0DF40C #x0AA2F4DF #xA74DBEFA #x10B76F18 #x5AD1AB6A #xC6CCB623 #x572FE2FF #x13726121 #x199D921E #x1A488C6F #xDA0007CA #x4BC9F9F4 #xE85241C7 #x26F5E6F6 #xEA5947B6 #x859079DB #xC99E8C92 #x4F1885C5 #xA96F864B #xD78E761E #x52B5C17D #x8E36428C #x373063C1 #x69CF6827 #x9BB4C56E #xB607C93D #x0E76B5EA #x7D820E76 #xF07FDC42 #x645C9CC6 #x243342E0 #xBF38A078 #x9D2E7D04 #x5F6B343C #x600B0EC6 #xF2C28AEB #x7254BCAC #x6C0ED85F #xA4DB4FE5 #x71592281 #xCE0FED9F #x1967FA69 #xB96545DB #xFD5293F8 #xF2A7600B #xC879E9D7 #x0193194E #x86024892 #x2D9CC0B3 #xA4F9533B #x15957613 #x9053836C #xFC357BF1 #xDB6DCF8A #x7A370F57 #x18BEEA7A #x50B99066 #x037117CA #x74424A35 #x6AB30A97 #xE325249B #xF4E92F02 #x061CCAE1 #x7739DB07 #xECA42A05 #xD8F3B49C #x51382F73 #xBD56BE3F #x43B0BB28 #x45FAED58 #x11BF1F83 #x1C813D5C #xD75FA169 #x8AF0E4B6 #x87AD9999 #x33EE18A4 #xB1C94410 #x3C26E8EA #xC0A822F9 #xB510102B #x0CE6123B #x141EEF31 #x59DDB154 #xFC65B900 #xC5E0E607 #xE0158640 #x26C3A3CF #x884E0798 #x23C535FD #x930D0D95 #x4E9A2B00 #x35638D75 #x40469DD5 #x4085FCCF #x8BE23A4C #xC4B17AD2 #x6A3E6A2E #xCAB2F0FC #x6B943FCD #x2860971A #x12E30446 #x3DDE6EE2 #xE01765AE #x6222F32A #x478308FE #x5D550BB5 #xA0EDA22A #xA9EFA98D #x86C40DA7 #xC351A716 #x9C867C84 #x1105586D #xFDA22853 #xDCFFEE85 #x2C5EEF76 #xCCFBD026 #x8990D201 #xBAF294CB #x2AFAD975 #xE69464F5 #xDF133E14 #x94B013AF #x2823C958 #x06A7D1A3 #x30F61119 #x6F95FE51 #x462C06C0 #xD92AB34E #x887C71D2 #xED7BDE33 #x6518393E #x79746D6E #x5D713329 #x5BA41938 #x48A97564 #x7C1BA6B9 #x7BFDAC67 #x31987C19 #x4B053D02 #xDE6C23C4 #xD002D64D #x581C49FE #x38261571 #xDD474D63 #xE473D062 #xAA4546C3 #x9455F860 #x928FCE34 #xCAAB94D9 #x48161BBA #x770E6F68 #x63912430 #x02C6641C #x6EC8A5E6 #x337DDD2B #x87282515 #x034B701B #x2CDA6B42 #x81CB096D #xB03D37C1 #x66C71C6F #xE1084382 #xEB51B255 #x2B3180C7 #x96C08BBC #xDF92B82F #xA632F3BA #x5C68C8C0 #x1C3D0556 #x5504CC86 #x5FB26B8F #xABBFA4E5 #xB3BACEB4 #x41848B0A #xAA445D32 #xB334A273 #xA85AD881 #xBCA696F0 #xB528D56C #x24F6EC65 #x90F4524A #x0CE1512E #x5506D35A #x4E9DD79D #xC6CE9779 #x258905FA #x3E109B33 #x2019295B #x73A054CC #xF8A9478B #x34417EB0 #x2924F2F9 #x536D1BC4 #x3993357D #x1DB6FF8B #x38A81AC2 #x7D6016BF #x47C4FBF1 #x7667E3F5 #x1E0FAADD #x938BEB96 #x7ABCFF62 #x8FC179C9 #xA78DAD94 #x2911E50D #x8F1F98B7 #x27121A91 #x61E48EAE #x31859808 #x4D62F7AD #xEF5CEAEB #xECEBA345 #xBC9684CE #xF5CEB25E #xB7F76221 #xF633E20C #xAB8293E4 #xA32CDF06 #xA5EE2CA4 #x985A202C #xCC8A8FB1 #xCF0B8447 #x979859A3 #x9F765244 #xA1240017 #xA8D516B1 #xBB5DC726 #x0BD7BA3E #xB86ADB39 #xE54BCA55 #x6C478063 #x1D7A3AFD #xE7669EDD #x519EC608 #xD149AA23 #x0E5715A2 #x848FF194 #x177D4571 #x41014C22 #xEEB55F32 #x3A6E2EC2 #x0F5E5CA1 #x75F5C361 #x8029927B #xC3D6E436 #xAD139FAB #x4CCF402F #x0D5DF1A9 #xBEA5DFC8 #x3E8BD948 #xBD3FF77E #xA5A0D357 #x1F74F645 #xA2D12E25 #x5E81A082 #x66FD9E52 #x7F687A49 #x2E0C90CE #xBA973BC5 #xC2E8BCBE #xE509745F #x000001BC #xE6DAB3D6 #x423777BB #xAEF06EB5 #xD1661C7E #x4DAACFD8 #xA1781F35 #x2B16AFFC #x2D11284A #xFA891D1F #xF1FC4F67 #xCB920ADA #x73ECC25D #xC2A12651 #xAE610C22 #xD356B78A #x96E0A810 #x2FE7870F #x5A9A381F #xE94E5530 #xD5AD62ED #x368D1427 #xD225E5E8 #xC7AF4631 #x65977B70 #xDE39D74F #x99F889B2 #x54E1D143 #x233F30BF #xD9A63C97 #x9A9675D3 #xF334F9A8 #x5470554F #x4A4F5688 #x166ACB74 #xB2E4AEAD #x70C74CAA #x6F294D12 #xF0D09164 #x684031D1 #x57B82A89 #x61BE0B6B #xEFD95A5A #x69F2F29A #x2FBD12E9 #xFEFF9FE8 #x9BD37013 #xD6085A06 #x3F9B0404 #x166CFE15 #x4940C1F3 #xCDF3DEFB #x09542C4D #x85CD5CE3 #xB4C52183 #x4462A641 #xC935B7DC #x8ED3B63F #x3417F8A6 #x5B215B40 #xB8095929 #x3B8C8572 #xF99CDAEF #xF8FCB95D #x018C0614 #x1A3ACDF3 #x1B14ACCD #x00BB732D #x84D471F2 #x95E8DA16 #xC1A3110E #xBF1A82B8 #x430A7220 #x39DF210E #xB77E090D #x3CD05E9D #x5EF4BD9F #x7E57A444 #x9D4FF6DA #x83D4A5F8 #xDA1D60E1 #x17998E47 #xB287C384 #x1BB31886 #xFE3EDC12 #x980CCBEF #xC7FE3CCC #x189BFD03 #xE46FB590 #x9A4C57DC #x3732FD46 #x7CF1AD65 #x7EF700A0 #xA31D8859 #x59C64468 #xD45B61F6 #x762FB0B4 #x99047718 #x155BAED0 #x3D50BAA6 #x68755E4C #x22D8B4DF #xE9214E7F #x2EAC95F4 #x2ADDBF53 #xB4BD0109 #x32AE3909 #xB08E3450 #x834DF537 #x4220728D #xFA209DA8 #x9EFE23F7 #x9E691D9B #xC4AE8D7F #x0446D288 #xE169785B #x7B4CC524 #x35CA1385 #x21D87F01 #x137B8AA5 #xCEBB400F #x580796BE #x272E2B66 #x25C2B0DE #x36122641 #xAD1EFBB2 #x057702BD #xACF84BE9 #xD4BABB8E #x641BC67B #x91583139 #x8036E024 #x8BDC2DE0 #xF49F68ED #x603C8156 #xDBEF5111 #xF7D236F7 #x8AD21E80 #x9727C459 #x670A5FD7 #xA08A0896 #x09EBA9CB #xCB4A8F43 #x0F7036A1 #x81AF564B #x78199ABD #xC0B99AA7 #x3FC8E952 #x959F1EC8 #x794A81B9 #x8C505077 #x056338F0 #x3ACAAF8F #x627A6778 #x07B43F50 #xF5ECCC77 #x4A44AB49 #xB679EE98 #x3BC3D6E4 #xCF14108C #x9CC0D4D1 #x206BC8A0 #x4406C00B #xC8D72D89 #x82A18854 #x5C3C432C #x67E366B3 #x102B37F2 #xB923DD61 #xD884271D #x56AB2779 #xFF1525AF #xBE83E1B0 #x217E49A9 #xFB7C65D4 #x6D48E7D4 #x6BDBE0E7 #x45D9179E #x08DF8287 #xDD53BD34 #x22EA6A9A #x5622200A #xE36E141C #x8CB750EE #x7F805D1B #x9F58E837 #xAFE5C7A5 #x4FB1C23C #xE27F996A #x0775F0D0 #xD3867DFB #x6E88891A #xD0E673DE #xAFB86C25 #x123AEB9E #xC145B895 #x30F1D5D5 #xEE7269E7 #xBB434A2D #xF931FA38 #x78CB67EC #x323BBF9C #xF33B0372 #xFB279C74 #x52D66336 #x0AFB4EAA #x505F33AC #xA2CCE187 #xE8A5CD99 #x1E2D30BB #x53497480 #xD5876D90 #x8D2D5711 #x91BC038E #x1F1A4128 #x82E56648 #xD6E2E71D #x497732B7 #x74036C3A #x6361F5AB #x89B67ED9 #xF1EA02A2 #xFFED95D8 #x1464D43D #xE72B3BD6 #x0BDC4820 #xA6300F17 #xED78A77A #xEBC18760))) (defconst tiger-t2 (make-tiger-sbox '(#x05A12138 #xE6A6BE5A #xB4F87C98 #xB5A122A5 #x140B6990 #x563C6089 #x391F5DD5 #x4C46CB2E #xC9B79434 #xD932ADDB #x2015AFF5 #x08EA70E4 #x3E478CF1 #xD765A667 #xAB278D99 #xC4FB757E #x2D6E0692 #xDF11C686 #x0D7F3B16 #xDDEB84F1 #xA665EA04 #x6F2EF604 #xF0E0DFB3 #x4A8E0F0F #x3DBCBA51 #xA5EDEEF8 #x0EA4371E #xFC4F0A2A #x5CB38429 #xE83E1DA8 #xBA1B1CE2 #xDC8FF882 #x8353E80D #xCD45505E #xD4DB0717 #x18D19A00 #xA5F38101 #x34A0CFED #x8887CAF2 #x0BE77E51 #xB3C45136 #x1E341438 #x9089CCF9 #xE05797F4 #xF2591D14 #xFFD23F9D #x8595C5CD #x543DDA22 #x99052A33 #x661F81FD #xDB0F7B76 #x8736E641 #x418E5307 #x15227725 #x162EB2FA #xE25F7F46 #x6C13D9FE #x48A8B212 #x92E76EEA #xAFDC5417 #xC6D1898F #x03D912BF #x1B83F51B #x31B1AAFA #xE42AB7D9 #xF1AC2796 #xFCD2EBAC #x40A3A7D7 #x0AFBBCC5 #x1056136D #x9A6D0C85 #x7889E1DD #x2A7974AA #xD3352578 #x078AC09B #xA7E25D09 #xEAC6EDD0 #xBD4138B3 #x71EB9E70 #x920ABFBE #x4FC2625C #xA2A5D0F5 #x0B1290A3 #xC054E36B #x62FE932B #xF6DD59FF #x11A8AC7D #x35373545 #x72FADCD4 #xCA845E91 #x329D20DC #x84F82B60 #xCD672F18 #x79C62CE1 #xD124642C #x8B09A2AD #x19D9E726 #xD0C1E96A #x4BA9500C #x5A786A9B #x634C43F3 #x0E020336 #xEB66D822 #xC17B474A #xEC9BAAC2 #x6A731AE3 #xE0840258 #x8226667A #x91CAECA5 #x67D45676 #x4875ADB5 #x1D94155C #x5B813FDF #x6D00FD98 #xB774CD06 #x51286EFC #x1FA744AF #x5E883447 #xE761AE2E #xF72CA0AE #xAEE8E09A #xBE40E4CD #x5118F665 #xE9970BBB #x33DF1964 #x726E4BEB #x29199762 #x703B0007 #xF5EF30A7 #x4631D816 #x1504A6BE #xB880B5B5 #x7ED84B6C #x641793C3 #xF6E97D96 #x7B21ED77 #x2EF96B73 #x77630631 #xE86FF3F4 #xAE528948 #x86A3F8F8 #x53DBD7F2 #x4CFC1063 #x16CADCE7 #xFA52C6DD #x005C19BD #x64D46AD3 #x68868F5D #xCF1E186A #x3A9D512C #x385660AE #x367E62C2 #x77DCB1D7 #xE359E7EA #x749ABE6E #x526C0773 #xD09F734B #x735AE5F9 #x8A558BA8 #x493FC7CC #x3041AB45 #xB0B9C153 #x470A59BD #x321958BA #x5F46C393 #x852DB00B #xD336B0E5 #x91209B2B #x659EF19F #x6E604F7D #x782CCB24 #xB99A8AE2 #xC814C4C7 #xCCF52AB6 #xBE11727B #x4727D9AF #x0121B34D #x7E950D0C #x70AD471F #x756F4356 #x615A6849 #xF5ADD442 #x80B9957A #x4E87E099 #x50AEE355 #x2ACFA1DF #xFD2FD556 #xD898263A #xD80C8FD6 #xC8F4924D #x754A173A #xCF99CA3D #xAF91BF3C #xFE477BAC #xD690C12D #xED5371F6 #x5E687094 #x831A5C28 #x3708A0A4 #xC5D3C90A #x17D06580 #x0F7F9037 #xB8FDF27F #x19F9BB13 #x4D502843 #xB1BD6F1B #x8FFF4012 #x1C761BA3 #xE2E21F3B #x0D1530C4 #xA7372C8A #x8943CE69 #xFEB5CE66 #xE5184E11 #xBD736621 #x618BDB80 #x8B574D0B #x7D29BAD6 #x25E6FE5B #x81BB613E #xBC07913F #x071C9C10 #x09AC2D97 #xC7BEEB79 #x3BC5D757 #xC3E58D35 #xF38F61E8 #xEB017892 #x9B1CC21A #xD4EFFB9C #xF494F7AB #x99727D26 #x956B3E03 #xA3E063A2 #x4AA09C30 #x9D4A8B9A #x00090FB4 #x3F6AB7D5 #x57268AC0 #x9CC0F2A0 #xEDBF42D1 #x3DEE9D2D #x7960A972 #x330F49C8 #x87421B41 #xC6B27202 #x7C00369C #x0AC59EC0 #xCB353425 #xEF4EAC49 #xEF0129D8 #xF450244E #xCAF4DEB6 #x8ACC46E5 #x989263F7 #x2FFEAB63 #x5D7A4578 #x8F7CB9FE #x4E634635 #x5BD8F764 #xBF2DC900 #x427A7315 #x2125261C #x17D0C4AA #x93518E50 #x3992486C #xA2D7D4C3 #xB4CBFEE0 #x2C5DDD8D #x7C75D620 #xE35B6C61 #xDBC295D8 #x02032B19 #x60B369D3 #xDCE44132 #xCE42685F #xDDF65610 #x06F3DDB9 #xB5E148F0 #x8EA4D21D #x2FCD496F #x20B0FCE6 #x58B0EE31 #x2C1B9123 #x18F5A308 #xB28317B8 #x9CA6D2CF #xA89C1E18 #x6AAADBC8 #x0C6B1857 #x1299FAE3 #xB65DEAA9 #x7F1027E7 #xFB2B794B #x443B5BEB #x04E4317F #x5939D0A6 #x4B852D32 #xFB207FFC #xD5AE6BEE #x81C7D374 #x309682B2 #x94C3B475 #xBAE309A1 #x13B49F05 #x8CC3F97B #xF8293967 #x98A9422F #x1076FF7C #x244B16B0 #x663D67EE #xF8BF571C #xEEE30DA1 #x1F0D6758 #x7ADEB9B7 #xC9B611D9 #x7B6C57A2 #xB7AFD588 #x6B984FE1 #x6290AE84 #xACC1A5FD #x94DF4CDE #xC5483AFF #x058A5BD1 #x42BA3C37 #x63166CC1 #xB2F76F40 #x8DB8526E #x6F0D6D4E #xE1088003 #x971D311D #x9E0523C9 #xCC7CD691 #x45EC2824 #xE62382C9 #x575B8359 #xC4889995 #xFA9E400D #x45721568 #xD1823ECB #x8206082F #xDAFD983B #x2386A8CB #xAA7D2908 #x03B87588 #x269FCD44 #x28BDD1E0 #x1B91F5F7 #x040201F6 #xE4669F39 #x8CF04ADE #x7A1D7C21 #xD79CE5CE #x65623C29 #x96C00BB1 #x23684490 #x9DA503BA #xAB9BF187 #xA458058E #xBC23ECB1 #xBB401ECC #x9A58DF01 #xA85F143D #xA070E868 #x7DF2239E #x4FF18830 #x1A641183 #x14D565B4 #x52701602 #xEE133374 #x3F285E09 #x950E3DCF #xB9C80953 #x59930254 #x8930DA6D #x3BF29940 #x53691387 #xA955943F #xA9CB8784 #xA15EDECA #x352BE9A0 #x29142127 #xFF4E7AFB #x76F0371F #x274F2228 #x0239F450 #x1D5E868B #xBB073AF0 #xC10E96C1 #xBFC80571 #x68222E23 #xD2670885 #x8E80B5B0 #x9671A3D4 #xE193BB81 #x55B5D38A #xA18B04B8 #x693AE2D0 #xADD5335F #x5C48B4EC #x4916A1CA #xFD743B19 #x34BE98C4 #x25770181 #x3C54A4AD #xE77987E8 #xDA33E1B9 #x28E11014 #x226AA213 #x270CC59E #x6D1A5F60 #x71495F75 #x60AFEF77 #x9BE853FB #xF7443DBF #xADC786A7 #x73B29A82 #x09044561 #xC232BD5E #x58BC7A66 #x673AC8B2 #xF306558C #xB6C9772A #x41F639C6 #x9FDA35DA #x216DEFE9 #x1C7BE615 #x11640CC7 #x565C5527 #x93C43694 #x46777839 #xEA038E62 #x5A3E2469 #xF9ABF3CE #x0FD312D2 #x741E768D #xCED652C6 #x0144B883 #xA33F8552 #xC20B5A5B #xC3435A9D #x1AE69633 #x088CFDEC #x97A28CA4 #x1E96F420 #x8824A43C #x6EEEA746 #x37612FA6 #xF9CF0E5A #x6B4CB165 #xA0ABFB4A #x43AA1C06 #xF162796B #x7F4DC26F #x54ED9B0F #x6CBACC8E #xD2BB253E #xA6B7FFEF #xB0A29D4F #x2E25BC95 #xDEF1388C #x86D6A58B #x76B6F054 #xDED74AC5 #x2B45805D #x8030BDBC #xE94D9289 #x3C81AF70 #x9E3100DB #x3EFF6DDA #xDFCC8847 #xB38DC39F #x8D17B87E #x12388552 #x40B1B642 #xF2DA0ED2 #xD54BF9A9 #x44CEFADC #x433C7EE6 #x1312200E #x3A78C748 #x9FFCC84F #x248576BB #xF0CD1F72 #x3638CFE4 #xEC697405 #x0CEC4E4C #x2BA7B67C #xE5CE32ED #xAC2F4DF3 #x26EA4C11 #xCB33D143 #xC77E58BC #xA4E9044C #xD934FCEF #x5F513293 #x06E55444 #x5DC96455 #x317DE40A #x50DE418F #x69DDE259 #x388CB31A #x55820A86 #x2DB4A834 #x84711AE9 #x9010A91E #xB1498371 #x4DF7F0B7 #xC0977179 #xD62A2EAB #xAA8D5C0E #x22FAC097))) (defconst tiger-t3 (make-tiger-sbox '(#xF1DAF39B #xF49FCC2F #x6FF29281 #x487FD5C6 #xFCDCA83F #xE8A30667 #xD2FCCE63 #x2C9B4BE3 #x93FBBBC2 #xDA3FF74B #xFE70BA66 #x2FA165D2 #x970E93D4 #xA103E279 #xB0E45E71 #xBECDEC77 #x3985E497 #xCFB41E72 #x5EF75017 #xB70AAA02 #x3840B8E0 #xD42309F0 #x35898579 #x8EFC1AD0 #xE2B2ABC5 #x96C6920B #x375A9172 #x66AF4163 #xCA7127FB #x2174ABDC #x4A72FF41 #xB33CCEA6 #x083066A5 #xF04A4933 #xD7289AF5 #x8D970ACD #x31C8C25E #x8F96E8E0 #x76875D47 #xF3FEC022 #x056190DD #xEC7BF310 #xBB0F1491 #xF5ADB0AE #x0FD58892 #x9B50F885 #x58B74DE8 #x49754883 #x91531C61 #xA3354FF6 #x81D2C6EE #x0702BBE4 #x7DEDED98 #x89FB2405 #x8596E902 #xAC307513 #x172772ED #x1D2D3580 #x8E6BC30D #xEB738FC2 #x63044326 #x5854EF8F #x5ADD3BBE #x9E5C5232 #x325C4623 #x90AA53CF #x349DD067 #xC1D24D51 #xA69EA624 #x2051CFEE #x862E7E4F #x13220F0A #x04E04864 #xCE393994 #x7086FCB7 #xD9C42CA4 #x8A03E7CC #x685AD223 #xAB2FF1DB #x066484B2 #xEFBF79EC #xFE9D5D70 #x9C481854 #x5B13B9DD #xED1509AD #x15F0D475 #x0EC79851 #x0BEBCD06 #x183AB7F8 #xD58C6791 #x52F3EEE4 #xD1187C50 #xE54E82FF #xC95D1192 #xB9AC6CA2 #x86EEA14C #x53677D5D #x3485BEB1 #x1F8C492A #xDD191D78 #xA784EBF9 #xF60866BA #xA2D08C74 #x518F643B #xE1087C22 #x8852E956 #xC410AE8D #xA768CB8D #xBFEC8E1A #x38047726 #xCD3B45AA #xA67738B4 #xEC0DDE19 #xAD16691C #x80462E07 #xC6D43193 #x0BA61938 #xC5A5876D #xA58FD840 #x16B9FA1F #x3CA74F18 #x188AB117 #xC99C021F #xABDA2F98 #x134AE816 #x3E0580AB #x73645ABB #x5F3B05B7 #x5575F2F6 #x2501A2BE #x4E7E8BA9 #x1B2F7400 #x71E8D953 #x1CD75803 #x62764E30 #x7F6ED895 #x596F003D #xB15926FF #xA8C5D6B9 #x9F65293D #xD690F84C #x6ECEF04D #xFF33AF88 #x4782275F #x3F820801 #xE4143308 #x9A1AF9B5 #xFD0DFE40 #x2CDB396B #x4325A334 #xB301B252 #x8AE77E62 #x6655615A #xC36F9E9F #x92D32C09 #x85455A2D #x49477485 #xF2C7DEA9 #x33A39EBA #x63CFB4C1 #x6EBC5462 #x83B040CC #xFDB326B0 #x3B9454C8 #x87FFD78C #x56F56A9E #x99F42BC6 #x2DC2940D #x6B096E2D #x98F7DF09 #x3AD852BF #x19A6E01E #xDBD4B40B #x42A99CCB #x45E9C559 #xA59998AF #x07D93186 #x366295E8 #xFAA1F773 #x6B48181B #x157A0A1D #x1FEC57E2 #xF6201AD5 #x4667446A #xCFB0F075 #xE615EBCA #x68290778 #xB8F31F4F #xCE22D11E #x22713ED6 #x2EC3C93B #x3057C1A7 #x7C3F1F2F #xCB46ACC3 #x02AAF50E #xDBB893FD #x600B9FCF #x331FD92E #x48EA3AD6 #xA498F961 #x8B6A83EA #xA8D8426E #xB7735CDC #xA089B274 #x1E524A11 #x87F6B373 #xCBC96749 #x118808E5 #xB19BD394 #x9906E4C7 #x9B24A20C #xAFED7F7E #xEB3644A7 #x6509EADE #xE8EF0EDE #x6C1EF1D3 #xE9798FB4 #xB9C97D43 #x740C28A3 #xA2F2D784 #x6197566F #x7B849647 #xB65F069D #x7A5BE3E6 #x78BE6F10 #xF96330ED #x7A076A15 #xEEE60DE7 #xA08B9BD0 #x2B4BEE4A #xC7B8894E #x6A56A63E #xBA34FEF4 #x02121359 #x283703FC #x4CBF99F8 #x0CAF30C8 #x39807135 #xF017687A #xD0A77A89 #x9E423569 #xF1C1A9EB #x2DEE8199 #x8C797628 #xDD1F7ABD #x5D1737A5 #x09A9FA80 #x4F53433C #xDF7CA1D9 #xFA8B0C53 #x886CCB77 #x3FD9DCBC #xA91B4720 #xC040917C #xF9D1DCDF #x7DD00142 #x4F387B58 #x8476FC1D #xF3316503 #x23F8E7C5 #xE7E37339 #x032A2244 #x50F5A74B #x5C87A5D7 #x3698992E #x082B4CC4 #xB858F63C #xDF917BEC #x5BF86DDA #x3270B8FC #x29B5DD76 #x10AE72BB #x7700362B #x576AC94E #xC61EFB8F #x1AD112DA #xC5FAA427 #x691BC30E #xCC327143 #xFF246311 #x30E53206 #x3142368E #xE02CA396 #x71380E31 #x0AAD76F1 #x958D5C96 #xC16DA536 #xF8D6F430 #x1BE7E1D2 #xC8FFD13F #x004DDBE1 #x7578AE66 #x067BE646 #x05833F01 #x3BFE586D #xBB34B5AD #xA12B97F0 #x095F34C9 #x25D60CA8 #x247AB645 #x017477D1 #xDCDBC6F3 #xDECAD24D #x4A2E14D4 #xBE0A1EEB #xBDB5E6D9 #x794301AB #x2A7E70F7 #x270540FD #xDEF42D8A #xA34C22C1 #x01078EC0 #xF4C16387 #xE5DE511A #xBD9A330A #x7EBB3A52 #xAA7D6435 #x77697857 #x03AE4C32 #x004E8316 #xAD78E312 #xE7A21020 #x6AB420F2 #x9D41A70C #xEA1141E6 #x28E06C18 #x984F6B28 #xD2B28CBD #x446E9D83 #x26B75F6C #x4D418D7F #xBA47568C #xE6183D8E #xD80BADBF #x5F166044 #x0E206D7F #x11CBCA3E #xE258A439 #xB21DC0BC #x723A1746 #xF5D7CDD3 #xC7CAA854 #x3D261D9C #x7CAC3288 #x23BA942C #x7690C264 #x478042B8 #x17E55524 #x56A2389F #xE0BE4776 #x67AB2DA0 #x4D289B5E #x8FBBFD31 #x44862B9C #x9D141365 #xB47CC804 #x2B91C793 #x822C1B36 #xFB13DFD8 #x4EB14655 #x14E2A97B #x1ECBBA07 #x5CDE5F14 #x6143459D #xD5F0AC89 #x53A8FBF1 #x1C5E5B00 #x97EA04D8 #xD4FDB3F3 #x622181A8 #x572A1208 #xE9BCD341 #x43CCE58A #x14112586 #xA4C6E0A4 #x9144C5FE #x65CF620F #x0D33D065 #x9F219CA1 #x54A48D48 #x6D63C821 #xC43E5EAC #x72770DAF #xA9728B3A #x20DF87EF #xD7934E7B #x1A3E86E5 #xE35503B6 #xC819D504 #xCAE321FB #xAC60BFA6 #x129A50B3 #x7E9FB6C3 #xCD5E68EA #x9483B1C7 #xB01C9019 #xC295376C #x3DE93CD5 #x2AB9AD13 #xAED52EDF #xC0A07884 #x2E60F512 #xE36210C9 #xBC3D86A3 #x163951CE #x35269D9B #xD0CDB5FA #x0C7D6E2A #xD87F5733 #x59E86297 #x898DB0E7 #x298EF221 #xD1A5AA7E #x55000029 #xB5061B45 #x8BC08AE1 #x6C92703A #xC2C31C2B #xAF25EF42 #x94CC596B #x22540456 #x0A1D73DB #xD9C4179A #x04B6A0F9 #xAE3D3C60 #xEFFDAFA2 #xB49496C4 #xF7C8075B #x1D1CD4E3 #x9CC5C714 #x218E5534 #x78BD1638 #xF850246A #xB2F11568 #x9502BC29 #xEDFABCFA #xDA23051B #x796CE5F2 #xDC93537C #xAAE128B0 #xEE4B29AE #x3A493DA0 #x416895D7 #xB5DF6B2C #x122D7F37 #xFCABBD25 #x105DC4B1 #x70810B58 #xF7882A90 #xE10FDD37 #x518A3F5C #x524DCAB5 #x8451255B #x3C9E8587 #x19BD34E2 #x40298281 #x5D3CECCB #x74A05B6F #x42E13ECA #xB6100215 #x2F59E2AC #x0FF979D1 #xE4F9CC50 #x6037DA27 #x0DF1847D #x5E92975A #xD3E623FE #xD66DE190 #x7B568048 #x5032D6B8 #x8235216E #x9A36B7CE #x24F64B4A #x80272A7A #x8C6916F7 #x93EFED8B #x4CCE1555 #x37DDBFF4 #x4B99BD25 #x4B95DB5D #x69812FC0 #x92D3FDA1 #x90660BB6 #xFB1A4A9A #x46A4B9B2 #x730C1969 #x7F49DA68 #x81E289AA #x83B1A05F #x64669A0F #x9644F48B #x27B3FF7D #x8DB675B3 #xCC6B615C #xBCEBBE95 #x674F20B9 #x75655982 #x6F312382 #x3E45CF05 #x5AE48871 #x54C21157 #xBF619F99 #x40A8EAE9 #xEABAC460 #xF2C0C1CD #x454C6FE9 #x6412691C #x419CF649 #x265B0F70 #xD3DC3BEF #xC3578A9E #x6D0E60F5))) (defconst tiger-t4 (make-tiger-sbox '(#x26323C55 #x5B0E6085 #xFA1B59F5 #x1A46C1A9 #x7C4C8FFA #xA9E245A1 #xDB2955D7 #x65CA5159 #xCE35AFC2 #x05DB0A76 #xA9113D45 #x81EAC77E #xB6AC0A0D #x528EF88A #x597BE3FF #xA09EA253 #xAC48CD56 #x430DDFB3 #xF45CE46F #xC4B3A67A #xFBE2D05E #x4ECECFD8 #xB39935F0 #x3EF56F10 #x9CD619C6 #x0B22D682 #x74DF2069 #x17FD460A #x8510ED40 #x6CF8CC8E #x3A6ECAA7 #xD6C824BF #x1A817049 #x61243D58 #xBBC163A2 #x048BACB6 #x7D44CC32 #xD9A38AC2 #xAAF410AB #x7FDDFF5B #xA804824B #xAD6D495A #x2D8C9F94 #xE1A6A74F #x35DEE8E3 #xD4F78512 #x6540D893 #xFD4B7F88 #x2AA4BFDA #x247C2004 #x17D1327C #x096EA1C5 #x361A6685 #xD56966B4 #x1221057D #x277DA5C3 #xA43ACFF7 #x94D59893 #xCDC02281 #x64F0C51C #xFF6189DB #x3D33BCC4 #x4CE66AF1 #xE005CB18 #x1DB99BEA #xFF5CCD1D #xFE42980F #xB0B854A7 #x718D4B9F #x7BD46A6A #x22A5FD8C #xD10FA8CC #x2BE4BD31 #xD3148495 #xCB243847 #xC7FA975F #x5846C407 #x4886ED1E #x1EB70B04 #x28CDDB79 #xF573417F #xC2B00BE2 #x2180F877 #x5C959045 #xF370EB00 #x7A6BDDFF #xD6D9D6A4 #xCE509E38 #x647FA702 #xEBEB0F00 #x76606F06 #x1DCC06CF #xA286FF0A #xE4D9F28B #xC918C262 #xD85A305D #x32225F54 #x475B1D87 #x68CCB5FE #x2D4FB516 #xD72BBA20 #xA679B9D9 #x912D43A5 #x53841C0D #xBF12A4E8 #x3B7EAA48 #xF22F1DDF #x781E0E47 #x0AB50973 #xEFF20CE6 #x9DFFB742 #x20D261D1 #x062A2E39 #x16A12B03 #x39650495 #x1960EB22 #xD50EB8B8 #x251C16FE #xF826016E #x9AC0C330 #x953E7671 #xED152665 #xA6369570 #x02D63194 #x94B1C987 #x5074F083 #x90B25CE1 #x70BA598C #x0B9742F6 #x794A1581 #xFCAF8C6C #x0D5925E9 #xD868744E #x3067716C #xE8D7731B #x910AB077 #x5AC42F61 #x6A61BBDB #xF0851567 #x93513EFB #x9E83E9D5 #xF494724B #x5C09648D #xE887E198 #x75370CFD #x34B1D3C6 #xBC0D255D #xDC35E433 #x34131BE0 #xD0AAB842 #xB48B7EAF #x08042A50 #x44A3AB35 #x9997C4EE #x201799D0 #x829A7B49 #xB7C54441 #x263B8307 #xFD6A6CA6 #x752F95F4 #x2C08C6E5 #x92721740 #xA795D9EE #x2A8AB754 #x2F72943D #xA442F755 #x19781208 #x2C31334E #xEAEE6291 #x4FA98D7C #x665DB309 #x55C3862F #x5D53B1F3 #xBD061017 #x40413F27 #x46FE6CB8 #xDF0CFA59 #x3FE03792 #x2EB85E8F #xCFE70037 #xADBCE118 #xA7BE29E7 #xDE8431DD #xE544EE5C #x41F1873E #x8A781B1B #xA0D2F0E7 #xA5C94C78 #x77B60728 #x39412E28 #xAFC9A62C #xA1265EF3 #x6A2506C5 #xBCC2770C #xDCE1CE12 #x3AB66DD5 #x4A675B37 #xE65499D0 #x81BFD216 #x7D8F5234 #xEC15F389 #x0F6F64FC #x8B5B13C8 #x74EFBE61 #x14273E1D #xACDC82B7 #x03199D17 #xDD40BFE0 #xE7E061F8 #x37E99257 #x04775AAA #xFA526269 #x463D56F9 #x8BBBF63A #x43A26E64 #xF0013F15 #x879EC898 #xA8307E9F #x150177CC #xCC4C27A4 #xCA1D3348 #x1B432F2C #x9F6FA013 #xDE1D1F8F #x47A7DDD6 #x606602A0 #xCC1CB2C7 #xD237AB64 #x25FCD1D3 #x9B938E72 #x8E0FF476 #xEC4E0370 #x3D03C12D #xFEB2FBDA #xEE43889A #xAE0BCED2 #xEBFB4F43 #x22CB8923 #x3CF7396D #x69360D01 #xD2D4E022 #x855E3602 #xD01F784C #x073805BA #x3852F546 #x33E17A13 #x8AC7B638 #xDF487405 #x678AA14A #xBA92B29C #x6CFAADCD #x0CE89FC7 #x08339E34 #x5F9D4E09 #x1F5923B9 #xF1AFE929 #x0F4A265F #x6E3480F6 #xB29B841C #xEEBF3A2A #x8F91B4AD #xE21938A8 #x45C6D3C3 #x57DFEFF8 #xF62CAAF2 #x2F006B0B #x6F75EE78 #x62F479EF #x1C8916A9 #x11A55AD4 #x84FED453 #xF229D290 #x16B000E6 #x42F1C27B #x9823C074 #x2B1F7674 #xC2745360 #x4B76ECA3 #xB91691BD #x8C98F463 #xF1ADE66A #x14BCC93C #x6D458397 #x8885213E #x274D4711 #x8E177DF0 #x503F2951 #xB49B73B5 #xC3F96B6B #x10168168 #x63CAB0AE #x0E3D963B #x55A1DB14 #x8DFC4B56 #x6E14DE5C #xF789F135 #x4E51DAC1 #x683E68AF #x8D4B0FD9 #xC9A84F9D #x52A0F9D1 #x3691E03F #xE1878E80 #x5ED86E46 #x99D07150 #x3C711A0E #x0C4E9310 #x5A0865B2 #xE4F0682E #x56FBFC1F #x105EDF9B #xEA8D5DE3 #x2379187A #x71ABFDB1 #xBEE77B9C #x2EB99DE1 #x33CF4523 #x21ECC0EA #x1805C7A1 #x59A4D752 #x56AE7C72 #x3896F5EB #xB18F75DC #xAA638F3D #xABE9808E #x9F39358D #xC00B72AC #xB7DEFA91 #x62492D92 #x6B5541FD #xF92E4D5B #x6DC6DEE8 #xC4BEEA7E #x353F57AB #xDA5690CE #x735769D6 #x42391484 #x0A234AA6 #x28F80D9D #xF6F95080 #x7AB3F215 #xB8E319A2 #x51341A4D #x31AD9C11 #x7BEF5805 #x773C22A5 #x07968633 #x45C7561A #x249DBE36 #xF913DA9E #x78A64C68 #xDA652D9B #x3BC334EF #x4C27A97F #xE66B17F4 #x76621220 #x9ACD7D0B #x96774389 #xE0ED6782 #xF3EE5BCA #x00C879FC #x409F7536 #xB5926DB6 #x06D09A39 #x317AC588 #x6F83AEB0 #x86381F21 #x01E6CA4A #xD19F3025 #x66FF3462 #xDDFD3BFB #x72207C24 #xE2ECE2EB #x4AF6B6D3 #xC7EA08DE #x9C994DBE #xB09A8BC4 #x49ACE597 #xCF0797BA #xB38C4766 #xC57C2A75 #x131B9373 #x61931E58 #xB1822CCE #x09BA1C0C #x9D7555B9 #x937D11D2 #x127FAFDD #xC66D92E4 #x29DA3BAD #x54C2ECBC #xA2C1D571 #x82F6FE24 #x58C5134D #x5B62274F #x1C3AE351 #x01CB8126 #xE907C82E #x13E37FCB #xF8ED0919 #xC80046C9 #x3249D8F9 #xE388FB63 #x80CF9BED #x116CF19E #x1881539A #x6BD52457 #x5103F3F7 #xAE47F7A8 #x15B7E6F5 #xD47E9CCF #xDBD7C6DE #x0228BB1A #x44E55C41 #x5EDB4E99 #xB647D425 #xB8AAFC30 #x5D11882B #x29D3212A #xF5098BBB #xE90296B3 #x8FB5EA14 #x57DD025A #x677B9421 #xA390ACB5 #xFB58E7C0 #x83BD4A01 #x89D3674C #x4BF3B93B #x9E2DA4DF #x8CAB4829 #xFCC41E32 #xBA582C52 #x03F38C96 #x7FD85DB2 #xCAD1BDBD #x6082AE83 #xBBB442C1 #xA5DA9AB0 #xB95FE86B #x3771A93F #xB22E0467 #x493152D8 #x845358C9 #x97B4541E #xBE2A4886 #xD38E6966 #x95A2DC2D #x923C852B #xC02C11AC #x0DF2A87B #x2388B199 #x1B4F37BE #x7C8008FA #x4D54E503 #x1F70D0C8 #x7ECE57D4 #x5490ADEC #xD9063A3A #x002B3C27 #x8030A2BF #x7EAEA384 #xED2003C0 #xC602326D #x69A94086 #x83A7287D #x30F57A8A #xC57A5FCB #x79EBE779 #xB56844E4 #x05DCBCE9 #xA373B40F #x88570EE2 #xD71A786E #xBDE8F6A0 #x879CBACD #xC164A32F #x976AD1BC #x9666D78B #xAB21E25E #xE5E5C33C #x901063AA #x48698D90 #x9818B344 #x3E1E8ABB #xE36487AE #x893BDCB4 #xAFBDF931 #x5FBBD519 #x6345A0DC #x9B9465CA #x8628FE26 #x3F9C51EC #x1E5D0160 #xA15049B7 #x4DE44006 #xF776CBB1 #xBF6C70E5 #xEF552BED #x411218F2 #x705A36A3 #xCB0C0708 #x4F986044 #xE74D1475 #x0EA8280E #xCD56D943 #x535F5065 #xC12591D7 #x720AEF96 #xC83223F1 #x7363A51F #xC3A0396F))) #+#.(cl:if (cl:= ironclad::+tiger-wordsize+ 64) '(and) '(or)) (defun update-tiger-block (regs block) (declare (type tiger-regs regs) (type tiger-state-block block) #.(burn-baby-burn)) (let ((a (tiger-regs-a regs)) (b (tiger-regs-b regs)) (c (tiger-regs-c regs))) (macrolet ((key-schedule (block) `(setf (aref ,block 0) (mod64- (aref ,block 0) (logxor (aref ,block 7) #xa5a5a5a5a5a5a5a5)) (aref ,block 1) (logxor (aref ,block 1) (aref ,block 0)) (aref ,block 2) (mod64+ (aref ,block 2) (aref ,block 1)) (aref ,block 3) (mod64- (aref ,block 3) (logxor (aref ,block 2) (mod64ash (mod64lognot (aref ,block 1)) 19))) (aref ,block 4) (logxor (aref ,block 4) (aref ,block 3)) (aref ,block 5) (mod64+ (aref ,block 5) (aref ,block 4)) (aref ,block 6) (mod64- (aref ,block 6) (logxor (aref ,block 5) (mod64ash (mod64lognot (aref ,block 4)) -23))) (aref ,block 7) (logxor (aref ,block 7) (aref ,block 6)) (aref ,block 0) (mod64+ (aref ,block 0) (aref ,block 7)) (aref ,block 1) (mod64- (aref ,block 1) (logxor (aref ,block 0) (mod64ash (mod64lognot (aref ,block 7)) 19))) (aref ,block 2) (logxor (aref ,block 2) (aref ,block 1)) (aref ,block 3) (mod64+ (aref ,block 3) (aref ,block 2)) (aref ,block 4) (mod64- (aref ,block 4) (logxor (aref ,block 3) (mod64ash (mod64lognot (aref ,block 2)) -23))) (aref ,block 5) (logxor (aref ,block 5) (aref ,block 4)) (aref ,block 6) (mod64+ (aref ,block 6) (aref ,block 5)) (aref ,block 7) (mod64- (aref ,block 7) (logxor (aref ,block 6) #x0123456789abcdef)))) (tiger-round (a b c block n mul) `(progn (setf ,c (logxor ,c (aref ,block ,n)) ,a (mod64- ,a (logxor (aref tiger-t1 (first-byte ,c)) (aref tiger-t2 (third-byte ,c)) (aref tiger-t3 (fifth-byte ,c)) (aref tiger-t4 (seventh-byte ,c)))) ,b (mod64+ ,b (logxor (aref tiger-t1 (eighth-byte ,c)) (aref tiger-t2 (sixth-byte ,c)) (aref tiger-t3 (fourth-byte ,c)) (aref tiger-t4 (second-byte ,c)))) ,b (mod64* ,b ,mul)))) (pass (a b c block mul) `(progn (tiger-round ,a ,b ,c ,block 0 ,mul) (tiger-round ,b ,c ,a ,block 1 ,mul) (tiger-round ,c ,a ,b ,block 2 ,mul) (tiger-round ,a ,b ,c ,block 3 ,mul) (tiger-round ,b ,c ,a ,block 4 ,mul) (tiger-round ,c ,a ,b ,block 5 ,mul) (tiger-round ,a ,b ,c ,block 6 ,mul) (tiger-round ,b ,c ,a ,block 7 ,mul)))) (pass a b c block 5) (key-schedule block) (pass c a b block 7) (key-schedule block) (pass b c a block 9) (setf (tiger-regs-a regs) (logxor a (tiger-regs-a regs)) (tiger-regs-b regs) (mod64- b (tiger-regs-b regs)) (tiger-regs-c regs) (mod64+ c (tiger-regs-c regs))) regs))) #+#.(cl:if (cl:= ironclad::+tiger-wordsize+ 32) '(and) '(or)) (defun update-tiger-block (regs block) (declare (type tiger-regs regs) (type (simple-array (unsigned-byte 32) (16)) block) #.(burn-baby-burn)) (let ((a0 (tiger-regs-a0 regs)) (a1 (tiger-regs-a1 regs)) (b0 (tiger-regs-b0 regs)) (b1 (tiger-regs-b1 regs)) (c0 (tiger-regs-c0 regs)) (c1 (tiger-regs-c1 regs)) (x00 (aref block 0)) (x01 (aref block 1)) (x10 (aref block 2)) (x11 (aref block 3)) (x20 (aref block 4)) (x21 (aref block 5)) (x30 (aref block 6)) (x31 (aref block 7)) (x40 (aref block 8)) (x41 (aref block 9)) (x50 (aref block 10)) (x51 (aref block 11)) (x60 (aref block 12)) (x61 (aref block 13)) (x70 (aref block 14)) (x71 (aref block 15)) (aa0 0) (aa1 0) (bb0 0) (bb1 0) (cc0 0) (cc1 0) (temp0 0) (temp1 0) (temps0 0) (tcarry 0)) (declare (type (unsigned-byte 32) a0 a1 b0 b1 c0 c1 x00 x01 x10 x11 x20 x21 x30 x31 x40 x41 x50 x51 x60 x61 x70 x71 aa0 aa1 bb0 bb1 cc0 cc1 temp0 temp1 temps0) (type bit tcarry)) (macrolet ((sub64 (s0 s1 p0 p1) `(progn (multiple-value-setq (temps0 tcarry) (%subtract-with-borrow ,s0 ,p0 1)) (setf ,s0 temps0 ,s1 (%subtract-with-borrow ,s1 ,p1 tcarry)))) (add64 (s0 s1 p0 p1) `(progn (multiple-value-setq (temps0 tcarry) (%add-with-carry ,s0 ,p0 0)) (setf ,s0 temps0 ,s1 (%add-with-carry ,s1 ,p1 tcarry)))) (xor64 (s0 s1 p0 p1) `(setf ,s0 (logxor ,s0 ,p0) ,s1 (logxor ,s1 ,p1))) (mul5 (s0 s1) `(let ((tempt0 (mod32ash ,s0 2)) (tempt1 (logior (mod32ash ,s1 2) (mod32ash ,s0 -30)))) (declare (type (unsigned-byte 32) tempt0 tempt1)) (add64 ,s0 ,s1 tempt0 tempt1))) (mul7 (s0 s1) `(let ((tempt0 (mod32ash ,s0 3)) (tempt1 (logior (mod32ash ,s1 3) (mod32ash ,s0 -29)))) (declare (type (unsigned-byte 32) tempt0 tempt1)) (sub64 tempt0 tempt1 ,s0 ,s1) (setf ,s0 tempt0 ,s1 tempt1))) (mul9 (s0 s1) `(let ((tempt0 (mod32ash ,s0 3)) (tempt1 (logior (mod32ash ,s1 3) (mod32ash ,s0 -29)))) (declare (type (unsigned-byte 32) tempt0 tempt1)) (add64 ,s0 ,s1 tempt0 tempt1))) (save-abc () `(setf aa0 a0 aa1 a1 bb0 b0 bb1 b1 cc0 c0 cc1 c1)) (loref (sbox index) `(aref ,sbox (* 2 ,index))) (hiref (sbox index) `(aref ,sbox (+ (* 2 ,index) 1))) (round-xor (sbox bytefun val) `(setf temp0 (logxor temp0 (loref ,sbox (,bytefun ,val))) temp1 (logxor temp1 (hiref ,sbox (,bytefun ,val))))) (tiger-round(a0 a1 b0 b1 c0 c1 x0 x1 mul) `(progn (xor64 ,c0 ,c1 ,x0 ,x1) (setf temp0 (loref tiger-t1 (first-byte ,c0)) temp1 (hiref tiger-t1 (first-byte ,c0))) (round-xor tiger-t2 third-byte ,c0) (round-xor tiger-t3 first-byte ,c1) (round-xor tiger-t4 third-byte ,c1) (sub64 ,a0 ,a1 temp0 temp1) (setf temp0 (loref tiger-t4 (second-byte ,c0)) temp1 (hiref tiger-t4 (second-byte ,c0))) (round-xor tiger-t3 fourth-byte ,c0) (round-xor tiger-t2 second-byte ,c1) (round-xor tiger-t1 fourth-byte ,c1) (add64 ,b0 ,b1 temp0 temp1) (cond ((= ,mul 5) (mul5 ,b0 ,b1)) ((= ,mul 7) (mul7 ,b0 ,b1)) (t (mul9 ,b0 ,b1))))) (pass (a0 a1 b0 b1 c0 c1 mul) `(progn (tiger-round ,a0 ,a1 ,b0 ,b1 ,c0 ,c1 x00 x01 ,mul) (tiger-round ,b0 ,b1 ,c0 ,c1 ,a0 ,a1 x10 x11 ,mul) (tiger-round ,c0 ,c1 ,a0 ,a1 ,b0 ,b1 x20 x21 ,mul) (tiger-round ,a0 ,a1 ,b0 ,b1 ,c0 ,c1 x30 x31 ,mul) (tiger-round ,b0 ,b1 ,c0 ,c1 ,a0 ,a1 x40 x41 ,mul) (tiger-round ,c0 ,c1 ,a0 ,a1 ,b0 ,b1 x50 x51 ,mul) (tiger-round ,a0 ,a1 ,b0 ,b1 ,c0 ,c1 x60 x61 ,mul) (tiger-round ,b0 ,b1 ,c0 ,c1 ,a0 ,a1 x70 x71 ,mul))) (key-schedule () `(progn (sub64 x00 x01 (logxor x70 #xa5a5a5a5) (logxor x71 #xa5a5a5a5)) (xor64 x10 x11 x00 x01) (add64 x20 x21 x10 x11) (sub64 x30 x31 (ldb (byte 32 0) (logxor x20 (mod32ash (mod32lognot x10) 19))) (ldb (byte 32 0) (mod32lognot (logxor x21 (logior (mod32ash x11 19) (mod32ash x10 -13)))))) (xor64 x40 x41 x30 x31) (add64 x50 x51 x40 x41) (sub64 x60 x61 (ldb (byte 32 0) (mod32lognot (logxor x50 (logior (mod32ash x40 -23) (mod32ash x41 9))))) (ldb (byte 32 0) (logxor x51 (mod32ash (mod32lognot x41) -23)))) (xor64 x70 x71 x60 x61) (add64 x00 x01 x70 x71) (sub64 x10 x11 (ldb (byte 32 0) (logxor x00 (mod32ash (mod32lognot x70) 19))) (ldb (byte 32 0) (mod32lognot (logxor x01 (logior (mod32ash x71 19) (mod32ash x70 -13)))))) (xor64 x20 x21 x10 x11) (add64 x30 x31 x20 x21) (sub64 x40 x41 (ldb (byte 32 0) (mod32lognot (logxor x30 (logior (mod32ash x20 -23) (mod32ash x21 9))))) (ldb (byte 32 0) (logxor x31 (mod32ash (mod32lognot x21) -23)))) (xor64 x50 x51 x40 x41) (add64 x60 x61 x50 x51) (sub64 x70 x71 (logxor x60 #x89abcdef) (logxor x61 #x01234567)))) (feed-forward () `(progn (xor64 a0 a1 aa0 aa1) (sub64 b0 b1 bb0 bb1) (add64 c0 c1 cc0 cc1)))) (save-abc) (dotimes (i 3) (unless (zerop i) (key-schedule)) (pass a0 a1 b0 b1 c0 c1 (or (and (zerop i) 5) (and (= i 1) 7) 9)) (psetq a0 c0 a1 c1 c0 b0 c1 b1 b0 a0 b1 a1)) #+nil (progn (pass a0 a1 b0 b1 c0 c1 5) (key-schedule) (pass c0 c1 a0 a1 b0 b1 7) (key-schedule) (pass b0 b1 c0 c1 a0 a1 9)) (feed-forward) (setf (tiger-regs-a0 regs) a0 (tiger-regs-a1 regs) a1 (tiger-regs-b0 regs) b0 (tiger-regs-b1 regs) b1 (tiger-regs-c0 regs) c0 (tiger-regs-c1 regs) c1) regs))) (defstruct (tiger (:constructor %make-tiger-digest nil) (:constructor %make-tiger-state (regs amount block buffer buffer-index)) (:copier nil) (:include mdx)) (regs (initial-tiger-regs) :type tiger-regs :read-only t) (block (make-array #.+tiger-block-n-words+ :element-type '(unsigned-byte #.+tiger-wordsize+)) :type tiger-state-block :read-only t)) (defmethod reinitialize-instance ((state tiger) &rest initargs) (declare (ignore initargs)) (replace (tiger-regs state) +pristine-tiger-registers+) (setf (tiger-amount state) 0 (tiger-buffer-index state) 0) state) (defmethod copy-digest ((state tiger) &optional copy) (check-type copy (or null tiger)) (cond (copy (replace (tiger-regs copy) (tiger-regs state)) (replace (tiger-buffer copy) (tiger-buffer state)) (setf (tiger-amount copy) (tiger-amount state) (tiger-buffer-index copy) (tiger-buffer-index state)) copy) (t (%make-tiger-state (copy-seq (tiger-regs state)) (tiger-amount state) (copy-seq (tiger-block state)) (copy-seq (tiger-buffer state)) (tiger-buffer-index state))))) (define-digest-updater tiger "Update the given tiger-state from sequence, which is either a simple-string or a simple-array with element-type (unsigned-byte 8), bounded by start and end, which must be numeric bounding-indices." (flet ((compress (state sequence offset) (let ((block (tiger-block state))) (#.+tiger-block-copy-fn+ block sequence offset) (update-tiger-block (tiger-regs state) block)))) (declare (dynamic-extent #'compress)) (declare (notinline mdx-updater)) (mdx-updater state #'compress sequence start end))) (define-digest-finalizer (tiger 24) "If the given tiger-state has not already been finalized, finalize it, by processing any remaining input in its buffer, with suitable padding and appended bit-length, as specified by the TIGER standard. The resulting TIGER message-digest is returned as an array of twenty-four (unsigned-byte 8) values. Calling UPDATE-TIGER-STATE after a call to FINALIZE-TIGER-STATE results in unspecified behaviour." (let ((regs (tiger-regs state)) (block (tiger-block state)) (buffer (tiger-buffer state)) (buffer-index (tiger-buffer-index state)) (total-length (* 8 (tiger-amount state)))) (declare (type tiger-regs regs) (type (integer 0 63) buffer-index) (type tiger-state-block block) (type (simple-array (unsigned-byte 8) (*)) buffer)) ;; Add mandatory bit 1 padding. ;; Note that Tiger does this differently from MD5. (setf (aref buffer buffer-index) #x01) ;; Fill with 0 bit padding (loop for index of-type (integer 0 64) from (1+ buffer-index) below 64 do (setf (aref buffer index) #x00)) (#.+tiger-block-copy-fn+ block buffer 0) ;; Flush block first if length wouldn't fit (when (>= buffer-index 56) (update-tiger-block regs block) ;; Create new fully 0 padded block (dotimes (i #.+tiger-block-n-words+) (setf (aref block i) 0))) ;; Add 64bit message bit length #.(if (= +tiger-wordsize+ 32) '(store-data-length block total-length 14) '(setf (aref block 7) total-length)) ;; Flush last block (update-tiger-block regs block) ;; Done, remember digest for later calls (finalize-registers state regs))) (defdigest tiger :digest-length 24 :block-length 64) ironclad-0.57/src/digests/tree-hash.lisp000066400000000000000000000120751420372057600202550ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto) ;;; See the spec at ;;; http://zgp.org/pipermail/p2p-hackers/2002-June/000621.html (defparameter *leaf-byte* (make-array 1 :element-type '(unsigned-byte 8) :initial-element 0)) (defparameter *internal-byte* (make-array 1 :element-type '(unsigned-byte 8) :initial-element 1)) (defun make-tree-hash-leaf-digest (digest-spec) (let ((digest (make-digest digest-spec))) (update-digest digest *leaf-byte*) digest)) (defstruct (tree-hash (:constructor %make-tree-hash nil) (:constructor %make-tree-hash-state (block-length state block-index branch)) (:copier nil)) (block-length 1024 :type (integer 1 #.most-positive-fixnum)) (state (make-tree-hash-leaf-digest :tiger)) (block-index 0 :type (integer 0 #.most-positive-fixnum)) (branch () :type list)) (defun %make-tree-hash-digest (&key (digest :tiger) (block-length 1024)) (%make-tree-hash-state block-length (make-tree-hash-leaf-digest digest) 0 '())) (defun make-tiger-tree-hash () (%make-tree-hash-digest)) (defmethod block-length ((x tree-hash)) (tree-hash-block-length x)) (defmethod digest-length ((x tree-hash)) (digest-length (tree-hash-state x))) (defmethod reinitialize-instance ((state tree-hash) &rest initargs) (declare (ignore initargs)) (reinitialize-instance (tree-hash-state state)) (update-digest (tree-hash-state state) *leaf-byte*) (setf (tree-hash-block-index state) 0) (setf (tree-hash-branch state) '()) state) (defmethod copy-digest ((state tree-hash) &optional copy) (check-type copy (or null tree-hash)) (cond (copy (copy-digest (tree-hash-state state) (tree-hash-state copy)) (setf (tree-hash-block-length copy) (tree-hash-block-length state)) (setf (tree-hash-block-index copy) (tree-hash-block-index state)) (setf (tree-hash-branch copy) (tree-hash-branch state)) copy) (t (%make-tree-hash-state (tree-hash-block-length state) (copy-digest (tree-hash-state state)) (tree-hash-block-index state) (tree-hash-branch state))))) (define-digest-updater tree-hash "Update the given tree-hash state from sequence, which is a simple-array with element-type (unsigned-byte 8), bounded by start and end, which must be numeric bounding-indices." (assert (<= start end)) (when (< start end) (loop :with block-length = (tree-hash-block-length state) :with digest = (tree-hash-state state) :for length fixnum = (- end start) :for block-index fixnum = (tree-hash-block-index state) :then 0 :for block-remaining-length fixnum = (- block-length block-index) :for current-length fixnum = (min block-remaining-length length) :for new-index fixnum = (+ block-index current-length) :for new-start fixnum = (+ start current-length) :do (update-digest digest sequence :start start :end new-start) (when (= new-index block-length) (update-tree-hash-branch state) (reinitialize-instance digest) (update-digest digest *leaf-byte*) (setf new-index 0)) (setf start new-start) (when (= start end) (setf (tree-hash-block-index state) new-index) (return))))) (defun update-tree-hash-branch (state) (let ((digest (tree-hash-state state))) (setf (tree-hash-branch state) (merge-tree-hash-branch digest (tree-hash-branch state) (produce-digest digest))))) (defun merge-tree-hash-branch (digest branch hash) (let ((other-hash (car branch))) (if (null other-hash) (cons hash (cdr branch)) ;; happens to work when branch is nil! (cons nil (merge-tree-hash-branch digest (cdr branch) (combine-hash-tree-digests digest other-hash hash)))))) (defun combine-hash-tree-digests (digest hash1 hash2) (reinitialize-instance digest) (update-digest digest *internal-byte*) (update-digest digest hash1) (update-digest digest hash2) (produce-digest digest)) (defmethod produce-digest ((state tree-hash) &key digest (digest-start 0)) (let ((state (copy-digest state))) (when (or (not (zerop (tree-hash-block-index state))) (null (tree-hash-branch state))) (update-tree-hash-branch state)) (let* ((internal-state (tree-hash-state state)) (result (reduce (lambda (hash2 hash1) (cond ((null hash2) hash1) ((null hash1) hash2) (t (combine-hash-tree-digests internal-state hash1 hash2)))) (tree-hash-branch state)))) (if digest (if (<= (length result) (- (length digest) digest-start)) (replace digest result :start1 digest-start) (error 'insufficient-buffer-space :buffer digest :start digest-start :length (length result))) result)))) (setf (get 'tree-hash '%digest-length) 24) (setf (get 'tree-hash '%make-digest) (symbol-function '%make-tree-hash-digest)) ironclad-0.57/src/digests/whirlpool.lisp000066400000000000000000000301471420372057600204140ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; This file implements the Whirlpool message-digest algoritm, as ;;;; defined in The WHIRLPOOL Hashing Function, by Paulo S.L.M. Barreto1 ;;;; and Vincent Rijmen, revised on Revised on May 24, 2003 (1). ;;;; ;;;; It was written by Peter Gijsels. ;;;; Copyright (c) 2007, Peter Gijsels ;;;; All rights reserved. ;;;; ;;;; This software is "as is", and has no warranty of any kind. The ;;;; authors assume no responsibility for the consequences of any use of ;;;; this software. (in-package :crypto) (eval-when (:compile-toplevel :load-toplevel :execute) (deftype whirlpool-regs () '(simple-array (unsigned-byte 32) (64))) (defun initial-whirlpool-regs () (make-array 64 :element-type '(unsigned-byte 32) :initial-element 0)) (defconstant +whirlpool-regs-hash-offset+ 0) (defconstant +whirlpool-regs-k-offset+ 16) (defconstant +whirlpool-regs-state-offset+ 32) (defconstant +whirlpool-regs-l-offset+ 48) ) ; EVAL-WHEN (defconst +pristine-whirlpool-registers+ (initial-whirlpool-regs)) (defun whirlpoolregs-digest (regs buffer &optional (start 0)) (declare (type whirlpool-regs regs) (type (integer 0 #.(- array-dimension-limit 64)) start)) (flet ((stuff-registers (buffer start) (dotimes (i 16 buffer) (setf (ub32ref/be buffer (+ start (* 4 i))) (aref regs i))))) (declare (inline stuff-registers)) (cond (buffer (stuff-registers buffer start)) (t (stuff-registers (make-array 64 :element-type '(unsigned-byte 8)) 0))))) (eval-when (:compile-toplevel :load-toplevel :execute) (defconstant +whirlpool-rounds+ 10 "The number of rounds. The default is 10.") ) (eval-when (:compile-toplevel) ;;; Code to generate lookup tables +C-EVEN+ and +C-ODD+. (defconst +e+ #(#x1 #xB #x9 #xC #xD #x6 #xF #x3 #xE #x8 #x7 #x4 #xA #x2 #x5 #x0)) (defconst +r+ #(#x7 #xC #xB #xD #xE #x4 #x9 #xF #x6 #x3 #x8 #xA #x2 #x5 #x1 #x0)) (defun e (i) (aref +e+ i)) (defun r (i) (aref +r+ i)) (defun e-1 (i) (position i +e+)) (defun byte-xor (i1 i2) (logxor i1 i2)) (defun s-internal (u v) "The S-box internals. Corresponds to equations on page 10 of (1)." (let ((r (r (byte-xor (e u) (e-1 v))))) (values (e (byte-xor (e u) r)) (e-1 (byte-xor (e-1 v) r))))) (defun s (i) "The S-box function." (let ((u (ldb (byte 4 4) i)) (v (ldb (byte 4 0) i))) (multiple-value-bind (u_ v_) (s-internal u v) (let ((result 0)) (setf (ldb (byte 4 4) result) u_ (ldb (byte 4 0) result) v_) result)))) (defconstant +p8+ #.(reduce #'+ (mapcar #'(lambda (x) (expt 2 x)) '(8 4 3 2 0))) "The primitive polynomial of degree 8 for GF(2^8).") ;; Arithmetic in the Galois Field GF(2^8). (defun gf-add (x y) (logxor x y)) (defun gf-shift (x n) (ash x n)) (defun gf-reduce (x) (let ((result x)) (loop until (< (integer-length result) (integer-length +p8+)) do (setf result (gf-add result (gf-shift +p8+ (- (integer-length result) (integer-length +p8+)))))) result)) (defun gf-mult (x y) (loop with result = 0 for i downfrom (integer-length y) to 0 do (progn (setf result (gf-reduce (gf-shift result 1))) (unless (zerop (ldb (byte 1 i) y)) (setf result (gf-add result x)))) finally (return result))) (defun cir (vector) "The circulant matrix whose first row is VECTOR." (loop with n = (length vector) with result = (make-array (list n n)) for i below n do (loop for j below n do (setf (aref result i j) (aref vector (mod (- j i) n)))) finally (return result))) (defparameter *c* (cir #(1 1 4 1 8 5 2 9))) (defun calculate-table-word (i j offset) (loop with sx = (s j) with result = 0 for k below 4 do (setf (ldb (byte 8 (- 32 (* (1+ k) 8))) result) (gf-mult sx (aref *c* i (+ k offset)))) finally (return result))) (defun calculate-c-even () (loop with result = (make-array '(8 256) :element-type '(unsigned-byte 32) :initial-element 0) for i below 8 do (dotimes (j 256) (setf (aref result i j) (calculate-table-word i j 0))) finally (return result))) (defun calculate-c-odd () (loop with result = (make-array '(8 256) :element-type '(unsigned-byte 32) :initial-element 0) for i below 8 do (dotimes (j 256) (setf (aref result i j) (calculate-table-word i j 4))) finally (return result))) ) ; EVAL-WHEN (declaim (type (simple-array (unsigned-byte 32) (22)) +rc+)) (defconst +rc+ #.(loop with result = (make-array 22 :element-type '(unsigned-byte 32) :initial-element 0) with one-row-of-bytes = (make-array 8 :element-type '(unsigned-byte 8)) for r from 1 to +whirlpool-rounds+ do (progn (loop for j below 8 do (setf (aref one-row-of-bytes j) (s (+ (* 8 (- r 1)) j)))) (setf (aref result (* 2 r)) (ub32ref/be one-row-of-bytes 0)) (setf (aref result (+ (* 2 r) 1)) (ub32ref/be one-row-of-bytes 4))) finally (return result))) (declaim (type (simple-array (unsigned-byte 32) (8 256)) +c-even+ +c-odd+)) (defconst +c-even+ #.(calculate-c-even)) (defconst +c-odd+ #.(calculate-c-odd)) (eval-when (:compile-toplevel :load-toplevel :execute) ;;; Macro helper functions. (defun extract-byte (k row column) (if (>= column 4) `(ldb (byte 8 ,(- 24 (* 8 (- column 4)))) (,k ,(1+ (* 2 row)))) `(ldb (byte 8 ,(- 24 (* 8 column))) (,k ,(* 2 row))))) (defun split (lst) (let* ((n (length lst)) (mid (floor n 2))) (values (subseq lst 0 mid) (subseq lst mid)))) (defun generate-xor (terms) (if (endp (cdr terms)) (car terms) (multiple-value-bind (terms1 terms2) (split terms) `(logxor ,(generate-xor terms1) ,(generate-xor terms2))))) (defun one-slice (to from i) (let ((indices (loop for n below 8 collect (gensym)))) `(let (,@(loop for index in indices for j below 8 collect `(,index ,(extract-byte from (mod (- i j) 8) j)))) (setf (,to ,(* 2 i)) ,(generate-xor `,(loop for index in indices for j below 8 collect `(aref +c-even+ ,j ,index)))) (setf (,to ,(1+ (* 2 i))) ,(generate-xor `,(loop for index in indices for j below 8 collect `(aref +c-odd+ ,j ,index))))))) ) ; EVAL-WHEN (defmacro lookup-in-c (to from) `(progn ,@(loop for i below 8 collect (one-slice to from i)))) (defun update-whirlpool-block (regs block) "this is the core part of the whirlpool algorithm. it takes a complete 16 word block of input, and updates the working state in the regs." (declare (type whirlpool-regs regs) (type (simple-array (unsigned-byte 32) (16)) block)) (macrolet ((hash (i) `(aref regs (+ ,i +whirlpool-regs-hash-offset+))) (k (i) `(aref regs (+ ,i +whirlpool-regs-k-offset+))) (state (i) `(aref regs (+ ,i +whirlpool-regs-state-offset+))) (l (i) `(aref regs (+ ,i +whirlpool-regs-l-offset+)))) ;; Compute and apply K^0 to the cipher state (loop for i below 16 do (setf (state i) (logxor (aref block i) (setf (k i) (hash i))))) ;; Iterate over all rounds (loop for r of-type (integer 1 11) from 1 to +whirlpool-rounds+ do (progn ;; Compute K^r from K^{r-1} (lookup-in-c l k) (setf (l 0) (logxor (l 0) (aref +rc+ (* 2 r)))) (setf (l 1) (logxor (l 1) (aref +rc+ (+ (* 2 r) 1)))) (loop for i below 16 do (setf (k i) (l i))) ;; Apply the r-th round transformation (lookup-in-c l state) (loop for i below 16 do (setf (l i) (logxor (l i) (k i)))) (loop for i below 16 do (setf (state i) (l i))))) ;; Apply the Miyaguchi-Preneel compression function (loop for i below 16 do (setf (hash i) (logxor (hash i) (logxor (state i) (aref block i))))) regs)) ;;; Mid-Level Drivers (defstruct (whirlpool (:constructor %make-whirlpool-digest nil) (:constructor %make-whirlpool-state (regs amount block buffer buffer-index)) (:copier nil) (:include mdx)) (regs (initial-whirlpool-regs) :type whirlpool-regs :read-only t) (block (make-array 16 :element-type '(unsigned-byte 32)) :type (simple-array (unsigned-byte 32) (16)) :read-only t)) (defmethod reinitialize-instance ((state whirlpool) &rest initargs) (declare (ignore initargs)) (replace (whirlpool-regs state) +pristine-whirlpool-registers+) (setf (whirlpool-amount state) 0 (whirlpool-buffer-index state) 0) state) (defmethod copy-digest ((state whirlpool) &optional copy) (check-type copy (or whirlpool null)) (cond (copy (replace (whirlpool-regs copy) (whirlpool-regs state)) (replace (whirlpool-buffer copy) (whirlpool-buffer state)) (setf (whirlpool-amount copy) (whirlpool-amount state) (whirlpool-buffer-index copy) (whirlpool-buffer-index state)) copy) (t (%make-whirlpool-state (copy-seq (whirlpool-regs state)) (whirlpool-amount state) (copy-seq (whirlpool-block state)) (copy-seq (whirlpool-buffer state)) (whirlpool-buffer-index state))))) (define-digest-updater whirlpool "Update the given whirlpool state from sequence, which is either a simple-string or a simple-array with element-type (unsigned-byte 8), bounded by start and end, which must be numeric bounding-indices." (flet ((compress (state sequence offset) (let ((block (whirlpool-block state))) (fill-block-ub8-be block sequence offset) (update-whirlpool-block (whirlpool-regs state) block)))) (declare (dynamic-extent #'compress)) (declare (notinline mdx-updater)) (mdx-updater state #'compress sequence start end))) (define-digest-finalizer (whirlpool 64) "If the given whirlpool-state has not already been finalized, finalize it, by processing any remaining input in its buffer, with suitable padding and appended bit-length, as specified by the Whirlpool standard. The resulting whirlpool message-digest is returned as an array of 64 (unsigned-byte 8) values. Calling UPDATE-WHIRLPOOL-STATE after a call to FINALIZE-WHIRLPOOL-STATE results in unspecified behaviour." (let ((regs (whirlpool-regs state)) (block (whirlpool-block state)) (buffer (whirlpool-buffer state)) (buffer-index (whirlpool-buffer-index state)) (total-length (* 8 (whirlpool-amount state)))) (declare (type whirlpool-regs regs) (type (integer 0 63) buffer-index) (type (simple-array (unsigned-byte 32) (16)) block) (type (simple-array (unsigned-byte 8) (64)) buffer)) ;; Add mandatory bit 1 padding (setf (aref buffer buffer-index) #x80) ;; Fill with 0 bit padding (loop for index of-type (integer 0 64) from (1+ buffer-index) below 64 do (setf (aref buffer index) #x00)) (fill-block-ub8-be block buffer 0) ;; Flush block first if length wouldn't fit (when (>= buffer-index 32) (update-whirlpool-block regs block) ;; Create new fully 0 padded block (loop for index of-type (integer 0 16) from 0 below 16 do (setf (aref block index) #x00000000))) ;; Add 256 bit message bit length (loop for i of-type (integer 0 8) from 0 below 8 do (setf (aref block (+ 8 i)) (ldb (byte 32 (- 256 (* 32 (1+ i)))) total-length))) ;; Flush last block (update-whirlpool-block regs block) ;; Done, remember digest for later calls (finalize-registers state regs))) (defdigest whirlpool :digest-length 64 :block-length 64) ironclad-0.57/src/generic.lisp000066400000000000000000000261571420372057600163550ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; generic.lisp -- generic function definitions (in-package :crypto) ;;; Authenticated encryption (defgeneric process-associated-data (mode data &key start end) (:documentation "Update the internal state of MODE with the contents of DATA between START and END so that they are taken into consideration in the authentication tag.")) (defgeneric produce-tag (mode &key tag tag-start) (:documentation "Return the authentication tag of the data processed by MODE so far. If TAG is provided, the computed tag will be placed into TAG starting at TAG-START.")) ;;; Ciphers (defgeneric verify-key (cipher key) (:documentation "Return T if KEY is a valid encryption key for CIPHER.")) (defgeneric schedule-key (cipher key) (:documentation "Schedule KEY for CIPHER, filling CIPHER with any round keys, etc. needed for encryption and decryption.")) (defgeneric key-lengths (cipher) (:documentation "Return a list of possible lengths of a key for CIPHER. CIPHER may either be a cipher name as accepted by MAKE-CIPHER or a cipher object as returned by MAKE-CIPHER. NIL is returned if CIPHER does not name a known cipher or is not a cipher object.")) (defgeneric block-length (cipher) (:documentation "Return the number of bytes in an encryption or decryption block for CIPHER. CIPHER may either be a cipher name as accepted by MAKE-CIPHER or a cipher object as returned by MAKE-CIPHER. NIL is returned if CIPHER does not name a known cipher or is not a cipher object.")) (defgeneric encrypted-message-length (cipher mode length &optional handle-final-block) (:documentation "Return the length a message of LENGTH would be if it were to be encrypted (decrypted) with CIPHER in MODE. HANDLE-FINAL-BLOCK indicates whether we are encrypting up to and including the final block (so that short blocks may be taken into account, if applicable). Note that this computation may involve MODE's state.")) (defgeneric mode-crypt-functions (cipher mode) (:documentation "Returns two functions that perform encryption and decryption, respectively, with CIPHER in MODE. The lambda list of each function is (IN OUT IN-START IN-END OUT-START HANDLE-FINAL-BLOCK). HANDLE-FINAL-BLOCK is as in ENCRYPT and DECRYPT; the remaining parameters should be self-explanatory. Each function, when called, returns two values: the number of octets processed from IN and the number of octets processed from OUT. Note that for some cipher modes, IN and OUT may be different.")) (defgeneric valid-mode-for-cipher-p (cipher mode)) (defgeneric encrypt (cipher plaintext ciphertext &key plaintext-start plaintext-end ciphertext-start handle-final-block &allow-other-keys) (:documentation "Encrypt the data in PLAINTEXT between PLAINTEXT-START and PLAINTEXT-END according to CIPHER. Places the encrypted data in CIPHERTEXT, beginning at CIPHERTEXT-START. Less data than (- PLAINTEXT-END PLAINTEXT-START) may be encrypted, depending on the alignment constraints of CIPHER and the amount of space available in CIPHERTEXT.")) (defgeneric decrypt (cipher ciphertext plaintext &key ciphertext-start ciphertext-end plaintext-start handle-final-block &allow-other-keys) (:documentation "Decrypt the data in CIPHERTEXT between CIPHERTEXT-START and CIPHERTEXT-END according to CIPHER. Places the decrypted data in PLAINTEXT, beginning at PLAINTEXT-START. Less data than (- CIPHERTEXT-END CIPHERTEXT-START) may be decrypted, depending on the alignment constraints of CIPHER and the amount of space available in PLAINTEXT.")) ;;; Digests (defgeneric digest-file (digest-spec pathname &rest args &key buffer start end digest digest-start) (:documentation "Return the digest of the contents of the file named by PATHNAME using the algorithm DIGEST-NAME. If DIGEST is provided, the digest will be placed into DIGEST starting at DIGEST-START. DIGEST must be a (SIMPLE-ARRAY (UNSIGNED-BYTE 8) (*)). An error will be signaled if there is insufficient room in DIGEST. If BUFFER is provided, the portion of BUFFER between START and END will be used to hold data read from the stream.")) (defgeneric digest-stream (digest-spec stream &rest args &key buffer start end digest digest-start) (:documentation "Return the digest of the contents of STREAM using the algorithm DIGEST-NAME. STREAM-ELEMENT-TYPE of STREAM should be (UNSIGNED-BYTE 8). If DIGEST is provided, the digest will be placed into DIGEST starting at DIGEST-START. DIGEST must be a (SIMPLE-ARRAY (UNSIGNED-BYTE 8) (*)). An error will be signaled if there is insufficient room in DIGEST. If BUFFER is provided, the portion of BUFFER between START and END will be used to hold data read from the stream.")) (defgeneric digest-sequence (digest-spec sequence &rest args &key start end digest digest-start) (:documentation "Return the digest of the subsequence of SEQUENCE specified by START and END using the algorithm DIGEST-SPEC. SEQUENCE can be any vector with an element-type of (UNSIGNED-BYTE 8). If DIGEST is provided, the digest will be placed into DIGEST starting at DIGEST-START. DIGEST must be a (SIMPLE-ARRAY (UNSIGNED-BYTE 8) (*)). An error will be signaled if there is insufficient room in DIGEST.")) (defgeneric copy-digest (digester &optional copy) (:documentation "Return a copy of DIGESTER. If COPY is not NIL, it should be of the same type as DIGESTER and will receive the copied data, rather than creating a new object. The copy is a deep copy, not a shallow copy as might be returned by COPY-STRUCTURE.")) (defgeneric update-digest (digester thing &key &allow-other-keys) (:documentation "Update the internal state of DIGESTER with THING. The exact method is determined by the type of THING.")) (defgeneric produce-digest (digester &key digest digest-start) (:documentation "Return the hash of the data processed by DIGESTER so far. If DIGEST is provided, the hash will be placed into DIGEST starting at DIGEST-START. DIGEST must be a (SIMPLE-ARRAY (UNSIGNED-BYTE 8) (*)). An error will be signaled if there is insufficient room in DIGEST.")) (defgeneric digest-length (digest) (:documentation "Return the number of bytes in a digest generated by DIGEST.")) ;;; Key derivation functions (defgeneric derive-key (kdf passphrase salt iteration-count key-length) (:documentation "Given a key derivation function object (produced by MAKE-KDF), a PASSWORD, a SALT and an ITERATION-COUNT, return the password digest as a byte array of length KEY-LENGTH.")) ;;; Message authentication codes (defgeneric update-mac (mac thing &key &allow-other-keys) (:documentation "Update the internal state of MAC with THING. The exact method is determined by the type of THING.")) (defgeneric produce-mac (mac &key digest digest-start) (:documentation "Return the hash of the data processed by MAC so far. If DIGEST is provided, the hash will be placed into DIGEST starting at DIGEST-START. DIGEST must be a (SIMPLE-ARRAY (UNSIGNED-BYTE 8) (*)). An error will be signaled if there is insufficient room in DIGEST.")) ;;; Padding (defgeneric add-padding-bytes (padding text start block-offset block-size) (:documentation "Add padding to the block in TEXT beginning at position START. Padding is done according to PADDING and assumes that text prior to BLOCK-OFFSET is user-supplied. This function assumes that the portion of TEXT from START to (+ START BLOCK-SIZE) is writable.")) (defgeneric count-padding-bytes (padding text start block-size) (:documentation "Return the number of bytes of padding in the block in TEXT beginning at START. The padding algorithm used for the block is PADDING.")) ;;; Pseudo random number generators (defgeneric make-prng (name &key seed) (:documentation "Create a new NAME-type random number generator, seeding it from SEED. If SEED is a pathname or namestring, read data from the indicated file; if it is sequence of bytes, use those bytes directly; if it is :RANDOM then read from /dev/random; if it is :URANDOM then read from /dev/urandom; if it is NIL then the generator is not seeded.")) (defgeneric prng-random-data (num-bytes prng) (:documentation "Generate NUM-BYTES bytes using PRNG")) (defgeneric prng-reseed (seed prng) (:documentation "Reseed PRNG with SEED; SEED must be (PRNG-SEED-LENGTH PRNG) bytes long.") (:method (seed prng) (declare (ignorable seed prng)))) (defgeneric prng-seed-length (prng) (:documentation "Length of seed required by PRNG-RESEED.") (:method (prng) (declare (ignorable prng)) 0)) ;;; Public key cryptography (defgeneric make-public-key (kind &key &allow-other-keys) (:documentation "Return a public key of KIND, initialized according to the specified keyword arguments.")) (defgeneric destructure-public-key (public-key) (:documentation "Return a plist containing the elements of a PUBLIC-KEY.")) (defgeneric make-private-key (kind &key &allow-other-keys) (:documentation "Return a private key of KIND, initialized according to the specified keyword arguments.")) (defgeneric destructure-private-key (private-key) (:documentation "Return a plist containing the elements of a PRIVATE-KEY.")) (defgeneric generate-key-pair (kind &key num-bits &allow-other-keys) (:documentation "Generate a new key pair. The first returned value is the secret key, the second value is the public key. If KIND is :RSA or :DSA, NUM-BITS must be specified. If /kind/ is :ELGAMAL, NUM-BITS must be specified unless COMPATIBLE-WITH-KEY is specified.")) (defgeneric make-signature (kind &key &allow-other-keys) (:documentation "Build the octet vector representing a signature from its elements.")) (defgeneric destructure-signature (kind signature) (:documentation "Return a plist containing the elements of a SIGNATURE.")) (defgeneric generate-signature-nonce (key message &optional parameters) (:documentation "Generate a one-time use number for a signature (the k parameter in DSA or ECDSA signatures).")) (defgeneric sign-message (key message &key start end &allow-other-keys) (:documentation "Produce a key-specific signature of MESSAGE; MESSAGE is a (VECTOR (UNSIGNED-BYTE 8)). START and END bound the extent of the message.")) (defgeneric verify-signature (key message signature &key start end &allow-other-keys) (:documentation "Verify that SIGNATURE is the signature of MESSAGE using KEY. START and END bound the extent of the message.")) (defgeneric make-message (kind &key &allow-other-keys) (:documentation "Build the octet vector representing a message from its elements.")) (defgeneric destructure-message (kind message) (:documentation "Return a plist containing the elements of an encrypted MESSAGE.")) (defgeneric encrypt-message (cipher-or-key message &key start end &allow-other-keys) (:documentation "Encrypt a MESSAGE with a CIPHER or a public KEY. START and END bound the extent of the message. Returns a fresh octet vector.")) (defgeneric decrypt-message (cipher-or-key message &key start end n-bits &allow-other-keys) (:documentation "Decrypt a MESSAGE with a CIPHER or a private KEY. START and END bound the extent of the message. Returns a fresh octet vector. N-BITS can be used to indicate the expected size of the decrypted message.")) (defgeneric diffie-hellman (private-key public-key) (:documentation "Compute a shared secret using Alice's PRIVATE-KEY and Bob's PUBLIC-KEY")) ironclad-0.57/src/kdf/000077500000000000000000000000001420372057600146015ustar00rootroot00000000000000ironclad-0.57/src/kdf/argon2.lisp000066400000000000000000000365351420372057600166760ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; argon2.lisp -- implementation of the Argon2 key derivation function ;;; Based on the Argon2i implementation present in the Monocypher ;;; crypto library (http://loup-vaillant.fr/projects/monocypher/) (in-package :crypto) (defclass argon2 () ((block :accessor argon2-block :type (simple-array (unsigned-byte 64) (128))) (pass-number :accessor argon2-pass-number) (slice-number :accessor argon2-slice-number) (nb-blocks :accessor argon2-nb-blocks) (block-count :accessor argon2-block-count) (nb-iterations :accessor argon2-nb-iterations) (counter :accessor argon2-counter) (offset :accessor argon2-offset) (additional-key :accessor argon2-additional-key :type (simple-array (unsigned-byte 8) (*))) (additional-data :accessor argon2-additional-data :type (simple-array (unsigned-byte 8) (*))) (work-area :accessor argon2-work-area :type (simple-array (unsigned-byte 64) (*))) (digester :accessor argon2-digester))) (defclass argon2i (argon2) ()) (defclass argon2d (argon2) ()) (defconstant +argon2-block-size+ 128) (deftype argon2-block () '(simple-array (unsigned-byte 64) (128))) (defun argon2-load-block (b bytes) (declare (type (simple-array (unsigned-byte 64) (*)) b) (type (simple-array (unsigned-byte 8) (*)) bytes)) (dotimes (i +argon2-block-size+) (setf (aref b i) (ub64ref/le bytes (* 8 i)))) (values)) (defun argon2-store-block (bytes b &key (start2 0)) (declare (type (simple-array (unsigned-byte 64) (*)) b) (type (simple-array (unsigned-byte 8) (*)) bytes)) (dotimes (i +argon2-block-size+) (setf (ub64ref/le bytes (* 8 i)) (aref b (+ (* +argon2-block-size+ start2) i)))) (values)) (defun argon2-copy-block (b1 b2 &key (start1 0) (start2 0)) (declare (type (simple-array (unsigned-byte 64) (*)) b1 b2)) (dotimes (i +argon2-block-size+) (setf (aref b1 (+ (* +argon2-block-size+ start1) i)) (aref b2 (+ (* +argon2-block-size+ start2) i)))) (values)) (defun argon2-xor-block (b1 b2 &key (start1 0) (start2 0)) (declare (type (simple-array (unsigned-byte 64) (*)) b1 b2)) (dotimes (i +argon2-block-size+) (setf (aref b1 (+ (* +argon2-block-size+ start1) i)) (logxor (aref b1 (+ (* +argon2-block-size+ start1) i)) (aref b2 (+ (* +argon2-block-size+ start2) i))))) (values)) (defun argon2-update-digester-32 (digester input) (update-mac digester (integer-to-octets input :n-bits 32 :big-endian nil)) (values)) (defun argon2-extended-hash (state digest digest-size input input-size) (declare (type (simple-array (unsigned-byte 8) (*)) digest input)) (let ((no-key (make-array 0 :element-type '(unsigned-byte 8))) (digester (argon2-digester state))) (reinitialize-instance digester :key no-key :digest-length (min digest-size 64)) (argon2-update-digester-32 digester digest-size) (update-mac digester input :end input-size) (produce-mac digester :digest digest) (when (> digest-size 64) (let ((r (- (ceiling digest-size 32) 2)) (i 1) (in 0) (out 32)) (loop while (< i r) do (reinitialize-instance digester :key no-key :digest-length 64) (update-mac digester digest :start in :end (+ in 64)) (produce-mac digester :digest digest :digest-start out) (incf i 1) (incf in 32) (incf out 32)) (reinitialize-instance digester :key no-key :digest-length (- digest-size (* 32 r))) (update-mac digester digest :start in :end (+ in 64)) (produce-mac digester :digest digest :digest-start out)))) (values)) (defmacro argon2-g (a b c d) `(setf ,a (mod64+ ,a (mod64+ ,b (mod64* 2 (mod64* (logand ,a #xffffffff) (logand ,b #xffffffff))))) ,d (ror64 (logxor ,d ,a) 32) ,c (mod64+ ,c (mod64+ ,d (mod64* 2 (mod64* (logand ,c #xffffffff) (logand ,d #xffffffff))))) ,b (ror64 (logxor ,b ,c) 24) ,a (mod64+ ,a (mod64+ ,b (mod64* 2 (mod64* (logand ,a #xffffffff) (logand ,b #xffffffff))))) ,d (ror64 (logxor ,d ,a) 16) ,c (mod64+ ,c (mod64+ ,d (mod64* 2 (mod64* (logand ,c #xffffffff) (logand ,d #xffffffff))))) ,b (ror64 (logxor ,b ,c) 63))) (defmacro argon2-round (v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15) `(progn (argon2-g ,v0 ,v4 ,v8 ,v12) (argon2-g ,v1 ,v5 ,v9 ,v13) (argon2-g ,v2 ,v6 ,v10 ,v14) (argon2-g ,v3 ,v7 ,v11 ,v15) (argon2-g ,v0 ,v5 ,v10 ,v15) (argon2-g ,v1 ,v6 ,v11 ,v12) (argon2-g ,v2 ,v7 ,v8 ,v13) (argon2-g ,v3 ,v4 ,v9 ,v14))) (defun argon2-g-rounds (work-block) (declare (type argon2-block work-block)) (loop for i from 0 below 128 by 16 do (argon2-round (aref work-block i) (aref work-block (+ i 1)) (aref work-block (+ i 2)) (aref work-block (+ i 3)) (aref work-block (+ i 4)) (aref work-block (+ i 5)) (aref work-block (+ i 6)) (aref work-block (+ i 7)) (aref work-block (+ i 8)) (aref work-block (+ i 9)) (aref work-block (+ i 10)) (aref work-block (+ i 11)) (aref work-block (+ i 12)) (aref work-block (+ i 13)) (aref work-block (+ i 14)) (aref work-block (+ i 15)))) (loop for i from 0 below 16 by 2 do (argon2-round (aref work-block i) (aref work-block (+ i 1)) (aref work-block (+ i 16)) (aref work-block (+ i 17)) (aref work-block (+ i 32)) (aref work-block (+ i 33)) (aref work-block (+ i 48)) (aref work-block (+ i 49)) (aref work-block (+ i 64)) (aref work-block (+ i 65)) (aref work-block (+ i 80)) (aref work-block (+ i 81)) (aref work-block (+ i 96)) (aref work-block (+ i 97)) (aref work-block (+ i 112)) (aref work-block (+ i 113)))) (values)) (defun argon2-g-copy (work-area r x y) (declare (type (simple-array (unsigned-byte 64) (*)) work-area)) (let ((tmp (make-array +argon2-block-size+ :element-type '(unsigned-byte 64)))) (declare (type argon2-block tmp) (dynamic-extent tmp)) (argon2-copy-block tmp work-area :start2 x) (argon2-xor-block tmp work-area :start2 y) (argon2-copy-block work-area tmp :start1 r) (argon2-g-rounds tmp) (argon2-xor-block work-area tmp :start1 r)) (values)) (defun argon2-g-xor (work-area r x y) (declare (type (simple-array (unsigned-byte 64) (*)) work-area)) (let ((tmp (make-array +argon2-block-size+ :element-type '(unsigned-byte 64)))) (declare (type argon2-block tmp) (dynamic-extent tmp)) (argon2-copy-block tmp work-area :start2 x) (argon2-xor-block tmp work-area :start2 y) (argon2-xor-block work-area tmp :start1 r) (argon2-g-rounds tmp) (argon2-xor-block work-area tmp :start1 r)) (values)) (defun argon2-unary-g (work-block) (declare (type argon2-block work-block)) (let ((tmp (make-array +argon2-block-size+ :element-type '(unsigned-byte 64)))) (declare (type argon2-block tmp) (dynamic-extent tmp)) (argon2-copy-block tmp work-block) (argon2-g-rounds work-block) (argon2-xor-block work-block tmp)) (values)) (defun argon2i-gidx-refresh (state) (let ((b (argon2-block state))) (setf (aref b 0) (argon2-pass-number state) (aref b 1) 0 (aref b 2) (argon2-slice-number state) (aref b 3) (argon2-nb-blocks state) (aref b 4) (argon2-nb-iterations state) (aref b 5) 1 (aref b 6) (argon2-counter state)) (fill b 0 :start 7) (argon2-unary-g b) (argon2-unary-g b) (values))) (defun argon2i-gidx-init (state pass-number slice-number nb-blocks nb-iterations) (setf (argon2-pass-number state) pass-number (argon2-slice-number state) slice-number (argon2-nb-blocks state) nb-blocks (argon2-nb-iterations state) nb-iterations (argon2-counter state) 0) (if (and (zerop pass-number) (zerop slice-number)) (progn (setf (argon2-offset state) 2) (incf (argon2-counter state)) (argon2i-gidx-refresh state)) (setf (argon2-offset state) 0)) (values)) (defun argon2i-gidx-next (state) (when (zerop (mod (argon2-offset state) +argon2-block-size+)) (incf (argon2-counter state)) (argon2i-gidx-refresh state)) (let* ((offset (argon2-offset state)) (index (mod offset +argon2-block-size+)) (first-pass (zerop (argon2-pass-number state))) (nb-blocks (argon2-nb-blocks state)) (slice-size (floor nb-blocks 4)) (slice-number (argon2-slice-number state)) (nb-segments (if first-pass slice-number 3)) (area-size (- (+ (* nb-segments slice-size) offset) 1)) (next-slice (* (mod (+ slice-number 1) 4) slice-size)) (start-pos (if first-pass 0 next-slice)) (j1 (logand (aref (argon2-block state) index) #xffffffff)) (x (ash (* j1 j1) -32)) (y (ash (* area-size x) -32)) (z (- area-size 1 y))) (incf (argon2-offset state)) (mod (+ start-pos z) nb-blocks))) (defun argon2d-gidx-init (state pass-number slice-number nb-blocks nb-iterations) (setf (argon2-pass-number state) pass-number (argon2-slice-number state) slice-number (argon2-nb-blocks state) nb-blocks (argon2-nb-iterations state) nb-iterations (argon2-counter state) 0) (if (and (zerop pass-number) (zerop slice-number)) (setf (argon2-offset state) 2) (setf (argon2-offset state) 0)) (values)) (defun argon2d-gidx-next (state previous-block) (let* ((offset (argon2-offset state)) (index (* +argon2-block-size+ previous-block)) (first-pass (zerop (argon2-pass-number state))) (nb-blocks (argon2-nb-blocks state)) (slice-size (floor nb-blocks 4)) (slice-number (argon2-slice-number state)) (nb-segments (if first-pass slice-number 3)) (area-size (- (+ (* nb-segments slice-size) offset) 1)) (next-slice (* (mod (+ slice-number 1) 4) slice-size)) (start-pos (if first-pass 0 next-slice)) (j1 (logand (aref (argon2-work-area state) index) #xffffffff)) (x (ash (* j1 j1) -32)) (y (ash (* area-size x) -32)) (z (- area-size 1 y))) (incf (argon2-offset state)) (mod (+ start-pos z) nb-blocks))) (defmethod shared-initialize ((kdf argon2) slot-names &rest initargs &key block-count additional-key additional-data &allow-other-keys) (declare (ignore initargs)) (let ((no-data (make-array 0 :element-type '(unsigned-byte 8)))) (setf (argon2-block kdf) (make-array +argon2-block-size+ :element-type '(unsigned-byte 64)) (argon2-block-count kdf) (max 8 (or block-count 4096)) (argon2-additional-key kdf) (or additional-key no-data) (argon2-additional-data kdf) (or additional-data no-data) (argon2-work-area kdf) (make-array (* +argon2-block-size+ block-count) :element-type '(unsigned-byte 64)) (argon2-digester kdf) (make-mac :blake2-mac no-data))) kdf) (defmethod derive-key ((kdf argon2) passphrase salt iteration-count key-length) (declare (type (simple-array (unsigned-byte 8) (*)) passphrase salt)) (when (or (< key-length 4) (< iteration-count 1) (< (length salt) 8)) (error 'unsupported-argon2-parameters)) (setf (argon2-nb-iterations kdf) iteration-count) (let ((data-independent-p (typep kdf 'argon2i)) (work-area (argon2-work-area kdf)) (block-count (argon2-block-count kdf)) (additional-key (argon2-additional-key kdf)) (additional-data (argon2-additional-data kdf)) (digester (argon2-digester kdf)) (no-key (make-array 0 :element-type '(unsigned-byte 8))) (tmp-area (make-array 1024 :element-type '(unsigned-byte 8)))) (declare (type (simple-array (unsigned-byte 64) (*)) work-area) (type (simple-array (unsigned-byte 8) (1024)) tmp-area) (dynamic-extent tmp-area)) (reinitialize-instance digester :key no-key :digest-length 64) (argon2-update-digester-32 digester 1) (argon2-update-digester-32 digester key-length) (argon2-update-digester-32 digester block-count) (argon2-update-digester-32 digester iteration-count) (argon2-update-digester-32 digester #x13) (argon2-update-digester-32 digester (if data-independent-p 1 0)) (argon2-update-digester-32 digester (length passphrase)) (update-mac digester passphrase) (argon2-update-digester-32 digester (length salt)) (update-mac digester salt) (argon2-update-digester-32 digester (length additional-key)) (update-mac digester additional-key) (argon2-update-digester-32 digester (length additional-data)) (update-mac digester additional-data) (let ((initial-hash (make-array 72 :element-type '(unsigned-byte 8))) (tmp-block (make-array +argon2-block-size+ :element-type '(unsigned-byte 64)))) (declare (type (simple-array (unsigned-byte 8) (72)) initial-hash) (type argon2-block tmp-block) (dynamic-extent initial-hash tmp-block)) (produce-mac digester :digest initial-hash) (setf (ub32ref/le initial-hash 64) 0 (ub32ref/le initial-hash 68) 0) (argon2-extended-hash kdf tmp-area 1024 initial-hash 72) (argon2-load-block tmp-block tmp-area) (argon2-copy-block work-area tmp-block) (setf (ub32ref/le initial-hash 64) 1) (argon2-extended-hash kdf tmp-area 1024 initial-hash 72) (argon2-load-block tmp-block tmp-area) (argon2-copy-block work-area tmp-block :start1 1)) (let* ((nb-blocks (- block-count (mod block-count 4))) (segment-size (floor nb-blocks 4))) (dotimes (pass-number iteration-count) (let ((first-pass (zerop pass-number))) (dotimes (segment 4) (if data-independent-p (argon2i-gidx-init kdf pass-number segment nb-blocks iteration-count) (argon2d-gidx-init kdf pass-number segment nb-blocks iteration-count)) (let* ((start-offset (if (and first-pass (zerop segment)) 2 0)) (segment-start (+ (* segment segment-size) start-offset)) (segment-end (* (+ segment 1) segment-size))) (loop for current-block from segment-start below segment-end do (let* ((previous-block (if (zerop current-block) (- nb-blocks 1) (- current-block 1))) (reference-block (if data-independent-p (argon2i-gidx-next kdf) (argon2d-gidx-next kdf previous-block)))) (if first-pass (argon2-g-copy work-area current-block previous-block reference-block) (argon2-g-xor work-area current-block previous-block reference-block)))))))) (let ((hash (make-array key-length :element-type '(unsigned-byte 8)))) (argon2-store-block tmp-area work-area :start2 (- nb-blocks 1)) (argon2-extended-hash kdf hash key-length tmp-area 1024) hash)))) ironclad-0.57/src/kdf/bcrypt.lisp000066400000000000000000000155641420372057600170100ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; bcrypt.lisp -- implementation of the bcrypt password hashing function (in-package :crypto) (defclass bcrypt () ()) (defconst +bcrypt-initial-hash+ (ascii-string-to-byte-array "OrpheanBeholderScryDoubt")) (defun bcrypt-expand-key (passphrase salt p-array s-boxes) (declare (type (simple-array (unsigned-byte 8) (*)) passphrase salt) (type blowfish-p-array p-array) (type blowfish-s-boxes s-boxes)) (let ((salt-length (length salt)) (salt-index 0) (data (make-array 8 :element-type '(unsigned-byte 8) :initial-element 0))) (declare (type fixnum salt-length salt-index) (type (simple-array (unsigned-byte 8) (8)) data)) (mix-p-array passphrase p-array) (dotimes (i 9) (xor-block 8 data 0 salt salt-index data 0) (setf salt-index (mod (+ salt-index 8) salt-length)) (blowfish-encrypt-block* p-array s-boxes data 0 data 0) (let ((index (* 2 i))) (setf (aref p-array index) (ub32ref/be data 0) (aref p-array (1+ index)) (ub32ref/be data 4)))) (dotimes (i 4) (dotimes (j 128) (xor-block 8 data 0 salt salt-index data 0) (setf salt-index (mod (+ salt-index 8) salt-length)) (blowfish-encrypt-block* p-array s-boxes data 0 data 0) (let ((index (+ (* 256 i) (* 2 j)))) (setf (aref s-boxes index) (ub32ref/be data 0) (aref s-boxes (1+ index)) (ub32ref/be data 4))))))) (defun bcrypt-eksblowfish (passphrase salt rounds) (declare (type (simple-array (unsigned-byte 8) (*)) passphrase salt)) (let ((passphrase (concatenate '(simple-array (unsigned-byte 8) (*)) passphrase (vector 0))) (p-array (copy-seq +p-array+)) (s-boxes (concatenate '(simple-array (unsigned-byte 32) (1024)) +s-box-0+ +s-box-1+ +s-box-2+ +s-box-3+))) (declare (type (simple-array (unsigned-byte 8) (*)) passphrase) (type blowfish-p-array p-array) (type blowfish-s-boxes s-boxes)) (bcrypt-expand-key passphrase salt p-array s-boxes) (dotimes (i rounds) (initialize-blowfish-vectors passphrase p-array s-boxes) (initialize-blowfish-vectors salt p-array s-boxes)) (values p-array s-boxes))) (defmethod derive-key ((kdf bcrypt) passphrase salt iteration-count key-length) (declare (type (simple-array (unsigned-byte 8) (*)) passphrase salt)) (unless (<= (length passphrase) 72) (error 'ironclad-error :format-control "PASSPHRASE must be at most 72 bytes long.")) (unless (= (length salt) 16) (error 'ironclad-error :format-control "SALT must be 16 bytes long.")) (unless (and (zerop (logand iteration-count (1- iteration-count))) (<= (expt 2 4) iteration-count (expt 2 31))) (error 'ironclad-error :format-control "ITERATION-COUNT must be a power of 2 between 2^4 and 2^31.")) (unless (= key-length 24) (error 'ironclad-error :format-control "KEY-LENGTH must be 24.")) (multiple-value-bind (p-array s-boxes) (bcrypt-eksblowfish passphrase salt iteration-count) (declare (type blowfish-p-array p-array) (type blowfish-s-boxes s-boxes)) (let ((hash (copy-seq +bcrypt-initial-hash+))) (declare (type (simple-array (unsigned-byte 8) (24)) hash)) (dotimes (i 64 hash) (blowfish-encrypt-block* p-array s-boxes hash 0 hash 0) (blowfish-encrypt-block* p-array s-boxes hash 8 hash 8) (blowfish-encrypt-block* p-array s-boxes hash 16 hash 16))))) (defclass bcrypt-pbkdf () ()) (defconst +bcrypt-pbkdf-initial-hash+ (ascii-string-to-byte-array "OxychromaticBlowfishSwatDynamite")) (defun bcrypt-hash (passphrase salt hash) (declare (type (simple-array (unsigned-byte 8) (64)) passphrase salt) (type (simple-array (unsigned-byte 8) (32)) hash)) (let ((p-array (copy-seq +p-array+)) (s-boxes (concatenate '(simple-array (unsigned-byte 32) (1024)) +s-box-0+ +s-box-1+ +s-box-2+ +s-box-3+))) (declare (type blowfish-p-array p-array) (type blowfish-s-boxes s-boxes)) (bcrypt-expand-key passphrase salt p-array s-boxes) (dotimes (i 64) (initialize-blowfish-vectors salt p-array s-boxes) (initialize-blowfish-vectors passphrase p-array s-boxes)) (replace hash +bcrypt-pbkdf-initial-hash+) (dotimes (i 64) (blowfish-encrypt-block* p-array s-boxes hash 0 hash 0) (blowfish-encrypt-block* p-array s-boxes hash 8 hash 8) (blowfish-encrypt-block* p-array s-boxes hash 16 hash 16) (blowfish-encrypt-block* p-array s-boxes hash 24 hash 24)) (dotimes (i 8) (let ((index (* 4 i))) (declare (type (mod 32) index)) (setf (ub32ref/le hash index) (ub32ref/be hash index)))) hash)) (defmethod derive-key ((kdf bcrypt-pbkdf) passphrase salt iteration-count key-length) (declare (type (simple-array (unsigned-byte 8) (*)) passphrase salt) (type fixnum key-length)) (unless (plusp iteration-count) (error 'ironclad-error :format-control "ITERATION-COUNT must be a least 1.")) (unless (<= 1 key-length 1024) (error 'ironclad-error :format-control "KEY-LENGTH must be between 1 and 1024.")) (let* ((key (make-array key-length :element-type '(unsigned-byte 8))) (salt-length (length salt)) (salt+count (concatenate '(simple-array (unsigned-byte 8) (*)) salt (vector 0 0 0 0))) (sha2pass (make-array 64 :element-type '(unsigned-byte 8))) (sha2salt (make-array 64 :element-type '(unsigned-byte 8))) (data (make-array 32 :element-type '(unsigned-byte 8))) (tmp (make-array 32 :element-type '(unsigned-byte 8))) (stride (ceiling key-length 32)) (amt (ceiling key-length stride))) (declare (type (simple-array (unsigned-byte 8) (*)) key salt+count) (type (simple-array (unsigned-byte 8) (64)) sha2pass sha2salt) (type (simple-array (unsigned-byte 8) (32)) data tmp) (type fixnum stride amt)) (digest-sequence :sha512 passphrase :digest sha2pass) (do ((count 1 (1+ count)) (kl key-length)) ((<= kl 0) key) (declare (type fixnum count kl)) (setf (ub32ref/be salt+count salt-length) count) (digest-sequence :sha512 salt+count :digest sha2salt) (bcrypt-hash sha2pass sha2salt tmp) (replace data tmp) (dotimes (i (1- iteration-count)) (digest-sequence :sha512 tmp :digest sha2salt) (bcrypt-hash sha2pass sha2salt tmp) (xor-block 32 data 0 tmp 0 data 0)) (setf amt (min amt kl)) (dotimes (i amt (decf kl amt)) (let ((dest (+ (* i stride) (1- count)))) (declare (type fixnum dest)) (unless (< dest key-length) (decf kl i) (return)) (setf (aref key dest) (aref data i))))))) ironclad-0.57/src/kdf/hmac.lisp000066400000000000000000000032441420372057600164050ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;; implementation of RFC 5869 (in-package :crypto) (defclass hmac-kdf () ((digest-name :initarg :digest :reader kdf-digest) (info :initarg :info :accessor hmac-kdf-info :type (simple-array (unsigned-byte 8) (*)) :documentation "Optional context and application specific information"))) (defmethod shared-initialize ((kdf hmac-kdf) slot-names &rest initargs &key digest info &allow-other-keys) (declare (ignore slot-names initargs)) (setf (slot-value kdf 'digest-name) digest (hmac-kdf-info kdf) (or info (make-array 0 :element-type '(unsigned-byte 8)))) kdf) (defun hkdf-extract (digest salt ikm) (let ((hmac (make-hmac salt digest))) (update-hmac hmac ikm) (produce-mac hmac))) (defun hkdf-expand (digest prk info key-length) (let ((digest-length (digest-length digest))) (assert (<= key-length (* 255 digest-length))) (subseq (apply #'concatenate '(vector (unsigned-byte 8)) (loop with tmp = (make-array 0 :element-type '(unsigned-byte 8)) for i below (ceiling key-length digest-length) collect (setf tmp (hkdf-extract digest prk (concatenate '(vector (unsigned-byte 8)) tmp info (vector (1+ i))))))) 0 key-length))) (defun hmac-derive-key (digest passphrase salt info key-length) (let ((prk (hkdf-extract digest salt passphrase))) (hkdf-expand digest prk info key-length))) (defmethod derive-key ((kdf hmac-kdf) passphrase salt iteration-count key-length) (hmac-derive-key (kdf-digest kdf) passphrase salt (hmac-kdf-info kdf) key-length)) ironclad-0.57/src/kdf/kdf.lisp000066400000000000000000000042071420372057600162410ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto) (defun list-all-kdfs () (copy-list '(:argon2i :argon2d :bcrypt :bcrypt-pbkdf :hmac-kdf :pbkdf1 :pbkdf2 :scrypt-kdf))) (defun make-kdf (kind &key digest (n 4096) (r 8) (p 2) (block-count 10000) additional-key additional-data) ;; PBKDF1, at least, will do stricter checking; this is good enough for now. "digest is used for pbkdf1 and pbkdf2. N, p, and r are cost factors for scrypt. block-count, additional-key and additional-data are parameters for argon2" (case (massage-symbol kind) (pbkdf1 (let ((digest-name (massage-symbol digest))) (unless (digestp digest-name) (error 'unsupported-digest :name digest)) (make-instance 'pbkdf1 :digest digest-name))) (pbkdf2 (let ((digest-name (massage-symbol digest))) (unless (digestp digest-name) (error 'unsupported-digest :name digest)) (make-instance 'pbkdf2 :digest digest-name))) (hmac-kdf (let ((digest-name (massage-symbol digest))) (unless (digestp digest-name) (error 'unsupported-digest :name digest)) (make-instance 'hmac-kdf :digest digest-name :info additional-data))) (scrypt-kdf (when (or (<= n 1) (not (zerop (logand n (1- n)))) (>= (* r p) (expt 2 30))) (error 'unsupported-scrypt-cost-factors :n n :r r :p p)) (make-instance 'scrypt-kdf :n n :r r :p p)) (argon2i (when (< block-count 8) (error 'unsupported-argon2-parameters)) (make-instance 'argon2i :block-count block-count :additional-key additional-key :additional-data additional-data)) (argon2d (when (< block-count 8) (error 'unsupported-argon2-parameters)) (make-instance 'argon2d :block-count block-count :additional-key additional-key :additional-data additional-data)) (bcrypt (make-instance 'bcrypt)) (bcrypt-pbkdf (make-instance 'bcrypt-pbkdf)) (t (error 'unsupported-kdf :kdf kind)))) ironclad-0.57/src/kdf/password-hash.lisp000066400000000000000000000061641420372057600202640ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto) (defun make-random-salt (&optional (size 16)) "Generate a byte vector of SIZE (default 16) random bytes, suitable for use as a password salt." (random-data size)) (defun pbkdf2-hash-password (password &key (salt (make-random-salt)) (digest 'sha256) (iterations 1000)) "Given a PASSWORD as a byte vector, a SALT as a byte vector (MAKE-RANDOM-SALT is called to generate a random salt if none is provided), a digest function (SHA256 by default), and a number of iterations (1000), returns the PBKDF2-derived hash of the password (byte vector) as the first value, and the SALT (byte vector) as the second value." (values (pbkdf2-derive-key digest password salt iterations (digest-length digest)) salt)) (defun pbkdf2-hash-password-to-combined-string (password &key (salt (make-random-salt)) (digest 'sha256) (iterations 1000)) "Given a PASSWORD byte vector, a SALT as a byte vector (MAKE-RANDOM-SALT is called to generate a random salt if none is provided), a digest function (SHA256 by default), and a number of iterations (1000), returns the salt and PBKDF2-derived hash of the password encoded in a single ASCII string, suitable for use with PBKDF2-CHECK-PASSWORD." (with-standard-io-syntax (format nil "PBKDF2$~a:~a$~a$~a" digest iterations (byte-array-to-hex-string salt) (byte-array-to-hex-string (pbkdf2-hash-password password :iterations iterations :salt salt :digest digest))))) (defun pbkdf2-check-password (password combined-salt-and-digest) "Given a PASSWORD byte vector and a combined salt and digest string produced by PBKDF2-HASH-PASSWORD-TO-COMBINED-STRING, checks whether the password is valid." ;; can we have a dependency on regular expressions, please? (let* ((positions (loop with start = 0 repeat 3 collect (setf start (position #\$ combined-salt-and-digest :start (1+ start))))) (digest-separator-position (position #\: combined-salt-and-digest :start (first positions)))) (constant-time-equal (pbkdf2-hash-password password :digest (find-symbol (subseq combined-salt-and-digest (1+ (first positions)) digest-separator-position) '#:ironclad) :iterations (parse-integer combined-salt-and-digest :start (1+ digest-separator-position) :end (second positions)) :salt (hex-string-to-byte-array combined-salt-and-digest :start (1+ (second positions)) :end (third positions))) (hex-string-to-byte-array combined-salt-and-digest :start (1+ (third positions)))))) ironclad-0.57/src/kdf/pkcs5.lisp000066400000000000000000000070611420372057600165230ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto) ;;; PBKDF1 from RFC 2898, section 5.1 (defclass pbkdf1 () ((digest :reader kdf-digest))) (defmethod shared-initialize :after ((kdf pbkdf1) slot-names &rest initargs &key digest &allow-other-keys) (declare (ignore slot-names initargs)) (let ((digest-name (massage-symbol digest))) (cond ;; Permit DIGEST to be NULL to indicate reinitializing the whole ;; instance. ((null digest) (reinitialize-instance (kdf-digest kdf))) ((not (digestp digest-name)) (error 'unsupported-digest :name digest-name)) ;; Don't cons unnecessarily. (Although this depends how expensive ;; TYPEP is with a non-constant type...) ((and (slot-boundp kdf 'digest) (typep (digest kdf) digest-name)) (reinitialize-instance (kdf-digest kdf))) ((member digest-name '(md2 md5 sha1)) (setf (slot-value kdf 'digest) (funcall (the function (get digest-name '%make-digest))))) (t (error 'ironclad-error :format-control "Digest ~A not supported for PBKDF1" :format-arguments (list digest)))) kdf)) (defmethod derive-key ((kdf pbkdf1) passphrase salt iteration-count key-length) (check-type iteration-count (integer 1 *)) (check-type key-length (integer 1 *)) (loop with digest = (kdf-digest kdf) with digest-length = (digest-length digest) with key = (make-array 20 :element-type '(unsigned-byte 8)) initially (update-digest digest passphrase) (update-digest digest salt) (produce-digest digest :digest key) for i from 1 below iteration-count do (reinitialize-instance digest) (update-digest digest key :end digest-length) (produce-digest digest :digest key) finally (return (subseq key 0 (min key-length (length key)))))) ;;; PBKDF2, from RFC 2898, section 5.2 (defclass pbkdf2 () ((digest-name :initarg :digest :reader kdf-digest))) (defun pbkdf2-derive-key (digest passphrase salt iteration-count key-length) (check-type iteration-count (integer 1 *)) (check-type key-length (integer 1 *)) (loop with count = 1 with hmac = (make-hmac passphrase digest) with hmac-length = (digest-length digest) with key = (make-array key-length :element-type '(unsigned-byte 8) :initial-element 0) with key-position = 0 with count-buffer = (make-array 4 :element-type '(unsigned-byte 8)) with hmac-out = (make-array hmac-length :element-type '(unsigned-byte 8)) while (plusp key-length) do (let ((size (min hmac-length key-length))) (reinitialize-instance hmac :key passphrase) (update-hmac hmac salt) (setf (ub32ref/be count-buffer 0) count) (update-hmac hmac count-buffer) (hmac-digest hmac :buffer hmac-out) (xor-block size hmac-out 0 key key-position key key-position) (loop for i from 1 below iteration-count do (reinitialize-instance hmac :key passphrase) (update-hmac hmac hmac-out) (hmac-digest hmac :buffer hmac-out) (xor-block size hmac-out 0 key key-position key key-position) finally (decf key-length size) (incf key-position size) (incf count))) finally (return key))) (defmethod derive-key ((kdf pbkdf2) passphrase salt iteration-count key-length) (pbkdf2-derive-key (kdf-digest kdf) passphrase salt iteration-count key-length)) ironclad-0.57/src/kdf/scrypt.lisp000066400000000000000000000060321420372057600170170ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto) ;;; scrypt from Colin Percival's ;;; "Stronger Key Derivation via Sequential Memory-Hard Functions" ;;; presented at BSDCan'09, May 2009. ;;; http://www.tarsnap.com/scrypt.html (defclass scrypt-kdf () ((n :initarg :n :reader scrypt-kdf-N) (r :initarg :r :reader scrypt-kdf-r) (p :initarg :p :reader scrypt-kdf-p))) (defun scrypt-vector-salsa (b) (declare (type (simple-octet-vector 64) b)) (let ((x (make-array 16 :element-type '(unsigned-byte 32)))) (declare (type (simple-array (unsigned-byte 32) (16)) x)) (declare (dynamic-extent x)) (fill-block-ub8-le x b 0) (salsa20/8-core b x))) (defun block-mix (b xy xy-start r) (declare (type (simple-array (unsigned-byte 8) (*)) b xy)) ;; The derivation of the bound here is that (* I 64) in the first loop below ;; must be a legitimate array index. That loop runs to (* 2 R), hence the ;; truncation by 128. The subtraction of 64 comes from loops further down. (declare (type (integer 0 (#.(truncate (- array-dimension-limit 64) 128))) r)) (let ((xs (make-array 64 :element-type '(unsigned-byte 8)))) (declare (type (simple-array (unsigned-byte 8) (64)) xs)) (declare (dynamic-extent xs)) (replace xs b :start2 (* 64 (1- (* 2 r))) :end1 64) (dotimes (i (* 2 r)) (xor-block 64 xs 0 b (* i 64) xs 0) (scrypt-vector-salsa xs) (replace xy xs :start1 (+ xy-start (* i 64)) :end2 64)) (dotimes (i r) (replace b xy :start1 (* i 64) :end1 (+ 64 (* i 64)) :start2 (+ xy-start (* 64 2 i)))) (dotimes (i r) (replace b xy :start1 (* 64 (+ i r)) :end1 (+ (* 64 (+ i r)) 64) :start2 (+ xy-start (* 64 (1+ (* i 2)))))))) (defun smix (b b-start r N v xy) (declare (type (simple-array (unsigned-byte 8) (*)) b v xy)) (declare (type (integer 0 (#.(truncate array-dimension-limit 128))) r)) (let ((x xy) (xy-start (* 128 r)) (smix-length (* 128 r))) (replace x b :end1 smix-length :start2 b-start) (dotimes (i N) (replace v x :start1 (* i smix-length) :end2 smix-length) (block-mix x xy xy-start r)) (dotimes (i N) (let ((j (ldb (byte 32 0) (logand (ub64ref/le x (* (1- (* 2 r)) 64)) (1- N))))) (xor-block smix-length x 0 v (* j smix-length) x 0) (block-mix x xy xy-start r))) (replace b x :start1 b-start :end1 (+ b-start smix-length)))) (defmethod derive-key ((kdf scrypt-kdf) passphrase salt iteration-count key-length) (declare (ignore iteration-count)) (let* ((pb-kdf (make-kdf 'pbkdf2 :digest 'sha256)) (xy (make-array (* 256 (scrypt-kdf-r kdf)) :element-type '(unsigned-byte 8))) (v (make-array (* 128 (scrypt-kdf-r kdf) (scrypt-kdf-N kdf)) :element-type '(unsigned-byte 8))) (b (derive-key pb-kdf passphrase salt 1 (* (scrypt-kdf-p kdf) 128 (scrypt-kdf-r kdf))))) (dotimes (i (scrypt-kdf-p kdf)) (smix b (* i 128 (scrypt-kdf-r kdf)) (scrypt-kdf-r kdf) (scrypt-kdf-N kdf) v xy)) (reinitialize-instance pb-kdf :digest 'sha256) (derive-key pb-kdf passphrase b 1 key-length))) ironclad-0.57/src/macro-utils.lisp000066400000000000000000000037411420372057600171720ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; macro-utils.lisp -- things to make compiler macros easier (in-package :crypto) (defun quotationp (thing) (and (consp thing) (consp (rest thing)) (null (cddr thing)) (eq (first thing) 'quote))) (defun unquote (thing) (if (quotationp thing) (second thing) thing)) (defun massage-symbol (symbol) (let ((package (symbol-package symbol)) (ironclad (load-time-value (find-package :ironclad)))) (cond ((eq package ironclad) symbol) ((eq package (load-time-value (find-package :keyword))) (find-symbol (symbol-name symbol) ironclad)) (t nil)))) ;;; a few functions that are useful during compilation (defun make-circular-list (&rest elements) (let ((list (copy-seq elements))) (setf (cdr (last list)) list))) ;;; SUBSEQ is defined to error on circular lists, so we define our own (defun circular-list-subseq (list start end) (let* ((length (- end start)) (subseq (make-list length))) (do ((i 0 (1+ i)) (list (nthcdr start list) (cdr list)) (xsubseq subseq (cdr xsubseq))) ((>= i length) subseq) (setf (first xsubseq) (first list))))) ;;; Partial evaluation helpers (eval-when (:compile-toplevel :load-toplevel :execute) (defun trivial-macroexpand-all (form env) "Trivial and very restricted code-walker used in partial evaluation macros. Only supports atoms and function forms, no special forms." (let ((real-form (macroexpand form env))) (cond ((atom real-form) real-form) (t (list* (car real-form) (mapcar #'(lambda (x) (trivial-macroexpand-all x env)) (cdr real-form)))))))) (defmacro dotimes-unrolled ((var limit) &body body &environment env) "Unroll the loop body at compile-time." (loop for x from 0 below (eval (trivial-macroexpand-all limit env)) collect `(symbol-macrolet ((,var ,x)) ,@body) into forms finally (return `(progn ,@forms)))) ironclad-0.57/src/macs/000077500000000000000000000000001420372057600147605ustar00rootroot00000000000000ironclad-0.57/src/macs/blake2-mac.lisp000066400000000000000000000043641420372057600175560ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; blake2-mac.lisp -- implementation of the Blake2b MAC (in-package :crypto) (defclass blake2-mac (mac) ((digest :accessor blake2-digest :initarg :digest) (digest-length :accessor digest-length :initarg :digest-length))) (defun make-blake2-mac (key &key (digest-length 64)) (make-instance 'blake2-mac :key key :digest-length digest-length)) (defmethod copy-blake2-mac ((mac blake2-mac) &optional copy) (declare (type (or null blake2-mac) copy)) (let ((copy (if copy copy (make-instance 'blake2-mac :key (make-array 1 :element-type '(unsigned-byte 8)) :digest-length 64)))) (declare (type blake2-mac copy)) (setf (blake2-digest copy) (copy-digest (blake2-digest mac))) (setf (digest-length copy) (digest-length mac)) copy)) (defmethod shared-initialize :after ((mac blake2-mac) slot-names &rest initargs &key key &allow-other-keys) (declare (ignore slot-names initargs) (type (simple-array (unsigned-byte 8) (*)) key)) (let ((digest-length (digest-length mac)) (digest (make-digest :blake2))) (setf (blake2-state digest) (blake2-make-initial-state digest-length (length key))) (when (plusp (length key)) (let ((first-block (make-array +blake2-block-size+ :element-type '(unsigned-byte 8) :initial-element 0))) ;; Process the key block (replace first-block key) (blake2-update digest first-block 0 +blake2-block-size+ nil))) (setf (blake2-digest mac) digest))) (defun update-blake2-mac (mac sequence &key (start 0) end) (blake2-update (blake2-digest mac) sequence start (or end (length sequence)) nil) mac) (defun blake2-mac-digest (mac) (let ((digest (make-array (digest-length mac) :element-type '(unsigned-byte 8))) (mac-copy (copy-blake2-mac mac))) (blake2-finalize (blake2-digest mac-copy) digest 0) digest)) (defmac blake2-mac make-blake2-mac update-blake2-mac blake2-mac-digest) ironclad-0.57/src/macs/blake2s-mac.lisp000066400000000000000000000044231420372057600177350ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; blake2s-mac.lisp -- implementation of the Blake2s MAC (in-package :crypto) (defclass blake2s-mac (mac) ((digest :accessor blake2s-digest :initarg :digest) (digest-length :accessor digest-length :initarg :digest-length))) (defun make-blake2s-mac (key &key (digest-length 32)) (make-instance 'blake2s-mac :key key :digest-length digest-length)) (defmethod copy-blake2s-mac ((mac blake2s-mac) &optional copy) (declare (type (or null blake2s-mac) copy)) (let ((copy (if copy copy (make-instance 'blake2s-mac :key (make-array 1 :element-type '(unsigned-byte 8)) :digest-length 32)))) (declare (type blake2s-mac copy)) (setf (blake2s-digest copy) (copy-digest (blake2s-digest mac))) (setf (digest-length copy) (digest-length mac)) copy)) (defmethod shared-initialize :after ((mac blake2s-mac) slot-names &rest initargs &key key &allow-other-keys) (declare (ignore slot-names initargs) (type (simple-array (unsigned-byte 8) (*)) key)) (let ((digest-length (digest-length mac)) (digest (make-digest :blake2s))) (setf (blake2s-state digest) (blake2s-make-initial-state digest-length (length key))) (when (plusp (length key)) (let ((first-block (make-array +blake2s-block-size+ :element-type '(unsigned-byte 8) :initial-element 0))) ;; Process the key block (replace first-block key) (blake2s-update digest first-block 0 +blake2s-block-size+ nil))) (setf (blake2s-digest mac) digest))) (defun update-blake2s-mac (mac sequence &key (start 0) end) (blake2s-update (blake2s-digest mac) sequence start (or end (length sequence)) nil) mac) (defun blake2s-mac-digest (mac) (let ((digest (make-array (digest-length mac) :element-type '(unsigned-byte 8))) (mac-copy (copy-blake2s-mac mac))) (blake2s-finalize (blake2s-digest mac-copy) digest 0) digest)) (defmac blake2s-mac make-blake2s-mac update-blake2s-mac blake2s-mac-digest) ironclad-0.57/src/macs/cmac.lisp000066400000000000000000000113341420372057600165560ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;; cmac.lisp -- The CMAC algorithm from NIST 800-38B. (in-package :crypto) (defclass cmac (mac) ((cipher :reader cmac-cipher :initarg :cipher) (subkey1 :reader cmac-subkey1 :initarg :subkey1 :type (simple-array (unsigned-byte 8) (*))) (subkey2 :reader cmac-subkey2 :initarg :subkey2 :type (simple-array (unsigned-byte 8) (*))) (buffer :reader cmac-buffer :initarg :buffer :type (simple-array (unsigned-byte 8) (*))) (buffer-index :accessor cmac-buffer-index :initform 0 :type index))) (defun make-cmac (key cipher-name) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (let* ((cipher (make-cipher cipher-name :key key :mode :ecb)) (block-length (block-length cipher-name)) (L (make-array block-length :element-type '(unsigned-byte 8) :initial-element 0))) (encrypt-in-place cipher L) (flet ((gen-subkey (b) (let* ((n-bits (* block-length 8)) (k (integer-to-octets (ldb (byte n-bits 0) (ash (octets-to-integer b) 1)) :n-bits n-bits))) (when (logbitp 7 (aref b 0)) (ecase block-length (8 (setf (aref k 7) (logxor (aref k 7) #x1b))) (16 (setf (aref k 15) (logxor (aref k 15) #x87))) (32 (setf (aref k 30) (logxor (aref k 30) #x4) (aref k 31) (logxor (aref k 31) #x25))) (64 (setf (aref k 62) (logxor (aref k 62) #x1) (aref k 63) (logxor (aref k 63) #x25))) (128 (setf (aref k 125) (logxor (aref k 125) #x8) (aref k 126) (logxor (aref k 126) #x0) (aref k 127) (logxor (aref k 127) #x43))))) k))) (let ((L.u (gen-subkey L))) (make-instance 'cmac :cipher cipher :subkey1 L.u :subkey2 (gen-subkey L.u) :buffer (make-array block-length :element-type '(unsigned-byte 8) :initial-element 0)))))) (defmethod reinitialize-instance ((mac cmac) &rest initargs &key key &allow-other-keys) (declare (ignore initargs) (type (simple-array (unsigned-byte 8) (*)) key)) (fill (cmac-buffer mac) 0) (setf (cmac-buffer-index mac) 0) (reinitialize-instance (cmac-cipher mac) :key key :mode :ecb) mac) (defun update-cmac (cmac sequence &key (start 0) (end (length sequence))) (declare (type (simple-array (unsigned-byte 8) (*)) sequence) (type index start end) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let* ((cipher (cmac-cipher cmac)) (encryption-function (encrypt-function cipher)) (buffer (cmac-buffer cmac)) (buffer-index (cmac-buffer-index cmac)) (block-length (length buffer)) (remaining (- end start))) (declare (type (simple-array (unsigned-byte 8) (*)) buffer)) (when (< 0 buffer-index block-length) (dotimes (i (min remaining (- block-length buffer-index))) (setf (aref buffer buffer-index) (logxor (aref buffer buffer-index) (aref sequence start))) (incf buffer-index) (incf start) (decf remaining))) (when (and (= buffer-index block-length) (plusp remaining)) (funcall encryption-function cipher buffer 0 buffer 0) (setf buffer-index 0)) (loop while (> remaining block-length) do (xor-block block-length buffer 0 sequence start buffer 0) (funcall encryption-function cipher buffer 0 buffer 0) (incf start block-length) (decf remaining block-length)) (loop while (plusp remaining) do (setf (aref buffer buffer-index) (logxor (aref buffer buffer-index) (aref sequence start))) (incf buffer-index) (incf start) (decf remaining)) (setf (cmac-buffer-index cmac) buffer-index) (values))) (defun cmac-digest (cmac) (let* ((block-length (length (cmac-buffer cmac))) (x (copy-seq (cmac-buffer cmac))) (L (cond ((= block-length (cmac-buffer-index cmac)) (cmac-subkey1 cmac)) (t (setf (aref x (cmac-buffer-index cmac)) (logxor (aref x (cmac-buffer-index cmac)) #x80)) (cmac-subkey2 cmac))))) (xor-block block-length L 0 x 0 x 0) (encrypt-in-place (cmac-cipher cmac) x) x)) (defmac cmac make-cmac update-cmac cmac-digest) ironclad-0.57/src/macs/gmac.lisp000066400000000000000000000276661420372057600166010ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; gmac.lisp -- GMAC message authentication code ;; See nistspecialpublication800-38d.pdf about GCM and GMAC. (in-package :crypto) (defclass gmac (mac) ((accumulator :accessor gmac-accumulator :initform (make-array 16 :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (16))) (key :accessor gmac-key :type (or null (simple-array (unsigned-byte 8) (16)) (simple-array (unsigned-byte 64) (128 2 2)))) (total-length :accessor gmac-total-length :initform 0 :type (unsigned-byte 64)) (cipher :accessor gmac-cipher :initform nil) (j0 :accessor gmac-j0 :type (simple-array (unsigned-byte 8) (16))) (iv :accessor gmac-iv :initform (make-array 16 :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (16))) (buffer :accessor gmac-buffer :initform (make-array 16 :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (16))) (buffer-length :accessor gmac-buffer-length :initform 0 :type (integer 0 16)))) (defun make-gmac (key cipher-name initialization-vector) (unless (member (length key) (key-lengths cipher-name)) (error 'invalid-mac-parameter :mac-name 'gmac :message "The key length is not compatible with the cipher")) (unless (= (block-length cipher-name) 16) (error 'invalid-mac-parameter :mac-name 'gmac :message "GMAC only supports 128-bit block ciphers")) (make-instance 'gmac :key key :cipher-name cipher-name :initialization-vector initialization-vector)) (declaim (inline gmac-swap-16)) (defun gmac-swap-16 (data) (declare (type (simple-array (unsigned-byte 8) (16)) data) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((x (ub64ref/be data 8))) (declare (type (unsigned-byte 64) x)) (setf (ub64ref/le data 8) (ub64ref/be data 0) (ub64ref/le data 0) x)) (values)) (defun ghash (h x) (multiple-value-bind (q r) (floor (length x) 16) (assert (zerop r)) (let ((z (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0)) (i 0)) (if #+(and sbcl x86-64 ironclad-assembly) (pclmulqdq-supported-p) #-(and sbcl x86-64 ironclad-assembly) nil (let ((y (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0))) (dotimes (j q) (replace y x :start2 i) (ironclad::gmac-swap-16 y) (ironclad::xor-block 16 z 0 y 0 z 0) (ironclad::gmac-mul z h) (incf i 16)) (ironclad::gmac-swap-16 z)) (dotimes (j q) (ironclad::xor-block 16 z 0 x i z 0) (ironclad::gmac-mul z h) (incf i 16))) z))) (defun j0 (h iv) (labels ((pad (n) (make-array (- (* 16 (ceiling n 16)) n) :element-type '(unsigned-byte 8) :initial-element 0)) (ac (a c) (let ((an (length a)) (cn (length c))) (concatenate '(simple-array (unsigned-byte 8) (*)) a (pad an) c (pad cn) (integer-to-octets (* 8 an) :n-bits 64) (integer-to-octets (* 8 cn) :n-bits 64))))) (let* ((n (length iv)) (n*8 (* 8 n))) (cond ((= 12 n) (concatenate '(simple-array (unsigned-byte 8) (16)) iv #(0 0 0 1))) ((< 0 n*8 #.(expt 2 64)) (ghash h (ac nil iv))) (t (error 'invalid-mac-parameter :mac-name 'gmac :message "iv size not in range 0<|iv|<2^64 bits")))))) (defmethod shared-initialize :after ((mac gmac) slot-names &rest initargs &key key cipher-name initialization-vector &allow-other-keys) (declare (ignore slot-names initargs) (type (simple-array (unsigned-byte 8) (*)) key)) (when (and cipher-name (/= (block-length cipher-name) 16)) (error 'invalid-mac-parameter :mac-name 'gmac :message "GMAC only supports 128-bit block ciphers")) (if #+(and sbcl x86-64 ironclad-assembly) (pclmulqdq-supported-p) #-(and sbcl x86-64 ironclad-assembly) nil (let ((cipher (if (or cipher-name (null (gmac-cipher mac))) (make-cipher cipher-name :key key :mode :ecb) (reinitialize-instance (gmac-cipher mac) :key key :mode :ecb))) (hkey (make-array 16 :element-type '(unsigned-byte 8))) (iv (gmac-iv mac))) (declare (type (simple-array (unsigned-byte 8) (16)) hkey)) (setf (gmac-key mac) hkey (gmac-total-length mac) 0 (gmac-buffer-length mac) 0 (gmac-cipher mac) cipher) (fill (gmac-accumulator mac) 0) (fill hkey 0) (encrypt-in-place cipher hkey) (gmac-swap-16 hkey) (let ((j0 (j0 hkey initialization-vector))) (setf (gmac-j0 mac) j0) (replace iv j0)) (encrypt-in-place cipher iv) mac) (let ((table (make-array '(128 2 2) :element-type '(unsigned-byte 64) :initial-element 0)) (cipher (if cipher-name (make-cipher cipher-name :key key :mode :ecb) (gmac-cipher mac))) (iv (gmac-iv mac)) (hkey (make-array 16 :element-type '(unsigned-byte 8) :initial-element 0))) (declare (type (simple-array (unsigned-byte 64) (128 2 2)) table) (type (simple-array (unsigned-byte 8) (16)) hkey) (dynamic-extent hkey)) (setf (gmac-key mac) table (gmac-total-length mac) 0 (gmac-buffer-length mac) 0 (gmac-cipher mac) cipher) (fill (gmac-accumulator mac) 0) (encrypt-in-place cipher hkey) (setf (aref table 0 1 0) (ub64ref/be hkey 0) (aref table 0 1 1) (ub64ref/be hkey 8)) (dotimes (i 127) (let ((c (if (logbitp 0 (aref table i 1 1)) #xe100000000000000 0))) (declare (type (unsigned-byte 64) c)) (setf (aref table (1+ i) 1 1) (logior (mod64ash (aref table i 1 1) -1) (mod64ash (aref table i 1 0) 63)) (aref table (1+ i) 1 0) (logxor (mod64ash (aref table i 1 0) -1) c)))) (let ((j0 (j0 table initialization-vector))) (setf (gmac-j0 mac) j0) (replace iv j0)) (encrypt-in-place cipher iv) mac))) (defun gmac-mul (accumulator key) (declare (type (simple-array (unsigned-byte 8) (16)) accumulator) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (if #+(and sbcl x86-64 ironclad-assembly) (pclmulqdq-supported-p) #-(and sbcl x86-64 ironclad-assembly) nil #+(and sbcl x86-64 ironclad-assembly) (gmac-mul-fast accumulator key) #-(and sbcl x86-64 ironclad-assembly) nil (let ((x 0) (z0 0) (z1 0) (b 0)) (declare (type (simple-array (unsigned-byte 64) (128 2 2)) key) (type (unsigned-byte 8) x) (type (unsigned-byte 64) z0 z1) (type bit b)) (dotimes-unrolled (i 16) (setf x (aref accumulator i)) (dotimes-unrolled (j 8) (setf b (logand (ash x (- j 7)) 1) z0 (logxor z0 (aref key (+ (* i 8) j) b 0)) z1 (logxor z1 (aref key (+ (* i 8) j) b 1))))) (setf (ub64ref/be accumulator 0) z0 (ub64ref/be accumulator 8) z1))) (values)) (defun update-gmac (mac data &key (start 0) (end (length data))) (declare (type (simple-array (unsigned-byte 8) (*)) data) (type index start end) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((accumulator (gmac-accumulator mac)) (key (gmac-key mac)) (total-length (gmac-total-length mac)) (buffer (gmac-buffer mac)) (buffer-length (gmac-buffer-length mac)) (remaining (- end start))) (declare (type (simple-array (unsigned-byte 8) (16)) accumulator buffer) (type (unsigned-byte 64) total-length) (type (integer 0 16) buffer-length) (type index remaining)) ;; Fill the buffer with new data if necessary (when (plusp buffer-length) (let ((n (min remaining (- 16 buffer-length)))) (declare (type (integer 0 16) n)) (replace buffer data :start1 buffer-length :start2 start :end2 (+ start n)) (incf buffer-length n) (incf start n) (decf remaining n))) ;; Process the buffer (when (= buffer-length 16) (when #+(and sbcl x86-64 ironclad-assembly) (pclmulqdq-supported-p) #-(and sbcl x86-64 ironclad-assembly) nil (gmac-swap-16 buffer)) (xor-block 16 accumulator 0 buffer 0 accumulator 0) (gmac-mul accumulator key) (incf total-length 16) (setf buffer-length 0)) ;; Process the data (if #+(and sbcl x86-64 ironclad-assembly) (pclmulqdq-supported-p) #-(and sbcl x86-64 ironclad-assembly) nil (loop while (> remaining 16) do (setf (ub64ref/le buffer 8) (ub64ref/be data start) (ub64ref/le buffer 0) (ub64ref/be data (+ start 8))) (xor-block 16 accumulator 0 buffer 0 accumulator 0) (gmac-mul accumulator key) (incf total-length 16) (incf start 16) (decf remaining 16)) (loop while (> remaining 16) do (xor-block 16 accumulator 0 data start accumulator 0) (gmac-mul accumulator key) (incf total-length 16) (incf start 16) (decf remaining 16))) ;; Put the remaining data in the buffer (when (plusp remaining) (replace buffer data :start1 0 :start2 start :end2 end) (setf buffer-length remaining)) ;; Save the state (setf (gmac-total-length mac) total-length (gmac-buffer-length mac) buffer-length) (values))) (defun gmac-digest (mac &optional (encrypted-data-length 0)) (let ((accumulator (copy-seq (gmac-accumulator mac))) (key (gmac-key mac)) (total-length (gmac-total-length mac)) (iv (copy-seq (gmac-iv mac))) (buffer (copy-seq (gmac-buffer mac))) (buffer-length (gmac-buffer-length mac))) (declare (type (simple-array (unsigned-byte 8) (16)) accumulator buffer iv) (type (unsigned-byte 64) total-length) (type (integer 0 16) buffer-length)) ;; Process the buffer (when (plusp buffer-length) (fill buffer 0 :start buffer-length) (when #+(and sbcl x86-64 ironclad-assembly) (pclmulqdq-supported-p) #-(and sbcl x86-64 ironclad-assembly) nil (gmac-swap-16 buffer)) (xor-block 16 accumulator 0 buffer 0 accumulator 0) (gmac-mul accumulator key) (incf total-length buffer-length)) ;; Padding (if #+(and sbcl x86-64 ironclad-assembly) (pclmulqdq-supported-p) #-(and sbcl x86-64 ironclad-assembly) nil (setf (ub64ref/le buffer 0) (mod64* 8 encrypted-data-length) (ub64ref/le buffer 8) (mod64* 8 (- total-length encrypted-data-length))) (setf (ub64ref/be buffer 0) (mod64* 8 (- total-length encrypted-data-length)) (ub64ref/be buffer 8) (mod64* 8 encrypted-data-length))) (xor-block 16 accumulator 0 buffer 0 accumulator 0) (gmac-mul accumulator key) ;; Produce the tag (when #+(and sbcl x86-64 ironclad-assembly) (pclmulqdq-supported-p) #-(and sbcl x86-64 ironclad-assembly) nil (gmac-swap-16 accumulator)) (xor-block 16 accumulator 0 iv 0 accumulator 0) accumulator)) (defmac gmac make-gmac update-gmac gmac-digest) ironclad-0.57/src/macs/hmac.lisp000066400000000000000000000061021420372057600165600ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; hmac.lisp -- RFC 2104 keyed hashing for message authentication (in-package :crypto) (defclass hmac (mac) ((inner-digest :reader inner-digest :initarg :inner-digest) (outer-digest :reader outer-digest :initarg :outer-digest))) (defmethod print-object ((mac hmac) stream) (print-unreadable-object (mac stream :type nil :identity t) (format stream "HMAC(~A)" (type-of (inner-digest mac))))) (defun make-hmac (key digest-name) (make-instance 'hmac :key key :inner-digest (make-digest digest-name) :outer-digest (make-digest digest-name))) (defmethod reinitialize-instance ((mac hmac) &rest initargs &key key &allow-other-keys) (declare (ignore key initargs)) (reinitialize-instance (inner-digest mac)) (reinitialize-instance (outer-digest mac)) (call-next-method)) (defmethod shared-initialize :after ((mac hmac) slot-names &rest initargs &key key &allow-other-keys) (declare (ignore slot-names initargs)) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (let* ((inner (inner-digest mac)) (outer (outer-digest mac)) (block-length (block-length inner)) (inner-padding (make-array block-length :element-type '(unsigned-byte 8) :initial-element #x36)) (outer-padding (make-array block-length :element-type '(unsigned-byte 8) :initial-element #x5c)) (padded-key (make-array block-length :element-type '(unsigned-byte 8) :initial-element 0))) (declare (type simple-octet-vector inner-padding outer-padding padded-key) (fixnum block-length)) ;; XXX: SBCL bogusly ignores this because we use :INITIAL-ELEMENT. ;; see also https://bugs.launchpad.net/sbcl/+bug/902351 (declare (dynamic-extent inner-padding outer-padding padded-key)) (when (> (length key) block-length) (setf key (digest-sequence (type-of inner) key))) (replace padded-key key) (xor-block block-length padded-key 0 inner-padding 0 inner-padding 0) (update-digest inner inner-padding) (xor-block block-length padded-key 0 outer-padding 0 outer-padding 0) (update-digest outer outer-padding) mac)) (defun update-hmac (hmac sequence &key (start 0) (end (length sequence))) (declare (type (simple-array (unsigned-byte 8) (*)) sequence)) (update-digest (inner-digest hmac) sequence :start start :end end) hmac) (defun hmac-digest (hmac &key buffer (buffer-start 0)) (let* ((x (copy-digest (inner-digest hmac))) (inner-hash (produce-digest x :digest buffer :digest-start buffer-start))) (copy-digest (outer-digest hmac) x) (update-digest x inner-hash :digest buffer :digest-start buffer-start) (produce-digest x :digest buffer :digest-start buffer-start))) (defmac hmac make-hmac update-hmac hmac-digest) ironclad-0.57/src/macs/mac.lisp000066400000000000000000000036701420372057600164170ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; macs.lisp -- common functions for message authentication codes (in-package :crypto) (defclass mac () ()) (defun macp (sym) (get sym '%make-mac)) (defun list-all-macs () (loop for symbol being each external-symbol of (find-package :ironclad) if (macp symbol) collect (intern (symbol-name symbol) :keyword) into macs finally (return (sort macs #'string<)))) (defun mac-supported-p (name) "Return T if the mac NAME is a valid mac name." (and (symbolp name) (not (null (macp (massage-symbol name)))))) (defmacro defmac (name maker updater producer) `(progn (setf (get ',name '%make-mac) #',maker) (defmethod update-mac ((mac ,name) (sequence vector) &key (start 0) (end (length sequence))) (check-type sequence simple-octet-vector) (check-type start index) (check-type end index) (,updater mac sequence :start start :end end) (values)) (defmethod produce-mac ((mac ,name) &key digest (digest-start 0)) (let* ((mac-digest (,producer mac)) (digest-size (length mac-digest))) (etypecase digest (simple-octet-vector (if (<= digest-size (- (length digest) digest-start)) (replace digest mac-digest :start1 digest-start) (error 'insufficient-buffer-space :buffer digest :start digest-start :length digest-size))) (null mac-digest)))))) (defun make-mac (mac-name key &rest args) "Return a MAC object which uses the algorithm MAC-NAME initialized with a KEY." (typecase mac-name (symbol (let ((name (massage-symbol mac-name))) (if (macp name) (apply (the function (get name '%make-mac)) key args) (error 'unsupported-mac :name mac-name)))) (t (error 'type-error :datum mac-name :expected-type 'symbol)))) ironclad-0.57/src/macs/poly1305.lisp000066400000000000000000000232641420372057600171540ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; poly1305.lisp -- RFC 7539 poly1305 message authentication code (in-package :crypto) (defclass poly1305 (mac) ((accumulator :accessor poly1305-accumulator :initform (make-array 5 :element-type '(unsigned-byte 32)) :type (simple-array (unsigned-byte 32) (5))) (r :accessor poly1305-r :initform (make-array 4 :element-type '(unsigned-byte 32)) :type (simple-array (unsigned-byte 32) (4))) (s :accessor poly1305-s :initform (make-array 4 :element-type '(unsigned-byte 32)) :type (simple-array (unsigned-byte 32) (4))) (buffer :accessor poly1305-buffer :initform (make-array 16 :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (16))) (buffer-length :accessor poly1305-buffer-length :initform 0 :type (integer 0 16)))) (defun make-poly1305 (key) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (unless (= (length key) 32) (error 'invalid-mac-parameter :mac-name 'poly1305 :message "The key length must be 32 bytes")) (make-instance 'poly1305 :key key)) (defmethod shared-initialize :after ((mac poly1305) slot-names &rest initargs &key key &allow-other-keys) (declare (ignore slot-names initargs) (type (simple-array (unsigned-byte 8) (32)) key)) (let ((accumulator (poly1305-accumulator mac)) (r (poly1305-r mac)) (s (poly1305-s mac))) (declare (type (simple-array (unsigned-byte 32) (5)) accumulator) (type (simple-array (unsigned-byte 32) (4)) r s)) (fill accumulator 0) (setf (aref r 0) (logand (ub32ref/le key 0) #x0fffffff) (aref r 1) (logand (ub32ref/le key 4) #x0ffffffc) (aref r 2) (logand (ub32ref/le key 8) #x0ffffffc) (aref r 3) (logand (ub32ref/le key 12) #x0ffffffc)) (setf (aref s 0) (ub32ref/le key 16) (aref s 1) (ub32ref/le key 20) (aref s 2) (ub32ref/le key 24) (aref s 3) (ub32ref/le key 28)) (setf (poly1305-buffer-length mac) 0) mac)) (defun poly1305-process-full-blocks (accumulator r data start remaining final) (declare (type (simple-array (unsigned-byte 32) (5)) accumulator) (type (simple-array (unsigned-byte 32) (4)) r) (type (simple-array (unsigned-byte 8) (*)) data) (type index start remaining) (type boolean final) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let* ((hibit (if final 0 1)) (h0 (aref accumulator 0)) (h1 (aref accumulator 1)) (h2 (aref accumulator 2)) (h3 (aref accumulator 3)) (h4 (aref accumulator 4)) (r0 (aref r 0)) (r1 (aref r 1)) (r2 (aref r 2)) (r3 (aref r 3)) (rr0 (mod32* (mod32ash r0 -2) 5)) (rr1 (mod32+ (mod32ash r1 -2) r1)) (rr2 (mod32+ (mod32ash r2 -2) r2)) (rr3 (mod32+ (mod32ash r3 -2) r3))) (declare (type (unsigned-byte 32) hibit h0 h1 h2 h3 h4 r0 r1 r2 r3 rr0 rr1 rr2 rr3)) (loop while (>= remaining 16) do #+(and ecl ironclad-assembly) (multiple-value-setq (h0 h1 h2 h3 h4) (poly1305-process-block h0 h1 h2 h3 h4 r0 r1 r2 r3 rr0 rr1 rr2 rr3 hibit data start)) #-(and ecl ironclad-assembly) (let* ((s0 (mod64+ h0 (ub32ref/le data start))) (s1 (mod64+ h1 (ub32ref/le data (+ start 4)))) (s2 (mod64+ h2 (ub32ref/le data (+ start 8)))) (s3 (mod64+ h3 (ub32ref/le data (+ start 12)))) (s4 (mod32+ h4 hibit)) (x0 (mod64+ (mod64* s0 r0) (mod64+ (mod64* s1 rr3) (mod64+ (mod64* s2 rr2) (mod64+ (mod64* s3 rr1) (mod64* s4 rr0)))))) (x1 (mod64+ (mod64* s0 r1) (mod64+ (mod64* s1 r0) (mod64+ (mod64* s2 rr3) (mod64+ (mod64* s3 rr2) (mod64* s4 rr1)))))) (x2 (mod64+ (mod64* s0 r2) (mod64+ (mod64* s1 r1) (mod64+ (mod64* s2 r0) (mod64+ (mod64* s3 rr3) (mod64* s4 rr2)))))) (x3 (mod64+ (mod64* s0 r3) (mod64+ (mod64* s1 r2) (mod64+ (mod64* s2 r1) (mod64+ (mod64* s3 r0) (mod64* s4 rr3)))))) (x4 (mod32* s4 (logand r0 3))) (u5 (mod32+ x4 (logand (mod64ash x3 -32) #xffffffff))) (u0 (mod64+ (mod64* (mod32ash u5 -2) 5) (logand x0 #xffffffff))) (u1 (mod64+ (mod64ash u0 -32) (mod64+ (logand x1 #xffffffff) (mod64ash x0 -32)))) (u2 (mod64+ (mod64ash u1 -32) (mod64+ (logand x2 #xffffffff) (mod64ash x1 -32)))) (u3 (mod64+ (mod64ash u2 -32) (mod64+ (logand x3 #xffffffff) (mod64ash x2 -32)))) (u4 (mod64+ (mod64ash u3 -32) (logand u5 3)))) (declare (type (unsigned-byte 64) s0 s1 s2 s3 x0 x1 x2 x3 u0 u1 u2 u3 u4) (type (unsigned-byte 32) s4 x4 u5)) (setf h0 (logand u0 #xffffffff) h1 (logand u1 #xffffffff) h2 (logand u2 #xffffffff) h3 (logand u3 #xffffffff) h4 (logand u4 #xffffffff))) (incf start 16) (decf remaining 16)) (setf (aref accumulator 0) h0 (aref accumulator 1) h1 (aref accumulator 2) h2 (aref accumulator 3) h3 (aref accumulator 4) h4) (values start remaining))) (defun update-poly1305 (mac data &key (start 0) (end (length data))) (declare (type (simple-array (unsigned-byte 8) (*)) data) (type fixnum start end) (optimize (speed 3) (space 0) (safety 1) (debug 0))) (let ((buffer (poly1305-buffer mac)) (buffer-length (poly1305-buffer-length mac)) (accumulator (poly1305-accumulator mac)) (r (poly1305-r mac)) (remaining (- end start))) (declare (type (simple-array (unsigned-byte 8) (16)) buffer) (type (integer 0 16) buffer-length) (type (simple-array (unsigned-byte 32) (5)) accumulator) (type (simple-array (unsigned-byte 32) (4)) r) (type fixnum remaining)) ;; Fill the buffer with new data if necessary (when (plusp buffer-length) (let ((n (min remaining (- 16 buffer-length)))) (declare (type (integer 0 16) n)) (replace buffer data :start1 buffer-length :start2 start :end2 (+ start n)) (incf buffer-length n) (incf start n) (decf remaining n))) ;; Process the buffer (when (= buffer-length 16) (poly1305-process-full-blocks accumulator r buffer 0 16 nil) (setf buffer-length 0)) ;; Process the data (multiple-value-setq (start remaining) (poly1305-process-full-blocks accumulator r data start remaining nil)) ;; Put the remaining data in the buffer (when (plusp remaining) (replace buffer data :start1 0 :start2 start :end2 end) (setf buffer-length remaining)) ;; Save the state (setf (poly1305-buffer-length mac) buffer-length) (values))) (defun poly1305-digest (mac) (let ((buffer (copy-seq (poly1305-buffer mac))) (buffer-length (poly1305-buffer-length mac)) (accumulator (copy-seq (poly1305-accumulator mac))) (r (poly1305-r mac)) (s (poly1305-s mac))) (declare (type (simple-array (unsigned-byte 8) (16)) buffer) (type (integer 0 16) buffer-length) (type (simple-array (unsigned-byte 32) (5)) accumulator) (type (simple-array (unsigned-byte 32) (4)) r s)) ;; Process the buffer (when (plusp buffer-length) (setf (aref buffer buffer-length) 1) (when (< buffer-length 15) (fill buffer 0 :start (1+ buffer-length) :end 16)) (poly1305-process-full-blocks accumulator r buffer 0 16 t)) ;; Produce the tag (let* ((h0 (aref accumulator 0)) (h1 (aref accumulator 1)) (h2 (aref accumulator 2)) (h3 (aref accumulator 3)) (h4 (aref accumulator 4)) (u0 (mod64+ 5 h0)) (u1 (mod64+ (mod64ash u0 -32) h1)) (u2 (mod64+ (mod64ash u1 -32) h2)) (u3 (mod64+ (mod64ash u2 -32) h3)) (u4 (mod64+ (mod64ash u3 -32) h4)) (uu0 (mod64+ (mod64* (mod64ash u4 -2) 5) (mod64+ h0 (aref s 0)))) (uu1 (mod64+ (mod64ash uu0 -32) (mod64+ h1 (aref s 1)))) (uu2 (mod64+ (mod64ash uu1 -32) (mod64+ h2 (aref s 2)))) (uu3 (mod64+ (mod64ash uu2 -32) (mod64+ h3 (aref s 3)))) (tag (make-array 16 :element-type '(unsigned-byte 8)))) (declare (type (unsigned-byte 32) h0 h1 h2 h3 h4) (type (unsigned-byte 64) u0 u1 u2 u3 u4 uu0 uu1 uu2 uu3) (type (simple-array (unsigned-byte 8) (16)) tag)) (setf (ub32ref/le tag 0) (logand uu0 #xffffffff) (ub32ref/le tag 4) (logand uu1 #xffffffff) (ub32ref/le tag 8) (logand uu2 #xffffffff) (ub32ref/le tag 12) (logand uu3 #xffffffff)) tag))) (defmac poly1305 make-poly1305 update-poly1305 poly1305-digest) ironclad-0.57/src/macs/siphash.lisp000066400000000000000000000176101420372057600173150ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; siphash.lisp -- implementation of the SipHash MAC (in-package :crypto) (defclass siphash (mac) ((state :accessor siphash-state :initform (make-array 4 :element-type '(unsigned-byte 64)) :type (simple-array (unsigned-byte 64) (4))) (compression-rounds :accessor siphash-compression-rounds :initarg :compression-rounds :initform 2 :type fixnum) (finalization-rounds :accessor siphash-finalization-rounds :initarg :finalization-rounds :initform 4 :type fixnum) (digest-length :accessor siphash-digest-length :initarg :digest-length :initform 8 :type fixnum) (data-length :accessor siphash-data-length :initform 0 :type fixnum) (buffer :accessor siphash-buffer :initform (make-array 8 :element-type '(unsigned-byte 8)) :type (simple-array (unsigned-byte 8) (8))) (buffer-length :accessor siphash-buffer-length :initform 0 :type (integer 0 8)))) (defun make-siphash (key &key (compression-rounds 2) (finalization-rounds 4) (digest-length 8)) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (unless (= (length key) 16) (error 'invalid-mac-parameter :mac-name 'siphash :message "The key length must be 16 bytes")) (unless (or (= digest-length 8) (= digest-length 16)) (error 'invalid-mac-parameter :mac-name 'siphash :message "The digest length must be 8 or 16 bytes")) (make-instance 'siphash :key key :compression-rounds compression-rounds :finalization-rounds finalization-rounds :digest-length digest-length)) (defmethod shared-initialize :after ((mac siphash) slot-names &rest initargs &key key &allow-other-keys) (declare (ignore slot-names initargs) (type (simple-array (unsigned-byte 8) (16)) key)) (let ((state (siphash-state mac)) (k0 (ub64ref/le key 0)) (k1 (ub64ref/le key 8))) (declare (type (simple-array (unsigned-byte 64) (4)) state) (type (unsigned-byte 64) k0 k1)) (setf (aref state 0) (logxor k0 #x736f6d6570736575) (aref state 1) (logxor k1 #x646f72616e646f6d) (aref state 2) (logxor k0 #x6c7967656e657261) (aref state 3) (logxor k1 #x7465646279746573)) (when (= (siphash-digest-length mac) 16) (setf (aref state 1) (logxor (aref state 1) #xee))) (setf (siphash-data-length mac) 0) (setf (siphash-buffer-length mac) 0) mac)) (defmacro siphash-round (v0 v1 v2 v3) `(setf ,v0 (mod64+ ,v0 ,v1) ,v2 (mod64+ ,v2 ,v3) ,v1 (rol64 ,v1 13) ,v3 (rol64 ,v3 16) ,v1 (logxor ,v1 ,v0) ,v3 (logxor ,v3 ,v2) ,v0 (rol64 ,v0 32) ,v2 (mod64+ ,v2 ,v1) ,v0 (mod64+ ,v0 ,v3) ,v1 (rol64 ,v1 17) ,v3 (rol64 ,v3 21) ,v1 (logxor ,v1 ,v2) ,v3 (logxor ,v3 ,v0) ,v2 (rol64 ,v2 32))) (defun siphash-compress (state data start remaining data-length n-rounds) (declare (type (simple-array (unsigned-byte 64) (4)) state) (type (simple-array (unsigned-byte 8) (*)) data) (type fixnum start remaining data-length n-rounds) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((v0 (aref state 0)) (v1 (aref state 1)) (v2 (aref state 2)) (v3 (aref state 3))) (declare (type (unsigned-byte 64) v0 v1 v2 v3)) (do ((m 0)) ((< remaining 8)) (declare (type (unsigned-byte 64) m)) (setf m (ub64ref/le data start)) (setf v3 (logxor v3 m)) (dotimes (i n-rounds) (siphash-round v0 v1 v2 v3)) (setf v0 (logxor v0 m)) (incf start 8) (incf data-length 8) (decf remaining 8)) (setf (aref state 0) v0 (aref state 1) v1 (aref state 2) v2 (aref state 3) v3) (values start remaining data-length))) (defun siphash-finalize (state n-rounds tag) (declare (type (simple-array (unsigned-byte 64) (4)) state) (type (simple-array (unsigned-byte 8) (*)) tag) (type fixnum n-rounds) (optimize (speed 3) (space 0) (safety 0) (debug 0))) (let ((digest-length (length tag)) (v0 (aref state 0)) (v1 (aref state 1)) (v2 (aref state 2)) (v3 (aref state 3))) (declare (type fixnum digest-length) (type (unsigned-byte 64) v0 v1 v2 v3)) (setf v2 (logxor v2 (if (= digest-length 16) #xee #xff))) (dotimes (i n-rounds) (siphash-round v0 v1 v2 v3)) (setf (ub64ref/le tag 0) (logxor v0 v1 v2 v3)) (when (= digest-length 16) (setf v1 (logxor v1 #xdd)) (dotimes (i n-rounds) (siphash-round v0 v1 v2 v3)) (setf (ub64ref/le tag 8) (logxor v0 v1 v2 v3))) (values))) (defun update-siphash (mac data &key (start 0) (end (length data))) (declare (type (simple-array (unsigned-byte 8) (*)) data) (type fixnum start end) (optimize (speed 3) (space 0) (safety 1) (debug 0))) (let ((buffer (siphash-buffer mac)) (buffer-length (siphash-buffer-length mac)) (state (siphash-state mac)) (n-rounds (siphash-compression-rounds mac)) (data-length (siphash-data-length mac)) (remaining (- end start))) (declare (type (simple-array (unsigned-byte 8) (8)) buffer) (type (integer 0 8) buffer-length) (type (simple-array (unsigned-byte 64) (4)) state) (type fixnum n-rounds data-length remaining)) ;; Fill the buffer with new data if necessary (when (plusp buffer-length) (let ((n (min remaining (- 8 buffer-length)))) (declare (type (integer 0 8) n)) (replace buffer data :start1 buffer-length :start2 start :end2 (+ start n)) (incf buffer-length n) (incf start n) (incf data-length n) (decf remaining n))) ;; Process the buffer (when (= buffer-length 8) (siphash-compress state buffer 0 8 data-length n-rounds) (setf buffer-length 0)) ;; Process the data ;; TODO: (siphash-process-full-blocks ...) (multiple-value-setq (start remaining data-length) (siphash-compress state data start remaining data-length n-rounds)) ;; Put the remaining data in the buffer (when (plusp remaining) (replace buffer data :start1 0 :start2 start :end2 end) (incf data-length remaining) (setf buffer-length remaining)) ;; Save the state (setf (siphash-data-length mac) data-length) (setf (siphash-buffer-length mac) buffer-length) (values))) (defun siphash-digest (mac) (let ((buffer (copy-seq (siphash-buffer mac))) (buffer-length (siphash-buffer-length mac)) (state (copy-seq (siphash-state mac))) (compression-rounds (siphash-compression-rounds mac)) (finalization-rounds (siphash-finalization-rounds mac)) (digest-length (siphash-digest-length mac)) (data-length (siphash-data-length mac))) (declare (type (simple-array (unsigned-byte 8) (8)) buffer) (type (integer 0 8) buffer-length) (type (simple-array (unsigned-byte 64) (4)) state) (type fixnum compression-rounds finalization-rounds digest-length data-length) (dynamic-extent buffer state)) ;; Pad and process the buffer (fill buffer 0 :start buffer-length) (setf (aref buffer 7) (mod data-length 256)) (siphash-compress state buffer 0 8 data-length compression-rounds) ;; Produce the tag (let ((tag (make-array digest-length :element-type '(unsigned-byte 8)))) (siphash-finalize state finalization-rounds tag) tag))) (defmac siphash make-siphash update-siphash siphash-digest) ironclad-0.57/src/macs/skein-mac.lisp000066400000000000000000000115251420372057600175240ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; skein-mac.lisp -- implementation of the Skein MAC (in-package :crypto) (defclass skein-mac (mac) ((value :accessor skein-value :initarg :value) (tweak :accessor skein-tweak :initarg :tweak) (cfg :accessor skein-cfg :initarg :cfg) (buffer :accessor skein-buffer :initarg :buffer) (buffer-length :accessor skein-buffer-length :initarg :buffer-length) (cipher :accessor skein-cipher :initarg :cipher) (block-length :accessor block-length :initarg :block-length) (digest-length :accessor digest-length :initarg :digest-length))) (defun make-skein-mac (key &key (block-length 64) (digest-length 64)) (unless (or (= block-length 32) (= block-length 64) (= block-length 128)) (error 'invalid-mac-parameter :mac-name 'skein-mac :message "The block length must be 32, 64 or 128 bytes")) (make-instance 'skein-mac :key key :block-length block-length :digest-length digest-length)) (defmethod copy-skein-mac ((mac skein-mac) &optional copy) (declare (type (or null skein-mac) copy)) (let ((copy (if copy copy (make-instance 'skein-mac :key (skein-value mac) :block-length (block-length mac) :digest-length (digest-length mac))))) (declare (type skein-mac copy)) (replace (skein-value copy) (skein-value mac)) (replace (skein-tweak copy) (skein-tweak mac)) (replace (skein-cfg copy) (skein-cfg mac)) (replace (skein-buffer copy) (skein-buffer mac)) (setf (skein-buffer-length copy) (skein-buffer-length mac)) (setf (skein-cipher copy) (skein-copy-cipher (skein-cipher mac))) copy)) (defmethod shared-initialize :after ((mac skein-mac) slot-names &rest initargs &key key &allow-other-keys) (declare (ignore slot-names initargs) (type (simple-array (unsigned-byte 8) (*)) key)) (let* ((block-length (block-length mac)) (digest-length (digest-length mac)) (value (make-array block-length :element-type '(unsigned-byte 8) :initial-element 0)) (tweak (skein-make-tweak t nil +skein-key+ 0)) (cfg (skein-make-configuration-string (* 8 digest-length))) (cipher (ecase block-length (32 (make-cipher :threefish256 :key value :mode :ecb)) (64 (make-cipher :threefish512 :key value :mode :ecb)) (128 (make-cipher :threefish1024 :key value :mode :ecb))))) (setf (skein-cipher mac) cipher (skein-value mac) value (skein-cfg mac) cfg (skein-tweak mac) tweak (skein-buffer mac) (make-array block-length :element-type '(unsigned-byte 8)) (skein-buffer-length mac) 0) ;; Process key (when (plusp (length key)) (skein-ubi mac key 0 (length key)) (let* ((padding-length (- block-length (skein-buffer-length mac))) (padding (make-array padding-length :element-type '(unsigned-byte 8) :initial-element 0))) (skein-update-tweak tweak :final t :position-increment (skein-buffer-length mac)) (skein-ubi mac padding 0 padding-length t))) ;; Process configuration string (let ((padded-cfg (make-array block-length :element-type '(unsigned-byte 8) :initial-element 0))) (replace padded-cfg cfg :end2 32) (skein-update-tweak tweak :first t :final t :type +skein-cfg+ :position 32) (skein-ubi mac padded-cfg 0 block-length t)) ;; Prepare message processing (skein-update-tweak tweak :first t :final nil :type +skein-msg+ :position 0))) (defun update-skein-mac (mac sequence &key (start 0) end) (skein-ubi mac sequence start (or end (length sequence))) mac) (defun skein-mac-digest (mac) (let ((digest (make-array (digest-length mac) :element-type '(unsigned-byte 8))) (mac-copy (copy-skein-mac mac))) (skein-finalize mac-copy digest 0) digest)) (defmac skein-mac make-skein-mac update-skein-mac skein-mac-digest) ironclad-0.57/src/math.lisp000066400000000000000000000273651420372057600156740ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto) (defun egcd (a b) "Extended Euclidean algorithm, aka extended greatest common denominator." (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)) (type integer a b)) (assert (and (>= a 0) (>= b 0))) (do ((q 0) (c a (- d (* q c))) (d b c) (u_c 1 (- u_d (* q u_c))) (v_c 0 (- v_d (* q v_c))) (u_d 0 u_c) (v_d 1 v_c)) ((= c 0) (values d u_d v_d)) (setq q (floor d c)))) ;;; Some number theory functions taken from Maxima (defun jacobi (a b) (declare (integer a b) (optimize (speed 3))) (cond ((zerop b) (if (= 1 (abs a)) 1 0)) ((and (evenp a) (evenp b)) 0) (t (let ((k 1) (tab2 (make-array 8 :element-type '(integer -1 1) :initial-contents #(0 1 0 -1 0 -1 0 1)))) (declare (type (integer -1 1) k)) (loop for v fixnum = 0 then (1+ v) ;remove 2's from b while (evenp b) do (setf b (ash b -1)) finally (when (oddp v) (setf k (aref tab2 (logand a 7))))) ; (-1)^(a^2-1)/8 (when (minusp b) (setf b (- b)) (when (minusp a) (setf k (- k)))) (loop (when (zerop a) (return-from jacobi (if (> b 1) 0 k))) (loop for v fixnum = 0 then (1+ v) while (evenp a) do (setf a (ash a -1)) finally (when (oddp v) (when (minusp (aref tab2 (logand b 7))); (-1)^(b^2-1)/8 (setf k (- k))))) (when (plusp (logand a b 2)) ;compute (-1)^(a-1)(b-1)/4 (setf k (- k))) (let ((r (abs a))) (setf a (rem b r)) (setf b r))))))) (defun power-mod-tab (b k m) (declare (optimize (speed 3) (safety 0))) (let* ((l (ash 1 (1- k))) (tab (make-array l :element-type 'integer :initial-element 1)) (bi b) (bb (mod (* b b) m))) (setf (svref tab 0) b) (do ((i 1 (1+ i))) ((= i l) tab) (setq bi (mod (* bi bb) m)) (setf (svref tab i) bi)))) (defun power-mod (b e m) (declare (optimize (speed 3) (safety 0))) (cond ((zerop e) (mod 1 m)) ((typep e 'fixnum) (do ((res 1)) (()) (when (logbitp 0 e) (setq res (mod (* res b) m)) (when (= 1 e) (return res))) (setq e (ash e -1) b (mod (* b b) m)))) (t ;; sliding window variant: (let* ((l (integer-length e)) (k (cond ((< l 65) 3) ((< l 161) 4) ((< l 385) 5) ((< l 897) 6) (t 7))) (tab (power-mod-tab b k m)) (res 1) s u tmp) (do ((i (1- l))) ((< i 0) res) (cond ((logbitp i e) (setq s (max (1+ (- i k)) 0)) (do () ((logbitp s e)) (incf s)) (setq tmp (1+ (- i s))) (dotimes (h tmp) (setq res (mod (* res res) m))) (setq u (ldb (byte tmp s) e)) (unless (= u 0) (setq res (mod (* res (svref tab (ash u -1))) m))) (setq i (1- s))) (t (setq res (mod (* res res) m)) (decf i)))))))) (defun miller-rabin-decomposition (n) ;; assume n > 2 (n-1 is even) ;; return values q,k with n-1 = q*2^k (declare (optimize (speed 3) (safety 0))) (do ((k 1 (1+ k)) (q (ash n -1) (ash q -1))) ((logbitp 0 q) (values q k)))) (defun miller-rabin-kernel (n q k &optional x) ;; now assume n-1 = q*2^k, k >= 1 (declare (optimize (speed 3) (safety 0))) (unless x (setq x (+ (strong-random (- n 2)) 2))) (let ((y (power-mod x q n)) ;; j = 0 (minus1 (1- n))) (if (or (= y 1) (= y minus1)) t (do ((j 1 (1+ j))) ((= j k)) (setq y (power-mod y 2 n)) (when (= y minus1) (return t)) (when (= y 1) (return)))))) ;; n prime => last y must have been 1 or -1 (defun lucas-sequence (k p n) (declare (optimize (speed 3) (safety 0))) (let ((uh 1) (vl 2) (vh p) (s 0) l) (do () ((logbitp 0 k)) (setq k (ash k -1)) (setq s (1+ s))) (setq l (integer-length k)) (do ((j (1- l) (1- j))) ((= 0 j)) (if (logbitp j k) (progn (setq uh (mod (* uh vh) n)) (setq vl (mod (- (* vh vl) p) n)) (setq vh (mod (- (* vh vh) 2) n))) (progn (setq uh (mod (1- (* uh vl)) n)) (setq vh (mod (- (* vh vl) p) n)) (setq vl (mod (- (* vl vl) 2) n))))) (setq uh (mod (1- (* uh vl)) n)) (setq vl (mod (- (* vh vl) p) n)) (dotimes (j s) (setq uh (mod (* uh vl) n)) (setq vl (mod (- (* vl vl) 2) n))) uh)) (defun primep-lucas (n) (declare (optimize (speed 3) (safety 0))) (let ((b 3)) (loop until (= (jacobi (- (* b b) 4) n) -1) do (incf b)) (zerop (lucas-sequence (1+ n) b n)))) ;;; modular arithmetic utilities (defun modular-inverse (n modulus) "Returns M such that N * M mod MODULUS = 1" (declare (type (integer 1 *) modulus)) (declare (type (integer 0 *) n)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (when (or (zerop n) (and (evenp n) (evenp modulus))) (return-from modular-inverse 0)) (loop with r1 of-type integer = n and r2 of-type integer = modulus and u1 of-type integer = 1 and u2 of-type integer = 0 and q of-type integer = 0 and r of-type integer = 0 until (zerop r2) do (progn (multiple-value-setq (q r) (floor r1 r2)) (setf r1 r2 r2 r) (decf u1 (* q u2)) (rotatef u1 u2)) finally (return (let ((inverse u1)) (when (minusp inverse) (setf inverse (mod inverse modulus))) (if (zerop (mod (* n inverse) modulus)) 0 inverse))))) (defun modular-inverse-with-blinding (n modulus) "As modular-inverse, but mask N with a blinding factor before computing the modular inverse." (declare (type (integer 1 *) modulus)) (declare (type (integer 0 *) n)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let* ((b (loop for b = (+ 1 (strong-random (- modulus 1))) until (= 1 (gcd b modulus)) finally (return b))) (x (mod (* n b) modulus)) (y (modular-inverse x modulus))) (mod (* y b) modulus))) (defun expt-mod (n exponent modulus) "As (mod (expt n exponent) modulus), but more efficient (Montgomery ladder)." (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)) (type integer n exponent modulus)) (assert (<= 0 exponent modulus)) (assert (> modulus 1)) (do ((r0 1) (r1 n) (i (1- (integer-length modulus)) (1- i))) ((minusp i) r0) (declare (type fixnum i) (type integer r0 r1)) (if (logbitp i exponent) (setf r0 (mod (* r0 r1) modulus) r1 (mod (* r1 r1) modulus)) (setf r1 (mod (* r0 r1) modulus) r0 (mod (* r0 r0) modulus))))) (defun expt-mod/unsafe (n exponent modulus) "As (mod (expt n exponent) modulus), but more efficient. This function is faster than expt-mod, but it is not safe against side channel timing attacks." (power-mod n exponent modulus)) ;;; prime numbers utilities (defconst +small-primes+ (make-array 269 :element-type 'fixnum :initial-contents '(2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997 1009 1013 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069 1087 1091 1093 1097 1103 1109 1117 1123 1129 1151 1153 1163 1171 1181 1187 1193 1201 1213 1217 1223 1229 1231 1237 1249 1259 1277 1279 1283 1289 1291 1297 1301 1303 1307 1319 1321 1327 1361 1367 1373 1381 1399 1409 1423 1427 1429 1433 1439 1447 1451 1453 1459 1471 1481 1483 1487 1489 1493 1499 1511 1523 1531 1543 1549 1553 1559 1567 1571 1579 1583 1597 1601 1607 1609 1613 1619 1621 1627 1637 1657 1663 1667 1669 1693 1697 1699 1709 1721 1723))) (defconstant +last-small-prime+ 1723) (defun generate-small-primes (n) "Generates a list of all primes up to N using the Sieve of Eratosthenes. Was used to generate the list above; included for mathematical interest." (assert (<= 2 n (expt 2 20))) (loop for i from 2 to n with array = (make-array (1+ n) :initial-element 1) unless (zerop (aref array i)) do (loop for j from 2 to (floor (/ n i)) do (setf (aref array (* i j)) 0)) finally (return (loop for j from 2 to n unless (zerop (aref array j)) collect j)))) (defparameter *number-of-miller-rabin-tests* 64) (defun prime-p (n &optional (prng *prng*)) "True if N is a prime number (with very high probability; at most 1:2^128 chance of returning true for a composite number with the default *NUMBER-OF-MILLER-RABIN-TESTS* of 64)." (declare (type integer n) (optimize (speed 3))) (if (<= n +last-small-prime+) (when (find n +small-primes+) t) (let ((*prng* prng)) (and (loop for p across +small-primes+ never (zerop (mod n p))) (multiple-value-bind (q k) (miller-rabin-decomposition n) (loop repeat *number-of-miller-rabin-tests* always (miller-rabin-kernel n q k))) (primep-lucas n))))) (defun generate-prime-in-range (lower-limit upper-limit &optional (prng *prng*)) (assert (< 0 lower-limit upper-limit)) (loop for r = (strong-random (- upper-limit lower-limit -1) prng) for x = (+ r lower-limit) until (prime-p x prng) finally (return x))) (defun generate-prime (num-bits &optional (prng *prng*)) "Return a NUM-BITS-bit prime number with very high probability (1:2^128 chance of returning a composite number)." (loop with big = (ash 1 (1- num-bits)) for x = (logior (strong-random big prng) big 1) until (prime-p x prng) finally (return x))) (defun generate-safe-prime (num-bits &optional (prng *prng*)) "Generate a NUM-BITS-bit prime number p so that (p-1)/2 is prime too." (loop for q = (generate-prime (1- num-bits) prng) for p = (1+ (* 2 q)) until (prime-p p prng) finally (return p))) (defun find-generator (p &optional (prng *prng*)) "Find a random generator of the multiplicative group (Z/pZ)* where p is a safe prime number." (assert (> p 3)) (loop with factors = (list 2 (/ (1- p) 2)) for g = (strong-random p prng) until (loop for d in factors never (= 1 (expt-mod/unsafe g (/ (1- p) d) p))) finally (return g))) (defun find-subgroup-generator (p q &optional (prng *prng*)) "Find a random generator of a subgroup of order Q of the multiplicative group (Z/pZ)* where p is a prime number." (let ((f (/ (1- p) q))) (assert (integerp f)) (loop for h = (+ 2 (strong-random (- p 3) prng)) for g = (expt-mod/unsafe h f p) while (= 1 g) finally (return g)))) ironclad-0.57/src/octet-stream.lisp000066400000000000000000000615051420372057600173440ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; octet-stream.lisp -- like string-streams, but with (VECTOR (UNSIGNED-BYTE 8)) (in-package :crypto) ;;; portability definitions #+(or cmu abcl) (eval-when (:compile-toplevel :load-toplevel :execute) (require :gray-streams)) ;;; TRIVIAL-GRAY-STREAMS has it, we might as well, too... #+allegro (eval-when (:compile-toplevel :load-toplevel :execute) (unless (fboundp #+(and allegro-version>= (not (version>= 9))) 'stream:stream-write-string #+(and allegro-version>= (version>= 9)) 'excl:stream-write-string) (require "streamc.fasl"))) #+ecl (eval-when (:compile-toplevel :load-toplevel :execute) (gray::redefine-cl-functions)) (eval-when (:compile-toplevel :load-toplevel :execute) (defvar *binary-input-stream-class* (quote #+lispworks stream:fundamental-binary-input-stream #+sbcl sb-gray:fundamental-binary-input-stream #+openmcl gray:fundamental-binary-input-stream #+cmu ext:fundamental-binary-input-stream #+allegro excl:fundamental-binary-input-stream #+abcl gray-streams:fundamental-binary-input-stream #+(or ecl clisp) gray:fundamental-binary-input-stream #-(or lispworks sbcl openmcl cmu allegro abcl ecl clisp) (error 'ironclad-error :format-control "octet streams not supported in this implementation"))) (defvar *binary-output-stream-class* (quote #+lispworks stream:fundamental-binary-output-stream #+sbcl sb-gray:fundamental-binary-output-stream #+openmcl gray:fundamental-binary-output-stream #+cmu ext:fundamental-binary-output-stream #+allegro excl:fundamental-binary-output-stream #+abcl gray-streams:fundamental-binary-output-stream #+(or ecl clisp) gray:fundamental-binary-output-stream #-(or lispworks sbcl openmcl cmu allegro abcl ecl clisp) (error 'ironclad-error :format-control "octet streams not supported in this implementation"))) ;;; FIXME: how to do CMUCL support for this? (defvar *stream-element-type-function* (quote #+lispworks cl:stream-element-type #+sbcl sb-gray::stream-element-type #+openmcl cl:stream-element-type #+cmu cl:stream-element-type #+allegro cl:stream-element-type #+abcl cl:stream-element-type #+(or ecl clisp) cl:stream-element-type #-(or lispworks sbcl openmcl cmu allegro abcl ecl clisp) (error 'ironclad-error :format-control "octet streams not supported in this implementation"))) (defvar *stream-read-byte-function* (quote #+lispworks stream:stream-read-byte #+sbcl sb-gray:stream-read-byte #+openmcl gray:stream-read-byte #+cmu ext:stream-read-byte #+allegro excl:stream-read-byte #+abcl gray-streams:stream-read-byte #+(or ecl clisp) gray:stream-read-byte #-(or lispworks sbcl openmcl cmu allegro abcl ecl clisp) (error 'ironclad-error :format-control "octet streams not supported in this implementation"))) (defvar *stream-write-byte-function* (quote #+lispworks stream:stream-write-byte #+sbcl sb-gray:stream-write-byte #+openmcl gray:stream-write-byte #+cmu ext:stream-write-byte #+allegro excl:stream-write-byte #+abcl gray-streams:stream-write-byte #+(or ecl clisp) gray:stream-write-byte #-(or lispworks sbcl openmcl cmu allegro abcl ecl clisp) (error 'ironclad-error :format-control "octet streams not supported in this implementation"))) (defvar *stream-read-sequence-function* (quote #+lispworks stream:stream-read-sequence #+sbcl sb-gray:stream-read-sequence #+openmcl ccl:stream-read-vector #+cmu ext:stream-read-sequence #+allegro excl:stream-read-sequence #+abcl gray-streams:stream-read-sequence #+(or ecl clisp) gray:stream-read-sequence #-(or lispworks sbcl openmcl cmu allegro abcl ecl clisp) (error 'ironclad-error :format-control "octet streams not supported in this implementation"))) (defvar *stream-write-sequence-function* (quote #+lispworks stream:stream-write-sequence #+sbcl sb-gray:stream-write-sequence #+openmcl ccl:stream-write-vector #+cmu ext:stream-write-sequence #+allegro excl:stream-write-sequence #+abcl gray-streams:stream-write-sequence #+(or ecl clisp) gray:stream-write-sequence #-(or lispworks sbcl openmcl cmu allegro abcl ecl clisp) (error 'ironclad-error :format-control "octet streams not supported in this implementation"))) (defvar *stream-finish-output-function* (quote #+lispworks stream:stream-finish-output #+sbcl sb-gray:stream-finish-output #+openmcl gray:stream-finish-output #+cmu ext:stream-finish-output #+allegro excl:stream-finish-output #+abcl gray-streams:stream-finish-output #+(or ecl clisp) gray:stream-finish-output #-(or lispworks sbcl openmcl cmu allegro abcl ecl clisp) (error 'ironclad-error :format-control "octet streams not supported in this implementation"))) (defvar *stream-force-output-function* (quote #+lispworks stream:stream-force-output #+sbcl sb-gray:stream-force-output #+openmcl gray:stream-force-output #+cmu ext:stream-force-output #+allegro excl:stream-force-output #+abcl gray-streams:stream-force-output #+(or ecl clisp) gray:stream-force-output #-(or lispworks sbcl openmcl cmu allegro abcl ecl clisp) (error 'ironclad-error :format-control "octet streams not supported in this implementation"))) (defvar *stream-clear-output-function* (quote #+lispworks stream:stream-clear-output #+sbcl sb-gray:stream-clear-output #+openmcl gray:stream-clear-output #+cmu ext:stream-clear-output #+allegro excl:stream-clear-output #+abcl gray-streams:stream-clear-output #+(or ecl clisp) gray:stream-clear-output #-(or lispworks sbcl openmcl cmu allegro abcl ecl clisp) (error 'ironclad-error :format-control "octet streams not supported in this implementation"))) ) ;;; implementation via Gray streams ;;; These could be specialized for particular implementations by hooking ;;; in directly to the "native" stream methods for the implementation. (defclass octet-stream () ((buffer :accessor buffer :initarg :buffer :type simple-octet-vector))) (defmethod #.*stream-element-type-function* ((stream octet-stream)) '(unsigned-byte 8)) (defmacro define-stream-read-sequence (specializer type &body body) #+sbcl `(defmethod sb-gray:stream-read-sequence ((stream ,specializer) seq &optional (start 0) end) (typecase seq (,type (let ((end (or end (length seq)))) ,@body)) (t (call-next-method)))) #+cmu `(defmethod ext:stream-read-sequence ((stream ,specializer) seq &optional (start 0) end) (typecase seq (,type (let ((end (or end (length seq)))) ,@body)) (t (call-next-method)))) #+allegro `(defmethod excl:stream-read-sequence ((stream ,specializer) seq &optional (start 0) end) (typecase seq (,type (let ((end (or end (length seq)))) ,@body)) (t (call-next-method)))) #+openmcl `(defmethod ccl:stream-read-vector ((stream ,specializer) seq start end) (typecase seq (,type ,@body) (t (call-next-method)))) #+lispworks `(defmethod stream:stream-read-sequence ((stream ,specializer) seq start end) (typecase seq (,type ,@body) (t (call-next-method)))) #+abcl `(defmethod gray-streams:stream-read-sequence ((stream ,specializer) seq &optional (start 0) end) (typecase seq (,type (let ((end (or end (length seq)))) ,@body)) (t (call-next-method)))) #+ecl `(defmethod gray:stream-read-sequence ((stream ,specializer) seq &optional (start 0) end) (typecase seq (,type (let ((end (or end (length seq)))) ,@body)) (t (call-next-method)))) #+clisp `(defmethod gray:stream-read-sequence ((stream ,specializer) seq &key (start 0) end) (typecase seq (,type (let ((end (or end (length seq)))) ,@body)) (t (call-next-method))))) (defmacro define-stream-write-sequence (specializer type &body body) #+sbcl `(defmethod sb-gray:stream-write-sequence ((stream ,specializer) seq &optional (start 0) end) (typecase seq (,type (let ((end (or end (length seq)))) ,@body)) (t (call-next-method)))) #+cmu `(defmethod ext:stream-write-sequence ((stream ,specializer) seq &optional (start 0) end) (typecase seq (,type (let ((end (or end (length seq)))) ,@body)) (t (call-next-method)))) #+allegro (let ((stream-write-sequence #+(not allegro-version>=) 'stream:stream-write-sequence #+(and allegro-version>= (not (version>= 9))) 'stream:stream-write-sequence #+(and allegro-version>= (version>= 9)) 'excl:stream-write-sequence)) `(defmethod ,stream-write-sequence ((stream ,specializer) seq &optional (start 0) end) (typecase seq (,type (let ((end (or end (length seq)))) ,@body)) (t (call-next-method))))) #+openmcl `(defmethod ccl:stream-write-vector ((stream ,specializer) seq start end) (typecase seq (,type ,@body) (t (call-next-method)))) #+lispworks `(defmethod stream:stream-write-sequence ((stream ,specializer) seq start end) (typecase seq (,type ,@body) (t (call-next-method)))) #+abcl `(defmethod gray-streams:stream-write-sequence ((stream ,specializer) seq &optional (start 0) end) (typecase seq (,type (let ((end (or end (length seq)))) ,@body)) (t (call-next-method)))) #+ecl `(defmethod gray:stream-write-sequence ((stream ,specializer) seq &optional (start 0) end) (typecase seq (,type (let ((end (or end (length seq)))) ,@body)) (t (call-next-method)))) #+clisp `(defmethod gray:stream-write-sequence ((stream ,specializer) seq &key (start 0) end) (typecase seq (,type (let ((end (or end (length seq)))) ,@body)) (t (call-next-method))))) ;;; input streams (defclass octet-input-stream (octet-stream #.*binary-input-stream-class*) ((index :accessor index :initarg :index :type index) (end :accessor end :initarg :end :type index))) (defmethod #.*stream-read-byte-function* ((stream octet-input-stream)) (let ((buffer (buffer stream)) (index (index stream))) (declare (type simple-octet-vector buffer)) (cond ((>= index (end stream)) :eof) (t (setf (index stream) (1+ index)) (aref buffer index))))) (define-stream-read-sequence octet-input-stream simple-octet-vector (let ((buffer (buffer stream)) (index (index stream)) (buffer-end (end stream))) (declare (type simple-octet-vector buffer)) (let* ((remaining (- buffer-end index)) (length (- end start)) (amount (min remaining length))) (replace seq buffer :start1 start :end1 end :start2 index :end2 buffer-end) (setf (index stream) (+ index amount)) (+ start amount)))) (defun make-octet-input-stream (buffer &optional (start 0) end) "As MAKE-STRING-INPUT-STREAM, only with octets instead of characters." (declare (type simple-octet-vector buffer) (type index start) (type (or index null) end)) (let ((end (or end (length buffer)))) (make-instance 'octet-input-stream :buffer buffer :index start :end end))) (defmacro with-octet-input-stream ((var buffer &optional (start 0) end) &body body) `(with-open-stream (,var (make-octet-input-stream ,buffer ,start ,end)) ,@body)) ;;; output streams (defclass octet-output-stream (octet-stream #.*binary-output-stream-class*) ((index :accessor index :initform 0 :type index))) (defmethod #.*stream-write-byte-function* ((stream octet-output-stream) integer) (declare (type (unsigned-byte 8) integer)) (let* ((buffer (buffer stream)) (length (length buffer)) (index (index stream))) (declare (type simple-octet-vector buffer)) (when (>= index (length buffer)) (let ((new-buffer (make-array (* 2 length) :element-type '(unsigned-byte 8)))) (declare (type simple-octet-vector new-buffer)) (replace new-buffer buffer) (setf buffer new-buffer (buffer stream) new-buffer))) (setf (aref buffer index) integer (index stream) (1+ index)) integer)) (define-stream-write-sequence octet-output-stream simple-octet-vector (let* ((buffer (buffer stream)) (length (length buffer)) (index (index stream)) (amount (- end start))) (declare (type simple-octet-vector buffer)) (when (>= (+ index amount) length) (let ((new-buffer (make-array (* 2 (max amount length)) :element-type '(unsigned-byte 8)))) (declare (type simple-octet-vector new-buffer)) (replace new-buffer buffer) (setf buffer new-buffer (buffer stream) new-buffer))) (replace buffer seq :start1 index :start2 start :end2 end) (incf (index stream) amount) seq)) (defmethod #.*stream-clear-output-function* ((stream octet-output-stream)) (setf (index stream) 0) nil) (defun get-output-stream-octets (stream) "As GET-OUTPUT-STREAM-STRING, only with an octet output-stream instead of a string output-stream." (let ((buffer (buffer stream)) (index (index stream))) (setf (index stream) 0) (subseq buffer 0 index))) (defun make-octet-output-stream () "As MAKE-STRING-OUTPUT-STREAM, only with octets instead of characters." (make-instance 'octet-output-stream :buffer (make-array 128 :element-type '(unsigned-byte 8)))) (defmacro with-octet-output-stream ((var) &body body) `(with-open-stream (,var (make-octet-output-stream)) ,@body (get-output-stream-octets ,var))) ;;; digesting streams (defclass digesting-stream (#.*binary-output-stream-class*) ((digest :initarg :digest :reader stream-digest) (buffer :initform (make-array 64 :element-type '(unsigned-byte 8)) :reader stream-buffer) (position :initform 0 :reader stream-buffer-position))) (defmethod #.*stream-element-type-function* ((stream digesting-stream)) '(unsigned-byte 8)) (defun make-digesting-stream (digest &rest args) (make-instance 'digesting-stream :digest (apply #'make-digest digest args))) (defmethod #.*stream-write-byte-function* ((stream digesting-stream) byte) (declare (type (unsigned-byte 8) byte)) (with-slots (digest buffer position) stream (setf (aref buffer position) byte) (when (= (incf position) 64) (update-digest digest buffer :start 0 :end 64) (setf position 0)) byte)) (define-stream-write-sequence digesting-stream simple-octet-vector (unless (zerop (stream-buffer-position stream)) (update-digest (stream-digest stream) (stream-buffer stream) :end (stream-buffer-position stream)) (setf (slot-value stream 'position) 0)) (update-digest (stream-digest stream) seq :start start :end end) seq) (defmethod #.*stream-clear-output-function* ((stream digesting-stream)) (with-slots (digest position) stream (setf position 0) (reinitialize-instance digest) nil)) (defmethod produce-digest ((stream digesting-stream) &key digest (digest-start 0)) (with-slots ((%digest digest) buffer position) stream (unless (zerop position) (update-digest %digest buffer :start 0 :end position) (setf position 0)) (produce-digest %digest :digest digest :digest-start digest-start))) (defun execute-with-digesting-stream (digest fn) (with-open-stream (stream (make-digesting-stream digest)) (funcall fn stream) (produce-digest stream))) (defmacro with-digesting-stream ((var digest &rest args) &body body) `(with-open-stream (,var (make-digesting-stream ,digest ,@args)) ,@body (produce-digest ,var))) ;;; encrypting and decrypting streams (defclass crypting-stream () ((cipher :initarg :cipher :reader stream-cipher) (buffer :initarg :buffer :reader stream-buffer) (n-bytes-valid :initform 0 :reader stream-n-bytes-valid) (position :initform 0 :reader stream-buffer-position) (wrapped-stream :initarg :stream :reader stream-wrapped-stream))) (defmethod #.*stream-element-type-function* ((stream crypting-stream)) '(unsigned-byte 8)) (defclass encrypting-input-stream (crypting-stream #.*binary-input-stream-class*) ()) (defclass encrypting-output-stream (crypting-stream #.*binary-output-stream-class*) ()) (defclass decrypting-input-stream (crypting-stream #.*binary-input-stream-class*) ()) (defclass decrypting-output-stream (crypting-stream #.*binary-output-stream-class*) ()) (deftype stream-direction () '(member :input :output)) (defun make-encrypting-stream (stream cipher mode key &key initialization-vector (direction :output)) (declare (type stream-direction direction)) (unless (member mode '(ctr :ctr cfb :cfb cfb8 :cfb8 ofb :ofb stream :stream)) (error 'ironclad-error :format-control "Encrypting streams support only CTR, CFB, CFB8, OFB and STREAM modes")) (let* ((context (make-cipher cipher :mode mode :key key :initialization-vector initialization-vector)) (block-length (max (block-length cipher) 4096)) (buffer (make-array block-length :element-type '(unsigned-byte 8)))) (if (eq direction :input) (make-instance 'encrypting-input-stream :stream stream :cipher context :buffer buffer) (make-instance 'encrypting-output-stream :stream stream :cipher context :buffer buffer)))) (defun make-decrypting-stream (stream cipher mode key &key initialization-vector (direction :input)) (declare (type stream-direction direction)) (unless (member mode '(ctr :ctr cfb :cfb cfb8 :cfb8 ofb :ofb stream :stream)) (error 'ironclad-error :format-control "Decrypting streams support only CTR, CFB, CFB8, OFB and STREAM modes")) (let* ((context (make-cipher cipher :mode mode :key key :initialization-vector initialization-vector)) (block-length (max (block-length cipher) 4096)) (buffer (make-array block-length :element-type '(unsigned-byte 8)))) (if (eq direction :input) (make-instance 'decrypting-input-stream :stream stream :cipher context :buffer buffer) (make-instance 'decrypting-output-stream :stream stream :cipher context :buffer buffer)))) (defmethod #.*stream-read-byte-function* ((stream encrypting-input-stream)) (with-slots (wrapped-stream cipher buffer n-bytes-valid position) stream (when (= position n-bytes-valid) (setf n-bytes-valid (read-sequence buffer wrapped-stream) position 0) (when (zerop n-bytes-valid) (return-from #.*stream-read-byte-function* :eof)) (encrypt cipher buffer buffer :plaintext-end n-bytes-valid)) (prog1 (aref buffer position) (incf position)))) (defmethod #.*stream-read-byte-function* ((stream decrypting-input-stream)) (with-slots (wrapped-stream cipher buffer n-bytes-valid position) stream (when (= position n-bytes-valid) (setf n-bytes-valid (read-sequence buffer wrapped-stream) position 0) (when (zerop n-bytes-valid) (return-from #.*stream-read-byte-function* :eof)) (decrypt cipher buffer buffer :ciphertext-end n-bytes-valid)) (prog1 (aref buffer position) (incf position)))) (defmethod #.*stream-write-byte-function* ((stream encrypting-output-stream) byte) (declare (type (unsigned-byte 8) byte)) (with-slots (wrapped-stream cipher buffer) stream (setf (aref buffer 0) byte) (encrypt cipher buffer buffer :plaintext-end 1) (write-byte (aref buffer 0) wrapped-stream) byte)) (defmethod #.*stream-write-byte-function* ((stream decrypting-output-stream) byte) (declare (type (unsigned-byte 8) byte)) (with-slots (wrapped-stream cipher buffer) stream (setf (aref buffer 0) byte) (decrypt cipher buffer buffer :ciphertext-end 1) (write-byte (aref buffer 0) wrapped-stream) byte)) (define-stream-read-sequence encrypting-input-stream simple-octet-vector (with-slots (wrapped-stream cipher buffer n-bytes-valid position) stream (do ((n 0)) ((= start end) start) (when (= position n-bytes-valid) (setf n-bytes-valid (read-sequence buffer wrapped-stream) position 0) (when (zerop n-bytes-valid) (return start)) (encrypt cipher buffer buffer :plaintext-end n-bytes-valid)) (setf n (min (- end start) (- n-bytes-valid position))) (replace seq buffer :start1 start :end1 end :start2 position :end2 n-bytes-valid) (incf start n) (incf position n)))) (define-stream-read-sequence decrypting-input-stream simple-octet-vector (with-slots (wrapped-stream cipher buffer n-bytes-valid position) stream (do ((n 0)) ((= start end) start) (when (= position n-bytes-valid) (setf n-bytes-valid (read-sequence buffer wrapped-stream) position 0) (when (zerop n-bytes-valid) (return start)) (decrypt cipher buffer buffer :ciphertext-end n-bytes-valid)) (setf n (min (- end start) (- n-bytes-valid position))) (replace seq buffer :start1 start :end1 end :start2 position :end2 n-bytes-valid) (incf start n) (incf position n)))) (define-stream-write-sequence encrypting-output-stream simple-octet-vector (with-slots (wrapped-stream cipher buffer) stream (do ((buffer-length (length buffer)) (length (- end start)) (n 0)) ((zerop length)) (setf n (min buffer-length length)) (encrypt cipher seq buffer :plaintext-start start :plaintext-end (+ start n)) (write-sequence buffer wrapped-stream :end n) (decf length n) (incf start n)) seq)) (define-stream-write-sequence decrypting-output-stream simple-octet-vector (with-slots (wrapped-stream cipher buffer) stream (do ((buffer-length (length buffer)) (length (- end start)) (n 0)) ((zerop length)) (setf n (min buffer-length length)) (decrypt cipher seq buffer :ciphertext-start start :ciphertext-end (+ start n)) (write-sequence buffer wrapped-stream :end n) (decf length n) (incf start n)) seq)) (defmacro with-encrypting-stream ((var stream cipher mode key &key initialization-vector (direction :output)) &body body) `(with-open-stream (,var (make-encrypting-stream ,stream ,cipher ,mode ,key :initialization-vector ,initialization-vector :direction ,direction)) ,@body)) (defmacro with-decrypting-stream ((var stream cipher mode key &key initialization-vector (direction :input)) &body body) `(with-open-stream (,var (make-decrypting-stream ,stream ,cipher ,mode ,key :initialization-vector ,initialization-vector :direction ,direction)) ,@body)) ;;; authenticating streams (defclass authenticating-stream (#.*binary-output-stream-class*) ((mac :initarg :mac :reader stream-mac) (buffer :initform (make-array 64 :element-type '(unsigned-byte 8)) :reader stream-buffer) (position :initform 0 :reader stream-buffer-position))) (defmethod #.*stream-element-type-function* ((stream authenticating-stream)) '(unsigned-byte 8)) (defun make-authenticating-stream (mac key &rest args) (make-instance 'authenticating-stream :mac (apply #'make-mac mac key args))) (defmethod #.*stream-write-byte-function* ((stream authenticating-stream) byte) (declare (type (unsigned-byte 8) byte)) (with-slots (mac buffer position) stream (setf (aref buffer position) byte) (when (= (incf position) 64) (update-mac mac buffer :start 0 :end 64) (setf position 0)) byte)) (define-stream-write-sequence authenticating-stream simple-octet-vector (unless (zerop (stream-buffer-position stream)) (update-mac (stream-mac stream) (stream-buffer stream) :end (stream-buffer-position stream)) (setf (slot-value stream 'position) 0)) (update-mac (stream-mac stream) seq :start start :end end) seq) (defmethod produce-mac ((stream authenticating-stream) &key digest (digest-start 0)) (with-slots (mac buffer position) stream (unless (zerop position) (update-mac mac buffer :start 0 :end position) (setf position 0)) (produce-mac mac :digest digest :digest-start digest-start))) (defmacro with-authenticating-stream ((var mac key &rest args) &body body) `(with-open-stream (,var (make-authenticating-stream ,mac ,key ,@args)) ,@body (produce-mac ,var))) ironclad-0.57/src/opt/000077500000000000000000000000001420372057600146375ustar00rootroot00000000000000ironclad-0.57/src/opt/ccl/000077500000000000000000000000001420372057600154005ustar00rootroot00000000000000ironclad-0.57/src/opt/ccl/x86oid-vm.lisp000066400000000000000000000134601420372057600200360ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- #+ccl (in-package :ccl) #+(and ccl x86-64 ironclad-assembly) (progn (defx86lapfunction ironclad::%ub32ref/le ((vector arg_y) (offset arg_z)) (unbox-fixnum offset imm0) (addq (% imm0) (% vector)) (movl (@ x8664::misc-data-offset (% vector)) (% imm0.l)) (box-fixnum imm0 arg_z) (single-value-return)) (defx86lapfunction ironclad::%ub32set/le ((value arg_x) (vector arg_y) (offset arg_z)) (unbox-fixnum offset imm0) (unbox-fixnum value imm1) (addq (% imm0) (% vector)) (movl (% imm1.l) (@ x8664::misc-data-offset (% vector))) (retq)) (defx86lapfunction ironclad::%ub32ref/be ((vector arg_y) (offset arg_z)) (unbox-fixnum offset imm0) (addq (% imm0) (% vector)) (movl (@ x8664::misc-data-offset (% vector)) (% imm0.l)) (bswapl (% imm0.l)) (box-fixnum imm0 arg_z) (single-value-return)) (defx86lapfunction ironclad::%ub32set/be ((value arg_x) (vector arg_y) (offset arg_z)) (unbox-fixnum offset imm0) (unbox-fixnum value imm1) (bswapl (% imm1.l)) (addq (% imm0) (% vector)) (movl (% imm1.l) (@ x8664::misc-data-offset (% vector))) (retq)) (defx86lapfunction ironclad::%ub64ref/le ((vector arg_y) (offset arg_z)) (save-simple-frame) (unbox-fixnum offset imm0) (addq (% imm0) (% vector)) (movq (@ x8664::misc-data-offset (% vector)) (% imm0)) (restore-simple-frame) (jmp-subprim .SPmakeu64)) (defx86lapfunction ironclad::%ub64set/le ((value arg_x) (vector arg_y) (offset arg_z)) (unbox-fixnum offset imm0) (addq (% imm0) (% vector)) (movq (% value) (% arg_z)) (call-subprim .SPgetu64) (movq (% imm0) (@ x8664::misc-data-offset (% vector))) (retq)) (defx86lapfunction ironclad::%ub64ref/be ((vector arg_y) (offset arg_z)) (save-simple-frame) (unbox-fixnum offset imm0) (addq (% imm0) (% vector)) (movq (@ x8664::misc-data-offset (% vector)) (% imm0)) (bswapq (% imm0)) (restore-simple-frame) (jmp-subprim .SPmakeu64)) (defx86lapfunction ironclad::%ub64set/be ((value arg_x) (vector arg_y) (offset arg_z)) (unbox-fixnum offset imm0) (addq (% imm0) (% vector)) (movq (% value) (% arg_z)) (call-subprim .SPgetu64) (bswapq (% imm0)) (movq (% imm0) (@ x8664::misc-data-offset (% vector))) (retq)) (defx86lapfunction ironclad::%mod32+ ((a arg_y) (b arg_z)) (unbox-fixnum a imm0) (unbox-fixnum b imm1) (addl (% imm1.l) (% imm0.l)) (box-fixnum imm0 arg_z) (single-value-return)) (defx86lapfunction ironclad::%mod32- ((a arg_y) (b arg_z)) (unbox-fixnum a imm0) (unbox-fixnum b imm1) (subl (% imm1.l) (% imm0.l)) (box-fixnum imm0 arg_z) (single-value-return)) (defx86lapfunction ironclad::%mod32* ((a arg_y) (b arg_z)) (unbox-fixnum a imm0) (unbox-fixnum b imm1) (imull (% imm1.l) (% imm0.l)) (box-fixnum imm0 arg_z) (single-value-return)) (defx86lapfunction ironclad::%mod32ash ((number arg_y) (count arg_z)) (unbox-fixnum number imm0) (unbox-fixnum count imm2) (testb (% imm2.b) (% imm2.b)) (js :right) (shll (% imm2.b) (% imm0.l)) (jmp :end) :right (negb (% imm2.b)) (shrl (% imm2.b) (% imm0.l)) :end (box-fixnum imm0 arg_z) (single-value-return)) (defx86lapfunction ironclad::%mod32lognot ((number arg_z)) (unbox-fixnum number imm0) (notl (% imm0.l)) (box-fixnum imm0 arg_z) (single-value-return)) (defx86lapfunction ironclad::%rol32 ((number arg_y) (count arg_z)) (unbox-fixnum number imm0) (unbox-fixnum count imm2) (roll (% imm2.b) (% imm0.l)) (box-fixnum imm0 arg_z) (single-value-return)) (defx86lapfunction ironclad::%ror32 ((number arg_y) (count arg_z)) (unbox-fixnum number imm0) (unbox-fixnum count imm2) (rorl (% imm2.b) (% imm0.l)) (box-fixnum imm0 arg_z) (single-value-return)) (defx86lapfunction ironclad::%mod64+ ((a arg_y) (b arg_z)) (save-simple-frame) (call-subprim .SPgetu64) (movq (% imm0) (% imm1)) (movq (% a) (% arg_z)) (call-subprim .SPgetu64) (addq (% imm1) (% imm0)) (restore-simple-frame) (jmp-subprim .SPmakeu64)) (defx86lapfunction ironclad::%mod64- ((a arg_y) (b arg_z)) (save-simple-frame) (call-subprim .SPgetu64) (movq (% imm0) (% imm1)) (movq (% a) (% arg_z)) (call-subprim .SPgetu64) (subq (% imm1) (% imm0)) (restore-simple-frame) (jmp-subprim .SPmakeu64)) (defx86lapfunction ironclad::%mod64* ((a arg_y) (b arg_z)) (save-simple-frame) (call-subprim .SPgetu64) (movq (% imm0) (% imm1)) (movq (% a) (% arg_z)) (call-subprim .SPgetu64) (imulq (% imm1) (% imm0)) (restore-simple-frame) (jmp-subprim .SPmakeu64)) (defx86lapfunction ironclad::%mod64ash ((number arg_y) (count arg_z)) (save-simple-frame) (unbox-fixnum count imm2) (movq (% number) (% arg_z)) (call-subprim .SPgetu64) (testb (% imm2.b) (% imm2.b)) (js :right) (shlq (% imm2.b) (% imm0)) (jmp :end) :right (negb (% imm2.b)) (shrq (% imm2.b) (% imm0)) :end (restore-simple-frame) (jmp-subprim .SPmakeu64)) (defx86lapfunction ironclad::%mod64lognot ((number arg_z)) (save-simple-frame) (call-subprim .SPgetu64) (notq (% imm0)) (restore-simple-frame) (jmp-subprim .SPmakeu64)) (defx86lapfunction ironclad::%rol64 ((number arg_y) (count arg_z)) (save-simple-frame) (unbox-fixnum count imm2) (movq (% number) (% arg_z)) (call-subprim .SPgetu64) (rolq (% imm2.b) (% imm0)) (restore-simple-frame) (jmp-subprim .SPmakeu64)) (defx86lapfunction ironclad::%ror64 ((number arg_y) (count arg_z)) (save-simple-frame) (unbox-fixnum count imm2) (movq (% number) (% arg_z)) (call-subprim .SPgetu64) (rorq (% imm2.b) (% imm0)) (restore-simple-frame) (jmp-subprim .SPmakeu64))) ironclad-0.57/src/opt/ecl/000077500000000000000000000000001420372057600154025ustar00rootroot00000000000000ironclad-0.57/src/opt/ecl/c-functions.lisp000066400000000000000000000111141420372057600205210ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto) #+(and ecl ironclad-assembly) (progn (ffi:clines " #define ROTL32(v, c) \\ (((v) << (c)) | ((v) >> (32 - (c)))) #define CHACHA_QUARTER_ROUND(a, b, c, d) \\ x[a] += x[b]; x[d] = ROTL32(x[d] ^ x[a], 16); \\ x[c] += x[d]; x[b] = ROTL32(x[b] ^ x[c], 12); \\ x[a] += x[b]; x[d] = ROTL32(x[d] ^ x[a], 8); \\ x[c] += x[d]; x[b] = ROTL32(x[b] ^ x[c], 7); #define SALSA_QUARTER_ROUND(a, b, c, d) \\ x[a] ^= ROTL32(x[d] + x[c], 7); \\ x[b] ^= ROTL32(x[a] + x[d], 9); \\ x[c] ^= ROTL32(x[b] + x[a], 13); \\ x[d] ^= ROTL32(x[c] + x[b], 18); ") (declaim (inline x-chacha-core)) (defun x-chacha-core (n-rounds buffer state) (ffi:c-inline (n-rounds buffer state) (:unsigned-int t t) :void "{ unsigned int n_rounds = #0; uint8_t *buffer = (#1)->array.self.b8; uint32_t *state = (#2)->array.self.b32; unsigned int i; uint32_t x[16]; for(i = 0; i < 16; i++) x[i] = state[i]; for(i = 0; i < n_rounds; i++) { CHACHA_QUARTER_ROUND(0, 4, 8, 12); CHACHA_QUARTER_ROUND(1, 5, 9, 13); CHACHA_QUARTER_ROUND(2, 6, 10, 14); CHACHA_QUARTER_ROUND(3, 7, 11, 15); CHACHA_QUARTER_ROUND(0, 5, 10, 15); CHACHA_QUARTER_ROUND(1, 6, 11, 12); CHACHA_QUARTER_ROUND(2, 7, 8, 13); CHACHA_QUARTER_ROUND(3, 4, 9, 14); } for(i = 0; i < 16; i++) x[i] += state[i]; for(i = 0; i < 16; i++) { buffer[4 * i] = x[i] & 0xff; buffer[4 * i + 1] = (x[i] >> 8) & 0xff; buffer[4 * i + 2] = (x[i] >> 16) & 0xff; buffer[4 * i + 3] = (x[i] >> 24) & 0xff; } }")) (declaim (inline x-salsa-core)) (defun x-salsa-core (n-rounds buffer state) (ffi:c-inline (n-rounds buffer state) (:unsigned-int t t) :void "{ unsigned int n_rounds = #0; uint8_t *buffer = (#1)->array.self.b8; uint32_t *state = (#2)->array.self.b32; unsigned int i; uint32_t x[16]; for(i = 0; i < 16; i++) x[i] = state[i]; for(i = 0; i < n_rounds; i++) { SALSA_QUARTER_ROUND(4, 8, 12, 0); SALSA_QUARTER_ROUND(9, 13, 1, 5); SALSA_QUARTER_ROUND(14, 2, 6, 10); SALSA_QUARTER_ROUND(3, 7, 11, 15); SALSA_QUARTER_ROUND(1, 2, 3, 0); SALSA_QUARTER_ROUND(6, 7, 4, 5); SALSA_QUARTER_ROUND(11, 8, 9, 10); SALSA_QUARTER_ROUND(12, 13, 14, 15); } for(i = 0; i < 16; i++) x[i] += state[i]; for(i = 0; i < 16; i++) { buffer[4 * i] = x[i] & 0xff; buffer[4 * i + 1] = (x[i] >> 8) & 0xff; buffer[4 * i + 2] = (x[i] >> 16) & 0xff; buffer[4 * i + 3] = (x[i] >> 24) & 0xff; } }")) (declaim (inline poly1305-process-block)) (defun poly1305-process-block (h0 h1 h2 h3 h4 r0 r1 r2 r3 rr0 rr1 rr2 rr3 hibit data start) (ffi:c-inline (h0 h1 h2 h3 h4 r0 r1 r2 r3 rr0 rr1 rr2 rr3 hibit data start) (:uint32-t :uint32-t :uint32-t :uint32-t :uint32-t :uint32-t :uint32-t :uint32-t :uint32-t :uint32-t :uint32-t :uint32-t :uint32-t :uint32-t t :unsigned-int) (values :uint32-t :uint32-t :uint32-t :uint32-t :uint32-t) "{ uint32_t h0 = #0; uint32_t h1 = #1; uint32_t h2 = #2; uint32_t h3 = #3; uint32_t h4 = #4; uint32_t r0 = #5; uint32_t r1 = #6; uint32_t r2 = #7; uint32_t r3 = #8; uint32_t rr0 = #9; uint32_t rr1 = #a; uint32_t rr2 = #b; uint32_t rr3 = #c; uint32_t hibit = #d; unsigned int start = #f; uint8_t *data = (#e)->array.self.b8 + start; uint32_t c0 = data[0] + (data[1] << 8) + (data[2] << 16) + (data[3] << 24); uint32_t c1 = data[4] + (data[5] << 8) + (data[6] << 16) + (data[7] << 24); uint32_t c2 = data[8] + (data[9] << 8) + (data[10] << 16) + (data[11] << 24); uint32_t c3 = data[12] + (data[13] << 8) + (data[14] << 16) + (data[15] << 24); uint64_t s0 = h0 + (uint64_t) c0; uint64_t s1 = h1 + (uint64_t) c1; uint64_t s2 = h2 + (uint64_t) c2; uint64_t s3 = h3 + (uint64_t) c3; uint32_t s4 = h4 + hibit; uint64_t x0 = (s0 * r0) + (s1 * rr3) + (s2 * rr2) + (s3 * rr1) + (s4 * rr0); uint64_t x1 = (s0 * r1) + (s1 * r0) + (s2 * rr3) + (s3 * rr2) + (s4 * rr1); uint64_t x2 = (s0 * r2) + (s1 * r1) + (s2 * r0) + (s3 * rr3) + (s4 * rr2); uint64_t x3 = (s0 * r3) + (s1 * r2) + (s2 * r1) + (s3 * r0) + (s4 * rr3); uint32_t x4 = s4 * (r0 & 3); uint32_t u5 = x4 + (x3 >> 32); uint64_t u0 = ((u5 >> 2) * 5) + (x0 & 0xffffffff); uint64_t u1 = (u0 >> 32) + (x1 & 0xffffffff) + (x0 >> 32); uint64_t u2 = (u1 >> 32) + (x2 & 0xffffffff) + (x1 >> 32); uint64_t u3 = (u2 >> 32) + (x3 & 0xffffffff) + (x2 >> 32); uint64_t u4 = (u3 >> 32) + (u5 & 3); @(return 0) = u0 & 0xffffffff; @(return 1) = u1 & 0xffffffff; @(return 2) = u2 & 0xffffffff; @(return 3) = u3 & 0xffffffff; @(return 4) = u4 & 0xffffffff; }"))) ironclad-0.57/src/opt/sbcl/000077500000000000000000000000001420372057600155625ustar00rootroot00000000000000ironclad-0.57/src/opt/sbcl/cpu-features.lisp000066400000000000000000000023361420372057600210620ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto) ;;; Check what features are supported by the CPU #+(and sbcl x86-64) (sb-ext:defglobal aes-ni-support-known-p nil) #+(and sbcl x86-64) (sb-ext:defglobal aes-ni-supported-p nil) #+(and sbcl x86-64) (declaim (inline aes-ni-supported-p)) #+(and sbcl x86-64) (defun aes-ni-supported-p () (declare (optimize (speed 3) (space 0) (debug 0) (safety 0))) #+ironclad-assembly (if aes-ni-support-known-p aes-ni-supported-p (setf aes-ni-support-known-p t aes-ni-supported-p (aes-ni-support-p))) #-ironclad-assembly nil) #+(and sbcl x86-64) (sb-ext:defglobal pclmulqdq-support-known-p nil) #+(and sbcl x86-64) (sb-ext:defglobal pclmulqdq-supported-p nil) #+(and sbcl x86-64) (declaim (inline pclmulqdq-supported-p)) #+(and sbcl x86-64) (defun pclmulqdq-supported-p () (declare (optimize (speed 3) (space 0) (debug 0) (safety 0))) #+ironclad-assembly (if pclmulqdq-support-known-p pclmulqdq-supported-p (setf pclmulqdq-support-known-p t pclmulqdq-supported-p (pclmulqdq-support-p))) #-ironclad-assembly nil) ironclad-0.57/src/opt/sbcl/fndb.lisp000066400000000000000000000100631420372057600173640ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- #+sbcl (in-package :sb-c) #+(and sbcl (or x86 x86-64) ironclad-assembly) (progn (defknown (ironclad::fill-block-ub8-le ironclad::fill-block-ub8-be) ((simple-array (unsigned-byte 32) (*)) (simple-array (unsigned-byte 8) (*)) (integer 0 #.(- array-dimension-limit 64))) (values) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::fill-block-ub8-le/64 ((simple-array (unsigned-byte 64) (*)) (simple-array (unsigned-byte 8) (*)) (integer 0 #.(- array-dimension-limit 64))) (values) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::fill-block-ub8-be/64 ((simple-array (unsigned-byte 64) (*)) (simple-array (unsigned-byte 8) (*)) (integer 0 #.(- array-dimension-limit 128))) (values) (any) :overwrite-fndb-silently t) (defknown ironclad::expand-block ((simple-array (unsigned-byte 32) (*))) (values) (any) :overwrite-fndb-silently t) (defknown ironclad::%update-sha1-block ((simple-array (unsigned-byte 32) (*)) (simple-array (unsigned-byte 32) (*))) (simple-array (unsigned-byte 32) (*)) (any) :overwrite-fndb-silently t) (defknown ironclad::sha256-expand-block ((simple-array (unsigned-byte 32) (*))) (values) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::x-salsa-core ((signed-byte 61) (simple-array (unsigned-byte 8) (*)) (simple-array (unsigned-byte 32) (*))) (values) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::x-chacha-core ((signed-byte 61) (simple-array (unsigned-byte 8) (*)) (simple-array (unsigned-byte 32) (*))) (values) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::pclmulqdq-support-p () (boolean) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::aes-ni-support-p () (boolean) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::aes-ni-generate-round-keys ((simple-array (unsigned-byte 8) (*)) (unsigned-byte 64) (simple-array (unsigned-byte 32) (*)) (simple-array (unsigned-byte 32) (*))) (values) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::aes-ni-encrypt ((simple-array (unsigned-byte 8) (*)) (unsigned-byte 64) (simple-array (unsigned-byte 8) (*)) (unsigned-byte 64) (simple-array (unsigned-byte 32) (*)) (integer 0 14)) (values) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::aes-ni-decrypt ((simple-array (unsigned-byte 8) (*)) (unsigned-byte 64) (simple-array (unsigned-byte 8) (*)) (unsigned-byte 64) (simple-array (unsigned-byte 32) (*)) (integer 0 14)) (values) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::fast-blake2s-mixing ((unsigned-byte 32) (unsigned-byte 32) (unsigned-byte 32) (unsigned-byte 32) (unsigned-byte 32) (unsigned-byte 32)) (values (unsigned-byte 32) (unsigned-byte 32) (unsigned-byte 32) (unsigned-byte 32)) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::gmac-mul-fast ((simple-array (unsigned-byte 8) (*)) (simple-array (unsigned-byte 8) (*))) (values) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::xor128 ((simple-array (unsigned-byte 8) (*)) (integer 0 #.array-dimension-limit) (simple-array (unsigned-byte 8) (*)) (integer 0 #.array-dimension-limit) (simple-array (unsigned-byte 8) (*)) (integer 0 #.array-dimension-limit)) (values) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::mov128 ((simple-array (unsigned-byte 8) (*)) (integer 0 #.array-dimension-limit) (simple-array (unsigned-byte 8) (*)) (integer 0 #.array-dimension-limit)) (values) (any) :overwrite-fndb-silently t) (defknown ironclad::swap32 ((unsigned-byte 32)) (unsigned-byte 32) (any) :overwrite-fndb-silently t) #+x86-64 (defknown ironclad::swap64 ((unsigned-byte 64)) (unsigned-byte 64) (any) :overwrite-fndb-silently t) (defknown ironclad::inc-counter-block ((integer 0 #.most-positive-fixnum) (simple-array (unsigned-byte 8) (*))) (values) (any) :overwrite-fndb-silently t) );#+sbcl ironclad-0.57/src/opt/sbcl/x86oid-vm.lisp000066400000000000000000001161701420372057600202220ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- #+(and sbcl (or x86 x86-64) ironclad-assembly) (defpackage :ironclad-vm ;; more recent SBCL exports various symbols making this package ;; definition more concise. This is the backward-compatible way. (:use #:common-lisp #:sb-c ; for DEFINE-VOP and SC-IS #:sb-assem ; for INST, GEN-LABEL #:sb-vm) ; for primtype names, SCs, constants (:shadow #:ea) ; in case SB-VM exports it (:import-from #:sb-vm #:positive-fixnum #:unsigned-num #:descriptor-reg #:unsigned-reg #:double-reg #:immediate #:simple-array-unsigned-byte-8 #:simple-array-unsigned-byte-32 #+x86-64 #:simple-array-unsigned-byte-64 #+x86-64 #:rax-offset #+x86-64 #:rcx-offset)) #+(and sbcl (or x86 x86-64) ironclad-assembly) (in-package :ironclad-vm) #+(and sbcl x86 ironclad-assembly) (eval-when (:compile-toplevel :load-toplevel :execute) (defun ea (displacement &optional base index (scale 1)) (sb-vm::make-ea :dword :base base :index index :scale scale :disp (or displacement 0))) (setf (fdefinition 'dword-ea) (fdefinition 'ea)) (defmacro dword-inst (name &rest operands) `(inst ,name ,@operands))) #+(and sbcl x86-64 ironclad-assembly) (eval-when (:compile-toplevel :load-toplevel :execute) #+ironclad-sb-vm-ea (progn ; Newer SBCL (>= 1.4.11) (setf (fdefinition 'ea) (fdefinition 'sb-vm::ea)) (setf (fdefinition 'dword-ea) (fdefinition 'ea)) (defmacro dword-inst (name &rest operands) (case name (bswap ;; The '(bswap :dword r)' notation is only supported ;; on SBCL > 1.5.9. (if (ignore-errors (sb-ext:assert-version->= 1 5 9 17) t) `(inst bswap :dword ,@operands) `(inst bswap (sb-vm::reg-in-size ,@operands :dword)))) (t `(inst ,name :dword ,@operands))))) #-ironclad-sb-vm-ea (progn ; Older SBCL (< 1.4.11) (defun ea (displacement &optional base index (scale 1)) (sb-vm::make-ea :qword :base base :index index :scale scale :disp (or displacement 0))) (defun dword-ea (displacement &optional base index (scale 1)) (sb-vm::make-ea :dword :base base :index index :scale scale :disp (or displacement 0))) (defmacro dword-inst (name &rest operands) `(inst ,name ,@(mapcar (lambda (operand) `(if (tn-p ,operand) (sb-vm::reg-in-size ,operand :dword) ,operand)) operands))))) #+(and sbcl (or x86 x86-64) ironclad-assembly) (progn (define-vop (fill-block-ub8) (:policy :fast-safe) (:args (block :scs (descriptor-reg)) (buffer :scs (descriptor-reg)) (offset :scs (unsigned-reg immediate) :target buffer-index)) (:variant-vars big-endian-p bytes-to-copy 64-bit-p) (:temporary (:sc unsigned-reg) temp buffer-index block-index) (:generator 50 (let* ((data-offset (- (* n-word-bytes vector-data-offset) other-pointer-lowtag)) (block-disp (+ data-offset bytes-to-copy)) (immediate-offset (sc-is offset immediate)) (unroll (if immediate-offset 2 1)) (loop (gen-label))) (flet ((ea-for-buffer (&optional (offset 0)) (if immediate-offset (ea (+ block-disp offset) buffer block-index n-word-bytes) (ea data-offset buffer buffer-index))) (ea-for-block (&optional (offset 0)) (ea (+ block-disp offset) block block-index n-word-bytes)) (handle-endianness (x) (when big-endian-p (inst bswap x) #+x86-64 (unless 64-bit-p (inst rol x 32))))) (unless immediate-offset (move buffer-index offset)) (inst mov block-index (- (truncate bytes-to-copy n-word-bytes))) (emit-label loop) (inst mov temp (ea-for-buffer 0)) (when immediate-offset (inst mov buffer-index (ea-for-buffer n-word-bytes))) (handle-endianness temp) (when immediate-offset (handle-endianness buffer-index)) (inst mov (ea-for-block) temp) (when immediate-offset (inst mov (ea-for-block n-word-bytes) buffer-index)) (unless immediate-offset (inst add buffer-index n-word-bytes)) (inst add block-index unroll) (inst jmp :nz loop))))) (define-vop (fill-block-ub8-le fill-block-ub8) (:translate ironclad::fill-block-ub8-le) (:arg-types simple-array-unsigned-byte-32 simple-array-unsigned-byte-8 positive-fixnum) (:variant nil 64 nil)) (define-vop (fill-block-ub8-be fill-block-ub8) (:translate ironclad::fill-block-ub8-be) (:arg-types simple-array-unsigned-byte-32 simple-array-unsigned-byte-8 positive-fixnum) (:variant t 64 nil)) #+x86-64 (define-vop (fill-block-ub8-le/64 fill-block-ub8) (:translate ironclad::fill-block-ub8-le/64) (:arg-types simple-array-unsigned-byte-64 simple-array-unsigned-byte-8 positive-fixnum) ;; Yes. Really. Inconsistent naming FTW. (:variant nil 64 t)) #+x86-64 (define-vop (fill-block-ub8-be/64 fill-block-ub8) (:translate ironclad::fill-block-ub8-be/64) (:arg-types simple-array-unsigned-byte-64 simple-array-unsigned-byte-8 positive-fixnum) (:variant t 128 t)) (define-vop (expand-block) (:translate ironclad::expand-block) (:policy :fast-safe) (:args (block :scs (descriptor-reg))) (:arg-types simple-array-unsigned-byte-32) (:temporary (:sc unsigned-reg) temp count) (:generator 100 (flet ((block-word (elem-offset) (let ((disp (+ (- (* n-word-bytes vector-data-offset) other-pointer-lowtag) (* 4 elem-offset)))) (dword-ea disp block count 4)))) (let ((loop (gen-label))) (inst mov count 16) (emit-label loop) (dword-inst mov temp (block-word -3)) (dword-inst xor temp (block-word -8)) (dword-inst xor temp (block-word -14)) (dword-inst xor temp (block-word -16)) (dword-inst rol temp 1) (dword-inst mov (block-word 0) temp) (inst add count 1) (inst cmp count 79) (inst jmp :le loop))))) (define-vop (sha256-expand-block) (:translate ironclad::sha256-expand-block) (:policy :fast-safe) (:args (block :scs (descriptor-reg))) (:arg-types simple-array-unsigned-byte-32) (:temporary (:sc unsigned-reg) t1 t2 t3 t4 count) (:generator 100 (flet ((block-word (elem-offset) (let ((disp (+ (- (* n-word-bytes vector-data-offset) other-pointer-lowtag) (* 4 elem-offset)))) (dword-ea disp block count 4)))) (let ((loop (gen-label))) ;; The code could definitely be improved for x86-64 by using ;; more temporaries, but this version works on both 32- and ;; 64-bit and eliminates many of the stupidities in the modular ;; arithmetic version (mostly on 64-bit, but some lameness in ;; the 32-bit version as well). (inst mov count 16) (emit-label loop) (dword-inst mov t1 (block-word -2)) ;; sigma1 (dword-inst mov t2 t1) (dword-inst rol t2 15) (dword-inst mov t3 t1) (dword-inst rol t3 13) (dword-inst xor t2 t3) (dword-inst shr t1 10) (dword-inst xor t1 t2) (dword-inst mov t2 (block-word -15)) ;; sigma0 (dword-inst mov t3 t2) (dword-inst rol t3 25) (dword-inst mov t4 t2) (dword-inst rol t4 14) (dword-inst xor t3 t4) (dword-inst shr t2 3) (dword-inst xor t2 t3) (dword-inst add t1 (block-word -7)) (dword-inst add t2 (block-word -16)) (dword-inst add t1 t2) (dword-inst mov (block-word 0) t1) (inst add count 1) (inst cmp count 63) (inst jmp :le loop))))) ;;; Implementing this for x86 would require nasty hacks with ;;; pseudo-atomic. Might just be worth it for the speed increase, ;;; though. The code is also probably not scheduled optimally. #+x86-64 (define-vop (update-sha1-block) (:translate ironclad::%update-sha1-block) (:policy :fast-safe) (:args (regs :scs (descriptor-reg) :target result) (block :scs (descriptor-reg))) (:arg-types simple-array-unsigned-byte-32 simple-array-unsigned-byte-32) (:results (result :scs (descriptor-reg))) (:result-types simple-array-unsigned-byte-32) (:temporary (:sc unsigned-reg) a b c d e t1 t2) (:generator 1000 (let ((k1 #x5a827999) (k2 #x6ed9eba1) (k3 #x-70e44324) (k4 #x-359d3e2a)) (labels ((block/reg-ea (base index) (let ((disp (+ (- (* n-word-bytes vector-data-offset) other-pointer-lowtag) (* 4 index)))) (dword-ea disp base))) (f1 (a b c d e n) (dword-inst mov t2 a) (dword-inst mov t1 c) (dword-inst rol t2 5) (dword-inst xor t1 d) (dword-inst add t2 (block/reg-ea block n)) (dword-inst and t1 b) (dword-inst xor t1 d) (dword-inst lea e (ea k1 t1 e)) (dword-inst rol b 30) (dword-inst add e t2)) (f2/4 (a b c d e n k) (dword-inst mov t2 a) (dword-inst mov t1 d) (dword-inst rol t2 5) (dword-inst xor t1 c) (dword-inst add t2 (block/reg-ea block n)) (dword-inst xor t1 b) (dword-inst lea e (ea k t1 e)) (dword-inst rol b 30) (dword-inst add e t2)) (f2 (a b c d e n) (f2/4 a b c d e n k2)) (f4 (a b c d e n) (f2/4 a b c d e n k4)) (f3 (a b c d e n) (dword-inst mov t2 c) (dword-inst mov t1 c) (dword-inst and t2 b) (dword-inst or t1 b) (dword-inst and t1 d) (dword-inst or t1 t2) (dword-inst mov t2 a) (dword-inst rol t2 5) (dword-inst add t2 (block/reg-ea block n)) (dword-inst rol b 30) (dword-inst lea e (ea k3 t1 e)) (dword-inst add e t2)) (sha1-rounds (start end f) (let ((xvars (ironclad::make-circular-list a b c d e))) (loop for i from start upto end for vars on xvars by #'cddddr do (multiple-value-bind (a b c d e) (apply #'values (ironclad::circular-list-subseq vars 0 5)) (funcall f a b c d e i)))))) (dword-inst mov a (block/reg-ea regs 0)) (dword-inst mov b (block/reg-ea regs 1)) (dword-inst mov c (block/reg-ea regs 2)) (dword-inst mov d (block/reg-ea regs 3)) (dword-inst mov e (block/reg-ea regs 4)) (sha1-rounds 0 19 #'f1) (sha1-rounds 20 39 #'f2) (sha1-rounds 40 59 #'f3) (sha1-rounds 60 79 #'f4) (dword-inst add (block/reg-ea regs 0) a) (dword-inst add (block/reg-ea regs 1) b) (dword-inst add (block/reg-ea regs 2) c) (dword-inst add (block/reg-ea regs 3) d) (dword-inst add (block/reg-ea regs 4) e) (move result regs))))) #+x86-64 (define-vop (salsa-core-fast) (:translate ironclad::x-salsa-core) (:policy :fast-safe) (:args (buffer :scs (descriptor-reg)) (state :scs (descriptor-reg))) (:info n-rounds) (:arg-types (:constant (signed-byte 61)) simple-array-unsigned-byte-8 simple-array-unsigned-byte-32) (:temporary (:sc double-reg) x0 x1 x2 x3) (:temporary (:sc unsigned-reg) r0 r1 r2 r3 temp count) (:generator 1000 (labels ((nth-xmm-mem (base i) (let ((disp (+ (- (* n-word-bytes vector-data-offset) other-pointer-lowtag) (* 16 i)))) (ea disp base))) (nth-buffer-dword (i) (let ((disp (+ (- (* n-word-bytes vector-data-offset) other-pointer-lowtag) (* 4 i)))) (dword-ea disp buffer))) (quarter-round (y0 y1 y2 y3) ;; x[y0] = XOR(x[y0],ROTATE(PLUS(x[y3],x[y2]), 7)); ;; x[y1] = XOR(x[y1],ROTATE(PLUS(x[y0],x[y3]), 9)); ;; x[y2] = XOR(x[y2],ROTATE(PLUS(x[y1],x[y0]),13)); ;; x[y3] = XOR(x[y3],ROTATE(PLUS(x[y2],x[y1]),18)); (dword-inst mov r2 (nth-buffer-dword y2)) (dword-inst mov r3 (nth-buffer-dword y3)) (dword-inst lea r0 (ea 0 r3 r2)) (dword-inst rol r0 7) (dword-inst xor r0 (nth-buffer-dword y0)) (dword-inst lea r1 (ea 0 r0 r3)) (dword-inst rol r1 9) (dword-inst xor r1 (nth-buffer-dword y1)) (dword-inst lea temp (ea 0 r1 r0)) (dword-inst rol temp 13) (dword-inst xor r2 temp) (dword-inst lea temp (ea 0 r2 r1)) (dword-inst rol temp 18) (dword-inst xor r3 temp) (dword-inst mov (nth-buffer-dword y0) r0) (dword-inst mov (nth-buffer-dword y1) r1) (dword-inst mov (nth-buffer-dword y2) r2) (dword-inst mov (nth-buffer-dword y3) r3))) ;; copy state to the output buffer (inst movdqu x0 (nth-xmm-mem state 0)) (inst movdqu x1 (nth-xmm-mem state 1)) (inst movdqu x2 (nth-xmm-mem state 2)) (inst movdqu x3 (nth-xmm-mem state 3)) (inst movdqu (nth-xmm-mem buffer 0) x0) (inst movdqu (nth-xmm-mem buffer 1) x1) (inst movdqu (nth-xmm-mem buffer 2) x2) (inst movdqu (nth-xmm-mem buffer 3) x3) (let ((repeat (gen-label))) (inst mov count n-rounds) (emit-label repeat) (quarter-round 4 8 12 0) (quarter-round 9 13 1 5) (quarter-round 14 2 6 10) (quarter-round 3 7 11 15) (quarter-round 1 2 3 0) (quarter-round 6 7 4 5) (quarter-round 11 8 9 10) (quarter-round 12 13 14 15) (inst sub count 1) (inst jmp :nz repeat)) (inst paddd x0 (nth-xmm-mem buffer 0)) (inst paddd x1 (nth-xmm-mem buffer 1)) (inst paddd x2 (nth-xmm-mem buffer 2)) (inst paddd x3 (nth-xmm-mem buffer 3)) (inst movdqu (nth-xmm-mem buffer 0) x0) (inst movdqu (nth-xmm-mem buffer 1) x1) (inst movdqu (nth-xmm-mem buffer 2) x2) (inst movdqu (nth-xmm-mem buffer 3) x3)))) #+x86-64 (define-vop (chacha-core-fast) (:translate ironclad::x-chacha-core) (:policy :fast-safe) (:args (buffer :scs (descriptor-reg)) (state :scs (descriptor-reg))) (:info n-rounds) (:arg-types (:constant (signed-byte 61)) simple-array-unsigned-byte-8 simple-array-unsigned-byte-32) (:temporary (:sc double-reg) x0 x1 x2 x3 y0 y1 y2 y3 t0) (:temporary (:sc unsigned-reg) count) (:generator 1000 (flet ((nth-xmm-mem (base i) (let ((disp (+ (- (* n-word-bytes vector-data-offset) other-pointer-lowtag) (* 16 i)))) (ea disp base))) (chacha-round () (inst paddd y0 y1) (inst pxor y3 y0) (inst movdqa t0 y3) (inst pslld-imm y3 16) (inst psrld-imm t0 16) (inst por y3 t0) (inst paddd y2 y3) (inst pxor y1 y2) (inst movdqa t0 y1) (inst pslld-imm y1 12) (inst psrld-imm t0 20) (inst por y1 t0) (inst paddd y0 y1) (inst pxor y3 y0) (inst movdqa t0 y3) (inst pslld-imm y3 8) (inst psrld-imm t0 24) (inst por y3 t0) (inst paddd y2 y3) (inst pxor y1 y2) (inst movdqa t0 y1) (inst pslld-imm y1 7) (inst psrld-imm t0 25) (inst por y1 t0))) (inst movdqu x0 (nth-xmm-mem state 0)) (inst movdqu x1 (nth-xmm-mem state 1)) (inst movdqu x2 (nth-xmm-mem state 2)) (inst movdqu x3 (nth-xmm-mem state 3)) (inst movdqa y0 x0) (inst movdqa y1 x1) (inst movdqa y2 x2) (inst movdqa y3 x3) (let ((repeat (gen-label))) (inst mov count n-rounds) (emit-label repeat) (chacha-round) (inst pshufd y1 y1 #b00111001) (inst pshufd y2 y2 #b01001110) (inst pshufd y3 y3 #b10010011) (chacha-round) (inst pshufd y1 y1 #b10010011) (inst pshufd y2 y2 #b01001110) (inst pshufd y3 y3 #b00111001) (inst sub count 1) (inst jmp :nz repeat)) (inst paddd x0 y0) (inst paddd x1 y1) (inst paddd x2 y2) (inst paddd x3 y3) (inst movdqu (nth-xmm-mem buffer 0) x0) (inst movdqu (nth-xmm-mem buffer 1) x1) (inst movdqu (nth-xmm-mem buffer 2) x2) (inst movdqu (nth-xmm-mem buffer 3) x3)))) #+x86-64 (define-vop (pclmulqdq-support-p) (:translate ironclad::pclmulqdq-support-p) (:policy :fast-safe) (:conditional :c) (:temporary (:sc unsigned-reg :offset rax-offset) eax) (:temporary (:sc unsigned-reg :offset rcx-offset) ecx) (:generator 10 (inst mov eax 1) (inst cpuid) (inst bt ecx 1))) #+x86-64 (define-vop (aes-ni-support-p) (:translate ironclad::aes-ni-support-p) (:policy :fast-safe) (:conditional :c) (:temporary (:sc unsigned-reg :offset rax-offset) eax) (:temporary (:sc unsigned-reg :offset rcx-offset) ecx) (:generator 10 (inst mov eax 1) (inst cpuid) (inst bt ecx 25))) #+x86-64 (define-vop (aes-ni-generate-round-keys) (:translate ironclad::aes-ni-generate-round-keys) (:policy :fast-safe) (:args (key :scs (descriptor-reg)) (key-length :scs (unsigned-reg)) (encryption-keys :scs (descriptor-reg)) (decryption-keys :scs (descriptor-reg))) (:arg-types simple-array-unsigned-byte-8 unsigned-num simple-array-unsigned-byte-32 simple-array-unsigned-byte-32) (:temporary (:sc double-reg) x0 x1 x2 x3 x4 x5 x6) (:generator 1000 (labels ((buffer-mem (base i) (let ((disp (+ (- (* n-word-bytes vector-data-offset) other-pointer-lowtag) (* 16 i)))) (ea disp base))) (expand-key-128 () (inst pshufd x1 x1 #b11111111) (inst shufps x2 x0 #b00010000) (inst pxor x0 x2) (inst shufps x2 x0 #b10001100) (inst pxor x0 x2) (inst pxor x0 x1)) (expand-key-192a () (inst pshufd x1 x1 #b01010101) (inst shufps x2 x0 #b00010000) (inst pxor x0 x2) (inst shufps x2 x0 #b10001100) (inst pxor x0 x2) (inst pxor x0 x1) (inst movdqa x4 x3) (inst movdqa x5 x3) (inst pslldq x4 4) (inst pshufd x6 x0 #b11111111) (inst pxor x3 x6) (inst pxor x3 x4) (inst movdqa x1 x0) (inst shufps x5 x0 #b01000100) (inst shufps x1 x3 #b01001110)) (expand-key-192b () (inst pshufd x1 x1 #b01010101) (inst shufps x2 x0 #b00010000) (inst pxor x0 x2) (inst shufps x2 x0 #b10001100) (inst pxor x0 x2) (inst pxor x0 x1) (inst movdqa x4 x3) (inst pslldq x4 4) (inst pshufd x5 x0 #b11111111) (inst pxor x3 x5) (inst pxor x3 x4)) (expand-key-256a () (expand-key-128)) (expand-key-256b () (inst pshufd x1 x1 #b10101010) (inst shufps x2 x3 #b00010000) (inst pxor x3 x2) (inst shufps x2 x3 #b10001100) (inst pxor x3 x2) (inst pxor x3 x1))) (let ((key-192 (gen-label)) (key-128 (gen-label)) (end (gen-label))) (inst pxor x2 x2) (inst movdqu x0 (buffer-mem key 0)) (inst cmp key-length 24) (inst jmp :b key-128) (inst jmp :z key-192) (inst movdqu x3 (buffer-mem key 1)) (inst movdqu (buffer-mem encryption-keys 0) x0) (inst movdqu (buffer-mem decryption-keys 14) x0) (inst movdqu (buffer-mem encryption-keys 1) x3) (inst aesimc x6 x3) (inst movdqu (buffer-mem decryption-keys 13) x6) (inst aeskeygenassist x1 x3 1) (expand-key-256a) (inst movdqu (buffer-mem encryption-keys 2) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 12) x6) (inst aeskeygenassist x1 x0 1) (expand-key-256b) (inst movdqu (buffer-mem encryption-keys 3) x3) (inst aesimc x6 x3) (inst movdqu (buffer-mem decryption-keys 11) x6) (inst aeskeygenassist x1 x3 2) (expand-key-256a) (inst movdqu (buffer-mem encryption-keys 4) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 10) x6) (inst aeskeygenassist x1 x0 2) (expand-key-256b) (inst movdqu (buffer-mem encryption-keys 5) x3) (inst aesimc x6 x3) (inst movdqu (buffer-mem decryption-keys 9) x6) (inst aeskeygenassist x1 x3 4) (expand-key-256a) (inst movdqu (buffer-mem encryption-keys 6) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 8) x6) (inst aeskeygenassist x1 x0 4) (expand-key-256b) (inst movdqu (buffer-mem encryption-keys 7) x3) (inst aesimc x6 x3) (inst movdqu (buffer-mem decryption-keys 7) x6) (inst aeskeygenassist x1 x3 8) (expand-key-256a) (inst movdqu (buffer-mem encryption-keys 8) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 6) x6) (inst aeskeygenassist x1 x0 8) (expand-key-256b) (inst movdqu (buffer-mem encryption-keys 9) x3) (inst aesimc x6 x3) (inst movdqu (buffer-mem decryption-keys 5) x6) (inst aeskeygenassist x1 x3 16) (expand-key-256a) (inst movdqu (buffer-mem encryption-keys 10) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 4) x6) (inst aeskeygenassist x1 x0 16) (expand-key-256b) (inst movdqu (buffer-mem encryption-keys 11) x3) (inst aesimc x6 x3) (inst movdqu (buffer-mem decryption-keys 3) x6) (inst aeskeygenassist x1 x3 32) (expand-key-256a) (inst movdqu (buffer-mem encryption-keys 12) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 2) x6) (inst aeskeygenassist x1 x0 32) (expand-key-256b) (inst movdqu (buffer-mem encryption-keys 13) x3) (inst aesimc x6 x3) (inst movdqu (buffer-mem decryption-keys 1) x6) (inst aeskeygenassist x1 x3 64) (expand-key-256a) (inst movdqu (buffer-mem encryption-keys 14) x0) (inst movdqu (buffer-mem decryption-keys 0) x0) (inst jmp end) (emit-label key-192) (inst movdqu x3 (buffer-mem key 1)) (inst movdqu (buffer-mem encryption-keys 0) x0) (inst movdqu (buffer-mem decryption-keys 12) x0) (inst aeskeygenassist x1 x3 1) (expand-key-192a) (inst movdqu (buffer-mem encryption-keys 1) x5) (inst aesimc x6 x5) (inst movdqu (buffer-mem decryption-keys 11) x6) (inst movdqu (buffer-mem encryption-keys 2) x1) (inst aesimc x6 x1) (inst movdqu (buffer-mem decryption-keys 10) x6) (inst aeskeygenassist x1 x3 2) (expand-key-192b) (inst movdqu (buffer-mem encryption-keys 3) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 9) x6) (inst aeskeygenassist x1 x3 4) (expand-key-192a) (inst movdqu (buffer-mem encryption-keys 4) x5) (inst aesimc x6 x5) (inst movdqu (buffer-mem decryption-keys 8) x6) (inst movdqu (buffer-mem encryption-keys 5) x1) (inst aesimc x6 x1) (inst movdqu (buffer-mem decryption-keys 7) x6) (inst aeskeygenassist x1 x3 8) (expand-key-192b) (inst movdqu (buffer-mem encryption-keys 6) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 6) x6) (inst aeskeygenassist x1 x3 16) (expand-key-192a) (inst movdqu (buffer-mem encryption-keys 7) x5) (inst aesimc x6 x5) (inst movdqu (buffer-mem decryption-keys 5) x6) (inst movdqu (buffer-mem encryption-keys 8) x1) (inst aesimc x6 x1) (inst movdqu (buffer-mem decryption-keys 4) x6) (inst aeskeygenassist x1 x3 32) (expand-key-192b) (inst movdqu (buffer-mem encryption-keys 9) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 3) x6) (inst aeskeygenassist x1 x3 64) (expand-key-192a) (inst movdqu (buffer-mem encryption-keys 10) x5) (inst aesimc x6 x5) (inst movdqu (buffer-mem decryption-keys 2) x6) (inst movdqu (buffer-mem encryption-keys 11) x1) (inst aesimc x6 x1) (inst movdqu (buffer-mem decryption-keys 1) x6) (inst aeskeygenassist x1 x3 128) (expand-key-192b) (inst movdqu (buffer-mem encryption-keys 12) x0) (inst movdqu (buffer-mem decryption-keys 0) x0) (inst jmp end) (emit-label key-128) (inst movdqu (buffer-mem encryption-keys 0) x0) (inst movdqu (buffer-mem decryption-keys 10) x0) (inst aeskeygenassist x1 x0 1) (expand-key-128) (inst movdqu (buffer-mem encryption-keys 1) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 9) x6) (inst aeskeygenassist x1 x0 2) (expand-key-128) (inst movdqu (buffer-mem encryption-keys 2) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 8) x6) (inst aeskeygenassist x1 x0 4) (expand-key-128) (inst movdqu (buffer-mem encryption-keys 3) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 7) x6) (inst aeskeygenassist x1 x0 8) (expand-key-128) (inst movdqu (buffer-mem encryption-keys 4) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 6) x6) (inst aeskeygenassist x1 x0 16) (expand-key-128) (inst movdqu (buffer-mem encryption-keys 5) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 5) x6) (inst aeskeygenassist x1 x0 32) (expand-key-128) (inst movdqu (buffer-mem encryption-keys 6) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 4) x6) (inst aeskeygenassist x1 x0 64) (expand-key-128) (inst movdqu (buffer-mem encryption-keys 7) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 3) x6) (inst aeskeygenassist x1 x0 128) (expand-key-128) (inst movdqu (buffer-mem encryption-keys 8) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 2) x6) (inst aeskeygenassist x1 x0 27) (expand-key-128) (inst movdqu (buffer-mem encryption-keys 9) x0) (inst aesimc x6 x0) (inst movdqu (buffer-mem decryption-keys 1) x6) (inst aeskeygenassist x1 x0 54) (expand-key-128) (inst movdqu (buffer-mem encryption-keys 10) x0) (inst movdqu (buffer-mem decryption-keys 0) x0) (emit-label end))))) #+x86-64 (define-vop (aes-ni-encrypt) (:translate ironclad::aes-ni-encrypt) (:policy :fast-safe) (:args (plaintext :scs (descriptor-reg)) (plaintext-start :scs (unsigned-reg)) (ciphertext :scs (descriptor-reg)) (ciphertext-start :scs (unsigned-reg)) (round-keys :scs (descriptor-reg)) (n-rounds :scs (unsigned-reg))) (:arg-types simple-array-unsigned-byte-8 unsigned-num simple-array-unsigned-byte-8 unsigned-num simple-array-unsigned-byte-32 unsigned-num) (:temporary (:sc double-reg) x0 x1) (:generator 1000 (flet ((buffer-mem (base offset) (let ((disp (- (* n-word-bytes vector-data-offset) other-pointer-lowtag))) (ea disp base offset))) (round-key (i) (let ((disp (+ (- (* n-word-bytes vector-data-offset) other-pointer-lowtag) (* 16 i)))) (ea disp round-keys)))) (let ((last-round (gen-label))) (inst movdqu x0 (buffer-mem plaintext plaintext-start)) (inst movdqu x1 (round-key 0)) (inst pxor x0 x1) (inst movdqu x1 (round-key 1)) (inst aesenc x0 x1) (inst movdqu x1 (round-key 2)) (inst aesenc x0 x1) (inst movdqu x1 (round-key 3)) (inst aesenc x0 x1) (inst movdqu x1 (round-key 4)) (inst aesenc x0 x1) (inst movdqu x1 (round-key 5)) (inst aesenc x0 x1) (inst movdqu x1 (round-key 6)) (inst aesenc x0 x1) (inst movdqu x1 (round-key 7)) (inst aesenc x0 x1) (inst movdqu x1 (round-key 8)) (inst aesenc x0 x1) (inst movdqu x1 (round-key 9)) (inst aesenc x0 x1) (inst movdqu x1 (round-key 10)) (inst cmp n-rounds 10) (inst jmp :z last-round) (inst aesenc x0 x1) (inst movdqu x1 (round-key 11)) (inst aesenc x0 x1) (inst movdqu x1 (round-key 12)) (inst cmp n-rounds 12) (inst jmp :z last-round) (inst aesenc x0 x1) (inst movdqu x1 (round-key 13)) (inst aesenc x0 x1) (inst movdqu x1 (round-key 14)) (emit-label last-round) (inst aesenclast x0 x1) (inst movdqu (buffer-mem ciphertext ciphertext-start) x0))))) #+x86-64 (define-vop (aes-ni-decrypt) (:translate ironclad::aes-ni-decrypt) (:policy :fast-safe) (:args (ciphertext :scs (descriptor-reg)) (ciphertext-start :scs (unsigned-reg)) (plaintext :scs (descriptor-reg)) (plaintext-start :scs (unsigned-reg)) (round-keys :scs (descriptor-reg)) (n-rounds :scs (unsigned-reg))) (:arg-types simple-array-unsigned-byte-8 unsigned-num simple-array-unsigned-byte-8 unsigned-num simple-array-unsigned-byte-32 unsigned-num) (:temporary (:sc double-reg) x0 x1) (:generator 1000 (flet ((buffer-mem (base offset) (let ((disp (- (* n-word-bytes vector-data-offset) other-pointer-lowtag))) (ea disp base offset))) (round-key (i) (let ((disp (+ (- (* n-word-bytes vector-data-offset) other-pointer-lowtag) (* 16 i)))) (ea disp round-keys)))) (let ((last-round (gen-label))) (inst movdqu x0 (buffer-mem ciphertext ciphertext-start)) (inst movdqu x1 (round-key 0)) (inst pxor x0 x1) (inst movdqu x1 (round-key 1)) (inst aesdec x0 x1) (inst movdqu x1 (round-key 2)) (inst aesdec x0 x1) (inst movdqu x1 (round-key 3)) (inst aesdec x0 x1) (inst movdqu x1 (round-key 4)) (inst aesdec x0 x1) (inst movdqu x1 (round-key 5)) (inst aesdec x0 x1) (inst movdqu x1 (round-key 6)) (inst aesdec x0 x1) (inst movdqu x1 (round-key 7)) (inst aesdec x0 x1) (inst movdqu x1 (round-key 8)) (inst aesdec x0 x1) (inst movdqu x1 (round-key 9)) (inst aesdec x0 x1) (inst movdqu x1 (round-key 10)) (inst cmp n-rounds 10) (inst jmp :z last-round) (inst aesdec x0 x1) (inst movdqu x1 (round-key 11)) (inst aesdec x0 x1) (inst movdqu x1 (round-key 12)) (inst cmp n-rounds 12) (inst jmp :z last-round) (inst aesdec x0 x1) (inst movdqu x1 (round-key 13)) (inst aesdec x0 x1) (inst movdqu x1 (round-key 14)) (emit-label last-round) (inst aesdeclast x0 x1) (inst movdqu (buffer-mem plaintext plaintext-start) x0))))) #+x86-64 (define-vop (fast-blake2s-mixing) (:translate ironclad::fast-blake2s-mixing) (:policy :fast-safe) (:args (va :scs (unsigned-reg) :target ra) (vb :scs (unsigned-reg) :target rb) (vc :scs (unsigned-reg) :target rc) (vd :scs (unsigned-reg) :target rd) (x :scs (unsigned-reg)) (y :scs (unsigned-reg))) (:arg-types unsigned-num unsigned-num unsigned-num unsigned-num unsigned-num unsigned-num) (:results (ra :scs (unsigned-reg) :from (:argument 0)) (rb :scs (unsigned-reg) :from (:argument 1)) (rc :scs (unsigned-reg) :from (:argument 2)) (rd :scs (unsigned-reg) :from (:argument 3))) (:result-types unsigned-num unsigned-num unsigned-num unsigned-num) (:generator 1000 (move ra va) (move rb vb) (move rc vc) (move rd vd) (dword-inst add ra rb) (dword-inst add ra x) (dword-inst xor rd ra) (dword-inst ror rd 16) (dword-inst add rc rd) (dword-inst xor rb rc) (dword-inst ror rb 12) (dword-inst add ra rb) (dword-inst add ra y) (dword-inst xor rd ra) (dword-inst ror rd 8) (dword-inst add rc rd) (dword-inst xor rb rc) (dword-inst ror rb 7))) #+x86-64 (define-vop (gmac-mul-fast) (:translate ironclad::gmac-mul-fast) (:policy :fast-safe) (:args (accumulator :scs (descriptor-reg)) (key :scs (descriptor-reg))) (:arg-types simple-array-unsigned-byte-8 simple-array-unsigned-byte-8) (:temporary (:sc double-reg) x0 x1 x2 x3 x4 x5 x6 x7 x8 x9) (:generator 1000 (flet ((buffer-mem (base) (let ((disp (- (* n-word-bytes vector-data-offset) other-pointer-lowtag))) (ea disp base)))) (inst movdqu x0 (buffer-mem accumulator)) (inst movdqu x1 (buffer-mem key)) (inst movdqa x3 x0) (inst pclmulqdq x3 x1 0) (inst movdqa x4 x0) (inst pclmulqdq x4 x1 16) (inst movdqa x5 x0) (inst pclmulqdq x5 x1 1) (inst movdqa x6 x0) (inst pclmulqdq x6 x1 17) (inst pxor x4 x5) (inst movdqa x5 x4) (inst psrldq x4 8) (inst pslldq x5 8) (inst pxor x3 x5) (inst pxor x6 x4) (inst movdqa x7 x3) (inst movdqa x8 x6) (inst pslld-imm x3 1) (inst pslld-imm x6 1) (inst psrld-imm x7 31) (inst psrld-imm x8 31) (inst movdqa x9 x7) (inst pslldq x8 4) (inst pslldq x7 4) (inst psrldq x9 12) (inst por x3 x7) (inst por x6 x8) (inst por x6 x9) (inst movdqa x7 x3) (inst movdqa x8 x3) (inst movdqa x9 x3) (inst pslld-imm x7 31) (inst pslld-imm x8 30) (inst pslld-imm x9 25) (inst pxor x7 x8) (inst pxor x7 x9) (inst movdqa x8 x7) (inst pslldq x7 12) (inst psrldq x8 4) (inst pxor x3 x7) (inst movdqa x2 x3) (inst movdqa x4 x3) (inst movdqa x5 x3) (inst psrld-imm x2 1) (inst psrld-imm x4 2) (inst psrld-imm x5 7) (inst pxor x2 x4) (inst pxor x2 x5) (inst pxor x2 x8) (inst pxor x3 x2) (inst pxor x6 x3) (inst movdqu (buffer-mem accumulator) x6)))) #+x86-64 (define-vop (xor128) (:translate ironclad::xor128) (:policy :fast-safe) (:args (in1 :scs (descriptor-reg)) (start-in1 :scs (unsigned-reg)) (in2 :scs (descriptor-reg)) (start-in2 :scs (unsigned-reg)) (out :scs (descriptor-reg)) (start-out :scs (unsigned-reg))) (:arg-types simple-array-unsigned-byte-8 positive-fixnum simple-array-unsigned-byte-8 positive-fixnum simple-array-unsigned-byte-8 positive-fixnum) (:temporary (:sc double-reg) x0 x1) (:generator 1000 (flet ((buffer-mem (base offset) (let ((disp (- (* n-word-bytes vector-data-offset) other-pointer-lowtag))) (ea disp base offset)))) (inst movdqu x0 (buffer-mem in1 start-in1)) (inst movdqu x1 (buffer-mem in2 start-in2)) (inst pxor x0 x1) (inst movdqu (buffer-mem out start-out) x0)))) #+x86-64 (define-vop (mov128) (:translate ironclad::mov128) (:policy :fast-safe) (:args (in :scs (descriptor-reg)) (start-in :scs (unsigned-reg)) (out :scs (descriptor-reg)) (start-out :scs (unsigned-reg))) (:arg-types simple-array-unsigned-byte-8 positive-fixnum simple-array-unsigned-byte-8 positive-fixnum) (:temporary (:sc double-reg) x0) (:generator 1000 (flet ((buffer-mem (base offset) (let ((disp (- (* n-word-bytes vector-data-offset) other-pointer-lowtag))) (ea disp base offset)))) (inst movdqu x0 (buffer-mem in start-in)) (inst movdqu (buffer-mem out start-out) x0)))) (define-vop (swap32) (:translate ironclad::swap32) (:policy :fast-safe) (:args (n :scs (unsigned-reg) :target r)) (:arg-types unsigned-num) (:results (r :scs (unsigned-reg))) (:result-types unsigned-num) (:generator 2 (move r n) (dword-inst bswap r))) #+x86-64 (define-vop (swap64) (:translate ironclad::swap64) (:policy :fast-safe) (:args (n :scs (unsigned-reg) :target r)) (:arg-types unsigned-num) (:results (r :scs (unsigned-reg))) (:result-types unsigned-num) (:generator 2 (move r n) (inst bswap r))) (define-vop (inc-counter-block) (:translate ironclad::inc-counter-block) (:policy :fast-safe) (:args (size :scs (unsigned-reg) :target idx) (counter :scs (descriptor-reg))) (:arg-types positive-fixnum simple-array-unsigned-byte-8) (:temporary (:sc unsigned-reg) idx) (:generator 1000 (let ((start (gen-label)) (end (gen-label))) (move idx size) (inst stc) (emit-label start) #.(let ((disp '(- (* n-word-bytes vector-data-offset) other-pointer-lowtag 1))) #+ironclad-sb-vm-ea `(inst adc :byte (ea ,disp counter idx) 0) #-ironclad-sb-vm-ea `(inst adc (sb-vm::make-ea :byte :base counter :index idx :disp ,disp) 0)) (inst jmp :nc end) (inst dec idx) (inst jmp :nz start) (emit-label end)))) ) ; PROGN ironclad-0.57/src/package.lisp000066400000000000000000000221051420372057600163210ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (cl:defpackage :ironclad (:use :cl) (:nicknames :crypto) (:export ;; referencing multiple-octet values in an octet vector (SETF-able) #:ub16ref/be #:ub16ref/le #:ub32ref/be #:ub32ref/le #:ub64ref/le #:ub64ref/be ;; hash functions #:digest-sequence #:digest-stream #:digest-file #:make-digest #:copy-digest #:update-digest #:produce-digest ;; MACs #:make-mac #:update-mac #:produce-mac ;;; Deprecated MAC functions ;; HMACs #:make-hmac #:update-hmac #:hmac-digest ;; CMACs #:make-cmac #:update-cmac #:cmac-digest ;; Skein-MAC #:make-skein-mac #:update-skein-mac #:skein-mac-digest ;; Poly1305 #:make-poly1305 #:update-poly1305 #:poly1305-digest ;; Blake2-MAC #:make-blake2-mac #:update-blake2-mac #:blake2-mac-digest ;; Blake2s-MAC #:make-blake2s-mac #:update-blake2s-mac #:blake2s-mac-digest ;; introspection #:cipher-supported-p #:list-all-ciphers #:digest-supported-p #:list-all-digests #:mac-supported-p #:list-all-macs #:mode-supported-p #:list-all-modes #:block-length #:digest-length #:key-lengths #:keystream-position #:authenticated-encryption-mode-supported-p #:list-all-authenticated-encryption-modes ;; high-level block cipher operators #:make-cipher #:encrypt #:decrypt #:encrypt-in-place #:decrypt-in-place ;; arguments to (MAKE-CIPHER ... :MODE X) #:ecb #:cbc #:ctr #:ofb #:cfb #:stream ;; block cipher padding #:pkcs7 #:ansi-x923 #:iso-7816-4 ;; authenticated encryption #:make-authenticated-encryption-mode #:process-associated-data #:produce-tag #:gcm #:etm #:eax ;; KDFs #:list-all-kdfs #:pbkdf1 #:pbkdf2 #:hmac-kdf #:scrypt-kdf #:argon2i #:argon2d #:bcrypt #:bcrypt-pbkdf #:make-kdf #:derive-key ;; KDF convenience functions #:make-random-salt #:pbkdf2-hash-password #:pbkdf2-hash-password-to-combined-string #:pbkdf2-check-password ;; public-key encryption operations #:list-all-key-pair-kinds #:make-public-key #:destructure-public-key #:make-private-key #:destructure-private-key #:generate-key-pair #:make-signature #:destructure-signature #:make-message #:destructure-message #:generate-signature-nonce #:sign-message #:verify-signature #:encrypt-message #:decrypt-message #:diffie-hellman ;; public-key encryption/signature padding #:oaep-encode #:oaep-decode #:pss-encode #:pss-verify ;; public/private keys #:curve25519-public-key #:curve25519-private-key #:curve448-public-key #:curve448-private-key #:dsa-public-key #:dsa-private-key #:ed25519-public-key #:ed25519-private-key #:ed448-public-key #:ed448-private-key #:elgamal-public-key #:elgamal-private-key #:rsa-public-key #:rsa-private-key #:secp256k1-public-key #:secp256k1-private-key #:secp256r1-public-key #:secp256r1-private-key #:secp384r1-public-key #:secp384r1-private-key #:secp521r1-public-key #:secp521r1-private-key ;; public-key slot readers #:dsa-key-p #:dsa-key-q #:dsa-key-g #:dsa-key-y #:dsa-key-x #:elgamal-key-p #:elgamal-key-g #:elgamal-key-y #:elgamal-key-x #:rsa-key-modulus #:rsa-key-exponent #:rsa-key-prime-p #:rsa-key-prime-q #:ed25519-key-x #:ed25519-key-y #:ed448-key-x #:ed448-key-y #:curve25519-key-x #:curve25519-key-y #:curve448-key-x #:curve448-key-y #:secp256k1-key-x #:secp256k1-key-y #:secp256r1-key-x #:secp256r1-key-y #:secp384r1-key-x #:secp384r1-key-y #:secp521r1-key-x #:secp521r1-key-y ;; pseudo-random number generators #:list-all-prngs #:make-prng #:random-data #:read-os-random-seed #:read-seed #:write-seed #:random-bits #:*prng* #:strong-random #:prng-reseed ;; default OS PRNG #:os-prng ;; Fortuna PRNG #:fortuna-prng #:add-random-event ;; Fortuna generator #:fortuna-generator ;; cryptographic math #:*number-of-miller-rabin-tests* #:generate-prime #:prime-p #:generate-prime-in-range #:egcd #:generate-safe-prime #:find-generator ;; conditions #:ironclad-error #:initialization-vector-not-supplied #:invalid-initialization-vector #:invalid-key-length #:unsupported-cipher #:unsupported-mode #:unsupported-padding #:unsupported-digest #:unsupported-kdf #:unsupported-scrypt-cost-factors #:unsupported-argon2-parameters #:insufficient-buffer-space #:invalid-padding #:key-not-supplied #:unsupported-mac #:invalid-mac-parameter #:invalid-signature-length #:invalid-message-length #:missing-key-parameter #:missing-message-parameter #:missing-signature-parameter #:incompatible-keys #:invalid-curve-point #:invalid-public-key-length #:oaep-decoding-error #:unsupported-authenticated-encryption-mode #:bad-authentication-tag ;; utilities #:byte-array-to-hex-string #:hex-string-to-byte-array #:ascii-string-to-byte-array #:octets-to-integer #:integer-to-octets #:expt-mod #:expt-mod/unsafe #:constant-time-equal ;; streams #:make-octet-input-stream #:make-octet-output-stream #:with-octet-input-stream #:with-octet-output-stream #:get-output-stream-octets #:make-digesting-stream #:execute-with-digesting-stream #:with-digesting-stream #:execute-with-digesting-text-stream #:with-digesting-text-stream #:make-encrypting-stream #:make-decrypting-stream #:with-encrypting-stream #:with-decrypting-stream #:make-authenticating-stream #:with-authenticating-stream) ;; supported digests (:export #:whirlpool #:md2 #:md4 #:md5 #:adler32 #:crc24 #:crc32 #:tiger #:sha1 #:sha224 #:sha256 #:sha384 #:sha512 #:tree-hash #:make-tiger-tree-hash #:ripemd-128 #:ripemd-160 #:skein256 #:skein256/128 #:skein256/160 #:skein256/224 #:skein512 #:skein512/128 #:skein512/160 #:skein512/224 #:skein512/256 #:skein512/384 #:skein1024 #:skein1024/384 #:skein1024/512 #:sha3 #:sha3/384 #:sha3/256 #:sha3/224 #:shake128 #:shake256 #:keccak #:keccak/384 #:keccak/256 #:keccak/224 #:groestl #:groestl/384 #:groestl/256 #:groestl/224 #:blake2 #:blake2/384 #:blake2/256 #:blake2/160 #:blake2s #:blake2s/224 #:blake2s/160 #:blake2s/128 #:jh #:jh/384 #:jh/256 #:jh/224 #:streebog #:streebog/256 #:kupyna #:kupyna/256 #:sm3) ;; supported macs (:export #:blake2-mac #:blake2s-mac #:cmac #:hmac #:poly1305 #:skein-mac #:gmac #:siphash) ;; supported block ciphers (:export #:blowfish #:tea #:xtea #:square #:rc2 #:rc5 #:rc6 #:des #:3des #:aes #:twofish #:cast5 #:idea #:misty1 #:xor #:threefish256 #:threefish512 #:threefish1024 #:serpent #:camellia #:seed #:aria #:kuznyechik #:kalyna128 #:kalyna256 #:kalyna512 #:sm4) ;; supported stream ciphers (:export #:arcfour #:salsa20 #:salsa20/12 #:salsa20/8 #:xsalsa20 #:xsalsa20/12 #:xsalsa20/8 #:chacha #:chacha/12 #:chacha/8 #:xchacha #:xchacha/12 #:xchacha/8 #:sosemanuk)) (in-package :crypto) ;;; easy-to-type readmacro for creating s-boxes and the like (defun array-reader (stream subchar arg) (declare (ignore subchar)) (let ((array-data (read stream nil stream nil)) (array-element-type `(unsigned-byte ,arg))) ;; FIXME: need to make this work for multi-dimensional arrays `(make-array ,(length array-data) :element-type ',array-element-type :initial-contents ',array-data))) (defparameter *ironclad-readtable* (let ((readtable (copy-readtable nil))) (set-dispatch-macro-character #\# #\@ #'array-reader readtable) readtable)) (defmacro in-ironclad-readtable () `(eval-when (:compile-toplevel :load-toplevel :execute) (setq *readtable* *ironclad-readtable*))) (defun ironclad-implementation-features () #+sbcl (list* sb-c:*backend-byte-order* (if (= sb-vm:n-word-bits 32) :32-bit :64-bit) :ironclad-fast-mod32-arithmetic (when (member :x86-64 *features*) (list* :ironclad-fast-mod64-arithmetic (let ((sym (find-symbol "EA" :sb-vm))) (when (and sym (fboundp sym)) '(:ironclad-sb-vm-ea)))))) #+cmu (list (c:backend-byte-order c:*target-backend*) (if (= vm:word-bits 32) :32-bit :64-bit) :ironclad-fast-mod32-arithmetic) #+lispworks (list ;; Disable due to problem reports from Lispworks users and ;; non-obviousness of the fix. #+nil (when (not (member :lispworks4 *features*)) '(:ironclad-md5-lispworks-int32))) #+openmcl (list* (when (member :x86-64 *features*) '(:ironclad-fast-mod32-arithmetic :ironclad-fast-mod64-arithmetic))) #+ecl (list :ironclad-fast-mod32-arithmetic :ironclad-fast-mod64-arithmetic) #-(or sbcl cmu lispworks openmcl ecl) nil) (dolist (f (ironclad-implementation-features)) (pushnew f *features*)) ;; Enable assembly optimizations, unless we are either in ECL using only the ;; bytecode compiler or in an older version of CCL. #-(or ecl-bytecmp (and ccl (not ccl-1.12))) (pushnew :ironclad-assembly *features*) ironclad-0.57/src/prng/000077500000000000000000000000001420372057600150035ustar00rootroot00000000000000ironclad-0.57/src/prng/fortuna.lisp000066400000000000000000000100351420372057600173510ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; fortuna.lisp -- Fortuna PRNG (in-package :crypto) (defparameter +min-pool-size+ 128 "Minimum pool size before a reseed is allowed. This should be the number of bytes of pool data that are likely to contain 128 bits of entropy. Defaults to a pessimistic estimate of 1 bit of entropy per byte.") (defparameter +fortuna-seed-length+ 64) (defclass fortuna-pool () ((digest :initform (make-digest :sha256)) (length :initform 0)) (:documentation "A Fortuna entropy pool. DIGEST contains its current state; LENGTH the length in bytes of the entropy it contains.")) (defclass fortuna-prng () ((pools :initform (loop for i from 1 to 32 collect (make-instance 'fortuna-pool))) (reseed-count :initform 0) (last-reseed :initform 0) (generator)) (:documentation "A Fortuna random number generator. Contains 32 entropy pools which are used to reseed GENERATOR.")) (defmethod prng-random-data (num-bytes (prng fortuna-prng)) (when (plusp num-bytes) (with-slots (pools generator reseed-count last-reseed) prng (when (and (>= (slot-value (first pools) 'length) +min-pool-size+) (> (- (get-internal-run-time) last-reseed) 100)) (incf reseed-count) (loop for i from 0 below (length pools) with seed = (make-array (* (digest-length :sha256) (integer-length (logand reseed-count (- reseed-count)))) :element-type '(unsigned-byte 8)) while (zerop (mod reseed-count (expt 2 i))) collect (with-slots (digest length) (nth i pools) (let ((digest-length (digest-length digest))) (produce-digest digest :digest seed :digest-start (* i digest-length)) (reinitialize-instance digest) (digest-sequence digest seed :digest seed :start (* i digest-length) :end (* (1+ i) digest-length) :digest-start (* i digest-length)) (setf length 0) (reinitialize-instance digest))) finally (prng-reseed seed generator))) (assert (plusp reseed-count)) (prng-random-data num-bytes generator)))) (defun add-random-event (source pool-id event &optional (prng *prng*)) (declare (type fortuna-prng prng)) (assert (and (<= 1 (length event) 32) (<= 0 source 255) (<= 0 pool-id 31))) (let ((pool (nth pool-id (slot-value prng 'pools)))) (update-digest (slot-value pool 'digest) (concatenate '(vector (unsigned-byte 8)) (integer-to-octets source) (integer-to-octets (length event)) event)) (incf (slot-value pool 'length) (length event)))) (defmethod prng-seed-length ((prng fortuna-prng)) +fortuna-seed-length+) (defmethod prng-reseed (seed (prng fortuna-prng)) (declare (type simple-octet-vector seed)) (assert (= (length seed) +fortuna-seed-length+)) (prng-reseed seed (slot-value prng 'generator)) (incf (slot-value prng 'reseed-count))) (defun make-fortuna (cipher) (let ((prng (make-instance 'fortuna-prng))) (setf (slot-value prng 'generator) (make-instance 'fortuna-generator :cipher cipher)) prng)) (defmethod make-prng ((name (eql :fortuna)) &key seed (cipher :aes)) (declare (ignorable seed)) (make-fortuna cipher)) ;; FIXME: this is more than a little ugly; maybe there should be a ;; prng-registry or something? (defmethod make-prng ((name (eql 'fortuna)) &key seed (cipher :aes)) (declare (ignorable seed)) (make-fortuna cipher)) ironclad-0.57/src/prng/generator.lisp000066400000000000000000000043511420372057600176650ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; generator.lisp -- Fortuna PRNG generator (in-package :crypto) (defvar +fortuna-cipher-block-size+ 16 "Fortuna is only defined for 128-bit (16-byte) cyphers") (defclass fortuna-generator () ((key :initform (make-array 32 :element-type '(unsigned-byte 8) :initial-element 0)) (counter :initform 0) (digest :initform (make-digest :sha256)) (cipher :initform :aes :initarg :cipher)) (:documentation "Fortuna generator. KEY is the key used to initialise CIPHER as an instance of CIPHER-NAME (which must be a valid NAME recognised by MAKE-CIPHER).")) (defmethod initialize-instance :after ((generator fortuna-generator) &key) (with-slots (key cipher) generator (assert (= (block-length cipher) +fortuna-cipher-block-size+)) (assert (find 32 (key-lengths cipher))) (setf cipher (make-cipher cipher :key key :mode :ecb)))) (defmethod prng-reseed (seed (generator fortuna-generator)) (with-slots (key counter cipher digest) generator (reinitialize-instance digest) (update-digest digest key) (update-digest digest seed) (produce-digest digest :digest key) (reinitialize-instance digest) (digest-sequence digest key :digest key) (incf counter) (reinitialize-instance cipher :key key))) (defun %generate-blocks (generator num-blocks) (with-slots (cipher key counter) generator (assert (and cipher (plusp counter))) (loop for i from 1 to num-blocks collect (let ((block (integer-to-octets counter :n-bits 128 :big-endian nil))) (encrypt-in-place cipher block) block) into blocks do (incf counter) finally (return (apply #'concatenate 'simple-octet-vector blocks))))) (defmethod prng-random-data (num-bytes (generator fortuna-generator)) (assert (< 0 num-bytes (expt 2 20))) (let* ((output (subseq (%generate-blocks generator (ceiling num-bytes 16)) 0 num-bytes)) (key (%generate-blocks generator 2))) (setf (slot-value generator 'key) key) output)) ironclad-0.57/src/prng/os-prng.lisp000066400000000000000000000047571420372057600172760ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; os-prng.lisp -- OS-provided pseudo-random number generator (in-package :crypto) #+unix (defparameter *os-prng-stream* nil) #+unix (defparameter *os-prng-stream-lock* (bt:make-lock)) (defclass os-prng () ()) (defmethod prng-random-data (num-bytes (prng os-prng)) #+unix (let* ((seq (make-array num-bytes :element-type '(unsigned-byte 8))) (n (bt:with-lock-held (*os-prng-stream-lock*) (unless (and *os-prng-stream* (open-stream-p *os-prng-stream*)) (setf *os-prng-stream* (open #P"/dev/urandom" #+ccl :sharing #+ccl :external :element-type '(unsigned-byte 8)))) (read-sequence seq *os-prng-stream*)))) (if (< n num-bytes) (error 'ironclad-error :format-control "Failed to get random data.") seq)) #+(and win32 sbcl) (sb-win32:crypt-gen-random num-bytes) #+(and os-windows ccl) (multiple-value-bind (buff buffp) (ccl:make-heap-ivector num-bytes '(unsigned-byte 8)) (when (zerop (ccl:external-call "SystemFunction036" :address buffp :unsigned-long num-bytes :boolean)) (error 'ironclad-error :format-control "RtlGenRandom failed")) (let ((copy (copy-seq buff))) (ccl:dispose-heap-ivector buff) (ccl:dispose-heap-ivector buffp) copy)) #+(and os-windows allegro) (let ((buff (make-array num-bytes :element-type '(unsigned-byte 8)))) (when (zerop (rtl-gen-random buff num-bytes)) (error 'ironclad-error :format-control "RtlGenRandom failed")) buff) #+(and mswindows lispworks) (let ((buff (sys:in-static-area (make-array num-bytes :element-type '(unsigned-byte 8))))) (unless (fli:with-dynamic-lisp-array-pointer (buff buff) (rtl-gen-random buff num-bytes)) (error 'ironclad-error :format-control "RtlGenRandom failed")) (copy-seq buff)) #-(or unix (and win32 sbcl) (and os-windows ccl) (and os-windows allegro) (and mswindows lispworks)) (error 'ironclad-error :format-control "OS-RANDOM-SEED is not supported on your platform.")) (defmethod make-prng ((name (eql :os)) &key seed) (declare (ignorable seed)) (make-instance 'os-prng)) (setf *prng* (make-prng :os)) #+thread-support (pushnew '(*prng* . (make-prng :os)) bt:*default-special-bindings* :test #'equal) ironclad-0.57/src/prng/prng.lisp000066400000000000000000000140751420372057600166510ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; prng.lisp -- common functions for pseudo-random number generators (in-package :crypto) (defvar *prng* nil "Default pseudo-random-number generator for use by all crypto functions. Defaults to a sensible OS-specific value.") (defun list-all-prngs () (copy-list '(:os :fortuna :fortuna-generator))) (defmethod make-prng :around (name &key (seed :random)) (let ((prng (call-next-method))) (unless (find name '(:os :fortuna-generator)) (cond ((eq seed nil)) ((find seed '(:random :urandom)) (read-os-random-seed seed prng)) ((or (pathnamep seed) (stringp seed)) (read-seed seed prng)) ((typep seed 'simple-octet-vector) (prng-reseed seed prng) (incf (slot-value prng 'reseed-count))) (t (error 'ironclad-error :format-control "SEED must be an octet vector, pathname indicator, :random or :urandom")))) prng)) (defun random-data (num-bytes &optional (prng *prng*)) (prng-random-data num-bytes prng)) (defun read-os-random-seed (source &optional (prng *prng*)) (let* ((seed-length (prng-seed-length prng)) (seed (os-random-seed source seed-length))) (assert (= (length seed) seed-length)) (prng-reseed seed prng))) (defun random-bits (num-bits &optional (prng *prng*)) (logand (1- (expt 2 num-bits)) (octets-to-integer (prng-random-data (ceiling num-bits 8) prng)))) (defun strong-random (limit &optional (prng *prng*)) "Return a strong random number from 0 to limit-1 inclusive. A drop-in replacement for COMMON-LISP:RANDOM." (assert (plusp limit)) (assert prng) (etypecase limit (integer (let* ((log-limit (integer-length limit)) (num-bytes (ceiling log-limit 8)) (mask (1- (ash 1 log-limit)))) (loop for random = (logand (ironclad:octets-to-integer (prng-random-data num-bytes prng)) mask) until (< random limit) finally (return random)))) (float (float (let ((floor (floor 1 long-float-epsilon))) (* limit (/ (strong-random floor) floor))))))) #+(and os-windows allegro)(ff:def-foreign-call (rtl-gen-random "SystemFunction036") ((buff (* :void)) (num-bytes)) :returning :int) #+(and mswindows lispworks)(fli:define-foreign-function (rtl-gen-random "SystemFunction036") ((buff :pointer) (num-bytes (:unsigned :long))) :result-type :boolean) (defun os-random-seed (source num-bytes) #+unix(let ((path (cond ((eq source :random) #P"/dev/random") ((eq source :urandom) #P"/dev/urandom") (t (error 'ironclad-error :format-control "Source must be either :random or :urandom")))) (seq (make-array num-bytes :element-type '(unsigned-byte 8)))) (with-open-file (seed-file path :element-type '(unsigned-byte 8)) (assert (>= (read-sequence seq seed-file) num-bytes)) seq)) #+(and win32 sbcl)(sb-win32:crypt-gen-random num-bytes) #+(and os-windows ccl) (multiple-value-bind (buff buffp) (ccl:make-heap-ivector num-bytes '(unsigned-byte 8)) (when (= (ccl:external-call "SystemFunction036" :address buffp :unsigned-long num-bytes :boolean) 0) (error 'ironclad-error :format-control "RtlGenRandom failed")) (let ((copy (copy-seq buff))) (ccl:dispose-heap-ivector buff) (ccl:dispose-heap-ivector buffp) copy)) #+(and os-windows allegro) (let ((buff (make-array num-bytes :element-type '(unsigned-byte 8)))) (when (= (rtl-gen-random buff num-bytes) 0) (error 'ironclad-error :format-control "RtlGenRandom failed")) buff) #+(and mswindows lispworks)(let ((buff (sys:in-static-area (make-array num-bytes :element-type '(unsigned-byte 8))))) (unless (fli:with-dynamic-lisp-array-pointer (buff buff) (rtl-gen-random buff num-bytes)) (error 'ironclad-error :format-control "RtlGenRandom failed")) (copy-seq buff)) #-(or unix (and win32 sbcl) (and os-windows ccl) (and os-windows allegro) (and mswindows lispworks))(error 'ironclad-error :format-control "OS-RANDOM-SEED is not supported on your platform.")) (defun read-seed (path &optional (prng *prng*)) "Reseed PRNG from PATH. If PATH doesn't exist, reseed from /dev/random and then write that seed to PATH." (let ((seed-length (prng-seed-length prng)) seed) (if (probe-file path) (with-open-file (seed-file path :element-type 'simple-octet-vector) (setf seed (make-array seed-length)) (assert (>= (read-sequence seed seed-file) seed-length))) (setf seed (os-random-seed :random seed-length))) (prng-reseed seed prng) (write-seed path prng)) (values)) (defun write-seed (path &optional (prng *prng*)) (with-open-file (seed-file path :direction :output :if-exists :supersede :if-does-not-exist :create :element-type 'simple-octet-vector) (write-sequence (random-data (prng-seed-length prng)) seed-file)) ;; FIXME: this only works under SBCL. It's important, though, ;; as it sets the proper permissions for reading a seedfile. #+sbcl(sb-posix:chmod path (logior sb-posix:s-irusr sb-posix:s-iwusr)) (values)) (defun feed-fifo (prng path) "Feed random data into a FIFO" (loop while (handler-case (with-open-file (fortune-out path :direction :output :if-exists :overwrite :element-type '(unsigned-byte 8)) (loop do (write-sequence (random-data (1- (expt 2 20)) prng) fortune-out))) (stream-error () t)))) ironclad-0.57/src/public-key/000077500000000000000000000000001420372057600161015ustar00rootroot00000000000000ironclad-0.57/src/public-key/curve25519.lisp000066400000000000000000000140021420372057600205210ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; curve25519.lisp -- implementation of the curve25519 Diffie-Hellman function (in-package :crypto) ;;; class definitions (defclass curve25519-public-key () ((y :initarg :y :reader curve25519-key-y :type (simple-array (unsigned-byte 8) (*))))) (defclass curve25519-private-key () ((x :initarg :x :reader curve25519-key-x :type (simple-array (unsigned-byte 8) (*))) (y :initarg :y :reader curve25519-key-y :type (simple-array (unsigned-byte 8) (*))))) (eval-when (:compile-toplevel :load-toplevel :execute) (defclass curve25519-point () ;; Internally, we represent a point (x, y) using only the projective ;; coordinate (X, Z) for x, with x = X / Z. ((x :initarg :x :type integer) (z :initarg :z :type integer))) (defmethod make-load-form ((p curve25519-point) &optional env) (declare (ignore env)) (make-load-form-saving-slots p))) ;;; constants and function definitions (defconstant +curve25519-bits+ 256) (defconstant +curve25519-p+ 57896044618658097711785492504343953926634992332820282019728792003956564819949) (defconstant +curve25519-a24+ 121666) (defconst +curve25519-g+ (make-instance 'curve25519-point :x 9 :z 1)) (defmethod ec-scalar-inv ((kind (eql :curve25519)) n) (expt-mod n (- +curve25519-p+ 2) +curve25519-p+)) (defun curve25519-double-and-add (x1 z1 x2 z2 x3) "Point doubling and addition on curve25519 curve." (declare (type integer x1 z1 x2 z2 x3) (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let* ((t1 (mod (+ x1 z1) +curve25519-p+)) (t2 (mod (* t1 t1) +curve25519-p+)) (t3 (mod (- x1 z1) +curve25519-p+)) (t4 (mod (* t3 t3) +curve25519-p+)) (t5 (mod (- t2 t4) +curve25519-p+)) (t6 (mod (+ x2 z2) +curve25519-p+)) (t7 (mod (- x2 z2) +curve25519-p+)) (t8 (mod (* t1 t7) +curve25519-p+)) (t9 (mod (* t3 t6) +curve25519-p+)) (t10 (mod (+ t8 t9) +curve25519-p+)) (t11 (mod (- t8 t9) +curve25519-p+)) (x4 (mod (* t2 t4) +curve25519-p+)) (t12 (mod (* t5 +curve25519-a24+) +curve25519-p+)) (t13 (mod (+ t4 t12) +curve25519-p+)) (z4 (mod (* t5 t13) +curve25519-p+)) (x5 (mod (* t10 t10) +curve25519-p+)) (t14 (mod (* t11 t11) +curve25519-p+)) (z5 (mod (* x3 t14) +curve25519-p+))) (declare (type integer t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 x4 z4 x5 z5)) (values x4 z4 x5 z5))) (defmethod ec-scalar-mult ((p curve25519-point) n) ;; Point multiplication on curve22519 curve using the Montgomery ladder. (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)) (type integer n)) (with-slots (x z) p (declare (type integer x z)) (assert (= 1 z)) (do ((x1 1) (z1 0) (x2 x) (z2 1) (i 254 (1- i))) ((minusp i) (make-instance 'curve25519-point :x x1 :z z1)) (declare (type integer x1 z1 x2 z2) (type fixnum i)) (if (logbitp i n) (multiple-value-setq (x2 z2 x1 z1) (curve25519-double-and-add x2 z2 x1 z1 x)) (multiple-value-setq (x1 z1 x2 z2) (curve25519-double-and-add x1 z1 x2 z2 x)))))) (defmethod ec-encode-scalar ((kind (eql :curve25519)) n) (integer-to-octets n :n-bits +curve25519-bits+ :big-endian nil)) (defmethod ec-decode-scalar ((kind (eql :curve25519)) octets) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let ((x (ldb (byte (1- +curve25519-bits+) 0) (octets-to-integer octets :big-endian nil)))) (setf (ldb (byte 3 0) x) 0) (setf (ldb (byte 1 (- +curve25519-bits+ 2)) x) 1) x)) (defmethod ec-encode-point ((p curve25519-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x z) p (declare (type integer x z)) (let ((x1 (mod (* x (ec-scalar-inv :curve25519 z)) +curve25519-p+))) (ec-encode-scalar :curve25519 x1)))) (defmethod ec-decode-point ((kind (eql :curve25519)) octets) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let ((x (ldb (byte (1- +curve25519-bits+) 0) (octets-to-integer octets :big-endian nil)))) (make-instance 'curve25519-point :x x :z 1))) (defun curve25519-public-key (sk) "Compute the public key associated to the private key SK." (declare (type (simple-array (unsigned-byte 8) (*)) sk) (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let* ((s (ec-decode-scalar :curve25519 sk)) (p (ec-scalar-mult +curve25519-g+ s))) (ec-encode-point p))) (defmethod make-public-key ((kind (eql :curve25519)) &key y &allow-other-keys) (unless y (error 'missing-key-parameter :kind 'curve25519 :parameter 'y :description "public key")) (make-instance 'curve25519-public-key :y y)) (defmethod destructure-public-key ((public-key curve25519-public-key)) (list :y (curve25519-key-y public-key))) (defmethod make-private-key ((kind (eql :curve25519)) &key x y &allow-other-keys) (unless x (error 'missing-key-parameter :kind 'curve25519 :parameter 'x :description "private key")) (make-instance 'curve25519-private-key :x x :y (or y (curve25519-public-key x)))) (defmethod destructure-private-key ((private-key curve25519-private-key)) (list :x (curve25519-key-x private-key) :y (curve25519-key-y private-key))) (defmethod generate-key-pair ((kind (eql :curve25519)) &key &allow-other-keys) (let ((sk (random-data (/ +curve25519-bits+ 8)))) (setf (ldb (byte 3 0) (elt sk 0)) 0) (setf (ldb (byte 2 6) (elt sk (- (/ +curve25519-bits+ 8) 1))) 1) (let ((pk (curve25519-public-key sk))) (values (make-private-key :curve25519 :x sk :y pk) (make-public-key :curve25519 :y pk))))) (defmethod diffie-hellman ((private-key curve25519-private-key) (public-key curve25519-public-key)) (let ((s (ec-decode-scalar :curve25519 (curve25519-key-x private-key))) (p (ec-decode-point :curve25519 (curve25519-key-y public-key)))) (ec-encode-point (ec-scalar-mult p s)))) ironclad-0.57/src/public-key/curve448.lisp000066400000000000000000000136321420372057600203630ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; curve448.lisp -- implementation of the curve448 Diffie-Hellman function (in-package :crypto) ;;; class definitions (defclass curve448-public-key () ((y :initarg :y :reader curve448-key-y :type (simple-array (unsigned-byte 8) (*))))) (defclass curve448-private-key () ((x :initarg :x :reader curve448-key-x :type (simple-array (unsigned-byte 8) (*))) (y :initarg :y :reader curve448-key-y :type (simple-array (unsigned-byte 8) (*))))) (eval-when (:compile-toplevel :load-toplevel :execute) (defclass curve448-point () ;; Internally, we represent a point (x, y) using only the projective ;; coordinate (X, Z) for x, with x = X / Z. ((x :initarg :x :type integer) (z :initarg :z :type integer))) (defmethod make-load-form ((p curve448-point) &optional env) (declare (ignore env)) (make-load-form-saving-slots p))) ;;; constants and function definitions (defconstant +curve448-bits+ 448) (defconstant +curve448-p+ 726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018365439) (defconstant +curve448-a24+ 39081) (defconst +curve448-g+ (make-instance 'curve448-point :x 5 :z 1)) (defmethod ec-scalar-inv ((kind (eql :curve448)) n) (expt-mod n (- +curve448-p+ 2) +curve448-p+)) (defun curve448-double-and-add (x1 z1 x2 z2 x3) "Point doubling and addition on curve448 curve." (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)) (type integer x1 z1 x2 z2 x3)) (let* ((t1 (mod (+ x1 z1) +curve448-p+)) (t2 (mod (- x1 z1) +curve448-p+)) (t3 (mod (- x2 z2) +curve448-p+)) (t4 (mod (* t1 t3) +curve448-p+)) (t5 (mod (+ x2 z2) +curve448-p+)) (t6 (mod (* t2 t5) +curve448-p+)) (t7 (mod (- t4 t6) +curve448-p+)) (t8 (mod (* t7 t7) +curve448-p+)) (z5 (mod (* x3 t8) +curve448-p+)) (t9 (mod (+ t4 t6) +curve448-p+)) (x5 (mod (* t9 t9) +curve448-p+)) (t10 (mod (* t1 t1) +curve448-p+)) (t11 (mod (* t2 t2) +curve448-p+)) (x4 (mod (* t10 t11) +curve448-p+)) (t12 (mod (- t10 t11) +curve448-p+)) (t13 (mod (* t12 +curve448-a24+) +curve448-p+)) (t14 (mod (+ t13 t10) +curve448-p+)) (z4 (mod (* t14 t12) +curve448-p+))) (declare (type integer t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t13 t14 x4 z4 x5 z5)) (values x4 z4 x5 z5))) (defmethod ec-scalar-mult ((p curve448-point) n) ;; Point multiplication on curve448 curve using the Montgomery ladder. (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)) (type integer n)) (with-slots (x z) p (declare (type integer x z)) (assert (= 1 z)) (do ((x1 1) (z1 0) (x2 x) (z2 1) (i 447 (1- i))) ((minusp i) (make-instance 'curve448-point :x x1 :z z1)) (declare (type integer x1 z1 x2 z2) (type fixnum i)) (if (logbitp i n) (multiple-value-setq (x2 z2 x1 z1) (curve448-double-and-add x2 z2 x1 z1 x)) (multiple-value-setq (x1 z1 x2 z2) (curve448-double-and-add x1 z1 x2 z2 x)))))) (defmethod ec-encode-scalar ((kind (eql :curve448)) n) (integer-to-octets n :n-bits +curve448-bits+ :big-endian nil)) (defmethod ec-decode-scalar ((kind (eql :curve448)) octets) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let ((x (ldb (byte +curve448-bits+ 0) (octets-to-integer octets :big-endian nil)))) (setf (ldb (byte 2 0) x) 0) (setf (ldb (byte 1 (1- +curve448-bits+)) x) 1) x)) (defmethod ec-encode-point ((p curve448-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x z) p (declare (type integer x z)) (let ((x1 (mod (* x (ec-scalar-inv :curve448 z)) +curve448-p+))) (ec-encode-scalar :curve448 x1)))) (defmethod ec-decode-point ((kind (eql :curve448)) octets) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let ((x (ldb (byte +curve448-bits+ 0) (octets-to-integer octets :big-endian nil)))) (make-instance 'curve448-point :x x :z 1))) (defun curve448-public-key (sk) "Compute the public key associated to the private key SK." (declare (type (simple-array (unsigned-byte 8) (*)) sk) (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let* ((s (ec-decode-scalar :curve448 sk)) (p (ec-scalar-mult +curve448-g+ s))) (ec-encode-point p))) (defmethod make-public-key ((kind (eql :curve448)) &key y &allow-other-keys) (unless y (error 'missing-key-parameter :kind 'curve448 :parameter 'y :description "public key")) (make-instance 'curve448-public-key :y y)) (defmethod destructure-public-key ((public-key curve448-public-key)) (list :y (curve448-key-y public-key))) (defmethod make-private-key ((kind (eql :curve448)) &key x y &allow-other-keys) (unless x (error 'missing-key-parameter :kind 'curve448 :parameter 'x :description "private key")) (make-instance 'curve448-private-key :x x :y (or y (curve448-public-key x)))) (defmethod destructure-private-key ((private-key curve448-private-key)) (list :x (curve448-key-x private-key) :y (curve448-key-y private-key))) (defmethod generate-key-pair ((kind (eql :curve448)) &key &allow-other-keys) (let ((sk (random-data (ceiling +curve448-bits+ 8)))) (setf (ldb (byte 2 0) (elt sk 0)) 0) (setf (ldb (byte 1 7) (elt sk (- (ceiling +curve448-bits+ 8) 1))) 1) (let ((pk (curve448-public-key sk))) (values (make-private-key :curve448 :x sk :y pk) (make-public-key :curve448 :y pk))))) (defmethod diffie-hellman ((private-key curve448-private-key) (public-key curve448-public-key)) (let ((s (ec-decode-scalar :curve448 (curve448-key-x private-key))) (p (ec-decode-point :curve448 (curve448-key-y public-key)))) (ec-encode-point (ec-scalar-mult p s)))) ironclad-0.57/src/public-key/dsa.lisp000066400000000000000000000162351420372057600175500ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; dsa.lisp -- implementation of the Digital Signature Algorithm (in-package :crypto) ;;; class definitions (defclass dsa-key () ((group :initarg :group :reader group))) (defclass dsa-public-key (dsa-key) ((y :initarg :y :reader dsa-key-y :type integer))) (defclass dsa-private-key (dsa-key) ((y :initarg :y :reader dsa-key-y :type integer) (x :initarg :x :reader dsa-key-x :type integer))) (defun dsa-key-p (dsa-key) (group-pval (group dsa-key))) (defun dsa-key-q (dsa-key) (group-qval (group dsa-key))) (defun dsa-key-g (dsa-key) (group-gval (group dsa-key))) ;;; function definitions (defmethod make-public-key ((kind (eql :dsa)) &key p q g y &allow-other-keys) (unless p (error 'missing-key-parameter :kind 'dsa :parameter 'p :description "modulus")) (unless q (error 'missing-key-parameter :kind 'dsa :parameter 'q :description "subgroup modulus")) (unless g (error 'missing-key-parameter :kind 'dsa :parameter 'g :description "generator")) (unless y (error 'missing-key-parameter :kind 'dsa :parameter 'y :description "public key")) (let ((group (make-instance 'discrete-logarithm-group :p p :q q :g g))) (make-instance 'dsa-public-key :group group :y y))) (defmethod destructure-public-key ((public-key dsa-public-key)) (list :p (dsa-key-p public-key) :q (dsa-key-q public-key) :g (dsa-key-g public-key) :y (dsa-key-y public-key))) (defmethod make-private-key ((kind (eql :dsa)) &key p q g y x &allow-other-keys) (unless p (error 'missing-key-parameter :kind 'dsa :parameter 'p :description "modulus")) (unless q (error 'missing-key-parameter :kind 'dsa :parameter 'q :description "subgroup modulus")) (unless g (error 'missing-key-parameter :kind 'dsa :parameter 'g :description "generator")) (unless x (error 'missing-key-parameter :kind 'dsa :parameter 'x :description "private key")) (let ((group (make-instance 'discrete-logarithm-group :p p :q q :g g))) (make-instance 'dsa-private-key :group group :x x :y (or y (expt-mod g x p))))) (defmethod destructure-private-key ((private-key dsa-private-key)) (list :p (dsa-key-p private-key) :q (dsa-key-q private-key) :g (dsa-key-g private-key) :x (dsa-key-x private-key) :y (dsa-key-y private-key))) (defmethod generate-key-pair ((kind (eql :dsa)) &key num-bits &allow-other-keys) (unless num-bits (error 'missing-key-parameter :kind 'dsa :parameter 'num-bits :description "modulus size")) (let* ((n (cond ((< num-bits 512) (error 'ironclad-error :format-control "NUM-BITS is too small for a DSA key.")) ((<= num-bits 1024) 160) ((<= num-bits 2048) 224) ((<= num-bits 3072) 256) ((<= num-bits 7680) 384) ((<= num-bits 15360) 512) (t (error 'ironclad-error :format-control "NUM-BITS is too big for a DSA key.")))) (q (generate-prime n)) (p (loop for z = (logior (ash 1 (- num-bits n 1)) (dpb 0 (byte 1 0) (random-bits (- num-bits n)))) for p = (1+ (* z q)) until (and (= num-bits (integer-length p)) (prime-p p)) finally (return p))) (g (find-subgroup-generator p q)) (x (+ 2 (strong-random (- q 2)))) (y (expt-mod g x p))) (values (make-private-key :dsa :p p :q q :g g :y y :x x) (make-public-key :dsa :p p :q q :g g :y y)))) (defmethod generate-signature-nonce ((key dsa-private-key) message &optional q) (declare (ignore key message)) (or *signature-nonce-for-test* (1+ (strong-random (1- q))))) (defmethod make-signature ((kind (eql :dsa)) &key r s n-bits &allow-other-keys) (unless r (error 'missing-signature-parameter :kind 'dsa :parameter 'r :description "first signature element")) (unless s (error 'missing-signature-parameter :kind 'dsa :parameter 's :description "second signature element")) (unless n-bits (error 'missing-signature-parameter :kind 'dsa :parameter 'n-bits :description "subgroup modulus size")) (concatenate '(simple-array (unsigned-byte 8) (*)) (integer-to-octets r :n-bits n-bits) (integer-to-octets s :n-bits n-bits))) (defmethod destructure-signature ((kind (eql :dsa)) signature) (let ((length (length signature))) (if (oddp length) (error 'invalid-signature-length :kind 'dsa) (let* ((middle (/ length 2)) (n-bits (* middle 8)) (r (octets-to-integer signature :start 0 :end middle)) (s (octets-to-integer signature :start middle))) (list :r r :s s :n-bits n-bits))))) ;;; Note that hashing is not performed here. (defmethod sign-message ((key dsa-private-key) message &key (start 0) end &allow-other-keys) (let* ((end (or end (length message))) (q (dsa-key-q key)) (qbits (integer-length q))) (when (> (* 8 (- end start)) qbits) ;; Only keep the required number of bits of message (setf end (+ start (/ qbits 8)))) (let* ((m (octets-to-integer message :start start :end end)) (p (dsa-key-p key)) (g (dsa-key-g key)) (x (dsa-key-x key)) (k (generate-signature-nonce key message q)) (r (mod (expt-mod g k p) q)) (k-inverse (modular-inverse-with-blinding k q)) (s (mod (* k-inverse (+ (* x r) m)) q))) (assert (= (mod (* k k-inverse) q) 1)) (if (not (or (zerop r) (zerop s))) (make-signature :dsa :r r :s s :n-bits qbits) (sign-message key message :start start :end end))))) (defmethod verify-signature ((key dsa-public-key) message signature &key (start 0) end &allow-other-keys) (let* ((end (or end (length message))) (q (dsa-key-q key)) (qbits (integer-length q))) (unless (= (* 4 (length signature)) qbits) (error 'invalid-signature-length :kind 'dsa)) (when (> (* 8 (- end start)) qbits) ;; Only keep the required number of bits of message (setf end (+ start (/ qbits 8)))) (let* ((m (octets-to-integer message :start start :end end)) (p (dsa-key-p key)) (g (dsa-key-g key)) (y (dsa-key-y key)) (signature-elements (destructure-signature :dsa signature)) (r (getf signature-elements :r)) (s (getf signature-elements :s))) (unless (and (< 0 r q) (< 0 s q)) (return-from verify-signature nil)) (let* ((w (modular-inverse s q)) (u1 (mod (* m w) q)) (u2 (mod (* r w) q)) (v (mod (mod (* (expt-mod g u1 p) (expt-mod y u2 p)) p) q))) (= v r))))) ironclad-0.57/src/public-key/ed25519.lisp000066400000000000000000000306611420372057600177760ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; ed25519.lisp -- implementation of the ed25519 signature algorithm (in-package :crypto) ;;; class definitions (defclass ed25519-public-key () ((y :initarg :y :reader ed25519-key-y :type (simple-array (unsigned-byte 8) (*))))) (defclass ed25519-private-key () ((x :initarg :x :reader ed25519-key-x :type (simple-array (unsigned-byte 8) (*))) (y :initarg :y :reader ed25519-key-y :type (simple-array (unsigned-byte 8) (*))))) (eval-when (:compile-toplevel :load-toplevel :execute) (defclass ed25519-point () ;; Internally, a point (x, y) is represented in extended homogeneous ;; coordinates (X, Y, Z, W), with x = X / Z, y = Y / Z and x * y = W / Z. ((x :initarg :x :type integer) (y :initarg :y :type integer) (z :initarg :z :type integer) (w :initarg :w :type integer))) (defmethod make-load-form ((p ed25519-point) &optional env) (declare (ignore env)) (make-load-form-saving-slots p))) ;;; constant, variable and function definitions (defconstant +ed25519-bits+ 256) (defconstant +ed25519-q+ 57896044618658097711785492504343953926634992332820282019728792003956564819949) (defconstant +ed25519-l+ 7237005577332262213973186563042994240857116359379907606001950938285454250989) (defconstant +ed25519-d+ 37095705934669439343138083508754565189542113879843219016388785533085940283555) (defconstant +ed25519-i+ 19681161376707505956807079304988542015446066515923890162744021073123829784752) (defconst +ed25519-b+ (make-instance 'ed25519-point :x 15112221349535400772501151409588531511454012693041857206046113283949847762202 :y 46316835694926478169428394003475163141307993866256225615783033603165251855960 :z 1 :w 46827403850823179245072216630277197565144205554125654976674165829533817101731)) (defconst +ed25519-point-at-infinity+ (make-instance 'ed25519-point :x 0 :y 1 :z 1 :w 0)) (defmethod ec-scalar-inv ((kind (eql :ed25519)) n) (expt-mod n (- +ed25519-q+ 2) +ed25519-q+)) (defun ed25519-recover-x (y) "Recover the X coordinate of a point on ed25519 curve from the Y coordinate." (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)) (type integer y)) (let* ((u (mod (1- (* y y)) +ed25519-q+)) (v (mod (1+ (* +ed25519-d+ (1+ u))) +ed25519-q+)) (v3 (mod (* v v v) +ed25519-q+)) (uv3 (mod (* u v3) +ed25519-q+)) (uv7 (mod (* uv3 v3 v) +ed25519-q+)) (x (mod (* uv3 (expt-mod uv7 (/ (- +ed25519-q+ 5) 8) +ed25519-q+)) +ed25519-q+))) (declare (type integer u v v3 uv3 uv7 x)) (unless (= u (mod (* v x x) +ed25519-q+)) (setf x (mod (* x +ed25519-i+) +ed25519-q+))) (unless (evenp x) (setf x (- +ed25519-q+ x))) x)) (defmethod ec-add ((p ed25519-point) (q ed25519-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z) (w1 w)) p (declare (type integer x1 y1 z1 w1)) (with-slots ((x2 x) (y2 y) (z2 z) (w2 w)) q (declare (type integer x2 y2 z2 w2)) (let* ((a (mod (* (- y1 x1) (- y2 x2)) +ed25519-q+)) (b (mod (* (+ y1 x1) (+ y2 x2)) +ed25519-q+)) (i (mod (* w1 w2) +ed25519-q+)) (c (mod (* 2 i +ed25519-d+) +ed25519-q+)) (d (mod (* 2 z1 z2) +ed25519-q+)) (e (mod (- b a) +ed25519-q+)) (f (mod (- d c) +ed25519-q+)) (g (mod (+ d c) +ed25519-q+)) (h (mod (+ b a) +ed25519-q+)) (x3 (mod (* e f) +ed25519-q+)) (y3 (mod (* g h) +ed25519-q+)) (z3 (mod (* f g) +ed25519-q+)) (w3 (mod (* e h) +ed25519-q+))) (declare (type integer a b c d e f g h i x3 y3 z3 w3)) (make-instance 'ed25519-point :x x3 :y y3 :z z3 :w w3))))) (defmethod ec-double ((p ed25519-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (let* ((a (mod (* x1 x1) +ed25519-q+)) (b (mod (* y1 y1) +ed25519-q+)) (c (mod (* 2 z1 z1) +ed25519-q+)) (d (mod (+ x1 y1) +ed25519-q+)) (i (mod (* d d) +ed25519-q+)) (h (mod (+ a b) +ed25519-q+)) (e (mod (- h i) +ed25519-q+)) (g (mod (- a b) +ed25519-q+)) (f (mod (+ c g) +ed25519-q+)) (x2 (mod (* e f) +ed25519-q+)) (y2 (mod (* g h) +ed25519-q+)) (z2 (mod (* f g) +ed25519-q+)) (w2 (mod (* e h) +ed25519-q+))) (declare (type integer a b c d e f g h i x2 y2 z2 w2)) (make-instance 'ed25519-point :x x2 :y y2 :z z2 :w w2)))) (defmethod ec-scalar-mult ((p ed25519-point) e) ;; Point multiplication on ed25519 curve using the Montgomery ladder. (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)) (type integer e)) (do ((r0 +ed25519-point-at-infinity+) (r1 p) (i 254 (1- i))) ((minusp i) r0) (declare (type ed25519-point r0 r1) (type fixnum i)) (if (logbitp i e) (setf r0 (ec-add r0 r1) r1 (ec-double r1)) (setf r1 (ec-add r0 r1) r0 (ec-double r0))))) (defmethod ec-point-on-curve-p ((p ed25519-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x y z w) p (declare (type integer x y z w)) (let* ((xx (mod (* x x) +ed25519-q+)) (yy (mod (* y y) +ed25519-q+)) (zz (mod (* z z) +ed25519-q+)) (ww (mod (* w w) +ed25519-q+)) (a (mod (- yy xx) +ed25519-q+)) (b (mod (+ zz (* +ed25519-d+ ww)) +ed25519-q+))) (declare (type integer xx yy zz ww a b)) (zerop (mod (- a b) +ed25519-q+))))) (defmethod ec-point-equal ((p ed25519-point) (q ed25519-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (with-slots ((x2 x) (y2 y) (z2 z)) q (declare (type integer x2 y2 z2)) (and (zerop (mod (- (* x1 z2) (* x2 z1)) +ed25519-q+)) (zerop (mod (- (* y1 z2) (* y2 z1)) +ed25519-q+)))))) (defmethod ec-encode-scalar ((kind (eql :ed25519)) n) (integer-to-octets n :n-bits +ed25519-bits+ :big-endian nil)) (defmethod ec-decode-scalar ((kind (eql :ed25519)) octets) (octets-to-integer octets :big-endian nil)) (defmethod ec-encode-point ((p ed25519-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x y z) p (declare (type integer x y z)) (let* ((invz (ec-scalar-inv :ed25519 z)) (x (mod (* x invz) +ed25519-q+)) (y (mod (* y invz) +ed25519-q+))) (declare (type integer x y invz)) (setf (ldb (byte 1 (- +ed25519-bits+ 1)) y) (ldb (byte 1 0) x)) (ec-encode-scalar :ed25519 y)))) (defmethod ec-decode-point ((kind (eql :ed25519)) octets) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let* ((y (ec-decode-scalar :ed25519 octets)) (b (ldb (byte 1 (- +ed25519-bits+ 1)) y))) (declare (type integer y) (type fixnum b)) (setf (ldb (byte 1 (- +ed25519-bits+ 1)) y) 0) (let ((x (ed25519-recover-x y))) (declare (type integer x)) (unless (= (ldb (byte 1 0) x) b) (setf x (- +ed25519-q+ x))) (let* ((w (mod (* x y) +ed25519-q+)) (p (make-instance 'ed25519-point :x x :y y :z 1 :w w))) (declare (type integer w) (type ed25519-point p)) (if (ec-point-on-curve-p p) p (error 'invalid-curve-point :kind 'ed25519)))))) (defun ed25519-hash (&rest messages) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let ((digest (make-digest :sha512))) (dolist (m messages) (update-digest digest m)) (produce-digest digest))) (defun ed25519-public-key (sk) "Compute the public key associated to the private key SK." (declare (type (simple-array (unsigned-byte 8) (*)) sk) (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let ((h (ed25519-hash sk))) (setf h (subseq h 0 (/ +ed25519-bits+ 8))) (setf (ldb (byte 3 0) (elt h 0)) 0) (setf (ldb (byte 2 6) (elt h (- (/ +ed25519-bits+ 8) 1))) 1) (let ((a (ec-decode-scalar :ed25519 h))) (ec-encode-point (ec-scalar-mult +ed25519-b+ a))))) (defmethod make-signature ((kind (eql :ed25519)) &key r s &allow-other-keys) (unless r (error 'missing-signature-parameter :kind 'ed25519 :parameter 'r :description "first signature element")) (unless s (error 'missing-signature-parameter :kind 'ed25519 :parameter 's :description "second signature element")) (concatenate '(simple-array (unsigned-byte 8) (*)) r s)) (defmethod destructure-signature ((kind (eql :ed25519)) signature) (let ((length (length signature))) (if (/= length (/ +ed25519-bits+ 4)) (error 'invalid-signature-length :kind 'ed25519) (let* ((middle (/ length 2)) (r (subseq signature 0 middle)) (s (subseq signature middle))) (list :r r :s s))))) (defun ed25519-sign (m sk pk) (declare (type (simple-array (unsigned-byte 8) (*)) m sk pk) (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let ((h (ed25519-hash sk))) (setf (ldb (byte 3 0) (elt h 0)) 0) (setf (ldb (byte 2 6) (elt h (- (/ +ed25519-bits+ 8) 1))) 1) (let* ((a (ec-decode-scalar :ed25519 (subseq h 0 (/ +ed25519-bits+ 8)))) (rh (ed25519-hash (subseq h (/ +ed25519-bits+ 8) (/ +ed25519-bits+ 4)) m)) (ri (mod (ec-decode-scalar :ed25519 rh) +ed25519-l+)) (r (ec-scalar-mult +ed25519-b+ ri)) (rp (ec-encode-point r)) (k (mod (ec-decode-scalar :ed25519 (ed25519-hash rp pk m)) +ed25519-l+)) (s (mod (+ (* k a) ri) +ed25519-l+))) (declare (type integer a ri k s) (type (simple-array (unsigned-byte 8) (*)) rh) (type ed25519-point r)) (make-signature :ed25519 :r rp :s (ec-encode-scalar :ed25519 s))))) (defun ed25519-verify (s m pk) (declare (type (simple-array (unsigned-byte 8) (*)) s m pk) (optimize (speed 3) (safety 0) (space 0) (debug 0))) (unless (= (length s) (/ +ed25519-bits+ 4)) (error 'invalid-signature-length :kind 'ed25519)) (unless (= (length pk) (/ +ed25519-bits+ 8)) (error 'invalid-public-key-length :kind 'ed25519)) (let* ((signature-elements (destructure-signature :ed25519 s)) (r (getf signature-elements :r)) (rp (ec-decode-point :ed25519 r)) (s (ec-decode-scalar :ed25519 (getf signature-elements :s))) (a (ec-decode-point :ed25519 pk)) (h (mod (ec-decode-scalar :ed25519 (ed25519-hash r pk m)) +ed25519-l+)) (res1 (ec-scalar-mult +ed25519-b+ s)) (res2 (ec-add rp (ec-scalar-mult a h)))) (declare (type (simple-array (unsigned-byte 8) (*)) r) (type integer s h) (type ed25519-point rp a res1 res2)) (and (< s +ed25519-l+) (ec-point-equal res1 res2)))) (defmethod make-public-key ((kind (eql :ed25519)) &key y &allow-other-keys) (unless y (error 'missing-key-parameter :kind 'ed25519 :parameter 'y :description "public key")) (make-instance 'ed25519-public-key :y y)) (defmethod destructure-public-key ((public-key ed25519-public-key)) (list :y (ed25519-key-y public-key))) (defmethod make-private-key ((kind (eql :ed25519)) &key x y &allow-other-keys) (unless x (error 'missing-key-parameter :kind 'ed25519 :parameter 'x :description "private key")) (make-instance 'ed25519-private-key :x x :y (or y (ed25519-public-key x)))) (defmethod destructure-private-key ((private-key ed25519-private-key)) (list :x (ed25519-key-x private-key) :y (ed25519-key-y private-key))) (defmethod sign-message ((key ed25519-private-key) message &key (start 0) end &allow-other-keys) (let ((end (or end (length message))) (sk (ed25519-key-x key)) (pk (ed25519-key-y key))) (ed25519-sign (subseq message start end) sk pk))) (defmethod verify-signature ((key ed25519-public-key) message signature &key (start 0) end &allow-other-keys) (let ((end (or end (length message))) (pk (ed25519-key-y key))) (ed25519-verify signature (subseq message start end) pk))) (defmethod generate-key-pair ((kind (eql :ed25519)) &key &allow-other-keys) (let* ((sk (random-data (/ +ed25519-bits+ 8))) (pk (ed25519-public-key sk))) (values (make-private-key :ed25519 :x sk :y pk) (make-public-key :ed25519 :y pk)))) ironclad-0.57/src/public-key/ed448.lisp000066400000000000000000000303701420372057600176250ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; ed448.lisp -- implementation of the ed448 signature algorithm (in-package :crypto) ;;; class definitions (defclass ed448-public-key () ((y :initarg :y :reader ed448-key-y :type (simple-array (unsigned-byte 8) (*))))) (defclass ed448-private-key () ((x :initarg :x :reader ed448-key-x :type (simple-array (unsigned-byte 8) (*))) (y :initarg :y :reader ed448-key-y :type (simple-array (unsigned-byte 8) (*))))) (eval-when (:compile-toplevel :load-toplevel :execute) (defclass ed448-point () ;; Internally, a point (x, y) is represented using the projective ;; coordinates (X, Y, Z), with x = X / Z and y = Y / Z. ((x :initarg :x :type integer) (y :initarg :y :type integer) (z :initarg :z :type integer))) (defmethod make-load-form ((p ed448-point) &optional env) (declare (ignore env)) (make-load-form-saving-slots p))) ;;; constant and function definitions (defconstant +ed448-bits+ 456) (defconstant +ed448-q+ 726838724295606890549323807888004534353641360687318060281490199180612328166730772686396383698676545930088884461843637361053498018365439) (defconstant +ed448-l+ 181709681073901722637330951972001133588410340171829515070372549795146003961539585716195755291692375963310293709091662304773755859649779) (defconstant +ed448-d+ -39081) (defconst +ed448-b+ (make-instance 'ed448-point :x 224580040295924300187604334099896036246789641632564134246125461686950415467406032909029192869357953282578032075146446173674602635247710 :y 298819210078481492676017930443930673437544040154080242095928241372331506189835876003536878655418784733982303233503462500531545062832660 :z 1)) (defconst +ed448-point-at-infinity+ (make-instance 'ed448-point :x 0 :y 1 :z 1)) (eval-when (:compile-toplevel :load-toplevel :execute) (defun ed448-dom (x y) (declare (type (unsigned-byte 8) x) (type (simple-array (unsigned-byte 8) (*)) y) (optimize (speed 3) (safety 0) (space 0) (debug 0))) (when (> (length y) 255) (error 'ironclad-error :format-control "The Y array is to big.")) (concatenate '(simple-array (unsigned-byte 8) (*)) (map 'vector #'char-code "SigEd448") (vector x) (vector (length y)) y))) ;; Ed448 (x = 0), no context (y = #()) (defconst +ed448-dom+ (ed448-dom 0 (make-array 0 :element-type '(unsigned-byte 8)))) (defmethod ec-scalar-inv ((kind (eql :ed448)) n) (expt-mod n (- +ed448-q+ 2) +ed448-q+)) (defun ed448-recover-x (y) "Recover the X coordinate of a point on ed448 curve from the Y coordinate." (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)) (type integer y)) (let* ((u (mod (1- (* y y)) +ed448-q+)) (v (mod (1- (* +ed448-d+ (1+ u))) +ed448-q+)) (uv (mod (* u v) +ed448-q+)) (u3v (mod (* u u uv) +ed448-q+)) (u5v3 (mod (* u3v uv uv) +ed448-q+)) (x (mod (* u3v (expt-mod u5v3 (/ (- +ed448-q+ 3) 4) +ed448-q+)) +ed448-q+))) (declare (type integer u v uv u3v u5v3 x)) (unless (evenp x) (setf x (- +ed448-q+ x))) x)) (defmethod ec-add ((p ed448-point) (q ed448-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (with-slots ((x2 x) (y2 y) (z2 z)) q (declare (type integer x2 y2 z2)) (let* ((a (mod (* z1 z2) +ed448-q+)) (b (mod (* a a) +ed448-q+)) (c (mod (* x1 x2) +ed448-q+)) (d (mod (* y1 y2) +ed448-q+)) (k (mod (* c d) +ed448-q+)) (e (mod (* +ed448-d+ k) +ed448-q+)) (f (mod (- b e) +ed448-q+)) (g (mod (+ b e) +ed448-q+)) (h (mod (* (+ x1 y1) (+ x2 y2)) +ed448-q+)) (i (mod (* a f) +ed448-q+)) (j (mod (* a g) +ed448-q+)) (x3 (mod (* i (- h c d)) +ed448-q+)) (y3 (mod (* j (- d c)) +ed448-q+)) (z3 (mod (* f g) +ed448-q+))) (declare (type integer a b c d e f g h i j k x3 y3 z3)) (make-instance 'ed448-point :x x3 :y y3 :z z3))))) (defmethod ec-double ((p ed448-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (let* ((a (mod (+ x1 y1) +ed448-q+)) (b (mod (* a a) +ed448-q+)) (c (mod (* x1 x1) +ed448-q+)) (d (mod (* y1 y1) +ed448-q+)) (e (mod (+ c d) +ed448-q+)) (f (mod (* z1 z1) +ed448-q+)) (g (mod (- e (* 2 f)) +ed448-q+)) (x2 (mod (* (- b e) g) +ed448-q+)) (y2 (mod (* (- c d) e) +ed448-q+)) (z2 (mod (* e g) +ed448-q+))) (declare (type integer a b c d e f g x2 y2 z2)) (make-instance 'ed448-point :x x2 :y y2 :z z2)))) (defmethod ec-scalar-mult ((p ed448-point) e) ;; Point multiplication on ed448 curve using the Montgomery ladder. (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)) (type integer e)) (do ((r0 +ed448-point-at-infinity+) (r1 p) (i 447 (1- i))) ((minusp i) r0) (declare (type ed448-point r0 r1) (type fixnum i)) (if (logbitp i e) (setf r0 (ec-add r0 r1) r1 (ec-double r1)) (setf r1 (ec-add r0 r1) r0 (ec-double r0))))) (defmethod ec-point-on-curve-p ((p ed448-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x y z) p (declare (type integer x y z)) (let* ((xx (mod (* x x) +ed448-q+)) (yy (mod (* y y) +ed448-q+)) (zz (mod (* z z) +ed448-q+)) (zzzz (mod (* zz zz) +ed448-q+)) (a (mod (* zz (+ yy xx)) +ed448-q+)) (b (mod (+ zzzz (* +ed448-d+ xx yy)) +ed448-q+))) (declare (type integer xx yy zz zzzz a b)) (zerop (mod (- a b) +ed448-q+))))) (defmethod ec-point-equal ((p ed448-point) (q ed448-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (with-slots ((x2 x) (y2 y) (z2 z)) q (declare (type integer x2 y2 z2)) (and (zerop (mod (- (* x1 z2) (* x2 z1)) +ed448-q+)) (zerop (mod (- (* y1 z2) (* y2 z1)) +ed448-q+)))))) (defmethod ec-encode-scalar ((kind (eql :ed448)) n) (integer-to-octets n :n-bits +ed448-bits+ :big-endian nil)) (defmethod ec-decode-scalar ((kind (eql :ed448)) octets) (octets-to-integer octets :big-endian nil)) (defmethod ec-encode-point ((p ed448-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x y z) p (declare (type integer x y z)) (let* ((invz (ec-scalar-inv :ed448 z)) (x (mod (* x invz) +ed448-q+)) (y (mod (* y invz) +ed448-q+))) (declare (type integer x y)) (setf (ldb (byte 1 (- +ed448-bits+ 1)) y) (ldb (byte 1 0) x)) (ec-encode-scalar :ed448 y)))) (defmethod ec-decode-point ((kind (eql :ed448)) octets) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let* ((y (ec-decode-scalar :ed448 octets)) (b (ldb (byte 1 (- +ed448-bits+ 1)) y))) (setf (ldb (byte 1 (- +ed448-bits+ 1)) y) 0) (let ((x (ed448-recover-x y))) (declare (type integer x)) (unless (= (ldb (byte 1 0) x) b) (setf x (- +ed448-q+ x))) (let ((p (make-instance 'ed448-point :x x :y y :z 1))) (if (ec-point-on-curve-p p) p (error 'invalid-curve-point :kind 'ed448)))))) (defun ed448-hash (&rest messages) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let ((digest (make-digest :shake256 :output-length 114))) (dolist (m messages) (update-digest digest m)) (produce-digest digest))) (defun ed448-public-key (sk) "Compute the public key associated to the private key SK." (let ((h (ed448-hash sk))) (setf h (subseq h 0 (ceiling +ed448-bits+ 8))) (setf (ldb (byte 2 0) (elt h 0)) 0) (setf (ldb (byte 1 7) (elt h (- (ceiling +ed448-bits+ 8) 2))) 1) (setf (elt h (- (ceiling +ed448-bits+ 8) 1)) 0) (let ((a (ec-decode-scalar :ed448 h))) (ec-encode-point (ec-scalar-mult +ed448-b+ a))))) (defmethod make-signature ((kind (eql :ed448)) &key r s &allow-other-keys) (unless r (error 'missing-signature-parameter :kind 'ed448 :parameter 'r :description "first signature element")) (unless s (error 'missing-signature-parameter :kind 'ed448 :parameter 's :description "second signature element")) (concatenate '(simple-array (unsigned-byte 8) (*)) r s)) (defmethod destructure-signature ((kind (eql :ed448)) signature) (let ((length (length signature))) (if (/= length (/ +ed448-bits+ 4)) (error 'invalid-signature-length :kind 'ed448) (let* ((middle (/ length 2)) (r (subseq signature 0 middle)) (s (subseq signature middle))) (list :r r :s s))))) (defun ed448-sign (m sk pk) (declare (type (simple-array (unsigned-byte 8) (*)) m sk pk) (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let ((h (ed448-hash sk))) (setf (ldb (byte 2 0) (elt h 0)) 0) (setf (ldb (byte 1 7) (elt h (- (ceiling +ed448-bits+ 8) 2))) 1) (setf (elt h (- (ceiling +ed448-bits+ 8) 1)) 0) (let* ((a (ec-decode-scalar :ed448 (subseq h 0 (ceiling +ed448-bits+ 8)))) (rh (ed448-hash +ed448-dom+ (subseq h (ceiling +ed448-bits+ 8) (ceiling +ed448-bits+ 4)) m)) (ri (mod (ec-decode-scalar :ed448 rh) +ed448-l+)) (r (ec-scalar-mult +ed448-b+ ri)) (rp (ec-encode-point r)) (k (mod (ec-decode-scalar :ed448 (ed448-hash +ed448-dom+ rp pk m)) +ed448-l+)) (s (mod (+ (* k a) ri) +ed448-l+))) (make-signature :ed448 :r rp :s (ec-encode-scalar :ed448 s))))) (defun ed448-verify (s m pk) (declare (type (simple-array (unsigned-byte 8) (*)) s m pk) (optimize (speed 3) (safety 0) (space 0) (debug 0))) (unless (= (length s) (ceiling +ed448-bits+ 4)) (error 'invalid-signature-length :kind 'ed448)) (unless (= (length pk) (ceiling +ed448-bits+ 8)) (error 'invalid-public-key-length :kind 'ed448)) (let* ((signature-elements (destructure-signature :ed448 s)) (r (getf signature-elements :r)) (rp (ec-decode-point :ed448 r)) (s (ec-decode-scalar :ed448 (getf signature-elements :s))) (a (ec-decode-point :ed448 pk)) (h (mod (ec-decode-scalar :ed448 (ed448-hash +ed448-dom+ r pk m)) +ed448-l+)) (res1 (ec-scalar-mult +ed448-b+ s)) (res2 (ec-add rp (ec-scalar-mult a h)))) (declare (type (simple-array (unsigned-byte 8) (*)) r) (type integer s h) (type ed448-point rp a res1 res2)) (and (< s +ed448-l+) (ec-point-equal res1 res2)))) (defmethod make-public-key ((kind (eql :ed448)) &key y &allow-other-keys) (unless y (error 'missing-key-parameter :kind 'ed448 :parameter 'y :description "public key")) (make-instance 'ed448-public-key :y y)) (defmethod destructure-public-key ((public-key ed448-public-key)) (list :y (ed448-key-y public-key))) (defmethod make-private-key ((kind (eql :ed448)) &key x y &allow-other-keys) (unless x (error 'missing-key-parameter :kind 'ed448 :parameter 'x :description "private key")) (make-instance 'ed448-private-key :x x :y (or y (ed448-public-key x)))) (defmethod destructure-private-key ((private-key ed448-private-key)) (list :x (ed448-key-x private-key) :y (ed448-key-y private-key))) (defmethod sign-message ((key ed448-private-key) message &key (start 0) end &allow-other-keys) (let ((end (or end (length message))) (sk (ed448-key-x key)) (pk (ed448-key-y key))) (ed448-sign (subseq message start end) sk pk))) (defmethod verify-signature ((key ed448-public-key) message signature &key (start 0) end &allow-other-keys) (let ((end (or end (length message))) (pk (ed448-key-y key))) (ed448-verify signature (subseq message start end) pk))) (defmethod generate-key-pair ((kind (eql :ed448)) &key &allow-other-keys) (let* ((sk (random-data (ceiling +ed448-bits+ 8))) (pk (ed448-public-key sk))) (values (make-private-key :ed448 :x sk :y pk) (make-public-key :ed448 :y pk)))) ironclad-0.57/src/public-key/elgamal.lisp000066400000000000000000000241421420372057600203770ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; elgamal.lisp -- implementation of the ElGamal encryption and signature scheme (in-package :crypto) ;;; class definitions (defclass elgamal-key () ((group :initarg :group :reader group))) (defclass elgamal-public-key (elgamal-key) ((y :initarg :y :reader elgamal-key-y :type integer))) (defclass elgamal-private-key (elgamal-key) ((y :initarg :y :reader elgamal-key-y :type integer) (x :initarg :x :reader elgamal-key-x :type integer))) (defun elgamal-key-p (elgamal-key) (group-pval (group elgamal-key))) (defun elgamal-key-g (elgamal-key) (group-gval (group elgamal-key))) ;;; function definitions (defmethod make-public-key ((kind (eql :elgamal)) &key p g y &allow-other-keys) (unless p (error 'missing-key-parameter :kind 'elgamal :parameter 'p :description "modulus")) (unless g (error 'missing-key-parameter :kind 'elgamal :parameter 'g :description "generator")) (unless y (error 'missing-key-parameter :kind 'elgamal :parameter 'y :description "public key")) (let ((group (make-instance 'discrete-logarithm-group :p p :g g))) (make-instance 'elgamal-public-key :group group :y y))) (defmethod destructure-public-key ((public-key elgamal-public-key)) (list :p (elgamal-key-p public-key) :g (elgamal-key-g public-key) :y (elgamal-key-y public-key))) (defmethod make-private-key ((kind (eql :elgamal)) &key p g y x &allow-other-keys) (unless p (error 'missing-key-parameter :kind 'elgamal :parameter 'p :description "modulus")) (unless g (error 'missing-key-parameter :kind 'elgamal :parameter 'g :description "generator")) (unless x (error 'missing-key-parameter :kind 'elgamal :parameter 'x :description "private key")) (let ((group (make-instance 'discrete-logarithm-group :p p :g g))) (make-instance 'elgamal-private-key :group group :x x :y (or y (expt-mod g x p))))) (defmethod destructure-private-key ((private-key elgamal-private-key)) (list :p (elgamal-key-p private-key) :g (elgamal-key-g private-key) :x (elgamal-key-x private-key) :y (elgamal-key-y private-key))) (defmethod generate-key-pair ((kind (eql :elgamal)) &key num-bits compatible-with-key &allow-other-keys) (if compatible-with-key (let* ((p (elgamal-key-p compatible-with-key)) (g (elgamal-key-g compatible-with-key)) (x (+ 2 (strong-random (- p 3)))) (y (expt-mod g x p))) (values (make-private-key :elgamal :p p :g g :y y :x x) (make-public-key :elgamal :p p :g g :y y))) (progn (unless num-bits (error 'missing-key-parameter :kind 'elgamal :parameter 'num-bits :description "modulus size")) (let* ((n (if (< num-bits 512) (error 'ironclad-error :format-control "NUM-BITS is too small for an Elgamal key.") 256)) (q (generate-prime n)) (p (loop for z = (logior (ash 1 (- num-bits n 1)) (dpb 0 (byte 1 0) (random-bits (- num-bits n)))) for p = (1+ (* z q)) until (and (= num-bits (integer-length p)) (prime-p p)) finally (return p))) (g (find-subgroup-generator p q)) (x (+ 2 (strong-random (- p 3)))) (y (expt-mod g x p))) (values (make-private-key :elgamal :p p :g g :y y :x x) (make-public-key :elgamal :p p :g g :y y)))))) (defmethod generate-signature-nonce ((key elgamal-private-key) message &optional p) (declare (ignore key message)) (or *signature-nonce-for-test* (loop for k = (+ 1 (strong-random (- p 2))) until (= 1 (gcd k (- p 1))) finally (return k)))) (defmethod generate-signature-nonce ((key elgamal-public-key) message &optional p) ;; The name 'generate-signature-nonce' is not really adapted here as it is ;; used for encryption. But is it worth adding a new generic function just ;; for this case? (declare (ignore key message)) (or *signature-nonce-for-test* (loop for k = (+ 1 (strong-random (- p 2))) until (= 1 (gcd k (- p 1))) finally (return k)))) (defmethod make-message ((kind (eql :elgamal)) &key c1 c2 n-bits &allow-other-keys) (unless c1 (error 'missing-message-parameter :kind 'elgamal :parameter 'c1 :description "first ciphertext element")) (unless c2 (error 'missing-message-parameter :kind 'elgamal :parameter 'c2 :description "second ciphertext element")) (unless n-bits (error 'missing-message-parameter :kind 'elgamal :parameter 'n-bits :description "modulus size")) (concatenate '(simple-array (unsigned-byte 8) (*)) (integer-to-octets c1 :n-bits n-bits) (integer-to-octets c2 :n-bits n-bits))) (defmethod destructure-message ((kind (eql :elgamal)) message) (let ((length (length message))) (if (oddp length) (error 'invalid-message-length :kind 'elgamal) (let* ((middle (/ length 2)) (n-bits (* middle 8)) (c1 (octets-to-integer message :start 0 :end middle)) (c2 (octets-to-integer message :start middle))) (list :c1 c1 :c2 c2 :n-bits n-bits))))) (defmethod encrypt-message ((key elgamal-public-key) msg &key (start 0) end oaep &allow-other-keys) (let* ((p (elgamal-key-p key)) (pbits (integer-length p)) (g (elgamal-key-g key)) (y (elgamal-key-y key)) (m (if oaep (octets-to-integer (oaep-encode oaep (subseq msg start end) (/ pbits 8))) (octets-to-integer msg :start start :end end))) (k (generate-signature-nonce key msg p)) (c1 (expt-mod g k p)) (c2 (mod (* m (expt-mod y k p)) p))) (unless (< m p) (error 'invalid-message-length :kind 'elgamal)) (make-message :elgamal :c1 c1 :c2 c2 :n-bits pbits))) (defmethod decrypt-message ((key elgamal-private-key) msg &key (start 0) end n-bits oaep &allow-other-keys) (let* ((p (elgamal-key-p key)) (pbits (integer-length p)) (end (or end (length msg)))) (unless (= (* 4 (- end start)) pbits) (error 'invalid-message-length :kind 'elgamal)) (let* ((x (elgamal-key-x key)) (message-elements (destructure-message :elgamal (subseq msg start end))) (c1 (getf message-elements :c1)) (c2 (getf message-elements :c2)) (m (mod (* c2 (modular-inverse-with-blinding (expt-mod c1 x p) p)) p))) (if oaep (oaep-decode oaep (integer-to-octets m :n-bits pbits)) (integer-to-octets m :n-bits n-bits))))) (defmethod make-signature ((kind (eql :elgamal)) &key r s n-bits &allow-other-keys) (unless r (error 'missing-signature-parameter :kind 'elgamal :parameter 'r :description "first signature element")) (unless s (error 'missing-signature-parameter :kind 'elgamal :parameter 's :description "second signature element")) (unless n-bits (error 'missing-signature-parameter :kind 'elgamal :parameter 'n-bits :description "modulus size")) (concatenate '(simple-array (unsigned-byte 8) (*)) (integer-to-octets r :n-bits n-bits) (integer-to-octets s :n-bits n-bits))) (defmethod destructure-signature ((kind (eql :elgamal)) signature) (let ((length (length signature))) (if (oddp length) (error 'invalid-signature-length :kind 'elgamal) (let* ((middle (/ length 2)) (n-bits (* middle 8)) (r (octets-to-integer signature :start 0 :end middle)) (s (octets-to-integer signature :start middle))) (list :r r :s s :n-bits n-bits))))) (defmethod sign-message ((key elgamal-private-key) msg &key (start 0) end &allow-other-keys) (let* ((m (octets-to-integer msg :start start :end end)) (p (elgamal-key-p key)) (pbits (integer-length p))) (unless (< m (- p 1)) (error 'invalid-message-length :kind 'elgamal)) (let* ((g (elgamal-key-g key)) (x (elgamal-key-x key)) (k (generate-signature-nonce key msg p)) (r (expt-mod g k p)) (s (mod (* (- m (* r x)) (modular-inverse-with-blinding k (- p 1))) (- p 1)))) (if (not (zerop s)) (make-signature :elgamal :r r :s s :n-bits pbits) (sign-message key msg :start start :end end))))) (defmethod verify-signature ((key elgamal-public-key) msg signature &key (start 0) end &allow-other-keys) (let* ((m (octets-to-integer msg :start start :end end)) (p (elgamal-key-p key)) (pbits (integer-length p))) (unless (= (* 4 (length signature)) pbits) (error 'invalid-signature-length :kind 'elgamal)) (unless (< m (- p 1)) (error 'invalid-message-length :kind 'elgamal)) (let* ((g (elgamal-key-g key)) (y (elgamal-key-y key)) (signature-elements (destructure-signature :elgamal signature)) (r (getf signature-elements :r)) (s (getf signature-elements :s))) (and (< 0 r p) (< 0 s (- p 1)) (= (expt-mod g m p) (mod (* (expt-mod y r p) (expt-mod r s p)) p)))))) (defmethod diffie-hellman ((private-key elgamal-private-key) (public-key elgamal-public-key)) (let ((p (elgamal-key-p private-key)) (p1 (elgamal-key-p public-key)) (g (elgamal-key-g private-key)) (g1 (elgamal-key-g public-key))) (unless (and (= p p1) (= g g1)) (error 'incompatible-keys :kind 'elgamal)) (let ((pbits (integer-length p)) (x (elgamal-key-x private-key)) (y (elgamal-key-y public-key))) (integer-to-octets (expt-mod y x p) :n-bits pbits)))) ironclad-0.57/src/public-key/elliptic-curve.lisp000066400000000000000000000017741420372057600217320ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto) (defgeneric ec-point-on-curve-p (p) (:documentation "Return T if the point P is on the curve.")) (defgeneric ec-point-equal (p q) (:documentation "Return T if P and Q represent the same point.")) (defgeneric ec-double (p) (:documentation "Return the point 2P.")) (defgeneric ec-add (p q) (:documentation "Return the point P + Q.")) (defgeneric ec-scalar-mult (p e) (:documentation "Return the point e * P.")) (defgeneric ec-scalar-inv (kind n) (:documentation "Return the modular inverse of N.")) (defgeneric ec-encode-scalar (kind n) (:documentation "Return an octet vector representing the integer N.")) (defgeneric ec-decode-scalar (kind octets) (:documentation "Return the point represented by the OCTETS.")) (defgeneric ec-encode-point (p) (:documentation "Return an octet vector representing the point P.")) (defgeneric ec-decode-point (kind octets) (:documentation "Return the point represented by the OCTETS.")) ironclad-0.57/src/public-key/pkcs1.lisp000066400000000000000000000137531420372057600200240ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; pkcs1.lisp -- implementation of OAEP and PSS schemes (in-package :crypto) ;;; Mask generation function (defun mgf (digest-name seed num-bytes) "Expand the SEED to a NUM-BYTES bytes vector using the DIGEST-NAME digest." (loop with result = #() with digest-len = (digest-length digest-name) for digest = (make-digest digest-name) then (reinitialize-instance digest) for counter from 0 to (floor num-bytes digest-len) for counter-bytes = (integer-to-octets counter :n-bits 32) for tmp = (digest-sequence digest (concatenate '(vector (unsigned-byte 8)) seed counter-bytes)) do (setf result (concatenate '(vector (unsigned-byte 8)) result tmp)) finally (return (subseq result 0 num-bytes)))) (declaim (notinline oaep-encode)) ;; In the tests, this function is redefined to use a constant value ;; instead of a random one. Therefore it must not be inlined or the tests ;; will fail. (defun oaep-encode (digest-name message num-bytes &optional label) "Return a NUM-BYTES bytes vector containing the OAEP encoding of the MESSAGE using the DIGEST-NAME digest (and the optional LABEL octet vector)." (let* ((digest-name (if (eq digest-name t) :sha1 digest-name)) (digest-len (digest-length digest-name))) (assert (<= (length message) (- num-bytes (* 2 digest-len) 2))) (let* ((digest (make-digest digest-name)) (label (or label (coerce #() '(vector (unsigned-byte 8))))) (padding-len (- num-bytes (length message) (* 2 digest-len) 2)) (padding (make-array padding-len :element-type '(unsigned-byte 8) :initial-element 0)) (l-hash (digest-sequence digest label)) (db (concatenate '(vector (unsigned-byte 8)) l-hash padding #(1) message)) (seed (random-data digest-len)) (db-mask (mgf digest-name seed (- num-bytes digest-len 1))) (masked-db (map '(vector (unsigned-byte 8)) #'logxor db db-mask)) (seed-mask (mgf digest-name masked-db digest-len)) (masked-seed (map '(vector (unsigned-byte 8)) #'logxor seed seed-mask))) (concatenate '(vector (unsigned-byte 8)) #(0) masked-seed masked-db)))) (defun oaep-decode (digest-name message &optional label) "Return an octet vector containing the data that was encoded in the MESSAGE with OAEP using the DIGEST-NAME digest (and the optional LABEL octet vector)." (let* ((digest-name (if (eq digest-name t) :sha1 digest-name)) (digest-len (digest-length digest-name))) (assert (>= (length message) (+ (* 2 digest-len) 2))) (let* ((digest (make-digest digest-name)) (label (or label (coerce #() '(vector (unsigned-byte 8))))) (zero-byte (elt message 0)) (masked-seed (subseq message 1 (1+ digest-len))) (masked-db (subseq message (1+ digest-len))) (seed-mask (mgf digest-name masked-db digest-len)) (seed (map '(vector (unsigned-byte 8)) #'logxor masked-seed seed-mask)) (db-mask (mgf digest-name seed (- (length message) digest-len 1))) (db (map '(vector (unsigned-byte 8)) #'logxor masked-db db-mask)) (l-hash1 (digest-sequence digest label)) (l-hash2 (subseq db 0 digest-len)) (padding-len (loop for i from digest-len below (length db) while (zerop (elt db i)) finally (return (- i digest-len)))) (one-byte (elt db (+ digest-len padding-len)))) (unless (and (zerop zero-byte) (= 1 one-byte) (equalp l-hash1 l-hash2)) (error 'oaep-decoding-error)) (subseq db (+ digest-len padding-len 1))))) (declaim (notinline pss-encode)) ;; In the tests, this function is redefined to use a constant value ;; instead of a random one. Therefore it must not be inlined or the tests ;; will fail. (defun pss-encode (digest-name message num-bytes) (let* ((digest-name (if (eq digest-name t) :sha1 digest-name)) (digest-len (digest-length digest-name))) (assert (>= num-bytes (+ (* 2 digest-len) 2))) (let* ((m-hash (digest-sequence digest-name message)) (salt (random-data digest-len)) (m1 (concatenate '(vector (unsigned-byte 8)) #(0 0 0 0 0 0 0 0) m-hash salt)) (h (digest-sequence digest-name m1)) (ps (make-array (- num-bytes (* 2 digest-len) 2) :element-type '(unsigned-byte 8) :initial-element 0)) (db (concatenate '(vector (unsigned-byte 8)) ps #(1) salt)) (db-mask (mgf digest-name h (- num-bytes digest-len 1))) (masked-db (map '(vector (unsigned-byte 8)) #'logxor db db-mask))) (setf (ldb (byte 1 7) (elt masked-db 0)) 0) (concatenate '(vector (unsigned-byte 8)) masked-db h #(188))))) (defun pss-verify (digest-name message encoded-message) (let* ((digest-name (if (eq digest-name t) :sha1 digest-name)) (digest-len (digest-length digest-name)) (em-len (length encoded-message))) (assert (>= em-len (+ (* 2 digest-len) 2))) (assert (= (elt encoded-message (- em-len 1)) 188)) (let* ((m-hash (digest-sequence digest-name message)) (masked-db (subseq encoded-message 0 (- em-len digest-len 1))) (h (subseq encoded-message (- em-len digest-len 1) (- em-len 1))) (db-mask (mgf digest-name h (- em-len digest-len 1))) (db (map '(vector (unsigned-byte 8)) #'logxor masked-db db-mask))) (setf (ldb (byte 1 7) (elt db 0)) 0) (let* ((ps (subseq db 0 (- em-len (* 2 digest-len) 2))) (one-byte (elt db (- em-len (* 2 digest-len) 2))) (salt (subseq db (- (length db) digest-len))) (m1 (concatenate '(vector (unsigned-byte 8)) #(0 0 0 0 0 0 0 0) m-hash salt)) (h1 (digest-sequence digest-name m1))) (and (= 1 one-byte) (loop for i across ps always (zerop i)) (equalp h h1)))))) ironclad-0.57/src/public-key/public-key.lisp000066400000000000000000000050151420372057600210370ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; public-key.lisp -- implementation of common public key components (in-package :crypto) (defun list-all-key-pair-kinds () (copy-list '(:curve25519 :curve448 :dsa :ed25519 :ed448 :elgamal :rsa :secp256k1 :secp256r1 :secp384r1 :secp521r1))) ;;; class definitions (defclass discrete-logarithm-group () ((p :initarg :p :reader group-pval) (q :initarg :q :reader group-qval) (g :initarg :g :reader group-gval))) ;;; Special variable to force the signature nonce during tests instead of ;;; generating a random one. (defparameter *signature-nonce-for-test* nil) ;;; converting from integers to octet vectors (defun octets-to-integer (octet-vec &key (start 0) end (big-endian t) n-bits) (declare (type (simple-array (unsigned-byte 8) (*)) octet-vec) (optimize (speed 3) (space 0) (safety 1) (debug 0))) (let ((end (or end (length octet-vec)))) (multiple-value-bind (n-bits n-bytes) (let ((size (- end start))) (if n-bits (values n-bits (min (ceiling n-bits 8) size)) (values (* 8 size) size))) (let ((sum (if big-endian (loop with sum = 0 for i from (- end n-bytes) below end do (setf sum (+ (ash sum 8) (aref octet-vec i))) finally (return sum)) (loop for i from start below (+ start n-bytes) for j from 0 by 8 sum (ash (aref octet-vec i) j))))) (ldb (byte n-bits 0) sum))))) (defun integer-to-octets (bignum &key n-bits (big-endian t)) (declare (optimize (speed 3) (space 0) (safety 1) (debug 0))) (let* ((n-bits (or n-bits (integer-length bignum))) (bignum (ldb (byte n-bits 0) bignum)) (n-bytes (ceiling n-bits 8)) (octet-vec (make-array n-bytes :element-type '(unsigned-byte 8)))) (declare (type (simple-array (unsigned-byte 8) (*)) octet-vec)) (if big-endian (loop for i from (1- n-bytes) downto 0 for index from 0 do (setf (aref octet-vec index) (ldb (byte 8 (* i 8)) bignum)) finally (return octet-vec)) (loop for i from 0 below n-bytes for byte from 0 by 8 do (setf (aref octet-vec i) (ldb (byte 8 byte) bignum)) finally (return octet-vec))))) (defun maybe-integerize (thing) (etypecase thing (integer thing) ((simple-array (unsigned-byte 8) (*)) (octets-to-integer thing)))) ironclad-0.57/src/public-key/rsa.lisp000066400000000000000000000136551420372057600175710ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; rsa.lisp -- implementation of the RSA public key algorithm (in-package :crypto) ;;; class definitions (defclass rsa-key () ((n :initarg :n :reader rsa-key-modulus :type integer))) (defclass rsa-public-key (rsa-key) ((e :initarg :e :reader rsa-key-exponent :type integer))) (defclass rsa-private-key (rsa-key) ((d :initarg :d :reader rsa-key-exponent :type integer) (p :initarg :p :reader rsa-key-prime-p :type integer) (q :initarg :q :reader rsa-key-prime-q :type integer))) ;;; function definitions (defmethod make-public-key ((kind (eql :rsa)) &key e n &allow-other-keys) (unless e (error 'missing-key-parameter :kind 'rsa :parameter 'e :description "public exponent")) (unless n (error 'missing-key-parameter :kind 'rsa :parameter 'n :description "modulus")) (make-instance 'rsa-public-key :e e :n n)) (defmethod destructure-public-key ((public-key rsa-public-key)) (list :e (rsa-key-exponent public-key) :n (rsa-key-modulus public-key))) (defmethod make-private-key ((kind (eql :rsa)) &key d n (p 0) (q 0) &allow-other-keys) (unless d (error 'missing-key-parameter :kind 'rsa :parameter 'd :description "private exponent")) (unless n (error 'missing-key-parameter :kind 'rsa :parameter 'n :description "modulus")) (make-instance 'rsa-private-key :d d :n n :p p :q q)) (defmethod destructure-private-key ((private-key rsa-private-key)) (list :d (rsa-key-exponent private-key) :n (rsa-key-modulus private-key) :p (rsa-key-prime-p private-key) :q (rsa-key-prime-q private-key))) (defmethod generate-key-pair ((kind (eql :rsa)) &key num-bits &allow-other-keys) (unless num-bits (error 'missing-key-parameter :kind 'rsa :parameter 'num-bits :description "modulus size")) (let ((l (floor num-bits 2))) (multiple-value-bind (p q n) (loop for a = (generate-prime (- num-bits l)) for b = (generate-prime l) for c = (* a b) until (and (/= a b) (= num-bits (integer-length c))) finally (return (values a b c))) (let* ((phi (* (1- p) (1- q))) (e (loop for e = (+ 2 (strong-random (- phi 2))) until (= 1 (gcd e phi)) finally (return e))) (d (modular-inverse-with-blinding e phi))) (values (make-private-key :rsa :d d :n n :p p :q q) (make-public-key :rsa :e e :n n)))))) (defun rsa-core (msg exponent modulus) (assert (< msg modulus)) (expt-mod msg exponent modulus)) (defmethod make-message ((kind (eql :rsa)) &key m n-bits &allow-other-keys) (unless m (error 'missing-message-parameter :kind 'rsa :parameter 'm :description "ciphertext")) (unless n-bits (error 'missing-message-parameter :kind 'rsa :parameter 'n-bits :description "modulus size")) (integer-to-octets m :n-bits n-bits)) (defmethod destructure-message ((kind (eql :rsa)) message) (list :m (octets-to-integer message) :n-bits (* 8 (length message)))) (defmethod encrypt-message ((key rsa-public-key) msg &key (start 0) end oaep &allow-other-keys) (let* ((n (rsa-key-modulus key)) (nbits (integer-length n)) (e (rsa-key-exponent key)) (m (if oaep (octets-to-integer (oaep-encode oaep (subseq msg start end) (/ nbits 8))) (octets-to-integer msg :start start :end end)))) (unless (< m n) (error 'invalid-message-length :kind 'rsa)) (make-message :rsa :m (rsa-core m e n) :n-bits nbits))) (defmethod decrypt-message ((key rsa-private-key) msg &key (start 0) end n-bits oaep &allow-other-keys) (let* ((n (rsa-key-modulus key)) (nbits (integer-length n)) (end (or end (length msg)))) (unless (= (* 8 (- end start)) nbits) (error 'invalid-message-length :kind 'rsa)) (let* ((d (rsa-key-exponent key)) (message-elements (destructure-message :rsa (subseq msg start end))) (c (getf message-elements :m)) (m (rsa-core c d n))) (if oaep (oaep-decode oaep (integer-to-octets m :n-bits nbits)) (integer-to-octets m :n-bits n-bits))))) (defmethod make-signature ((kind (eql :rsa)) &key s n-bits &allow-other-keys) (unless s (error 'missing-signature-parameter :kind 'rsa :parameter 's :description "signature")) (unless n-bits (error 'missing-signature-parameter :kind 'rsa :parameter 'n-bits :description "modulus size")) (integer-to-octets s :n-bits n-bits)) (defmethod destructure-signature ((kind (eql :rsa)) signature) (list :s (octets-to-integer signature) :n-bits (* 8 (length signature)))) (defmethod sign-message ((key rsa-private-key) msg &key (start 0) end pss &allow-other-keys) (let ((nbits (integer-length (rsa-key-modulus key))) (m (subseq msg start end))) (when pss (setf m (pss-encode pss m (/ nbits 8)))) (setf m (octets-to-integer m)) (make-signature :rsa :s (rsa-core m (rsa-key-exponent key) (rsa-key-modulus key)) :n-bits nbits))) (defmethod verify-signature ((key rsa-public-key) msg signature &key (start 0) end pss &allow-other-keys) (let ((nbits (integer-length (rsa-key-modulus key)))) (unless (= (* 8 (length signature)) nbits) (error 'invalid-signature-length :kind 'rsa)) (let* ((signature-elements (destructure-signature :rsa signature)) (s (getf signature-elements :s)) (m (rsa-core s (rsa-key-exponent key) (rsa-key-modulus key)))) (if pss (pss-verify pss (subseq msg start end) (integer-to-octets m :n-bits nbits)) (= (octets-to-integer msg :start start :end end) m))))) ironclad-0.57/src/public-key/secp256k1.lisp000066400000000000000000000315241420372057600204220ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; secp256k1.lisp -- secp256k1 elliptic curve (in-package :crypto) ;;; class definitions (defclass secp256k1-public-key () ((y :initarg :y :reader secp256k1-key-y :type (simple-array (unsigned-byte 8) (*))))) (defclass secp256k1-private-key () ((x :initarg :x :reader secp256k1-key-x :type (simple-array (unsigned-byte 8) (*))) (y :initarg :y :reader secp256k1-key-y :type (simple-array (unsigned-byte 8) (*))))) (eval-when (:compile-toplevel :load-toplevel :execute) (defclass secp256k1-point () ;; Internally, a point (x, y) is represented using the Jacobian projective ;; coordinates (X, Y, Z), with x = X / Z^2 and y = Y / Z^3. ((x :initarg :x :type integer) (y :initarg :y :type integer) (z :initarg :z :type integer))) (defmethod make-load-form ((p secp256k1-point) &optional env) (declare (ignore env)) (make-load-form-saving-slots p))) ;;; constant and function definitions (defconstant +secp256k1-bits+ 256) (defconstant +secp256k1-p+ 115792089237316195423570985008687907853269984665640564039457584007908834671663) (defconstant +secp256k1-b+ 7) (defconstant +secp256k1-l+ 115792089237316195423570985008687907852837564279074904382605163141518161494337) (defconstant +secp256k1-i+ 86844066927987146567678238756515930889952488499230423029593188005931626003747) (defconst +secp256k1-g+ (make-instance 'secp256k1-point :x 55066263022277343669578718895168534326250603453777594175500187360389116729240 :y 32670510020758816978083085130507043184471273380659243275938904335757337482424 :z 1)) (defconst +secp256k1-point-at-infinity+ (make-instance 'secp256k1-point :x 1 :y 1 :z 0)) (defmethod ec-scalar-inv ((kind (eql :secp256k1)) n) (expt-mod n (- +secp256k1-p+ 2) +secp256k1-p+)) (defmethod ec-point-equal ((p secp256k1-point) (q secp256k1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (with-slots ((x2 x) (y2 y) (z2 z)) q (declare (type integer x2 y2 z2)) (let ((z1z1 (mod (* z1 z1) +secp256k1-p+)) (z2z2 (mod (* z2 z2) +secp256k1-p+))) (and (zerop (mod (- (* x1 z2z2) (* x2 z1z1)) +secp256k1-p+)) (zerop (mod (- (* y1 z2z2 z2) (* y2 z1z1 z1)) +secp256k1-p+))))))) (defmethod ec-double ((p secp256k1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (if (zerop z1) +secp256k1-point-at-infinity+ (let* ((a (mod (* x1 x1) +secp256k1-p+)) (b (mod (* y1 y1) +secp256k1-p+)) (c (mod (* b b) +secp256k1-p+)) (x1+b (mod (+ x1 b) +secp256k1-p+)) (d (mod (* 2 (- (* x1+b x1+b) a c)) +secp256k1-p+)) (e (mod (* 3 a) +secp256k1-p+)) (f (mod (* e e) +secp256k1-p+)) (x2 (mod (- f (* 2 d)) +secp256k1-p+)) (y2 (mod (- (* e (- d x2)) (* 8 c)) +secp256k1-p+)) (z2 (mod (* 2 y1 z1) +secp256k1-p+))) (make-instance 'secp256k1-point :x x2 :y y2 :z z2))))) (defmethod ec-add ((p secp256k1-point) (q secp256k1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (with-slots ((x2 x) (y2 y) (z2 z)) q (declare (type integer x2 y2 z2)) (cond ((zerop z1) q) ((zerop z2) p) (t (let* ((z1z1 (mod (* z1 z1) +secp256k1-p+)) (z2z2 (mod (* z2 z2) +secp256k1-p+)) (u1 (mod (* x1 z2z2) +secp256k1-p+)) (u2 (mod (* x2 z1z1) +secp256k1-p+)) (s1 (mod (* y1 z2 z2z2) +secp256k1-p+)) (s2 (mod (* y2 z1 z1z1) +secp256k1-p+))) (if (= u1 u2) (if (= s1 s2) (ec-double p) +secp256k1-point-at-infinity+) (let* ((h (mod (- u2 u1) +secp256k1-p+)) (i (mod (* 4 h h) +secp256k1-p+)) (j (mod (* h i) +secp256k1-p+)) (r (mod (* 2 (- s2 s1)) +secp256k1-p+)) (v (mod (* u1 i) +secp256k1-p+)) (x3 (mod (- (* r r) j (* 2 v)) +secp256k1-p+)) (y3 (mod (- (* r (- v x3)) (* 2 s1 j)) +secp256k1-p+)) (z1+z2 (mod (+ z1 z2) +secp256k1-p+)) (z3 (mod (* (- (* z1+z2 z1+z2) z1z1 z2z2) h) +secp256k1-p+))) (make-instance 'secp256k1-point :x x3 :y y3 :z z3))))))))) (defmethod ec-scalar-mult ((p secp256k1-point) e) ;; Point multiplication on NIST P-256 curve using the Montgomery ladder. (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)) (type integer e)) (do ((r0 +secp256k1-point-at-infinity+) (r1 p) (i (1- +secp256k1-bits+) (1- i))) ((minusp i) r0) (declare (type secp256k1-point r0 r1) (type fixnum i)) (if (logbitp i e) (setf r0 (ec-add r0 r1) r1 (ec-double r1)) (setf r1 (ec-add r0 r1) r0 (ec-double r0))))) (defmethod ec-point-on-curve-p ((p secp256k1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x y z) p (declare (type integer x y z)) (let* ((y2 (mod (* y y) +secp256k1-p+)) (x3 (mod (* x x x) +secp256k1-p+)) (z3 (mod (* z z z) +secp256k1-p+)) (z6 (mod (* z3 z3) +secp256k1-p+)) (a (mod (+ x3 (* +secp256k1-b+ z6)) +secp256k1-p+))) (declare (type integer y2 x3 z3 z6 a)) (zerop (mod (- y2 a) +secp256k1-p+))))) (defmethod ec-encode-scalar ((kind (eql :secp256k1)) n) (integer-to-octets n :n-bits +secp256k1-bits+ :big-endian t)) (defmethod ec-decode-scalar ((kind (eql :secp256k1)) octets) (octets-to-integer octets :big-endian t)) (defmethod ec-encode-point ((p secp256k1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x y z) p (declare (type integer x y z)) (when (zerop z) (error 'ironclad-error :format-control "The point at infinity can't be encoded.")) (let* ((invz (ec-scalar-inv :secp256k1 z)) (invz2 (mod (* invz invz) +secp256k1-p+)) (invz3 (mod (* invz2 invz) +secp256k1-p+)) (x (mod (* x invz2) +secp256k1-p+)) (y (mod (* y invz3) +secp256k1-p+))) (concatenate '(simple-array (unsigned-byte 8) (*)) (vector 4) (ec-encode-scalar :secp256k1 x) (ec-encode-scalar :secp256k1 y))))) (defmethod ec-decode-point ((kind (eql :secp256k1)) octets) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (case (aref octets 0) ((2 3) ;; Compressed point (if (= (length octets) (1+ (/ +secp256k1-bits+ 8))) (let* ((x-bytes (subseq octets 1 (1+ (/ +secp256k1-bits+ 8)))) (x (ec-decode-scalar :secp256k1 x-bytes)) (y-sign (- (aref octets 0) 2)) (y2 (mod (+ (* x x x) +secp256k1-b+) +secp256k1-p+)) (y (expt-mod y2 +secp256k1-i+ +secp256k1-p+)) (y (if (= (logand y 1) y-sign) y (- +secp256k1-p+ y))) (p (make-instance 'secp256k1-point :x x :y y :z 1))) (if (ec-point-on-curve-p p) p (error 'invalid-curve-point :kind 'secp256k1))) (error 'invalid-curve-point :kind 'secp256k1))) ((4) ;; Uncompressed point (if (= (length octets) (1+ (/ +secp256k1-bits+ 4))) (let* ((x-bytes (subseq octets 1 (1+ (/ +secp256k1-bits+ 8)))) (x (ec-decode-scalar :secp256k1 x-bytes)) (y-bytes (subseq octets (1+ (/ +secp256k1-bits+ 8)))) (y (ec-decode-scalar :secp256k1 y-bytes)) (p (make-instance 'secp256k1-point :x x :y y :z 1))) (if (ec-point-on-curve-p p) p (error 'invalid-curve-point :kind 'secp256k1))) (error 'invalid-curve-point :kind 'secp256k1))) (t (error 'invalid-curve-point :kind 'secp256k1)))) (defun secp256k1-public-key (sk) (let ((a (ec-decode-scalar :secp256k1 sk))) (ec-encode-point (ec-scalar-mult +secp256k1-g+ a)))) (defmethod make-signature ((kind (eql :secp256k1)) &key r s &allow-other-keys) (unless r (error 'missing-signature-parameter :kind 'secp256k1 :parameter 'r :description "first signature element")) (unless s (error 'missing-signature-parameter :kind 'secp256k1 :parameter 's :description "second signature element")) (concatenate '(simple-array (unsigned-byte 8) (*)) r s)) (defmethod destructure-signature ((kind (eql :secp256k1)) signature) (let ((length (length signature))) (if (/= length (/ +secp256k1-bits+ 4)) (error 'invalid-signature-length :kind 'secp256k1) (let* ((middle (/ length 2)) (r (subseq signature 0 middle)) (s (subseq signature middle))) (list :r r :s s))))) (defmethod generate-signature-nonce ((key secp256k1-private-key) message &optional parameters) (declare (ignore key message parameters)) (or *signature-nonce-for-test* (1+ (strong-random (1- +secp256k1-l+))))) ;;; Note that hashing is not performed here. (defmethod sign-message ((key secp256k1-private-key) message &key (start 0) end &allow-other-keys) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let* ((end (min (or end (length message)) (/ +secp256k1-bits+ 8))) (sk (ec-decode-scalar :secp256k1 (secp256k1-key-x key))) (k (generate-signature-nonce key message)) (invk (modular-inverse-with-blinding k +secp256k1-l+)) (r (ec-scalar-mult +secp256k1-g+ k)) (x (subseq (ec-encode-point r) 1 (1+ (/ +secp256k1-bits+ 8)))) (r (ec-decode-scalar :secp256k1 x)) (r (mod r +secp256k1-l+)) (h (subseq message start end)) (e (ec-decode-scalar :secp256k1 h)) (s (mod (* invk (+ e (* sk r))) +secp256k1-l+))) (if (not (or (zerop r) (zerop s))) (make-signature :secp256k1 :r (ec-encode-scalar :secp256k1 r) :s (ec-encode-scalar :secp256k1 s)) (sign-message key message :start start :end end)))) (defmethod verify-signature ((key secp256k1-public-key) message signature &key (start 0) end &allow-other-keys) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (unless (= (length signature) (/ +secp256k1-bits+ 4)) (error 'invalid-signature-length :kind 'secp256k1)) (let* ((end (min (or end (length message)) (/ +secp256k1-bits+ 8))) (pk (ec-decode-point :secp256k1 (secp256k1-key-y key))) (signature-elements (destructure-signature :secp256k1 signature)) (r (ec-decode-scalar :secp256k1 (getf signature-elements :r))) (s (ec-decode-scalar :secp256k1 (getf signature-elements :s))) (h (subseq message start end)) (e (ec-decode-scalar :secp256k1 h)) (w (modular-inverse-with-blinding s +secp256k1-l+)) (u1 (mod (* e w) +secp256k1-l+)) (u2 (mod (* r w) +secp256k1-l+)) (rp (ec-add (ec-scalar-mult +secp256k1-g+ u1) (ec-scalar-mult pk u2))) (x (subseq (ec-encode-point rp) 1 (1+ (/ +secp256k1-bits+ 8)))) (v (ec-decode-scalar :secp256k1 x)) (v (mod v +secp256k1-l+))) (and (< r +secp256k1-l+) (< s +secp256k1-l+) (= v r)))) (defmethod make-public-key ((kind (eql :secp256k1)) &key y &allow-other-keys) (unless y (error 'missing-key-parameter :kind 'secp256k1 :parameter 'y :description "public key")) (make-instance 'secp256k1-public-key :y y)) (defmethod destructure-public-key ((public-key secp256k1-public-key)) (list :y (secp256k1-key-y public-key))) (defmethod make-private-key ((kind (eql :secp256k1)) &key x y &allow-other-keys) (unless x (error 'missing-key-parameter :kind 'secp256k1 :parameter 'x :description "private key")) (make-instance 'secp256k1-private-key :x x :y (or y (secp256k1-public-key x)))) (defmethod destructure-private-key ((private-key secp256k1-private-key)) (list :x (secp256k1-key-x private-key) :y (secp256k1-key-y private-key))) (defmethod generate-key-pair ((kind (eql :secp256k1)) &key &allow-other-keys) (let* ((sk (ec-encode-scalar :secp256k1 (1+ (strong-random (1- +secp256k1-l+))))) (pk (secp256k1-public-key sk))) (values (make-private-key :secp256k1 :x sk :y pk) (make-public-key :secp256k1 :y pk)))) (defmethod diffie-hellman ((private-key secp256k1-private-key) (public-key secp256k1-public-key)) (let ((s (ec-decode-scalar :secp256k1 (secp256k1-key-x private-key))) (p (ec-decode-point :secp256k1 (secp256k1-key-y public-key)))) (ec-encode-point (ec-scalar-mult p s)))) ironclad-0.57/src/public-key/secp256r1.lisp000066400000000000000000000321711420372057600204300ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; secp256r1.lisp -- secp256r1 (a.k.a. NIST P-256) elliptic curve (in-package :crypto) ;;; class definitions (defclass secp256r1-public-key () ((y :initarg :y :reader secp256r1-key-y :type (simple-array (unsigned-byte 8) (*))))) (defclass secp256r1-private-key () ((x :initarg :x :reader secp256r1-key-x :type (simple-array (unsigned-byte 8) (*))) (y :initarg :y :reader secp256r1-key-y :type (simple-array (unsigned-byte 8) (*))))) (eval-when (:compile-toplevel :load-toplevel :execute) (defclass secp256r1-point () ;; Internally, a point (x, y) is represented using the Jacobian projective ;; coordinates (X, Y, Z), with x = X / Z^2 and y = Y / Z^3. ((x :initarg :x :type integer) (y :initarg :y :type integer) (z :initarg :z :type integer))) (defmethod make-load-form ((p secp256r1-point) &optional env) (declare (ignore env)) (make-load-form-saving-slots p))) ;;; constant and function definitions (defconstant +secp256r1-bits+ 256) (defconstant +secp256r1-p+ 115792089210356248762697446949407573530086143415290314195533631308867097853951) (defconstant +secp256r1-b+ 41058363725152142129326129780047268409114441015993725554835256314039467401291) (defconstant +secp256r1-l+ 115792089210356248762697446949407573529996955224135760342422259061068512044369) (defconstant +secp256r1-i+ 28948022302589062190674361737351893382521535853822578548883407827216774463488) (defconst +secp256r1-g+ (make-instance 'secp256r1-point :x 48439561293906451759052585252797914202762949526041747995844080717082404635286 :y 36134250956749795798585127919587881956611106672985015071877198253568414405109 :z 1)) (defconst +secp256r1-point-at-infinity+ (make-instance 'secp256r1-point :x 1 :y 1 :z 0)) (defmethod ec-scalar-inv ((kind (eql :secp256r1)) n) (expt-mod n (- +secp256r1-p+ 2) +secp256r1-p+)) (defmethod ec-point-equal ((p secp256r1-point) (q secp256r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (with-slots ((x2 x) (y2 y) (z2 z)) q (declare (type integer x2 y2 z2)) (let ((z1z1 (mod (* z1 z1) +secp256r1-p+)) (z2z2 (mod (* z2 z2) +secp256r1-p+))) (and (zerop (mod (- (* x1 z2z2) (* x2 z1z1)) +secp256r1-p+)) (zerop (mod (- (* y1 z2z2 z2) (* y2 z1z1 z1)) +secp256r1-p+))))))) (defmethod ec-double ((p secp256r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (if (zerop z1) +secp256r1-point-at-infinity+ (let* ((xx (mod (* x1 x1) +secp256r1-p+)) (yy (mod (* y1 y1) +secp256r1-p+)) (yyyy (mod (* yy yy) +secp256r1-p+)) (zz (mod (* z1 z1) +secp256r1-p+)) (x1+yy (mod (+ x1 yy) +secp256r1-p+)) (y1+z1 (mod (+ y1 z1) +secp256r1-p+)) (s (mod (* 2 (- (* x1+yy x1+yy) xx yyyy)) +secp256r1-p+)) (m (mod (* 3 (- xx (* zz zz))) +secp256r1-p+)) (u (mod (- (* m m) (* 2 s)) +secp256r1-p+)) (x2 u) (y2 (mod (- (* m (- s u)) (* 8 yyyy)) +secp256r1-p+)) (z2 (mod (- (* y1+z1 y1+z1) yy zz) +secp256r1-p+))) (make-instance 'secp256r1-point :x x2 :y y2 :z z2))))) (defmethod ec-add ((p secp256r1-point) (q secp256r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (with-slots ((x2 x) (y2 y) (z2 z)) q (declare (type integer x2 y2 z2)) (cond ((zerop z1) q) ((zerop z2) p) (t (let* ((z1z1 (mod (* z1 z1) +secp256r1-p+)) (z2z2 (mod (* z2 z2) +secp256r1-p+)) (u1 (mod (* x1 z2z2) +secp256r1-p+)) (u2 (mod (* x2 z1z1) +secp256r1-p+)) (s1 (mod (* y1 z2 z2z2) +secp256r1-p+)) (s2 (mod (* y2 z1 z1z1) +secp256r1-p+))) (if (= u1 u2) (if (= s1 s2) (ec-double p) +secp256r1-point-at-infinity+) (let* ((h (mod (- u2 u1) +secp256r1-p+)) (i (mod (* 4 h h) +secp256r1-p+)) (j (mod (* h i) +secp256r1-p+)) (r (mod (* 2 (- s2 s1)) +secp256r1-p+)) (v (mod (* u1 i) +secp256r1-p+)) (x3 (mod (- (* r r) j (* 2 v)) +secp256r1-p+)) (y3 (mod (- (* r (- v x3)) (* 2 s1 j)) +secp256r1-p+)) (z1+z2 (mod (+ z1 z2) +secp256r1-p+)) (z3 (mod (* (- (* z1+z2 z1+z2) z1z1 z2z2) h) +secp256r1-p+))) (make-instance 'secp256r1-point :x x3 :y y3 :z z3))))))))) (defmethod ec-scalar-mult ((p secp256r1-point) e) ;; Point multiplication on NIST P-256 curve using the Montgomery ladder. (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)) (type integer e)) (do ((r0 +secp256r1-point-at-infinity+) (r1 p) (i (1- +secp256r1-bits+) (1- i))) ((minusp i) r0) (declare (type secp256r1-point r0 r1) (type fixnum i)) (if (logbitp i e) (setf r0 (ec-add r0 r1) r1 (ec-double r1)) (setf r1 (ec-add r0 r1) r0 (ec-double r0))))) (defmethod ec-point-on-curve-p ((p secp256r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x y z) p (declare (type integer x y z)) (let* ((y2 (mod (* y y) +secp256r1-p+)) (x3 (mod (* x x x) +secp256r1-p+)) (z2 (mod (* z z) +secp256r1-p+)) (z4 (mod (* z2 z2) +secp256r1-p+)) (z6 (mod (* z4 z2) +secp256r1-p+)) (a (mod (+ x3 (* -3 x z4) (* +secp256r1-b+ z6)) +secp256r1-p+))) (declare (type integer y2 x3 z2 z4 z6 a)) (zerop (mod (- y2 a) +secp256r1-p+))))) (defmethod ec-encode-scalar ((kind (eql :secp256r1)) n) (integer-to-octets n :n-bits +secp256r1-bits+ :big-endian t)) (defmethod ec-decode-scalar ((kind (eql :secp256r1)) octets) (octets-to-integer octets :big-endian t)) (defmethod ec-encode-point ((p secp256r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x y z) p (declare (type integer x y z)) (when (zerop z) (error 'ironclad-error :format-control "The point at infinity can't be encoded.")) (let* ((invz (ec-scalar-inv :secp256r1 z)) (invz2 (mod (* invz invz) +secp256r1-p+)) (invz3 (mod (* invz2 invz) +secp256r1-p+)) (x (mod (* x invz2) +secp256r1-p+)) (y (mod (* y invz3) +secp256r1-p+))) (concatenate '(simple-array (unsigned-byte 8) (*)) (vector 4) (ec-encode-scalar :secp256r1 x) (ec-encode-scalar :secp256r1 y))))) (defmethod ec-decode-point ((kind (eql :secp256r1)) octets) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (case (aref octets 0) ((2 3) ;; Compressed point (if (= (length octets) (1+ (/ +secp256r1-bits+ 8))) (let* ((x-bytes (subseq octets 1 (1+ (/ +secp256r1-bits+ 8)))) (x (ec-decode-scalar :secp256r1 x-bytes)) (y-sign (- (aref octets 0) 2)) (y2 (mod (+ (* x x x) (* -3 x) +secp256r1-b+) +secp256r1-p+)) (y (expt-mod y2 +secp256r1-i+ +secp256r1-p+)) (y (if (= (logand y 1) y-sign) y (- +secp256r1-p+ y))) (p (make-instance 'secp256r1-point :x x :y y :z 1))) (if (ec-point-on-curve-p p) p (error 'invalid-curve-point :kind 'secp256r1))) (error 'invalid-curve-point :kind 'secp256r1))) ((4) ;; Uncompressed point (if (= (length octets) (1+ (/ +secp256r1-bits+ 4))) (let* ((x-bytes (subseq octets 1 (1+ (/ +secp256r1-bits+ 8)))) (x (ec-decode-scalar :secp256r1 x-bytes)) (y-bytes (subseq octets (1+ (/ +secp256r1-bits+ 8)))) (y (ec-decode-scalar :secp256r1 y-bytes)) (p (make-instance 'secp256r1-point :x x :y y :z 1))) (if (ec-point-on-curve-p p) p (error 'invalid-curve-point :kind 'secp256r1))) (error 'invalid-curve-point :kind 'secp256r1))) (t (error 'invalid-curve-point :kind 'secp256r1)))) (defun secp256r1-public-key (sk) (let ((a (ec-decode-scalar :secp256r1 sk))) (ec-encode-point (ec-scalar-mult +secp256r1-g+ a)))) (defmethod make-signature ((kind (eql :secp256r1)) &key r s &allow-other-keys) (unless r (error 'missing-signature-parameter :kind 'secp256r1 :parameter 'r :description "first signature element")) (unless s (error 'missing-signature-parameter :kind 'secp256r1 :parameter 's :description "second signature element")) (concatenate '(simple-array (unsigned-byte 8) (*)) r s)) (defmethod destructure-signature ((kind (eql :secp256r1)) signature) (let ((length (length signature))) (if (/= length (/ +secp256r1-bits+ 4)) (error 'invalid-signature-length :kind 'secp256r1) (let* ((middle (/ length 2)) (r (subseq signature 0 middle)) (s (subseq signature middle))) (list :r r :s s))))) (defmethod generate-signature-nonce ((key secp256r1-private-key) message &optional parameters) (declare (ignore key message parameters)) (or *signature-nonce-for-test* (1+ (strong-random (1- +secp256r1-l+))))) ;;; Note that hashing is not performed here. (defmethod sign-message ((key secp256r1-private-key) message &key (start 0) end &allow-other-keys) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let* ((end (min (or end (length message)) (/ +secp256r1-bits+ 8))) (sk (ec-decode-scalar :secp256r1 (secp256r1-key-x key))) (k (generate-signature-nonce key message)) (invk (modular-inverse-with-blinding k +secp256r1-l+)) (r (ec-scalar-mult +secp256r1-g+ k)) (x (subseq (ec-encode-point r) 1 (1+ (/ +secp256r1-bits+ 8)))) (r (ec-decode-scalar :secp256r1 x)) (r (mod r +secp256r1-l+)) (h (subseq message start end)) (e (ec-decode-scalar :secp256r1 h)) (s (mod (* invk (+ e (* sk r))) +secp256r1-l+))) (if (not (or (zerop r) (zerop s))) (make-signature :secp256r1 :r (ec-encode-scalar :secp256r1 r) :s (ec-encode-scalar :secp256r1 s)) (sign-message key message :start start :end end)))) (defmethod verify-signature ((key secp256r1-public-key) message signature &key (start 0) end &allow-other-keys) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (unless (= (length signature) (/ +secp256r1-bits+ 4)) (error 'invalid-signature-length :kind 'secp256r1)) (let* ((end (min (or end (length message)) (/ +secp256r1-bits+ 8))) (pk (ec-decode-point :secp256r1 (secp256r1-key-y key))) (signature-elements (destructure-signature :secp256r1 signature)) (r (ec-decode-scalar :secp256r1 (getf signature-elements :r))) (s (ec-decode-scalar :secp256r1 (getf signature-elements :s))) (h (subseq message start end)) (e (ec-decode-scalar :secp256r1 h)) (w (modular-inverse-with-blinding s +secp256r1-l+)) (u1 (mod (* e w) +secp256r1-l+)) (u2 (mod (* r w) +secp256r1-l+)) (rp (ec-add (ec-scalar-mult +secp256r1-g+ u1) (ec-scalar-mult pk u2))) (x (subseq (ec-encode-point rp) 1 (1+ (/ +secp256r1-bits+ 8)))) (v (ec-decode-scalar :secp256r1 x)) (v (mod v +secp256r1-l+))) (and (< r +secp256r1-l+) (< s +secp256r1-l+) (= v r)))) (defmethod make-public-key ((kind (eql :secp256r1)) &key y &allow-other-keys) (unless y (error 'missing-key-parameter :kind 'secp256r1 :parameter 'y :description "public key")) (make-instance 'secp256r1-public-key :y y)) (defmethod destructure-public-key ((public-key secp256r1-public-key)) (list :y (secp256r1-key-y public-key))) (defmethod make-private-key ((kind (eql :secp256r1)) &key x y &allow-other-keys) (unless x (error 'missing-key-parameter :kind 'secp256r1 :parameter 'x :description "private key")) (make-instance 'secp256r1-private-key :x x :y (or y (secp256r1-public-key x)))) (defmethod destructure-private-key ((private-key secp256r1-private-key)) (list :x (secp256r1-key-x private-key) :y (secp256r1-key-y private-key))) (defmethod generate-key-pair ((kind (eql :secp256r1)) &key &allow-other-keys) (let* ((sk (ec-encode-scalar :secp256r1 (1+ (strong-random (1- +secp256r1-l+))))) (pk (secp256r1-public-key sk))) (values (make-private-key :secp256r1 :x sk :y pk) (make-public-key :secp256r1 :y pk)))) (defmethod diffie-hellman ((private-key secp256r1-private-key) (public-key secp256r1-public-key)) (let ((s (ec-decode-scalar :secp256r1 (secp256r1-key-x private-key))) (p (ec-decode-point :secp256r1 (secp256r1-key-y public-key)))) (ec-encode-point (ec-scalar-mult p s)))) ironclad-0.57/src/public-key/secp384r1.lisp000066400000000000000000000325401420372057600204320ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; secp384r1.lisp -- secp384r1 (a.k.a. NIST P-384) elliptic curve (in-package :crypto) ;;; class definitions (defclass secp384r1-public-key () ((y :initarg :y :reader secp384r1-key-y :type (simple-array (unsigned-byte 8) (*))))) (defclass secp384r1-private-key () ((x :initarg :x :reader secp384r1-key-x :type (simple-array (unsigned-byte 8) (*))) (y :initarg :y :reader secp384r1-key-y :type (simple-array (unsigned-byte 8) (*))))) (eval-when (:compile-toplevel :load-toplevel :execute) (defclass secp384r1-point () ;; Internally, a point (x, y) is represented using the Jacobian projective ;; coordinates (X, Y, Z), with x = X / Z^2 and y = Y / Z^3. ((x :initarg :x :type integer) (y :initarg :y :type integer) (z :initarg :z :type integer))) (defmethod make-load-form ((p secp384r1-point) &optional env) (declare (ignore env)) (make-load-form-saving-slots p))) ;;; constant and function definitions (defconstant +secp384r1-bits+ 384) (defconstant +secp384r1-p+ 39402006196394479212279040100143613805079739270465446667948293404245721771496870329047266088258938001861606973112319) (defconstant +secp384r1-b+ 27580193559959705877849011840389048093056905856361568521428707301988689241309860865136260764883745107765439761230575) (defconstant +secp384r1-l+ 39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643) (defconstant +secp384r1-i+ 29551504647295859409209280075107710353809804452849085000961220053184291328622652746785449566194203501396205229834239) (defconst +secp384r1-g+ (make-instance 'secp384r1-point :x 26247035095799689268623156744566981891852923491109213387815615900925518854738050089022388053975719786650872476732087 :y 8325710961489029985546751289520108179287853048861315594709205902480503199884419224438643760392947333078086511627871 :z 1)) (defconst +secp384r1-point-at-infinity+ (make-instance 'secp384r1-point :x 1 :y 1 :z 0)) (defmethod ec-scalar-inv ((kind (eql :secp384r1)) n) (expt-mod n (- +secp384r1-p+ 2) +secp384r1-p+)) (defmethod ec-point-equal ((p secp384r1-point) (q secp384r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (with-slots ((x2 x) (y2 y) (z2 z)) q (declare (type integer x2 y2 z2)) (let ((z1z1 (mod (* z1 z1) +secp384r1-p+)) (z2z2 (mod (* z2 z2) +secp384r1-p+))) (and (zerop (mod (- (* x1 z2z2) (* x2 z1z1)) +secp384r1-p+)) (zerop (mod (- (* y1 z2z2 z2) (* y2 z1z1 z1)) +secp384r1-p+))))))) (defmethod ec-double ((p secp384r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (if (zerop z1) +secp384r1-point-at-infinity+ (let* ((xx (mod (* x1 x1) +secp384r1-p+)) (yy (mod (* y1 y1) +secp384r1-p+)) (yyyy (mod (* yy yy) +secp384r1-p+)) (zz (mod (* z1 z1) +secp384r1-p+)) (x1+yy (mod (+ x1 yy) +secp384r1-p+)) (y1+z1 (mod (+ y1 z1) +secp384r1-p+)) (s (mod (* 2 (- (* x1+yy x1+yy) xx yyyy)) +secp384r1-p+)) (m (mod (* 3 (- xx (* zz zz))) +secp384r1-p+)) (u (mod (- (* m m) (* 2 s)) +secp384r1-p+)) (x2 u) (y2 (mod (- (* m (- s u)) (* 8 yyyy)) +secp384r1-p+)) (z2 (mod (- (* y1+z1 y1+z1) yy zz) +secp384r1-p+))) (make-instance 'secp384r1-point :x x2 :y y2 :z z2))))) (defmethod ec-add ((p secp384r1-point) (q secp384r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (with-slots ((x2 x) (y2 y) (z2 z)) q (declare (type integer x2 y2 z2)) (cond ((zerop z1) q) ((zerop z2) p) (t (let* ((z1z1 (mod (* z1 z1) +secp384r1-p+)) (z2z2 (mod (* z2 z2) +secp384r1-p+)) (u1 (mod (* x1 z2z2) +secp384r1-p+)) (u2 (mod (* x2 z1z1) +secp384r1-p+)) (s1 (mod (* y1 z2 z2z2) +secp384r1-p+)) (s2 (mod (* y2 z1 z1z1) +secp384r1-p+))) (if (= u1 u2) (if (= s1 s2) (ec-double p) +secp384r1-point-at-infinity+) (let* ((h (mod (- u2 u1) +secp384r1-p+)) (i (mod (* 4 h h) +secp384r1-p+)) (j (mod (* h i) +secp384r1-p+)) (r (mod (* 2 (- s2 s1)) +secp384r1-p+)) (v (mod (* u1 i) +secp384r1-p+)) (x3 (mod (- (* r r) j (* 2 v)) +secp384r1-p+)) (y3 (mod (- (* r (- v x3)) (* 2 s1 j)) +secp384r1-p+)) (z1+z2 (mod (+ z1 z2) +secp384r1-p+)) (z3 (mod (* (- (* z1+z2 z1+z2) z1z1 z2z2) h) +secp384r1-p+))) (make-instance 'secp384r1-point :x x3 :y y3 :z z3))))))))) (defmethod ec-scalar-mult ((p secp384r1-point) e) ;; Point multiplication on NIST P-384 curve using the Montgomery ladder. (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)) (type integer e)) (do ((r0 +secp384r1-point-at-infinity+) (r1 p) (i (1- +secp384r1-bits+) (1- i))) ((minusp i) r0) (declare (type secp384r1-point r0 r1) (type fixnum i)) (if (logbitp i e) (setf r0 (ec-add r0 r1) r1 (ec-double r1)) (setf r1 (ec-add r0 r1) r0 (ec-double r0))))) (defmethod ec-point-on-curve-p ((p secp384r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x y z) p (declare (type integer x y z)) (let* ((y2 (mod (* y y) +secp384r1-p+)) (x3 (mod (* x x x) +secp384r1-p+)) (z2 (mod (* z z) +secp384r1-p+)) (z4 (mod (* z2 z2) +secp384r1-p+)) (z6 (mod (* z4 z2) +secp384r1-p+)) (a (mod (+ x3 (* -3 x z4) (* +secp384r1-b+ z6)) +secp384r1-p+))) (declare (type integer y2 x3 z2 z4 z6 a)) (zerop (mod (- y2 a) +secp384r1-p+))))) (defmethod ec-encode-scalar ((kind (eql :secp384r1)) n) (integer-to-octets n :n-bits +secp384r1-bits+ :big-endian t)) (defmethod ec-decode-scalar ((kind (eql :secp384r1)) octets) (octets-to-integer octets :big-endian t)) (defmethod ec-encode-point ((p secp384r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x y z) p (declare (type integer x y z)) (when (zerop z) (error 'ironclad-error :format-control "The point at infinity can't be encoded.")) (let* ((invz (ec-scalar-inv :secp384r1 z)) (invz2 (mod (* invz invz) +secp384r1-p+)) (invz3 (mod (* invz2 invz) +secp384r1-p+)) (x (mod (* x invz2) +secp384r1-p+)) (y (mod (* y invz3) +secp384r1-p+))) (concatenate '(simple-array (unsigned-byte 8) (*)) (vector 4) (ec-encode-scalar :secp384r1 x) (ec-encode-scalar :secp384r1 y))))) (defmethod ec-decode-point ((kind (eql :secp384r1)) octets) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (case (aref octets 0) ((2 3) ;; Compressed point (if (= (length octets) (1+ (/ +secp384r1-bits+ 8))) (let* ((x-bytes (subseq octets 1 (1+ (/ +secp384r1-bits+ 8)))) (x (ec-decode-scalar :secp384r1 x-bytes)) (y-sign (- (aref octets 0) 2)) (y2 (mod (+ (* x x x) (* -3 x) +secp384r1-b+) +secp384r1-p+)) (y (expt-mod y2 +secp384r1-i+ +secp384r1-p+)) (y (if (= (logand y 1) y-sign) y (- +secp384r1-p+ y))) (p (make-instance 'secp384r1-point :x x :y y :z 1))) (if (ec-point-on-curve-p p) p (error 'invalid-curve-point :kind 'secp384r1))) (error 'invalid-curve-point :kind 'secp384r1))) ((4) ;; Uncompressed point (if (= (length octets) (1+ (/ +secp384r1-bits+ 4))) (let* ((x-bytes (subseq octets 1 (1+ (/ +secp384r1-bits+ 8)))) (x (ec-decode-scalar :secp384r1 x-bytes)) (y-bytes (subseq octets (1+ (/ +secp384r1-bits+ 8)))) (y (ec-decode-scalar :secp384r1 y-bytes)) (p (make-instance 'secp384r1-point :x x :y y :z 1))) (if (ec-point-on-curve-p p) p (error 'invalid-curve-point :kind 'secp384r1))) (error 'invalid-curve-point :kind 'secp384r1))) (t (error 'invalid-curve-point :kind 'secp384r1)))) (defun secp384r1-public-key (sk) (let ((a (ec-decode-scalar :secp384r1 sk))) (ec-encode-point (ec-scalar-mult +secp384r1-g+ a)))) (defmethod make-signature ((kind (eql :secp384r1)) &key r s &allow-other-keys) (unless r (error 'missing-signature-parameter :kind 'secp384r1 :parameter 'r :description "first signature element")) (unless s (error 'missing-signature-parameter :kind 'secp384r1 :parameter 's :description "second signature element")) (concatenate '(simple-array (unsigned-byte 8) (*)) r s)) (defmethod destructure-signature ((kind (eql :secp384r1)) signature) (let ((length (length signature))) (if (/= length (/ +secp384r1-bits+ 4)) (error 'invalid-signature-length :kind 'secp384r1) (let* ((middle (/ length 2)) (r (subseq signature 0 middle)) (s (subseq signature middle))) (list :r r :s s))))) (defmethod generate-signature-nonce ((key secp384r1-private-key) message &optional parameters) (declare (ignore key message parameters)) (or *signature-nonce-for-test* (1+ (strong-random (1- +secp384r1-l+))))) ;;; Note that hashing is not performed here. (defmethod sign-message ((key secp384r1-private-key) message &key (start 0) end &allow-other-keys) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let* ((end (min (or end (length message)) (/ +secp384r1-bits+ 8))) (sk (ec-decode-scalar :secp384r1 (secp384r1-key-x key))) (k (generate-signature-nonce key message)) (invk (modular-inverse-with-blinding k +secp384r1-l+)) (r (ec-scalar-mult +secp384r1-g+ k)) (x (subseq (ec-encode-point r) 1 (1+ (/ +secp384r1-bits+ 8)))) (r (ec-decode-scalar :secp384r1 x)) (r (mod r +secp384r1-l+)) (h (subseq message start end)) (e (ec-decode-scalar :secp384r1 h)) (s (mod (* invk (+ e (* sk r))) +secp384r1-l+))) (if (not (or (zerop r) (zerop s))) (make-signature :secp384r1 :r (ec-encode-scalar :secp384r1 r) :s (ec-encode-scalar :secp384r1 s)) (sign-message key message :start start :end end)))) (defmethod verify-signature ((key secp384r1-public-key) message signature &key (start 0) end &allow-other-keys) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (unless (= (length signature) (/ +secp384r1-bits+ 4)) (error 'invalid-signature-length :kind 'secp384r1)) (let* ((end (min (or end (length message)) (/ +secp384r1-bits+ 8))) (pk (ec-decode-point :secp384r1 (secp384r1-key-y key))) (signature-elements (destructure-signature :secp384r1 signature)) (r (ec-decode-scalar :secp384r1 (getf signature-elements :r))) (s (ec-decode-scalar :secp384r1 (getf signature-elements :s))) (h (subseq message start end)) (e (ec-decode-scalar :secp384r1 h)) (w (modular-inverse-with-blinding s +secp384r1-l+)) (u1 (mod (* e w) +secp384r1-l+)) (u2 (mod (* r w) +secp384r1-l+)) (rp (ec-add (ec-scalar-mult +secp384r1-g+ u1) (ec-scalar-mult pk u2))) (x (subseq (ec-encode-point rp) 1 (1+ (/ +secp384r1-bits+ 8)))) (v (ec-decode-scalar :secp384r1 x)) (v (mod v +secp384r1-l+))) (and (< r +secp384r1-l+) (< s +secp384r1-l+) (= v r)))) (defmethod make-public-key ((kind (eql :secp384r1)) &key y &allow-other-keys) (unless y (error 'missing-key-parameter :kind 'secp384r1 :parameter 'y :description "public key")) (make-instance 'secp384r1-public-key :y y)) (defmethod destructure-public-key ((public-key secp384r1-public-key)) (list :y (secp384r1-key-y public-key))) (defmethod make-private-key ((kind (eql :secp384r1)) &key x y &allow-other-keys) (unless x (error 'missing-key-parameter :kind 'secp384r1 :parameter 'x :description "private key")) (make-instance 'secp384r1-private-key :x x :y (or y (secp384r1-public-key x)))) (defmethod destructure-private-key ((private-key secp384r1-private-key)) (list :x (secp384r1-key-x private-key) :y (secp384r1-key-y private-key))) (defmethod generate-key-pair ((kind (eql :secp384r1)) &key &allow-other-keys) (let* ((sk (ec-encode-scalar :secp384r1 (1+ (strong-random (1- +secp384r1-l+))))) (pk (secp384r1-public-key sk))) (values (make-private-key :secp384r1 :x sk :y pk) (make-public-key :secp384r1 :y pk)))) (defmethod diffie-hellman ((private-key secp384r1-private-key) (public-key secp384r1-public-key)) (let ((s (ec-decode-scalar :secp384r1 (secp384r1-key-x private-key))) (p (ec-decode-point :secp384r1 (secp384r1-key-y public-key)))) (ec-encode-point (ec-scalar-mult p s)))) ironclad-0.57/src/public-key/secp521r1.lisp000066400000000000000000000332531420372057600204250ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; secp521r1.lisp -- secp521r1 (a.k.a. NIST P-521) elliptic curve (in-package :crypto) ;;; class definitions (defclass secp521r1-public-key () ((y :initarg :y :reader secp521r1-key-y :type (simple-array (unsigned-byte 8) (*))))) (defclass secp521r1-private-key () ((x :initarg :x :reader secp521r1-key-x :type (simple-array (unsigned-byte 8) (*))) (y :initarg :y :reader secp521r1-key-y :type (simple-array (unsigned-byte 8) (*))))) (eval-when (:compile-toplevel :load-toplevel :execute) (defclass secp521r1-point () ;; Internally, a point (x, y) is represented using the Jacobian projective ;; coordinates (X, Y, Z), with x = X / Z^2 and y = Y / Z^3. ((x :initarg :x :type integer) (y :initarg :y :type integer) (z :initarg :z :type integer))) (defmethod make-load-form ((p secp521r1-point) &optional env) (declare (ignore env)) (make-load-form-saving-slots p))) ;;; constant and function definitions (defconstant +secp521r1-bits+ 521) (defconstant +secp521r1-p+ 6864797660130609714981900799081393217269435300143305409394463459185543183397656052122559640661454554977296311391480858037121987999716643812574028291115057151) (defconstant +secp521r1-b+ 1093849038073734274511112390766805569936207598951683748994586394495953116150735016013708737573759623248592132296706313309438452531591012912142327488478985984) (defconstant +secp521r1-l+ 6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449) (defconstant +secp521r1-i+ 5148598245097957286236425599311044912952076475107479057045847594389157387548242039091919730496090916232972233543610643527841490999787482859430521218336292863) (defconst +secp521r1-g+ (make-instance 'secp521r1-point :x 2661740802050217063228768716723360960729859168756973147706671368418802944996427808491545080627771902352094241225065558662157113545570916814161637315895999846 :y 3757180025770020463545507224491183603594455134769762486694567779615544477440556316691234405012945539562144444537289428522585666729196580810124344277578376784 :z 1)) (defconst +secp521r1-point-at-infinity+ (make-instance 'secp521r1-point :x 1 :y 1 :z 0)) (defmethod ec-scalar-inv ((kind (eql :secp521r1)) n) (expt-mod n (- +secp521r1-p+ 2) +secp521r1-p+)) (defmethod ec-point-equal ((p secp521r1-point) (q secp521r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (with-slots ((x2 x) (y2 y) (z2 z)) q (declare (type integer x2 y2 z2)) (let ((z1z1 (mod (* z1 z1) +secp521r1-p+)) (z2z2 (mod (* z2 z2) +secp521r1-p+))) (and (zerop (mod (- (* x1 z2z2) (* x2 z1z1)) +secp521r1-p+)) (zerop (mod (- (* y1 z2z2 z2) (* y2 z1z1 z1)) +secp521r1-p+))))))) (defmethod ec-double ((p secp521r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (if (zerop z1) +secp521r1-point-at-infinity+ (let* ((xx (mod (* x1 x1) +secp521r1-p+)) (yy (mod (* y1 y1) +secp521r1-p+)) (yyyy (mod (* yy yy) +secp521r1-p+)) (zz (mod (* z1 z1) +secp521r1-p+)) (x1+yy (mod (+ x1 yy) +secp521r1-p+)) (y1+z1 (mod (+ y1 z1) +secp521r1-p+)) (s (mod (* 2 (- (* x1+yy x1+yy) xx yyyy)) +secp521r1-p+)) (m (mod (* 3 (- xx (* zz zz))) +secp521r1-p+)) (u (mod (- (* m m) (* 2 s)) +secp521r1-p+)) (x2 u) (y2 (mod (- (* m (- s u)) (* 8 yyyy)) +secp521r1-p+)) (z2 (mod (- (* y1+z1 y1+z1) yy zz) +secp521r1-p+))) (make-instance 'secp521r1-point :x x2 :y y2 :z z2))))) (defmethod ec-add ((p secp521r1-point) (q secp521r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots ((x1 x) (y1 y) (z1 z)) p (declare (type integer x1 y1 z1)) (with-slots ((x2 x) (y2 y) (z2 z)) q (declare (type integer x2 y2 z2)) (cond ((zerop z1) q) ((zerop z2) p) (t (let* ((z1z1 (mod (* z1 z1) +secp521r1-p+)) (z2z2 (mod (* z2 z2) +secp521r1-p+)) (u1 (mod (* x1 z2z2) +secp521r1-p+)) (u2 (mod (* x2 z1z1) +secp521r1-p+)) (s1 (mod (* y1 z2 z2z2) +secp521r1-p+)) (s2 (mod (* y2 z1 z1z1) +secp521r1-p+))) (if (= u1 u2) (if (= s1 s2) (ec-double p) +secp521r1-point-at-infinity+) (let* ((h (mod (- u2 u1) +secp521r1-p+)) (i (mod (* 4 h h) +secp521r1-p+)) (j (mod (* h i) +secp521r1-p+)) (r (mod (* 2 (- s2 s1)) +secp521r1-p+)) (v (mod (* u1 i) +secp521r1-p+)) (x3 (mod (- (* r r) j (* 2 v)) +secp521r1-p+)) (y3 (mod (- (* r (- v x3)) (* 2 s1 j)) +secp521r1-p+)) (z1+z2 (mod (+ z1 z2) +secp521r1-p+)) (z3 (mod (* (- (* z1+z2 z1+z2) z1z1 z2z2) h) +secp521r1-p+))) (make-instance 'secp521r1-point :x x3 :y y3 :z z3))))))))) (defmethod ec-scalar-mult ((p secp521r1-point) e) ;; Point multiplication on NIST P-521 curve using the Montgomery ladder. (declare (optimize (speed 3) (safety 0) (space 0) (debug 0)) (type integer e)) (do ((r0 +secp521r1-point-at-infinity+) (r1 p) (i (1- +secp521r1-bits+) (1- i))) ((minusp i) r0) (declare (type secp521r1-point r0 r1) (type fixnum i)) (if (logbitp i e) (setf r0 (ec-add r0 r1) r1 (ec-double r1)) (setf r1 (ec-add r0 r1) r0 (ec-double r0))))) (defmethod ec-point-on-curve-p ((p secp521r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x y z) p (declare (type integer x y z)) (let* ((y2 (mod (* y y) +secp521r1-p+)) (x3 (mod (* x x x) +secp521r1-p+)) (z2 (mod (* z z) +secp521r1-p+)) (z4 (mod (* z2 z2) +secp521r1-p+)) (z6 (mod (* z4 z2) +secp521r1-p+)) (a (mod (+ x3 (* -3 x z4) (* +secp521r1-b+ z6)) +secp521r1-p+))) (declare (type integer y2 x3 z2 z4 z6 a)) (zerop (mod (- y2 a) +secp521r1-p+))))) (defmethod ec-encode-scalar ((kind (eql :secp521r1)) n) (integer-to-octets n :n-bits +secp521r1-bits+ :big-endian t)) (defmethod ec-decode-scalar ((kind (eql :secp521r1)) octets) (octets-to-integer octets :big-endian t)) (defmethod ec-encode-point ((p secp521r1-point)) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (with-slots (x y z) p (declare (type integer x y z)) (when (zerop z) (error 'ironclad-error :format-control "The point at infinity can't be encoded.")) (let* ((invz (ec-scalar-inv :secp521r1 z)) (invz2 (mod (* invz invz) +secp521r1-p+)) (invz3 (mod (* invz2 invz) +secp521r1-p+)) (x (mod (* x invz2) +secp521r1-p+)) (y (mod (* y invz3) +secp521r1-p+))) (concatenate '(simple-array (unsigned-byte 8) (*)) (vector 4) (ec-encode-scalar :secp521r1 x) (ec-encode-scalar :secp521r1 y))))) (defmethod ec-decode-point ((kind (eql :secp521r1)) octets) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (case (aref octets 0) ((2 3) ;; Compressed point (if (= (length octets) (1+ (ceiling +secp521r1-bits+ 8))) (let* ((x-bytes (subseq octets 1 (1+ (ceiling +secp521r1-bits+ 8)))) (x (ec-decode-scalar :secp521r1 x-bytes)) (y-sign (- (aref octets 0) 2)) (y2 (mod (+ (* x x x) (* -3 x) +secp521r1-b+) +secp521r1-p+)) (y (expt-mod y2 +secp521r1-i+ +secp521r1-p+)) (y (if (= (logand y 1) y-sign) y (- +secp521r1-p+ y))) (p (make-instance 'secp521r1-point :x x :y y :z 1))) (if (ec-point-on-curve-p p) p (error 'invalid-curve-point :kind 'secp521r1))) (error 'invalid-curve-point :kind 'secp521r1))) ((4) ;; Uncompressed point (if (= (length octets) (1+ (* 2 (ceiling +secp521r1-bits+ 8)))) (let* ((x-bytes (subseq octets 1 (1+ (ceiling +secp521r1-bits+ 8)))) (x (ec-decode-scalar :secp521r1 x-bytes)) (y-bytes (subseq octets (1+ (ceiling +secp521r1-bits+ 8)))) (y (ec-decode-scalar :secp521r1 y-bytes)) (p (make-instance 'secp521r1-point :x x :y y :z 1))) (if (ec-point-on-curve-p p) p (error 'invalid-curve-point :kind 'secp521r1))) (error 'invalid-curve-point :kind 'secp521r1))) (t (error 'invalid-curve-point :kind 'secp521r1)))) (defun secp521r1-public-key (sk) (let ((a (ec-decode-scalar :secp521r1 sk))) (ec-encode-point (ec-scalar-mult +secp521r1-g+ a)))) (defmethod make-signature ((kind (eql :secp521r1)) &key r s &allow-other-keys) (unless r (error 'missing-signature-parameter :kind 'secp521r1 :parameter 'r :description "first signature element")) (unless s (error 'missing-signature-parameter :kind 'secp521r1 :parameter 's :description "second signature element")) (concatenate '(simple-array (unsigned-byte 8) (*)) r s)) (defmethod destructure-signature ((kind (eql :secp521r1)) signature) (let ((length (length signature))) (if (/= length (* 2 (ceiling +secp521r1-bits+ 8))) (error 'invalid-signature-length :kind 'secp521r1) (let* ((middle (/ length 2)) (r (subseq signature 0 middle)) (s (subseq signature middle))) (list :r r :s s))))) (defmethod generate-signature-nonce ((key secp521r1-private-key) message &optional parameters) (declare (ignore key message parameters)) (or *signature-nonce-for-test* (1+ (strong-random (1- +secp521r1-l+))))) ;;; Note that hashing is not performed here. (defmethod sign-message ((key secp521r1-private-key) message &key (start 0) end &allow-other-keys) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (let* ((end (min (or end (length message)) (ceiling +secp521r1-bits+ 8))) (sk (ec-decode-scalar :secp521r1 (secp521r1-key-x key))) (k (generate-signature-nonce key message)) (invk (modular-inverse-with-blinding k +secp521r1-l+)) (r (ec-scalar-mult +secp521r1-g+ k)) (x (subseq (ec-encode-point r) 1 (1+ (ceiling +secp521r1-bits+ 8)))) (r (ec-decode-scalar :secp521r1 x)) (r (mod r +secp521r1-l+)) (h (subseq message start end)) (e (ec-decode-scalar :secp521r1 h)) (s (mod (* invk (+ e (* sk r))) +secp521r1-l+))) (if (not (or (zerop r) (zerop s))) (make-signature :secp521r1 :r (ec-encode-scalar :secp521r1 r) :s (ec-encode-scalar :secp521r1 s)) (sign-message key message :start start :end end)))) (defmethod verify-signature ((key secp521r1-public-key) message signature &key (start 0) end &allow-other-keys) (declare (optimize (speed 3) (safety 0) (space 0) (debug 0))) (unless (= (length signature) (* 2 (ceiling +secp521r1-bits+ 8))) (error 'invalid-signature-length :kind 'secp521r1)) (let* ((end (min (or end (length message)) (ceiling +secp521r1-bits+ 8))) (pk (ec-decode-point :secp521r1 (secp521r1-key-y key))) (signature-elements (destructure-signature :secp521r1 signature)) (r (ec-decode-scalar :secp521r1 (getf signature-elements :r))) (s (ec-decode-scalar :secp521r1 (getf signature-elements :s))) (h (subseq message start end)) (e (ec-decode-scalar :secp521r1 h)) (w (modular-inverse-with-blinding s +secp521r1-l+)) (u1 (mod (* e w) +secp521r1-l+)) (u2 (mod (* r w) +secp521r1-l+)) (rp (ec-add (ec-scalar-mult +secp521r1-g+ u1) (ec-scalar-mult pk u2))) (x (subseq (ec-encode-point rp) 1 (1+ (ceiling +secp521r1-bits+ 8)))) (v (ec-decode-scalar :secp521r1 x)) (v (mod v +secp521r1-l+))) (and (< r +secp521r1-l+) (< s +secp521r1-l+) (= v r)))) (defmethod make-public-key ((kind (eql :secp521r1)) &key y &allow-other-keys) (unless y (error 'missing-key-parameter :kind 'secp521r1 :parameter 'y :description "public key")) (make-instance 'secp521r1-public-key :y y)) (defmethod destructure-public-key ((public-key secp521r1-public-key)) (list :y (secp521r1-key-y public-key))) (defmethod make-private-key ((kind (eql :secp521r1)) &key x y &allow-other-keys) (unless x (error 'missing-key-parameter :kind 'secp521r1 :parameter 'x :description "private key")) (make-instance 'secp521r1-private-key :x x :y (or y (secp521r1-public-key x)))) (defmethod destructure-private-key ((private-key secp521r1-private-key)) (list :x (secp521r1-key-x private-key) :y (secp521r1-key-y private-key))) (defmethod generate-key-pair ((kind (eql :secp521r1)) &key &allow-other-keys) (let* ((sk (ec-encode-scalar :secp521r1 (1+ (strong-random (1- +secp521r1-l+))))) (pk (secp521r1-public-key sk))) (values (make-private-key :secp521r1 :x sk :y pk) (make-public-key :secp521r1 :y pk)))) (defmethod diffie-hellman ((private-key secp521r1-private-key) (public-key secp521r1-public-key)) (let ((s (ec-decode-scalar :secp521r1 (secp521r1-key-x private-key))) (p (ec-decode-point :secp521r1 (secp521r1-key-y public-key)))) (ec-encode-point (ec-scalar-mult p s)))) ironclad-0.57/src/text.lisp000066400000000000000000000013321420372057600157110ustar00rootroot00000000000000;;;; -*- mode: lisp, indent-tabs-mode: nil -*- ;;;; ;;;; text.lisp -- convenience functions for text handling (in-package :ironclad) (defun execute-with-digesting-text-stream (digest format fn) (with-open-stream (stream (ironclad:make-digesting-stream digest)) (with-open-stream (text-stream (flexi-streams:make-flexi-stream stream :external-format (flexi-streams:make-external-format format))) (funcall fn text-stream) (finish-output text-stream) (ironclad:produce-digest stream)))) (defmacro with-digesting-text-stream ((var digest &key (external-format :utf-8)) &body body) `(execute-with-digesting-text-stream ,digest ,external-format (lambda (,var) ,@body))) ironclad-0.57/src/util.lisp000066400000000000000000000077651420372057600157220ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; util.lisp -- functions that come in handy in crypto applications (in-package :crypto) (declaim (inline byte-array-to-hex-string hex-string-to-byte-array ascii-string-to-byte-array)) (defun byte-array-to-hex-string (vector &key (start 0) end (element-type 'base-char)) "Return a string containing the hexadecimal representation of the subsequence of VECTOR between START and END. ELEMENT-TYPE controls the element-type of the returned string." (declare (type (vector (unsigned-byte 8)) vector) (type fixnum start) (type (or null fixnum) end) (optimize (speed 3) (safety 1))) (let* ((end (or end (length vector))) (length (- end start)) (hexdigits #.(coerce "0123456789abcdef" 'simple-base-string))) (loop with string = (ecase element-type ;; so that the compiler optimization can jump in (base-char (make-string (* length 2) :element-type 'base-char)) (character (make-string (* length 2) :element-type 'character))) for i from start below end for j from 0 below (* length 2) by 2 do (let ((byte (aref vector i))) (declare (optimize (safety 0))) (setf (aref string j) (aref hexdigits (ldb (byte 4 4) byte)) (aref string (1+ j)) (aref hexdigits (ldb (byte 4 0) byte)))) finally (return string)))) (defun hex-string-to-byte-array (string &key (start 0) (end nil)) "Parses a substring of STRING delimited by START and END of hexadecimal digits into a byte array." (declare (type string string)) (let* ((end (or end (length string))) (length (/ (- end start) 2)) (key (make-array length :element-type '(unsigned-byte 8)))) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (flet ((char-to-digit (char) (or (position char "0123456789abcdef" :test #'char-equal) (error 'ironclad-error :format-control "~A is not a hex digit" :format-arguments (list char))))) (loop for i from 0 for j from start below end by 2 do (setf (aref key i) (+ (* (char-to-digit (char string j)) 16) (char-to-digit (char string (1+ j))))) finally (return key))))) (defun ascii-string-to-byte-array (string &key (start 0) end) "Convert STRING to a (VECTOR (UNSIGNED-BYTE 8)). It is an error if STRING contains any character whose CHAR-CODE is greater than 255." (declare (type string string) (type fixnum start) (type (or null fixnum) end) (optimize (speed 3) (safety 1))) (let* ((length (length string)) (vec (make-array length :element-type '(unsigned-byte 8))) (end (or end length))) (loop for i from start below end do (let ((byte (char-code (char string i)))) (unless (< byte 256) (error 'ironclad-error :format-control "~A is not an ASCII character" :format-arguments (list (char string i)))) (setf (aref vec i) byte)) finally (return vec)))) (declaim (notinline byte-array-to-hex-string hex-string-to-byte-array ascii-string-to-byte-array)) (defun constant-time-equal (data1 data2) "Returns T if the elements in DATA1 and DATA2 are identical, NIL otherwise. All the elements of DATA1 and DATA2 are compared to prevent timing attacks." (declare (type (simple-array (unsigned-byte 8) (*)) data1 data2) (optimize (speed 3))) (let ((res (if (= (length data1) (length data2)) 0 1))) (declare (type (unsigned-byte 8) res)) (loop for d1 across data1 for d2 across data2 do (setf res (logior res (logxor d1 d2)))) (zerop res))) ironclad-0.57/testing/000077500000000000000000000000001420372057600147235ustar00rootroot00000000000000ironclad-0.57/testing/test-vectors/000077500000000000000000000000001420372057600173655ustar00rootroot00000000000000ironclad-0.57/testing/test-vectors/3des.testvec000066400000000000000000003110751420372057600216310ustar00rootroot00000000000000;;; tests from NESSIE (http://www.cryptonessie.org/) ;;; #h"two-key" tests (:ecb-mode-test #h"80000000000000000000000000000000" #h"0000000000000000" #h"FAFD5084374FCE34") (:ecb-mode-test #h"40000000000000000000000000000000" #h"0000000000000000" #h"60CC37B7B537A1DC") (:ecb-mode-test #h"20000000000000000000000000000000" #h"0000000000000000" #h"BE3E7304FE92C2BC") (:ecb-mode-test #h"10000000000000000000000000000000" #h"0000000000000000" #h"49F9E7A60C406DBF") (:ecb-mode-test #h"08000000000000000000000000000000" #h"0000000000000000" #h"794FE1DC2F80CD38") (:ecb-mode-test #h"04000000000000000000000000000000" #h"0000000000000000" #h"15052BCDF21A1F1E") (:ecb-mode-test #h"02000000000000000000000000000000" #h"0000000000000000" #h"3A830D0BDA044EBB") (:ecb-mode-test #h"01000000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00800000000000000000000000000000" #h"0000000000000000" #h"0C1971C6874548E2") (:ecb-mode-test #h"00400000000000000000000000000000" #h"0000000000000000" #h"52C2F3FF100668BC") (:ecb-mode-test #h"00200000000000000000000000000000" #h"0000000000000000" #h"7B1C09D39C205B7B") (:ecb-mode-test #h"00100000000000000000000000000000" #h"0000000000000000" #h"7C940466050ADBAE") (:ecb-mode-test #h"00080000000000000000000000000000" #h"0000000000000000" #h"7B6456C45945CCA3") (:ecb-mode-test #h"00040000000000000000000000000000" #h"0000000000000000" #h"076B2C8A7ADDFE68") (:ecb-mode-test #h"00020000000000000000000000000000" #h"0000000000000000" #h"1885BEE3774FF50B") (:ecb-mode-test #h"00010000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00008000000000000000000000000000" #h"0000000000000000" #h"A286DE6C7ABCE306") (:ecb-mode-test #h"00004000000000000000000000000000" #h"0000000000000000" #h"A19DB1122136903C") (:ecb-mode-test #h"00002000000000000000000000000000" #h"0000000000000000" #h"A77F2F3085DC2D16") (:ecb-mode-test #h"00001000000000000000000000000000" #h"0000000000000000" #h"B39C1E6C3C65E45A") (:ecb-mode-test #h"00000800000000000000000000000000" #h"0000000000000000" #h"E90963FB7F2B1193") (:ecb-mode-test #h"00000400000000000000000000000000" #h"0000000000000000" #h"743C3DBD464ABE66") (:ecb-mode-test #h"00000200000000000000000000000000" #h"0000000000000000" #h"E954174CC0C75C5D") (:ecb-mode-test #h"00000100000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000080000000000000000000000000" #h"0000000000000000" #h"E788FF69D915395A") (:ecb-mode-test #h"00000040000000000000000000000000" #h"0000000000000000" #h"DA518384A7F98F8F") (:ecb-mode-test #h"00000020000000000000000000000000" #h"0000000000000000" #h"71986C565B7A4697") (:ecb-mode-test #h"00000010000000000000000000000000" #h"0000000000000000" #h"5A015BF03B8FF6D2") (:ecb-mode-test #h"00000008000000000000000000000000" #h"0000000000000000" #h"DD311EB7A3202393") (:ecb-mode-test #h"00000004000000000000000000000000" #h"0000000000000000" #h"0DC6A2C01EADE617") (:ecb-mode-test #h"00000002000000000000000000000000" #h"0000000000000000" #h"D1EAE0F689C433DE") (:ecb-mode-test #h"00000001000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000000800000000000000000000000" #h"0000000000000000" #h"833803AFBCE49177") (:ecb-mode-test #h"00000000400000000000000000000000" #h"0000000000000000" #h"94EBB684C7C41EF5") (:ecb-mode-test #h"00000000200000000000000000000000" #h"0000000000000000" #h"D42EF0A1B9BC4392") (:ecb-mode-test #h"00000000100000000000000000000000" #h"0000000000000000" #h"9E1D42F406FE0387") (:ecb-mode-test #h"00000000080000000000000000000000" #h"0000000000000000" #h"8DB9EE4A1773C8FE") (:ecb-mode-test #h"00000000040000000000000000000000" #h"0000000000000000" #h"8195C0ED7D066F6B") (:ecb-mode-test #h"00000000020000000000000000000000" #h"0000000000000000" #h"FB3B39E43C76D53D") (:ecb-mode-test #h"00000000010000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000000008000000000000000000000" #h"0000000000000000" #h"E21113D2C6870FBE") (:ecb-mode-test #h"00000000004000000000000000000000" #h"0000000000000000" #h"D1CF3B57F6294D0E") (:ecb-mode-test #h"00000000002000000000000000000000" #h"0000000000000000" #h"8990AAB2362CCE0F") (:ecb-mode-test #h"00000000001000000000000000000000" #h"0000000000000000" #h"198774D2FC7A641B") (:ecb-mode-test #h"00000000000800000000000000000000" #h"0000000000000000" #h"F3AC68FDC060AE6E") (:ecb-mode-test #h"00000000000400000000000000000000" #h"0000000000000000" #h"A854715C1EE8B311") (:ecb-mode-test #h"00000000000200000000000000000000" #h"0000000000000000" #h"D140934E0D5171DB") (:ecb-mode-test #h"00000000000100000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000000000080000000000000000000" #h"0000000000000000" #h"F3B2D1D19B852861") (:ecb-mode-test #h"00000000000040000000000000000000" #h"0000000000000000" #h"EE8DC918A74545F1") (:ecb-mode-test #h"00000000000020000000000000000000" #h"0000000000000000" #h"99B2175DCE3D348C") (:ecb-mode-test #h"00000000000010000000000000000000" #h"0000000000000000" #h"73AE9A4A6376637E") (:ecb-mode-test #h"00000000000008000000000000000000" #h"0000000000000000" #h"C55C05072C072CBE") (:ecb-mode-test #h"00000000000004000000000000000000" #h"0000000000000000" #h"FB4808530D49FFD3") (:ecb-mode-test #h"00000000000002000000000000000000" #h"0000000000000000" #h"3C1B66BD5170F2A1") (:ecb-mode-test #h"00000000000001000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000000000000800000000000000000" #h"0000000000000000" #h"A38DC58A5AEF3CAA") (:ecb-mode-test #h"00000000000000400000000000000000" #h"0000000000000000" #h"4F29AB3449FBA969") (:ecb-mode-test #h"00000000000000200000000000000000" #h"0000000000000000" #h"F75ACF1692C115D2") (:ecb-mode-test #h"00000000000000100000000000000000" #h"0000000000000000" #h"5A448A95522AF894") (:ecb-mode-test #h"00000000000000080000000000000000" #h"0000000000000000" #h"FEEA19D1125CEB53") (:ecb-mode-test #h"00000000000000040000000000000000" #h"0000000000000000" #h"7A7907DEB712DD81") (:ecb-mode-test #h"00000000000000020000000000000000" #h"0000000000000000" #h"41792F90E798B8E2") (:ecb-mode-test #h"00000000000000010000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000000000000008000000000000000" #h"0000000000000000" #h"C2A4DD96151453C2") (:ecb-mode-test #h"00000000000000004000000000000000" #h"0000000000000000" #h"5E87809F6B8A7ED5") (:ecb-mode-test #h"00000000000000002000000000000000" #h"0000000000000000" #h"81B838A1E9CD59B3") (:ecb-mode-test #h"00000000000000001000000000000000" #h"0000000000000000" #h"DED028F0C1F5A774") (:ecb-mode-test #h"00000000000000000800000000000000" #h"0000000000000000" #h"48C983815809FC87") (:ecb-mode-test #h"00000000000000000400000000000000" #h"0000000000000000" #h"C1A75845F22BE951") (:ecb-mode-test #h"00000000000000000200000000000000" #h"0000000000000000" #h"C60F823E8E994489") (:ecb-mode-test #h"00000000000000000100000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000000000000000080000000000000" #h"0000000000000000" #h"709F8FCB044172FE") (:ecb-mode-test #h"00000000000000000040000000000000" #h"0000000000000000" #h"26BC2DE634BFFFD4") (:ecb-mode-test #h"00000000000000000020000000000000" #h"0000000000000000" #h"D98126355C2E03E6") (:ecb-mode-test #h"00000000000000000010000000000000" #h"0000000000000000" #h"49AAA91B49345137") (:ecb-mode-test #h"00000000000000000008000000000000" #h"0000000000000000" #h"A59854DCE009126D") (:ecb-mode-test #h"00000000000000000004000000000000" #h"0000000000000000" #h"21C46B9FDE5CD36B") (:ecb-mode-test #h"00000000000000000002000000000000" #h"0000000000000000" #h"DEB4AE36E07BC053") (:ecb-mode-test #h"00000000000000000001000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000000000000000000800000000000" #h"0000000000000000" #h"D47ADF8B94CACA7A") (:ecb-mode-test #h"00000000000000000000400000000000" #h"0000000000000000" #h"D26D9656F91A1EE2") (:ecb-mode-test #h"00000000000000000000200000000000" #h"0000000000000000" #h"EE31B8E767C9B337") (:ecb-mode-test #h"00000000000000000000100000000000" #h"0000000000000000" #h"D19BA61DD59CE9A1") (:ecb-mode-test #h"00000000000000000000080000000000" #h"0000000000000000" #h"482863934D17804B") (:ecb-mode-test #h"00000000000000000000040000000000" #h"0000000000000000" #h"78C8CBCAC3B7FD35") (:ecb-mode-test #h"00000000000000000000020000000000" #h"0000000000000000" #h"7B8B051E6C8AA8B6") (:ecb-mode-test #h"00000000000000000000010000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000000000000000000008000000000" #h"0000000000000000" #h"8CCFCD2418E85750") (:ecb-mode-test #h"00000000000000000000004000000000" #h"0000000000000000" #h"E74CA11808ED17A3") (:ecb-mode-test #h"00000000000000000000002000000000" #h"0000000000000000" #h"0A634C7A69897F35") (:ecb-mode-test #h"00000000000000000000001000000000" #h"0000000000000000" #h"6C2C0F27E973CE29") (:ecb-mode-test #h"00000000000000000000000800000000" #h"0000000000000000" #h"AD5F11ED913E918C") (:ecb-mode-test #h"00000000000000000000000400000000" #h"0000000000000000" #h"3CE4B119BC1FC701") (:ecb-mode-test #h"00000000000000000000000200000000" #h"0000000000000000" #h"7E6C8995AA52D298") (:ecb-mode-test #h"00000000000000000000000100000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000000000000000000000080000000" #h"0000000000000000" #h"A9FE6341C8621918") (:ecb-mode-test #h"00000000000000000000000040000000" #h"0000000000000000" #h"CE99FD5D50B22CEF") (:ecb-mode-test #h"00000000000000000000000020000000" #h"0000000000000000" #h"83E55C4A19ABCB56") (:ecb-mode-test #h"00000000000000000000000010000000" #h"0000000000000000" #h"96E6A993443B9DD4") (:ecb-mode-test #h"00000000000000000000000008000000" #h"0000000000000000" #h"6781B65D74A6B9FB") (:ecb-mode-test #h"00000000000000000000000004000000" #h"0000000000000000" #h"D9EF04E272D1A78A") (:ecb-mode-test #h"00000000000000000000000002000000" #h"0000000000000000" #h"AC8B09EC3153D57B") (:ecb-mode-test #h"00000000000000000000000001000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000000000000000000000000800000" #h"0000000000000000" #h"60B4B8E3A8F5CBEC") (:ecb-mode-test #h"00000000000000000000000000400000" #h"0000000000000000" #h"A5AB6F6EB66057A9") (:ecb-mode-test #h"00000000000000000000000000200000" #h"0000000000000000" #h"FF7B0E870FB1FD0B") (:ecb-mode-test #h"00000000000000000000000000100000" #h"0000000000000000" #h"7497A098AA651D00") (:ecb-mode-test #h"00000000000000000000000000080000" #h"0000000000000000" #h"270A943BEABEA8EC") (:ecb-mode-test #h"00000000000000000000000000040000" #h"0000000000000000" #h"67DB327ED5DF89E3") (:ecb-mode-test #h"00000000000000000000000000020000" #h"0000000000000000" #h"4871C3B7436121DE") (:ecb-mode-test #h"00000000000000000000000000010000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000000000000000000000000008000" #h"0000000000000000" #h"41BBC8EF36654838") (:ecb-mode-test #h"00000000000000000000000000004000" #h"0000000000000000" #h"FCBD166CA0EA87E2") (:ecb-mode-test #h"00000000000000000000000000002000" #h"0000000000000000" #h"9DFFC6EE9751B5CF") (:ecb-mode-test #h"00000000000000000000000000001000" #h"0000000000000000" #h"C01B7878EBCE8DD3") (:ecb-mode-test #h"00000000000000000000000000000800" #h"0000000000000000" #h"357E5A4DC162D715") (:ecb-mode-test #h"00000000000000000000000000000400" #h"0000000000000000" #h"268F93CAEB248E2E") (:ecb-mode-test #h"00000000000000000000000000000200" #h"0000000000000000" #h"A5D4174744B84E7D") (:ecb-mode-test #h"00000000000000000000000000000100" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000000000000000000000000000080" #h"0000000000000000" #h"46F5E7077CB869A8") (:ecb-mode-test #h"00000000000000000000000000000040" #h"0000000000000000" #h"502CD2BF4FC0B793") (:ecb-mode-test #h"00000000000000000000000000000020" #h"0000000000000000" #h"C0278007230589E4") (:ecb-mode-test #h"00000000000000000000000000000010" #h"0000000000000000" #h"52710C55818FAF52") (:ecb-mode-test #h"00000000000000000000000000000008" #h"0000000000000000" #h"DF4A77123610F2B1") (:ecb-mode-test #h"00000000000000000000000000000004" #h"0000000000000000" #h"EF840B00DA448234") (:ecb-mode-test #h"00000000000000000000000000000002" #h"0000000000000000" #h"FFCCC32A699CB7C5") (:ecb-mode-test #h"00000000000000000000000000000001" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"8000000000000000" #h"95F8A5E5DD31D900") (:ecb-mode-test #h"00000000000000000000000000000000" #h"4000000000000000" #h"DD7F121CA5015619") (:ecb-mode-test #h"00000000000000000000000000000000" #h"2000000000000000" #h"2E8653104F3834EA") (:ecb-mode-test #h"00000000000000000000000000000000" #h"1000000000000000" #h"4BD388FF6CD81D4F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0800000000000000" #h"20B9E767B2FB1456") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0400000000000000" #h"55579380D77138EF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0200000000000000" #h"6CC5DEFAAF04512F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0100000000000000" #h"0D9F279BA5D87260") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0080000000000000" #h"D9031B0271BD5A0A") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0040000000000000" #h"424250B37C3DD951") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0020000000000000" #h"B8061B7ECD9A21E5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0010000000000000" #h"F15D0F286B65BD28") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0008000000000000" #h"ADD0CC8D6E5DEBA1") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0004000000000000" #h"E6D5F82752AD63D1") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0002000000000000" #h"ECBFE3BD3F591A5E") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0001000000000000" #h"F356834379D165CD") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000800000000000" #h"2B9F982F20037FA9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000400000000000" #h"889DE068A16F0BE6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000200000000000" #h"E19E275D846A1298") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000100000000000" #h"329A8ED523D71AEC") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000080000000000" #h"E7FCE22557D23C97") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000040000000000" #h"12A9F5817FF2D65D") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000020000000000" #h"A484C3AD38DC9C19") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000010000000000" #h"FBE00A8A1EF8AD72") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000008000000000" #h"750D079407521363") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000004000000000" #h"64FEED9C724C2FAF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000002000000000" #h"F02B263B328E2B60") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000001000000000" #h"9D64555A9A10B852") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000800000000" #h"D106FF0BED5255D7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000400000000" #h"E1652C6B138C64A5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000200000000" #h"E428581186EC8F46") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000100000000" #h"AEB5F5EDE22D1A36") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000080000000" #h"E943D7568AEC0C5C") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000040000000" #h"DF98C8276F54B04B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000020000000" #h"B160E4680F6C696F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000010000000" #h"FA0752B07D9C4AB8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000008000000" #h"CA3A2B036DBC8502") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000004000000" #h"5E0905517BB59BCF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000002000000" #h"814EEB3B91D90726") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000001000000" #h"4D49DB1532919C9F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000800000" #h"25EB5FC3F8CF0621") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000400000" #h"AB6A20C0620D1C6F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000200000" #h"79E90DBC98F92CCA") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000100000" #h"866ECEDD8072BB0E") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000080000" #h"8B54536F2F3E64A8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000040000" #h"EA51D3975595B86B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000020000" #h"CAFFC6AC4542DE31") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000010000" #h"8DD45A2DDF90796C") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000008000" #h"1029D55E880EC2D0") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000004000" #h"5D86CB23639DBEA9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000002000" #h"1D1CA853AE7C0C5F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000001000" #h"CE332329248F3228") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000800" #h"8405D1ABE24FB942") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000400" #h"E643D78090CA4207") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000200" #h"48221B9937748A23") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000100" #h"DD7C0BBD61FAFD54") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000080" #h"2FBC291A570DB5C4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000040" #h"E07C30D7E4E26E12") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000020" #h"0953E2258E8E90A1") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000010" #h"5B711BC4CEEBF2EE") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000008" #h"CC083F1E6D9E85F6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000004" #h"D2FD8867D50D2DFE") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000002" #h"06E7EA22CE92708F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000001" #h"166B40B44ABA4BD6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"01010101010101010101010101010101" #h"0101010101010101" #h"994D4DC157B96C52") (:ecb-mode-test #h"02020202020202020202020202020202" #h"0202020202020202" #h"E127C2B61D98E6E2") (:ecb-mode-test #h"03030303030303030303030303030303" #h"0303030303030303" #h"984C91D78A269CE3") (:ecb-mode-test #h"04040404040404040404040404040404" #h"0404040404040404" #h"1F4570BB77550683") (:ecb-mode-test #h"05050505050505050505050505050505" #h"0505050505050505" #h"3990ABF98D672B16") (:ecb-mode-test #h"06060606060606060606060606060606" #h"0606060606060606" #h"3F5150BBA081D585") (:ecb-mode-test #h"07070707070707070707070707070707" #h"0707070707070707" #h"C65242248C9CF6F2") (:ecb-mode-test #h"08080808080808080808080808080808" #h"0808080808080808" #h"10772D40FAD24257") (:ecb-mode-test #h"09090909090909090909090909090909" #h"0909090909090909" #h"F0139440647A6E7B") (:ecb-mode-test #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"0A0A0A0A0A0A0A0A" #h"0A288603044D740C") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B" #h"6359916942F7438F") (:ecb-mode-test #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"0C0C0C0C0C0C0C0C" #h"934316AE443CF08B") (:ecb-mode-test #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"0D0D0D0D0D0D0D0D" #h"E3F56D7F1130A2B7") (:ecb-mode-test #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"0E0E0E0E0E0E0E0E" #h"A2E4705087C6B6B4") (:ecb-mode-test #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"0F0F0F0F0F0F0F0F" #h"D5D76E09A447E8C3") (:ecb-mode-test #h"10101010101010101010101010101010" #h"1010101010101010" #h"DD7515F2BFC17F85") (:ecb-mode-test #h"11111111111111111111111111111111" #h"1111111111111111" #h"F40379AB9E0EC533") (:ecb-mode-test #h"12121212121212121212121212121212" #h"1212121212121212" #h"96CD27784D1563E5") (:ecb-mode-test #h"13131313131313131313131313131313" #h"1313131313131313" #h"2911CF5E94D33FE1") (:ecb-mode-test #h"14141414141414141414141414141414" #h"1414141414141414" #h"377B7F7CA3E5BBB3") (:ecb-mode-test #h"15151515151515151515151515151515" #h"1515151515151515" #h"701AA63832905A92") (:ecb-mode-test #h"16161616161616161616161616161616" #h"1616161616161616" #h"2006E716C4252D6D") (:ecb-mode-test #h"17171717171717171717171717171717" #h"1717171717171717" #h"452C1197422469F8") (:ecb-mode-test #h"18181818181818181818181818181818" #h"1818181818181818" #h"C33FD1EB49CB64DA") (:ecb-mode-test #h"19191919191919191919191919191919" #h"1919191919191919" #h"7572278F364EB50D") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A" #h"69E51488403EF4C3") (:ecb-mode-test #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"1B1B1B1B1B1B1B1B" #h"FF847E0ADF192825") (:ecb-mode-test #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"1C1C1C1C1C1C1C1C" #h"521B7FB3B41BB791") (:ecb-mode-test #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"1D1D1D1D1D1D1D1D" #h"26059A6A0F3F6B35") (:ecb-mode-test #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"1E1E1E1E1E1E1E1E" #h"F24A8D2231C77538") (:ecb-mode-test #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"1F1F1F1F1F1F1F1F" #h"4FD96EC0D3304EF6") (:ecb-mode-test #h"20202020202020202020202020202020" #h"2020202020202020" #h"18A9D580A900B699") (:ecb-mode-test #h"21212121212121212121212121212121" #h"2121212121212121" #h"88586E1D755B9B5A") (:ecb-mode-test #h"22222222222222222222222222222222" #h"2222222222222222" #h"0F8ADFFB11DC2784") (:ecb-mode-test #h"23232323232323232323232323232323" #h"2323232323232323" #h"2F30446C8312404A") (:ecb-mode-test #h"24242424242424242424242424242424" #h"2424242424242424" #h"0BA03D9E6C196511") (:ecb-mode-test #h"25252525252525252525252525252525" #h"2525252525252525" #h"3E55E997611E4B7D") (:ecb-mode-test #h"26262626262626262626262626262626" #h"2626262626262626" #h"B2522FB5F158F0DF") (:ecb-mode-test #h"27272727272727272727272727272727" #h"2727272727272727" #h"2109425935406AB8") (:ecb-mode-test #h"28282828282828282828282828282828" #h"2828282828282828" #h"11A16028F310FF16") (:ecb-mode-test #h"29292929292929292929292929292929" #h"2929292929292929" #h"73F0C45F379FE67F") (:ecb-mode-test #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"2A2A2A2A2A2A2A2A" #h"DCAD4338F7523816") (:ecb-mode-test #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"2B2B2B2B2B2B2B2B" #h"B81634C1CEAB298C") (:ecb-mode-test #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"2C2C2C2C2C2C2C2C" #h"DD2CCB29B6C4C349") (:ecb-mode-test #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"2D2D2D2D2D2D2D2D" #h"7D07A77A2ABD50A7") (:ecb-mode-test #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"2E2E2E2E2E2E2E2E" #h"30C1B0C1FD91D371") (:ecb-mode-test #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"2F2F2F2F2F2F2F2F" #h"C4427B31AC61973B") (:ecb-mode-test #h"30303030303030303030303030303030" #h"3030303030303030" #h"F47BB46273B15EB5") (:ecb-mode-test #h"31313131313131313131313131313131" #h"3131313131313131" #h"655EA628CF62585F") (:ecb-mode-test #h"32323232323232323232323232323232" #h"3232323232323232" #h"AC978C247863388F") (:ecb-mode-test #h"33333333333333333333333333333333" #h"3333333333333333" #h"0432ED386F2DE328") (:ecb-mode-test #h"34343434343434343434343434343434" #h"3434343434343434" #h"D254014CB986B3C2") (:ecb-mode-test #h"35353535353535353535353535353535" #h"3535353535353535" #h"B256E34BEDB49801") (:ecb-mode-test #h"36363636363636363636363636363636" #h"3636363636363636" #h"37F8759EB77E7BFC") (:ecb-mode-test #h"37373737373737373737373737373737" #h"3737373737373737" #h"5013CA4F62C9CEA0") (:ecb-mode-test #h"38383838383838383838383838383838" #h"3838383838383838" #h"8940F7B3EACA5939") (:ecb-mode-test #h"39393939393939393939393939393939" #h"3939393939393939" #h"E22B19A55086774B") (:ecb-mode-test #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"3A3A3A3A3A3A3A3A" #h"B04A2AAC925ABB0B") (:ecb-mode-test #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"3B3B3B3B3B3B3B3B" #h"8D250D58361597FC") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C" #h"51F0114FB6A6CD37") (:ecb-mode-test #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"3D3D3D3D3D3D3D3D" #h"9D0BB4DB830ECB73") (:ecb-mode-test #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"3E3E3E3E3E3E3E3E" #h"E96089D6368F3E1A") (:ecb-mode-test #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"3F3F3F3F3F3F3F3F" #h"5C4CA877A4E1E92D") (:ecb-mode-test #h"40404040404040404040404040404040" #h"4040404040404040" #h"6D55DDBC8DEA95FF") (:ecb-mode-test #h"41414141414141414141414141414141" #h"4141414141414141" #h"19DF84AC95551003") (:ecb-mode-test #h"42424242424242424242424242424242" #h"4242424242424242" #h"724E7332696D08A7") (:ecb-mode-test #h"43434343434343434343434343434343" #h"4343434343434343" #h"B91810B8CDC58FE2") (:ecb-mode-test #h"44444444444444444444444444444444" #h"4444444444444444" #h"06E23526EDCCD0C4") (:ecb-mode-test #h"45454545454545454545454545454545" #h"4545454545454545" #h"EF52491D5468D441") (:ecb-mode-test #h"46464646464646464646464646464646" #h"4646464646464646" #h"48019C59E39B90C5") (:ecb-mode-test #h"47474747474747474747474747474747" #h"4747474747474747" #h"0544083FB902D8C0") (:ecb-mode-test #h"48484848484848484848484848484848" #h"4848484848484848" #h"63B15CADA668CE12") (:ecb-mode-test #h"49494949494949494949494949494949" #h"4949494949494949" #h"EACC0C1264171071") (:ecb-mode-test #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"4A4A4A4A4A4A4A4A" #h"9D2B8C0AC605F274") (:ecb-mode-test #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"4B4B4B4B4B4B4B4B" #h"C90F2F4C98A8FB2A") (:ecb-mode-test #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"4C4C4C4C4C4C4C4C" #h"03481B4828FD1D04") (:ecb-mode-test #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"4D4D4D4D4D4D4D4D" #h"C78FC45A1DCEA2E2") (:ecb-mode-test #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"4E4E4E4E4E4E4E4E" #h"DB96D88C3460D801") (:ecb-mode-test #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"4F4F4F4F4F4F4F4F" #h"6C69E720F5105518") (:ecb-mode-test #h"50505050505050505050505050505050" #h"5050505050505050" #h"0D262E418BC893F3") (:ecb-mode-test #h"51515151515151515151515151515151" #h"5151515151515151" #h"6AD84FD7848A0A5C") (:ecb-mode-test #h"52525252525252525252525252525252" #h"5252525252525252" #h"C365CB35B34B6114") (:ecb-mode-test #h"53535353535353535353535353535353" #h"5353535353535353" #h"1155392E877F42A9") (:ecb-mode-test #h"54545454545454545454545454545454" #h"5454545454545454" #h"531BE5F9405DA715") (:ecb-mode-test #h"55555555555555555555555555555555" #h"5555555555555555" #h"3BCDD41E6165A5E8") (:ecb-mode-test #h"56565656565656565656565656565656" #h"5656565656565656" #h"2B1FF5610A19270C") (:ecb-mode-test #h"57575757575757575757575757575757" #h"5757575757575757" #h"D90772CF3F047CFD") (:ecb-mode-test #h"58585858585858585858585858585858" #h"5858585858585858" #h"1BEA27FFB72457B7") (:ecb-mode-test #h"59595959595959595959595959595959" #h"5959595959595959" #h"85C3E0C429F34C27") (:ecb-mode-test #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"5A5A5A5A5A5A5A5A" #h"F9038021E37C7618") (:ecb-mode-test #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"5B5B5B5B5B5B5B5B" #h"35BC6FF838DBA32F") (:ecb-mode-test #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"5C5C5C5C5C5C5C5C" #h"4927ACC8CE45ECE7") (:ecb-mode-test #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"5D5D5D5D5D5D5D5D" #h"E812EE6E3572985C") (:ecb-mode-test #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"5E5E5E5E5E5E5E5E" #h"9BB93A89627BF65F") (:ecb-mode-test #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"5F5F5F5F5F5F5F5F" #h"EF12476884CB74CA") (:ecb-mode-test #h"60606060606060606060606060606060" #h"6060606060606060" #h"1BF17E00C09E7CBF") (:ecb-mode-test #h"61616161616161616161616161616161" #h"6161616161616161" #h"29932350C098DB5D") (:ecb-mode-test #h"62626262626262626262626262626262" #h"6262626262626262" #h"B476E6499842AC54") (:ecb-mode-test #h"63636363636363636363636363636363" #h"6363636363636363" #h"5C662C29C1E96056") (:ecb-mode-test #h"64646464646464646464646464646464" #h"6464646464646464" #h"3AF1703D76442789") (:ecb-mode-test #h"65656565656565656565656565656565" #h"6565656565656565" #h"86405D9B425A8C8C") (:ecb-mode-test #h"66666666666666666666666666666666" #h"6666666666666666" #h"EBBF4810619C2C55") (:ecb-mode-test #h"67676767676767676767676767676767" #h"6767676767676767" #h"F8D1CD7367B21B5D") (:ecb-mode-test #h"68686868686868686868686868686868" #h"6868686868686868" #h"9EE703142BF8D7E2") (:ecb-mode-test #h"69696969696969696969696969696969" #h"6969696969696969" #h"5FDFFFC3AAAB0CB3") (:ecb-mode-test #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"6A6A6A6A6A6A6A6A" #h"26C940AB13574231") (:ecb-mode-test #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"6B6B6B6B6B6B6B6B" #h"1E2DC77E36A84693") (:ecb-mode-test #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"6C6C6C6C6C6C6C6C" #h"0F4FF4D9BC7E2244") (:ecb-mode-test #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"6D6D6D6D6D6D6D6D" #h"A4C9A0D04D3280CD") (:ecb-mode-test #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"6E6E6E6E6E6E6E6E" #h"9FAF2C96FE84919D") (:ecb-mode-test #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"6F6F6F6F6F6F6F6F" #h"115DBC965E6096C8") (:ecb-mode-test #h"70707070707070707070707070707070" #h"7070707070707070" #h"AF531E9520994017") (:ecb-mode-test #h"71717171717171717171717171717171" #h"7171717171717171" #h"B971ADE70E5C89EE") (:ecb-mode-test #h"72727272727272727272727272727272" #h"7272727272727272" #h"415D81C86AF9C376") (:ecb-mode-test #h"73737373737373737373737373737373" #h"7373737373737373" #h"8DFB864FDB3C6811") (:ecb-mode-test #h"74747474747474747474747474747474" #h"7474747474747474" #h"10B1C170E3398F91") (:ecb-mode-test #h"75757575757575757575757575757575" #h"7575757575757575" #h"CFEF7A1C0218DB1E") (:ecb-mode-test #h"76767676767676767676767676767676" #h"7676767676767676" #h"DBAC30A2A40B1B9C") (:ecb-mode-test #h"77777777777777777777777777777777" #h"7777777777777777" #h"89D3BF37052162E9") (:ecb-mode-test #h"78787878787878787878787878787878" #h"7878787878787878" #h"80D9230BDAEB67DC") (:ecb-mode-test #h"79797979797979797979797979797979" #h"7979797979797979" #h"3440911019AD68D7") (:ecb-mode-test #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"7A7A7A7A7A7A7A7A" #h"9626FE57596E199E") (:ecb-mode-test #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"7B7B7B7B7B7B7B7B" #h"DEA0B796624BB5BA") (:ecb-mode-test #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"7C7C7C7C7C7C7C7C" #h"E9E40542BDDB3E9D") (:ecb-mode-test #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"7D7D7D7D7D7D7D7D" #h"8AD99914B354B911") (:ecb-mode-test #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"7E7E7E7E7E7E7E7E" #h"6F85B98DD12CB13B") (:ecb-mode-test #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"7F7F7F7F7F7F7F7F" #h"10130DA3C3A23924") (:ecb-mode-test #h"80808080808080808080808080808080" #h"8080808080808080" #h"EFECF25C3C5DC6DB") (:ecb-mode-test #h"81818181818181818181818181818181" #h"8181818181818181" #h"907A46722ED34EC4") (:ecb-mode-test #h"82828282828282828282828282828282" #h"8282828282828282" #h"752666EB4CAB46EE") (:ecb-mode-test #h"83838383838383838383838383838383" #h"8383838383838383" #h"161BFABD4224C162") (:ecb-mode-test #h"84848484848484848484848484848484" #h"8484848484848484" #h"215F48699DB44A45") (:ecb-mode-test #h"85858585858585858585858585858585" #h"8585858585858585" #h"69D901A8A691E661") (:ecb-mode-test #h"86868686868686868686868686868686" #h"8686868686868686" #h"CBBF6EEFE6529728") (:ecb-mode-test #h"87878787878787878787878787878787" #h"8787878787878787" #h"7F26DCF425149823") (:ecb-mode-test #h"88888888888888888888888888888888" #h"8888888888888888" #h"762C40C8FADE9D16") (:ecb-mode-test #h"89898989898989898989898989898989" #h"8989898989898989" #h"2453CF5D5BF4E463") (:ecb-mode-test #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"8A8A8A8A8A8A8A8A" #h"301085E3FDE724E1") (:ecb-mode-test #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"8B8B8B8B8B8B8B8B" #h"EF4E3E8F1CC6706E") (:ecb-mode-test #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"8C8C8C8C8C8C8C8C" #h"720479B024C397EE") (:ecb-mode-test #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"8D8D8D8D8D8D8D8D" #h"BEA27E3795063C89") (:ecb-mode-test #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"8E8E8E8E8E8E8E8E" #h"468E5218F1A37611") (:ecb-mode-test #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"8F8F8F8F8F8F8F8F" #h"50ACE16ADF66BFE8") (:ecb-mode-test #h"90909090909090909090909090909090" #h"9090909090909090" #h"EEA24369A19F6937") (:ecb-mode-test #h"91919191919191919191919191919191" #h"9191919191919191" #h"6050D369017B6E62") (:ecb-mode-test #h"92929292929292929292929292929292" #h"9292929292929292" #h"5B365F2FB2CD7F32") (:ecb-mode-test #h"93939393939393939393939393939393" #h"9393939393939393" #h"F0B00B264381DDBB") (:ecb-mode-test #h"94949494949494949494949494949494" #h"9494949494949494" #h"E1D23881C957B96C") (:ecb-mode-test #h"95959595959595959595959595959595" #h"9595959595959595" #h"D936BF54ECA8BDCE") (:ecb-mode-test #h"96969696969696969696969696969696" #h"9696969696969696" #h"A020003C5554F34C") (:ecb-mode-test #h"97979797979797979797979797979797" #h"9797979797979797" #h"6118FCEBD407281D") (:ecb-mode-test #h"98989898989898989898989898989898" #h"9898989898989898" #h"072E328C984DE4A2") (:ecb-mode-test #h"99999999999999999999999999999999" #h"9999999999999999" #h"1440B7EF9E63D3AA") (:ecb-mode-test #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"9A9A9A9A9A9A9A9A" #h"79BFA264BDA57373") (:ecb-mode-test #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"9B9B9B9B9B9B9B9B" #h"C50E8FC289BBD876") (:ecb-mode-test #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"9C9C9C9C9C9C9C9C" #h"A399D3D63E169FA9") (:ecb-mode-test #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"9D9D9D9D9D9D9D9D" #h"4B8919B667BD53AB") (:ecb-mode-test #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"9E9E9E9E9E9E9E9E" #h"D66CDCAF3F6724A2") (:ecb-mode-test #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"9F9F9F9F9F9F9F9F" #h"E40E81FF3F618340") (:ecb-mode-test #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"A0A0A0A0A0A0A0A0" #h"10EDB8977B348B35") (:ecb-mode-test #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"A1A1A1A1A1A1A1A1" #h"6446C5769D8409A0") (:ecb-mode-test #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"A2A2A2A2A2A2A2A2" #h"17ED1191CA8D67A3") (:ecb-mode-test #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"A3A3A3A3A3A3A3A3" #h"B6D8533731BA1318") (:ecb-mode-test #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"A4A4A4A4A4A4A4A4" #h"CA439007C7245CD0") (:ecb-mode-test #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"A5A5A5A5A5A5A5A5" #h"06FC7FDE1C8389E7") (:ecb-mode-test #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"A6A6A6A6A6A6A6A6" #h"7A3C1F3BD60CB3D8") (:ecb-mode-test #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"A7A7A7A7A7A7A7A7" #h"E415D80048DBA848") (:ecb-mode-test #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"A8A8A8A8A8A8A8A8" #h"26F88D30C0FB8302") (:ecb-mode-test #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"A9A9A9A9A9A9A9A9" #h"D4E00A9EF5E6D8F3") (:ecb-mode-test #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"AAAAAAAAAAAAAAAA" #h"C4322BE19E9A5A17") (:ecb-mode-test #h"ABABABABABABABABABABABABABABABAB" #h"ABABABABABABABAB" #h"ACE41A06BFA258EA") (:ecb-mode-test #h"ACACACACACACACACACACACACACACACAC" #h"ACACACACACACACAC" #h"EEAAC6D17880BD56") (:ecb-mode-test #h"ADADADADADADADADADADADADADADADAD" #h"ADADADADADADADAD" #h"3C9A34CA4CB49EEB") (:ecb-mode-test #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"AEAEAEAEAEAEAEAE" #h"9527B0287B75F5A3") (:ecb-mode-test #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"AFAFAFAFAFAFAFAF" #h"F2D9D1BE74376C0C") (:ecb-mode-test #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"B0B0B0B0B0B0B0B0" #h"939618DF0AEFAAE7") (:ecb-mode-test #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"B1B1B1B1B1B1B1B1" #h"24692773CB9F27FE") (:ecb-mode-test #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"B2B2B2B2B2B2B2B2" #h"38703BA5E2315D1D") (:ecb-mode-test #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"B3B3B3B3B3B3B3B3" #h"FCB7E4B7D702E2FB") (:ecb-mode-test #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"B4B4B4B4B4B4B4B4" #h"36F0D0B3675704D5") (:ecb-mode-test #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"B5B5B5B5B5B5B5B5" #h"62D473F539FA0D8B") (:ecb-mode-test #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"B6B6B6B6B6B6B6B6" #h"1533F3ED9BE8EF8E") (:ecb-mode-test #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"B7B7B7B7B7B7B7B7" #h"9C4EA352599731ED") (:ecb-mode-test #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"B8B8B8B8B8B8B8B8" #h"FABBF7C046FD273F") (:ecb-mode-test #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"B9B9B9B9B9B9B9B9" #h"B7FE63A61C646F3A") (:ecb-mode-test #h"BABABABABABABABABABABABABABABABA" #h"BABABABABABABABA" #h"10ADB6E2AB972BBE") (:ecb-mode-test #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"BBBBBBBBBBBBBBBB" #h"F91DCAD912332F3B") (:ecb-mode-test #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"BCBCBCBCBCBCBCBC" #h"46E7EF47323A701D") (:ecb-mode-test #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"BDBDBDBDBDBDBDBD" #h"8DB18CCD9692F758") (:ecb-mode-test #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"BEBEBEBEBEBEBEBE" #h"E6207B536AAAEFFC") (:ecb-mode-test #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"BFBFBFBFBFBFBFBF" #h"92AA224372156A00") (:ecb-mode-test #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"C0C0C0C0C0C0C0C0" #h"A3B357885B1E16D2") (:ecb-mode-test #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"C1C1C1C1C1C1C1C1" #h"169F7629C970C1E5") (:ecb-mode-test #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"C2C2C2C2C2C2C2C2" #h"62F44B247CF1348C") (:ecb-mode-test #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"C3C3C3C3C3C3C3C3" #h"AE0FEEB0495932C8") (:ecb-mode-test #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"C4C4C4C4C4C4C4C4" #h"72DAF2A7C9EA6803") (:ecb-mode-test #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"C5C5C5C5C5C5C5C5" #h"4FB5D5536DA544F4") (:ecb-mode-test #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"C6C6C6C6C6C6C6C6" #h"1DD4E65AAF7988B4") (:ecb-mode-test #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"C7C7C7C7C7C7C7C7" #h"76BF084C1535A6C6") (:ecb-mode-test #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"C8C8C8C8C8C8C8C8" #h"AFEC35B09D36315F") (:ecb-mode-test #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"C9C9C9C9C9C9C9C9" #h"C8078A6148818403") (:ecb-mode-test #h"CACACACACACACACACACACACACACACACA" #h"CACACACACACACACA" #h"4DA91CB4124B67FE") (:ecb-mode-test #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"CBCBCBCBCBCBCBCB" #h"2DABFEB346794C3D") (:ecb-mode-test #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"CCCCCCCCCCCCCCCC" #h"FBCD12C790D21CD7") (:ecb-mode-test #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"CDCDCDCDCDCDCDCD" #h"536873DB879CC770") (:ecb-mode-test #h"CECECECECECECECECECECECECECECECE" #h"CECECECECECECECE" #h"9AA159D7309DA7A0") (:ecb-mode-test #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"CFCFCFCFCFCFCFCF" #h"0B844B9D8C4EA14A") (:ecb-mode-test #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"D0D0D0D0D0D0D0D0" #h"3BBD84CE539E68C4") (:ecb-mode-test #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"D1D1D1D1D1D1D1D1" #h"CF3E4F3E026E2C8E") (:ecb-mode-test #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"D2D2D2D2D2D2D2D2" #h"82F85885D542AF58") (:ecb-mode-test #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"D3D3D3D3D3D3D3D3" #h"22D334D6493B3CB6") (:ecb-mode-test #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"D4D4D4D4D4D4D4D4" #h"47E9CB3E3154D673") (:ecb-mode-test #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"D5D5D5D5D5D5D5D5" #h"2352BCC708ADC7E9") (:ecb-mode-test #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"D6D6D6D6D6D6D6D6" #h"8C0F3BA0C8601980") (:ecb-mode-test #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"D7D7D7D7D7D7D7D7" #h"EE5E9FD70CEF00E9") (:ecb-mode-test #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"D8D8D8D8D8D8D8D8" #h"DEF6BDA6CABF9547") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9" #h"4DADD04A0EA70F20") (:ecb-mode-test #h"DADADADADADADADADADADADADADADADA" #h"DADADADADADADADA" #h"C1AA16689EE1B482") (:ecb-mode-test #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"DBDBDBDBDBDBDBDB" #h"F45FC26193E69AEE") (:ecb-mode-test #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"DCDCDCDCDCDCDCDC" #h"D0CFBB937CEDBFB5") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDD" #h"F0752004EE23D87B") (:ecb-mode-test #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"DEDEDEDEDEDEDEDE" #h"77A791E28AA464A5") (:ecb-mode-test #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"DFDFDFDFDFDFDFDF" #h"E7562A7F56FF4966") (:ecb-mode-test #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"E0E0E0E0E0E0E0E0" #h"B026913F2CCFB109") (:ecb-mode-test #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"E1E1E1E1E1E1E1E1" #h"0DB572DDCE388AC7") (:ecb-mode-test #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"E2E2E2E2E2E2E2E2" #h"D9FA6595F0C094CA") (:ecb-mode-test #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"E3E3E3E3E3E3E3E3" #h"ADE4804C4BE4486E") (:ecb-mode-test #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"E4E4E4E4E4E4E4E4" #h"007B81F520E6D7DA") (:ecb-mode-test #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"E5E5E5E5E5E5E5E5" #h"961AEB77BFC10B3C") (:ecb-mode-test #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"E6E6E6E6E6E6E6E6" #h"8A8DD870C9B14AF2") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7" #h"3CC02E14B6349B25") (:ecb-mode-test #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"E8E8E8E8E8E8E8E8" #h"BAD3EE68BDDB9607") (:ecb-mode-test #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"E9E9E9E9E9E9E9E9" #h"DFF918E93BDAD292") (:ecb-mode-test #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"EAEAEAEAEAEAEAEA" #h"8FE559C7CD6FA56D") (:ecb-mode-test #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"EBEBEBEBEBEBEBEB" #h"C88480835C1A444C") (:ecb-mode-test #h"ECECECECECECECECECECECECECECECEC" #h"ECECECECECECECEC" #h"D6EE30A16B2CC01E") (:ecb-mode-test #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"EDEDEDEDEDEDEDED" #h"6932D887B2EA9C1A") (:ecb-mode-test #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"EEEEEEEEEEEEEEEE" #h"0BFC865461F13ACC") (:ecb-mode-test #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"EFEFEFEFEFEFEFEF" #h"228AEA0D403E807A") (:ecb-mode-test #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"F0F0F0F0F0F0F0F0" #h"2A2891F65BB8173C") (:ecb-mode-test #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"F1F1F1F1F1F1F1F1" #h"5D1B8FAF7839494B") (:ecb-mode-test #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"F2F2F2F2F2F2F2F2" #h"1C0A9280EECF5D48") (:ecb-mode-test #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"F3F3F3F3F3F3F3F3" #h"6CBCE951BBC30F74") (:ecb-mode-test #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"F4F4F4F4F4F4F4F4" #h"9CA66E96BD08BC70") (:ecb-mode-test #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"F5F5F5F5F5F5F5F5" #h"F5D779FCFBB28BF3") (:ecb-mode-test #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"F6F6F6F6F6F6F6F6" #h"0FEC6BBF9B859184") (:ecb-mode-test #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"F7F7F7F7F7F7F7F7" #h"EF88D2BF052DBDA8") (:ecb-mode-test #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"F8F8F8F8F8F8F8F8" #h"39ADBDDB7363090D") (:ecb-mode-test #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"F9F9F9F9F9F9F9F9" #h"C0AEAF445F7E2A7A") (:ecb-mode-test #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"FAFAFAFAFAFAFAFA" #h"C66F54067298D4E9") (:ecb-mode-test #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"FBFBFBFBFBFBFBFB" #h"E0BA8F4488AAF97C") (:ecb-mode-test #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"FCFCFCFCFCFCFCFC" #h"67B36E2875D9631C") (:ecb-mode-test #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"FDFDFDFDFDFDFDFD" #h"1ED83D49E267191D") (:ecb-mode-test #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"FEFEFEFEFEFEFEFE" #h"66B2B23EA84693AD") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFF" #h"7359B2163E4EDC58") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F" #h"0011223344556677" #h"D117BD6373549FAA") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF48" #h"EA024714AD5C4D84" #h"C616ACE843958247") ;;; #h"three-key" tests (:ecb-mode-test #h"800000000000000000000000000000000000000000000000" #h"0000000000000000" #h"95A8D72813DAA94D") (:ecb-mode-test #h"400000000000000000000000000000000000000000000000" #h"0000000000000000" #h"0EEC1487DD8C26D5") (:ecb-mode-test #h"200000000000000000000000000000000000000000000000" #h"0000000000000000" #h"7AD16FFB79C45926") (:ecb-mode-test #h"100000000000000000000000000000000000000000000000" #h"0000000000000000" #h"D3746294CA6A6CF3") (:ecb-mode-test #h"080000000000000000000000000000000000000000000000" #h"0000000000000000" #h"809F5F873C1FD761") (:ecb-mode-test #h"040000000000000000000000000000000000000000000000" #h"0000000000000000" #h"C02FAFFEC989D1FC") (:ecb-mode-test #h"020000000000000000000000000000000000000000000000" #h"0000000000000000" #h"4615AA1D33E72F10") (:ecb-mode-test #h"010000000000000000000000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"008000000000000000000000000000000000000000000000" #h"0000000000000000" #h"2055123350C00858") (:ecb-mode-test #h"004000000000000000000000000000000000000000000000" #h"0000000000000000" #h"DF3B99D6577397C8") (:ecb-mode-test #h"002000000000000000000000000000000000000000000000" #h"0000000000000000" #h"31FE17369B5288C9") (:ecb-mode-test #h"001000000000000000000000000000000000000000000000" #h"0000000000000000" #h"DFDD3CC64DAE1642") (:ecb-mode-test #h"000800000000000000000000000000000000000000000000" #h"0000000000000000" #h"178C83CE2B399D94") (:ecb-mode-test #h"000400000000000000000000000000000000000000000000" #h"0000000000000000" #h"50F636324A9B7F80") (:ecb-mode-test #h"000200000000000000000000000000000000000000000000" #h"0000000000000000" #h"A8468EE3BC18F06D") (:ecb-mode-test #h"000100000000000000000000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000080000000000000000000000000000000000000000000" #h"0000000000000000" #h"A2DC9E92FD3CDE92") (:ecb-mode-test #h"000040000000000000000000000000000000000000000000" #h"0000000000000000" #h"CAC09F797D031287") (:ecb-mode-test #h"000020000000000000000000000000000000000000000000" #h"0000000000000000" #h"90BA680B22AEB525") (:ecb-mode-test #h"000010000000000000000000000000000000000000000000" #h"0000000000000000" #h"CE7A24F350E280B6") (:ecb-mode-test #h"000008000000000000000000000000000000000000000000" #h"0000000000000000" #h"882BFF0AA01A0B87") (:ecb-mode-test #h"000004000000000000000000000000000000000000000000" #h"0000000000000000" #h"25610288924511C2") (:ecb-mode-test #h"000002000000000000000000000000000000000000000000" #h"0000000000000000" #h"C71516C29C75D170") (:ecb-mode-test #h"000001000000000000000000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000800000000000000000000000000000000000000000" #h"0000000000000000" #h"5199C29A52C9F059") (:ecb-mode-test #h"000000400000000000000000000000000000000000000000" #h"0000000000000000" #h"C22F0A294A71F29F") (:ecb-mode-test #h"000000200000000000000000000000000000000000000000" #h"0000000000000000" #h"EE371483714C02EA") (:ecb-mode-test #h"000000100000000000000000000000000000000000000000" #h"0000000000000000" #h"A81FBD448F9E522F") (:ecb-mode-test #h"000000080000000000000000000000000000000000000000" #h"0000000000000000" #h"4F644C92E192DFED") (:ecb-mode-test #h"000000040000000000000000000000000000000000000000" #h"0000000000000000" #h"1AFA9A66A6DF92AE") (:ecb-mode-test #h"000000020000000000000000000000000000000000000000" #h"0000000000000000" #h"B3C1CC715CB879D8") (:ecb-mode-test #h"000000010000000000000000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000008000000000000000000000000000000000000000" #h"0000000000000000" #h"19D032E64AB0BD8B") (:ecb-mode-test #h"000000004000000000000000000000000000000000000000" #h"0000000000000000" #h"3CFAA7A7DC8720DC") (:ecb-mode-test #h"000000002000000000000000000000000000000000000000" #h"0000000000000000" #h"B7265F7F447AC6F3") (:ecb-mode-test #h"000000001000000000000000000000000000000000000000" #h"0000000000000000" #h"9DB73B3C0D163F54") (:ecb-mode-test #h"000000000800000000000000000000000000000000000000" #h"0000000000000000" #h"8181B65BABF4A975") (:ecb-mode-test #h"000000000400000000000000000000000000000000000000" #h"0000000000000000" #h"93C9B64042EAA240") (:ecb-mode-test #h"000000000200000000000000000000000000000000000000" #h"0000000000000000" #h"5570530829705592") (:ecb-mode-test #h"000000000100000000000000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000080000000000000000000000000000000000000" #h"0000000000000000" #h"8638809E878787A0") (:ecb-mode-test #h"000000000040000000000000000000000000000000000000" #h"0000000000000000" #h"41B9A79AF79AC208") (:ecb-mode-test #h"000000000020000000000000000000000000000000000000" #h"0000000000000000" #h"7A9BE42F2009A892") (:ecb-mode-test #h"000000000010000000000000000000000000000000000000" #h"0000000000000000" #h"29038D56BA6D2745") (:ecb-mode-test #h"000000000008000000000000000000000000000000000000" #h"0000000000000000" #h"5495C6ABF1E5DF51") (:ecb-mode-test #h"000000000004000000000000000000000000000000000000" #h"0000000000000000" #h"AE13DBD561488933") (:ecb-mode-test #h"000000000002000000000000000000000000000000000000" #h"0000000000000000" #h"024D1FFA8904E389") (:ecb-mode-test #h"000000000001000000000000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000800000000000000000000000000000000000" #h"0000000000000000" #h"D1399712F99BF02E") (:ecb-mode-test #h"000000000000400000000000000000000000000000000000" #h"0000000000000000" #h"14C1D7C1CFFEC79E") (:ecb-mode-test #h"000000000000200000000000000000000000000000000000" #h"0000000000000000" #h"1DE5279DAE3BED6F") (:ecb-mode-test #h"000000000000100000000000000000000000000000000000" #h"0000000000000000" #h"E941A33F85501303") (:ecb-mode-test #h"000000000000080000000000000000000000000000000000" #h"0000000000000000" #h"DA99DBBC9A03F379") (:ecb-mode-test #h"000000000000040000000000000000000000000000000000" #h"0000000000000000" #h"B7FC92F91D8E92E9") (:ecb-mode-test #h"000000000000020000000000000000000000000000000000" #h"0000000000000000" #h"AE8E5CAA3CA04E85") (:ecb-mode-test #h"000000000000010000000000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000008000000000000000000000000000000000" #h"0000000000000000" #h"9CC62DF43B6EED74") (:ecb-mode-test #h"000000000000004000000000000000000000000000000000" #h"0000000000000000" #h"D863DBB5C59A91A0") (:ecb-mode-test #h"000000000000002000000000000000000000000000000000" #h"0000000000000000" #h"A1AB2190545B91D7") (:ecb-mode-test #h"000000000000001000000000000000000000000000000000" #h"0000000000000000" #h"0875041E64C570F7") (:ecb-mode-test #h"000000000000000800000000000000000000000000000000" #h"0000000000000000" #h"5A594528BEBEF1CC") (:ecb-mode-test #h"000000000000000400000000000000000000000000000000" #h"0000000000000000" #h"FCDB3291DE21F0C0") (:ecb-mode-test #h"000000000000000200000000000000000000000000000000" #h"0000000000000000" #h"869EFD7F9F265A09") (:ecb-mode-test #h"000000000000000100000000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000080000000000000000000000000000000" #h"0000000000000000" #h"C2A4DD96151453C2") (:ecb-mode-test #h"000000000000000040000000000000000000000000000000" #h"0000000000000000" #h"5E87809F6B8A7ED5") (:ecb-mode-test #h"000000000000000020000000000000000000000000000000" #h"0000000000000000" #h"81B838A1E9CD59B3") (:ecb-mode-test #h"000000000000000010000000000000000000000000000000" #h"0000000000000000" #h"DED028F0C1F5A774") (:ecb-mode-test #h"000000000000000008000000000000000000000000000000" #h"0000000000000000" #h"48C983815809FC87") (:ecb-mode-test #h"000000000000000004000000000000000000000000000000" #h"0000000000000000" #h"C1A75845F22BE951") (:ecb-mode-test #h"000000000000000002000000000000000000000000000000" #h"0000000000000000" #h"C60F823E8E994489") (:ecb-mode-test #h"000000000000000001000000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000800000000000000000000000000000" #h"0000000000000000" #h"709F8FCB044172FE") (:ecb-mode-test #h"000000000000000000400000000000000000000000000000" #h"0000000000000000" #h"26BC2DE634BFFFD4") (:ecb-mode-test #h"000000000000000000200000000000000000000000000000" #h"0000000000000000" #h"D98126355C2E03E6") (:ecb-mode-test #h"000000000000000000100000000000000000000000000000" #h"0000000000000000" #h"49AAA91B49345137") (:ecb-mode-test #h"000000000000000000080000000000000000000000000000" #h"0000000000000000" #h"A59854DCE009126D") (:ecb-mode-test #h"000000000000000000040000000000000000000000000000" #h"0000000000000000" #h"21C46B9FDE5CD36B") (:ecb-mode-test #h"000000000000000000020000000000000000000000000000" #h"0000000000000000" #h"DEB4AE36E07BC053") (:ecb-mode-test #h"000000000000000000010000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000008000000000000000000000000000" #h"0000000000000000" #h"D47ADF8B94CACA7A") (:ecb-mode-test #h"000000000000000000004000000000000000000000000000" #h"0000000000000000" #h"D26D9656F91A1EE2") (:ecb-mode-test #h"000000000000000000002000000000000000000000000000" #h"0000000000000000" #h"EE31B8E767C9B337") (:ecb-mode-test #h"000000000000000000001000000000000000000000000000" #h"0000000000000000" #h"D19BA61DD59CE9A1") (:ecb-mode-test #h"000000000000000000000800000000000000000000000000" #h"0000000000000000" #h"482863934D17804B") (:ecb-mode-test #h"000000000000000000000400000000000000000000000000" #h"0000000000000000" #h"78C8CBCAC3B7FD35") (:ecb-mode-test #h"000000000000000000000200000000000000000000000000" #h"0000000000000000" #h"7B8B051E6C8AA8B6") (:ecb-mode-test #h"000000000000000000000100000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000080000000000000000000000000" #h"0000000000000000" #h"8CCFCD2418E85750") (:ecb-mode-test #h"000000000000000000000040000000000000000000000000" #h"0000000000000000" #h"E74CA11808ED17A3") (:ecb-mode-test #h"000000000000000000000020000000000000000000000000" #h"0000000000000000" #h"0A634C7A69897F35") (:ecb-mode-test #h"000000000000000000000010000000000000000000000000" #h"0000000000000000" #h"6C2C0F27E973CE29") (:ecb-mode-test #h"000000000000000000000008000000000000000000000000" #h"0000000000000000" #h"AD5F11ED913E918C") (:ecb-mode-test #h"000000000000000000000004000000000000000000000000" #h"0000000000000000" #h"3CE4B119BC1FC701") (:ecb-mode-test #h"000000000000000000000002000000000000000000000000" #h"0000000000000000" #h"7E6C8995AA52D298") (:ecb-mode-test #h"000000000000000000000001000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000000800000000000000000000000" #h"0000000000000000" #h"A9FE6341C8621918") (:ecb-mode-test #h"000000000000000000000000400000000000000000000000" #h"0000000000000000" #h"CE99FD5D50B22CEF") (:ecb-mode-test #h"000000000000000000000000200000000000000000000000" #h"0000000000000000" #h"83E55C4A19ABCB56") (:ecb-mode-test #h"000000000000000000000000100000000000000000000000" #h"0000000000000000" #h"96E6A993443B9DD4") (:ecb-mode-test #h"000000000000000000000000080000000000000000000000" #h"0000000000000000" #h"6781B65D74A6B9FB") (:ecb-mode-test #h"000000000000000000000000040000000000000000000000" #h"0000000000000000" #h"D9EF04E272D1A78A") (:ecb-mode-test #h"000000000000000000000000020000000000000000000000" #h"0000000000000000" #h"AC8B09EC3153D57B") (:ecb-mode-test #h"000000000000000000000000010000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000000008000000000000000000000" #h"0000000000000000" #h"60B4B8E3A8F5CBEC") (:ecb-mode-test #h"000000000000000000000000004000000000000000000000" #h"0000000000000000" #h"A5AB6F6EB66057A9") (:ecb-mode-test #h"000000000000000000000000002000000000000000000000" #h"0000000000000000" #h"FF7B0E870FB1FD0B") (:ecb-mode-test #h"000000000000000000000000001000000000000000000000" #h"0000000000000000" #h"7497A098AA651D00") (:ecb-mode-test #h"000000000000000000000000000800000000000000000000" #h"0000000000000000" #h"270A943BEABEA8EC") (:ecb-mode-test #h"000000000000000000000000000400000000000000000000" #h"0000000000000000" #h"67DB327ED5DF89E3") (:ecb-mode-test #h"000000000000000000000000000200000000000000000000" #h"0000000000000000" #h"4871C3B7436121DE") (:ecb-mode-test #h"000000000000000000000000000100000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000000000080000000000000000000" #h"0000000000000000" #h"41BBC8EF36654838") (:ecb-mode-test #h"000000000000000000000000000040000000000000000000" #h"0000000000000000" #h"FCBD166CA0EA87E2") (:ecb-mode-test #h"000000000000000000000000000020000000000000000000" #h"0000000000000000" #h"9DFFC6EE9751B5CF") (:ecb-mode-test #h"000000000000000000000000000010000000000000000000" #h"0000000000000000" #h"C01B7878EBCE8DD3") (:ecb-mode-test #h"000000000000000000000000000008000000000000000000" #h"0000000000000000" #h"357E5A4DC162D715") (:ecb-mode-test #h"000000000000000000000000000004000000000000000000" #h"0000000000000000" #h"268F93CAEB248E2E") (:ecb-mode-test #h"000000000000000000000000000002000000000000000000" #h"0000000000000000" #h"A5D4174744B84E7D") (:ecb-mode-test #h"000000000000000000000000000001000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000000000000800000000000000000" #h"0000000000000000" #h"46F5E7077CB869A8") (:ecb-mode-test #h"000000000000000000000000000000400000000000000000" #h"0000000000000000" #h"502CD2BF4FC0B793") (:ecb-mode-test #h"000000000000000000000000000000200000000000000000" #h"0000000000000000" #h"C0278007230589E4") (:ecb-mode-test #h"000000000000000000000000000000100000000000000000" #h"0000000000000000" #h"52710C55818FAF52") (:ecb-mode-test #h"000000000000000000000000000000080000000000000000" #h"0000000000000000" #h"DF4A77123610F2B1") (:ecb-mode-test #h"000000000000000000000000000000040000000000000000" #h"0000000000000000" #h"EF840B00DA448234") (:ecb-mode-test #h"000000000000000000000000000000020000000000000000" #h"0000000000000000" #h"FFCCC32A699CB7C5") (:ecb-mode-test #h"000000000000000000000000000000010000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000000000000008000000000000000" #h"0000000000000000" #h"95A8D72813DAA94D") (:ecb-mode-test #h"000000000000000000000000000000004000000000000000" #h"0000000000000000" #h"0EEC1487DD8C26D5") (:ecb-mode-test #h"000000000000000000000000000000002000000000000000" #h"0000000000000000" #h"7AD16FFB79C45926") (:ecb-mode-test #h"000000000000000000000000000000001000000000000000" #h"0000000000000000" #h"D3746294CA6A6CF3") (:ecb-mode-test #h"000000000000000000000000000000000800000000000000" #h"0000000000000000" #h"809F5F873C1FD761") (:ecb-mode-test #h"000000000000000000000000000000000400000000000000" #h"0000000000000000" #h"C02FAFFEC989D1FC") (:ecb-mode-test #h"000000000000000000000000000000000200000000000000" #h"0000000000000000" #h"4615AA1D33E72F10") (:ecb-mode-test #h"000000000000000000000000000000000100000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000000000000000080000000000000" #h"0000000000000000" #h"2055123350C00858") (:ecb-mode-test #h"000000000000000000000000000000000040000000000000" #h"0000000000000000" #h"DF3B99D6577397C8") (:ecb-mode-test #h"000000000000000000000000000000000020000000000000" #h"0000000000000000" #h"31FE17369B5288C9") (:ecb-mode-test #h"000000000000000000000000000000000010000000000000" #h"0000000000000000" #h"DFDD3CC64DAE1642") (:ecb-mode-test #h"000000000000000000000000000000000008000000000000" #h"0000000000000000" #h"178C83CE2B399D94") (:ecb-mode-test #h"000000000000000000000000000000000004000000000000" #h"0000000000000000" #h"50F636324A9B7F80") (:ecb-mode-test #h"000000000000000000000000000000000002000000000000" #h"0000000000000000" #h"A8468EE3BC18F06D") (:ecb-mode-test #h"000000000000000000000000000000000001000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000000000000000000800000000000" #h"0000000000000000" #h"A2DC9E92FD3CDE92") (:ecb-mode-test #h"000000000000000000000000000000000000400000000000" #h"0000000000000000" #h"CAC09F797D031287") (:ecb-mode-test #h"000000000000000000000000000000000000200000000000" #h"0000000000000000" #h"90BA680B22AEB525") (:ecb-mode-test #h"000000000000000000000000000000000000100000000000" #h"0000000000000000" #h"CE7A24F350E280B6") (:ecb-mode-test #h"000000000000000000000000000000000000080000000000" #h"0000000000000000" #h"882BFF0AA01A0B87") (:ecb-mode-test #h"000000000000000000000000000000000000040000000000" #h"0000000000000000" #h"25610288924511C2") (:ecb-mode-test #h"000000000000000000000000000000000000020000000000" #h"0000000000000000" #h"C71516C29C75D170") (:ecb-mode-test #h"000000000000000000000000000000000000010000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000000000000000000008000000000" #h"0000000000000000" #h"5199C29A52C9F059") (:ecb-mode-test #h"000000000000000000000000000000000000004000000000" #h"0000000000000000" #h"C22F0A294A71F29F") (:ecb-mode-test #h"000000000000000000000000000000000000002000000000" #h"0000000000000000" #h"EE371483714C02EA") (:ecb-mode-test #h"000000000000000000000000000000000000001000000000" #h"0000000000000000" #h"A81FBD448F9E522F") (:ecb-mode-test #h"000000000000000000000000000000000000000800000000" #h"0000000000000000" #h"4F644C92E192DFED") (:ecb-mode-test #h"000000000000000000000000000000000000000400000000" #h"0000000000000000" #h"1AFA9A66A6DF92AE") (:ecb-mode-test #h"000000000000000000000000000000000000000200000000" #h"0000000000000000" #h"B3C1CC715CB879D8") (:ecb-mode-test #h"000000000000000000000000000000000000000100000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000000000000000000000080000000" #h"0000000000000000" #h"19D032E64AB0BD8B") (:ecb-mode-test #h"000000000000000000000000000000000000000040000000" #h"0000000000000000" #h"3CFAA7A7DC8720DC") (:ecb-mode-test #h"000000000000000000000000000000000000000020000000" #h"0000000000000000" #h"B7265F7F447AC6F3") (:ecb-mode-test #h"000000000000000000000000000000000000000010000000" #h"0000000000000000" #h"9DB73B3C0D163F54") (:ecb-mode-test #h"000000000000000000000000000000000000000008000000" #h"0000000000000000" #h"8181B65BABF4A975") (:ecb-mode-test #h"000000000000000000000000000000000000000004000000" #h"0000000000000000" #h"93C9B64042EAA240") (:ecb-mode-test #h"000000000000000000000000000000000000000002000000" #h"0000000000000000" #h"5570530829705592") (:ecb-mode-test #h"000000000000000000000000000000000000000001000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000000000000000000000000800000" #h"0000000000000000" #h"8638809E878787A0") (:ecb-mode-test #h"000000000000000000000000000000000000000000400000" #h"0000000000000000" #h"41B9A79AF79AC208") (:ecb-mode-test #h"000000000000000000000000000000000000000000200000" #h"0000000000000000" #h"7A9BE42F2009A892") (:ecb-mode-test #h"000000000000000000000000000000000000000000100000" #h"0000000000000000" #h"29038D56BA6D2745") (:ecb-mode-test #h"000000000000000000000000000000000000000000080000" #h"0000000000000000" #h"5495C6ABF1E5DF51") (:ecb-mode-test #h"000000000000000000000000000000000000000000040000" #h"0000000000000000" #h"AE13DBD561488933") (:ecb-mode-test #h"000000000000000000000000000000000000000000020000" #h"0000000000000000" #h"024D1FFA8904E389") (:ecb-mode-test #h"000000000000000000000000000000000000000000010000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000000000000000000000000008000" #h"0000000000000000" #h"D1399712F99BF02E") (:ecb-mode-test #h"000000000000000000000000000000000000000000004000" #h"0000000000000000" #h"14C1D7C1CFFEC79E") (:ecb-mode-test #h"000000000000000000000000000000000000000000002000" #h"0000000000000000" #h"1DE5279DAE3BED6F") (:ecb-mode-test #h"000000000000000000000000000000000000000000001000" #h"0000000000000000" #h"E941A33F85501303") (:ecb-mode-test #h"000000000000000000000000000000000000000000000800" #h"0000000000000000" #h"DA99DBBC9A03F379") (:ecb-mode-test #h"000000000000000000000000000000000000000000000400" #h"0000000000000000" #h"B7FC92F91D8E92E9") (:ecb-mode-test #h"000000000000000000000000000000000000000000000200" #h"0000000000000000" #h"AE8E5CAA3CA04E85") (:ecb-mode-test #h"000000000000000000000000000000000000000000000100" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000000000000000000000000000080" #h"0000000000000000" #h"9CC62DF43B6EED74") (:ecb-mode-test #h"000000000000000000000000000000000000000000000040" #h"0000000000000000" #h"D863DBB5C59A91A0") (:ecb-mode-test #h"000000000000000000000000000000000000000000000020" #h"0000000000000000" #h"A1AB2190545B91D7") (:ecb-mode-test #h"000000000000000000000000000000000000000000000010" #h"0000000000000000" #h"0875041E64C570F7") (:ecb-mode-test #h"000000000000000000000000000000000000000000000008" #h"0000000000000000" #h"5A594528BEBEF1CC") (:ecb-mode-test #h"000000000000000000000000000000000000000000000004" #h"0000000000000000" #h"FCDB3291DE21F0C0") (:ecb-mode-test #h"000000000000000000000000000000000000000000000002" #h"0000000000000000" #h"869EFD7F9F265A09") (:ecb-mode-test #h"000000000000000000000000000000000000000000000001" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"8000000000000000" #h"95F8A5E5DD31D900") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"4000000000000000" #h"DD7F121CA5015619") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"2000000000000000" #h"2E8653104F3834EA") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"1000000000000000" #h"4BD388FF6CD81D4F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0800000000000000" #h"20B9E767B2FB1456") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0400000000000000" #h"55579380D77138EF") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0200000000000000" #h"6CC5DEFAAF04512F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0100000000000000" #h"0D9F279BA5D87260") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0080000000000000" #h"D9031B0271BD5A0A") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0040000000000000" #h"424250B37C3DD951") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0020000000000000" #h"B8061B7ECD9A21E5") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0010000000000000" #h"F15D0F286B65BD28") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0008000000000000" #h"ADD0CC8D6E5DEBA1") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0004000000000000" #h"E6D5F82752AD63D1") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0002000000000000" #h"ECBFE3BD3F591A5E") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0001000000000000" #h"F356834379D165CD") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000800000000000" #h"2B9F982F20037FA9") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000400000000000" #h"889DE068A16F0BE6") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000200000000000" #h"E19E275D846A1298") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000100000000000" #h"329A8ED523D71AEC") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000080000000000" #h"E7FCE22557D23C97") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000040000000000" #h"12A9F5817FF2D65D") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000020000000000" #h"A484C3AD38DC9C19") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000010000000000" #h"FBE00A8A1EF8AD72") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000008000000000" #h"750D079407521363") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000004000000000" #h"64FEED9C724C2FAF") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000002000000000" #h"F02B263B328E2B60") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000001000000000" #h"9D64555A9A10B852") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000800000000" #h"D106FF0BED5255D7") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000400000000" #h"E1652C6B138C64A5") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000200000000" #h"E428581186EC8F46") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000100000000" #h"AEB5F5EDE22D1A36") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000080000000" #h"E943D7568AEC0C5C") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000040000000" #h"DF98C8276F54B04B") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000020000000" #h"B160E4680F6C696F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000010000000" #h"FA0752B07D9C4AB8") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000008000000" #h"CA3A2B036DBC8502") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000004000000" #h"5E0905517BB59BCF") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000002000000" #h"814EEB3B91D90726") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000001000000" #h"4D49DB1532919C9F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000800000" #h"25EB5FC3F8CF0621") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000400000" #h"AB6A20C0620D1C6F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000200000" #h"79E90DBC98F92CCA") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000100000" #h"866ECEDD8072BB0E") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000080000" #h"8B54536F2F3E64A8") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000040000" #h"EA51D3975595B86B") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000020000" #h"CAFFC6AC4542DE31") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000010000" #h"8DD45A2DDF90796C") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000008000" #h"1029D55E880EC2D0") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000004000" #h"5D86CB23639DBEA9") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000002000" #h"1D1CA853AE7C0C5F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000001000" #h"CE332329248F3228") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000000800" #h"8405D1ABE24FB942") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000000400" #h"E643D78090CA4207") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000000200" #h"48221B9937748A23") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000000100" #h"DD7C0BBD61FAFD54") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000000080" #h"2FBC291A570DB5C4") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000000040" #h"E07C30D7E4E26E12") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000000020" #h"0953E2258E8E90A1") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000000010" #h"5B711BC4CEEBF2EE") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000000008" #h"CC083F1E6D9E85F6") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000000004" #h"D2FD8867D50D2DFE") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000000002" #h"06E7EA22CE92708F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000000001" #h"166B40B44ABA4BD6") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"010101010101010101010101010101010101010101010101" #h"0101010101010101" #h"994D4DC157B96C52") (:ecb-mode-test #h"020202020202020202020202020202020202020202020202" #h"0202020202020202" #h"E127C2B61D98E6E2") (:ecb-mode-test #h"030303030303030303030303030303030303030303030303" #h"0303030303030303" #h"984C91D78A269CE3") (:ecb-mode-test #h"040404040404040404040404040404040404040404040404" #h"0404040404040404" #h"1F4570BB77550683") (:ecb-mode-test #h"050505050505050505050505050505050505050505050505" #h"0505050505050505" #h"3990ABF98D672B16") (:ecb-mode-test #h"060606060606060606060606060606060606060606060606" #h"0606060606060606" #h"3F5150BBA081D585") (:ecb-mode-test #h"070707070707070707070707070707070707070707070707" #h"0707070707070707" #h"C65242248C9CF6F2") (:ecb-mode-test #h"080808080808080808080808080808080808080808080808" #h"0808080808080808" #h"10772D40FAD24257") (:ecb-mode-test #h"090909090909090909090909090909090909090909090909" #h"0909090909090909" #h"F0139440647A6E7B") (:ecb-mode-test #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"0A0A0A0A0A0A0A0A" #h"0A288603044D740C") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B" #h"6359916942F7438F") (:ecb-mode-test #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"0C0C0C0C0C0C0C0C" #h"934316AE443CF08B") (:ecb-mode-test #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"0D0D0D0D0D0D0D0D" #h"E3F56D7F1130A2B7") (:ecb-mode-test #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"0E0E0E0E0E0E0E0E" #h"A2E4705087C6B6B4") (:ecb-mode-test #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"0F0F0F0F0F0F0F0F" #h"D5D76E09A447E8C3") (:ecb-mode-test #h"101010101010101010101010101010101010101010101010" #h"1010101010101010" #h"DD7515F2BFC17F85") (:ecb-mode-test #h"111111111111111111111111111111111111111111111111" #h"1111111111111111" #h"F40379AB9E0EC533") (:ecb-mode-test #h"121212121212121212121212121212121212121212121212" #h"1212121212121212" #h"96CD27784D1563E5") (:ecb-mode-test #h"131313131313131313131313131313131313131313131313" #h"1313131313131313" #h"2911CF5E94D33FE1") (:ecb-mode-test #h"141414141414141414141414141414141414141414141414" #h"1414141414141414" #h"377B7F7CA3E5BBB3") (:ecb-mode-test #h"151515151515151515151515151515151515151515151515" #h"1515151515151515" #h"701AA63832905A92") (:ecb-mode-test #h"161616161616161616161616161616161616161616161616" #h"1616161616161616" #h"2006E716C4252D6D") (:ecb-mode-test #h"171717171717171717171717171717171717171717171717" #h"1717171717171717" #h"452C1197422469F8") (:ecb-mode-test #h"181818181818181818181818181818181818181818181818" #h"1818181818181818" #h"C33FD1EB49CB64DA") (:ecb-mode-test #h"191919191919191919191919191919191919191919191919" #h"1919191919191919" #h"7572278F364EB50D") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A" #h"69E51488403EF4C3") (:ecb-mode-test #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"1B1B1B1B1B1B1B1B" #h"FF847E0ADF192825") (:ecb-mode-test #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"1C1C1C1C1C1C1C1C" #h"521B7FB3B41BB791") (:ecb-mode-test #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"1D1D1D1D1D1D1D1D" #h"26059A6A0F3F6B35") (:ecb-mode-test #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"1E1E1E1E1E1E1E1E" #h"F24A8D2231C77538") (:ecb-mode-test #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"1F1F1F1F1F1F1F1F" #h"4FD96EC0D3304EF6") (:ecb-mode-test #h"202020202020202020202020202020202020202020202020" #h"2020202020202020" #h"18A9D580A900B699") (:ecb-mode-test #h"212121212121212121212121212121212121212121212121" #h"2121212121212121" #h"88586E1D755B9B5A") (:ecb-mode-test #h"222222222222222222222222222222222222222222222222" #h"2222222222222222" #h"0F8ADFFB11DC2784") (:ecb-mode-test #h"232323232323232323232323232323232323232323232323" #h"2323232323232323" #h"2F30446C8312404A") (:ecb-mode-test #h"242424242424242424242424242424242424242424242424" #h"2424242424242424" #h"0BA03D9E6C196511") (:ecb-mode-test #h"252525252525252525252525252525252525252525252525" #h"2525252525252525" #h"3E55E997611E4B7D") (:ecb-mode-test #h"262626262626262626262626262626262626262626262626" #h"2626262626262626" #h"B2522FB5F158F0DF") (:ecb-mode-test #h"272727272727272727272727272727272727272727272727" #h"2727272727272727" #h"2109425935406AB8") (:ecb-mode-test #h"282828282828282828282828282828282828282828282828" #h"2828282828282828" #h"11A16028F310FF16") (:ecb-mode-test #h"292929292929292929292929292929292929292929292929" #h"2929292929292929" #h"73F0C45F379FE67F") (:ecb-mode-test #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"2A2A2A2A2A2A2A2A" #h"DCAD4338F7523816") (:ecb-mode-test #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"2B2B2B2B2B2B2B2B" #h"B81634C1CEAB298C") (:ecb-mode-test #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"2C2C2C2C2C2C2C2C" #h"DD2CCB29B6C4C349") (:ecb-mode-test #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"2D2D2D2D2D2D2D2D" #h"7D07A77A2ABD50A7") (:ecb-mode-test #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"2E2E2E2E2E2E2E2E" #h"30C1B0C1FD91D371") (:ecb-mode-test #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"2F2F2F2F2F2F2F2F" #h"C4427B31AC61973B") (:ecb-mode-test #h"303030303030303030303030303030303030303030303030" #h"3030303030303030" #h"F47BB46273B15EB5") (:ecb-mode-test #h"313131313131313131313131313131313131313131313131" #h"3131313131313131" #h"655EA628CF62585F") (:ecb-mode-test #h"323232323232323232323232323232323232323232323232" #h"3232323232323232" #h"AC978C247863388F") (:ecb-mode-test #h"333333333333333333333333333333333333333333333333" #h"3333333333333333" #h"0432ED386F2DE328") (:ecb-mode-test #h"343434343434343434343434343434343434343434343434" #h"3434343434343434" #h"D254014CB986B3C2") (:ecb-mode-test #h"353535353535353535353535353535353535353535353535" #h"3535353535353535" #h"B256E34BEDB49801") (:ecb-mode-test #h"363636363636363636363636363636363636363636363636" #h"3636363636363636" #h"37F8759EB77E7BFC") (:ecb-mode-test #h"373737373737373737373737373737373737373737373737" #h"3737373737373737" #h"5013CA4F62C9CEA0") (:ecb-mode-test #h"383838383838383838383838383838383838383838383838" #h"3838383838383838" #h"8940F7B3EACA5939") (:ecb-mode-test #h"393939393939393939393939393939393939393939393939" #h"3939393939393939" #h"E22B19A55086774B") (:ecb-mode-test #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"3A3A3A3A3A3A3A3A" #h"B04A2AAC925ABB0B") (:ecb-mode-test #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"3B3B3B3B3B3B3B3B" #h"8D250D58361597FC") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C" #h"51F0114FB6A6CD37") (:ecb-mode-test #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"3D3D3D3D3D3D3D3D" #h"9D0BB4DB830ECB73") (:ecb-mode-test #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"3E3E3E3E3E3E3E3E" #h"E96089D6368F3E1A") (:ecb-mode-test #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"3F3F3F3F3F3F3F3F" #h"5C4CA877A4E1E92D") (:ecb-mode-test #h"404040404040404040404040404040404040404040404040" #h"4040404040404040" #h"6D55DDBC8DEA95FF") (:ecb-mode-test #h"414141414141414141414141414141414141414141414141" #h"4141414141414141" #h"19DF84AC95551003") (:ecb-mode-test #h"424242424242424242424242424242424242424242424242" #h"4242424242424242" #h"724E7332696D08A7") (:ecb-mode-test #h"434343434343434343434343434343434343434343434343" #h"4343434343434343" #h"B91810B8CDC58FE2") (:ecb-mode-test #h"444444444444444444444444444444444444444444444444" #h"4444444444444444" #h"06E23526EDCCD0C4") (:ecb-mode-test #h"454545454545454545454545454545454545454545454545" #h"4545454545454545" #h"EF52491D5468D441") (:ecb-mode-test #h"464646464646464646464646464646464646464646464646" #h"4646464646464646" #h"48019C59E39B90C5") (:ecb-mode-test #h"474747474747474747474747474747474747474747474747" #h"4747474747474747" #h"0544083FB902D8C0") (:ecb-mode-test #h"484848484848484848484848484848484848484848484848" #h"4848484848484848" #h"63B15CADA668CE12") (:ecb-mode-test #h"494949494949494949494949494949494949494949494949" #h"4949494949494949" #h"EACC0C1264171071") (:ecb-mode-test #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"4A4A4A4A4A4A4A4A" #h"9D2B8C0AC605F274") (:ecb-mode-test #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"4B4B4B4B4B4B4B4B" #h"C90F2F4C98A8FB2A") (:ecb-mode-test #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"4C4C4C4C4C4C4C4C" #h"03481B4828FD1D04") (:ecb-mode-test #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"4D4D4D4D4D4D4D4D" #h"C78FC45A1DCEA2E2") (:ecb-mode-test #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"4E4E4E4E4E4E4E4E" #h"DB96D88C3460D801") (:ecb-mode-test #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"4F4F4F4F4F4F4F4F" #h"6C69E720F5105518") (:ecb-mode-test #h"505050505050505050505050505050505050505050505050" #h"5050505050505050" #h"0D262E418BC893F3") (:ecb-mode-test #h"515151515151515151515151515151515151515151515151" #h"5151515151515151" #h"6AD84FD7848A0A5C") (:ecb-mode-test #h"525252525252525252525252525252525252525252525252" #h"5252525252525252" #h"C365CB35B34B6114") (:ecb-mode-test #h"535353535353535353535353535353535353535353535353" #h"5353535353535353" #h"1155392E877F42A9") (:ecb-mode-test #h"545454545454545454545454545454545454545454545454" #h"5454545454545454" #h"531BE5F9405DA715") (:ecb-mode-test #h"555555555555555555555555555555555555555555555555" #h"5555555555555555" #h"3BCDD41E6165A5E8") (:ecb-mode-test #h"565656565656565656565656565656565656565656565656" #h"5656565656565656" #h"2B1FF5610A19270C") (:ecb-mode-test #h"575757575757575757575757575757575757575757575757" #h"5757575757575757" #h"D90772CF3F047CFD") (:ecb-mode-test #h"585858585858585858585858585858585858585858585858" #h"5858585858585858" #h"1BEA27FFB72457B7") (:ecb-mode-test #h"595959595959595959595959595959595959595959595959" #h"5959595959595959" #h"85C3E0C429F34C27") (:ecb-mode-test #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"5A5A5A5A5A5A5A5A" #h"F9038021E37C7618") (:ecb-mode-test #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"5B5B5B5B5B5B5B5B" #h"35BC6FF838DBA32F") (:ecb-mode-test #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"5C5C5C5C5C5C5C5C" #h"4927ACC8CE45ECE7") (:ecb-mode-test #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"5D5D5D5D5D5D5D5D" #h"E812EE6E3572985C") (:ecb-mode-test #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"5E5E5E5E5E5E5E5E" #h"9BB93A89627BF65F") (:ecb-mode-test #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"5F5F5F5F5F5F5F5F" #h"EF12476884CB74CA") (:ecb-mode-test #h"606060606060606060606060606060606060606060606060" #h"6060606060606060" #h"1BF17E00C09E7CBF") (:ecb-mode-test #h"616161616161616161616161616161616161616161616161" #h"6161616161616161" #h"29932350C098DB5D") (:ecb-mode-test #h"626262626262626262626262626262626262626262626262" #h"6262626262626262" #h"B476E6499842AC54") (:ecb-mode-test #h"636363636363636363636363636363636363636363636363" #h"6363636363636363" #h"5C662C29C1E96056") (:ecb-mode-test #h"646464646464646464646464646464646464646464646464" #h"6464646464646464" #h"3AF1703D76442789") (:ecb-mode-test #h"656565656565656565656565656565656565656565656565" #h"6565656565656565" #h"86405D9B425A8C8C") (:ecb-mode-test #h"666666666666666666666666666666666666666666666666" #h"6666666666666666" #h"EBBF4810619C2C55") (:ecb-mode-test #h"676767676767676767676767676767676767676767676767" #h"6767676767676767" #h"F8D1CD7367B21B5D") (:ecb-mode-test #h"686868686868686868686868686868686868686868686868" #h"6868686868686868" #h"9EE703142BF8D7E2") (:ecb-mode-test #h"696969696969696969696969696969696969696969696969" #h"6969696969696969" #h"5FDFFFC3AAAB0CB3") (:ecb-mode-test #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"6A6A6A6A6A6A6A6A" #h"26C940AB13574231") (:ecb-mode-test #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"6B6B6B6B6B6B6B6B" #h"1E2DC77E36A84693") (:ecb-mode-test #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"6C6C6C6C6C6C6C6C" #h"0F4FF4D9BC7E2244") (:ecb-mode-test #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"6D6D6D6D6D6D6D6D" #h"A4C9A0D04D3280CD") (:ecb-mode-test #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"6E6E6E6E6E6E6E6E" #h"9FAF2C96FE84919D") (:ecb-mode-test #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"6F6F6F6F6F6F6F6F" #h"115DBC965E6096C8") (:ecb-mode-test #h"707070707070707070707070707070707070707070707070" #h"7070707070707070" #h"AF531E9520994017") (:ecb-mode-test #h"717171717171717171717171717171717171717171717171" #h"7171717171717171" #h"B971ADE70E5C89EE") (:ecb-mode-test #h"727272727272727272727272727272727272727272727272" #h"7272727272727272" #h"415D81C86AF9C376") (:ecb-mode-test #h"737373737373737373737373737373737373737373737373" #h"7373737373737373" #h"8DFB864FDB3C6811") (:ecb-mode-test #h"747474747474747474747474747474747474747474747474" #h"7474747474747474" #h"10B1C170E3398F91") (:ecb-mode-test #h"757575757575757575757575757575757575757575757575" #h"7575757575757575" #h"CFEF7A1C0218DB1E") (:ecb-mode-test #h"767676767676767676767676767676767676767676767676" #h"7676767676767676" #h"DBAC30A2A40B1B9C") (:ecb-mode-test #h"777777777777777777777777777777777777777777777777" #h"7777777777777777" #h"89D3BF37052162E9") (:ecb-mode-test #h"787878787878787878787878787878787878787878787878" #h"7878787878787878" #h"80D9230BDAEB67DC") (:ecb-mode-test #h"797979797979797979797979797979797979797979797979" #h"7979797979797979" #h"3440911019AD68D7") (:ecb-mode-test #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"7A7A7A7A7A7A7A7A" #h"9626FE57596E199E") (:ecb-mode-test #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"7B7B7B7B7B7B7B7B" #h"DEA0B796624BB5BA") (:ecb-mode-test #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"7C7C7C7C7C7C7C7C" #h"E9E40542BDDB3E9D") (:ecb-mode-test #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"7D7D7D7D7D7D7D7D" #h"8AD99914B354B911") (:ecb-mode-test #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"7E7E7E7E7E7E7E7E" #h"6F85B98DD12CB13B") (:ecb-mode-test #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"7F7F7F7F7F7F7F7F" #h"10130DA3C3A23924") (:ecb-mode-test #h"808080808080808080808080808080808080808080808080" #h"8080808080808080" #h"EFECF25C3C5DC6DB") (:ecb-mode-test #h"818181818181818181818181818181818181818181818181" #h"8181818181818181" #h"907A46722ED34EC4") (:ecb-mode-test #h"828282828282828282828282828282828282828282828282" #h"8282828282828282" #h"752666EB4CAB46EE") (:ecb-mode-test #h"838383838383838383838383838383838383838383838383" #h"8383838383838383" #h"161BFABD4224C162") (:ecb-mode-test #h"848484848484848484848484848484848484848484848484" #h"8484848484848484" #h"215F48699DB44A45") (:ecb-mode-test #h"858585858585858585858585858585858585858585858585" #h"8585858585858585" #h"69D901A8A691E661") (:ecb-mode-test #h"868686868686868686868686868686868686868686868686" #h"8686868686868686" #h"CBBF6EEFE6529728") (:ecb-mode-test #h"878787878787878787878787878787878787878787878787" #h"8787878787878787" #h"7F26DCF425149823") (:ecb-mode-test #h"888888888888888888888888888888888888888888888888" #h"8888888888888888" #h"762C40C8FADE9D16") (:ecb-mode-test #h"898989898989898989898989898989898989898989898989" #h"8989898989898989" #h"2453CF5D5BF4E463") (:ecb-mode-test #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"8A8A8A8A8A8A8A8A" #h"301085E3FDE724E1") (:ecb-mode-test #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"8B8B8B8B8B8B8B8B" #h"EF4E3E8F1CC6706E") (:ecb-mode-test #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"8C8C8C8C8C8C8C8C" #h"720479B024C397EE") (:ecb-mode-test #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"8D8D8D8D8D8D8D8D" #h"BEA27E3795063C89") (:ecb-mode-test #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"8E8E8E8E8E8E8E8E" #h"468E5218F1A37611") (:ecb-mode-test #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"8F8F8F8F8F8F8F8F" #h"50ACE16ADF66BFE8") (:ecb-mode-test #h"909090909090909090909090909090909090909090909090" #h"9090909090909090" #h"EEA24369A19F6937") (:ecb-mode-test #h"919191919191919191919191919191919191919191919191" #h"9191919191919191" #h"6050D369017B6E62") (:ecb-mode-test #h"929292929292929292929292929292929292929292929292" #h"9292929292929292" #h"5B365F2FB2CD7F32") (:ecb-mode-test #h"939393939393939393939393939393939393939393939393" #h"9393939393939393" #h"F0B00B264381DDBB") (:ecb-mode-test #h"949494949494949494949494949494949494949494949494" #h"9494949494949494" #h"E1D23881C957B96C") (:ecb-mode-test #h"959595959595959595959595959595959595959595959595" #h"9595959595959595" #h"D936BF54ECA8BDCE") (:ecb-mode-test #h"969696969696969696969696969696969696969696969696" #h"9696969696969696" #h"A020003C5554F34C") (:ecb-mode-test #h"979797979797979797979797979797979797979797979797" #h"9797979797979797" #h"6118FCEBD407281D") (:ecb-mode-test #h"989898989898989898989898989898989898989898989898" #h"9898989898989898" #h"072E328C984DE4A2") (:ecb-mode-test #h"999999999999999999999999999999999999999999999999" #h"9999999999999999" #h"1440B7EF9E63D3AA") (:ecb-mode-test #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"9A9A9A9A9A9A9A9A" #h"79BFA264BDA57373") (:ecb-mode-test #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"9B9B9B9B9B9B9B9B" #h"C50E8FC289BBD876") (:ecb-mode-test #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"9C9C9C9C9C9C9C9C" #h"A399D3D63E169FA9") (:ecb-mode-test #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"9D9D9D9D9D9D9D9D" #h"4B8919B667BD53AB") (:ecb-mode-test #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"9E9E9E9E9E9E9E9E" #h"D66CDCAF3F6724A2") (:ecb-mode-test #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"9F9F9F9F9F9F9F9F" #h"E40E81FF3F618340") (:ecb-mode-test #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"A0A0A0A0A0A0A0A0" #h"10EDB8977B348B35") (:ecb-mode-test #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"A1A1A1A1A1A1A1A1" #h"6446C5769D8409A0") (:ecb-mode-test #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"A2A2A2A2A2A2A2A2" #h"17ED1191CA8D67A3") (:ecb-mode-test #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"A3A3A3A3A3A3A3A3" #h"B6D8533731BA1318") (:ecb-mode-test #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"A4A4A4A4A4A4A4A4" #h"CA439007C7245CD0") (:ecb-mode-test #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"A5A5A5A5A5A5A5A5" #h"06FC7FDE1C8389E7") (:ecb-mode-test #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"A6A6A6A6A6A6A6A6" #h"7A3C1F3BD60CB3D8") (:ecb-mode-test #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"A7A7A7A7A7A7A7A7" #h"E415D80048DBA848") (:ecb-mode-test #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"A8A8A8A8A8A8A8A8" #h"26F88D30C0FB8302") (:ecb-mode-test #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"A9A9A9A9A9A9A9A9" #h"D4E00A9EF5E6D8F3") (:ecb-mode-test #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"AAAAAAAAAAAAAAAA" #h"C4322BE19E9A5A17") (:ecb-mode-test #h"ABABABABABABABABABABABABABABABABABABABABABABABAB" #h"ABABABABABABABAB" #h"ACE41A06BFA258EA") (:ecb-mode-test #h"ACACACACACACACACACACACACACACACACACACACACACACACAC" #h"ACACACACACACACAC" #h"EEAAC6D17880BD56") (:ecb-mode-test #h"ADADADADADADADADADADADADADADADADADADADADADADADAD" #h"ADADADADADADADAD" #h"3C9A34CA4CB49EEB") (:ecb-mode-test #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"AEAEAEAEAEAEAEAE" #h"9527B0287B75F5A3") (:ecb-mode-test #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"AFAFAFAFAFAFAFAF" #h"F2D9D1BE74376C0C") (:ecb-mode-test #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"B0B0B0B0B0B0B0B0" #h"939618DF0AEFAAE7") (:ecb-mode-test #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"B1B1B1B1B1B1B1B1" #h"24692773CB9F27FE") (:ecb-mode-test #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"B2B2B2B2B2B2B2B2" #h"38703BA5E2315D1D") (:ecb-mode-test #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"B3B3B3B3B3B3B3B3" #h"FCB7E4B7D702E2FB") (:ecb-mode-test #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"B4B4B4B4B4B4B4B4" #h"36F0D0B3675704D5") (:ecb-mode-test #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"B5B5B5B5B5B5B5B5" #h"62D473F539FA0D8B") (:ecb-mode-test #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"B6B6B6B6B6B6B6B6" #h"1533F3ED9BE8EF8E") (:ecb-mode-test #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"B7B7B7B7B7B7B7B7" #h"9C4EA352599731ED") (:ecb-mode-test #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"B8B8B8B8B8B8B8B8" #h"FABBF7C046FD273F") (:ecb-mode-test #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"B9B9B9B9B9B9B9B9" #h"B7FE63A61C646F3A") (:ecb-mode-test #h"BABABABABABABABABABABABABABABABABABABABABABABABA" #h"BABABABABABABABA" #h"10ADB6E2AB972BBE") (:ecb-mode-test #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"BBBBBBBBBBBBBBBB" #h"F91DCAD912332F3B") (:ecb-mode-test #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"BCBCBCBCBCBCBCBC" #h"46E7EF47323A701D") (:ecb-mode-test #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"BDBDBDBDBDBDBDBD" #h"8DB18CCD9692F758") (:ecb-mode-test #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"BEBEBEBEBEBEBEBE" #h"E6207B536AAAEFFC") (:ecb-mode-test #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"BFBFBFBFBFBFBFBF" #h"92AA224372156A00") (:ecb-mode-test #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"C0C0C0C0C0C0C0C0" #h"A3B357885B1E16D2") (:ecb-mode-test #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"C1C1C1C1C1C1C1C1" #h"169F7629C970C1E5") (:ecb-mode-test #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"C2C2C2C2C2C2C2C2" #h"62F44B247CF1348C") (:ecb-mode-test #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"C3C3C3C3C3C3C3C3" #h"AE0FEEB0495932C8") (:ecb-mode-test #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"C4C4C4C4C4C4C4C4" #h"72DAF2A7C9EA6803") (:ecb-mode-test #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"C5C5C5C5C5C5C5C5" #h"4FB5D5536DA544F4") (:ecb-mode-test #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"C6C6C6C6C6C6C6C6" #h"1DD4E65AAF7988B4") (:ecb-mode-test #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"C7C7C7C7C7C7C7C7" #h"76BF084C1535A6C6") (:ecb-mode-test #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"C8C8C8C8C8C8C8C8" #h"AFEC35B09D36315F") (:ecb-mode-test #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"C9C9C9C9C9C9C9C9" #h"C8078A6148818403") (:ecb-mode-test #h"CACACACACACACACACACACACACACACACACACACACACACACACA" #h"CACACACACACACACA" #h"4DA91CB4124B67FE") (:ecb-mode-test #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"CBCBCBCBCBCBCBCB" #h"2DABFEB346794C3D") (:ecb-mode-test #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"CCCCCCCCCCCCCCCC" #h"FBCD12C790D21CD7") (:ecb-mode-test #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"CDCDCDCDCDCDCDCD" #h"536873DB879CC770") (:ecb-mode-test #h"CECECECECECECECECECECECECECECECECECECECECECECECE" #h"CECECECECECECECE" #h"9AA159D7309DA7A0") (:ecb-mode-test #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"CFCFCFCFCFCFCFCF" #h"0B844B9D8C4EA14A") (:ecb-mode-test #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"D0D0D0D0D0D0D0D0" #h"3BBD84CE539E68C4") (:ecb-mode-test #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"D1D1D1D1D1D1D1D1" #h"CF3E4F3E026E2C8E") (:ecb-mode-test #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"D2D2D2D2D2D2D2D2" #h"82F85885D542AF58") (:ecb-mode-test #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"D3D3D3D3D3D3D3D3" #h"22D334D6493B3CB6") (:ecb-mode-test #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"D4D4D4D4D4D4D4D4" #h"47E9CB3E3154D673") (:ecb-mode-test #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"D5D5D5D5D5D5D5D5" #h"2352BCC708ADC7E9") (:ecb-mode-test #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"D6D6D6D6D6D6D6D6" #h"8C0F3BA0C8601980") (:ecb-mode-test #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"D7D7D7D7D7D7D7D7" #h"EE5E9FD70CEF00E9") (:ecb-mode-test #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"D8D8D8D8D8D8D8D8" #h"DEF6BDA6CABF9547") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9" #h"4DADD04A0EA70F20") (:ecb-mode-test #h"DADADADADADADADADADADADADADADADADADADADADADADADA" #h"DADADADADADADADA" #h"C1AA16689EE1B482") (:ecb-mode-test #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"DBDBDBDBDBDBDBDB" #h"F45FC26193E69AEE") (:ecb-mode-test #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"DCDCDCDCDCDCDCDC" #h"D0CFBB937CEDBFB5") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDD" #h"F0752004EE23D87B") (:ecb-mode-test #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"DEDEDEDEDEDEDEDE" #h"77A791E28AA464A5") (:ecb-mode-test #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"DFDFDFDFDFDFDFDF" #h"E7562A7F56FF4966") (:ecb-mode-test #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"E0E0E0E0E0E0E0E0" #h"B026913F2CCFB109") (:ecb-mode-test #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"E1E1E1E1E1E1E1E1" #h"0DB572DDCE388AC7") (:ecb-mode-test #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"E2E2E2E2E2E2E2E2" #h"D9FA6595F0C094CA") (:ecb-mode-test #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"E3E3E3E3E3E3E3E3" #h"ADE4804C4BE4486E") (:ecb-mode-test #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"E4E4E4E4E4E4E4E4" #h"007B81F520E6D7DA") (:ecb-mode-test #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"E5E5E5E5E5E5E5E5" #h"961AEB77BFC10B3C") (:ecb-mode-test #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"E6E6E6E6E6E6E6E6" #h"8A8DD870C9B14AF2") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7" #h"3CC02E14B6349B25") (:ecb-mode-test #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"E8E8E8E8E8E8E8E8" #h"BAD3EE68BDDB9607") (:ecb-mode-test #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"E9E9E9E9E9E9E9E9" #h"DFF918E93BDAD292") (:ecb-mode-test #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"EAEAEAEAEAEAEAEA" #h"8FE559C7CD6FA56D") (:ecb-mode-test #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"EBEBEBEBEBEBEBEB" #h"C88480835C1A444C") (:ecb-mode-test #h"ECECECECECECECECECECECECECECECECECECECECECECECEC" #h"ECECECECECECECEC" #h"D6EE30A16B2CC01E") (:ecb-mode-test #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"EDEDEDEDEDEDEDED" #h"6932D887B2EA9C1A") (:ecb-mode-test #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"EEEEEEEEEEEEEEEE" #h"0BFC865461F13ACC") (:ecb-mode-test #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"EFEFEFEFEFEFEFEF" #h"228AEA0D403E807A") (:ecb-mode-test #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"F0F0F0F0F0F0F0F0" #h"2A2891F65BB8173C") (:ecb-mode-test #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"F1F1F1F1F1F1F1F1" #h"5D1B8FAF7839494B") (:ecb-mode-test #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"F2F2F2F2F2F2F2F2" #h"1C0A9280EECF5D48") (:ecb-mode-test #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"F3F3F3F3F3F3F3F3" #h"6CBCE951BBC30F74") (:ecb-mode-test #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"F4F4F4F4F4F4F4F4" #h"9CA66E96BD08BC70") (:ecb-mode-test #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"F5F5F5F5F5F5F5F5" #h"F5D779FCFBB28BF3") (:ecb-mode-test #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"F6F6F6F6F6F6F6F6" #h"0FEC6BBF9B859184") (:ecb-mode-test #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"F7F7F7F7F7F7F7F7" #h"EF88D2BF052DBDA8") (:ecb-mode-test #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"F8F8F8F8F8F8F8F8" #h"39ADBDDB7363090D") (:ecb-mode-test #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"F9F9F9F9F9F9F9F9" #h"C0AEAF445F7E2A7A") (:ecb-mode-test #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"FAFAFAFAFAFAFAFA" #h"C66F54067298D4E9") (:ecb-mode-test #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"FBFBFBFBFBFBFBFB" #h"E0BA8F4488AAF97C") (:ecb-mode-test #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"FCFCFCFCFCFCFCFC" #h"67B36E2875D9631C") (:ecb-mode-test #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"FDFDFDFDFDFDFDFD" #h"1ED83D49E267191D") (:ecb-mode-test #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"FEFEFEFEFEFEFEFE" #h"66B2B23EA84693AD") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFF" #h"7359B2163E4EDC58") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F1011121314151617" #h"0011223344556677" #h"97A25BA82B564F4C") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF482BD6459F82C5B300" #h"EA024714AD5C4D84" #h"C616ACE843958247") (:keystream-test #h"b8c5533b920cc4edd9e33564d2e4508407c82e438e529d4d" #h"b4bedec32587824f" #h"47e4d57df51c53ea264bac5eec78e39b6637555246006e7b2c7b725b42174f24402fac60ffe635ad16fc5cb3bb158efdfb0004c8c2278fb76f6ef5f689f56ccc1d55128c6691dbd18924302ea7262efa3fca8869e97f62aa02e4fdd72a99c6bf4fed594666a2ee8fc8a31463093170d7dd6e8ff12a7affeb66136abc7b1418051d45236c050f1f72109819cb2531a3945a1bb4e4879cc1f42817d88243f0e560fac793cc0c2d339dd4b98c34a0e23d91b0dd02c50cc77e8cfb0f8b1e6ef20709a3eb5be17480962ea8e10a318b87e9094e1c44c08527cd14667da35182e7598e69a4ad895e0155bb0bf17d6a0544027f93167a172ad51beb1f32e2c2a61ab41b62e92d081800ebf8cd36ac2ad9fa40eef453c7df7e7af3b278b02df41260edf715a478c9a9ddb226686d34bfdf841eeba37400ed07c185db471feb6b37ff1a5da53d7aa5eab205d850978402811a162c5c91a2bc156015ece5635d73ec06b3155f5415668b9425440eff620af724c1ff678a76b1e8a248c95b74d08b245e5ebdc96b59748995924cdf490bd8d1b3f8f08fb533d472cd2f0ff15ff3b897b6ac08409ff2dd86815176ede77639f66599654ab37b5ec3da4295442f368acd6e8fc786302063c767e8fa260e80eb6c15b3f8f23015b929fdd3160b16fba7ccbee45fa708f258221ed686fe66fdc46967a6872e835c156dfd54b119ed2d4a2aa792d1580a60fc314731dc89aaa3fda3a8c236ae006b75839e766fd0641b9eb016d292b31c1f1a13593501c5a9062dd9d0c2c0afd3f523622f855d0f5b205adb4e405c32859e2b21fd2c1218e2b34a00ebbb50fd03e9585eaaf46efed9813d9ae9267e50db7099a285689919de0829136673d64b01d14468f03876250da10215fdf39379f3427a14296a8c8ea29df712b6ac1d915ce6fdbe92cdfab0d3abda09d3c0929ba56bdd6b532a6cab23ab6de2f7095cdf374356739795f2720780b9f900b8d07290f1699ea5c833c67af02b9585c625764a4b679f6e65caabbe19b19f3c841f8a9d1c32735eb46f81476b23d06d9ad44a80fc05b868e861dfca2262bc41c57c8f61a336582e665553b50c6c5478098867ac58dae61e2d9838d1df9cb266b0d6c0250879cfac4b331a96574550142c410b2946d4764f2d9dfa185e9a0fd54a51c532e396a240f34f68c28927c0edcd8d6303fe5f11e397c171749692d33b91b2b4cf68b2d14f76f753cc0466e8b842f681f9d093c92e1c3b81d133586347b94c95ff4025e348a3a73502d113e964518cc9125a2fc22b76473951e8f3a48608f45f526002508138808731918f0af82322a1ff489ca43e9d3ba82be7bad1218d08636956c1fb6f816b1292f0cb9d1576d4767a0942f14c7ab3d0d503360e7dc84ee3ff89be55054e9d") ironclad-0.57/testing/test-vectors/adler32.testvec000066400000000000000000000007011420372057600222160ustar00rootroot00000000000000;;; standard tests for adler32 (:digest-test #a"" #h"00000001") (:digest-test #a"a" #h"00620062") (:digest-test #a"abc" #h"024d0127") (:digest-test #a"message digest" #h"29750586") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"90860b20") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"8adb150c") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"97b61069") ironclad-0.57/testing/test-vectors/aead.lisp000066400000000000000000000012541420372057600211520ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto-tests) #.(loop for mode in (crypto:list-all-authenticated-encryption-modes) collect `(rtest:deftest ,mode (run-test-vector-file ',mode *authenticated-encryption-tests*) t) into forms finally (return `(progn ,@forms))) #.(loop for mode in (crypto:list-all-authenticated-encryption-modes) collect `(rtest:deftest ,(intern (format nil "~a/~a" mode '#:incremental)) (run-test-vector-file ',mode *authenticated-encryption-incremental-tests*) t) into forms finally (return `(progn ,@forms))) ironclad-0.57/testing/test-vectors/aes.testvec000066400000000000000000001602211420372057600215360ustar00rootroot00000000000000;;;; aes-test-vectors.lisp -- standard tests from ecb_tbl.txt (:ecb-mode-test #h"00010203050607080A0B0C0D0F101112" #h"506812A45F08C889B97F5980038B8359" #h"D8F532538289EF7D06B506A4FD5BE9C9") (:ecb-mode-test #h"14151617191A1B1C1E1F202123242526" #h"5C6D71CA30DE8B8B00549984D2EC7D4B" #h"59AB30F4D4EE6E4FF9907EF65B1FB68C") (:ecb-mode-test #h"28292A2B2D2E2F30323334353738393A" #h"53F3F4C64F8616E4E7C56199F48F21F6" #h"BF1ED2FCB2AF3FD41443B56D85025CB1") (:ecb-mode-test #h"3C3D3E3F41424344464748494B4C4D4E" #h"A1EB65A3487165FB0F1C27FF9959F703" #h"7316632D5C32233EDCB0780560EAE8B2") (:ecb-mode-test #h"50515253555657585A5B5C5D5F606162" #h"3553ECF0B1739558B08E350A98A39BFA" #h"408C073E3E2538072B72625E68B8364B") (:ecb-mode-test #h"64656667696A6B6C6E6F707173747576" #h"67429969490B9711AE2B01DC497AFDE8" #h"E1F94DFA776597BEACA262F2F6366FEA") (:ecb-mode-test #h"78797A7B7D7E7F80828384858788898A" #h"93385C1F2AEC8BED192F5A8E161DD508" #h"F29E986C6A1C27D7B29FFD7EE92B75F1") (:ecb-mode-test #h"8C8D8E8F91929394969798999B9C9D9E" #h"B5BF946BE19BEB8DB3983B5F4C6E8DDB" #h"131C886A57F8C2E713ABA6955E2B55B5") (:ecb-mode-test #h"A0A1A2A3A5A6A7A8AAABACADAFB0B1B2" #h"41321EE10E21BD907227C4450FF42324" #h"D2AB7662DF9B8C740210E5EEB61C199D") (:ecb-mode-test #h"B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6" #h"00A82F59C91C8486D12C0A80124F6089" #h"14C10554B2859C484CAB5869BBE7C470") (:ecb-mode-test #h"C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA" #h"7CE0FD076754691B4BBD9FAF8A1372FE" #h"DB4D498F0A49CF55445D502C1F9AB3B5") (:ecb-mode-test #h"DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE" #h"23605A8243D07764541BC5AD355B3129" #h"6D96FEF7D66590A77A77BB2056667F7F") (:ecb-mode-test #h"F0F1F2F3F5F6F7F8FAFBFCFDFE010002" #h"12A8CFA23EA764FD876232B4E842BC44" #h"316FB68EDBA736C53E78477BF913725C") (:ecb-mode-test #h"04050607090A0B0C0E0F101113141516" #h"BCAF32415E8308B3723E5FDD853CCC80" #h"6936F2B93AF8397FD3A771FC011C8C37") (:ecb-mode-test #h"2C2D2E2F31323334363738393B3C3D3E" #h"89AFAE685D801AD747ACE91FC49ADDE0" #h"F3F92F7A9C59179C1FCC2C2BA0B082CD") (:ecb-mode-test #h"40414243454647484A4B4C4D4F505152" #h"F521D07B484357C4A69E76124A634216" #h"6A95EA659EE3889158E7A9152FF04EBC") (:ecb-mode-test #h"54555657595A5B5C5E5F606163646566" #h"3E23B3BC065BCC152407E23896D77783" #h"1959338344E945670678A5D432C90B93") (:ecb-mode-test #h"68696A6B6D6E6F70727374757778797A" #h"79F0FBA002BE1744670E7E99290D8F52" #h"E49BDDD2369B83EE66E6C75A1161B394") (:ecb-mode-test #h"7C7D7E7F81828384868788898B8C8D8E" #h"DA23FE9D5BD63E1D72E3DAFBE21A6C2A" #h"D3388F19057FF704B70784164A74867D") (:ecb-mode-test #h"A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6" #h"E3F5698BA90B6A022EFD7DB2C7E6C823" #h"23AA03E2D5E4CD24F3217E596480D1E1") (:ecb-mode-test #h"E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2" #h"BDC2691D4F1B73D2700679C3BCBF9C6E" #h"C84113D68B666AB2A50A8BDB222E91B9") (:ecb-mode-test #h"08090A0B0D0E0F10121314151718191A" #h"BA74E02093217EE1BA1B42BD5624349A" #h"AC02403981CD4340B507963DB65CB7B6") (:ecb-mode-test #h"6C6D6E6F71727374767778797B7C7D7E" #h"B5C593B5851C57FBF8B3F57715E8F680" #h"8D1299236223359474011F6BF5088414") (:ecb-mode-test #h"80818283858687888A8B8C8D8F909192" #h"3DA9BD9CEC072381788F9387C3BBF4EE" #h"5A1D6AB8605505F7977E55B9A54D9B90") (:ecb-mode-test #h"94959697999A9B9C9E9FA0A1A3A4A5A6" #h"4197F3051121702AB65D316B3C637374" #h"72E9C2D519CF555E4208805AABE3B258") (:ecb-mode-test #h"A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA" #h"9F46C62EC4F6EE3F6E8C62554BC48AB7" #h"A8F3E81C4A23A39EF4D745DFFE026E80") (:ecb-mode-test #h"BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE" #h"0220673FE9E699A4EBC8E0DBEB6979C8" #h"546F646449D31458F9EB4EF5483AEE6C") (:ecb-mode-test #h"D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2" #h"B2B99171337DED9BC8C2C23FF6F18867" #h"4DBE4BC84AC797C0EE4EFB7F1A07401C") (:ecb-mode-test #h"E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6" #h"A7FACF4E301E984E5EFEEFD645B23505" #h"25E10BFB411BBD4D625AC8795C8CA3B3") (:ecb-mode-test #h"F8F9FAFBFDFEFE00020304050708090A" #h"F7C762E4A9819160FD7ACFB6C4EEDCDD" #h"315637405054EC803614E43DEF177579") (:ecb-mode-test #h"0C0D0E0F11121314161718191B1C1D1E" #h"9B64FC21EA08709F4915436FAA70F1BE" #h"60C5BC8A1410247295C6386C59E572A8") (:ecb-mode-test #h"20212223252627282A2B2C2D2F303132" #h"52AF2C3DE07EE6777F55A4ABFC100B3F" #h"01366FC8CA52DFE055D6A00A76471BA6") (:ecb-mode-test #h"34353637393A3B3C3E3F404143444546" #h"2FCA001224386C57AA3F968CBE2C816F" #h"ECC46595516EC612449C3F581E7D42FF") (:ecb-mode-test #h"48494A4B4D4E4F50525354555758595A" #h"4149C73658A4A9C564342755EE2C132F" #h"6B7FFE4C602A154B06EE9C7DAB5331C9") (:ecb-mode-test #h"5C5D5E5F61626364666768696B6C6D6E" #h"AF60005A00A1772F7C07A48A923C23D2" #h"7DA234C14039A240DD02DD0FBF84EB67") (:ecb-mode-test #h"70717273757677787A7B7C7D7F808182" #h"6FCCBC28363759914B6F0280AFAF20C6" #h"C7DC217D9E3604FFE7E91F080ECD5A3A") (:ecb-mode-test #h"84858687898A8B8C8E8F909193949596" #h"7D82A43DDF4FEFA2FC5947499884D386" #h"37785901863F5C81260EA41E7580CDA5") (:ecb-mode-test #h"98999A9B9D9E9FA0A2A3A4A5A7A8A9AA" #h"5D5A990EAAB9093AFE4CE254DFA49EF9" #h"A07B9338E92ED105E6AD720FCCCE9FE4") (:ecb-mode-test #h"ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE" #h"4CD1E2FD3F4434B553AAE453F0ED1A02" #h"AE0FB9722418CC21A7DA816BBC61322C") (:ecb-mode-test #h"C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2" #h"5A2C9A9641D4299125FA1B9363104B5E" #h"C826A193080FF91FFB21F71D3373C877") (:ecb-mode-test #h"D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6" #h"B517FE34C0FA217D341740BFD4FE8DD4" #h"1181B11B0E494E8D8B0AA6B1D5AC2C48") (:ecb-mode-test #h"E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FA" #h"014BAF2278A69D331D5180103643E99A" #h"6743C3D1519AB4F2CD9A78AB09A511BD") (:ecb-mode-test #h"FCFDFEFF01020304060708090B0C0D0E" #h"B529BD8164F20D0AA443D4932116841C" #h"DC55C076D52BACDF2EEFD952946A439D") (:ecb-mode-test #h"10111213151617181A1B1C1D1F202122" #h"2E596DCBB2F33D4216A1176D5BD1E456" #h"711B17B590FFC72B5C8E342B601E8003") (:ecb-mode-test #h"24252627292A2B2C2E2F303133343536" #h"7274A1EA2B7EE2424E9A0E4673689143" #h"19983BB0950783A537E1339F4AA21C75") (:ecb-mode-test #h"38393A3B3D3E3F40424344454748494A" #h"AE20020BD4F13E9D90140BEE3B5D26AF" #h"3BA7762E15554169C0F4FA39164C410C") (:ecb-mode-test #h"4C4D4E4F51525354565758595B5C5D5E" #h"BAAC065DA7AC26E855E79C8849D75A02" #h"A0564C41245AFCA7AF8AA2E0E588EA89") (:ecb-mode-test #h"60616263656667686A6B6C6D6F707172" #h"7C917D8D1D45FAB9E2540E28832540CC" #h"5E36A42A2E099F54AE85ECD92E2381ED") (:ecb-mode-test #h"74757677797A7B7C7E7F808183848586" #h"BDE6F89E16DAADB0E847A2A614566A91" #h"770036F878CD0F6CA2268172F106F2FE") (:ecb-mode-test #h"88898A8B8D8E8F90929394959798999A" #h"C9DE163725F1F5BE44EBB1DB51D07FBC" #h"7E4E03908B716116443CCF7C94E7C259") (:ecb-mode-test #h"9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE" #h"3AF57A58F0C07DFFA669572B521E2B92" #h"482735A48C30613A242DD494C7F9185D") (:ecb-mode-test #h"B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2" #h"3D5EBAC306DDE4604F1B4FBBBFCDAE55" #h"B4C0F6C9D4D7079ADDF9369FC081061D") (:ecb-mode-test #h"C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6" #h"C2DFA91BCEB76A1183C995020AC0B556" #h"D5810FE0509AC53EDCD74F89962E6270") (:ecb-mode-test #h"D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EA" #h"C70F54305885E9A0746D01EC56C8596B" #h"03F17A16B3F91848269ECDD38EBB2165") (:ecb-mode-test #h"ECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE" #h"C4F81B610E98012CE000182050C0C2B2" #h"DA1248C3180348BAD4A93B4D9856C9DF") (:ecb-mode-test #h"00010203050607080A0B0C0D0F101112" #h"EAAB86B1D02A95D7404EFF67489F97D4" #h"3D10D7B63F3452C06CDF6CCE18BE0C2C") (:ecb-mode-test #h"14151617191A1B1C1E1F202123242526" #h"7C55BDB40B88870B52BEC3738DE82886" #h"4AB823E7477DFDDC0E6789018FCB6258") (:ecb-mode-test #h"28292A2B2D2E2F30323334353738393A" #h"BA6EAA88371FF0A3BD875E3F2A975CE0" #h"E6478BA56A77E70CFDAA5C843ABDE30E") (:ecb-mode-test #h"3C3D3E3F41424344464748494B4C4D4E" #h"08059130C4C24BD30CF0575E4E0373DC" #h"1673064895FBEAF7F09C5429FF75772D") (:ecb-mode-test #h"50515253555657585A5B5C5D5F606162" #h"9A8EAB004EF53093DFCF96F57E7EDA82" #h"4488033AE9F2EFD0CA9383BFCA1A94E9") (:ecb-mode-test #h"64656667696A6B6C6E6F707173747576" #h"0745B589E2400C25F117B1D796C28129" #h"978F3B8C8F9D6F46626CAC3C0BCB9217") (:ecb-mode-test #h"78797A7B7D7E7F80828384858788898A" #h"2F1777781216CEC3F044F134B1B92BBE" #h"E08C8A7E582E15E5527F1D9E2EECB236") (:ecb-mode-test #h"8C8D8E8F91929394969798999B9C9D9E" #h"353A779FFC541B3A3805D90CE17580FC" #h"CEC155B76AC5FFDA4CF4F9CA91E49A7A") (:ecb-mode-test #h"A0A1A2A3A5A6A7A8AAABACADAFB0B1B2" #h"1A1EAE4415CEFCF08C4AC1C8F68BEA8F" #h"D5AC7165763225DD2A38CDC6862C29AD") (:ecb-mode-test #h"B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6" #h"E6E7E4E5B0B3B2B5D4D5AAAB16111013" #h"03680FE19F7CE7275452020BE70E8204") (:ecb-mode-test #h"C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA" #h"F8F9FAFBFBF8F9E677767170EFE0E1E2" #h"461DF740C9781C388E94BB861CEB54F6") (:ecb-mode-test #h"DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE" #h"63626160A1A2A3A445444B4A75727370" #h"451BD60367F96483042742219786A074") (:ecb-mode-test #h"F0F1F2F3F5F6F7F8FAFBFCFDFE010002" #h"717073720605040B2D2C2B2A05FAFBF9" #h"E4DFA42671A02E57EF173B85C0EA9F2B") (:ecb-mode-test #h"04050607090A0B0C0E0F101113141516" #h"78797A7BEAE9E8EF3736292891969794" #h"ED11B89E76274282227D854700A78B9E") (:ecb-mode-test #h"18191A1B1D1E1F20222324252728292A" #h"838281803231300FDDDCDBDAA0AFAEAD" #h"433946EAA51EA47AF33895F2B90B3B75") (:ecb-mode-test #h"2C2D2E2F31323334363738393B3C3D3E" #h"18191A1BBFBCBDBA75747B7A7F78797A" #h"6BC6D616A5D7D0284A5910AB35022528") (:ecb-mode-test #h"40414243454647484A4B4C4D4F505152" #h"848586879B989996A3A2A5A4849B9A99" #h"D2A920ECFE919D354B5F49EAE9719C98") (:ecb-mode-test #h"54555657595A5B5C5E5F606163646566" #h"0001020322212027CACBF4F551565754" #h"3A061B17F6A92885EFBD0676985B373D") (:ecb-mode-test #h"68696A6B6D6E6F70727374757778797A" #h"CECFCCCDAFACADB2515057564A454447" #h"FADEEC16E33EA2F4688499D157E20D8F") (:ecb-mode-test #h"7C7D7E7F81828384868788898B8C8D8E" #h"92939091CDCECFC813121D1C80878685" #h"5CDEFEDE59601AA3C3CDA36FA6B1FA13") (:ecb-mode-test #h"90919293959697989A9B9C9D9FA0A1A2" #h"D2D3D0D16F6C6D6259585F5ED1EEEFEC" #h"9574B00039844D92EBBA7EE8719265F8") (:ecb-mode-test #h"A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6" #h"ACADAEAF878485820F0E1110D5D2D3D0" #h"9A9CF33758671787E5006928188643FA") (:ecb-mode-test #h"B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CA" #h"9091929364676619E6E7E0E1757A7B78" #h"2CDDD634C846BA66BB46CBFEA4A674F9") (:ecb-mode-test #h"CCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE" #h"BABBB8B98A89888F74757A7B92959497" #h"D28BAE029393C3E7E26E9FAFBBB4B98F") (:ecb-mode-test #h"E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2" #h"8D8C8F8E6E6D6C633B3A3D3CCAD5D4D7" #h"EC27529B1BEE0A9AB6A0D73EBC82E9B7") (:ecb-mode-test #h"F4F5F6F7F9FAFBFCFEFE010103040506" #h"86878485010203040808F7F767606162" #h"3CB25C09472AFF6EE7E2B47CCD7CCB17") (:ecb-mode-test #h"08090A0B0D0E0F10121314151718191A" #h"8E8F8C8D656667788A8B8C8D010E0F0C" #h"DEE33103A7283370D725E44CA38F8FE5") (:ecb-mode-test #h"1C1D1E1F21222324262728292B2C2D2E" #h"C8C9CACB858687807A7B7475E7E0E1E2" #h"27F9BCD1AAC64BFFC11E7815702C1A69") (:ecb-mode-test #h"30313233353637383A3B3C3D3F404142" #h"6D6C6F6E5053525D8C8D8A8BADD2D3D0" #h"5DF534FFAD4ED0749A9988E9849D0021") (:ecb-mode-test #h"44454647494A4B4C4E4F505153545556" #h"28292A2B393A3B3C0607181903040506" #h"A48BEE75DB04FB60CA2B80F752A8421B") (:ecb-mode-test #h"58595A5B5D5E5F60626364656768696A" #h"A5A4A7A6B0B3B28DDBDADDDCBDB2B3B0" #h"024C8CF70BC86EE5CE03678CB7AF45F9") (:ecb-mode-test #h"6C6D6E6F71727374767778797B7C7D7E" #h"323330316467666130313E3F2C2B2A29" #h"3C19AC0F8A3A3862CE577831301E166B") (:ecb-mode-test #h"80818283858687888A8B8C8D8F909192" #h"27262524080B0A05171611100B141516" #h"C5E355B796A57421D59CA6BE82E73BCA") (:ecb-mode-test #h"94959697999A9B9C9E9FA0A1A3A4A5A6" #h"040506074142434435340B0AA3A4A5A6" #h"D94033276417ABFB05A69D15B6E386E2") (:ecb-mode-test #h"A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA" #h"242526271112130C61606766BDB2B3B0" #h"24B36559EA3A9B9B958FE6DA3E5B8D85") (:ecb-mode-test #h"BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE" #h"4B4A4948252627209E9F9091CEC9C8CB" #h"20FD4FEAA0E8BF0CCE7861D74EF4CB72") (:ecb-mode-test #h"D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2" #h"68696A6B6665646B9F9E9998D9E6E7E4" #h"350E20D5174277B9EC314C501570A11D") (:ecb-mode-test #h"E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6" #h"34353637C5C6C7C0F0F1EEEF7C7B7A79" #h"87A29D61B7C604D238FE73045A7EFD57") (:ecb-mode-test #h"F8F9FAFBFDFEFE00020304050708090A" #h"32333031C2C1C13F0D0C0B0A050A0B08" #h"2C3164C1CC7D0064816BDC0FAA362C52") (:ecb-mode-test #h"0C0D0E0F11121314161718191B1C1D1E" #h"CDCCCFCEBEBDBCBBABAAA5A4181F1E1D" #h"195FE5E8A05A2ED594F6E4400EEE10B3") (:ecb-mode-test #h"20212223252627282A2B2C2D2F303132" #h"212023223635343BA0A1A6A7445B5A59" #h"E4663DF19B9A21A5A284C2BD7F905025") (:ecb-mode-test #h"34353637393A3B3C3E3F404143444546" #h"0E0F0C0DA8ABAAAD2F2E515002050407" #h"21B88714CFB4E2A933BD281A2C4743FD") (:ecb-mode-test #h"48494A4B4D4E4F50525354555758595A" #h"070605042A2928378E8F8889BDB2B3B0" #h"CBFC3980D704FD0FC54378AB84E17870") (:ecb-mode-test #h"5C5D5E5F61626364666768696B6C6D6E" #h"CBCAC9C893909196A9A8A7A6A5A2A3A0" #h"BC5144BAA48BDEB8B63E22E03DA418EF") (:ecb-mode-test #h"70717273757677787A7B7C7D7F808182" #h"80818283C1C2C3CC9C9D9A9B0CF3F2F1" #h"5A1DBAEF1EE2984B8395DA3BDFFA3CCC") (:ecb-mode-test #h"84858687898A8B8C8E8F909193949596" #h"1213101125262720FAFBE4E5B1B6B7B4" #h"F0B11CD0729DFCC80CEC903D97159574") (:ecb-mode-test #h"98999A9B9D9E9FA0A2A3A4A5A7A8A9AA" #h"7F7E7D7C3033320D97969190222D2C2F" #h"9F95314ACFDDC6D1914B7F19A9CC8209") (:ecb-mode-test #h"ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE" #h"4E4F4C4D484B4A4D81808F8E53545556" #h"595736F6F0F70914A94E9E007F022519") (:ecb-mode-test #h"C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2" #h"DCDDDEDFB0B3B2BD15141312A1BEBFBC" #h"1F19F57892CAE586FCDFB4C694DEB183") (:ecb-mode-test #h"D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6" #h"93929190282B2A2DC4C5FAFB92959497" #h"540700EE1F6F3DAB0B3EDDF6CAEE1EF5") (:ecb-mode-test #h"E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FA" #h"F5F4F7F6C4C7C6D9373631307E717073" #h"14A342A91019A331687A2254E6626CA2") (:ecb-mode-test #h"FCFDFEFF01020304060708090B0C0D0E" #h"93929190B6B5B4B364656A6B05020300" #h"7B25F3C3B2EEA18D743EF283140F29FF") (:ecb-mode-test #h"10111213151617181A1B1C1D1F202122" #h"BABBB8B90D0E0F00A4A5A2A3043B3A39" #h"46C2587D66E5E6FA7F7CA6411AD28047") (:ecb-mode-test #h"24252627292A2B2C2E2F303133343536" #h"D8D9DADB7F7C7D7A10110E0F787F7E7D" #h"09470E72229D954ED5EE73886DFEEBA9") (:ecb-mode-test #h"38393A3B3D3E3F40424344454748494A" #h"FEFFFCFDEFECED923B3A3D3C6768696A" #h"D77C03DE92D4D0D79EF8D4824EF365EB") (:ecb-mode-test #h"4C4D4E4F51525354565758595B5C5D5E" #h"D6D7D4D58A89888F96979899A5A2A3A0" #h"1D190219F290E0F1715D152D41A23593") (:ecb-mode-test #h"60616263656667686A6B6C6D6F707172" #h"18191A1BA8ABAAA5303136379B848586" #h"A2CD332CE3A0818769616292E87F757B") (:ecb-mode-test #h"74757677797A7B7C7E7F808183848586" #h"6B6A6968A4A7A6A1D6D72829B0B7B6B5" #h"D54AFA6CE60FBF9341A3690E21385102") (:ecb-mode-test #h"88898A8B8D8E8F90929394959798999A" #h"000102038A89889755545352A6A9A8AB" #h"06E5C364DED628A3F5E05E613E356F46") (:ecb-mode-test #h"9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE" #h"2D2C2F2EB3B0B1B6B6B7B8B9F2F5F4F7" #h"EAE63C0E62556DAC85D221099896355A") (:ecb-mode-test #h"B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2" #h"979695943536373856575051E09F9E9D" #h"1FED060E2C6FC93EE764403A889985A2") (:ecb-mode-test #h"C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6" #h"A4A5A6A7989B9A9DB1B0AFAE7A7D7C7F" #h"C25235C1A30FDEC1C7CB5C5737B2A588") (:ecb-mode-test #h"D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EA" #h"C1C0C3C2686B6A55A8A9AEAFEAE5E4E7" #h"796DBEF95147D4D30873AD8B7B92EFC0") (:ecb-mode-test #h"ECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE" #h"C1C0C3C2141716118C8D828364636261" #h"CBCF0FB34D98D0BD5C22CE37211A46BF") (:ecb-mode-test #h"00010203050607080A0B0C0D0F101112" #h"93929190CCCFCEC196979091E0FFFEFD" #h"94B44DA6466126CAFA7C7FD09063FC24") (:ecb-mode-test #h"14151617191A1B1C1E1F202123242526" #h"B4B5B6B7F9FAFBFC25241B1A6E69686B" #h"D78C5B5EBF9B4DBDA6AE506C5074C8FE") (:ecb-mode-test #h"28292A2B2D2E2F30323334353738393A" #h"868784850704051AC7C6C1C08788898A" #h"6C27444C27204B043812CF8CF95F9769") (:ecb-mode-test #h"3C3D3E3F41424344464748494B4C4D4E" #h"F4F5F6F7AAA9A8AFFDFCF3F277707172" #h"BE94524EE5A2AA50BBA8B75F4C0AEBCF") (:ecb-mode-test #h"50515253555657585A5B5C5D5F606162" #h"D3D2D1D00605040BC3C2C5C43E010003" #h"A0AEAAE91BA9F31F51AEB3588CF3A39E") (:ecb-mode-test #h"64656667696A6B6C6E6F707173747576" #h"73727170424140476A6B74750D0A0B08" #h"275297779C28266EF9FE4C6A13C08488") (:ecb-mode-test #h"78797A7B7D7E7F80828384858788898A" #h"C2C3C0C10A0908F754555253A1AEAFAC" #h"86523D92BB8672CB01CF4A77FD725882") (:ecb-mode-test #h"8C8D8E8F91929394969798999B9C9D9E" #h"6D6C6F6EF8FBFAFD82838C8DF8FFFEFD" #h"4B8327640E9F33322A04DD96FCBF9A36") (:ecb-mode-test #h"A0A1A2A3A5A6A7A8AAABACADAFB0B1B2" #h"F5F4F7F684878689A6A7A0A1D2CDCCCF" #h"CE52AF650D088CA559425223F4D32694") (:ecb-mode-test #h"00010203050607080A0B0C0D0F10111214151617191A1B1C" #h"2D33EEF2C0430A8A9EBF45E809C40BB6" #h"DFF4945E0336DF4C1C56BC700EFF837F") (:ecb-mode-test #h"1E1F20212324252628292A2B2D2E2F30323334353738393A" #h"6AA375D1FA155A61FB72353E0A5A8756" #h"B6FDDEF4752765E347D5D2DC196D1252") (:ecb-mode-test #h"3C3D3E3F41424344464748494B4C4D4E5051525355565758" #h"BC3736518B9490DCB8ED60EB26758ED4" #h"D23684E3D963B3AFCF1A114ACA90CBD6") (:ecb-mode-test #h"5A5B5C5D5F60616264656667696A6B6C6E6F707173747576" #h"AA214402B46CFFB9F761EC11263A311E" #h"3A7AC027753E2A18C2CEAB9E17C11FD0") (:ecb-mode-test #h"78797A7B7D7E7F80828384858788898A8C8D8E8F91929394" #h"02AEA86E572EEAB66B2C3AF5E9A46FD6" #h"8F6786BD007528BA26603C1601CDD0D8") (:ecb-mode-test #h"969798999B9C9D9EA0A1A2A3A5A6A7A8AAABACADAFB0B1B2" #h"E2AEF6ACC33B965C4FA1F91C75FF6F36" #h"D17D073B01E71502E28B47AB551168B3") (:ecb-mode-test #h"B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6C8C9CACBCDCECFD0" #h"0659DF46427162B9434865DD9499F91D" #h"A469DA517119FAB95876F41D06D40FFA") (:ecb-mode-test #h"D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE" #h"49A44239C748FEB456F59C276A5658DF" #h"6091AA3B695C11F5C0B6AD26D3D862FF") (:ecb-mode-test #h"F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C" #h"66208F6E9D04525BDEDB2733B6A6BE37" #h"70F9E67F9F8DF1294131662DC6E69364") (:ecb-mode-test #h"0E0F10111314151618191A1B1D1E1F20222324252728292A" #h"3393F8DFC729C97F5480B950BC9666B0" #h"D154DCAFAD8B207FA5CBC95E9996B559") (:ecb-mode-test #h"2C2D2E2F31323334363738393B3C3D3E4041424345464748" #h"606834C8CE063F3234CF1145325DBD71" #h"4934D541E8B46FA339C805A7AEB9E5DA") (:ecb-mode-test #h"4A4B4C4D4F50515254555657595A5B5C5E5F606163646566" #h"FEC1C04F529BBD17D8CECFCC4718B17F" #h"62564C738F3EFE186E1A127A0C4D3C61") (:ecb-mode-test #h"68696A6B6D6E6F70727374757778797A7C7D7E7F81828384" #h"32DF99B431ED5DC5ACF8CAF6DC6CE475" #h"07805AA043986EB23693E23BEF8F3438") (:ecb-mode-test #h"868788898B8C8D8E90919293959697989A9B9C9D9FA0A1A2" #h"7FDC2B746F3F665296943B83710D1F82" #h"DF0B4931038BADE848DEE3B4B85AA44B") (:ecb-mode-test #h"A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6B8B9BABBBDBEBFC0" #h"8FBA1510A3C5B87E2EAA3F7A91455CA2" #h"592D5FDED76582E4143C65099309477C") (:ecb-mode-test #h"C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE" #h"2C9B468B1C2EED92578D41B0716B223B" #h"C9B8D6545580D3DFBCDD09B954ED4E92") (:ecb-mode-test #h"E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFC" #h"0A2BBF0EFC6BC0034F8A03433FCA1B1A" #h"5DCCD5D6EB7C1B42ACB008201DF707A0") (:ecb-mode-test #h"FEFE01010304050608090A0B0D0E0F10121314151718191A" #h"25260E1F31F4104D387222E70632504B" #h"A2A91682FFEB6ED1D34340946829E6F9") (:ecb-mode-test #h"1C1D1E1F21222324262728292B2C2D2E3031323335363738" #h"C527D25A49F08A5228D338642AE65137" #h"E45D185B797000348D9267960A68435D") (:ecb-mode-test #h"3A3B3C3D3F40414244454647494A4B4C4E4F505153545556" #h"3B49FC081432F5890D0E3D87E884A69E" #h"45E060DAE5901CDA8089E10D4F4C246B") (:ecb-mode-test #h"58595A5B5D5E5F60626364656768696A6C6D6E6F71727374" #h"D173F9ED1E57597E166931DF2754A083" #h"F6951AFACC0079A369C71FDCFF45DF50") (:ecb-mode-test #h"767778797B7C7D7E80818283858687888A8B8C8D8F909192" #h"8C2B7CAFA5AFE7F13562DAEAE1ADEDE0" #h"9E95E00F351D5B3AC3D0E22E626DDAD6") (:ecb-mode-test #h"94959697999A9B9C9E9FA0A1A3A4A5A6A8A9AAABADAEAFB0" #h"AAF4EC8C1A815AEB826CAB741339532C" #h"9CB566FF26D92DAD083B51FDC18C173C") (:ecb-mode-test #h"D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBEC" #h"40BE8C5D9108E663F38F1A2395279ECF" #h"C9C82766176A9B228EB9A974A010B4FB") (:ecb-mode-test #h"2A2B2C2D2F30313234353637393A3B3C3E3F404143444546" #h"0C8AD9BC32D43E04716753AA4CFBE351" #h"D8E26AA02945881D5137F1C1E1386E88") (:ecb-mode-test #h"48494A4B4D4E4F50525354555758595A5C5D5E5F61626364" #h"1407B1D5F87D63357C8DC7EBBAEBBFEE" #h"C0E024CCD68FF5FFA4D139C355A77C55") (:ecb-mode-test #h"84858687898A8B8C8E8F90919394959698999A9B9D9E9FA0" #h"E62734D1AE3378C4549E939E6F123416" #h"0B18B3D16F491619DA338640DF391D43") (:ecb-mode-test #h"A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE" #h"5A752CFF2A176DB1A1DE77F2D2CDEE41" #h"DBE09AC8F66027BF20CB6E434F252EFC") (:ecb-mode-test #h"C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDC" #h"A9C8C3A4EABEDC80C64730DDD018CD88" #h"6D04E5E43C5B9CBE05FEB9606B6480FE") (:ecb-mode-test #h"1A1B1C1D1F20212224252627292A2B2C2E2F303133343536" #h"EE9B3DBBDB86180072130834D305999A" #h"DD1D6553B96BE526D9FEE0FBD7176866") (:ecb-mode-test #h"38393A3B3D3E3F40424344454748494A4C4D4E4F51525354" #h"A7FA8C3586B8EBDE7568EAD6F634A879" #h"0260CA7E3F979FD015B0DD4690E16D2A") (:ecb-mode-test #h"929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE" #h"37E0F4A87F127D45AC936FE7AD88C10A" #h"9893734DE10EDCC8A67C3B110B8B8CC6") (:ecb-mode-test #h"464748494B4C4D4E50515253555657585A5B5C5D5F606162" #h"3F77D8B5D92BAC148E4E46F697A535C5" #h"93B30B750516B2D18808D710C2EE84EF") (:ecb-mode-test #h"828384858788898A8C8D8E8F91929394969798999B9C9D9E" #h"D25EBB686C40F7E2C4DA1014936571CA" #h"16F65FA47BE3CB5E6DFE7C6C37016C0E") (:ecb-mode-test #h"A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBC" #h"4F1C769D1E5B0552C7ECA84DEA26A549" #h"F3847210D5391E2360608E5ACB560581") (:ecb-mode-test #h"BEBFC0C1C3C4C5C6C8C9CACBCDCECFD0D2D3D4D5D7D8D9DA" #h"8548E2F882D7584D0FAFC54372B6633A" #h"8754462CD223366D0753913E6AF2643D") (:ecb-mode-test #h"DCDDDEDFE1E2E3E4E6E7E8E9EBECEDEEF0F1F2F3F5F6F7F8" #h"87D7A336CB476F177CD2A51AF2A62CDF" #h"1EA20617468D1B806A1FD58145462017") (:ecb-mode-test #h"FAFBFCFDFE01000204050607090A0B0C0E0F101113141516" #h"03B1FEAC668C4E485C1065DFC22B44EE" #h"3B155D927355D737C6BE9DDA60136E2E") (:ecb-mode-test #h"18191A1B1D1E1F20222324252728292A2C2D2E2F31323334" #h"BDA15E66819FA72D653A6866AA287962" #h"26144F7B66DAA91B6333DBD3850502B3") (:ecb-mode-test #h"363738393B3C3D3E40414243454647484A4B4C4D4F505152" #h"4D0C7A0D2505B80BF8B62CEB12467F0A" #h"E4F9A4AB52CED8134C649BF319EBCC90") (:ecb-mode-test #h"54555657595A5B5C5E5F60616364656668696A6B6D6E6F70" #h"626D34C9429B37211330986466B94E5F" #h"B9DDD29AC6128A6CAB121E34A4C62B36") (:ecb-mode-test #h"727374757778797A7C7D7E7F81828384868788898B8C8D8E" #h"333C3E6BF00656B088A17E5FF0E7F60A" #h"6FCDDAD898F2CE4EFF51294F5EAAF5C9") (:ecb-mode-test #h"90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABAC" #h"687ED0CDC0D2A2BC8C466D05EF9D2891" #h"C9A6FE2BF4028080BEA6F7FC417BD7E3") (:ecb-mode-test #h"AEAFB0B1B3B4B5B6B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CA" #h"487830E78CC56C1693E64B2A6660C7B6" #h"6A2026846D8609D60F298A9C0673127F") (:ecb-mode-test #h"CCCDCECFD1D2D3D4D6D7D8D9DBDCDDDEE0E1E2E3E5E6E7E8" #h"7A48D6B7B52B29392AA2072A32B66160" #h"2CB25C005E26EFEA44336C4C97A4240B") (:ecb-mode-test #h"EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506" #h"907320E64C8C5314D10F8D7A11C8618D" #h"496967AB8680DDD73D09A0E4C7DCC8AA") (:ecb-mode-test #h"08090A0B0D0E0F10121314151718191A1C1D1E1F21222324" #h"B561F2CA2D6E65A4A98341F3ED9FF533" #h"D5AF94DE93487D1F3A8C577CB84A66A4") (:ecb-mode-test #h"262728292B2C2D2E30313233353637383A3B3C3D3F404142" #h"DF769380D212792D026F049E2E3E48EF" #h"84BDAC569CAE2828705F267CC8376E90") (:ecb-mode-test #h"44454647494A4B4C4E4F50515354555658595A5B5D5E5F60" #h"79F374BC445BDABF8FCCB8843D6054C6" #h"F7401DDA5AD5AB712B7EB5D10C6F99B6") (:ecb-mode-test #h"626364656768696A6C6D6E6F71727374767778797B7C7D7E" #h"4E02F1242FA56B05C68DBAE8FE44C9D6" #h"1C9D54318539EBD4C3B5B7E37BF119F0") (:ecb-mode-test #h"80818283858687888A8B8C8D8F90919294959697999A9B9C" #h"CF73C93CBFF57AC635A6F4AD2A4A1545" #h"ACA572D65FB2764CFFD4A6ECA090EA0D") (:ecb-mode-test #h"9E9FA0A1A3A4A5A6A8A9AAABADAEAFB0B2B3B4B5B7B8B9BA" #h"9923548E2875750725B886566784C625" #h"36D9C627B8C2A886A10CCB36EAE3DFBB") (:ecb-mode-test #h"BCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCED0D1D2D3D5D6D7D8" #h"4888336B723A022C9545320F836A4207" #h"010EDBF5981E143A81D646E597A4A568") (:ecb-mode-test #h"DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6" #h"F84D9A5561B0608B1160DEE000C41BA8" #h"8DB44D538DC20CC2F40F3067FD298E60") (:ecb-mode-test #h"F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314" #h"C23192A0418E30A19B45AE3E3625BF22" #h"930EB53BC71E6AC4B82972BDCD5AAFB3") (:ecb-mode-test #h"161718191B1C1D1E20212223252627282A2B2C2D2F303132" #h"B84E0690B28B0025381AD82A15E501A7" #h"6C42A81EDCBC9517CCD89C30C95597B4") (:ecb-mode-test #h"34353637393A3B3C3E3F40414344454648494A4B4D4E4F50" #h"ACEF5E5C108876C4F06269F865B8F0B0" #h"DA389847AD06DF19D76EE119C71E1DD3") (:ecb-mode-test #h"525354555758595A5C5D5E5F61626364666768696B6C6D6E" #h"0F1B3603E0F5DDEA4548246153A5E064" #h"E018FDAE13D3118F9A5D1A647A3F0462") (:ecb-mode-test #h"70717273757677787A7B7C7D7F80818284858687898A8B8C" #h"FBB63893450D42B58C6D88CD3C1809E3" #h"2AA65DB36264239D3846180FABDFAD20") (:ecb-mode-test #h"8E8F90919394959698999A9B9D9E9FA0A2A3A4A5A7A8A9AA" #h"4BEF736DF150259DAE0C91354E8A5F92" #h"1472163E9A4F780F1CEB44B07ECF4FDB") (:ecb-mode-test #h"ACADAEAFB1B2B3B4B6B7B8B9BBBCBDBEC0C1C2C3C5C6C7C8" #h"7D2D46242056EF13D3C3FC93C128F4C7" #h"C8273FDC8F3A9F72E91097614B62397C") (:ecb-mode-test #h"CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6" #h"E9C1BA2DF415657A256EDB33934680FD" #h"66C8427DCD733AAF7B3470CB7D976E3F") (:ecb-mode-test #h"E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304" #h"E23EE277B0AA0A1DFB81F7527C3514F1" #h"146131CB17F1424D4F8DA91E6F80C1D0") (:ecb-mode-test #h"060708090B0C0D0E10111213151617181A1B1C1D1F202122" #h"3E7445B0B63CAAF75E4A911E12106B4C" #h"2610D0AD83659081AE085266A88770DC") (:ecb-mode-test #h"24252627292A2B2C2E2F30313334353638393A3B3D3E3F40" #h"767774752023222544455A5BE6E1E0E3" #h"38A2B5A974B0575C5D733917FB0D4570") (:ecb-mode-test #h"424344454748494A4C4D4E4F51525354565758595B5C5D5E" #h"72737475717E7F7CE9E8EBEA696A6B6C" #h"E21D401EBC60DE20D6C486E4F39A588B") (:ecb-mode-test #h"60616263656667686A6B6C6D6F70717274757677797A7B7C" #h"DFDEDDDC25262728C9C8CFCEF1EEEFEC" #h"E51D5F88C670B079C0CA1F0C2C4405A2") (:ecb-mode-test #h"7E7F80818384858688898A8B8D8E8F90929394959798999A" #h"FFFE0100707776755F5E5D5C7675746B" #h"246A94788A642FB3D1B823C8762380C8") (:ecb-mode-test #h"9C9D9E9FA1A2A3A4A6A7A8A9ABACADAEB0B1B2B3B5B6B7B8" #h"E0E1E2E3424140479F9E9190292E2F2C" #h"B80C391C5C41A4C3B30C68E0E3D7550F") (:ecb-mode-test #h"BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6" #h"2120272690EFEEED3B3A39384E4D4C4B" #h"B77C4754FC64EB9A1154A9AF0BB1F21C") (:ecb-mode-test #h"D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4" #h"ECEDEEEF5350516EA1A0A7A6A3ACADAE" #h"FB554DE520D159A06BF219FC7F34A02F") (:ecb-mode-test #h"F6F7F8F9FBFCFDFE00010203050607080A0B0C0D0F101112" #h"32333C3D25222320E9E8EBEACECDCCC3" #h"A89FBA152D76B4927BEED160DDB76C57") (:ecb-mode-test #h"14151617191A1B1C1E1F20212324252628292A2B2D2E2F30" #h"40414243626160678A8BB4B511161714" #h"5676EAB4A98D2E8473B3F3D46424247C") (:ecb-mode-test #h"323334353738393A3C3D3E3F41424344464748494B4C4D4E" #h"94959293F5FAFBF81F1E1D1C7C7F7E79" #h"4E8F068BD7EDE52A639036EC86C33568") (:ecb-mode-test #h"50515253555657585A5B5C5D5F60616264656667696A6B6C" #h"BEBFBCBD191A1B14CFCEC9C8546B6A69" #h"F0193C4D7AFF1791EE4C07EB4A1824FC") (:ecb-mode-test #h"6E6F70717374757678797A7B7D7E7F80828384858788898A" #h"2C2D3233898E8F8CBBBAB9B8333031CE" #h"AC8686EECA9BA761AFE82D67B928C33F") (:ecb-mode-test #h"8C8D8E8F91929394969798999B9C9D9EA0A1A2A3A5A6A7A8" #h"84858687BFBCBDBA37363938FDFAFBF8" #h"5FAF8573E33B145B6A369CD3606AB2C9") (:ecb-mode-test #h"AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6" #h"828384857669686B909192930B08090E" #h"31587E9944AB1C16B844ECAD0DF2E7DA") (:ecb-mode-test #h"C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4" #h"BEBFBCBD9695948B707176779E919093" #h"D017FECD91148ABA37F6F3068AA67D8A") (:ecb-mode-test #h"E6E7E8E9EBECEDEEF0F1F2F3F5F6F7F8FAFBFCFDFE010002" #h"8B8A85846067666521202322D0D3D2DD" #h"788EF2F021A73CBA2794B616078A8500") (:ecb-mode-test #h"04050607090A0B0C0E0F10111314151618191A1B1D1E1F20" #h"76777475F1F2F3F4F8F9E6E777707172" #h"5D1EF20DCED6BCBC12131AC7C54788AA") (:ecb-mode-test #h"222324252728292A2C2D2E2F31323334363738393B3C3D3E" #h"A4A5A2A34F404142B4B5B6B727242522" #h"B3C8CF961FAF9EA05FDDE6D1E4D8F663") (:ecb-mode-test #h"40414243454647484A4B4C4D4F50515254555657595A5B5C" #h"94959697E1E2E3EC16171011839C9D9E" #h"143075C70605861C7FAC6526199E459F") (:ecb-mode-test #h"5E5F60616364656668696A6B6D6E6F70727374757778797A" #h"03023D3C06010003DEDFDCDDFFFCFDE2" #h"A5AE12EADE9A87268D898BFC8FC0252A") (:ecb-mode-test #h"7C7D7E7F81828384868788898B8C8D8E9091929395969798" #h"10111213F1F2F3F4CECFC0C1DBDCDDDE" #h"0924F7CF2E877A4819F5244A360DCEA9") (:ecb-mode-test #h"9A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6" #h"67666160724D4C4F1D1C1F1E73707176" #h"3D9E9635AFCC3E291CC7AB3F27D1C99A") (:ecb-mode-test #h"B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4" #h"E6E7E4E5A8ABAAD584858283909F9E9D" #h"9D80FEEBF87510E2B8FB98BB54FD788C") (:ecb-mode-test #h"D6D7D8D9DBDCDDDEE0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2" #h"71707F7E565150537D7C7F7E6162636C" #h"5F9D1A082A1A37985F174002ECA01309") (:ecb-mode-test #h"F4F5F6F7F9FAFBFCFEFE01010304050608090A0B0D0E0F10" #h"64656667212223245555AAAA03040506" #h"A390EBB1D1403930184A44B4876646E4") (:ecb-mode-test #h"121314151718191A1C1D1E1F21222324262728292B2C2D2E" #h"9E9F9899ABA4A5A6CFCECDCC2B28292E" #h"700FE918981C3195BB6C4BCB46B74E29") (:ecb-mode-test #h"30313233353637383A3B3C3D3F40414244454647494A4B4C" #h"C7C6C5C4D1D2D3DC626364653A454447" #h"907984406F7BF2D17FB1EB15B673D747") (:ecb-mode-test #h"4E4F50515354555658595A5B5D5E5F60626364656768696A" #h"F6F7E8E9E0E7E6E51D1C1F1E5B585966" #h"C32A956DCFC875C2AC7C7CC8B8CC26E1") (:ecb-mode-test #h"6C6D6E6F71727374767778797B7C7D7E8081828385868788" #h"BCBDBEBF5D5E5F5868696667F4F3F2F1" #h"02646E2EBFA9B820CF8424E9B9B6EB51") (:ecb-mode-test #h"8A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6" #h"40414647B0AFAEAD9B9A99989B98999E" #h"621FDA3A5BBD54C6D3C685816BD4EAD8") (:ecb-mode-test #h"A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4" #h"69686B6A0201001F0F0E0908B4BBBAB9" #h"D4E216040426DFAF18B152469BC5AC2F") (:ecb-mode-test #h"C6C7C8C9CBCCCDCED0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2" #h"C7C6C9C8D8DFDEDD5A5B5859BEBDBCB3" #h"9D0635B9D33B6CDBD71F5D246EA17CC8") (:ecb-mode-test #h"E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6F8F9FAFBFDFEFE00" #h"DEDFDCDD787B7A7DFFFEE1E0B2B5B4B7" #h"10ABAD1BD9BAE5448808765583A2CC1A") (:ecb-mode-test #h"020304050708090A0C0D0E0F11121314161718191B1C1D1E" #h"4D4C4B4A606F6E6DD0D1D2D3FBF8F9FE" #h"6891889E16544E355FF65A793C39C9A8") (:ecb-mode-test #h"20212223252627282A2B2C2D2F30313234353637393A3B3C" #h"B7B6B5B4D7D4D5DAE5E4E3E2E1FEFFFC" #h"CC735582E68072C163CD9DDF46B91279") (:ecb-mode-test #h"3E3F40414344454648494A4B4D4E4F50525354555758595A" #h"CECFB0B1F7F0F1F2AEAFACAD3E3D3C23" #h"C5C68B9AEEB7F878DF578EFA562F9574") (:ecb-mode-test #h"5C5D5E5F61626364666768696B6C6D6E7071727375767778" #h"CACBC8C9CDCECFC812131C1D494E4F4C" #h"5F4764395A667A47D73452955D0D2CE8") (:ecb-mode-test #h"7A7B7C7D7F80818284858687898A8B8C8E8F909193949596" #h"9D9C9B9AD22D2C2FB1B0B3B20C0F0E09" #h"701448331F66106CEFDDF1EB8267C357") (:ecb-mode-test #h"98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4" #h"7A7B787964676659959493924F404142" #h"CB3EE56D2E14B4E1941666F13379D657") (:ecb-mode-test #h"B6B7B8B9BBBCBDBEC0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2" #h"AAABA4A5CEC9C8CB1F1E1D1CABA8A9A6" #h"9FE16EFD18AB6E1981191851FEDB0764") (:ecb-mode-test #h"D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6E8E9EAEBEDEEEFF0" #h"93929190282B2A2DC4C5FAFB92959497" #h"3DC9BA24E1B223589B147ADCEB4C8E48") (:ecb-mode-test #h"F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E" #h"EFEEE9E8DED1D0D339383B3A888B8A8D" #h"1C333032682E7D4DE5E5AFC05C3E483C") (:ecb-mode-test #h"10111213151617181A1B1C1D1F20212224252627292A2B2C" #h"7F7E7D7CA2A1A0AF78797E7F112E2F2C" #h"D593CC99A95AFEF7E92038E05A59D00A") (:ecb-mode-test #h"2E2F30313334353638393A3B3D3E3F40424344454748494A" #h"84859A9B2B2C2D2E868784852625245B" #h"51E7F96F53B4353923452C222134E1EC") (:ecb-mode-test #h"4C4D4E4F51525354565758595B5C5D5E6061626365666768" #h"B0B1B2B3070405026869666710171615" #h"4075B357A1A2B473400C3B25F32F81A4") (:ecb-mode-test #h"6A6B6C6D6F70717274757677797A7B7C7E7F808183848586" #h"ACADAAABBDA2A3A00D0C0F0E595A5B5C" #h"302E341A3EBCD74F0D55F61714570284") (:ecb-mode-test #h"88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4" #h"121310115655544B5253545569666764" #h"57ABDD8231280DA01C5042B78CF76522") (:ecb-mode-test #h"A6A7A8A9ABACADAEB0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2" #h"DEDFD0D166616063EAEBE8E94142434C" #h"17F9EA7EEA17AC1ADF0E190FEF799E92") (:ecb-mode-test #h"C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6D8D9DADBDDDEDFE0" #h"DBDAD9D81417161166677879E0E7E6E5" #h"2E1BDD563DD87EE5C338DD6D098D0A7A") (:ecb-mode-test #h"E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE" #h"6A6B6C6DE0EFEEED2B2A2928C0C3C2C5" #h"EB869996E6F8BFB2BFDD9E0C4504DBB2") (:ecb-mode-test #h"00010203050607080A0B0C0D0F10111214151617191A1B1C" #h"B1B0B3B21714151A1A1B1C1D5649484B" #h"C2E01549E9DECF317468B3E018C61BA8") (:ecb-mode-test #h"1E1F20212324252628292A2B2D2E2F30323334353738393A" #h"39380706A3A4A5A6C4C5C6C77271706F" #h"8DA875D033C01DD463B244A1770F4A22") (:ecb-mode-test #h"3C3D3E3F41424344464748494B4C4D4E5051525355565758" #h"5C5D5E5F1013121539383736E2E5E4E7" #h"8BA0DCF3A186844F026D022F8839D696") (:ecb-mode-test #h"5A5B5C5D5F60616264656667696A6B6C6E6F707173747576" #h"43424544EAD5D4D72E2F2C2D64676661" #h"E9691FF9A6CC6970E51670A0FD5B88C1") (:ecb-mode-test #h"78797A7B7D7E7F80828384858788898A8C8D8E8F91929394" #h"55545756989B9A65F8F9FEFF18171615" #h"F2BAEC06FAEED30F88EE63BA081A6E5B") (:ecb-mode-test #h"969798999B9C9D9EA0A1A2A3A5A6A7A8AAABACADAFB0B1B2" #h"05040B0A525554573C3D3E3F4A494847" #h"9C39D4C459AE5753394D6094ADC21E78") (:ecb-mode-test #h"B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6C8C9CACBCDCECFD0" #h"14151617595A5B5C8584FBFA8E89888B" #h"6345B532A11904502EA43BA99C6BD2B2") (:ecb-mode-test #h"D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE" #h"7C7D7A7BFDF2F3F029282B2A51525354" #h"5FFAE3061A95172E4070CEDCE1E428C8") (:ecb-mode-test #h"F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C" #h"38393A3B1E1D1C1341404746C23D3C3E" #h"0A4566BE4CDF9ADCE5DEC865B5AB34CD") (:ecb-mode-test #h"0E0F10111314151618191A1B1D1E1F20222324252728292A" #h"8D8C939240474645818083827C7F7E41" #h"CA17FCCE79B7404F2559B22928F126FB") (:ecb-mode-test #h"2C2D2E2F31323334363738393B3C3D3E4041424345464748" #h"3B3A39381A19181F32333C3D45424340" #h"97CA39B849ED73A6470A97C821D82F58") (:ecb-mode-test #h"4A4B4C4D4F50515254555657595A5B5C5E5F606163646566" #h"F0F1F6F738272625828380817F7C7D7A" #h"8198CB06BC684C6D3E9B7989428DCF7A") (:ecb-mode-test #h"68696A6B6D6E6F70727374757778797A7C7D7E7F81828384" #h"89888B8A0407061966676061141B1A19" #h"F53C464C705EE0F28D9A4C59374928BD") (:ecb-mode-test #h"868788898B8C8D8E90919293959697989A9B9C9D9FA0A1A2" #h"D3D2DDDCAAADACAF9C9D9E9FE8EBEAE5" #h"9ADB3D4CCA559BB98C3E2ED73DBF1154") (:ecb-mode-test #h"00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526" #h"834EADFCCAC7E1B30664B1ABA44815AB" #h"1946DABF6A03A2A2C3D0B05080AED6FC") (:ecb-mode-test #h"28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E" #h"D9DC4DBA3021B05D67C0518F72B62BF1" #h"5ED301D747D3CC715445EBDEC62F2FB4") (:ecb-mode-test #h"50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576" #h"A291D86301A4A739F7392173AA3C604C" #h"6585C8F43D13A6BEAB6419FC5935B9D0") (:ecb-mode-test #h"78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E" #h"4264B2696498DE4DF79788A9F83E9390" #h"2A5B56A596680FCC0E05F5E0F151ECAE") (:ecb-mode-test #h"A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6" #h"EE9932B3721804D5A83EF5949245B6F6" #h"F5D6FF414FD2C6181494D20C37F2B8C4") (:ecb-mode-test #h"C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE" #h"E6248F55C5FDCBCA9CBBB01C88A2EA77" #h"85399C01F59FFFB5204F19F8482F00B8") (:ecb-mode-test #h"F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516" #h"B8358E41B9DFF65FD461D55A99266247" #h"92097B4C88A041DDF98144BC8D22E8E7") (:ecb-mode-test #h"18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E" #h"F0E2D72260AF58E21E015AB3A4C0D906" #h"89BD5B73B356AB412AEF9F76CEA2D65C") (:ecb-mode-test #h"40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566" #h"475B8B823CE8893DB3C44A9F2A379FF7" #h"2536969093C55FF9454692F2FAC2F530") (:ecb-mode-test #h"68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E" #h"688F5281945812862F5F3076CF80412F" #h"07FC76A872843F3F6E0081EE9396D637") (:ecb-mode-test #h"90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6" #h"08D1D2BC750AF553365D35E75AFACEAA" #h"E38BA8EC2AA741358DCC93E8F141C491") (:ecb-mode-test #h"B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE" #h"8707121F47CC3EFCECA5F9A8474950A1" #h"D028EE23E4A89075D0B03E868D7D3A42") (:ecb-mode-test #h"E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506" #h"E51AA0B135DBA566939C3B6359A980C5" #h"8CD9423DFC459E547155C5D1D522E540") (:ecb-mode-test #h"08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E" #h"069A007FC76A459F98BAF917FEDF9521" #h"080E9517EB1677719ACF728086040AE3") (:ecb-mode-test #h"30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556" #h"726165C1723FBCF6C026D7D00B091027" #h"7C1700211A3991FC0ECDED0AB3E576B0") (:ecb-mode-test #h"58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E" #h"D7C544DE91D55CFCDE1F84CA382200CE" #h"DABCBCC855839251DB51E224FBE87435") (:ecb-mode-test #h"80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6" #h"FED3C9A161B9B5B2BD611B41DC9DA357" #h"68D56FAD0406947A4DD27A7448C10F1D") (:ecb-mode-test #h"A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE" #h"4F634CDC6551043409F30B635832CF82" #h"DA9A11479844D1FFEE24BBF3719A9925") (:ecb-mode-test #h"D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6" #h"109CE98DB0DFB36734D9F3394711B4E6" #h"5E4BA572F8D23E738DA9B05BA24B8D81") (:ecb-mode-test #h"70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596" #h"4EA6DFABA2D8A02FFDFFA89835987242" #h"A115A2065D667E3F0B883837A6E903F8") (:ecb-mode-test #h"98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE" #h"5AE094F54AF58E6E3CDBF976DAC6D9EF" #h"3E9E90DC33EAC2437D86AD30B137E66E") (:ecb-mode-test #h"C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6" #h"764D8E8E0F29926DBE5122E66354FDBE" #h"01CE82D8FBCDAE824CB3C48E495C3692") (:ecb-mode-test #h"E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E" #h"3F0418F888CDF29A982BF6B75410D6A9" #h"0C9CFF163CE936FAAF083CFD3DEA3117") (:ecb-mode-test #h"10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536" #h"E4A3E7CB12CDD56AA4A75197A9530220" #h"5131BA9BD48F2BBA85560680DF504B52") (:ecb-mode-test #h"38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E" #h"211677684AAC1EC1A160F44C4EBF3F26" #h"9DC503BBF09823AEC8A977A5AD26CCB2") (:ecb-mode-test #h"60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586" #h"D21E439FF749AC8F18D6D4B105E03895" #h"9A6DB0C0862E506A9E397225884041D7") (:ecb-mode-test #h"88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE" #h"D9F6FF44646C4725BD4C0103FF5552A7" #h"430BF9570804185E1AB6365FC6A6860C") (:ecb-mode-test #h"B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6" #h"0B1256C2A00B976250CFC5B0C37ED382" #h"3525EBC02F4886E6A5A3762813E8CE8A") (:ecb-mode-test #h"D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE" #h"B056447FFC6DC4523A36CC2E972A3A79" #h"07FA265C763779CCE224C7BAD671027B") (:ecb-mode-test #h"00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526" #h"5E25CA78F0DE55802524D38DA3FE4456" #h"E8B72B4E8BE243438C9FFF1F0E205872") (:ecb-mode-test #h"28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E" #h"A5BCF4728FA5EAAD8567C0DC24675F83" #h"109D4F999A0E11ACE1F05E6B22CBCB50") (:ecb-mode-test #h"50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576" #h"814E59F97ED84646B78B2CA022E9CA43" #h"45A5E8D4C3ED58403FF08D68A0CC4029") (:ecb-mode-test #h"78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E" #h"15478BEEC58F4775C7A7F5D4395514D7" #h"196865964DB3D417B6BD4D586BCB7634") (:ecb-mode-test #h"A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6" #h"253548FFCA461C67C8CBC78CD59F4756" #h"60436AD45AC7D30D99195F815D98D2AE") (:ecb-mode-test #h"C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE" #h"FD7AD8D73B9B0F8CC41600640F503D65" #h"BB07A23F0B61014B197620C185E2CD75") (:ecb-mode-test #h"F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516" #h"06199DE52C6CBF8AF954CD65830BCD56" #h"5BC0B2850129C854423AFF0751FE343B") (:ecb-mode-test #h"18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E" #h"F17C4FFE48E44C61BD891E257E725794" #h"7541A78F96738E6417D2A24BD2BECA40") (:ecb-mode-test #h"40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566" #h"9A5B4A402A3E8A59BE6BF5CD8154F029" #h"B0A303054412882E464591F1546C5B9E") (:ecb-mode-test #h"68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E" #h"79BD40B91A7E07DC939D441782AE6B17" #h"778C06D8A355EEEE214FCEA14B4E0EEF") (:ecb-mode-test #h"90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6" #h"D8CEAAF8976E5FBE1012D8C84F323799" #h"09614206D15CBACE63227D06DB6BEEBB") (:ecb-mode-test #h"B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE" #h"3316E2751E2E388B083DA23DD6AC3FBE" #h"41B97FB20E427A9FDBBB358D9262255D") (:ecb-mode-test #h"E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506" #h"8B7CFBE37DE7DCA793521819242C5816" #h"C1940F703D845F957652C2D64ABD7ADF") (:ecb-mode-test #h"08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E" #h"F23F033C0EEBF8EC55752662FD58CE68" #h"D2D44FCDAE5332343366DB297EFCF21B") (:ecb-mode-test #h"30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556" #h"59EB34F6C8BDBACC5FC6AD73A59A1301" #h"EA8196B79DBE167B6AA9896E287EED2B") (:ecb-mode-test #h"58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E" #h"DCDE8B6BD5CF7CC22D9505E3CE81261A" #h"D6B0B0C4BA6C7DBE5ED467A1E3F06C2D") (:ecb-mode-test #h"80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6" #h"E33CF7E524FED781E7042FF9F4B35DC7" #h"EC51EB295250C22C2FB01816FB72BCAE") (:ecb-mode-test #h"A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE" #h"27963C8FACDF73062867D164DF6D064C" #h"ADED6630A07CE9C7408A155D3BD0D36F") (:ecb-mode-test #h"D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6" #h"77B1CE386B551B995F2F2A1DA994EEF8" #h"697C9245B9937F32F5D1C82319F0363A") (:ecb-mode-test #h"F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314161718191B1C1D1E" #h"F083388B013679EFCF0BB9B15D52AE5C" #h"AAD5AD50C6262AAEC30541A1B7B5B19C") (:ecb-mode-test #h"20212223252627282A2B2C2D2F30313234353637393A3B3C3E3F404143444546" #h"C5009E0DAB55DB0ABDB636F2600290C8" #h"7D34B893855341EC625BD6875AC18C0D") (:ecb-mode-test #h"48494A4B4D4E4F50525354555758595A5C5D5E5F61626364666768696B6C6D6E" #h"7804881E26CD532D8514D3683F00F1B9" #h"7EF05105440F83862F5D780E88F02B41") (:ecb-mode-test #h"70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596" #h"46CDDCD73D1EB53E675CA012870A92A3" #h"C377C06403382061AF2C9C93A8E70DF6") (:ecb-mode-test #h"98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE" #h"A9FB44062BB07FE130A8E8299EACB1AB" #h"1DBDB3FFDC052DACC83318853ABC6DE5") (:ecb-mode-test #h"C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6" #h"2B6FF8D7A5CC3A28A22D5A6F221AF26B" #h"69A6EAB00432517D0BF483C91C0963C7") (:ecb-mode-test #h"E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E" #h"1A9527C29B8ADD4B0E3E656DBB2AF8B4" #h"0797F41DC217C80446E1D514BD6AB197") (:ecb-mode-test #h"10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536" #h"7F99CF2C75244DF015EB4B0C1050AEAE" #h"9DFD76575902A637C01343C58E011A03") (:ecb-mode-test #h"38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E" #h"E84FF85B0D9454071909C1381646C4ED" #h"ACF4328AE78F34B9FA9B459747CC2658") (:ecb-mode-test #h"60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586" #h"89AFD40F99521280D5399B12404F6DB4" #h"B0479AEA12BAC4FE2384CF98995150C6") (:ecb-mode-test #h"88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE" #h"A09EF32DBC5119A35AB7FA38656F0329" #h"9DD52789EFE3FFB99F33B3DA5030109A") (:ecb-mode-test #h"B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6" #h"61773457F068C376C7829B93E696E716" #h"ABBB755E4621EF8F1214C19F649FB9FD") (:ecb-mode-test #h"D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE" #h"A34F0CAE726CCE41DD498747D891B967" #h"DA27FB8174357BCE2BED0E7354F380F9") (:ecb-mode-test #h"00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526" #h"856F59496C7388EE2D2B1A27B7697847" #h"C59A0663F0993838F6E5856593BDC5EF") (:ecb-mode-test #h"28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E" #h"CB090C593EF7720BD95908FB93B49DF4" #h"ED60B264B5213E831607A99C0CE5E57E") (:ecb-mode-test #h"50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576" #h"A0AC75CD2F1923D460FC4D457AD95BAF" #h"E50548746846F3EB77B8C520640884ED") (:ecb-mode-test #h"78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E" #h"2A2B282974777689E8E9EEEF525D5C5F" #h"28282CC7D21D6A2923641E52D188EF0C") (:ecb-mode-test #h"A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6" #h"909192939390919E0F0E09089788898A" #h"0DFA5B02ABB18E5A815305216D6D4F8E") (:ecb-mode-test #h"C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE" #h"777675748D8E8F907170777649464744" #h"7359635C0EECEFE31D673395FB46FB99") (:ecb-mode-test #h"F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516" #h"717073720605040B2D2C2B2A05FAFBF9" #h"73C679F7D5AEF2745C9737BB4C47FB36") (:ecb-mode-test #h"18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E" #h"64656667FEFDFCC31B1A1D1CA5AAABA8" #h"B192BD472A4D2EAFB786E97458967626") (:ecb-mode-test #h"40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566" #h"DBDAD9D86A696867B5B4B3B2C8D7D6D5" #h"0EC327F6C8A2B147598CA3FDE61DC6A4") (:ecb-mode-test #h"68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E" #h"5C5D5E5FE3E0E1FE31303736333C3D3E" #h"FC418EB3C41B859B38D4B6F646629729") (:ecb-mode-test #h"90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6" #h"545556574B48494673727574546B6A69" #h"30249E5AC282B1C981EA64B609F3A154") (:ecb-mode-test #h"B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE" #h"ECEDEEEFC6C5C4BB56575051F5FAFBF8" #h"5E6E08646D12150776BB43C2D78A9703") (:ecb-mode-test #h"E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506" #h"464744452724252AC9C8CFCED2CDCCCF" #h"FAEB3D5DE652CD3447DCEB343F30394A") (:ecb-mode-test #h"08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E" #h"E6E7E4E54142435C878681801C131211" #h"A8E88706823F6993EF80D05C1C7B2CF0") (:ecb-mode-test #h"30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556" #h"72737071CFCCCDC2F9F8FFFE710E0F0C" #h"8CED86677E6E00A1A1B15968F2D3CCE6") (:ecb-mode-test #h"58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E" #h"505152537370714EC3C2C5C4010E0F0C" #h"9FC7C23858BE03BDEBB84E90DB6786A9") (:ecb-mode-test #h"80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6" #h"A8A9AAAB5C5F5E51AEAFA8A93D222320" #h"B4FBD65B33F70D8CF7F1111AC4649C36") (:ecb-mode-test #h"A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE" #h"DEDFDCDDF6F5F4EB10111617FEF1F0F3" #h"C5C32D5ED03C4B53CC8C1BD0EF0DBBF6") (:ecb-mode-test #h"D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6" #h"BDBCBFBE5E5D5C530B0A0D0CFAC5C4C7" #h"D1A7F03B773E5C212464B63709C6A891") (:ecb-mode-test #h"F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314161718191B1C1D1E" #h"8A8B8889050606F8F4F5F2F3636C6D6E" #h"6B7161D8745947AC6950438EA138D028") (:ecb-mode-test #h"20212223252627282A2B2C2D2F30313234353637393A3B3C3E3F404143444546" #h"A6A7A4A54D4E4F40B2B3B4B539262724" #h"FD47A9F7E366EE7A09BC508B00460661") (:ecb-mode-test #h"48494A4B4D4E4F50525354555758595A5C5D5E5F61626364666768696B6C6D6E" #h"9C9D9E9FE9EAEBF40E0F08099B949596" #h"00D40B003DC3A0D9310B659B98C7E416") (:ecb-mode-test #h"70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596" #h"2D2C2F2E1013121DCCCDCACBED121310" #h"EEA4C79DCC8E2BDA691F20AC48BE0717") (:ecb-mode-test #h"98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE" #h"F4F5F6F7EDEEEFD0EAEBECEDF7F8F9FA" #h"E78F43B11C204403E5751F89D05A2509") (:ecb-mode-test #h"C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6" #h"3D3C3F3E282B2A2573727574150A0B08" #h"D0F0E3D1F1244BB979931E38DD1786EF") (:ecb-mode-test #h"E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E" #h"B6B7B4B5F8FBFAE5B4B5B2B3A0AFAEAD" #h"042E639DC4E1E4DDE7B75B749EA6F765") (:ecb-mode-test #h"10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536" #h"B7B6B5B4989B9A95878681809BA4A5A6" #h"BC032FDD0EFE29503A980A7D07AB46A8") (:ecb-mode-test #h"38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E" #h"A8A9AAABE5E6E798E9E8EFEE4748494A" #h"0C93AC949C0DA6446EFFB86183B6C910") (:ecb-mode-test #h"60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586" #h"ECEDEEEFD9DADBD4B9B8BFBE657A7B78" #h"E0D343E14DA75C917B4A5CEC4810D7C2") (:ecb-mode-test #h"88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE" #h"7F7E7D7C696A6B74CACBCCCD929D9C9F" #h"0EAFB821748408279B937B626792E619") (:ecb-mode-test #h"B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6" #h"08090A0B0605040BFFFEF9F8B9C6C7C4" #h"FA1AC6E02D23B106A1FEF18B274A553F") (:ecb-mode-test #h"D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE" #h"08090A0BF1F2F3CCFCFDFAFB68676665" #h"0DADFE019CD12368075507DF33C1A1E9") (:ecb-mode-test #h"00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526" #h"CACBC8C93A393837050403020D121310" #h"3A0879B414465D9FFBAF86B33A63A1B9") (:ecb-mode-test #h"28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E" #h"E9E8EBEA8281809F8F8E8988343B3A39" #h"62199FADC76D0BE1805D3BA0B7D914BF") (:ecb-mode-test #h"50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576" #h"515053524645444BD0D1D6D7340B0A09" #h"1B06D6C5D333E742730130CF78E719B4") (:ecb-mode-test #h"78797A7B7D7E7F80828384858788898A8C8D8E8F91929394969798999B9C9D9E" #h"42434041ECEFEE1193929594C6C9C8CB" #h"F1F848824C32E9DCDCBF21580F069329") (:ecb-mode-test #h"A0A1A2A3A5A6A7A8AAABACADAFB0B1B2B4B5B6B7B9BABBBCBEBFC0C1C3C4C5C6" #h"EFEEEDECC2C1C0CF76777071455A5B58" #h"1A09050CBD684F784D8E965E0782F28A") (:ecb-mode-test #h"C8C9CACBCDCECFD0D2D3D4D5D7D8D9DADCDDDEDFE1E2E3E4E6E7E8E9EBECEDEE" #h"5F5E5D5C3F3C3D221D1C1B1A19161714" #h"79C2969E7DED2BA7D088F3F320692360") (:ecb-mode-test #h"F0F1F2F3F5F6F7F8FAFBFCFDFE01000204050607090A0B0C0E0F101113141516" #h"000102034142434C1C1D1A1B8D727371" #h"091A658A2F7444C16ACCB669450C7B63") (:ecb-mode-test #h"18191A1B1D1E1F20222324252728292A2C2D2E2F31323334363738393B3C3D3E" #h"8E8F8C8DB1B2B38C56575051050A0B08" #h"97C1E3A72CCA65FA977D5ED0E8A7BBFC") (:ecb-mode-test #h"40414243454647484A4B4C4D4F50515254555657595A5B5C5E5F606163646566" #h"A7A6A5A4E8EBEAE57F7E7978CAD5D4D7" #h"70C430C6DB9A17828937305A2DF91A2A") (:ecb-mode-test #h"68696A6B6D6E6F70727374757778797A7C7D7E7F81828384868788898B8C8D8E" #h"8A8B888994979689454443429F909192" #h"629553457FBE2479098571C7C903FDE8") (:ecb-mode-test #h"90919293959697989A9B9C9D9FA0A1A2A4A5A6A7A9AAABACAEAFB0B1B3B4B5B6" #h"8C8D8E8FE0E3E2ED45444342F1CECFCC" #h"A25B25A61F612669E7D91265C7D476BA") (:ecb-mode-test #h"B8B9BABBBDBEBFC0C2C3C4C5C7C8C9CACCCDCECFD1D2D3D4D6D7D8D9DBDCDDDE" #h"FFFEFDFC4C4F4E31D8D9DEDFB6B9B8BB" #h"EB7E4E49B8AE0F024570DDA293254FED") (:ecb-mode-test #h"E0E1E2E3E5E6E7E8EAEBECEDEFF0F1F2F4F5F6F7F9FAFBFCFEFE010103040506" #h"FDFCFFFECCCFCEC12F2E29286679787B" #h"38FE15D61CCA84516E924ADCE5014F67") (:ecb-mode-test #h"08090A0B0D0E0F10121314151718191A1C1D1E1F21222324262728292B2C2D2E" #h"67666564BAB9B8A77071767719161714" #h"3AD208492249108C9F3EBEB167AD0583") (:ecb-mode-test #h"30313233353637383A3B3C3D3F40414244454647494A4B4C4E4F505153545556" #h"9A9B98992D2E2F2084858283245B5A59" #h"299BA9F9BF5AB05C3580FC26EDD1ED12") (:ecb-mode-test #h"58595A5B5D5E5F60626364656768696A6C6D6E6F71727374767778797B7C7D7E" #h"A4A5A6A70B0809365C5D5A5B2C232221" #h"19DC705B857A60FB07717B2EA5717781") (:ecb-mode-test #h"80818283858687888A8B8C8D8F90919294959697999A9B9C9E9FA0A1A3A4A5A6" #h"464744455754555AF3F2F5F4AFB0B1B2" #h"FFC8AEB885B5EFCAD06B6DBEBF92E76B") (:ecb-mode-test #h"A8A9AAABADAEAFB0B2B3B4B5B7B8B9BABCBDBEBFC1C2C3C4C6C7C8C9CBCCCDCE" #h"323330317675746B7273747549464744" #h"F58900C5E0B385253FF2546250A0142B") (:ecb-mode-test #h"D0D1D2D3D5D6D7D8DADBDCDDDFE0E1E2E4E5E6E7E9EAEBECEEEFF0F1F3F4F5F6" #h"A8A9AAAB181B1A15808186872B141516" #h"2EE67B56280BC462429CEE6E3370CBC1") (:ecb-mode-test #h"F8F9FAFBFDFEFE00020304050708090A0C0D0E0F11121314161718191B1C1D1E" #h"E7E6E5E4202323DDAAABACAD343B3A39" #h"20DB650A9C8E9A84AB4D25F7EDC8F03F") (:ecb-mode-test #h"20212223252627282A2B2C2D2F30313234353637393A3B3C3E3F404143444546" #h"A8A9AAAB2221202FEDECEBEA1E010003" #h"3C36DA169525CF818843805F25B78AE5") (:ecb-mode-test #h"48494A4B4D4E4F50525354555758595A5C5D5E5F61626364666768696B6C6D6E" #h"F9F8FBFA5F5C5D42424344450E010003" #h"9A781D960DB9E45E37779042FEA51922") (:ecb-mode-test #h"70717273757677787A7B7C7D7F80818284858687898A8B8C8E8F909193949596" #h"57565554F5F6F7F89697909120DFDEDD" #h"6560395EC269C672A3C288226EFDBA77") (:ecb-mode-test #h"98999A9B9D9E9FA0A2A3A4A5A7A8A9AAACADAEAFB1B2B3B4B6B7B8B9BBBCBDBE" #h"F8F9FAFBCCCFCEF1DDDCDBDA0E010003" #h"8C772B7A189AC544453D5916EBB27B9A") (:ecb-mode-test #h"C0C1C2C3C5C6C7C8CACBCCCDCFD0D1D2D4D5D6D7D9DADBDCDEDFE0E1E3E4E5E6" #h"D9D8DBDA7073727D80818687C2DDDCDF" #h"77CA5468CC48E843D05F78EED9D6578F") (:ecb-mode-test #h"E8E9EAEBEDEEEFF0F2F3F4F5F7F8F9FAFCFDFEFF01020304060708090B0C0D0E" #h"C5C4C7C6080B0A1588898E8F68676665" #h"72CDCC71DC82C60D4429C9E2D8195BAA") (:ecb-mode-test #h"10111213151617181A1B1C1D1F20212224252627292A2B2C2E2F303133343536" #h"83828180DCDFDED186878081F0CFCECD" #h"8080D68CE60E94B40B5B8B69EEB35AFA") (:ecb-mode-test #h"38393A3B3D3E3F40424344454748494A4C4D4E4F51525354565758595B5C5D5E" #h"98999A9BDDDEDFA079787F7E0A050407" #h"44222D3CDE299C04369D58AC0EBA1E8E") (:ecb-mode-test #h"60616263656667686A6B6C6D6F70717274757677797A7B7C7E7F808183848586" #h"CECFCCCD4F4C4D429F9E9998DFC0C1C2" #h"9B8721B0A8DFC691C5BC5885DBFCB27A") (:ecb-mode-test #h"88898A8B8D8E8F90929394959798999A9C9D9E9FA1A2A3A4A6A7A8A9ABACADAE" #h"404142436665647B29282F2EABA4A5A6" #h"0DC015CE9A3A3414B5E62EC643384183") (:ecb-mode-test #h"B0B1B2B3B5B6B7B8BABBBCBDBFC0C1C2C4C5C6C7C9CACBCCCECFD0D1D3D4D5D6" #h"33323130E6E5E4EB23222524DEA1A0A3" #h"705715448A8DA412025CE38345C2A148") (:ecb-mode-test #h"D8D9DADBDDDEDFE0E2E3E4E5E7E8E9EAECEDEEEFF1F2F3F4F6F7F8F9FBFCFDFE" #h"CFCECDCCF6F5F4CBE6E7E0E199969794" #h"C32B5B0B6FBAE165266C569F4B6ECF0B") (:ecb-mode-test #h"00010203050607080A0B0C0D0F10111214151617191A1B1C1E1F202123242526" #h"BABBB8B97271707FDCDDDADB29363734" #h"4DCA6C75192A01DDCA9476AF2A521E87") (:ecb-mode-test #h"28292A2B2D2E2F30323334353738393A3C3D3E3F41424344464748494B4C4D4E" #h"C9C8CBCA4447465926272021545B5A59" #h"058691E627ECBC36AC07B6DB423BD698") (:ecb-mode-test #h"50515253555657585A5B5C5D5F60616264656667696A6B6C6E6F707173747576" #h"050407067477767956575051221D1C1F" #h"7444527095838FE080FC2BCDD30847EB") (:keystream-test #h"d5df6a74f6676fb3b3e91fe9854bd15398ce2c008ba288c628a9d053a28cb161" #h"2baa5b4671bc6d69922568296b32682f" #h"a7e1ec9c859d569681abdbd4e133f1fd4cd9f263f125fcc5d601338b6cb6b6e3d920cb6ebd12e7b7f51f612e693921ec15136b342bc4e0b05cebc49146422d5d0ae8bc04341241363d00772a207c10ebe8f532aed0d02f97fea8c1869bdcf6e4a8e3a947c17201ad2f63bf65a93500d9cb967cbc63b70524c2a099340e78f20a122997a2f19d4ae0039b384485f028f8bd8f7dce39c66196ee24488307d73fc1cd92bab295c02ce1b59137262f7232dbf27b3e149a0065a149aa6aa6459eb77bc3334e85f76b9ad2758f5dc74a24d440483d47f5c622b7f23d681aaf834463666ec0b8be39d7a7b873cba5b4f530da1eca483d1319daa61338d982a671d61cd86c03a3bcb48143548651e030caa47be74a63e4f77275f0c800293ba4cf54643df38c0a69361af3100cff8ee5c1aab98ec248e788a57ca5c16d0d8c9f54baa5443bc88a4ea3fbde4d304dd4d8e6da77dfc9d126bcc945d0015fc0e76dfa8b8ec6fcacc3c22015a4c219ec8076a98ae54290d052fbf0c77d83d9a803898973717bb30172abf295b8858c4f9d19d97dc6bb2bc06613ec977d84697d34d4bd3097380181a3236288462313c92fd794705b61ea800cb99360ff13458fd0e6f6cc6e1f9b8f78f244dc093be28d8248711f63a4cd22549b951ae802d241753b7f9cdc3e72037240da0cf95ce389b3fa30a06a37281644f17e387968df5afc8d42edc7d7cde5b801b769736fc61da49442f44208658925bc718e7110320b55d339d7eca44cbe953cead4ae3b34e87de354bdc5d0fde2d1c0d79619ec6976bbeb2015e1e31828a32228642a846087c4b05a3c1c634e08a25fc5999e4d79df7b9452fa61666575df25439ca9fd052687e5fa181460b68066a82f7efd1cd5f9af30ba78e5b760057836a6c4a3ffdb81dba2f6edea17c97a9ef2343e7bceb29b0ec46031e415b4f5d323db2eab505a05f059b4e58ed98a63f946ff0f08821b67a0b60f2d6ae621feacada6433367a8c5b28e78ea42b1e81b54b8f420cf15e27488a098f2effae2306f2b0179bf9e6191fdae575f828fb800642188b79c0fca13adb565ece8ff6b18be81f4125d7c021bd84a22545c002152d7cb1963730b699f198bab5ca1a6fd4493966beb661884b13803b11c6f6aa380245d2fb84c778c0f8dce80a988b9e2700b8fe4c022e6c66097261d7aff9f16c0702252195335a373f2627d6515d3ed873221f72d775bc0b6d6d0bd12d90052534a7574ba73f7d6cd19454f08be216a3b764188844aa40f18b7c971a83218a64fdf0c3aae0028658b61fcdbee8ad84462bb42c57175a7637d9e86c87040eadd2e8443c4f1181346e005c475fd0b71a8b77c59bb6cb2921ede44aa94a28ba73662edd51c3e711a153eb4defe20b933e11e56d0e0e77678") ironclad-0.57/testing/test-vectors/arcfour.testvec000066400000000000000000000011521420372057600224240ustar00rootroot00000000000000(:stream-mode-test #h"0123456789abcdef" #h"0123456789abcdef" #h"75b7878099e0c596") (:stream-mode-test #h"0123456789abcdef" #h"0000000000000000" #h"7494c2e7104b0879") (:stream-mode-test #h"0000000000000000" #h"0000000000000000" #h"de188941a3375d3a") (:stream-mode-test #h"ef012345" #h"0000000000000000000000000000000000000000" #h"d6a141a7ec3c38dfbd615a1162e1c7ba36b67858") (:stream-mode-test #h"0123456789abcdef" #h"123456789abcdef0123456789abcdef0123456789abcdef012345678" #h"66a0949f8af7d6891f7f832ba833c00c892ebe30143ce28740011ecf") (:stream-mode-test #h"ef012345" #h"00000000000000000000" #h"d6a141a7ec3c38dfbd61") ironclad-0.57/testing/test-vectors/argon2d.lisp000066400000000000000000000034651420372057600216220ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto-tests) (rtest:deftest argon2d-1 (run-kdf-test (crypto:make-kdf 'crypto:argon2d :block-count 12) (crypto:ascii-string-to-byte-array "somepassword") (crypto:ascii-string-to-byte-array "somesalt") 3 32 (ironclad:hex-string-to-byte-array "4b2506d85e002568380d0f4332b39fd0e6d17a36ceb8ea6cda4b42328715316a")) t) (rtest:deftest argon2d-2 (run-kdf-test (crypto:make-kdf 'crypto:argon2d :block-count 32) (crypto:ascii-string-to-byte-array "0123456789abcdefgh") (crypto:ascii-string-to-byte-array "0123456789") 3 32 (ironclad:hex-string-to-byte-array "74093b9772cc719dccf296bcdafc6d198beeb3b4ccb103f275489581497774de")) t) (rtest:deftest argon2d-3 (run-kdf-test (crypto:make-kdf 'crypto:argon2d :block-count 64) (crypto:ascii-string-to-byte-array "0000000000000000") (crypto:ascii-string-to-byte-array "00000000") 4 32 (ironclad:hex-string-to-byte-array "11180186e2608884c32539561128f6870f077319dfa29316ea4c065c815d0637")) t) (rtest:deftest argon2d-4 (run-kdf-test (crypto:make-kdf 'crypto:argon2d :block-count 128) (crypto:ascii-string-to-byte-array "zzzzzzzzyyyyyyyyxxxxx") (crypto:ascii-string-to-byte-array "wwwwwwwwvvvvv") 3 111 (ironclad:hex-string-to-byte-array "b98e59af3b82d241ee76f1a21262e8be0adcf9a673cbee7ff2b2e61ed938b2f2d709c925e067ef61f94b00478f91e9c773e79e66263ac6b8935e81afae94f44e1bb9daeae34e732e6be82438900ba1a865c159e16de16df2a738f00fdf1b4cf5e5c8b7a79703471c52b48152b2d55c")) t) ironclad-0.57/testing/test-vectors/argon2i.lisp000066400000000000000000000052201420372057600216160ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto-tests) (rtest:deftest argon2i-1 (run-kdf-test (crypto:make-kdf 'crypto:argon2i :block-count 12 :additional-key (ironclad:hex-string-to-byte-array "0303030303030303") :additional-data (ironclad:hex-string-to-byte-array "040404040404040404040404")) (ironclad:hex-string-to-byte-array "0101010101010101010101010101010101010101010101010101010101010101") (ironclad:hex-string-to-byte-array "02020202020202020202020202020202") 3 32 (ironclad:hex-string-to-byte-array "25b608be8ddbe53bb027bfd0f2a5c827e819b6fee0c28eca883f27d724ee7a3a")) t) (rtest:deftest argon2i-2 (run-kdf-test (crypto:make-kdf 'crypto:argon2i :block-count 133 :additional-key (ironclad:hex-string-to-byte-array "0303030303030303") :additional-data (ironclad:hex-string-to-byte-array "040404040404040404040404")) (ironclad:hex-string-to-byte-array "0101010101010101010101010101010101010101010101010101010101010101") (ironclad:hex-string-to-byte-array "02020202020202020202020202020202") 1 32 (ironclad:hex-string-to-byte-array "6d3976937b9750ea8db2ad0a45e9da6967377a49d1a5fddfdee74cbf63eaf181")) t) (rtest:deftest argon2i-3 (run-kdf-test (crypto:make-kdf 'crypto:argon2i :block-count 8 :additional-key (ironclad:hex-string-to-byte-array "0303030303030303") :additional-data (ironclad:hex-string-to-byte-array "040404040404040404040404")) (ironclad:hex-string-to-byte-array "0101010101010101010101010101010101010101010101010101010101010101") (ironclad:hex-string-to-byte-array "02020202020202020202020202020202") 3 32 (ironclad:hex-string-to-byte-array "afe519be3ab0e92375df221dfb17347080c7000b1be85f9ee39978bf11e7cc3a")) t) (rtest:deftest argon2i-4 (run-kdf-test (crypto:make-kdf 'crypto:argon2i :block-count 4096) (ironclad:hex-string-to-byte-array "70617373776f7264") (ironclad:hex-string-to-byte-array "73616c7473616c74") 3 32 (ironclad:hex-string-to-byte-array "965bd476aa7af72d9107adbd742b86e36911e72f8e71cff388a579927deb48e3")) t) ironclad-0.57/testing/test-vectors/aria.testvec000066400000000000000000000112141420372057600216770ustar00rootroot00000000000000;;;; ARIA test vectors (:ecb-mode-test #h"000102030405060708090a0b0c0d0e0f" #h"00112233445566778899aabbccddeeff" #h"d718fbd6ab644c739da95f3be6451778") (:ecb-mode-test #h"00112233445566778899aabbccddeeff" #h"11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd" #h"c6ecd08e22c30abdb215cf74e2075e6e29ccaac63448708d331b2f816c51b17d9e133d1528dbf0af5787c7f3a3f5c2bf6b6f345907a3055612ce072ff54de7d788424da6e8ccfe8172b391be499354165665ba7864917000a6eeb2ecb4a698edfc7887e7f556377614ab0a282293e6d884dbb84206cdb16ed1754e77a1f243fd086953f752cc1e46c7c794ae85537dcaec8dd721f55c93b6edfe2adea43873e8") (:ecb-mode-test #h"000102030405060708090a0b0c0d0e0f1011121314151617" #h"00112233445566778899aabbccddeeff" #h"26449c1805dbe7aa25a468ce263a9e79") (:ecb-mode-test #h"00112233445566778899aabbccddeeff0011223344556677" #h"11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd" #h"8d1470625f59ebacb0e55b534b3e462b5f23d33bff78f46c3c15911f4a21809aaccad80b4bda915aa9dae6bcebe06a6c83f77fd5391acfe61de2f646b5d447edbfd5bb49b12fbb9145b227895a757b2af1f7188734863d7b8b6ede5a5b2f06a0a233c8523d2db778fb31b0e311f32700152f33861e9d040c83b5eb40cd88ea49975709dc629365a189f78a3ec40345fc6a5a307a8f9a4413091e007eca5645a0") (:ecb-mode-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"00112233445566778899aabbccddeeff" #h"f92bd7c79fb72e2f2b8f80c1972d24fc") (:ecb-mode-test #h"00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff" #h"11111111aaaaaaaa11111111bbbbbbbb11111111cccccccc11111111dddddddd22222222aaaaaaaa22222222bbbbbbbb22222222cccccccc22222222dddddddd33333333aaaaaaaa33333333bbbbbbbb33333333cccccccc33333333dddddddd44444444aaaaaaaa44444444bbbbbbbb44444444cccccccc44444444dddddddd55555555aaaaaaaa55555555bbbbbbbb55555555cccccccc55555555dddddddd" #h"58a875e6044ad7fffa4f58420f7f442d8e191016f28e79aefc01e204773280d7018e5f7a938ec30711719953bae86542cd7ebc752474c1a5f6eaaace2a7e29462ee7dfa5afdb84177ead95ccd4b4bb6e1ed17b9534cff0a5fc2941429cfee2ee49c7adbeb7e9d1b0d2a8531d942079596a27ed79f5b1dd13ecd604b07a48885a3afa0627a0e4e60a3c703af292f1baa77b702f16c54aa74bc727ea95c7468b00") (:keystream-test #h"b08c1c32aadb7230a5587a960331f29fa146a97275eb5b3a4a6007da25eded32" #h"a708b7bee683a48d0a7748931b21bd09" #h"6ac3971ead53a074038bceb16656508765e16bea4503b5036233b065e3aa9531e9f1ddd02941257c0c61b33259b781e6e93d394292b7e7d1d2fd6d1beec2640b80ca3d3d0d8967c0401db0675a15e539f02c1421184fe2e97c2b4445afb9741c68ccce4cae4f453f9036b37b3c890cc14ca3f40f50359fd7c219d0bbf8e7a5ec1724addaef37475afd751198b91ce76d6d3cd498c2113b19ecd1594187111a6ca80883c664bb75dca04aec55b074479a08e4e8d592459c84c3d1336d28d4814889bf0c4e45ead3392939fb143a175cefd0834e51aa3a16cc600761ffcf1b0bcbe0f65d1e6df17317315a8dac12f5ac0db607f6d4fdb7a1e1fda667a7eef24104ce4affd654228bc298cc0c959e08497e9a537c421d61f7f14533b65fb5b23666de339c4e50af13092a8954de89195378c292fdc9ad1d0d5146b7923b3165f5aa50881cf73c0a6e39c9bee3da1aa079266d74c002692995fac792fb0e16a57747f60649cdcb7cb8653176f7560500beb14b8e7a0880936b4f48c17e97f9b25f3ad89a70bab3ccd3b3c6fd60751c73f185b43202a686941d946f21416ff3f4f9ab3186a406a9c5f21c8349771f982e91be52492562ab9c302f825fd94e8cf15435e6ac5cf0eb438a793bb0feb8f3faa95b8529ffe44f99b8cd9202a6c7a026a2c260daf734d4ecca055b738e6b3fead63d8dbfae5686fe6e9ed604a7561c124c256cddf9c35cbec42c5ea338afeae9ab8232e75061ae21c802937c3d304dbdd0721d028d285e0ae036b2b8928aa7775c174334050ea6b36cd4a7249c772f0c187523a2545978730bbfaeb69fed7e31d1b1d0584a044f3b1495729cdc0cb682a2e7f75b46133c536131396e627bb34fd467cb23adcfd09c5039c6283b7e88c44b3c75cee401d94f81f26a43c9875d393f69428dbdfe460a0a8cbc4aeb0bea47eef9659215ae1980563d3a2bc9eee665e16141db4016d2a4dce51742fd2a0871c2f265e4f8f0f1b86b7aa5b3b44c98058b4cf524ad829753b8e2d34f6b598f752647d5330f19763b097c9ebaf99110644ce655d10ea8ad61fef84d051401d9ae616641d6d77d02ab04812ea87d229fa3b7f422c303754e726c57cbf21b9dc3858ad5ea5aa133845cc83b927bc5b94f395b48991ea22359d5552c70430ee32442d01e7aa0ee3a97e143ce70a167d0a9f08b0c707ffa545a358b885986d60455e6ed6ea5748bea2d30e859b609e59a1ab47e1eb4ab746f541a5eeff8d630dca0f078158cc7c9c63e66a8c4f530e50dc87f1a654f8d7de360d17b0254f0f5932462db27f26230aa42a620ee2bc673bed4125de6f297dff6483470e4f623dda4291529b74ad4cb95af7987bdb216e93d52ba5f467d228a7af01e935489f0eacdfc1df4146829d6d842f24644") ironclad-0.57/testing/test-vectors/bcrypt.lisp000066400000000000000000000071361420372057600215700ustar00rootroot00000000000000(in-package :crypto-tests) (rtest:deftest bcrypt-1 (run-kdf-test (crypto:make-kdf 'crypto:bcrypt) (crypto:ascii-string-to-byte-array "Kk4DQuMMfZL9o") (crypto:hex-string-to-byte-array "79762be9970f5be73ac77c0e4f0a3851") 16 24 (crypto:hex-string-to-byte-array "db8f0360d2aa48e1415598bbc1b5c0d9103043ea39686ad2")) t) (rtest:deftest bcrypt-2 (run-kdf-test (crypto:make-kdf 'crypto:bcrypt) (crypto:ascii-string-to-byte-array "U*U") (crypto:hex-string-to-byte-array "10410410410410410410410410410410") 32 24 (crypto:hex-string-to-byte-array "1bb69143f9a8d304c8d23d99ab049a77a68e2ccc744206bb")) t) (rtest:deftest bcrypt-3 (run-kdf-test (crypto:make-kdf 'crypto:bcrypt) (crypto:ascii-string-to-byte-array "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") (crypto:hex-string-to-byte-array "71d79f8218a39259a7a29aabb2dbafc3") 32 24 (crypto:hex-string-to-byte-array "eeee31f80919920425881002d140d555b28a5c72e00f097d")) t) (rtest:deftest bcrypt-4 (run-kdf-test (crypto:make-kdf 'crypto:bcrypt) (crypto:ascii-string-to-byte-array "/MH51`!BP&0tj3%YCA;Xk%e3S`o\\EI") (crypto:hex-string-to-byte-array "811902780b80d2a0e4e43f2bde449612") 1024 24 (crypto:hex-string-to-byte-array "d69e68b5c372ad72fb6488275f4687334afb1dba41d00cf1")) t) (rtest:deftest bcrypt-pbkdf-1 (run-kdf-test (crypto:make-kdf 'crypto:bcrypt-pbkdf) (crypto:ascii-string-to-byte-array "password") (crypto:ascii-string-to-byte-array "salt") 4 32 (crypto:hex-string-to-byte-array "5bbf0cc293587f1c3635555c27796598d47e579071bf427e9d8fbe842aba34d9")) t) (rtest:deftest bcrypt-pbkdf-2 (run-kdf-test (crypto:make-kdf 'crypto:bcrypt-pbkdf) (crypto:ascii-string-to-byte-array "password") (crypto:hex-string-to-byte-array "00") 4 16 (crypto:hex-string-to-byte-array "c12b566235eee04c212598970a579a67")) t) (rtest:deftest bcrypt-pbkdf-3 (run-kdf-test (crypto:make-kdf 'crypto:bcrypt-pbkdf) (crypto:ascii-string-to-byte-array "password") (crypto:ascii-string-to-byte-array "salt") 8 64 (crypto:hex-string-to-byte-array "e1367ec5151a33faac4cc1c144cd23fa15d5548493ecc99b9b5d9c0d3b27bec76227ea66088b849b20ab7aa478010246e74bba51723fefa9f9474d6508845e8d")) t) (rtest:deftest bcrypt-pbkdf-4 (run-kdf-test (crypto:make-kdf 'crypto:bcrypt-pbkdf) (crypto:hex-string-to-byte-array "0db3ac94b3ee53284f4a22893b3c24ae") (crypto:hex-string-to-byte-array "3a62f0f0dbcef823cfcc854856ea1028") 8 256 (crypto:hex-string-to-byte-array "2054b9fff34e3721440334746828e9ed38de4b72e0a69adc170a13b5e8d646385ea4034ae6d26600ee2332c5ed40ad557c86e3403fbb30e4e1dc1ae06b99a071368f518d2c426651c9e7e437fd6c915b1bbfc3a4cea71491490ea7afb7dd0290a678a4f441128db1792eab2776b21eb4238e0715add4127dff44e4b3e4cc4c4f9970083f3f74bd698873fdf648844f75c9bf7f9e0c4d9e5d89a7783997492966616707611cb901de31a19726b6e08c3a8001661f2d5c9dcc33b4aa072f90dd0b3f548d5eeba4211397e2fb062e526e1d68f46a4ce256185b4badc2685fbe78e1c7657b59f83ab9ab80cf9318d6add1f5933f12d6f36182c8e8115f68030a1244")) t) ironclad-0.57/testing/test-vectors/blake2-160.testvec000066400000000000000000000075001420372057600224320ustar00rootroot00000000000000(:digest-test #h"" #h"3345524abf6bbe1809449224b5972c41790b6cf2") (:digest-test #h"23" #h"bb1bd238fe392bd6d59e8cb6eac30a7f4e1b2ceb") (:digest-test #h"639f" #h"34ae10b4cae24ec044ecf0a6bf6ff0c31c2060be") (:digest-test #h"764ccb" #h"e15969f482e3cb71b8c773a9b09df52652c25df8") (:digest-test #h"aff5374b" #h"e9b8f19d37ebd6a23699480733e0a8685af6f614") (:digest-test #h"355ec01e94" #h"d5a05ceb099bd0219b5d62fe30561d29c47a8b82") (:digest-test #h"12c75277b8ee" #h"eed6df22a6be77929c8846ac5d0af15a6f0867c0") (:digest-test #h"de5e254059cb09" #h"a36db474a26097e4d972a2bc18dcd7abbd8e8420") (:digest-test #h"7b43c42246bd1d0e" #h"3afe49823833313f7e5dab1e07959dd5a8c6c466") (:digest-test #h"66dd735ab0686371ef" #h"931ab5b930e317f87a940f07c34fd386f762464e") (:digest-test #h"4715a4fef52a3d34448f" #h"b60778365b97fcedc6c5d0ee48a37a7e1507fdb3") (:digest-test #h"5988bdbc5a19fa24afd183a94bfb25acf70899179065eaf360d9f5f7d7c715bdf46b6d30791776f3b043da5976a2b6a9064d732490103c08d84acc9c87ad792e1fe741f51cfb3850306fefdfaec0dcbd73e39f0216498e612643770a15c149d510313d8d0bf2c27d105401e54ab636fb07711e055dd8ebced493042704cf50" #h"46a96b0f948b059825536ea74a9abac5dbfca782") (:digest-test #h"acd5a0e8e7c6b801176c5f2679e88ca6a54fdd1137e48b3620fbaafc523e0a7ee6e7c92fb0d4ab6b73d7dffe0ca4c08862a17a9c6729a5adf6715adb9737e2b09095176f07451a6ae251b9b5f6b9aefdf6c42a98a0db2a1c16bdb176ebde02fa4e2259aab8ba02ec39a2756c7321d1644381a7bb77f1dd5d63de205427b2cb63" #h"e35ccc8edca9bda0020d29a8832d2756600d83f1") (:digest-test #h"98efe0c894f115c7eb88c014002850e8d6fc839b094f59892cd74abe036dee99d50306b00a783e74219ba5289cc833faa38e9aad9b983a92057bfe62e61850aa48d56d445923416f40280534991aad3b965e6cd2fe6dbee862ec204bf49538d847603a4b0f87116b4071daf9d32b8a7e121cb4726819081badb01b251de92f882b" #h"c0e569fecb442017d4d3d89cc731d1fb29d4c1d2") (:digest-test #h"76227b51584d8175ba43e9339f4e1802485c554d48a7b9bd9fadd917d330d4f227bb6f40f1bd148aa55ea2cdabaed8a4604b941d665ba173ecd39344cd50ad459e441723b0aa3661e2f96622d94625bdf665987f539855ffe895e0105d7b6efd3a8270e0e554f2d7438bf47e5350d2a16ccf02367c0a8972ce128d6cefce5448dff7aa7c55a025ab1cfedcd6abcac7d86594cb2437564024207fb5f66e1641f402083bc34d928082817d797435013f550df8daf313d66fd3b2ca8fde202004c2a1915bb71d82f54709bffe96f2073745aedf4d3def0ede1d209f4669a4abe864431f1f918091a5dda536e544a1686a3b64c9d55f8146638519e3377f2456d808a7e3319749b72d91d9183f87ab8155e29f31cf0d3af1adb9263cfb1899e166fbc1cbb3c9ed62a7ca4f026148fe235b8e154dab1308a2957d7fcb37eb2d459dfcda885757087faf12f2f1f105c983075f7439090a2dddab56b3ad645df5b3a75b7f119925a7a52aa2c9eb8971e0ca20b726f1989dc0a3fcec64f312981a63ab9c0e8154c648cf584eab612d23e6546b06875dcba7e71830c291ac3c974bf694bdaee514f0d90983562087b37a010fc5c294b183ab9a2e082cb4555fd629e4103227b121e5fb9d33ab1992449ac579c5377bd7f70de13e5850ee50fed9846fb4ba6e377b29ef5045568ad889682ac558c87a30edb8872da0618fb83f1c8b73929cf9eb964c4287a4d2278b6fe751837ef3f4c8e411c3e49aa99427b0ef3f61702ec8c05095170f3441ab3e9f68b83415fe3be092d855d4652de4b90ea0ef12b833960affbdc5e6cca200a322db6eeaf8c57af6b11400caf5d00440fcd844b8e3a6ce539cefead46a973113b3e577f3db30697d4ec88acec697010f93fb2546fae908450bd4085ebd64cefd417b34135fc5020d2050100b9383433586a871f654fcd1f8e52dd03e6001b2d3ff7809e99c7f831274b403451e56d372832d39c9cc1df66ef8cea52463608c7a31f398a02ef2a31fedb326aeac7431ddc4c11e15681431f4daaac75cf5d103d108b8325c6924a440498f0585ac656fde645bfe2ce2fb243b32f952deb9317a900f1743279bddf41f4ad5dc3ac38e3dfd46fe0dd1e8bc81a3d565e596288d4a8923cbe33f3e869486d34a34d3354df050c5d68adcd6d69d72281c1f2eccaa79b9b62a87d0d635cc20a15f5978ab2620de824ea8822d5cfcd32b91ccf8c1f55bc8ca1176cac5a0a243782584a347dacfa05731b51162d8e45ad980f8c7bfafcd4cd8cbd7d0e42231d27e3856cc5c9e582a20478f98171300f768f7a3a221ce092d24d319fdc452290140714b5a8291f4f89c50ff198244ffcdc7245d0383a4a3b166872c6f6ef446d553ffb658df73ca748c06247ff880fa978bad0ec38ea23d45b3c2f1d83356e2fb1be9e8e769b788e576a9bf0ed219af" #h"3fab78946a602d4319b4268459514502738ec492") ironclad-0.57/testing/test-vectors/blake2-256.testvec000066400000000000000000000102501420372057600224340ustar00rootroot00000000000000(:digest-test #h"" #h"0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8") (:digest-test #h"23" #h"2208e439244a1d0ef238352e3693098aba9de9dd0154f9056551636c8ed15dc1") (:digest-test #h"639f" #h"bbc4ec86bfa612ae63abf790b0580cf63796c615f5b9a2e127601952e3aeb235") (:digest-test #h"764ccb" #h"0b5a06f27f02007ea194983d468906bf8ddc46c05ce2815ef6691e8da98e7244") (:digest-test #h"aff5374b" #h"0aa4bf04f097e0a70c5ede3fee9377437c8f3f29a788d1de56bd026e2abccd16") (:digest-test #h"355ec01e94" #h"a630916daabd903d7d3d385e4e6c81e9dd2bf51d0762ce408473f44f839de1c4") (:digest-test #h"12c75277b8ee" #h"f7fe5d5a02e5a18f5c86c054d266af5bb0c79f619e9efcf3f07bfeed361e453c") (:digest-test #h"de5e254059cb09" #h"2b35469aca8a3a2b18807a4e378b4f80e458779dcd6a2da781ccfdcd4dde8dfa") (:digest-test #h"7b43c42246bd1d0e" #h"de55c16b482d68c72403bbea8133686086ae0b816168e49e7f8d9602d6db7a36") (:digest-test #h"66dd735ab0686371ef" #h"cc6d6b5b0d9b91d877839fa2274683e005138b97aee899e1b71b35df389a7ce4") (:digest-test #h"4715a4fef52a3d34448f" #h"bdebbc2992472b8eef02ef2645ad8e12b2ff3a7c3f9274e333abb751eabfb73a") (:digest-test #h"5988bdbc5a19fa24afd183a94bfb25acf70899179065eaf360d9f5f7d7c715bdf46b6d30791776f3b043da5976a2b6a9064d732490103c08d84acc9c87ad792e1fe741f51cfb3850306fefdfaec0dcbd73e39f0216498e612643770a15c149d510313d8d0bf2c27d105401e54ab636fb07711e055dd8ebced493042704cf50" #h"bbf43caa26cfcb0ae2217ba8ac3e21b81546a12fe922f95be6022d9b7fce0e46") (:digest-test #h"acd5a0e8e7c6b801176c5f2679e88ca6a54fdd1137e48b3620fbaafc523e0a7ee6e7c92fb0d4ab6b73d7dffe0ca4c08862a17a9c6729a5adf6715adb9737e2b09095176f07451a6ae251b9b5f6b9aefdf6c42a98a0db2a1c16bdb176ebde02fa4e2259aab8ba02ec39a2756c7321d1644381a7bb77f1dd5d63de205427b2cb63" #h"1e59ca22cf7b4d61180fbb993afabee822d4d9dddf6c7c16552e9e455c9864ca") (:digest-test #h"98efe0c894f115c7eb88c014002850e8d6fc839b094f59892cd74abe036dee99d50306b00a783e74219ba5289cc833faa38e9aad9b983a92057bfe62e61850aa48d56d445923416f40280534991aad3b965e6cd2fe6dbee862ec204bf49538d847603a4b0f87116b4071daf9d32b8a7e121cb4726819081badb01b251de92f882b" #h"baeb0bce2b7b4cdc09e20327bef0de2f739a43058dab5b33ad5a1312665477d3") (:digest-test #h"76227b51584d8175ba43e9339f4e1802485c554d48a7b9bd9fadd917d330d4f227bb6f40f1bd148aa55ea2cdabaed8a4604b941d665ba173ecd39344cd50ad459e441723b0aa3661e2f96622d94625bdf665987f539855ffe895e0105d7b6efd3a8270e0e554f2d7438bf47e5350d2a16ccf02367c0a8972ce128d6cefce5448dff7aa7c55a025ab1cfedcd6abcac7d86594cb2437564024207fb5f66e1641f402083bc34d928082817d797435013f550df8daf313d66fd3b2ca8fde202004c2a1915bb71d82f54709bffe96f2073745aedf4d3def0ede1d209f4669a4abe864431f1f918091a5dda536e544a1686a3b64c9d55f8146638519e3377f2456d808a7e3319749b72d91d9183f87ab8155e29f31cf0d3af1adb9263cfb1899e166fbc1cbb3c9ed62a7ca4f026148fe235b8e154dab1308a2957d7fcb37eb2d459dfcda885757087faf12f2f1f105c983075f7439090a2dddab56b3ad645df5b3a75b7f119925a7a52aa2c9eb8971e0ca20b726f1989dc0a3fcec64f312981a63ab9c0e8154c648cf584eab612d23e6546b06875dcba7e71830c291ac3c974bf694bdaee514f0d90983562087b37a010fc5c294b183ab9a2e082cb4555fd629e4103227b121e5fb9d33ab1992449ac579c5377bd7f70de13e5850ee50fed9846fb4ba6e377b29ef5045568ad889682ac558c87a30edb8872da0618fb83f1c8b73929cf9eb964c4287a4d2278b6fe751837ef3f4c8e411c3e49aa99427b0ef3f61702ec8c05095170f3441ab3e9f68b83415fe3be092d855d4652de4b90ea0ef12b833960affbdc5e6cca200a322db6eeaf8c57af6b11400caf5d00440fcd844b8e3a6ce539cefead46a973113b3e577f3db30697d4ec88acec697010f93fb2546fae908450bd4085ebd64cefd417b34135fc5020d2050100b9383433586a871f654fcd1f8e52dd03e6001b2d3ff7809e99c7f831274b403451e56d372832d39c9cc1df66ef8cea52463608c7a31f398a02ef2a31fedb326aeac7431ddc4c11e15681431f4daaac75cf5d103d108b8325c6924a440498f0585ac656fde645bfe2ce2fb243b32f952deb9317a900f1743279bddf41f4ad5dc3ac38e3dfd46fe0dd1e8bc81a3d565e596288d4a8923cbe33f3e869486d34a34d3354df050c5d68adcd6d69d72281c1f2eccaa79b9b62a87d0d635cc20a15f5978ab2620de824ea8822d5cfcd32b91ccf8c1f55bc8ca1176cac5a0a243782584a347dacfa05731b51162d8e45ad980f8c7bfafcd4cd8cbd7d0e42231d27e3856cc5c9e582a20478f98171300f768f7a3a221ce092d24d319fdc452290140714b5a8291f4f89c50ff198244ffcdc7245d0383a4a3b166872c6f6ef446d553ffb658df73ca748c06247ff880fa978bad0ec38ea23d45b3c2f1d83356e2fb1be9e8e769b788e576a9bf0ed219af" #h"efdbb073c5bb2fe7e23856eacb09a7d827aa17731595b33684677fe4067e4e85") ironclad-0.57/testing/test-vectors/blake2-384.testvec000066400000000000000000000112101420372057600224330ustar00rootroot00000000000000(:digest-test #h"" #h"b32811423377f52d7862286ee1a72ee540524380fda1724a6f25d7978c6fd3244a6caf0498812673c5e05ef583825100") (:digest-test #h"23" #h"d1faec0cea091c90e7d0e63d9c5ea72babeb088c2521e52cb76803af61724c1471a230afdb8c66a4614d616d817a1ba6") (:digest-test #h"639f" #h"92303611c44b7b4727fe82f0d7d993f885b57027fa4088777f841591cfd426125f79be9b362f753569e02576cdfb04e8") (:digest-test #h"764ccb" #h"268be36b3258f73a80fa76e4da30491c911ad9d4d2d65e5a5e08e639cee117c0a14002897fa8b8e41ee70cd4a025dd70") (:digest-test #h"aff5374b" #h"bdfa74902a177ece80bd97bca68fa61bc6ca55fafca6124f8e0bf2acb3edf15db502d6849ff00d8f45630b3a65848c80") (:digest-test #h"355ec01e94" #h"810788556eb87c157bce2d63d983a016cf05a10a9fef10fd8e0baf99adc49761321e87925573011d051c090fad6598d4") (:digest-test #h"12c75277b8ee" #h"db6c8293271cbcf831ff2694db8a5d262ef339d88186c1034e5e41916772096d0af61dec27e6c07fcccf8a88a3865bd0") (:digest-test #h"de5e254059cb09" #h"f24afa3c2a69595d1969e5e26ab3afeb0a0d4dd383deb6cbc6bbccec3d429cae1af9e9622260dd9644aeafc1e75a16a5") (:digest-test #h"7b43c42246bd1d0e" #h"510b54bc0c5c828729460ec3b371f5f552aeaf7d96c1dafb0905947ce36324221a461b7e2d832c5606e5e399139e8cdd") (:digest-test #h"66dd735ab0686371ef" #h"21fd11ff3f7c23be6cdaddda0ecaec0e65f69dd1add0fea9b86edc50314ae1b52ade5cfd7b79df0b7e10ef91e6d87dae") (:digest-test #h"4715a4fef52a3d34448f" #h"bbd0ae57fe41b624d09a95712bdd7d5b19bf4e3aff92b71d832dadc2ef09b2e692cdec30efc762bf0218b1a53529a596") (:digest-test #h"5988bdbc5a19fa24afd183a94bfb25acf70899179065eaf360d9f5f7d7c715bdf46b6d30791776f3b043da5976a2b6a9064d732490103c08d84acc9c87ad792e1fe741f51cfb3850306fefdfaec0dcbd73e39f0216498e612643770a15c149d510313d8d0bf2c27d105401e54ab636fb07711e055dd8ebced493042704cf50" #h"a51834be6cee26c21f96d5755f7354f374e2e0e468c350998857dedcb1756e61fc5614746ee942cd973ed2b308fe4403") (:digest-test #h"acd5a0e8e7c6b801176c5f2679e88ca6a54fdd1137e48b3620fbaafc523e0a7ee6e7c92fb0d4ab6b73d7dffe0ca4c08862a17a9c6729a5adf6715adb9737e2b09095176f07451a6ae251b9b5f6b9aefdf6c42a98a0db2a1c16bdb176ebde02fa4e2259aab8ba02ec39a2756c7321d1644381a7bb77f1dd5d63de205427b2cb63" #h"3489f42abb3ca821618e6ea13feb2dbf050888fac601f80dcf30a4d85dde64dc6e1a1d4dec86556f52e607a7a35db576") (:digest-test #h"98efe0c894f115c7eb88c014002850e8d6fc839b094f59892cd74abe036dee99d50306b00a783e74219ba5289cc833faa38e9aad9b983a92057bfe62e61850aa48d56d445923416f40280534991aad3b965e6cd2fe6dbee862ec204bf49538d847603a4b0f87116b4071daf9d32b8a7e121cb4726819081badb01b251de92f882b" #h"aa7c1b72a264e820511e2bebb0f3bd8b000a06cf520c6d04b14801dca1e74f46e4c50788e50aae1a70dfe361d8d6b3d2") (:digest-test #h"76227b51584d8175ba43e9339f4e1802485c554d48a7b9bd9fadd917d330d4f227bb6f40f1bd148aa55ea2cdabaed8a4604b941d665ba173ecd39344cd50ad459e441723b0aa3661e2f96622d94625bdf665987f539855ffe895e0105d7b6efd3a8270e0e554f2d7438bf47e5350d2a16ccf02367c0a8972ce128d6cefce5448dff7aa7c55a025ab1cfedcd6abcac7d86594cb2437564024207fb5f66e1641f402083bc34d928082817d797435013f550df8daf313d66fd3b2ca8fde202004c2a1915bb71d82f54709bffe96f2073745aedf4d3def0ede1d209f4669a4abe864431f1f918091a5dda536e544a1686a3b64c9d55f8146638519e3377f2456d808a7e3319749b72d91d9183f87ab8155e29f31cf0d3af1adb9263cfb1899e166fbc1cbb3c9ed62a7ca4f026148fe235b8e154dab1308a2957d7fcb37eb2d459dfcda885757087faf12f2f1f105c983075f7439090a2dddab56b3ad645df5b3a75b7f119925a7a52aa2c9eb8971e0ca20b726f1989dc0a3fcec64f312981a63ab9c0e8154c648cf584eab612d23e6546b06875dcba7e71830c291ac3c974bf694bdaee514f0d90983562087b37a010fc5c294b183ab9a2e082cb4555fd629e4103227b121e5fb9d33ab1992449ac579c5377bd7f70de13e5850ee50fed9846fb4ba6e377b29ef5045568ad889682ac558c87a30edb8872da0618fb83f1c8b73929cf9eb964c4287a4d2278b6fe751837ef3f4c8e411c3e49aa99427b0ef3f61702ec8c05095170f3441ab3e9f68b83415fe3be092d855d4652de4b90ea0ef12b833960affbdc5e6cca200a322db6eeaf8c57af6b11400caf5d00440fcd844b8e3a6ce539cefead46a973113b3e577f3db30697d4ec88acec697010f93fb2546fae908450bd4085ebd64cefd417b34135fc5020d2050100b9383433586a871f654fcd1f8e52dd03e6001b2d3ff7809e99c7f831274b403451e56d372832d39c9cc1df66ef8cea52463608c7a31f398a02ef2a31fedb326aeac7431ddc4c11e15681431f4daaac75cf5d103d108b8325c6924a440498f0585ac656fde645bfe2ce2fb243b32f952deb9317a900f1743279bddf41f4ad5dc3ac38e3dfd46fe0dd1e8bc81a3d565e596288d4a8923cbe33f3e869486d34a34d3354df050c5d68adcd6d69d72281c1f2eccaa79b9b62a87d0d635cc20a15f5978ab2620de824ea8822d5cfcd32b91ccf8c1f55bc8ca1176cac5a0a243782584a347dacfa05731b51162d8e45ad980f8c7bfafcd4cd8cbd7d0e42231d27e3856cc5c9e582a20478f98171300f768f7a3a221ce092d24d319fdc452290140714b5a8291f4f89c50ff198244ffcdc7245d0383a4a3b166872c6f6ef446d553ffb658df73ca748c06247ff880fa978bad0ec38ea23d45b3c2f1d83356e2fb1be9e8e769b788e576a9bf0ed219af" #h"31b8b4ee24584b1018721d1ec657faf14180fb53d257a5fd0466ebf7b6947737acdc7ce7443ca36fc3757ac10182d679") ironclad-0.57/testing/test-vectors/blake2-mac.testvec000066400000000000000000000116761420372057600226750ustar00rootroot00000000000000(:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"" #h"10ebb67700b1868efb4417987acf4690ae9d972fb7a590c2f02871799aaa4786b5e996e8f0f4eb981fc214b005f42d2ff4233499391653df7aefcbc13fc51568") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"00" #h"961f6dd1e4dd30f63901690c512e78e4b45e4742ed197c3c5e45c549fd25f2e4187b0bc9fe30492b16b0d0bc4ef9b0f34c7003fac09a5ef1532e69430234cebd") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"000102030405" #h"6044540d560853eb1c57df0077dd381094781cdb9073e5b1b3d3f6c7829e12066bbaca96d989a690de72ca3133a83652ba284a6d62942b271ffa2620c9e75b1f") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"000102030405060708090a0b0c0d" #h"dcffa9d58c2a4ca2cdbb0c7aa4c4c1d45165190089f4e983bb1c2cab4aaeff1fa2b5ee516fecd780540240bf37e56c8bcca7fab980e1e61c9400d8a9a5b14ac6") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"000102030405060708090a0b0c0d0e0f10111213" #h"ec0e0ef707e4ed6c0c66f9e089e4954b058030d2dd86398fe84059631f9ee591d9d77375355149178c0cf8f8e7c49ed2a5e4f95488a2247067c208510fadc44c") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b" #h"10bdf0caa0802705e706369baf8a3f79d72c0a03a80675a7bbb00be3a45e516424d1ee88efb56f6d5777545ae6e27765c3a8f5e493fc308915638933a1dfee55") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829" #h"79d2d8696d30f30fb34657761171a11e6c3f1e64cbe7bebee159cb95bfaf812b4f411e2f26d9c421dc2c284a3342d823ec293849e42d1e46b0a4ac1e3c86abaa") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334" #h"462f17bf005fb1c1b9e671779f665209ec2873e3e411f98dabf240a1d5ec3f95ce6796b6fc23fe171903b502023467dec7273ff74879b92967a2a43a5a183d33") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243" #h"ae56deb1c2328d9c4017706bce6e99d41349053ba9d336d677c4c27d9fd50ae6aee17e853154e1f4fe7672346da2eaa31eea53fcf24a22804f11d03da6abfc2b") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f" #h"227e3aed8d2cb10b918fcb04f9de3e6d0a57e08476d93759cd7b2ed54a1cbf0239c528fb04bbf288253e601d3bc38b21794afef90b17094a182cac557745e75f") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5" #h"0764c7be28125d9065c4b98a69d60aede703547c66a12e17e1c618994132f5ef82482c1e3fe3146cc65376cc109f0138ed9a80e49f1f3c7d610d2f2432f20605") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe" #h"142709d62e28fcccd0af97fad0f8465b971e82201dc51070faa0372aa43e92484be1c1e73ba10906d5d1853db6a4106e0a7bf9800d373d6dee2d46d62ef2a461") ironclad-0.57/testing/test-vectors/blake2.testvec000066400000000000000000000327301420372057600221310ustar00rootroot00000000000000(:digest-test #h"" #h"786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce") (:digest-test #h"23" #h"46470494592817184019146d87bb940cdb48845122f29f4ab6c659caaea97173cfa4a5e1fd06a5122c269bae9f89f259b02ed22ee970c629a979cb2bbdd7f72f") (:digest-test #h"639f" #h"4072f08eef70934594e691b0b8e40e6599194e94b1b418a1a5008c6a03994bf877d9e31b1b376a594270666c5fd88da5ac8d8d448f62da971b4b38103ca790ea") (:digest-test #h"764ccb" #h"f3c40af97c51267aa83fc7076cf3e2e63cc2ac55ceb96cfe7c7915529cad7acf3504911804b17555ca2c15788978f5f4c690a8a2422ae775abca1c6e5525f270") (:digest-test #h"aff5374b" #h"6a57e0507aa88237bff1c2249457ee58829b762a1ea39159f1718c749ac7cf2189be7da5950a7b23d9de254b96fe9657332e3938b04d14dea84f40ccd8e0f1e3") (:digest-test #h"355ec01e94" #h"bbb941a8590ee13f1345b246b5fe72d8de0e6b8f0eb2c1fd433338f4cd50b3c4bf7f1c6fb9d1ae9a01d37bf801cdb4b5734ac5cb62aac2d758e5a3e68b4d88fb") (:digest-test #h"12c75277b8ee" #h"ec4d3efe723874854d7814e2183b6b9bcc2d75bb4eed3b532c9334a211f0f7712d9184d3b88ad29da6ea9270ca394e1e2a749abbd924af22dab880259308447e") (:digest-test #h"de5e254059cb09" #h"fa721a47eb528d661d834874d818d3890096af37c02ab5de31323bebfc07ac145ab3ffa86e95fb46ab58c036c3336f12553ac14164b2ebfe0fdee04c25ea1b3f") (:digest-test #h"7b43c42246bd1d0e" #h"96c08df580dace62d567fe70141349eaa7539cd7dc28176028530267f26fc46ea6e29763f675e1d2cef6efda10ff0b2aecbf6e28afa7d7e1a1497a065b040f41") (:digest-test #h"66dd735ab0686371ef" #h"4f82b614d1f36d454546282484f0c80605272b9a88e3cce151c76eb4e68245903a89aa072129fd1b34e04a172bf9171d2b6ba6706d906b714af0f079c21a0e47") (:digest-test #h"4715a4fef52a3d34448f" #h"1bf8a8a33abcc14012da68f39b24a064863c991e75a194a9179e71f8c037c2ab719045d4f0c26c39d793b1e53714c34ec89dc980c9513edbac7de7feeae4261a") (:digest-test #h"c27e9560072ef6f6dfd54b" #h"7863e9c11b3120d5a27030f110326c8c3db1cfd9d76f09ebd76d16fc74f2e87ce04456ecb311b3830b8186119e67cbeb3583988b90da41df64096cdfbda4254a") (:digest-test #h"7169e83b15f48d6d21021f63" #h"d634130c9f5debf1b66866c62389e6e1517dfd9d7c48de83b3c158fe00d37978946fc8fcb67f992c69083728babd52bbff8bd0d20fa6d02ba8ee8adef301d430") (:digest-test #h"d293f3df8dbdf13e81b0a5c521" #h"a2bf306207c596e25f19d695908042a21d0c05a4f1ebd2befc35d568f89028721fc770a3400716a44baa225e1050724ec0868128a820e60ba2aff0d182cb053d") (:digest-test #h"eca84e3566ae829a2aa35b7d3b96" #h"7d6a34570dc4b92b313f6dbbc612e5130de4f991ebfbbc596e6e305fe28952cc32067e680dbbb1847162fb4773db3a5f39c346e19187d29cdf0023e3678fc608") (:digest-test #h"ab889ca4e2bba254630f93dd130c9b" #h"444882f8bcf8b0b569c0f9750b44f17f04e7abfd62508245cf8b5304009de55bbed5b7370a01edaada7717dc4e9595ab84c04ed78de01da9f821923df1c1221d") (:digest-test #h"984c4000fcd68ffe2d8910609bfe0be8" #h"b35bce75b44974ee85b32611892bdc6f2bd1717b4a5b63735e90a69169f6aa6fb1172af2c980e2c0a90dddde90fd198b6abe389cc6290a389805761ca3430da6") (:digest-test #h"03b1fedcaefc8399d335b2872fb66f01e5" #h"3424c98494a490281cb06aa7319bf8a663a46b0bc33c05133d02e01ff553b9851e95db46fb41b5f3cedd22467270fb5cd07d2208addead4e9af7f063b3af8167") (:digest-test #h"6bdb726ae61e22abc69d7c42b9ab52876661" #h"709ed03ea8539aca05ac55b1905dc160c2227e2ca003f251df3a332fb185f9af064cbcb32c06a4aea96ffe7bf3523325ea7900ba21710c450b755a49c52ec15b") (:digest-test #h"12c8a8b55e0f5c9851ce67b4bc07a634010d06" #h"605330953abbb82f37a9edd939afaaea66715b260c9f47d8e7074cc797a2b0257a92d17b30c2093db70c0ff316a3fff1b617436d54d6995e3204f7d542e4b90f") (:digest-test #h"e4b6d64ea06998eb6e17fc37b03509b373126064" #h"478af01240e32d3dde36ac03c42a7ebf1bc6e8e42f4df24720d54adb89d9c3b1fc50366300686ceba555af0b1276be21502d4a7b74a2572998654b99d3d6c8bc") (:digest-test #h"9b6df7ffb00d1e8c7439e1dd6b5162413900b1136b" #h"b6aab2c8da91d1f28f0e778046107ad974364cb5d7f78ee8deb7e067d238ca8c79d4f4f05f7a3deea15e72c87194b2a133773c3597676b53664a175d7f952c4c") (:digest-test #h"e1e5b58181126a5e877fbdc7c879c56af9e792a7936f" #h"ed2160f8d3301890b31cca417918f34ae3243895eaf903f55d2490bee348b6442688f0d1dab2c8efe97cda8b7b656d57064c3e64725a20fa0536b2e175b72e1d") (:digest-test #h"fedb66a15ed656ad4831043ac6a668762a469d6fe4b4fe" #h"783e33ec19fb9786bb23af250a2d000117b8b0ac14d23a0ef7c470e34cd003433585874fd5e0b90a976d7aa2d48078cc5b74562e1c5d42e2d2ad4c99a7faa3d2") (:digest-test #h"8e92b664a3c78887da3358f02ad170fb8698db88e5b5d167" #h"7171a1ca7772a512c6c23c64b91b7b5efb1cb3fe9f58eb5ff030ba1f2a4778aeb11747423bab11a56954e63c8bcd27383b7376146f9ab199a71664e1763dfe71") (:digest-test #h"e489314b4c837360e84b5c1720d95bb33969192f888d1fbff3" #h"17f5dbde6aec185f32cf8c194ea07439a6bbab2153d97136c08343a124fb3bf6efa3354a0d4982e8e33d842025aba2646490bf25f1fe773bebadd07e53e8ef1f") (:digest-test #h"48603547d5a360003be51fadd5f45b9dd61dc86b88a5724b64e9" #h"6f1d6ea5e67d9ad2745fcfa433b93542929e63693c7ee26b8b2e6c06b42a718625f558e3e7607a3f552b2e22da9990e5b106dcd8046c3ec227c0df3b7610c8d4") (:digest-test #h"95415020ba208e4b475ce1feb072ee86f05ab9aa7699d4bf2b722a" #h"538696e669e7744f97b7ae89acdf1eb6fbf7925ef2d3a21a1dccd9d93bc1f5fbf18cc7d8803b1c201f0429e0c76640fb848bc161f5dc9fbe639d9c934c7f230c") (:digest-test #h"c8b14193a733c25c1001a7d7dd8762d81903cf3cac3f83fc2f80a801" #h"09a72691f3976d5a19d331a3dda2a0a0a02be93fa324bbe016682b2fa91d2e3442d5ba7d1828b00fae34d977cfbd65e270aabc57aec75db400ca770a527fb04a") (:digest-test #h"1ce897eec0c68bb5de041005b26eb14cd2aad7d170c4111877f16837cf" #h"1cb77d18476d02f9959b164722de6eda5face4a9c3ec767ea85b630a01241f8d486cec50be5abbf3de3f6b88e7926a4c66cc18da0ce6831e0aea6cc9a2b2f676") (:digest-test #h"578adf8f6ddc29626dbbb8ef0a6e2862d350fa1229f707b6d6d873751862" #h"50e0f6c6ca369e6a3f8bf245c358c04c6e176ba77106f7ea28310654860de1a7e1f9edf1dbc682f4e6698fe12f140a6d951042a536d973c22d68b90046af4541") (:digest-test #h"fee0e2b976998282633a3887757130da204ffa403d853d530b95f1af8fe8cb" #h"9cf2777db91794417da3c8e13c05fcf78d19c70e466bb8b5ab080ee8cfafabf5f2dbf5b257f80b1ceac9e86fc781d8795db5aa505586f89905c9049899bad951") (:digest-test #h"b5f1855986d34e4ba8699e101963a551d72eea5d8d24a9ac7bba0c5193a27928" #h"8aac20dc93156527047c38825326fb86049bdb81e00717a4c3e69d9786cccfe1a2a0b672f36e7e704653d61db3e52111f255238833b6a7456e176ab85353e0a2") (:digest-test #h"815b71d8e7115d17c5210f5c0c8e95cee514a3cd4e27e2e469a779aa96a26817e3" #h"c9d4d750b3a83e728472c347aa3b07930d8a245fa5f1bf0d7986064f015005a3d7daa2e3a980aba44a7a68335931ab3f751feceb0fb0c69670724f6bf64f37d3") (:digest-test #h"1c72f720a26428462e6e4fcccc1446e1147c6ddf7ba581b8ff6b7bfe26bacde135b7" #h"01ff518ed20a8050bec1a2c4010c2d304f016e461117ba61e43d483955e0738f5602d8ec0de188042b659337ff489764324ca5cf74c62b437aa7f208d0d23426") (:digest-test #h"0d3b49a3797ef4b98676aa69b5f3ce821eafb783dcaedfeb6dbd611f1a6934d0b177f1" #h"578884a9cb572373875b2e490c9f3dced4fb0dd8c9bee799626ee77e7c1289d7fe7fce2ca75079e766e66d8317ec602e70ba3f1ad2c3be5f37f16d1d1262972b") (:digest-test #h"a71b563f0d4eca510f5c7477692eff459a9c431181f58640d665c7f0b82e38400c0c5326" #h"18d6d1a7101943e056384aa992bea768c55c31ff411229bdc589f188cd8a05696b629021ec68f167f72435750c38210ad978dad99862aa792cf1de80b19beab4") (:digest-test #h"8d7781d1d6795cb533a57b22a721b86cf2039e7f684e46b6057010f97dd9f7470c77f9020d" #h"a9c03a2ff82c25852bffd1a0226f92b469d16c37d2e41970d2bea65c36a7da31d39ddb0a52cf87d67cc9840203222dd2f88d52362a079dbb2bdccf20117ce657") (:digest-test #h"6e40760b411e7c4457ffb88cb696dbeea2c17123494991754eaabefda98fcb51f37c8b83ad16" #h"b803067ac8cdd8d79d7910e08f49a144607773de6d54ca32b0b1c3ed0ccae2b2b01d8dbbbe0ac6b9b7441347fbe6feafc52f7df0884a6ea632fc7f0f04394d7b") (:digest-test #h"79b85e7cf3aac775b966a975e7bbd0ede27083da2491bd6175cea4552ecafa098818245dda2c47" #h"65d3c26cdbefb3182f274ab15761f166c5486e11faedcf31f7c57101d37bef1d32cf7d275ea888e7f0cfda9d857ba2016f1f957971363d17023fbaf1779ef0dd") (:digest-test #h"b2931e2592d3b55161829340d92910214c07d1d5066828e7b4c0c9a3b93978ca513e0908ad7792d1" #h"8b201ba16d2f6285f0cc08c17333b1313605ecd7efc77e6e1d27192ad942d5866b0d2946a0ee108ada7e29d2e52c5f9b6c3f3ff1394625ea10e3573f2c15f504") (:digest-test #h"08b0f79a43443b2727c1a3c6e2dbbdb1b9d1f97d7e48f95342a226dd391d2c778e95d04412fee5d436" #h"7a71fda9931f938f9a57be6a172bc1e5d92c361546a98ee66642987fe7494fe001c6d91cb89b247d7760aec1a3aab8f9c6ef3e3411332453090cad48d6e4e232") (:digest-test #h"2a2b85f7f3fb73a9fa31db3ed9d646d7f742cb1769db450a85166e80abc7dad7716f8a427ef7554bf493" #h"606771da39df8b78d3ea08cbfc2a2642f6b934c2c084a411821fc42c2c05086e8e93f74a7048061545470e5f8daf9a7b4dcc97368678be39af75bf4a2a2add30") (:digest-test #h"b928ae35f17ed0b349a39e958be4e356ac509fadbef81ae0778cb3a52fb47d44e8f256ae63de88c4f38ce8" #h"ff77d776dc3e32e823ae257eef6fc949917bfdb37c4a71a5a4a8aae658ac9f46c660edc8b955482c265cef6b775fd0206930ffa8d452d0c5ff672aaef1f560ee") (:digest-test #h"d0cbe332ce75c179a4eb6e4a7e971a0478c80694f7d92c01b2b4f0384550007d6c537dfef30ff806c84a360e" #h"42e86c647819180b9c861cf231b443f3b0fdcf278e83d15cd7b93848b752bad083dfc6b754f1b988f060dfff057847cae4d6efc1658aabfc7507c8b8efd4cdd6") (:digest-test #h"b856830c8705487591c11d324cabc5924217cda0d7273e28b667168d737cbf6c78f86ca4aaefa29a01c509be91" #h"59baf75f5486b1032cf12a2fd6e88cb25cd619d3ac5d7cdc1b31537657630ce9ccf46be9df76299067b79950bf95bec40dbc4c3004dccc85f349fbfba19537be") (:digest-test #h"e8ff3173acbf42171038f0d2121152c2f8584499faffb34a95f7bb9097a5041d2ff9dec53196f2cf23778335e2ee" #h"677731d99f8e172e36f9085f0fa6d6aa93126580d4c0737214abd30dc678c9878dd2ab25d9d21a53e3b041a35316bf912f20da2d325dfd276cd8fc6f3deab200") (:digest-test #h"450e35d39c2c4d5d4caa0bd8b08fdf375e514ee776a883d2cccb93fc1f3073adf48fd927ffe4d208df840684aaee15" #h"4e2834517f474c947d50ce1e42142f1604fbb50523000e87581609fe26aa75a2e7274dd3ce93852869e465c461d72e2153a66e6088ba7989be091aa6532bffde") (:digest-test #h"1717f10d699dde5f4df0d4df8aa4718094b134e50ff2663148647b182b80b58f04e9747df2367da55b8bb6a5ab16b138" #h"c9f1d5e362ef1a23ac8572e6ef1db07ccfb7265b4faf49a9929ca68d09ca67d29569f9c504946b00088b372c30ee8183f2c5e996d9ce1398c31a4ee4e40de0cd") (:digest-test #h"0e9866ccd28e07a932828e257ce3bcf01cc9c12fb72527f775ac0e3c742efd536ff569f0c262a064c10466407597be4e40" #h"e71163985ad81ce24d3cd7f787adfa626536904f6f3f7cb829c86030bc907712fc530a821057659db2456b3333f3960d88870486c2f38040459bca5f0def8f3e") (:digest-test #h"9659a5823f977f6974d97a5503a0c590942cc29678e90718b8236f153afe65e4b7f7b5df742366786e8a1481f62e4029c77d" #h"7d3f649911f2074e10c2222b88854f29158b9137a30c9e17d2240b94ccafcb407b6d3b7be4b4c74313b30f67a10d1e18614a62a7d68175d2593f07409780e5c1") (:digest-test #h"5988bdbc5a19fa24afd183a94bfb25acf70899179065eaf360d9f5f7d7c715bdf46b6d30791776f3b043da5976a2b6a9064d732490103c08d84acc9c87ad792e1fe741f51cfb3850306fefdfaec0dcbd73e39f0216498e612643770a15c149d510313d8d0bf2c27d105401e54ab636fb07711e055dd8ebced493042704cf50" #h"bb608f161989f52514689d953b51737aa8d768de69e37a73fc04c564c185659f4d0fdee256df289ee42f38ad660295409aab45fd81629fb5441cc7af3cdcf662") (:digest-test #h"acd5a0e8e7c6b801176c5f2679e88ca6a54fdd1137e48b3620fbaafc523e0a7ee6e7c92fb0d4ab6b73d7dffe0ca4c08862a17a9c6729a5adf6715adb9737e2b09095176f07451a6ae251b9b5f6b9aefdf6c42a98a0db2a1c16bdb176ebde02fa4e2259aab8ba02ec39a2756c7321d1644381a7bb77f1dd5d63de205427b2cb63" #h"6dfe49b56c13be627916789b9bb1d523429912d5dfe73f9d277c456cc72420b73aae8cee70d2f04bec025ddca34570b97eb8159e356bbb40f3f8fee9b23fd0c8") (:digest-test #h"98efe0c894f115c7eb88c014002850e8d6fc839b094f59892cd74abe036dee99d50306b00a783e74219ba5289cc833faa38e9aad9b983a92057bfe62e61850aa48d56d445923416f40280534991aad3b965e6cd2fe6dbee862ec204bf49538d847603a4b0f87116b4071daf9d32b8a7e121cb4726819081badb01b251de92f882b" #h"521de986249c6acc9aa5565c22b91d1cf67de4a4f55f78e580a866459dd6786bc7ccd358e2879fb92372d92a99077b01cd069f4165d4d72fc235c387fe62f291") (:digest-test #h"76227b51584d8175ba43e9339f4e1802485c554d48a7b9bd9fadd917d330d4f227bb6f40f1bd148aa55ea2cdabaed8a4604b941d665ba173ecd39344cd50ad459e441723b0aa3661e2f96622d94625bdf665987f539855ffe895e0105d7b6efd3a8270e0e554f2d7438bf47e5350d2a16ccf02367c0a8972ce128d6cefce5448dff7aa7c55a025ab1cfedcd6abcac7d86594cb2437564024207fb5f66e1641f402083bc34d928082817d797435013f550df8daf313d66fd3b2ca8fde202004c2a1915bb71d82f54709bffe96f2073745aedf4d3def0ede1d209f4669a4abe864431f1f918091a5dda536e544a1686a3b64c9d55f8146638519e3377f2456d808a7e3319749b72d91d9183f87ab8155e29f31cf0d3af1adb9263cfb1899e166fbc1cbb3c9ed62a7ca4f026148fe235b8e154dab1308a2957d7fcb37eb2d459dfcda885757087faf12f2f1f105c983075f7439090a2dddab56b3ad645df5b3a75b7f119925a7a52aa2c9eb8971e0ca20b726f1989dc0a3fcec64f312981a63ab9c0e8154c648cf584eab612d23e6546b06875dcba7e71830c291ac3c974bf694bdaee514f0d90983562087b37a010fc5c294b183ab9a2e082cb4555fd629e4103227b121e5fb9d33ab1992449ac579c5377bd7f70de13e5850ee50fed9846fb4ba6e377b29ef5045568ad889682ac558c87a30edb8872da0618fb83f1c8b73929cf9eb964c4287a4d2278b6fe751837ef3f4c8e411c3e49aa99427b0ef3f61702ec8c05095170f3441ab3e9f68b83415fe3be092d855d4652de4b90ea0ef12b833960affbdc5e6cca200a322db6eeaf8c57af6b11400caf5d00440fcd844b8e3a6ce539cefead46a973113b3e577f3db30697d4ec88acec697010f93fb2546fae908450bd4085ebd64cefd417b34135fc5020d2050100b9383433586a871f654fcd1f8e52dd03e6001b2d3ff7809e99c7f831274b403451e56d372832d39c9cc1df66ef8cea52463608c7a31f398a02ef2a31fedb326aeac7431ddc4c11e15681431f4daaac75cf5d103d108b8325c6924a440498f0585ac656fde645bfe2ce2fb243b32f952deb9317a900f1743279bddf41f4ad5dc3ac38e3dfd46fe0dd1e8bc81a3d565e596288d4a8923cbe33f3e869486d34a34d3354df050c5d68adcd6d69d72281c1f2eccaa79b9b62a87d0d635cc20a15f5978ab2620de824ea8822d5cfcd32b91ccf8c1f55bc8ca1176cac5a0a243782584a347dacfa05731b51162d8e45ad980f8c7bfafcd4cd8cbd7d0e42231d27e3856cc5c9e582a20478f98171300f768f7a3a221ce092d24d319fdc452290140714b5a8291f4f89c50ff198244ffcdc7245d0383a4a3b166872c6f6ef446d553ffb658df73ca748c06247ff880fa978bad0ec38ea23d45b3c2f1d83356e2fb1be9e8e769b788e576a9bf0ed219af" #h"e9791fc28adc7b8e0c68b1137896c063095c56f6f57fe2080a79294aebef115e16e45f9a80c03d001d589d44c492f76e71af557b1732e1d72a84abc9872eb6a0") ironclad-0.57/testing/test-vectors/blake2s-128.testvec000066400000000000000000000073101420372057600226200ustar00rootroot00000000000000(:digest-test #h"" #h"64550d6ffe2c0a01a14aba1eade0200c") (:digest-test #h"23" #h"3176cbb4c813046b23c97200f7cfb422") (:digest-test #h"639f" #h"fa791a5943d4246cfc2acedf5dfdce23") (:digest-test #h"764ccb" #h"45df9ac0bc15132eecdc9e97018c351c") (:digest-test #h"aff5374b" #h"eb6da5bfb1be0977671b5f91c1e6092c") (:digest-test #h"355ec01e94" #h"0f73f9ce7021d2e64a15cd2580daaadc") (:digest-test #h"12c75277b8ee" #h"1a6a47d0f5a81548a4c8039fb5a0229f") (:digest-test #h"de5e254059cb09" #h"9dd473af07f9ed77823a1f83ccfcbb66") (:digest-test #h"7b43c42246bd1d0e" #h"72226b69c6b6f654cb7bc1d13c110a4b") (:digest-test #h"66dd735ab0686371ef" #h"16e3829b80df07637ebd8578ac2d71f0") (:digest-test #h"4715a4fef52a3d34448f" #h"f51b97fc6e8fdb025d873e83da26a8c4") (:digest-test #h"5988bdbc5a19fa24afd183a94bfb25acf70899179065eaf360d9f5f7d7c715bdf46b6d30791776f3b043da5976a2b6a9064d732490103c08d84acc9c87ad792e1fe741f51cfb3850306fefdfaec0dcbd73e39f0216498e612643770a15c149d510313d8d0bf2c27d105401e54ab636fb07711e055dd8ebced493042704cf50" #h"a35dcf41c35cfc336a3ff3ceb3e3de26") (:digest-test #h"acd5a0e8e7c6b801176c5f2679e88ca6a54fdd1137e48b3620fbaafc523e0a7ee6e7c92fb0d4ab6b73d7dffe0ca4c08862a17a9c6729a5adf6715adb9737e2b09095176f07451a6ae251b9b5f6b9aefdf6c42a98a0db2a1c16bdb176ebde02fa4e2259aab8ba02ec39a2756c7321d1644381a7bb77f1dd5d63de205427b2cb63" #h"72c64996e412a7b10571bcb4c1153b1d") (:digest-test #h"98efe0c894f115c7eb88c014002850e8d6fc839b094f59892cd74abe036dee99d50306b00a783e74219ba5289cc833faa38e9aad9b983a92057bfe62e61850aa48d56d445923416f40280534991aad3b965e6cd2fe6dbee862ec204bf49538d847603a4b0f87116b4071daf9d32b8a7e121cb4726819081badb01b251de92f882b" #h"5ba1594597b4653aa4b5584f21af7b3b") (:digest-test #h"76227b51584d8175ba43e9339f4e1802485c554d48a7b9bd9fadd917d330d4f227bb6f40f1bd148aa55ea2cdabaed8a4604b941d665ba173ecd39344cd50ad459e441723b0aa3661e2f96622d94625bdf665987f539855ffe895e0105d7b6efd3a8270e0e554f2d7438bf47e5350d2a16ccf02367c0a8972ce128d6cefce5448dff7aa7c55a025ab1cfedcd6abcac7d86594cb2437564024207fb5f66e1641f402083bc34d928082817d797435013f550df8daf313d66fd3b2ca8fde202004c2a1915bb71d82f54709bffe96f2073745aedf4d3def0ede1d209f4669a4abe864431f1f918091a5dda536e544a1686a3b64c9d55f8146638519e3377f2456d808a7e3319749b72d91d9183f87ab8155e29f31cf0d3af1adb9263cfb1899e166fbc1cbb3c9ed62a7ca4f026148fe235b8e154dab1308a2957d7fcb37eb2d459dfcda885757087faf12f2f1f105c983075f7439090a2dddab56b3ad645df5b3a75b7f119925a7a52aa2c9eb8971e0ca20b726f1989dc0a3fcec64f312981a63ab9c0e8154c648cf584eab612d23e6546b06875dcba7e71830c291ac3c974bf694bdaee514f0d90983562087b37a010fc5c294b183ab9a2e082cb4555fd629e4103227b121e5fb9d33ab1992449ac579c5377bd7f70de13e5850ee50fed9846fb4ba6e377b29ef5045568ad889682ac558c87a30edb8872da0618fb83f1c8b73929cf9eb964c4287a4d2278b6fe751837ef3f4c8e411c3e49aa99427b0ef3f61702ec8c05095170f3441ab3e9f68b83415fe3be092d855d4652de4b90ea0ef12b833960affbdc5e6cca200a322db6eeaf8c57af6b11400caf5d00440fcd844b8e3a6ce539cefead46a973113b3e577f3db30697d4ec88acec697010f93fb2546fae908450bd4085ebd64cefd417b34135fc5020d2050100b9383433586a871f654fcd1f8e52dd03e6001b2d3ff7809e99c7f831274b403451e56d372832d39c9cc1df66ef8cea52463608c7a31f398a02ef2a31fedb326aeac7431ddc4c11e15681431f4daaac75cf5d103d108b8325c6924a440498f0585ac656fde645bfe2ce2fb243b32f952deb9317a900f1743279bddf41f4ad5dc3ac38e3dfd46fe0dd1e8bc81a3d565e596288d4a8923cbe33f3e869486d34a34d3354df050c5d68adcd6d69d72281c1f2eccaa79b9b62a87d0d635cc20a15f5978ab2620de824ea8822d5cfcd32b91ccf8c1f55bc8ca1176cac5a0a243782584a347dacfa05731b51162d8e45ad980f8c7bfafcd4cd8cbd7d0e42231d27e3856cc5c9e582a20478f98171300f768f7a3a221ce092d24d319fdc452290140714b5a8291f4f89c50ff198244ffcdc7245d0383a4a3b166872c6f6ef446d553ffb658df73ca748c06247ff880fa978bad0ec38ea23d45b3c2f1d83356e2fb1be9e8e769b788e576a9bf0ed219af" #h"022ec9746b86972826af2d760995d736") ironclad-0.57/testing/test-vectors/blake2s-160.testvec000066400000000000000000000075001420372057600226150ustar00rootroot00000000000000(:digest-test #h"" #h"354c9c33f735962418bdacb9479873429c34916f") (:digest-test #h"23" #h"a464e92d6b252197dc082171e5863c0b6eda7886") (:digest-test #h"639f" #h"6b114789448dc5ff817ea9adec7beb82a4345f55") (:digest-test #h"764ccb" #h"6905f7b56c4bdbbda139b782347a5788d18c551b") (:digest-test #h"aff5374b" #h"39bf3425ece58f6c6bc018b3aff5ca20ce62ae71") (:digest-test #h"355ec01e94" #h"f46829aae4ee5895485b103780a559dcc87d8d12") (:digest-test #h"12c75277b8ee" #h"032aa146d3f076c8058b129f3670f35dc914bfe3") (:digest-test #h"de5e254059cb09" #h"8bde7a018bfdd127d23531508a228a0f82c25c23") (:digest-test #h"7b43c42246bd1d0e" #h"2775e3f883e25c40f0651e24513e96fcbe1d0056") (:digest-test #h"66dd735ab0686371ef" #h"f031cec3b407e44b6f8ec25565d22516b4f48664") (:digest-test #h"4715a4fef52a3d34448f" #h"c6dc362d72bfbbc8a1167035d36a41fc416143cc") (:digest-test #h"5988bdbc5a19fa24afd183a94bfb25acf70899179065eaf360d9f5f7d7c715bdf46b6d30791776f3b043da5976a2b6a9064d732490103c08d84acc9c87ad792e1fe741f51cfb3850306fefdfaec0dcbd73e39f0216498e612643770a15c149d510313d8d0bf2c27d105401e54ab636fb07711e055dd8ebced493042704cf50" #h"d5731048e032dd6c79da938b0d6606eef41c0368") (:digest-test #h"acd5a0e8e7c6b801176c5f2679e88ca6a54fdd1137e48b3620fbaafc523e0a7ee6e7c92fb0d4ab6b73d7dffe0ca4c08862a17a9c6729a5adf6715adb9737e2b09095176f07451a6ae251b9b5f6b9aefdf6c42a98a0db2a1c16bdb176ebde02fa4e2259aab8ba02ec39a2756c7321d1644381a7bb77f1dd5d63de205427b2cb63" #h"663ff1dab3ccbbba01145c974627113245a0e5d3") (:digest-test #h"98efe0c894f115c7eb88c014002850e8d6fc839b094f59892cd74abe036dee99d50306b00a783e74219ba5289cc833faa38e9aad9b983a92057bfe62e61850aa48d56d445923416f40280534991aad3b965e6cd2fe6dbee862ec204bf49538d847603a4b0f87116b4071daf9d32b8a7e121cb4726819081badb01b251de92f882b" #h"b0498a7c0c6e1a51a2ddfbd78e1585db4d543de8") (:digest-test #h"76227b51584d8175ba43e9339f4e1802485c554d48a7b9bd9fadd917d330d4f227bb6f40f1bd148aa55ea2cdabaed8a4604b941d665ba173ecd39344cd50ad459e441723b0aa3661e2f96622d94625bdf665987f539855ffe895e0105d7b6efd3a8270e0e554f2d7438bf47e5350d2a16ccf02367c0a8972ce128d6cefce5448dff7aa7c55a025ab1cfedcd6abcac7d86594cb2437564024207fb5f66e1641f402083bc34d928082817d797435013f550df8daf313d66fd3b2ca8fde202004c2a1915bb71d82f54709bffe96f2073745aedf4d3def0ede1d209f4669a4abe864431f1f918091a5dda536e544a1686a3b64c9d55f8146638519e3377f2456d808a7e3319749b72d91d9183f87ab8155e29f31cf0d3af1adb9263cfb1899e166fbc1cbb3c9ed62a7ca4f026148fe235b8e154dab1308a2957d7fcb37eb2d459dfcda885757087faf12f2f1f105c983075f7439090a2dddab56b3ad645df5b3a75b7f119925a7a52aa2c9eb8971e0ca20b726f1989dc0a3fcec64f312981a63ab9c0e8154c648cf584eab612d23e6546b06875dcba7e71830c291ac3c974bf694bdaee514f0d90983562087b37a010fc5c294b183ab9a2e082cb4555fd629e4103227b121e5fb9d33ab1992449ac579c5377bd7f70de13e5850ee50fed9846fb4ba6e377b29ef5045568ad889682ac558c87a30edb8872da0618fb83f1c8b73929cf9eb964c4287a4d2278b6fe751837ef3f4c8e411c3e49aa99427b0ef3f61702ec8c05095170f3441ab3e9f68b83415fe3be092d855d4652de4b90ea0ef12b833960affbdc5e6cca200a322db6eeaf8c57af6b11400caf5d00440fcd844b8e3a6ce539cefead46a973113b3e577f3db30697d4ec88acec697010f93fb2546fae908450bd4085ebd64cefd417b34135fc5020d2050100b9383433586a871f654fcd1f8e52dd03e6001b2d3ff7809e99c7f831274b403451e56d372832d39c9cc1df66ef8cea52463608c7a31f398a02ef2a31fedb326aeac7431ddc4c11e15681431f4daaac75cf5d103d108b8325c6924a440498f0585ac656fde645bfe2ce2fb243b32f952deb9317a900f1743279bddf41f4ad5dc3ac38e3dfd46fe0dd1e8bc81a3d565e596288d4a8923cbe33f3e869486d34a34d3354df050c5d68adcd6d69d72281c1f2eccaa79b9b62a87d0d635cc20a15f5978ab2620de824ea8822d5cfcd32b91ccf8c1f55bc8ca1176cac5a0a243782584a347dacfa05731b51162d8e45ad980f8c7bfafcd4cd8cbd7d0e42231d27e3856cc5c9e582a20478f98171300f768f7a3a221ce092d24d319fdc452290140714b5a8291f4f89c50ff198244ffcdc7245d0383a4a3b166872c6f6ef446d553ffb658df73ca748c06247ff880fa978bad0ec38ea23d45b3c2f1d83356e2fb1be9e8e769b788e576a9bf0ed219af" #h"ae2cf35de520642e1f50b19a2a3f51222aae9170") ironclad-0.57/testing/test-vectors/blake2s-224.testvec000066400000000000000000000100601420372057600226110ustar00rootroot00000000000000(:digest-test #h"" #h"1fa1291e65248b37b3433475b2a0dd63d54a11ecc4e3e034e7bc1ef4") (:digest-test #h"23" #h"832ee986815c7b45ec6a1ea9f83c2ee7f5c6538dac223ec4662dc2ee") (:digest-test #h"639f" #h"478fc76f68d16e86530c89a8fe3654928f96d85ae166b67e4ecc729a") (:digest-test #h"764ccb" #h"a6770779ea858dd9e50a5cb832c5d225de1b49d05bafe956e5b4fb4a") (:digest-test #h"aff5374b" #h"7d0d5087fa0a36049f4598c33f3566714906adfff3c2c35fec614faa") (:digest-test #h"355ec01e94" #h"28295c8b096b6d55a4c018dafe6a326c7922cf1e91bb45a615e09432") (:digest-test #h"12c75277b8ee" #h"d45e6aeefa861218f38dc3ab9a3053c44e333c4191c2f8c27fd6ccd1") (:digest-test #h"de5e254059cb09" #h"f67ed2496c58e9bd41e68e270bd6d369df7dabfa5150b93cbfd5a933") (:digest-test #h"7b43c42246bd1d0e" #h"8750f81f6b48a7be8975f14ddf0d3e36b93abcf6b36c7da5ddc09e02") (:digest-test #h"66dd735ab0686371ef" #h"638b86c6ee1f6eb3fa1edd24f2873ee515a13faddb6d92c762ae741f") (:digest-test #h"4715a4fef52a3d34448f" #h"299f72047049925820f4f80eda3e10286d7d26b65e25a8c0d8436384") (:digest-test #h"5988bdbc5a19fa24afd183a94bfb25acf70899179065eaf360d9f5f7d7c715bdf46b6d30791776f3b043da5976a2b6a9064d732490103c08d84acc9c87ad792e1fe741f51cfb3850306fefdfaec0dcbd73e39f0216498e612643770a15c149d510313d8d0bf2c27d105401e54ab636fb07711e055dd8ebced493042704cf50" #h"dddfd4d9db00c8ff67f1d704167b6ad4069489a840e9b6010631a9e1") (:digest-test #h"acd5a0e8e7c6b801176c5f2679e88ca6a54fdd1137e48b3620fbaafc523e0a7ee6e7c92fb0d4ab6b73d7dffe0ca4c08862a17a9c6729a5adf6715adb9737e2b09095176f07451a6ae251b9b5f6b9aefdf6c42a98a0db2a1c16bdb176ebde02fa4e2259aab8ba02ec39a2756c7321d1644381a7bb77f1dd5d63de205427b2cb63" #h"88cdbbb7abc430b72fb2d055e397929921d9ed1bda2d1f59f4fe3045") (:digest-test #h"98efe0c894f115c7eb88c014002850e8d6fc839b094f59892cd74abe036dee99d50306b00a783e74219ba5289cc833faa38e9aad9b983a92057bfe62e61850aa48d56d445923416f40280534991aad3b965e6cd2fe6dbee862ec204bf49538d847603a4b0f87116b4071daf9d32b8a7e121cb4726819081badb01b251de92f882b" #h"ebaf28f36e6c04086e352d88e8fee5fa3e2e149fca76cff6f86401eb") (:digest-test #h"76227b51584d8175ba43e9339f4e1802485c554d48a7b9bd9fadd917d330d4f227bb6f40f1bd148aa55ea2cdabaed8a4604b941d665ba173ecd39344cd50ad459e441723b0aa3661e2f96622d94625bdf665987f539855ffe895e0105d7b6efd3a8270e0e554f2d7438bf47e5350d2a16ccf02367c0a8972ce128d6cefce5448dff7aa7c55a025ab1cfedcd6abcac7d86594cb2437564024207fb5f66e1641f402083bc34d928082817d797435013f550df8daf313d66fd3b2ca8fde202004c2a1915bb71d82f54709bffe96f2073745aedf4d3def0ede1d209f4669a4abe864431f1f918091a5dda536e544a1686a3b64c9d55f8146638519e3377f2456d808a7e3319749b72d91d9183f87ab8155e29f31cf0d3af1adb9263cfb1899e166fbc1cbb3c9ed62a7ca4f026148fe235b8e154dab1308a2957d7fcb37eb2d459dfcda885757087faf12f2f1f105c983075f7439090a2dddab56b3ad645df5b3a75b7f119925a7a52aa2c9eb8971e0ca20b726f1989dc0a3fcec64f312981a63ab9c0e8154c648cf584eab612d23e6546b06875dcba7e71830c291ac3c974bf694bdaee514f0d90983562087b37a010fc5c294b183ab9a2e082cb4555fd629e4103227b121e5fb9d33ab1992449ac579c5377bd7f70de13e5850ee50fed9846fb4ba6e377b29ef5045568ad889682ac558c87a30edb8872da0618fb83f1c8b73929cf9eb964c4287a4d2278b6fe751837ef3f4c8e411c3e49aa99427b0ef3f61702ec8c05095170f3441ab3e9f68b83415fe3be092d855d4652de4b90ea0ef12b833960affbdc5e6cca200a322db6eeaf8c57af6b11400caf5d00440fcd844b8e3a6ce539cefead46a973113b3e577f3db30697d4ec88acec697010f93fb2546fae908450bd4085ebd64cefd417b34135fc5020d2050100b9383433586a871f654fcd1f8e52dd03e6001b2d3ff7809e99c7f831274b403451e56d372832d39c9cc1df66ef8cea52463608c7a31f398a02ef2a31fedb326aeac7431ddc4c11e15681431f4daaac75cf5d103d108b8325c6924a440498f0585ac656fde645bfe2ce2fb243b32f952deb9317a900f1743279bddf41f4ad5dc3ac38e3dfd46fe0dd1e8bc81a3d565e596288d4a8923cbe33f3e869486d34a34d3354df050c5d68adcd6d69d72281c1f2eccaa79b9b62a87d0d635cc20a15f5978ab2620de824ea8822d5cfcd32b91ccf8c1f55bc8ca1176cac5a0a243782584a347dacfa05731b51162d8e45ad980f8c7bfafcd4cd8cbd7d0e42231d27e3856cc5c9e582a20478f98171300f768f7a3a221ce092d24d319fdc452290140714b5a8291f4f89c50ff198244ffcdc7245d0383a4a3b166872c6f6ef446d553ffb658df73ca748c06247ff880fa978bad0ec38ea23d45b3c2f1d83356e2fb1be9e8e769b788e576a9bf0ed219af" #h"d0d9633611f69865a2b88afc358455b9e01dca99ea5f68a5da345f3c") ironclad-0.57/testing/test-vectors/blake2s-mac.testvec000066400000000000000000000076521420372057600230570ustar00rootroot00000000000000(:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"" #h"48a8997da407876b3d79c0d92325ad3b89cbb754d86ab71aee047ad345fd2c49") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"00" #h"40d15fee7c328830166ac3f918650f807e7e01e177258cdc0a39b11f598066f1") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"000102030405" #h"fdd8993dcd43f696d44f3cea0ff35345234ec8ee083eb3cada017c7f78c17143") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"000102030405060708090a0b" #h"fba16169b2c3ee105be6e1e650e5cbf40746b6753d036ab55179014ad7ef6651") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"000102030405060708090a0b0c0d0e0f10111213141516" #h"be1fe3c4c04018c54c4a0f6b9a2ed3c53abe3a9f76b4d26de56fc9ae95059a99") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324" #h"62bf8a9c32a5bccf290b6c474d75b2a2a4093f1a9e27139433a8f2b3bce7b8d7") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132" #h"4f82de03b9504793b82a07a0bdcdff314d759e7b62d26b784946b0d36f916f52") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566" #h"09bde6f152218dc92c41d7f45387e63e5869d807ec70b821405dbd884b7fcf4b") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d" #h"3bfefa3301aa55c080190cffda8eae51d9af488b4c1f24c3d9a75242fd8ea01d") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4" #h"b6e76c330f021a5bda65875010b0edf09126c0f510ea849048192003aef4c61c") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7" #h"7d620d90fe69fa469a6538388970a1aa09bb48a2d59b347b97e8ce71f48c7f46") (:mac-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe" #h"3fb735061abc519dfe979e54c1ee5bfad0a9d858b3315bad34bde999efd724dd") ironclad-0.57/testing/test-vectors/blake2s.testvec000066400000000000000000000102501420372057600223050ustar00rootroot00000000000000(:digest-test #h"" #h"69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9") (:digest-test #h"23" #h"0d5de5be92991c1930f86957b7fa1351af6750c9e6dd13246bf0a0d264312f41") (:digest-test #h"639f" #h"ea2a1bd642916200737a0d9b8a6afa54326b148a07ba50eca9abff886858042f") (:digest-test #h"764ccb" #h"07b65b2473bd1c35a872c555cfc28d7d89c1aa68622d9d2e81c4a3b41ad4d37a") (:digest-test #h"aff5374b" #h"edb89d2a13a5511fd321b7bd1971109442b910fd881ff98ccca8e992b227cf70") (:digest-test #h"355ec01e94" #h"90bec761d87dbb8040fa2a8aca50a3e1afa8d98e5d947d02e9aca5d87f3b7cac") (:digest-test #h"12c75277b8ee" #h"9fef10d1ff254dab6d7770d0f4506f7de4132a0aeef50f8553aefa1f01f81fee") (:digest-test #h"de5e254059cb09" #h"d34acfccb3e3628bff77b06506c56b21ec105ce03725a810d2e3bff66f04e7af") (:digest-test #h"7b43c42246bd1d0e" #h"25adfa1c021067cb63e2995e6d38f5c30b9e298c1458894f312857bd73890788") (:digest-test #h"66dd735ab0686371ef" #h"021effed02b6106469cbdea16db6a786422175743b5c45dbf5948c1f7a09736c") (:digest-test #h"4715a4fef52a3d34448f" #h"50a03cc3d181b329af5e32f030c72d9b9d3af743ab4fb05be8934103e29491ee") (:digest-test #h"5988bdbc5a19fa24afd183a94bfb25acf70899179065eaf360d9f5f7d7c715bdf46b6d30791776f3b043da5976a2b6a9064d732490103c08d84acc9c87ad792e1fe741f51cfb3850306fefdfaec0dcbd73e39f0216498e612643770a15c149d510313d8d0bf2c27d105401e54ab636fb07711e055dd8ebced493042704cf50" #h"e18445a73e4967023322a393ee0f2941853dc981421175e892fbb45a4f0e4e4f") (:digest-test #h"acd5a0e8e7c6b801176c5f2679e88ca6a54fdd1137e48b3620fbaafc523e0a7ee6e7c92fb0d4ab6b73d7dffe0ca4c08862a17a9c6729a5adf6715adb9737e2b09095176f07451a6ae251b9b5f6b9aefdf6c42a98a0db2a1c16bdb176ebde02fa4e2259aab8ba02ec39a2756c7321d1644381a7bb77f1dd5d63de205427b2cb63" #h"bc15cf68e52f1e66636ddf88b312f9050edef6f7bd3fc6195cc159c9507ab0ab") (:digest-test #h"98efe0c894f115c7eb88c014002850e8d6fc839b094f59892cd74abe036dee99d50306b00a783e74219ba5289cc833faa38e9aad9b983a92057bfe62e61850aa48d56d445923416f40280534991aad3b965e6cd2fe6dbee862ec204bf49538d847603a4b0f87116b4071daf9d32b8a7e121cb4726819081badb01b251de92f882b" #h"ff2d6c016d1c16727115f85ff97efeabeb538a1abf6a868a40d81422e9a818f5") (:digest-test #h"76227b51584d8175ba43e9339f4e1802485c554d48a7b9bd9fadd917d330d4f227bb6f40f1bd148aa55ea2cdabaed8a4604b941d665ba173ecd39344cd50ad459e441723b0aa3661e2f96622d94625bdf665987f539855ffe895e0105d7b6efd3a8270e0e554f2d7438bf47e5350d2a16ccf02367c0a8972ce128d6cefce5448dff7aa7c55a025ab1cfedcd6abcac7d86594cb2437564024207fb5f66e1641f402083bc34d928082817d797435013f550df8daf313d66fd3b2ca8fde202004c2a1915bb71d82f54709bffe96f2073745aedf4d3def0ede1d209f4669a4abe864431f1f918091a5dda536e544a1686a3b64c9d55f8146638519e3377f2456d808a7e3319749b72d91d9183f87ab8155e29f31cf0d3af1adb9263cfb1899e166fbc1cbb3c9ed62a7ca4f026148fe235b8e154dab1308a2957d7fcb37eb2d459dfcda885757087faf12f2f1f105c983075f7439090a2dddab56b3ad645df5b3a75b7f119925a7a52aa2c9eb8971e0ca20b726f1989dc0a3fcec64f312981a63ab9c0e8154c648cf584eab612d23e6546b06875dcba7e71830c291ac3c974bf694bdaee514f0d90983562087b37a010fc5c294b183ab9a2e082cb4555fd629e4103227b121e5fb9d33ab1992449ac579c5377bd7f70de13e5850ee50fed9846fb4ba6e377b29ef5045568ad889682ac558c87a30edb8872da0618fb83f1c8b73929cf9eb964c4287a4d2278b6fe751837ef3f4c8e411c3e49aa99427b0ef3f61702ec8c05095170f3441ab3e9f68b83415fe3be092d855d4652de4b90ea0ef12b833960affbdc5e6cca200a322db6eeaf8c57af6b11400caf5d00440fcd844b8e3a6ce539cefead46a973113b3e577f3db30697d4ec88acec697010f93fb2546fae908450bd4085ebd64cefd417b34135fc5020d2050100b9383433586a871f654fcd1f8e52dd03e6001b2d3ff7809e99c7f831274b403451e56d372832d39c9cc1df66ef8cea52463608c7a31f398a02ef2a31fedb326aeac7431ddc4c11e15681431f4daaac75cf5d103d108b8325c6924a440498f0585ac656fde645bfe2ce2fb243b32f952deb9317a900f1743279bddf41f4ad5dc3ac38e3dfd46fe0dd1e8bc81a3d565e596288d4a8923cbe33f3e869486d34a34d3354df050c5d68adcd6d69d72281c1f2eccaa79b9b62a87d0d635cc20a15f5978ab2620de824ea8822d5cfcd32b91ccf8c1f55bc8ca1176cac5a0a243782584a347dacfa05731b51162d8e45ad980f8c7bfafcd4cd8cbd7d0e42231d27e3856cc5c9e582a20478f98171300f768f7a3a221ce092d24d319fdc452290140714b5a8291f4f89c50ff198244ffcdc7245d0383a4a3b166872c6f6ef446d553ffb658df73ca748c06247ff880fa978bad0ec38ea23d45b3c2f1d83356e2fb1be9e8e769b788e576a9bf0ed219af" #h"3fe501821e6ea236f9d84e185bf036beddd6a58ca4730290dc7097629cdc4545") ironclad-0.57/testing/test-vectors/blowfish.testvec000066400000000000000000000156101420372057600226040ustar00rootroot00000000000000(:ecb-mode-test #h"0000000000000000" #h"0000000000000000" #h"4EF997456198DD78") (:ecb-mode-test #h"FFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFF" #h"51866FD5B85ECB8A") (:ecb-mode-test #h"3000000000000000" #h"1000000000000001" #h"7D856F9A613063F2") (:ecb-mode-test #h"1111111111111111" #h"1111111111111111" #h"2466DD878B963C9D") (:ecb-mode-test #h"0123456789ABCDEF" #h"1111111111111111" #h"61F9C3802281B096") (:ecb-mode-test #h"1111111111111111" #h"0123456789ABCDEF" #h"7D0CC630AFDA1EC7") (:ecb-mode-test #h"0000000000000000" #h"0000000000000000" #h"4EF997456198DD78") (:ecb-mode-test #h"FEDCBA9876543210" #h"0123456789ABCDEF" #h"0ACEAB0FC6A0A28D") (:ecb-mode-test #h"7CA110454A1A6E57" #h"01A1D6D039776742" #h"59C68245EB05282B") (:ecb-mode-test #h"0131D9619DC1376E" #h"5CD54CA83DEF57DA" #h"B1B8CC0B250F09A0") (:ecb-mode-test #h"07A1133E4A0B2686" #h"0248D43806F67172" #h"1730E5778BEA1DA4") (:ecb-mode-test #h"3849674C2602319E" #h"51454B582DDF440A" #h"A25E7856CF2651EB") (:ecb-mode-test #h"04B915BA43FEB5B6" #h"42FD443059577FA2" #h"353882B109CE8F1A") (:ecb-mode-test #h"0113B970FD34F2CE" #h"059B5E0851CF143A" #h"48F4D0884C379918") (:ecb-mode-test #h"0170F175468FB5E6" #h"0756D8E0774761D2" #h"432193B78951FC98") (:ecb-mode-test #h"43297FAD38E373FE" #h"762514B829BF486A" #h"13F04154D69D1AE5") (:ecb-mode-test #h"07A7137045DA2A16" #h"3BDD119049372802" #h"2EEDDA93FFD39C79") (:ecb-mode-test #h"04689104C2FD3B2F" #h"26955F6835AF609A" #h"D887E0393C2DA6E3") (:ecb-mode-test #h"37D06BB516CB7546" #h"164D5E404F275232" #h"5F99D04F5B163969") (:ecb-mode-test #h"1F08260D1AC2465E" #h"6B056E18759F5CCA" #h"4A057A3B24D3977B") (:ecb-mode-test #h"584023641ABA6176" #h"004BD6EF09176062" #h"452031C1E4FADA8E") (:ecb-mode-test #h"025816164629B007" #h"480D39006EE762F2" #h"7555AE39F59B87BD") (:ecb-mode-test #h"49793EBC79B3258F" #h"437540C8698F3CFA" #h"53C55F9CB49FC019") (:ecb-mode-test #h"4FB05E1515AB73A7" #h"072D43A077075292" #h"7A8E7BFA937E89A3") (:ecb-mode-test #h"49E95D6D4CA229BF" #h"02FE55778117F12A" #h"CF9C5D7A4986ADB5") (:ecb-mode-test #h"018310DC409B26D6" #h"1D9D5C5018F728C2" #h"D1ABB290658BC778") (:ecb-mode-test #h"1C587F1C13924FEF" #h"305532286D6F295A" #h"55CB3774D13EF201") (:ecb-mode-test #h"0101010101010101" #h"0123456789ABCDEF" #h"FA34EC4847B268B2") (:ecb-mode-test #h"1F1F1F1F0E0E0E0E" #h"0123456789ABCDEF" #h"A790795108EA3CAE") (:ecb-mode-test #h"E0FEE0FEF1FEF1FE" #h"0123456789ABCDEF" #h"C39E072D9FAC631D") (:ecb-mode-test #h"0000000000000000" #h"FFFFFFFFFFFFFFFF" #h"014933E0CDAFF6E4") (:ecb-mode-test #h"FFFFFFFFFFFFFFFF" #h"0000000000000000" #h"F21E9A77B71C49BC") (:ecb-mode-test #h"0123456789ABCDEF" #h"0000000000000000" #h"245946885754369A") (:ecb-mode-test #h"FEDCBA9876543210" #h"FFFFFFFFFFFFFFFF" #h"6B5C5A9C5D9E0A5A") ;;; variable key length tests (:ecb-mode-test #h"F0" #h"FEDCBA9876543210" #h"F9AD597C49DB005E") (:ecb-mode-test #h"F0E1" #h"FEDCBA9876543210" #h"E91D21C1D961A6D6") (:ecb-mode-test #h"F0E1D2" #h"FEDCBA9876543210" #h"E9C2B70A1BC65CF3") (:ecb-mode-test #h"F0E1D2C3" #h"FEDCBA9876543210" #h"BE1E639408640F05") (:ecb-mode-test #h"F0E1D2C3B4" #h"FEDCBA9876543210" #h"B39E44481BDB1E6E") (:ecb-mode-test #h"F0E1D2C3B4A5" #h"FEDCBA9876543210" #h"9457AA83B1928C0D") (:ecb-mode-test #h"F0E1D2C3B4A596" #h"FEDCBA9876543210" #h"8BB77032F960629D") (:ecb-mode-test #h"F0E1D2C3B4A59687" #h"FEDCBA9876543210" #h"E87A244E2CC85E82") (:ecb-mode-test #h"F0E1D2C3B4A5968778" #h"FEDCBA9876543210" #h"15750E7A4F4EC577") (:ecb-mode-test #h"F0E1D2C3B4A596877869" #h"FEDCBA9876543210" #h"122BA70B3AB64AE0") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A" #h"FEDCBA9876543210" #h"3A833C9AFFC537F6") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A4B" #h"FEDCBA9876543210" #h"9409DA87A90F6BF2") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A4B3C" #h"FEDCBA9876543210" #h"884F80625060B8B4") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A4B3C2D" #h"FEDCBA9876543210" #h"1F85031C19E11968") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A4B3C2D1E" #h"FEDCBA9876543210" #h"79D9373A714CA34F") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A4B3C2D1E0F" #h"FEDCBA9876543210" #h"93142887EE3BE15C") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A4B3C2D1E0F00" #h"FEDCBA9876543210" #h"03429E838CE2D14B") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A4B3C2D1E0F0011" #h"FEDCBA9876543210" #h"A4299E27469FF67B") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A4B3C2D1E0F001122" #h"FEDCBA9876543210" #h"AFD5AED1C1BC96A8") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A4B3C2D1E0F00112233" #h"FEDCBA9876543210" #h"10851C0E3858DA9F") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A4B3C2D1E0F0011223344" #h"FEDCBA9876543210" #h"E6F51ED79B9DB21F") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A4B3C2D1E0F001122334455" #h"FEDCBA9876543210" #h"64A6E14AFD36B46F") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A4B3C2D1E0F00112233445566" #h"FEDCBA9876543210" #h"80C7D7D45A5479AD") (:ecb-mode-test #h"F0E1D2C3B4A5968778695A4B3C2D1E0F0011223344556677" #h"FEDCBA9876543210" #h"05044B62FA52D080") (:keystream-test #h"b5d5a298d65a5788bdcd4226d9b4b4f57f01bf7795f458599aa2bfea07e5cce26be9a06ae98094452d2517f39214592fdbb9e13f163b8576" #h"b1692e647842aa72" #h"31220599ac1b245a0c621129e542744fe2f8f1db12d0bdb31aae6fbfde6cb3da0d2b10256127ba6199aecbcde5b26828406c7abecabc4b83cca7f6c299949d4652fe7d1a7af65acb2df9bea15fbdc1feb481c2d1c9cb8644d22ec1d79a7b08e5afd6f30a9224530507ac26e410756352e9f38e4609d3ffd11f34a6a6b4167cf6caccb80c875fa459ce731ad0f7f445773af1346ad8c9efce11697d2c89c81a3f6b237d18676d585a903e3735a09198c44c34fe2ed2ec128b88bd662525b2b00d57b880d1bca14429d90913beba0efe79ad8799c7b3c8e8ba980d0ef6357e211e51b1176b79484fbd322de88b441c1a027308f80a8c47da1cf5be0b26559a1a5d164773cd3f0090f14924dba69d11ec526e3dd3dc5170036d2adc18028c9d7821cc84688b03417e68aed6de5f18a918a174152aea5f06d5fd680e045725edcbffa757080f8f80a15aef22ce7b6701d62b1cbf39614ddc6a1c1c85e814840e81254a38b845aadfc67d9f85d68ce3eff7a6ef44f98147fb1c759d53aa0d59c9fa35229705da9524b90206cca1d1aee76d93631884ffa9f590e6dcc8ac741ea28e778b756c16beef3fc30585ec6b387856d9f9a580ff64b5acc474e0c97b8584942030af934f01db797d68e6ccd6f4d09d94a5f52543a96fd689d01f1c78953ff737d7348771217aa869f94618ce1767e9d293024a74a05044db3bda9819ff5c0f18ec6c9bbf4cd993d50e5b3ed6063267a0a94c62ccf7d5b5aec4609206ff32a1c826a1452414abef8830a18f9b1bafd623f239aa6fe641a4dc495ec6691f5ff6a447d95f26feade5e2b241cec2d83584031c0639f2f6cbfe9709ff5a07d7c3c9663111a899a9c1893605ed12dddfaba66924b0203e8f927fb0f943b40811e228e269b946e7ea01a1f526418f8ffe4fcfe7a2f223e809c151c50de483029bf8415f9a7a4667522824c5d0ec31313e3b6f069e65fefa7ed55c97f27dd548c0385807dca09422257e683d399c5a17d88432b2c20cc0a25de9f7a0b1be533f6fb0e47fe4d25a8d21cddd888453440217a8cfbe5d38a4b231c8b7d25191db30bb32b1b7a7c8c9aeddb9698e15d4aa60af20124a2b4e22555eb79b90f4c1ce49514cb3af762796570986475ea26189a4c90feffc33836b373d26521d5364c9cf1cfe5a938c0a0f9aa3b125991804e9e608b001b654e68c4c3ac4b9a4e0aeeb521bfa97151a7cf6ff22828436895ee72a04dbc332cb9a77cf4c2559de07a3de31e6517090dc7865bda222ccb7a60b370542f1b19606642cf0088ff4788bf7cf70e4c5db25a79d37cf1b25790ecfe0486166004d249998d4df74ac116e2864670c801cafa01abca8672ea3c7df66bb48e5bf1290dff217b3ae27599156c668eb1b16bd6b9a43db1f3a0f28e6bf") ironclad-0.57/testing/test-vectors/camellia.testvec000066400000000000000000000224401420372057600225350ustar00rootroot00000000000000;;;; Camellia test vectors (:ecb-mode-test #h"80000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6C227F749319A3AA7DA235A9BBA05A2C") (:ecb-mode-test #h"40000000000000000000000000000000" #h"00000000000000000000000000000000" #h"F04D51E45E70FB6DEE0D16A204FBBA16") (:ecb-mode-test #h"20000000000000000000000000000000" #h"00000000000000000000000000000000" #h"ED44242E619F8C32EAA2D3641DA47EA4") (:ecb-mode-test #h"10000000000000000000000000000000" #h"00000000000000000000000000000000" #h"AC640BBBF84CD3B8E8258BF66C210AE2") (:ecb-mode-test #h"08000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8A42BDA76C84B8960B23530100AFB748") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3D028025B156327C17F762C1F2CBCA71") (:ecb-mode-test #h"01010101010101010101010101010101" #h"01010101010101010101010101010101" #h"637084CB1120D6F25DB618893040AA27") (:ecb-mode-test #h"02020202020202020202020202020202" #h"02020202020202020202020202020202" #h"612834AAC9EF906BAEAA076E1C75179D") (:ecb-mode-test #h"07070707070707070707070707070707" #h"07070707070707070707070707070707" #h"27E9AB0117A37D228B77B29B38B3836F") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"FC1094A0A2850499D874B6DDC1EBA0B7") (:ecb-mode-test #h"13131313131313131313131313131313" #h"13131313131313131313131313131313" #h"800996B5B363ACAB3FB8982F9BBE767F") (:ecb-mode-test #h"16161616161616161616161616161616" #h"16161616161616161616161616161616" #h"6C753853277756B8E0578FDC371A8738") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"B12E384030DE7B77866E758FB251CCFF") (:ecb-mode-test #h"28282828282828282828282828282828" #h"28282828282828282828282828282828" #h"63F70DD87B9D63FC79628DECC6F34605") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"6F17B7D7C899B48DAEAD1E90F22AB180") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"1BB5EB8732CBAB2E3FC334FAAB8BBFBC") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"AAE7DA4B977F5EED28F9AF01F8FD47B4") (:ecb-mode-test #h"800000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"1B6220D365C2176C1D41A5826520FCA1") (:ecb-mode-test #h"400000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"0F6DAEEA95CFC8925F23AFA932DF489B") (:ecb-mode-test #h"200000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"7330199225AD384F8DD39582D61389BB") (:ecb-mode-test #h"100000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"2CC5A47D5C62F70634E27BA332D37D53") (:ecb-mode-test #h"080000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"CDF1D23AB15E20AE8E9A2FE380920897") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"56E1E129CA5C02C7F9AC6AFDEF86ADC3") (:ecb-mode-test #h"010101010101010101010101010101010101010101010101" #h"01010101010101010101010101010101" #h"8F764397C10BE84BA876CEEFA4225BFF") (:ecb-mode-test #h"020202020202020202020202020202020202020202020202" #h"02020202020202020202020202020202" #h"60B00674BFD444D07B5A19851E6151CD") (:ecb-mode-test #h"070707070707070707070707070707070707070707070707" #h"07070707070707070707070707070707" #h"0068C08827CBD904A3C0AF89A35CD8E6") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"7788EEE46AC2927434A93D3B5D295DF3") (:ecb-mode-test #h"131313131313131313131313131313131313131313131313" #h"13131313131313131313131313131313" #h"EE4E318D27820F691BD3BDA9617561A0") (:ecb-mode-test #h"161616161616161616161616161616161616161616161616" #h"16161616161616161616161616161616" #h"7E8DAEBBA15C7B9705B501998F61CC6E") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1EA1A5CC662DCA0B56B2BBF560A1B032") (:ecb-mode-test #h"282828282828282828282828282828282828282828282828" #h"28282828282828282828282828282828" #h"26150BB68C5529903D3624CB8F36D717") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"805211D0BD914F07AB1579EF9E3827EE") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"99859E56FE0DAB67CDE755E4790ED51D") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"9DAF4DBBBC81465BC4270129C522ABCB") (:ecb-mode-test #h"8000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"2136FABDA091DFB5171B94B8EFBB5D08") (:ecb-mode-test #h"4000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6EBC4F33B3EADA5DBF25130F3D02CD34") (:ecb-mode-test #h"2000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3A7BCDC53A1F02EF20C79CFCE107D38B") (:ecb-mode-test #h"1000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"88A96052B61C5A621EE9A6316A42ED4A") (:ecb-mode-test #h"0800000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"CBD7A2D8354B2DA972A0950BDFFF2CBD") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"396154111ADEFC500CF6E5C99038BC17") (:ecb-mode-test #h"0101010101010101010101010101010101010101010101010101010101010101" #h"01010101010101010101010101010101" #h"438D0C2E7E86869B56EBA23B66086A01") (:ecb-mode-test #h"0202020202020202020202020202020202020202020202020202020202020202" #h"02020202020202020202020202020202" #h"D4F553BFA794F55EF3B7A578629F6DEA") (:ecb-mode-test #h"0707070707070707070707070707070707070707070707070707070707070707" #h"07070707070707070707070707070707" #h"5F6BF9AC53A680EACAE7583A8933DA8E") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"27AA99F8E6EA08D8E8D5A528EE4774B6") (:ecb-mode-test #h"1313131313131313131313131313131313131313131313131313131313131313" #h"13131313131313131313131313131313" #h"8819C97D05C91A23062E9851F07EF6F7") (:ecb-mode-test #h"1616161616161616161616161616161616161616161616161616161616161616" #h"16161616161616161616161616161616" #h"6269E137F8480D555D1B24F392162DBA") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"23172E86AF4A140A78CB1DC776270FFF") (:ecb-mode-test #h"2828282828282828282828282828282828282828282828282828282828282828" #h"28282828282828282828282828282828" #h"6D9DF175ED0DAFE550619CF8362B98E8") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"68FD6F6592AE5BD9245FA959FE1CA849") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"71360ED44C9FAF8F1139D31252A35F49") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"B99BA33ECB86DA790FF0CC4F0D41A065") (:keystream-test #h"1c157697bb6ae99c2c00521feae39243c81eb5b55d0a84198558a390144aec97" #h"d8a0656c3a780ec38a3e4585ca67ee52" #h"e1e6ae7553f9144b393069b32d163a9344f4624bef99803683467a530114a1b759a992688ac5853f1f6ea27da93483930e19fd9149696514d134df1609f3599bc89906bf5125c576dd6c9f91284b9c25bb9bf9775cf1f80c22e9b7f499b70dad4a6685d1802dd609312ce3d41c551dc9f5faa17d5092ceabc7c4afd9e765c1ab3568109db87e2ba2e22a53c38e919bf57dc1a22a00495b91c4299ceb23ce76e28543a7a993aec8b324ace4ee333068b1c953e6355a4ae6d6486d76f08621364cca4d52aee92e38a1146139f1199da2798d4503486a36875a81e68d1c85d1049f6a05908539a4ec98efcd6f5f2bb30066a377e7ce93985b06b1ce78698974b0877605cde56127fa5b034ffeb20bfcae943b1cf940a220bdb6cadf82c51acd3421417b361d7089cc3e7de292e12438a4de035c2162a248b33d9f069f6cf1729645601d2a0eed933e357019e18203b6c1a45456c33975486fdf92b0566270e7fc7d46247cdfa935792f8325dc60b6ace171b4ea4458ecadc4ae4bf9568ab8e4d3f7165047052d82612f91ac28f681e3b5ba93c94a5e1c88fd1fc3188b34035c2b0239a4f5ba6d28a6eaa8061bd8fdf29a61ab39b8acb6ecf5d7be5d0a62b4e756e8093282672b24b7b4dc187e72a20a5075441171eeb471c743fe81f7e2df0b985687d0642fe59ef0f2ce95a23d2bf3b3c7b890527fe2e1133705971a615a5b4998fe188c5161bf52858a846be95ce82b172ebef01250cacb01675415f7d09d49d1d5a5dda20db313419e6d8d677b2e1d7811325168d3d82c777847a164efe7dfd9fd7cb5622747269b84819b34e9591b4f0403da736a0dd71b35906fbca420b469b03d269852596ca5998fa009513dd1163e30d4557f85051bc346d3f414db58edfc3548753449781f1830f22201336851404f5f239b720c3a36ea09751682b6a9105f98b119ff3b4d8665c2c4cb506be6f9e6ef3b5b67714365e511d156589ffcb3390daaa1e5d20cb8055c9052a9a0a879b5e837f2b2d958e01d96af54a896d2e71de8fe20999742b706e01081fe1f475ec7c9e113b4b2505764ca8d42e96d8810e28f6586b75ed3b6ed6776ef1a6904e3da9650525e6e344684457968ec8b193c5197856d735a8122893030da2511ca575569ac16ec5f629154a7d771116d439b7174c3f321877467c5d0798e4c027cfb372dba132059727c02d25f1524c52827191f32450d8a9392b126ffe5beae76bba8ba1633d4d286f20706a56b434e750e06e512739bd4a0db55cba98209aa79d7de3b58b96dac560b0b0dcccdb79555b4e2ef7aa0e378da01679df4a8dbae66605136da165d7dd25e5af4df0d3063eeccb360756e70a73563c9d7230f1d2c9b404b31f051b876b31e5d674710c8d01c0e3fecc4697c0214") ironclad-0.57/testing/test-vectors/cast5.testvec000066400000000000000000001310601420372057600220040ustar00rootroot00000000000000;;; tests from the RFC (:ecb-mode-test #h"0123456712" #h"0123456789ABCDEF" #h"7AC816D16E9B302E") (:ecb-mode-test #h"01234567123456782345" #h"0123456789ABCDEF" #h"EB6A711A2C02271B") (:ecb-mode-test #h"0123456712345678234567893456789A" #h"0123456789ABCDEF" #h"238B4FE5847E44B2") ;;; tests from NESSIE (http://www.cryptonessie.org/) (:ecb-mode-test #h"80000000000000000000000000000000" #h"0000000000000000" #h"EF854DE5D7D1895B") (:ecb-mode-test #h"40000000000000000000000000000000" #h"0000000000000000" #h"3E50834A3AFDD951") (:ecb-mode-test #h"20000000000000000000000000000000" #h"0000000000000000" #h"6C5FA655407A380E") (:ecb-mode-test #h"10000000000000000000000000000000" #h"0000000000000000" #h"B0DFC4E5C9F257BC") (:ecb-mode-test #h"08000000000000000000000000000000" #h"0000000000000000" #h"3F822FB3B0C9C28C") (:ecb-mode-test #h"04000000000000000000000000000000" #h"0000000000000000" #h"75B2AC4AB060F043") (:ecb-mode-test #h"02000000000000000000000000000000" #h"0000000000000000" #h"935AC5D1CCE3C5CD") (:ecb-mode-test #h"01000000000000000000000000000000" #h"0000000000000000" #h"9E468256E0979A5F") (:ecb-mode-test #h"00800000000000000000000000000000" #h"0000000000000000" #h"59F292BD3B08D7AC") (:ecb-mode-test #h"00400000000000000000000000000000" #h"0000000000000000" #h"546C4968B908E896") (:ecb-mode-test #h"00200000000000000000000000000000" #h"0000000000000000" #h"D43D7E92F3AA127F") (:ecb-mode-test #h"00100000000000000000000000000000" #h"0000000000000000" #h"7AC9BE73E70B1312") (:ecb-mode-test #h"00080000000000000000000000000000" #h"0000000000000000" #h"0600189023CA09D1") (:ecb-mode-test #h"00040000000000000000000000000000" #h"0000000000000000" #h"2FB6C23C21451925") (:ecb-mode-test #h"00020000000000000000000000000000" #h"0000000000000000" #h"8803FB7B0DB7A9A3") (:ecb-mode-test #h"00010000000000000000000000000000" #h"0000000000000000" #h"93A4702D63844097") (:ecb-mode-test #h"00008000000000000000000000000000" #h"0000000000000000" #h"02F5E8FAECBD2EC2") (:ecb-mode-test #h"00004000000000000000000000000000" #h"0000000000000000" #h"3F92299A5CC63B4A") (:ecb-mode-test #h"00002000000000000000000000000000" #h"0000000000000000" #h"484DCE47A87047F3") (:ecb-mode-test #h"00001000000000000000000000000000" #h"0000000000000000" #h"2D51FE333776874E") (:ecb-mode-test #h"00000800000000000000000000000000" #h"0000000000000000" #h"01E49D47516FFEB1") (:ecb-mode-test #h"00000400000000000000000000000000" #h"0000000000000000" #h"F4914E49CEADD52D") (:ecb-mode-test #h"00000200000000000000000000000000" #h"0000000000000000" #h"B58E493FDA5ED282") (:ecb-mode-test #h"00000100000000000000000000000000" #h"0000000000000000" #h"4C6CED3D1759C223") (:ecb-mode-test #h"00000080000000000000000000000000" #h"0000000000000000" #h"C05CFC0A3B6360EA") (:ecb-mode-test #h"00000040000000000000000000000000" #h"0000000000000000" #h"20DB6A71F0B2DB90") (:ecb-mode-test #h"00000020000000000000000000000000" #h"0000000000000000" #h"EEAC9804EBA612D7") (:ecb-mode-test #h"00000010000000000000000000000000" #h"0000000000000000" #h"65B4AA119CDD25AF") (:ecb-mode-test #h"00000008000000000000000000000000" #h"0000000000000000" #h"F781BBAB06314E4D") (:ecb-mode-test #h"00000004000000000000000000000000" #h"0000000000000000" #h"1A2D537BC7AA0807") (:ecb-mode-test #h"00000002000000000000000000000000" #h"0000000000000000" #h"C425E1DE6236DE88") (:ecb-mode-test #h"00000001000000000000000000000000" #h"0000000000000000" #h"854911691D25C05F") (:ecb-mode-test #h"00000000800000000000000000000000" #h"0000000000000000" #h"016D443DD0EF4506") (:ecb-mode-test #h"00000000400000000000000000000000" #h"0000000000000000" #h"5C1381E9C8BFCDCC") (:ecb-mode-test #h"00000000200000000000000000000000" #h"0000000000000000" #h"BACFB74E0D6BE8B6") (:ecb-mode-test #h"00000000100000000000000000000000" #h"0000000000000000" #h"168158BA1958DD41") (:ecb-mode-test #h"00000000080000000000000000000000" #h"0000000000000000" #h"322D903D31B14135") (:ecb-mode-test #h"00000000040000000000000000000000" #h"0000000000000000" #h"D50F1567B1C3149F") (:ecb-mode-test #h"00000000020000000000000000000000" #h"0000000000000000" #h"CBADCB678491508C") (:ecb-mode-test #h"00000000010000000000000000000000" #h"0000000000000000" #h"22CF0E4D2C488AF2") (:ecb-mode-test #h"00000000008000000000000000000000" #h"0000000000000000" #h"BEE20899A559EF68") (:ecb-mode-test #h"00000000004000000000000000000000" #h"0000000000000000" #h"A3996936624E2B2C") (:ecb-mode-test #h"00000000002000000000000000000000" #h"0000000000000000" #h"8313130424DD980C") (:ecb-mode-test #h"00000000001000000000000000000000" #h"0000000000000000" #h"B28DF6C2F87CF763") (:ecb-mode-test #h"00000000000800000000000000000000" #h"0000000000000000" #h"0C1292506F532F78") (:ecb-mode-test #h"00000000000400000000000000000000" #h"0000000000000000" #h"B13AA665278546D5") (:ecb-mode-test #h"00000000000200000000000000000000" #h"0000000000000000" #h"30E40EA440176A8C") (:ecb-mode-test #h"00000000000100000000000000000000" #h"0000000000000000" #h"38434853FD54CB3B") (:ecb-mode-test #h"00000000000080000000000000000000" #h"0000000000000000" #h"A082786343D6E937") (:ecb-mode-test #h"00000000000040000000000000000000" #h"0000000000000000" #h"1F4C394EEE7BE70A") (:ecb-mode-test #h"00000000000020000000000000000000" #h"0000000000000000" #h"45A8ACC0C530A216") (:ecb-mode-test #h"00000000000010000000000000000000" #h"0000000000000000" #h"90341ACAF300CCCE") (:ecb-mode-test #h"00000000000008000000000000000000" #h"0000000000000000" #h"B791785F3A2038A0") (:ecb-mode-test #h"00000000000004000000000000000000" #h"0000000000000000" #h"5FB305CEA7D5E26C") (:ecb-mode-test #h"00000000000002000000000000000000" #h"0000000000000000" #h"1434F39FC8C46F29") (:ecb-mode-test #h"00000000000001000000000000000000" #h"0000000000000000" #h"F250342A891EBB2D") (:ecb-mode-test #h"00000000000000800000000000000000" #h"0000000000000000" #h"1F87C1DFF663D707") (:ecb-mode-test #h"00000000000000400000000000000000" #h"0000000000000000" #h"81B161F882EC1F22") (:ecb-mode-test #h"00000000000000200000000000000000" #h"0000000000000000" #h"8FD52EB0E9DD180A") (:ecb-mode-test #h"00000000000000100000000000000000" #h"0000000000000000" #h"4B3A39BE8061272D") (:ecb-mode-test #h"00000000000000080000000000000000" #h"0000000000000000" #h"3185204FD5BB8A4B") (:ecb-mode-test #h"00000000000000040000000000000000" #h"0000000000000000" #h"02E38E3579A134E4") (:ecb-mode-test #h"00000000000000020000000000000000" #h"0000000000000000" #h"F7BA0DA19ADBE4E6") (:ecb-mode-test #h"00000000000000010000000000000000" #h"0000000000000000" #h"2E8C4128D7022215") (:ecb-mode-test #h"00000000000000008000000000000000" #h"0000000000000000" #h"4E4796EF83C620FD") (:ecb-mode-test #h"00000000000000004000000000000000" #h"0000000000000000" #h"3482EA478149C884") (:ecb-mode-test #h"00000000000000002000000000000000" #h"0000000000000000" #h"46344736AF6FD584") (:ecb-mode-test #h"00000000000000001000000000000000" #h"0000000000000000" #h"B4D0EE3537A03475") (:ecb-mode-test #h"00000000000000000800000000000000" #h"0000000000000000" #h"8783A151DD7DAAB7") (:ecb-mode-test #h"00000000000000000400000000000000" #h"0000000000000000" #h"330156A864ABB7B0") (:ecb-mode-test #h"00000000000000000200000000000000" #h"0000000000000000" #h"FF82D24877E58781") (:ecb-mode-test #h"00000000000000000100000000000000" #h"0000000000000000" #h"23E4303830F8D85A") (:ecb-mode-test #h"00000000000000000080000000000000" #h"0000000000000000" #h"D81D32FF8E00A7B5") (:ecb-mode-test #h"00000000000000000040000000000000" #h"0000000000000000" #h"F8230811ADDFCDB0") (:ecb-mode-test #h"00000000000000000020000000000000" #h"0000000000000000" #h"655F264261BD89A4") (:ecb-mode-test #h"00000000000000000010000000000000" #h"0000000000000000" #h"81A2E3A49901B551") (:ecb-mode-test #h"00000000000000000008000000000000" #h"0000000000000000" #h"71DA16E5350E73A2") (:ecb-mode-test #h"00000000000000000004000000000000" #h"0000000000000000" #h"C25B521F4DC83BD7") (:ecb-mode-test #h"00000000000000000002000000000000" #h"0000000000000000" #h"60A0CD7A8C3DFE95") (:ecb-mode-test #h"00000000000000000001000000000000" #h"0000000000000000" #h"2CCAFA6B45FF4BA8") (:ecb-mode-test #h"00000000000000000000800000000000" #h"0000000000000000" #h"0413C755869B3D20") (:ecb-mode-test #h"00000000000000000000400000000000" #h"0000000000000000" #h"DBB16605E738A58A") (:ecb-mode-test #h"00000000000000000000200000000000" #h"0000000000000000" #h"E737E2DD10133F43") (:ecb-mode-test #h"00000000000000000000100000000000" #h"0000000000000000" #h"EAA0828A257F4663") (:ecb-mode-test #h"00000000000000000000080000000000" #h"0000000000000000" #h"6D72DAD84CA179D4") (:ecb-mode-test #h"00000000000000000000040000000000" #h"0000000000000000" #h"50B88BEDC5321569") (:ecb-mode-test #h"00000000000000000000020000000000" #h"0000000000000000" #h"83A8BFAAC0BB29AE") (:ecb-mode-test #h"00000000000000000000010000000000" #h"0000000000000000" #h"ED8E574A5A904809") (:ecb-mode-test #h"00000000000000000000008000000000" #h"0000000000000000" #h"1DB59E9707C97834") (:ecb-mode-test #h"00000000000000000000004000000000" #h"0000000000000000" #h"66F0E8C29BB0B9CF") (:ecb-mode-test #h"00000000000000000000002000000000" #h"0000000000000000" #h"B2ED3A1531C0D7F6") (:ecb-mode-test #h"00000000000000000000001000000000" #h"0000000000000000" #h"75D742554B503DCF") (:ecb-mode-test #h"00000000000000000000000800000000" #h"0000000000000000" #h"F4BF6E0D513C65D0") (:ecb-mode-test #h"00000000000000000000000400000000" #h"0000000000000000" #h"C49D1E4FF3C60AA7") (:ecb-mode-test #h"00000000000000000000000200000000" #h"0000000000000000" #h"36911221165FDDC2") (:ecb-mode-test #h"00000000000000000000000100000000" #h"0000000000000000" #h"9BF9D1598D21ACD2") (:ecb-mode-test #h"00000000000000000000000080000000" #h"0000000000000000" #h"330794307604F886") (:ecb-mode-test #h"00000000000000000000000040000000" #h"0000000000000000" #h"2DEA71658135D05F") (:ecb-mode-test #h"00000000000000000000000020000000" #h"0000000000000000" #h"F74167923282F52F") (:ecb-mode-test #h"00000000000000000000000010000000" #h"0000000000000000" #h"4A85B2D6D0D923BA") (:ecb-mode-test #h"00000000000000000000000008000000" #h"0000000000000000" #h"C2BA0E432C762ECC") (:ecb-mode-test #h"00000000000000000000000004000000" #h"0000000000000000" #h"C726E9A6D81EEE4D") (:ecb-mode-test #h"00000000000000000000000002000000" #h"0000000000000000" #h"60F7A8BE9DB706AA") (:ecb-mode-test #h"00000000000000000000000001000000" #h"0000000000000000" #h"D10E905544BF1044") (:ecb-mode-test #h"00000000000000000000000000800000" #h"0000000000000000" #h"8912579BE071FD03") (:ecb-mode-test #h"00000000000000000000000000400000" #h"0000000000000000" #h"4EF32D2359D73851") (:ecb-mode-test #h"00000000000000000000000000200000" #h"0000000000000000" #h"6A1E1D7707DCE956") (:ecb-mode-test #h"00000000000000000000000000100000" #h"0000000000000000" #h"898D5490B051FF78") (:ecb-mode-test #h"00000000000000000000000000080000" #h"0000000000000000" #h"19F6F03AAC2C2ED6") (:ecb-mode-test #h"00000000000000000000000000040000" #h"0000000000000000" #h"521EC33A6926B94D") (:ecb-mode-test #h"00000000000000000000000000020000" #h"0000000000000000" #h"D88C0E48553890FB") (:ecb-mode-test #h"00000000000000000000000000010000" #h"0000000000000000" #h"B3D2CC395834671F") (:ecb-mode-test #h"00000000000000000000000000008000" #h"0000000000000000" #h"E5B5723FB3F95A1E") (:ecb-mode-test #h"00000000000000000000000000004000" #h"0000000000000000" #h"050010F1770C302D") (:ecb-mode-test #h"00000000000000000000000000002000" #h"0000000000000000" #h"0F331B1B9151361A") (:ecb-mode-test #h"00000000000000000000000000001000" #h"0000000000000000" #h"472EAC6D605B0506") (:ecb-mode-test #h"00000000000000000000000000000800" #h"0000000000000000" #h"8C07518F6A78FFF7") (:ecb-mode-test #h"00000000000000000000000000000400" #h"0000000000000000" #h"3C6B6CD8950396FB") (:ecb-mode-test #h"00000000000000000000000000000200" #h"0000000000000000" #h"E45F8A602705E91D") (:ecb-mode-test #h"00000000000000000000000000000100" #h"0000000000000000" #h"411A32E76FCCC69D") (:ecb-mode-test #h"00000000000000000000000000000080" #h"0000000000000000" #h"79B212E51932147E") (:ecb-mode-test #h"00000000000000000000000000000040" #h"0000000000000000" #h"B5C3B4D357FCCC09") (:ecb-mode-test #h"00000000000000000000000000000020" #h"0000000000000000" #h"A376C6C50C472008") (:ecb-mode-test #h"00000000000000000000000000000010" #h"0000000000000000" #h"AAD5D1C6A101F3EF") (:ecb-mode-test #h"00000000000000000000000000000008" #h"0000000000000000" #h"D9FC8FCAD48C8207") (:ecb-mode-test #h"00000000000000000000000000000004" #h"0000000000000000" #h"4D9214E4B16C875C") (:ecb-mode-test #h"00000000000000000000000000000002" #h"0000000000000000" #h"AF87AB7B3BA5D255") (:ecb-mode-test #h"00000000000000000000000000000001" #h"0000000000000000" #h"C1E8328DABE3EE01") (:ecb-mode-test #h"00000000000000000000000000000000" #h"8000000000000000" #h"000D844AFCE35696") (:ecb-mode-test #h"00000000000000000000000000000000" #h"4000000000000000" #h"501C44F14E59ABB8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"2000000000000000" #h"C5F833B098A7B4BF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"1000000000000000" #h"12A3910F21AA9689") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0800000000000000" #h"A984BF3C4B606B8A") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0400000000000000" #h"01244E4D4573BEC9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0200000000000000" #h"33BBD030509A1AAE") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0100000000000000" #h"62C7D78705B69201") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0080000000000000" #h"C2CD4CEB8233AA2C") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0040000000000000" #h"3C518F056EEA080D") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0020000000000000" #h"B053D84D6D776A45") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0010000000000000" #h"F5976B5A23EBD435") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0008000000000000" #h"26EF4E726B4300C6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0004000000000000" #h"00DE9EE7EF40F784") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0002000000000000" #h"72C2E4721771ADB1") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0001000000000000" #h"6B4E05D55C726980") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000800000000000" #h"738F32218912DA4B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000400000000000" #h"20FC7693F51BCFEE") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000200000000000" #h"7B3D23EDE2E7F0CC") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000100000000000" #h"4BC5B57623107A6A") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000080000000000" #h"36DB7DB56B9DEDED") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000040000000000" #h"067DDC1B5D970425") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000020000000000" #h"9F024030D92CA56D") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000010000000000" #h"70F0BBB5B7668646") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000008000000000" #h"006EA1887A12D170") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000004000000000" #h"C0611754E09AA011") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000002000000000" #h"79BF5E2CAA6A3DAF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000001000000000" #h"46ED1F52B5B9559D") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000800000000" #h"D190E5631B73C5A6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000400000000" #h"0961B2ECFFD93933") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000200000000" #h"94264A0ED5203638") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000100000000" #h"C67A47D369B57B85") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000080000000" #h"342D7633EF48BCEB") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000040000000" #h"7EFC3B1845D986EB") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000020000000" #h"B56EA85BFFBC0FA4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000010000000" #h"CABE3D27862D5EFB") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000008000000" #h"BA4DF14185FF32AF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000004000000" #h"8F0289AA45946E16") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000002000000" #h"2192A1C13CAB0749") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000001000000" #h"5B577B8E9128FD84") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000800000" #h"4C4EA46E8C096255") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000400000" #h"0CB194032F16B8DA") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000200000" #h"4507939A7EC4040A") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000100000" #h"3276C89846D533C7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000080000" #h"AB68E284B76F7256") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000040000" #h"E3004D46218B9428") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000020000" #h"61BFF8D033E47310") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000010000" #h"E08CC3CAEFCAC0F8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000008000" #h"B986D33C7B8AF266") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000004000" #h"44296DF985D5B6B1") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000002000" #h"6E9D5710AB4C7C78") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000001000" #h"C9793934CFB0614C") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000800" #h"CDA94B6BFA73C69B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000400" #h"CAAD0D61CE248CA9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000200" #h"0FABE55E3A8B487A") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000100" #h"CC692E69AE887249") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000080" #h"06646851AE39901D") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000040" #h"3C9596DB1883D2DB") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000020" #h"095CCA9A1A84E38B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000010" #h"BCE9B8F3CC34E9F9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000008" #h"1B451B8B885A7DA8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000004" #h"0332D472F9FF9EE1") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000002" #h"5102D2D608639663") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000001" #h"D4B9607C9B9EEF9B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000000" #h"13C502B354D53871") (:ecb-mode-test #h"01010101010101010101010101010101" #h"0101010101010101" #h"03EA441C3CE90553") (:ecb-mode-test #h"02020202020202020202020202020202" #h"0202020202020202" #h"0FCE7D728F6138AE") (:ecb-mode-test #h"03030303030303030303030303030303" #h"0303030303030303" #h"C947BAABF7FFF0A1") (:ecb-mode-test #h"04040404040404040404040404040404" #h"0404040404040404" #h"044AB7D6A2E875E4") (:ecb-mode-test #h"05050505050505050505050505050505" #h"0505050505050505" #h"F3076E0480FD1B9F") (:ecb-mode-test #h"06060606060606060606060606060606" #h"0606060606060606" #h"23F99D1EFDA9204B") (:ecb-mode-test #h"07070707070707070707070707070707" #h"0707070707070707" #h"D5F0ACAB764761E1") (:ecb-mode-test #h"08080808080808080808080808080808" #h"0808080808080808" #h"C3F818B9E6BFAF33") (:ecb-mode-test #h"09090909090909090909090909090909" #h"0909090909090909" #h"D5EA1A88D4F48803") (:ecb-mode-test #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"0A0A0A0A0A0A0A0A" #h"E77CFAA6EDE580A1") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B" #h"15EFD651E1469057") (:ecb-mode-test #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"0C0C0C0C0C0C0C0C" #h"CDA162911E3C2405") (:ecb-mode-test #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"0D0D0D0D0D0D0D0D" #h"F63245D5A06EEC7B") (:ecb-mode-test #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"0E0E0E0E0E0E0E0E" #h"C87E8750FF8FDDD4") (:ecb-mode-test #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"0F0F0F0F0F0F0F0F" #h"7668146E424460DE") (:ecb-mode-test #h"10101010101010101010101010101010" #h"1010101010101010" #h"55A07970924FC77B") (:ecb-mode-test #h"11111111111111111111111111111111" #h"1111111111111111" #h"1FC34DB8EBF21BC0") (:ecb-mode-test #h"12121212121212121212121212121212" #h"1212121212121212" #h"EF0051C5DDEC53A9") (:ecb-mode-test #h"13131313131313131313131313131313" #h"1313131313131313" #h"C43D14B8FF13251B") (:ecb-mode-test #h"14141414141414141414141414141414" #h"1414141414141414" #h"2DAC46CD829D08EE") (:ecb-mode-test #h"15151515151515151515151515151515" #h"1515151515151515" #h"60895337A0C292FA") (:ecb-mode-test #h"16161616161616161616161616161616" #h"1616161616161616" #h"D6E7AD831E3BACD4") (:ecb-mode-test #h"17171717171717171717171717171717" #h"1717171717171717" #h"104F8AF1497AE9E2") (:ecb-mode-test #h"18181818181818181818181818181818" #h"1818181818181818" #h"D07DA88C9CB8D1D1") (:ecb-mode-test #h"19191919191919191919191919191919" #h"1919191919191919" #h"74B3CD54797F7C64") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A" #h"E483B165F91F88E4") (:ecb-mode-test #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"1B1B1B1B1B1B1B1B" #h"4E30A66C0340CB32") (:ecb-mode-test #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"1C1C1C1C1C1C1C1C" #h"67B392DDD4D60B3B") (:ecb-mode-test #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"1D1D1D1D1D1D1D1D" #h"5A173639029747FE") (:ecb-mode-test #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"1E1E1E1E1E1E1E1E" #h"4774317AA39EFF49") (:ecb-mode-test #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"1F1F1F1F1F1F1F1F" #h"B52B9DC6A941A7A8") (:ecb-mode-test #h"20202020202020202020202020202020" #h"2020202020202020" #h"D24C12E60F182DE3") (:ecb-mode-test #h"21212121212121212121212121212121" #h"2121212121212121" #h"C90077A6371469E0") (:ecb-mode-test #h"22222222222222222222222222222222" #h"2222222222222222" #h"636C807E203B032A") (:ecb-mode-test #h"23232323232323232323232323232323" #h"2323232323232323" #h"91578F2FDE1EBD73") (:ecb-mode-test #h"24242424242424242424242424242424" #h"2424242424242424" #h"647B7B36BBA9AB7D") (:ecb-mode-test #h"25252525252525252525252525252525" #h"2525252525252525" #h"42E42E1B513D4110") (:ecb-mode-test #h"26262626262626262626262626262626" #h"2626262626262626" #h"92CC5DBF71818457") (:ecb-mode-test #h"27272727272727272727272727272727" #h"2727272727272727" #h"D34CF5D065DA63B8") (:ecb-mode-test #h"28282828282828282828282828282828" #h"2828282828282828" #h"805876D05C017BC3") (:ecb-mode-test #h"29292929292929292929292929292929" #h"2929292929292929" #h"A8EACC2F2BE0AA6D") (:ecb-mode-test #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"2A2A2A2A2A2A2A2A" #h"24A1F474DD90B566") (:ecb-mode-test #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"2B2B2B2B2B2B2B2B" #h"F3E09755FA8D5D91") (:ecb-mode-test #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"2C2C2C2C2C2C2C2C" #h"841B00C99FE2F11B") (:ecb-mode-test #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"2D2D2D2D2D2D2D2D" #h"A1CCCAABFD533449") (:ecb-mode-test #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"2E2E2E2E2E2E2E2E" #h"10E6ECAA6163E77B") (:ecb-mode-test #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"2F2F2F2F2F2F2F2F" #h"209BB27B03EC7D9A") (:ecb-mode-test #h"30303030303030303030303030303030" #h"3030303030303030" #h"0966DA2B6BC0E033") (:ecb-mode-test #h"31313131313131313131313131313131" #h"3131313131313131" #h"7379A558117B1963") (:ecb-mode-test #h"32323232323232323232323232323232" #h"3232323232323232" #h"8B24CFACC88DF2A6") (:ecb-mode-test #h"33333333333333333333333333333333" #h"3333333333333333" #h"ED96F5C0E5D76A2D") (:ecb-mode-test #h"34343434343434343434343434343434" #h"3434343434343434" #h"BA1CCCBEBD793F2D") (:ecb-mode-test #h"35353535353535353535353535353535" #h"3535353535353535" #h"0A590DF4D85B90CA") (:ecb-mode-test #h"36363636363636363636363636363636" #h"3636363636363636" #h"206B0F8919CCD4CB") (:ecb-mode-test #h"37373737373737373737373737373737" #h"3737373737373737" #h"31145228A354A0C9") (:ecb-mode-test #h"38383838383838383838383838383838" #h"3838383838383838" #h"9599CC2E07EDCDF7") (:ecb-mode-test #h"39393939393939393939393939393939" #h"3939393939393939" #h"55FB8CB5FCE94871") (:ecb-mode-test #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"3A3A3A3A3A3A3A3A" #h"1B0204E231F94CAC") (:ecb-mode-test #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"3B3B3B3B3B3B3B3B" #h"CC6875BF02D0EDC8") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C" #h"C04004650588AEF6") (:ecb-mode-test #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"3D3D3D3D3D3D3D3D" #h"27D1240ED40118FB") (:ecb-mode-test #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"3E3E3E3E3E3E3E3E" #h"FC1DCF3AF7589533") (:ecb-mode-test #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"3F3F3F3F3F3F3F3F" #h"36D344B3027BC561") (:ecb-mode-test #h"40404040404040404040404040404040" #h"4040404040404040" #h"BF62D780F4A4340B") (:ecb-mode-test #h"41414141414141414141414141414141" #h"4141414141414141" #h"1922B7FC3F6C54E4") (:ecb-mode-test #h"42424242424242424242424242424242" #h"4242424242424242" #h"2B3C44ABB2A2F6B9") (:ecb-mode-test #h"43434343434343434343434343434343" #h"4343434343434343" #h"2BF4CA6564107AA5") (:ecb-mode-test #h"44444444444444444444444444444444" #h"4444444444444444" #h"0DE485ED95EB7916") (:ecb-mode-test #h"45454545454545454545454545454545" #h"4545454545454545" #h"ADF827AEA3D7B480") (:ecb-mode-test #h"46464646464646464646464646464646" #h"4646464646464646" #h"5400D10D3EA493E3") (:ecb-mode-test #h"47474747474747474747474747474747" #h"4747474747474747" #h"5FF846D6EE31BEAB") (:ecb-mode-test #h"48484848484848484848484848484848" #h"4848484848484848" #h"10CFCE9C3F6D6744") (:ecb-mode-test #h"49494949494949494949494949494949" #h"4949494949494949" #h"4F059F1D68F94763") (:ecb-mode-test #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"4A4A4A4A4A4A4A4A" #h"164876F0AF5BE32D") (:ecb-mode-test #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"4B4B4B4B4B4B4B4B" #h"45982518CF0CC3D4") (:ecb-mode-test #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"4C4C4C4C4C4C4C4C" #h"1288424AAB4DBBF1") (:ecb-mode-test #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"4D4D4D4D4D4D4D4D" #h"2C54BE0B869B541E") (:ecb-mode-test #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"4E4E4E4E4E4E4E4E" #h"189E6AB98E9EAD08") (:ecb-mode-test #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"4F4F4F4F4F4F4F4F" #h"CE1E08676A9F70CC") (:ecb-mode-test #h"50505050505050505050505050505050" #h"5050505050505050" #h"54504A4E9D5B7B9C") (:ecb-mode-test #h"51515151515151515151515151515151" #h"5151515151515151" #h"0AC63B5D7D8BEE3B") (:ecb-mode-test #h"52525252525252525252525252525252" #h"5252525252525252" #h"A8CD8824E3E9B510") (:ecb-mode-test #h"53535353535353535353535353535353" #h"5353535353535353" #h"75C2D459ADEE5E6C") (:ecb-mode-test #h"54545454545454545454545454545454" #h"5454545454545454" #h"F9EEBCBF321C576C") (:ecb-mode-test #h"55555555555555555555555555555555" #h"5555555555555555" #h"916720C6878CDFB1") (:ecb-mode-test #h"56565656565656565656565656565656" #h"5656565656565656" #h"4D70959A24DAB704") (:ecb-mode-test #h"57575757575757575757575757575757" #h"5757575757575757" #h"46B082FD94327BCF") (:ecb-mode-test #h"58585858585858585858585858585858" #h"5858585858585858" #h"8DEA569C738AE33D") (:ecb-mode-test #h"59595959595959595959595959595959" #h"5959595959595959" #h"F6BF0BC30C91AE2F") (:ecb-mode-test #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"5A5A5A5A5A5A5A5A" #h"45E6FBFFB680F50A") (:ecb-mode-test #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"5B5B5B5B5B5B5B5B" #h"FCF0779EA34683B7") (:ecb-mode-test #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"5C5C5C5C5C5C5C5C" #h"7189B7F0A6F66705") (:ecb-mode-test #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"5D5D5D5D5D5D5D5D" #h"9857CD8DBDAC4218") (:ecb-mode-test #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"5E5E5E5E5E5E5E5E" #h"667D23D8D2E4918E") (:ecb-mode-test #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"5F5F5F5F5F5F5F5F" #h"E71E41A4AE4064E7") (:ecb-mode-test #h"60606060606060606060606060606060" #h"6060606060606060" #h"D14105DA05845F1D") (:ecb-mode-test #h"61616161616161616161616161616161" #h"6161616161616161" #h"F7EA089B0C135B31") (:ecb-mode-test #h"62626262626262626262626262626262" #h"6262626262626262" #h"3C66E859B6C77122") (:ecb-mode-test #h"63636363636363636363636363636363" #h"6363636363636363" #h"B957E277BF8AD53A") (:ecb-mode-test #h"64646464646464646464646464646464" #h"6464646464646464" #h"4569435BDD43C104") (:ecb-mode-test #h"65656565656565656565656565656565" #h"6565656565656565" #h"79CD41DB6991CACB") (:ecb-mode-test #h"66666666666666666666666666666666" #h"6666666666666666" #h"4ABD7FBB9A50D520") (:ecb-mode-test #h"67676767676767676767676767676767" #h"6767676767676767" #h"9755C63EA9C43E15") (:ecb-mode-test #h"68686868686868686868686868686868" #h"6868686868686868" #h"95EE3C2F402A43AB") (:ecb-mode-test #h"69696969696969696969696969696969" #h"6969696969696969" #h"225BED53D34E01F2") (:ecb-mode-test #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"6A6A6A6A6A6A6A6A" #h"479C7B1C099158F3") (:ecb-mode-test #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"6B6B6B6B6B6B6B6B" #h"171476C71BBD0079") (:ecb-mode-test #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"6C6C6C6C6C6C6C6C" #h"C0AF0E4CB0E4B4A4") (:ecb-mode-test #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"6D6D6D6D6D6D6D6D" #h"776B48A129A470FE") (:ecb-mode-test #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"6E6E6E6E6E6E6E6E" #h"1192D5C8FD231A9F") (:ecb-mode-test #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"6F6F6F6F6F6F6F6F" #h"1C11E716290F3E23") (:ecb-mode-test #h"70707070707070707070707070707070" #h"7070707070707070" #h"82ADF4FFB3F5CC1C") (:ecb-mode-test #h"71717171717171717171717171717171" #h"7171717171717171" #h"78C75F6FFABE43F3") (:ecb-mode-test #h"72727272727272727272727272727272" #h"7272727272727272" #h"05A191935E72562C") (:ecb-mode-test #h"73737373737373737373737373737373" #h"7373737373737373" #h"845F14C8316AA12C") (:ecb-mode-test #h"74747474747474747474747474747474" #h"7474747474747474" #h"8DACA678721295EC") (:ecb-mode-test #h"75757575757575757575757575757575" #h"7575757575757575" #h"8F85A5931E371A1C") (:ecb-mode-test #h"76767676767676767676767676767676" #h"7676767676767676" #h"DFE4B0D5FD51C611") (:ecb-mode-test #h"77777777777777777777777777777777" #h"7777777777777777" #h"2EDDD077EC82D42C") (:ecb-mode-test #h"78787878787878787878787878787878" #h"7878787878787878" #h"08C12EF5A29A34C3") (:ecb-mode-test #h"79797979797979797979797979797979" #h"7979797979797979" #h"C2E689A5926B1469") (:ecb-mode-test #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"7A7A7A7A7A7A7A7A" #h"89264B9EA39B750C") (:ecb-mode-test #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"7B7B7B7B7B7B7B7B" #h"F55FF33E57E15027") (:ecb-mode-test #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"7C7C7C7C7C7C7C7C" #h"B4211BF2050986A5") (:ecb-mode-test #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"7D7D7D7D7D7D7D7D" #h"59E3D7AE37632B3C") (:ecb-mode-test #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"7E7E7E7E7E7E7E7E" #h"1DCD98BF8E3CEFDA") (:ecb-mode-test #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"7F7F7F7F7F7F7F7F" #h"FA1FDCE135BDFA6A") (:ecb-mode-test #h"80808080808080808080808080808080" #h"8080808080808080" #h"F481C569295DA7B8") (:ecb-mode-test #h"81818181818181818181818181818181" #h"8181818181818181" #h"647D9D7FB4CD1444") (:ecb-mode-test #h"82828282828282828282828282828282" #h"8282828282828282" #h"E0AC3FE4289B03DC") (:ecb-mode-test #h"83838383838383838383838383838383" #h"8383838383838383" #h"9E3A6BE24809A5EA") (:ecb-mode-test #h"84848484848484848484848484848484" #h"8484848484848484" #h"0A550D4300434938") (:ecb-mode-test #h"85858585858585858585858585858585" #h"8585858585858585" #h"FA28C2C72CDBD40F") (:ecb-mode-test #h"86868686868686868686868686868686" #h"8686868686868686" #h"5507C230A13FA64E") (:ecb-mode-test #h"87878787878787878787878787878787" #h"8787878787878787" #h"C0865623E4C0530A") (:ecb-mode-test #h"88888888888888888888888888888888" #h"8888888888888888" #h"4FAF087BAB3C0410") (:ecb-mode-test #h"89898989898989898989898989898989" #h"8989898989898989" #h"50AA81BF2CFC0D92") (:ecb-mode-test #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"8A8A8A8A8A8A8A8A" #h"E9F95FA12EC17C51") (:ecb-mode-test #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"8B8B8B8B8B8B8B8B" #h"CE3BE6306F62212E") (:ecb-mode-test #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"8C8C8C8C8C8C8C8C" #h"2E774C21F352645A") (:ecb-mode-test #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"8D8D8D8D8D8D8D8D" #h"FB60C17D755F16F3") (:ecb-mode-test #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"8E8E8E8E8E8E8E8E" #h"B7520F518D36A0F1") (:ecb-mode-test #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"8F8F8F8F8F8F8F8F" #h"4494B183948C451C") (:ecb-mode-test #h"90909090909090909090909090909090" #h"9090909090909090" #h"5714C7D798BBFE1C") (:ecb-mode-test #h"91919191919191919191919191919191" #h"9191919191919191" #h"7C4B8A8B0749981F") (:ecb-mode-test #h"92929292929292929292929292929292" #h"9292929292929292" #h"BB67FEC861FBEA45") (:ecb-mode-test #h"93939393939393939393939393939393" #h"9393939393939393" #h"1FDB856313CB5B2C") (:ecb-mode-test #h"94949494949494949494949494949494" #h"9494949494949494" #h"A16B1E9E02527BF8") (:ecb-mode-test #h"95959595959595959595959595959595" #h"9595959595959595" #h"FBE639AA0E97E7E4") (:ecb-mode-test #h"96969696969696969696969696969696" #h"9696969696969696" #h"DE1198A1E8346884") (:ecb-mode-test #h"97979797979797979797979797979797" #h"9797979797979797" #h"365C214A1DEA8676") (:ecb-mode-test #h"98989898989898989898989898989898" #h"9898989898989898" #h"B9EDBCEED003C29C") (:ecb-mode-test #h"99999999999999999999999999999999" #h"9999999999999999" #h"DB13FD14584AD7B9") (:ecb-mode-test #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"9A9A9A9A9A9A9A9A" #h"934BB6498EC4785B") (:ecb-mode-test #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"9B9B9B9B9B9B9B9B" #h"DF3A81E1F605CBEC") (:ecb-mode-test #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"9C9C9C9C9C9C9C9C" #h"B605EE708B899F73") (:ecb-mode-test #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"9D9D9D9D9D9D9D9D" #h"C3B3329AD1441719") (:ecb-mode-test #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"9E9E9E9E9E9E9E9E" #h"00513DEC53CE2736") (:ecb-mode-test #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"9F9F9F9F9F9F9F9F" #h"E325603C3766D2F6") (:ecb-mode-test #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"A0A0A0A0A0A0A0A0" #h"0F7F21E937709510") (:ecb-mode-test #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"A1A1A1A1A1A1A1A1" #h"F7AA07D98F058599") (:ecb-mode-test #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"A2A2A2A2A2A2A2A2" #h"B5B59A5477E3FB06") (:ecb-mode-test #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"A3A3A3A3A3A3A3A3" #h"4C2BC22974B7734D") (:ecb-mode-test #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"A4A4A4A4A4A4A4A4" #h"55C2E6838C1FF979") (:ecb-mode-test #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"A5A5A5A5A5A5A5A5" #h"5A1B17C8BBCE9BBC") (:ecb-mode-test #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"A6A6A6A6A6A6A6A6" #h"4ED8F930538870D0") (:ecb-mode-test #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"A7A7A7A7A7A7A7A7" #h"B0D825A1973C112E") (:ecb-mode-test #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"A8A8A8A8A8A8A8A8" #h"579678CE5CF2364B") (:ecb-mode-test #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"A9A9A9A9A9A9A9A9" #h"4A66F8DAD0B92B40") (:ecb-mode-test #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"AAAAAAAAAAAAAAAA" #h"5E51CBC951FED9ED") (:ecb-mode-test #h"ABABABABABABABABABABABABABABABAB" #h"ABABABABABABABAB" #h"162D697D599BEBAF") (:ecb-mode-test #h"ACACACACACACACACACACACACACACACAC" #h"ACACACACACACACAC" #h"25C479AC7DCBB3C5") (:ecb-mode-test #h"ADADADADADADADADADADADADADADADAD" #h"ADADADADADADADAD" #h"873C3DB72B6C17EF") (:ecb-mode-test #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"AEAEAEAEAEAEAEAE" #h"62D1CD613580EFED") (:ecb-mode-test #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"AFAFAFAFAFAFAFAF" #h"1C140194BC8FB722") (:ecb-mode-test #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"B0B0B0B0B0B0B0B0" #h"1C17392342782F74") (:ecb-mode-test #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"B1B1B1B1B1B1B1B1" #h"4725C78D37917825") (:ecb-mode-test #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"B2B2B2B2B2B2B2B2" #h"72784284349B1D90") (:ecb-mode-test #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"B3B3B3B3B3B3B3B3" #h"83454AB3F4A47246") (:ecb-mode-test #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"B4B4B4B4B4B4B4B4" #h"9F33B1421DB9FB61") (:ecb-mode-test #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"B5B5B5B5B5B5B5B5" #h"77A779C1D3757406") (:ecb-mode-test #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"B6B6B6B6B6B6B6B6" #h"90314C094B0E23AF") (:ecb-mode-test #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"B7B7B7B7B7B7B7B7" #h"1D50C146124AA364") (:ecb-mode-test #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"B8B8B8B8B8B8B8B8" #h"0FF2A5C6FAA86AB5") (:ecb-mode-test #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"B9B9B9B9B9B9B9B9" #h"9005E3F81FE3E8BB") (:ecb-mode-test #h"BABABABABABABABABABABABABABABABA" #h"BABABABABABABABA" #h"3DDC8B59E763022B") (:ecb-mode-test #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"BBBBBBBBBBBBBBBB" #h"731C525F69C08501") (:ecb-mode-test #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"BCBCBCBCBCBCBCBC" #h"106DA3CDEB2D6D0B") (:ecb-mode-test #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"BDBDBDBDBDBDBDBD" #h"419B11BC936DD5DD") (:ecb-mode-test #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"BEBEBEBEBEBEBEBE" #h"74FC227708EAA900") (:ecb-mode-test #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"BFBFBFBFBFBFBFBF" #h"9C6AEA6BB5EAA0A1") (:ecb-mode-test #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"C0C0C0C0C0C0C0C0" #h"7C3EABDA658C1BE9") (:ecb-mode-test #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"C1C1C1C1C1C1C1C1" #h"3F5A6FB1B799866B") (:ecb-mode-test #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"C2C2C2C2C2C2C2C2" #h"EB3FC8DAC64FE987") (:ecb-mode-test #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"C3C3C3C3C3C3C3C3" #h"41639BFFF983A391") (:ecb-mode-test #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"C4C4C4C4C4C4C4C4" #h"46E998D95C2F7D82") (:ecb-mode-test #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"C5C5C5C5C5C5C5C5" #h"A77869425FBA6F85") (:ecb-mode-test #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"C6C6C6C6C6C6C6C6" #h"679CC20A4CC8DAE3") (:ecb-mode-test #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"C7C7C7C7C7C7C7C7" #h"FC63CD59B387F7EB") (:ecb-mode-test #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"C8C8C8C8C8C8C8C8" #h"806239D1D675EC08") (:ecb-mode-test #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"C9C9C9C9C9C9C9C9" #h"2D45484E913A2264") (:ecb-mode-test #h"CACACACACACACACACACACACACACACACA" #h"CACACACACACACACA" #h"DB12E39337991E6E") (:ecb-mode-test #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"CBCBCBCBCBCBCBCB" #h"986EB04CE6B5C83B") (:ecb-mode-test #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"CCCCCCCCCCCCCCCC" #h"74B7ACB1C4E54E47") (:ecb-mode-test #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"CDCDCDCDCDCDCDCD" #h"0A3E756B2F5D3B78") (:ecb-mode-test #h"CECECECECECECECECECECECECECECECE" #h"CECECECECECECECE" #h"CCD7203A3330E59C") (:ecb-mode-test #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"CFCFCFCFCFCFCFCF" #h"231CFD138D215FCE") (:ecb-mode-test #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"D0D0D0D0D0D0D0D0" #h"947886BC1713140B") (:ecb-mode-test #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"D1D1D1D1D1D1D1D1" #h"9850392AB1C5DF58") (:ecb-mode-test #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"D2D2D2D2D2D2D2D2" #h"A3DBDE5CB3B0D14A") (:ecb-mode-test #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"D3D3D3D3D3D3D3D3" #h"516EE0CE139FF3AA") (:ecb-mode-test #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"D4D4D4D4D4D4D4D4" #h"67A08619967B8781") (:ecb-mode-test #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"D5D5D5D5D5D5D5D5" #h"4237C2B1C20AD741") (:ecb-mode-test #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"D6D6D6D6D6D6D6D6" #h"9B270032AF9790D2") (:ecb-mode-test #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"D7D7D7D7D7D7D7D7" #h"F485014561B43A95") (:ecb-mode-test #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"D8D8D8D8D8D8D8D8" #h"794857ED7836797B") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9" #h"BDE24546BF1ABDAE") (:ecb-mode-test #h"DADADADADADADADADADADADADADADADA" #h"DADADADADADADADA" #h"1A33DBE057FDFC3D") (:ecb-mode-test #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"DBDBDBDBDBDBDBDB" #h"F74D857E82C66088") (:ecb-mode-test #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"DCDCDCDCDCDCDCDC" #h"88D72547385B1D2F") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDD" #h"E3CA2146C71CE583") (:ecb-mode-test #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"DEDEDEDEDEDEDEDE" #h"2818AAF1A02205A6") (:ecb-mode-test #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"DFDFDFDFDFDFDFDF" #h"27DCAA26208ACA3D") (:ecb-mode-test #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"E0E0E0E0E0E0E0E0" #h"8CD523F19F6A269F") (:ecb-mode-test #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"E1E1E1E1E1E1E1E1" #h"D5AEA349553161E2") (:ecb-mode-test #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"E2E2E2E2E2E2E2E2" #h"64EB3CFAEFDDD61C") (:ecb-mode-test #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"E3E3E3E3E3E3E3E3" #h"CAAABD1E2F033824") (:ecb-mode-test #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"E4E4E4E4E4E4E4E4" #h"60CAFDD281C139F9") (:ecb-mode-test #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"E5E5E5E5E5E5E5E5" #h"5F738EBA5C7D179E") (:ecb-mode-test #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"E6E6E6E6E6E6E6E6" #h"53203C41C2C28ED7") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7" #h"811A8F9F1BCDFE9C") (:ecb-mode-test #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"E8E8E8E8E8E8E8E8" #h"933989D7EF56E534") (:ecb-mode-test #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"E9E9E9E9E9E9E9E9" #h"F246C569E15DBADC") (:ecb-mode-test #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"EAEAEAEAEAEAEAEA" #h"FF7EC5C73AA4D892") (:ecb-mode-test #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"EBEBEBEBEBEBEBEB" #h"BF744BED738C8060") (:ecb-mode-test #h"ECECECECECECECECECECECECECECECEC" #h"ECECECECECECECEC" #h"893AF631836FC721") (:ecb-mode-test #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"EDEDEDEDEDEDEDED" #h"B196D17B5BD8EB03") (:ecb-mode-test #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"EEEEEEEEEEEEEEEE" #h"C3854743B8E39971") (:ecb-mode-test #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"EFEFEFEFEFEFEFEF" #h"5ACDEF9847F8085B") (:ecb-mode-test #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"F0F0F0F0F0F0F0F0" #h"205BDE6C6CE800E2") (:ecb-mode-test #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"F1F1F1F1F1F1F1F1" #h"012309B3210CEFEE") (:ecb-mode-test #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"F2F2F2F2F2F2F2F2" #h"83E92926264F123F") (:ecb-mode-test #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"F3F3F3F3F3F3F3F3" #h"5BA80701E5009A1C") (:ecb-mode-test #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"F4F4F4F4F4F4F4F4" #h"75B12595A8F1CF84") (:ecb-mode-test #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"F5F5F5F5F5F5F5F5" #h"8BE8D04B7506BFBA") (:ecb-mode-test #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"F6F6F6F6F6F6F6F6" #h"06AFC3F429493838") (:ecb-mode-test #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"F7F7F7F7F7F7F7F7" #h"2B53DC24D5499DDB") (:ecb-mode-test #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"F8F8F8F8F8F8F8F8" #h"D1D5A311D568E59A") (:ecb-mode-test #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"F9F9F9F9F9F9F9F9" #h"9D5D2537033FEBB8") (:ecb-mode-test #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"FAFAFAFAFAFAFAFA" #h"20AB2D42A0C94052") (:ecb-mode-test #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"FBFBFBFBFBFBFBFB" #h"8880794BE00876FA") (:ecb-mode-test #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"FCFCFCFCFCFCFCFC" #h"A826B58B13B7B9C1") (:ecb-mode-test #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"FDFDFDFDFDFDFDFD" #h"65B7E9FA03B72838") (:ecb-mode-test #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"FEFEFEFEFEFEFEFE" #h"1405A7801255ECEA") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFF" #h"1D0C41EB2B24A69B") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F" #h"0011223344556677" #h"DF7F1DD20217842A") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF48" #h"EA024714AD5C4D84" #h"7AEE54052CB37F9D") (:keystream-test #h"030bc7d2deba1ee64c5fcc2212c6e657" #h"2772fdebaaa23bd6" #h"db88e7260ab40e193d1da2077465c7b77d7baa5f66eb76a945556eefe4e1b14727dc38a0901e01a44233f5683cae2acabe10e77074cc5492995c3c470cd59714484101de07f5b5d4b71b5211cb8d5719033149596cc0b62ca5793d507e9417893fde6d9f3891e1915b31144118359ed20b12b5139de0a88425b1833038b06f5aaff4de5b4d1ee24b20216d298b0a50a0c637af5ada4fa3547a515ca31c4d2dff7fcacebeebec66274169b4c5506560d280161b2746fdaec331a5cee27ab45de274bb7f9130cb0870b838d46759fee68c7322d1d48ab1d0cb68e4ed16758dec3b6c2ea40ce756fa0571421ff2ddc2790ba26ec13479d4eecdabcf9091e698552793b8b79ec7d3774cae1800912dc439095ae37a80d1b9248749f2713411f39fa20fba7dc1233ed7544976d696c74fa6cea04bd283bdd796818ccb426758624cddea21c1127227ce6c09012a802f1c69cbd3c100a95d1ecd600db2cc941e906942deb564e4ebbae102a010f59f06eb9106e50bb89e05ec4aac19f88224a45ba412eac8b1a9810bbcc8a9621dbac385dbc20161f716526a3b95100b86291db6af01b4f526ad8be6db7ad37b222c1a049f9d424a763b2f69b9981b99bd2fc2dcc754fe3ef3d812e1f586538d9d1e8e601b3fbd84d7efb8adfe4b682225a384e9fbeb1b8da62f8a8856dc3a895d842906518a7094067a5d8e8e016ad8a4017843bc3302637d6d4848e291deb3ad887480e00570c9bc98386409c592f5b642efbc85bf46c037bfe2a66df38d0c64ac606230c417beaefff0de0297874795f8640c2a1a08a94485e245b0b20f49321cfeafc7ec8cfe313a0615e6f7d132e07e78bb887423ead3c6af175dd561ab28bc9d73342961c8c92f85272747b0dbb64244434679d8b1bb3a7c660c60c87840bf216c907b1218974fd7d7dda2e9efb3bb285fd051554c9a98c57f57661fb2fbdbc02b55a03f776ea4b1e4a9af68e216614d74204fb9e51b5060e471bce9c2ca83d39ac0e2bec26856e2a5031c368ea641273aeff98f38b8b220033927836ce6f789d64d99e41b0a37ce8744df675a54c75b5b4cab8fe355855b66fe86956dc0d5debc99149a662f01c460b3d0b87e71856df37ed650dca665020c0d2f0c322b3118d0bec4ff7b25a9ff8255293a093dbabcc601c2e4725957eb288db88eb4a789a842d368b408b86d92db7fccc95783cdbde4f3da7550bae1b4a18ba06eba38218fccdc122d3ee40039ae5f3cbd9ae0d216dad25e7e8a0c657b399b4e520cd8b9d8c353d853727f300e9a3dc79058b0e1c63c357630a32c15e19a206b6f2bf6ce1cbb3cd1edea8cc855cdae78d6ab649d16d245f50445846a8c6474756e2f7ae1ad381d5d10ee4e65dd7663fbfd78312f0d29a5827562317500121880") ironclad-0.57/testing/test-vectors/cbc.testvec000066400000000000000000000205771420372057600215260ustar00rootroot00000000000000;;; Tests from NIST document SP800-38A.pdf, #h"Recommendation for Block ;;; Cipher Modes of Operation: Methods and Techniques" (:mode-test :aes #h"2b7e151628aed2a6abf7158809cf4f3c" #h"000102030405060708090a0b0c0d0e0f" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"7649abac8119b246cee98e9b12e9197d5086cb9b507219ee95db113a917678b273bed6b8e3c1743b7116e69e222295163ff1caa1681fac09120eca307586e1a7") (:mode-test :aes #h"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b" #h"000102030405060708090a0b0c0d0e0f" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"4f021db243bc633d7178183a9fa071e8b4d9ada9ad7dedf4e5e738763f69145a571b242012fb7ae07fa9baac3df102e008b0e27988598881d920a9e64f5615cd") (:mode-test :aes #h"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4" #h"000102030405060708090a0b0c0d0e0f" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"f58c4c04d6e5f1ba779eabfb5f7bfbd69cfc4e967edb808d679f777bc6702c7d39f23369a9d9bacfa530e26304231461b2eb05e2c39be9fcda6c19078c6a9d1b") ;;; Tests from Wycheproof 0.4.12 (:mode-padding-test :aes :pkcs7 #h"e34f15c7bd819930fe9d66e0c166e61c" #h"da9520f7d3520277035173299388bee2" #h"" #h"b10ab60153276941361000414aed0a9d") (:mode-padding-test :aes :pkcs7 #h"e09eaa5a3f5e56d279d5e7a03373f6ea" #h"c9ee3cd746bf208c65ca9e72a266d54f" #h"ef4eab37181f98423e53e947e7050fd0" #h"d1fa697f3e2e04d64f1a0da203813ca5bc226a0b1d42287b2a5b994a66eaf14a") (:mode-padding-test :aes :pkcs7 #h"9bd3902ed0996c869b572272e76f3889" #h"8b2e86a9a185cfa6f51c7cc595b822bc" #h"a7ba19d49ee1ea02f098aa8e30c740d893a4456ccc294040484ed8a00a55f93e" #h"514cbc69aced506926deacdeb0cc0a5a07d540f65d825b65c7db0075cf930a06e0124ae598461cab0b3251baa853e377") (:mode-padding-test :aes :pkcs7 #h"75ce184447cada672e02290310d224f7" #h"2717d10eb2eea3b39ec257e43307a260" #h"c774810a31a6421ad8eaafd5c22fa2455e2c167fee4a0b73ff927b2d96c69da1e939407b86b1c19bcfc69c434c3cf8a2" #h"137c824d7f7dc36f24216dde37c2e1c10cee533f6453de92e44b898fc3037d2e9e19d67a96387136dd9717a56e28614a5c177158f402ce2936fd98d1feb6a817") (:mode-padding-test :aes :pkcs7 #h"e1e726677f4893890f8c027f9d8ef80d" #h"155fd397579b0b5d991d42607f2cc9ad" #h"3f" #h"599d77aca16910b42d8b4ac9560efe1b") (:mode-padding-test :aes :pkcs7 #h"b151f491c4c006d1f28214aa3da9a985" #h"4eb836be6808db264cb1111a3283b394" #h"27d9" #h"74e20bf03a0ad4b49edc86a1b19c3d1d") (:mode-padding-test :aes :pkcs7 #h"c36ff15f72777ee21deec07b63c1a0cd" #h"a8446c27ea9068d8d924d5c4eac91157" #h"50b428" #h"3f7a26558ba51cf352219d34c46907ae") (:mode-padding-test :aes :pkcs7 #h"32b9c5c78c3a0689a86052420fa1e8fc" #h"ef026d27da3702d7bb72e5e364a8f8f2" #h"0b9262ec" #h"c29d1463baccc558fd720c897da5bb98") (:mode-padding-test :aes :pkcs7 #h"43151bbaef367277ebfc97509d0aa49c" #h"c9defd3929dcd6c355c144e9750dd869" #h"eaa91273e7" #h"e24a717914f9cc8eaa1dc96f7840d6af") (:mode-padding-test :aes :pkcs7 #h"481440298525cc261f8159159aedf62d" #h"ce91e0454b0123f1ead0f158826459e9" #h"6123c556c5cc" #h"f080e487f4e5b7aed793ea95ffe4bb30") (:mode-padding-test :aes :pkcs7 #h"9ca26eb88731efbf7f810d5d95e196ac" #h"1cb7bc8fe00523e7743d3cd9f483d6fe" #h"7e48f06183aa40" #h"27cadee413ed901f51c9366d731d95f6") (:mode-padding-test :aes :pkcs7 #h"48f0d03e41cc55c4b58f737b5acdea32" #h"a345f084229dbfe0ceab6c6939571532" #h"f4a133aa6d5985a0" #h"59bf12427b51a3aee0c9d3c540d04d24") (:mode-padding-test :aes :pkcs7 #h"1c958849f31996b28939ce513087d1be" #h"e5b6f73f132355b7be7d977bea068dfc" #h"b0d2fee11b8e2f86b7" #h"1a0a18355f8ca4e6e2cf31da18d070da") (:mode-padding-test :aes :pkcs7 #h"39de0ebea97c09b2301a90009a423253" #h"c7cd10ca949ea03e7d4ba204b69e09b8" #h"81e5c33b4c620852f044" #h"cef498ea61715a27f400418d1d5bfbf0") (:mode-padding-test :aes :pkcs7 #h"91656d8fc0aced60ddb1c4006d0dde53" #h"bb8c9af30821dfeb7124392a554d9f01" #h"7b3e440fe566790064b2ec" #h"7ab43ddc45835ce40d2280bcea6a63f2") (:mode-padding-test :aes :pkcs7 #h"af7d5134720b5386158d51ea126e7cf9" #h"54c3b90ca6e933f9094334d0263d3775" #h"7cc6fcc925c20f3c83b5567c" #h"c70b457c945ad40895cf4c8be3ce7c66") (:mode-padding-test :aes :pkcs7 #h"4ed56753de6f75a032ebabca3ce27971" #h"9a2c5e91d4f0b9b9da64b46c5c2c8cb2" #h"0c8c0f5619d9f8da5339281285" #h"f9900afee2acfe63f8f15d81bbf64c39") (:mode-padding-test :aes :pkcs7 #h"beba50c936b696c15e25046dffb23a64" #h"cf7951501104e1434309e6b936ec1742" #h"821ea8532fbabffb6e3d212e9b46" #h"da4137bd8ac78e75a700b3de806f2d6f") (:mode-padding-test :aes :pkcs7 #h"501d81ebf912ddb87fbe3b7aac1437bc" #h"90f5cf4fbfd2e2a1ab8eef402617bd5c" #h"2368e3c3636b5e8e94d2081adbf798" #h"fed05321d11d978e2ec32527ecfce06c") (:mode-padding-test :aes :pkcs7 #h"831e664c9e3f0c3094c0b27b9d908eb2" #h"54f2459e40e002763144f4752cde2fb5" #h"26603bb76dd0a0180791c4ed4d3b058807" #h"8d55dc10584e243f55d2bdbb5758b7fabcd58c8d3785f01c7e3640b2a1dadcd9") (:mode-padding-test :aes :pkcs7 #h"cbffc6c8c7f76f46349c32d666f4efb0" #h"088e01c2c65b26e7ad6af7b92ea09d73" #h"6df067add738195fd55ac2e76b476971b9a0e6d8" #h"e9199842355ea0c3dbf1b2a94fef1c802a95d024df9e407883cf5bf1f02c3cdc") (:mode-padding-test :aes :pkcs7 #h"fda6a01194beb462953d7e6c49b32dac" #h"d9c9468796a2f5741b84d2d41430c5d3" #h"f60ae3b036abcab78c98fc1d4b67970c0955cb6fe24483f8907fd73319679b" #h"19beb4db2be0f3aff0083583038b2281a77c85b5f345ba4d2bc7f742a14f9247") (:mode-padding-test :aes :pkcs7 #h"efd9caa8ac68e9e29acdae57e93bcea8" #h"c98b47808add45c0c891983ec4b09846" #h"3e1d2001f1e475b972738936443a5f51eedaf802a66fadf2406cfaadb0549149fcb9f485e534dc2d" #h"84904fc92bd2e7590aa268e667370327b9446f41067dd40d3e5091a63a0d5687e4926e00cc3cb461c3b85d80ee2da818") (:mode-padding-test :aes :pkcs7 #h"37e4dbdc436258d5a9adb9f205c77cf3" #h"08e9410de244d3f40607ebae38fa74e7" #h"24a874aec067116ad22eb55846ded3f5e86919a135585c929a86d92b2958fed110e52e33804887243584a6a94402cc9a105e0c940ec335bd2890f16dcce3fc8bd02873c80ade6f1ac08683130bcca454" #h"1d1391593a336be4b207295ad0542bc4ef2f39053066e12c38f71603f377fd42f4f0b2b5a42cdfeaee2af039f06fcf347abe171af3157ff07f3cdd3b33e11a60caecf9890325c132eeb66ab847278d165c26bca7c30486bb2fd83b63c5ff7ae0") ;;; Tests from DSTU 7624:2014 (:mode-test :kalyna128 #h"000102030405060708090a0b0c0d0e0f" #h"101112131415161718191a1b1c1d1e1f" #h"202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f" #h"a73625d7be994e85469a9faabcedaab6dbc5f65dd77bb35e06bd7d1d8eafc8624d6cb31ce189c82b8979f2936de9bf14") (:mode-test :kalyna256 #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f" #h"9cdfdaa75929e7c2a5cfc1bf16b42c5ae3886d0258e8c577dc01daf62d185fb999b9867736b87110f5f1bc7481912c593f48ff79e2afdfab9f704a277ec3e557b1b0a9f223dae6ed5af591c4f2d6fb22e48334f5e9b96b1a2ea5200f30a406ce") (:mode-test :kalyna256 #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f" #h"606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf" #h"b8a2474578c2febf3f94703587bd5fdc3f4a4d2f43575b6144a1e1031fb3d1452b7fd52f5e3411461dac506869ff8d2faef4fee60379ae00b33aa3eaf911645af8091cd8a45d141d1fb150e5a01c1f26ff3dbd26ac4225ec7577b2ce57a5b0ff") (:mode-test :kalyna512 #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f" #h"808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff" #h"d4739b829ef901b24c1162ae4fdef897eda41fac7f5770cdc90e1d1cdf124e8d7831e06b4498a4b6f6ec815df2461dc99bb0449b0f09fcaa2c84090534bcc9329626fd74ef8f0a0bcb5765184629c3cbf53b0fb134f6d0421174b1c4e884d1cd1069a7ad19752dcebf655842e79b7858bde01390a760d85e88925bfe38b0fa57") ironclad-0.57/testing/test-vectors/cfb.testvec000066400000000000000000000024521420372057600215210ustar00rootroot00000000000000;;; Tests from NIST document SP800-38A.pdf, #h"Recommendation for Block ;;; Cipher Modes of Operation: Methods and Techniques" (:mode-test :aes #h"2b7e151628aed2a6abf7158809cf4f3c" #h"000102030405060708090a0b0c0d0e0f" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"3b3fd92eb72dad20333449f8e83cfb4ac8a64537a0b3a93fcde3cdad9f1ce58b26751f67a3cbb140b1808cf187a4f4dfc04b05357c5d1c0eeac4c66f9ff7f2e6") (:mode-test :aes #h"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b" #h"000102030405060708090a0b0c0d0e0f" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"cdc80d6fddf18cab34c25909c99a417467ce7f7f81173621961a2b70171d3d7a2e1e8a1dd59b88b1c8e60fed1efac4c9c05f9f9ca9834fa042ae8fba584b09ff") (:mode-test :aes #h"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4" #h"000102030405060708090a0b0c0d0e0f" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"dc7e84bfda79164b7ecd8486985d386039ffed143b28b1c832113c6331e5407bdf10132415e54b92a13ed0a8267ae2f975a385741ab9cef82031623d55b1e471") ironclad-0.57/testing/test-vectors/cfb8.testvec000066400000000000000000000014021420372057600216030ustar00rootroot00000000000000;;; Tests from NIST document SP800-38A.pdf, #h"Recommendation for Block ;;; Cipher Modes of Operation: Methods and Techniques" (:mode-test :aes #h"2b7e151628aed2a6abf7158809cf4f3c" #h"000102030405060708090a0b0c0d0e0f" #h"6bc1bee22e409f96e93d7e117393172aae2d" #h"3b79424c9c0dd436bace9e0ed4586a4f32b9") (:mode-test :aes #h"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b" #h"000102030405060708090a0b0c0d0e0f" #h"6bc1bee22e409f96e93d7e117393172aae2d" #h"cda2521ef0a905ca44cd057cbf0d47a0678a") (:mode-test :aes #h"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4" #h"000102030405060708090a0b0c0d0e0f" #h"6bc1bee22e409f96e93d7e117393172aae2d" #h"dc1f1a8520a64db55fcc8ac554844e889700") ironclad-0.57/testing/test-vectors/chacha-12.testvec000066400000000000000000002521261420372057600224230ustar00rootroot00000000000000(:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e1047ba9476bf8ff312c01b4345a7d8ca5792b0ad467313f1dc412b5fdce32410dea8b68bd774c36a920f092a04d3f95274fbeff97bc8491fcef37f85970b4501d43b61a8f7e19fceddef368ae6bfb11101bd9fd3e4d127de30db2db1b472e76426803a45e15b962751986ef1d9d50f598a5dcdc9fa529a28357991e784ea20f564d00f1eee24d") (:stream-nonce-mode-test #h"80000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"36cf0d56e9f7fbf287bc5460d95fba94aa6cbf17d74e7c784ddcf7e0e882ddae3b5a58243ef32b79a04575a8e2c2b73dc64a52aa15b9f88305a8f0ca0b5a1a255046dd674a1d3ddb44d89e7233f90c33fcb1859f4c37ae2029575e0f23542c72f9a96b301d92e42262fc3c81179dffce1c21a4a5c6ad0c04ff183ecfcce840bc4ec93fbc9d6b54") (:stream-nonce-mode-test #h"01000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2a865a3b8999fa83ae8aacf33fc6be4f32c8aa9762738d26963270052f4eef8b86af758f7867560af6d0eeb973b5542bb24c8abceac8b1f36d026963d6c8a9b2d82ce0cad37d51b1052c33144a30a8239c9fca6284ac5ea750bebb2d224dbb39aa4e7acd511f8cef15a5c490590e38e96397c06cd21c389cb8b1159c240c9c0ec5dab35084549f") (:stream-nonce-mode-test #h"00400000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d609433831bc85e388b99865a618bc85589efc9d0d945d68aec4d59753efb4982f7b1a8997b93df81ff2867a6ddfffb1a0d0d88c2a1b697a4fd16e3aa956b5009d8b1e81060e9a4a267e148d53f689de978fda428e96deb7eebb273acbf2ba320468840bc9e433b8299e126327e19c01e9f259bb4eeb814ad611931bf132404de5b1bae8c5c0d3") (:stream-nonce-mode-test #h"00020000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"24644ad782fe2c49437cfd18ee261fd577e6b8b54c38052d5e81c9f3c7473eddf8394e0d6c9cf5c3c62b9ee5164c7a55de04f3cb2f890a71e7368e3e65268b18bd91dfda313dfdbc0bd64ad0bbacd25c1d76f1ad5b07ae0a325fbdb7af8668be7e7c0c5712c78906789e1d33d6a6f4a3c71cffcb46fafdf2488e1cf590bb65d862c9d01f89f3b9") (:stream-nonce-mode-test #h"00002000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c4ee4de61e630cf5f61f8cf49c79bc12583f55527174146f0392053bc62efaa209b70a5f5cce6e1ed4f003c55ef60a212cb3a4e28f6a08fb44b774f3ed0595da331145603c6d64448d59d91a60f6c6ce0720bd1df043768caf35aaff5b8ae583f1623770f1a4c742c9da3cd98bbc32b7f6020af37ddc0bbd7fdda468e41abb207a40b1aa5321c2") (:stream-nonce-mode-test #h"00000400000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"51e7cb670da7d9623294f78e221f9d24202ba3dd61b7e6d20956d1b53e6c2bbc29129078d84bd70375e167e5673c94fe1b55e687dd1d2a0346cc320dc5dc58f85cc85f3242935baa901028dc088a306d164a0ef23e608eeb5dc193a6f395767c94d1d66ad413b75c12274d8c8ae4a837688cb06b1b7421dc6926ec5b94861a35f592a763aa1529") (:stream-nonce-mode-test #h"00000010000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e2bea07c9ee226a12960b230b36181740fe1ad585b26e0b6f414a6f7bfa627bd3539ecb07157ad901f510fd338238dbcd8a15ec5fc5b3a2c6abc310761adf2ca91d86e992662f71ef7ba2911c115edc85ddcd64aa48dbd7967f156e321f5673373baee387b98679a21a250cfe568acd593659fd7e2b206df18c45b7398043857624fda8a06d486") (:stream-nonce-mode-test #h"00000008000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2596db92b82e0ef68b4787b21d782eaf63d94fe57fc361ea6b303761ba6dae608ed0b5266ea4b91248e5c7239be1b8d2812ec5ca34fb9682baf8314a7d9652596e2bd46ec73964a85eaf8efaaa924967ec1596855afa95701671a160a527ca1827dd1d42528ef62ed01efbad1ada7926b0e644a593fed713dbef24d9c74f770a621f1b0453e9fc") (:stream-nonce-mode-test #h"00000000800000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"307eb0502d075c0d587f30793a42ac78accde7aaa6333a13d35acdc568c82d4a0116919c08af4d8d7ffbb9371b42980abd0c66f1a95be79d74888e568bc5af5193b6b2a2329bc2581d63fab3b2849b81c73a1a103aec52974dd55a18d2153c7c1c37a16f06a88ec21c6d28253b12b8eb274d4b7ae5f7bf0980551c218659d14d056e8139487b54") (:stream-nonce-mode-test #h"00000000010000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fae79f258d079309e446e10e5a35d46d15a48fa633503b3deb20d92b3e7c20d1da33fd5971f71584e286de8b487725df4a98ac013c73ea3af6a15447fe5fd19563b3f67afe19dd0690dbe2a868064a0f455dca241348fb0b4de1029fcbe74f67e7a3b276574d3b7d10d5464917ded14339b92a6af1e7659ab7f17a289dea267f0935158f9a2cbf") (:stream-nonce-mode-test #h"00000000004000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4edf7eb8f26db0b00a418f2e980e1edc8238cd892e9e6afd950454292fd138bcf9511ff1a60a4a5a9d0ace239c53b10d7a2205e0c5cfecb09efef00e009e822076c1de6ea90fdd7addc1173227ceecfff35d99c6c77fe4b2fc33249969d1e577db28462acb5e9294b8098261df0ff4ee66fc13fa5a6e87132f6157b9594ea4f3b125e5973f323c") (:stream-nonce-mode-test #h"00000000000200000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7e2d1caec1c9ed4e037531e1c77030f8bdb342e75b340096120ce0b5145505cc22455a8776dc257dfc7a6be705c2ae32438698b375b15b45179ca3b141f4e88ffff2ecb4d41d33bf1f3e4ee66b0fddcb655a82e601ccc875093b43ff98c04537d2fcdd6df0e9eb72d1958454070cc13ced0afc07b74c93fabfc3da74a60951f9d800432c696c30") (:stream-nonce-mode-test #h"00000000000020000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"80bde60171d919b70d7266521f226d362b88c2955fe2f000140b60b409f300f717f5490d234e5b057a3264dd821c481d158585ee46acfff1c8ce86231785d1cec9bb62579d455b690c736d18f21584199abbd6f369460d0c577ad272d55d6c44d6d5a0b65e5646424eeddae57d36c74bc6c5cfc1d9e74d4e668d55f64e811ce86cd144653437cb") (:stream-nonce-mode-test #h"00000000000004000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bf90dd1596ad58820d0fdfbbf9825a771e944f351c671f90849a8f94bff8a01729070973c7f748ed327d6b159fca954996e2cc6984ff04c4901e9a3b721f108316f35aa54339a9bf1066fb5fdb5fd224d494bdb07cce1c5ca1a65a2b077ac9d2ea5e2b57076ebf7d1fd3e259ca5f3ec78c9237b4b7523332d3800a283c80dcb855b8a28520f9d5") (:stream-nonce-mode-test #h"00000000000000100000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"76b06cca84fa223f434ffd61e3a6bda78b64d15b5735c7758b1f8c5800a78718f4befb1f2ebee94e51a7a3056381ae71679a9b791362e261bb84e2ae91420373b0b4db3c824b2a200d8a66eb2be2a8a76ca1eb118276e02b70cbdbd12f50065e5ff904546188c7e7c524ac364d44f5695ba4e6c671d71f6f6032de89c92022f20abbd49f82228d") (:stream-nonce-mode-test #h"00000000000000080000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"99a97ddd4ca6acb4540dd1bde5d19838e8e21a1b33b83f871b652baabeb4b2fb886feaea0e585dbb675d5559732e43e30769a0e3b06d1e891f38d6b3297d5c66357c858d42bc5c808e0172eb733f16961b20c6c7f036924d2c0fe19e1dbdff1ca553ffc8a45e7ccc7553051a1b59e6812093a0473ab49fb503ae8e2d4318779aaf64d9412ea158") (:stream-nonce-mode-test #h"00000000000000008000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"654dfbd8f609c47741fc9fbaee6244bb98b3473fb707823a0e920f76dcff3c3e151b17e6b96cabcb30c81598815383d9c0b55f6b0f16851c89c93a2c5479d14cb2775e03cae9be8de11190077829984e1396b767b9ccb9e809cd052ceec699f0ceed09621166ae50b9dd7fba235fa870b398f8b56495000ce6e728120922458f20f574e4e0866b") (:stream-nonce-mode-test #h"00000000000000000100000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3f42b59b0be3318f3109b145535442db880dc94386b0b578190a9f015cf9fd9197d05236d5bf6d930b92d611af92a32a96a2caf7b6bc2532154c208fba1f47686738842f19b9449bfa06e124e01258ebe3a9d12672afe251395d8084911df0bd80a92245ffce8ecc095e49c439ff1cb29fd714286959286999f245fa751e2852271c99ba595be8") (:stream-nonce-mode-test #h"00000000000000000040000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"43a777c9da84081407b16dd0e17547a901d70695999b0127bad029f9f05704bf6cd87f0dd8a0415d7dc3eb68f131e3cd50d682668c47aa6bcece9b5dbb4e8b674eded1dc583a5ee4b192acf46cb58884e90b67ccc1a51b00d1a5ec217d79f5efba8db720806dc1707e52b151bd7eb1c4adf1e3d0798a3784a284423d0331fdce5941fe87345d91") (:stream-nonce-mode-test #h"00000000000000000002000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"435d288596df0dc27a0f766265f9c36ec1619a04e473d016f159e61701ba395bdfb43a746fd0db46ba015539e2a82ab766dbab7b341406e4e0e243981065aab7d5d1818ea6c2ac2bdcef07572770840032bcc4a37593822e5ddd2087dbb6f97c5f5539fac2a8f78e2b115f7cd6fe413d3cc9250e226363b50e1f1666a34dd5063ba39b87c11cff") (:stream-nonce-mode-test #h"00000000000000000000200000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3c1a1203a2596f8542368ff4aa51dc27274c8dc70968298fb0b29b9d8df1442992ca20d57932d1261bb00845b00619127b5c48293b002d68abd97e117a1af8c90525e7ada0b730da59ef53e75bf9952ba20c2f760026f1a37359aa1beb4bf0c052fe70343b74172236566d75607317024ff4b79c010ba0d6710c672f6fff575cc226da75e3f814") (:stream-nonce-mode-test #h"00000000000000000000040000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"64a225b0f7e405a80fc261ed3c8a4cff3e0529bbfa383817df31dc81df7b8d0df889c5bf9e448c236970e902b3975c56cebac94c89e235b849c8285c33f98c514145f472e73225f2082ae517b08e1bd9ecb6844ee72b2b8d1e76ff91073f130eb75c49a6d0af090777e2906d59dcb4dfff81fae00ef3a0b9ca57c5b8641052a4b529ec790dc0ba") (:stream-nonce-mode-test #h"00000000000000000000001000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"362e4cac42b139bf943e2fb90a8606e12bd0f6a8e60831a61dde31ead4501bcfdabb358e70b5b97c7accdbd0dc0323b116f65d3850949ccf6dd75ace73e46354dbd5e8e848f6566a95b247a6c7658fe5f0d7b8dbf7707df0b45fc82da70c7d123062a31470861abfbe6bbf5148890eae596d43257ecd2278264465e91beda6104853fe0dfffaef") (:stream-nonce-mode-test #h"00000000000000000000000800000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8fedbd9d8d8f1f597037e6ed40a30b28fdd703a947c972447d68057d8aa544d29d84df26ae810126ff95fd5a3d1a878d465c16613ac7c5f775025833081d5b7a854d046a0e0ae8452c364deede175ce488a33794f9ef7e6baaa4117bd31844792ebdf8f1bae34ac104db56617e3dddd8406975fd0dd50f922ad568a49cd7cb98f02350716eac02") (:stream-nonce-mode-test #h"00000000000000000000000080000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e2307af05a602e720af6e803487c43301da10eb6200bed62216613423dc2f57345ee54c8ced5d0b0cfcb43f7995b1acd6fba309ed2794f5d121aec01a1361ea27d7346df85058000a55719199f2bd41dda016f7296ccf3977b0d92b5c7ee3597a053be2c2a93bb08c810d388dbed67ec4d373d5afb22315f6dc33797eb6094b6c55acffe729993") (:stream-nonce-mode-test #h"00000000000000000000000001000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e28574a6d819b189360d24a7f42b56955edf10df94762e822ac188c5b6480579fbc6fbb0141695a169c7e83fe7c533d1ef4c4c32d177ab747173bec6df000821a0301654ca6cbf6f7dd786282c5b81860ff23438c4f8c4eb31b57deb9a6e6372a20a307778e7359b58a2a1dcd386cd4f48106602a5d7bca93859c4bae2004d84d1474d32c36ae0") (:stream-nonce-mode-test #h"00000000000000000000000000400000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0875167353bb7ec9689001880530a370d4410e8458f8cab2c488698c6f62d22484cc301dbe4d270619262b3caee42b2a91bc29697961bc18c6fb89fec156aa27db2229c52584c4c68b00dbf079c9ac450e3a1d7f9ee399a6938604b042d60ecba87d33c33fd3aba22352c102303e098b746d4be94a86c5692a1440b8cbc489045f1d27333d1db2") (:stream-nonce-mode-test #h"00000000000000000000000000020000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a5f50453365908588675a640dfcae6df6ed0972206895f030f8d6e78fa56e467f3fd13be337d6701940c176acf7cb3deed451c11dc38cab04c9ff7d087f60304146d12118fff07ee27d398fe765354916798b7c6849802791bb7b2c46229bd2e5e6bab2f5a91b6eb4d6bd7a83025c095ec288d4f5efc08f992341389b315dcf22d3d6e71266a9e") (:stream-nonce-mode-test #h"00000000000000000000000000002000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"88fc35ec2c325a59c8f75d66bb6a2b85b4645bddbbefa3d51e36041971b4ad8f172595b0180e08649dcff42e3a695a7743f97df8fec79837c618a3d7dc3516aa2e48924d398939124a2080fc3de0687bb150677351f60f8af5be0cff6bdd6fd81525c9a257202390227056c156edaf3486034cd86ed4c36251c9a8f70d5d822fb4d469320b251d") (:stream-nonce-mode-test #h"00000000000000000000000000000400" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"874172a5337bb79b9c5edbe86a9db6eb6babfa7285ab503b0e6a9d53abe99eb62fcdd4e7e2421b11f62e2ebb140f3db3487fedf1efb66b6701a63072a3ee61f05ab0251a70c4b0f7a515b01e82c3fa9c13306ec0f6b3ae7d48591df91e92479e322a769a8d7ca8a18d8aa95f081074c93c33ed69619ba5ed1d6f980b49e5448e5d75d624ee5cda") (:stream-nonce-mode-test #h"00000000000000000000000000000010" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bd92117207502540d328c256469ae4008c0d77775d9db99e1e12932af7fc63fb16ce4ffcf4373cd7a9e1a2fad7f0c3b190a0ea7b8f4d735a9f8ba07ccce410e4b5bf957f02a69997c73f7a13b6d0e1670253b5c45bbccfebd964c2ad15c0b7208f75e42b5fc8015d6c22edd68e93c03f25277d733f26856c3631246372bf022d487c77b6ff443f") (:stream-nonce-mode-test #h"00000000000000000000000000000008" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d9b1a642ce6bed68ce7ca92675a555da951b449d4325e3c2dfaffe54aae1b9eaf9a2bbbcdff9a2cfd1595acfe19f61170a0df959bd4ce45a356bd4ea869951648a823fffd92ade269e6c59c2baf9be6b6a42924b3ad410494760f9733e623dade139e903ab9f82fea53438d3501c103f1be2b1478ce14013343a573c6045921a87b31a2e098034") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9bf49a6a0755f953811fce125f2683d50429c3bb49e074147e0089a52eae155f0564f879d27ae3c02ce82834acfa8c793a629f2ca0de6919610be82f411326be0bd58841203e74fe86fc71338ce0173dc628ebb719bdcbcc151585214cc089b442258dcda14cf111c602b8971b8cc843e91e46ca905151c02744a6b017e69316b20cd67c4bdecc") (:stream-nonce-mode-test #h"8000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"789cc357f0b6cda5395f08c8538f1226d08eb3e16ebd6b6db6cc9ca77d81d900bb9d21f6ef0b720550d161f1a80fab0468e48c086daad356edce3a3f988d8e823f67b0c9b7342dd1dcae2f857c8b2475476df68a6fd81c60cee7feebcefede2ea983a7605b1e23a0dee24ecd584f6c687c4647137d51045ae6f9a867c75c4dee92edf6a2ff8084") (:stream-nonce-mode-test #h"0100000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"12056e595d56b0f6eef090f0cd25a20949248c2790525d0f930218ff0b4ddd10a6002239d9a454e29e107a7d06fefdfef0210feba044f9f29b1772c960dc29c00c7366c5cbc604240e665eb02a69372a7af979b26fbb78092ac7c4b88029a7c854513bc217bbfc7d90432e308eba15afc65aeb48ef100d5601e6afba257117a95953a439895d2c") (:stream-nonce-mode-test #h"0040000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5bb03b2b21c277de6e9e5a7514e98313eabe85845726fa5d4283e0a0275ce2f454b2e7be9ba52776347e39e4e9b0cae4fab32efba9e35d336f7fe4c1b872b4d1ec5fa0c663d73355cab852547e65328d08cae1560ac0d92d007a29bd593ae0fcac11d872a3b760181beba3d4bc3f9ce06affb13aec7b5fd937b758feef8ac26e732e4b2c730330") (:stream-nonce-mode-test #h"0002000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fc4e777cd9c2b1efeff7d49753b843fa4f7dd479780f0af20a9996b9fe4f5dd8776950ae3e0bc5a2576d9c7081c6429b152e90de4bab7a483771bf1e24f02071b2b69afed175047bea0bbcb95df340f1a67052c9c97399cecd6bcd081802e37a4f6828ef91ffee181683661057a0d142773b6114a9d146ff35ae3c626c7b0c7fba714d0f7722f2") (:stream-nonce-mode-test #h"0000200000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3186005bfba3dfb84737147e6236dc8658a4e5de565b67c63fd8d57582ee260910086f88caa66ccfd8dfce68da7559c6ea6d75b28e72ebb5a68be29f35e528e7a84c02a39bd5e5e3643c528e1587f1576e0642f5fb38eca5c2c864c564f1d76eeb009b3360f80b4864f803cd3ce33b26dbdc567cd2cf8959486567604fa4b484bc8ef8cb1cd600") (:stream-nonce-mode-test #h"0000040000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4da512037bbecb1eac9a9abbbe69e88e8996b244c168479996236b1efaff3537bb79b1de01a96b1baa835cd928e1190dc22774c33c52a415ce692fa316dd08639124a86ffc75752d536a3af7d0e42b918df0d8358283a10dcf7b9f49d92f9d6c619b6361d886ab4d40bab5b525b1a7652cd3fa2d334e3017292fa6ec5801786f2c99ad004cbc35") (:stream-nonce-mode-test #h"0000001000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"10f32eb7fecce3d42ffde05e750010230bf1434e0ba64aebca3d3c8f77424eb2e901dc19639c95c6a7bfc250accb844d881d0bfeb83d94423c4609c9d5daa008f7f0beb76ee092ffb0f8374df5d36f9632594394f0e6ce1dfd9ba6ff38b0abfd04111cbdd9caed976327142f59945d916ac6eee48fbd44c03079ce2af6fca771b686f4d08c436c") (:stream-nonce-mode-test #h"0000000800000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"027f2e173d3cedcbefa0e08c48d8c99156e1245bfb94997235fd1b84428167856fd7401f6e2d7c163435af84a8412299a7406266de1e2d0ff021801c896c5df3d2f193dc72d25b195a7a7bfbccd09657ef60a4c387f8fd143dbd032f5e6350d0b120c22411fb45d01807e08cd2d921139fc192d2fd4cefab961e65a9ba23ad9df68426dc48eee1") (:stream-nonce-mode-test #h"0000000080000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"028f4547ff6964758695bd8d3fab9ff93c897f736dd404f9a3dcb195bc75a2aff96bc04b7378a87b67e8f2e53766f3743bc481869bff5d1a7476f0a66d074772c9286312d6e06932a516bf0717ecf565df1d71d152e614fed71fe2ea3f87cf21e060d01f897a86c76a4716b1736efa08cf49f5582a2901fda07786707534f8c8fed5848c9a4052") (:stream-nonce-mode-test #h"0000000001000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9e13720d755ad3a18f24358cf85e522868b4abf7be74bcd5e8b7a9ad3f733e148f51499d6c0c8b5b18219d1825b2a05b99fc35e1f7e23e9ca7deb3b3eaac1ccdfd5a325b38b0a92f2e717d5f26bfe40f7ce89e9ce402267fa559f263d73a611b9a58acb8ebec22a263dfb437a3ff79a6f63db7cfcb8e6eb89ecb66cfea9714e23d6d1f7a78ff9b") (:stream-nonce-mode-test #h"0000000000400000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2174072157871466504062b0403f707d269e1c30f619a29088a046a87bd969cc73e247390889f9c46f8954bce09d7acd9e31efd2a8180b71b61720f35789cc9d6b260d476aa90cef919f369a14b6b9646381b351eb27dea03515d010ca329559a438baadc0ed61a5c8e2d2651d0028d27b0b6d49faa9c44e84e04709b2eebacf6e563cad088db2") (:stream-nonce-mode-test #h"0000000000020000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1af6ae9b48250e41f192220633a83fd0b00da313ed16d9efc47345ec419c4983ba5dde7e8db2f1a01b34a0ecf481daef8daed0622fdbfcb96901640b30ba61b77035e51b63ca925a95b91c9cc5188201e52c56c701f333ef816bc0476a6a4294b53d93aa3ec6844e30ace6bdf3a934e8cb7497d2247085afa9ff5c7995f06ca59132334f9e4cc3") (:stream-nonce-mode-test #h"0000000000002000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b0fd53d65cc0c2c840273b57d241da21813d9b013ca0204af0315683ef3dd71e47331b4bbd7e79a45c025170e464071598a3c1cf42b155bf7ca185d871e520a2d35c2cf5a01d1d34878c8ad98c4bad4b50599516ca8afa0c2fb0b553df4c1f8076f964076a1451f34fb2467aeed01ff797fa6762c89be7c530e75c34f0fb0c214216857316a5d9") (:stream-nonce-mode-test #h"0000000000000400000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"eb938954e565c5d07f4abf7d2a0c31b111039dc17d627a206493644d279baa9a94a29304f731954212daca7a5b60e0d4475fbab600e2f8144b656b9313594e259029621e91e2d3a29dde7d105060e71686f5d09c543c22646038ece50fbc64dd262fb1f25cfe2e48319e6674834421ed762ce49d07b7f5d2f15e5fa97638a00d357b3302513d23") (:stream-nonce-mode-test #h"0000000000000010000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"11a0e76c7f4f82fa6b7904b8ecd02f5aa975609b2fcc7eb43a1750a60890b575c0627c3517f87d30ce795a62374fe4359a2995eb6733c5fc5ab4cab3dbb86edad3f24872b3311eaadfb4b2ff2e298abce43a1bd227d6de33af5003e5d5777374d8bce6f0dbda81c8e5e3b548a34c4bcea75bf4f0add8c4cb5f64e9cced31389d9330fb026fcfbc") (:stream-nonce-mode-test #h"0000000000000008000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1a746a48a7fcf2169146f7987c01d978d6897387759cea36cbdac874ed2ca5e4b366ba42d4d6090152f0abc4cc421f8e7b57d8eab1a54c66ccae5bc394664d8889da52bd5903c04e97e82b557d1f831bff8d1331f8b556da33e2cfd8b9bce14fe6e534fc05e143a48d6131732eb25ed0d52002daca470dc3640355b4362c7be16430b492aa1167") (:stream-nonce-mode-test #h"0000000000000000800000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"254c84a1ba0c64567020de8ec11ff6bfe60952fed50c5a529ac83af9ca8550a453b5e681dfaa403c1d50c429110f63384d734614739d10d6b66acb6a36960a7a7c8ced3a0d47503215e2cf7e45ef8269461d8eb3d8b581160ee818c7bc9b08f09243d6e49e92b2762f309cc9f9fcedb2048a5e130643f1496c17dd90f4a0198c8abd66728fe22e") (:stream-nonce-mode-test #h"0000000000000000010000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f78430b4089e3d967c909aa1eff1215876aad4cbd9aa321e42763cb1536361a1f40705071f865a676240068bf1811ab9f086ea2fd2291bb0cf3bddc959d61f4f0d39685f3912507030f6adf9adc30be1d3a8b71ca0fcab763cdb371995037d124d687abc627cc0541565ba8255ad9348dbd8131f83ebc32890df6adeadfeb26ecf4976cdc24c09") (:stream-nonce-mode-test #h"0000000000000000004000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"119da50049c89613f420284a1201255d5ba55816833c9e5b74ecfb3d4e6de0f7d6d9de49022458b231f1f734a1c12a3d6fa66854332bed61ebf256a03368c0b03cad6281b3c10d14b3966ddc4d982f8cc597b5e74fb6809fa53ce48ad500f6f13b39db42b91955b5e953915b45099fb50ae98aeb73aeef63df1da4595bfc16318eb41e39335cf5") (:stream-nonce-mode-test #h"0000000000000000000200000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"42881d8c6c2a55600142f897f02eff60894d2d1b928518cf691fe39027653cda925f9b998cd453010eda8648bc16dff4d3c15d8d5b7176c5df7ea99620854d73d8926ef90ef7fb12f5854a46745f7497ff4a7dfbd0675c4bf3fa94d66c7a39aaffcd6ab32ba95b8c2e3d096c9baee2fed39fc01893dcac0707e5979d8ff66f36de12802738b3fd") (:stream-nonce-mode-test #h"0000000000000000000020000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1ba173ee8b72ae13e4304cc47a58bd877bd9cde9e694957b039065f321d2e834b63505e3b1a6d644b09df8590bfe48492d03cdaf6df23a616beaf7c0d72f0f215ceafa13b7b1eb0b2e122c5fbdcea2be0c8d65a11e95185025206d428fda08fdddbcdb17c00be35f7b862fc32c57a7fbdf837e61d06bd4ae4536846e4ea3eef006a569b9d7d6b5") (:stream-nonce-mode-test #h"0000000000000000000004000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4ee888434a5ad9691d4140390467e40b69f4f1917e255d598ef951e4cc5c5a75548c69784c74f3cdc35a90055b498402dae6dc4751b53fb81496cc36882e61126be621e1093a6823b0afc16d9d7c885309498fccba4428fc8248e0c7ee91c75d0170859de4239be7199ab691e136566a166cb253fdc51280ba3bb1bca8648b8edc7ec8067a6b1f") (:stream-nonce-mode-test #h"0000000000000000000000100000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b2210eb90744e89ffc54fa13c0dd01f8d06fc10d81b1cabce25201d8f9b683ff6a8d449b69724a249cfeb88a7c2e834184ea04a3c87ba91016ef0e848a9dc22d4a5bb65b3ca2192ce98237bd0256eb566a11c2e23dad0704be6f8aa48f47c47779f8c2f04770c2d7687b991838137871535b4237024448d098e0dac6739243045f90fdbb0560af") (:stream-nonce-mode-test #h"0000000000000000000000080000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"17e8eee4144f2b115139ad12f8cf9c891ddbbc3f326e6fe44fc38cf54dfe3ca556c3fc6908a9b34d45f063e3c3d8486da7dfc0608fb927310c6ff4af19fb36cc5e1575d028f882b36809e425d646c1095ddea3c5af9cee6d9607300c027dc5a421b4e4e4ccd822b28282cab965290915656fa8383f536cc7ec8225031610e0f3bea165e8f1eb31") (:stream-nonce-mode-test #h"0000000000000000000000008000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6e58d3d69f06389b3e56d000e7f6146df37278a6cff62c06d9d0e458ac4d5ad274fc2833aaa26af2e7f81567481a1be480cdc1f6c75f63047c72ce69253b1aecaf8731237eb9cc9e6cc99f4ad307a27f185da8407f8795aa4e7f871e09fa772fb1badbe5db278509ece3dc648bd9d87e77b7b1e5607bba90cc0b78c10f90ef140f6a4250229f7c") (:stream-nonce-mode-test #h"0000000000000000000000000100000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4acc6ce5ecf060eedadc6ab34d7d7529d38ed152caa2bfe2eebc13cf143d9e391a7021a6ceabdcb2341beefa7b60d20581ae9d10499d9814b6351188bcc83df9113b5dfc8e7a1c7ef9757bcbdfb7953576176cca46e3c0a3e5e2d30fbef93e354125627b53eb268a445b152ac09158aa5b13f7375229ba04c19efe5e5cb3b944b0c75daeac92eb") (:stream-nonce-mode-test #h"0000000000000000000000000040000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"236dc2b99ace1f658545b17a69709877b2ae70373ea248c51b9d7efa9e1935b1d94bf77d7eb83a06dca382f473f4f26c13cd6c99da6b7570c3dcb0fde46187696dd7582d1fcd701a0f50affdc6662398f96b6996aaa5860990de8a9782b10cc080694654e5106132b34ecd8a57681e46282f2f7ead45e6abc8911f32c915e0d93e6f2d063b7e74") (:stream-nonce-mode-test #h"0000000000000000000000000002000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e2ba466331d2a628f9d6e6ea290d15ae5b1465a9567d37aa21d07e0d2a0a66e990d6eeb94942b1ca3c96ae6a74cbe8c2a08791dc311903bc0027623aacafb22cd9e545326f38aee0ec048e49ea6b659b1fe12af22083761292193a4221147e48b70195b9499dfc7de788dfbea165c2708ebbbcffd7803280df0c4941e6e5e5ff1431a076ef1c61") (:stream-nonce-mode-test #h"0000000000000000000000000000200000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0d1739e7ac0713dc746a0d2da442233d162839c3879c49a3580174236d04addabe5d87130c1a10d20438e70a7f26dc694deb28f5f8cf16367b0d43c39833b2b68598eaedc481a37c335401a751d24df57a3f976a046c11b85cf02576117bcbe61b3034acb303b6b2ff8e3f57fe903a2bc64611f205ba655ba39322ba26aa27a80d96e8a4f5ea49") (:stream-nonce-mode-test #h"0000000000000000000000000000040000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"348bac03c3d96da6f56bd75f786b7926603d1d3c43912d09acd967644c8b12a891956c2ce0a530078250cb0faa696ef696b517b8ead537304d08d628b71f42a82ad4116b16e7b66661b63c2aff465a3124a62ebf5e958a8d2058e1dec0d65dcf2cb90c303597ce2a7b5f841024ee327c3552ecff29b16b6ba9b9dd4cabd7f53c80f65de9baf48a") (:stream-nonce-mode-test #h"0000000000000000000000000000001000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bb4bd23ad1c4119b27a9ef02bfcd8f96daa3c5c49771d79c289157f8151b8cf133c4fbc2dd5a435212dbedc7dada872f2088b8c785f862eab2372a444d7e4e77f13aa1aed2f13365565202c3a59c3e641a04c37cda28fdf093d21a66b53cc31268e46c3010515120d072b5fb490f2c9b4a47e35bd40086427c58bfb72f7997c42ea376799fdd63") (:stream-nonce-mode-test #h"0000000000000000000000000000000800000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"64ae1ce3a0b2381f6e1c5597ddc88e9cb7472637d4871d274be9924ea734fe9c529f0cb40a5771759bebea0255ebd63a0db895095590206c7b101f7339517d53f90ad2ebb7435e5d4bd6ddbd1451d308fd0315f59c34998a0a30e2ec584d56c1dbcf9377f4df5c67862c5dbb06978039847bb23b8aa1d4075398998d3f3652815e45775e222011") (:stream-nonce-mode-test #h"0000000000000000000000000000000080000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7c5319a722506071f9f24256938dfc112074c3f8d35ac6d287ec19e8149d44807c662826efa87613f5fd40384e828bf0a3fc9f464acade9b2479401fb319063c09a9ac1a889f5ebf8e527bbec21890fa26b27fe8c8eaae6c92fd058e8d7244405eabf5e621893a246869af4c69bb8f772c5907a6a9a1064fb648cb8dc3e6e98e7761ce519447db") (:stream-nonce-mode-test #h"0000000000000000000000000000000001000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8c2e63f851f9869cf729efc2efc1756bf4819f3cf42c1006333fccd6401e07167357347bdb8899f95881d6393cea820add2c351b7be10a31fc149940ac8f929f871912d983a47423431e8a5c177e68e3323814ee68317234b038a256fc6a9fe40ab041f48eb79c868fdc8964055074c898344976e54e39e16de16eacb12e87018741d9593ab165") (:stream-nonce-mode-test #h"0000000000000000000000000000000000400000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c331616a6f81b5d7bae847f9148464d20868e5b8df30577c227766ff171075ece3816bd934edbbbaaa160fb6061f59bf53673712ba8d32899d58c3c1be988392e7e771a4803626ae80af8b9e421bd21c559017f568a6b4389ce7583c3444bb15e3fe62b2dbb5c8a169545db28647b6a9fce46505807c7d9f6e663883bbfd5fe59c6be991c82b36") (:stream-nonce-mode-test #h"0000000000000000000000000000000000020000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a14d76678fbff40c3acd0c90ecf8f2e72cd9b295d2d02e8728bffaf0b1fef38781310a30e8fc32376f4dc9f0c011dc3b7561eeb0d265eb224eb4924ba37032213990340cc01c18e247853a8abcc3f10204e8a80bc1a59e6d666d041c9d0e7ca64a9f95020dbe3db022212c125fa154f5ce1ea4aeac728d61a1c38d08fdc9f6a71f9756265f0ac4") (:stream-nonce-mode-test #h"0000000000000000000000000000000000002000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fa6dbbb34ba83c6364c4917350fde884fb06584f33b6f79c6ef1da5d450627d4c17b28efabd4c29633a8fb95a205ba7a7cf6645b211a5a52eb66f34e68dc762c068df67a1d5cbf33b48f81796055f67924781474e6066274201cb2be59d7797881cf6c83df8d7d095de7231807dc63f6107acf8d3ad28230241b1a58b88b5162db5d677a9bec92") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000400000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"660bc69c62c6e12f0897c019c1e0ccb3aea79a220f96be569b8d9ee17cd24b4ecb09c8ec9bff114809b979f17efc73bc101f2a90ea40faf8bc126b384705bc3e2ab49c62d481dfce986731d1baef69311b0e360bc5d49f00c30c5ca3a52ade3563cd631b925632ff8c56fa6a3a072997ed414f4e5215f57a9f38d39bacc66a02ae10e443e0bda5") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000010000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2b1be6a10ac0b45b7c69b8034dad1872f0841b346ccc3a5ecd50d44ee18d81df687d8d8dbfeb2486eda34a3c36b48d175d72a0726afc693206a05d7eb2f8807a2c56670c4272add9d5cc8c92e51dc63e458bbb2816e4c85d530277b9606451b0f68e299fb85eb5a54417814cba22614176faff9a8ed78376fa7660aa0ffd83a2f90fc56bcb03da") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000008000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8efe52737affb260079d72bd9b3ad90be078d4ee3147fee5fe820d0f547a090af2967059330b3a8ada234bc1f7bebab9039b2f72ec636c2a225995becbeea1c1df767daefdeaa6525ade8eab10f48bb3060c11986e989154192f438906ee64e239d17fee6cf39692e9369ec48b48f997bc377aa4501ad10e1f5d9b2be1bef86257320aca68f7a1") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000800000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1ef109d7289f905204b8e003a0faf978c6f42222c8216d820a866bac60769c849a9147b5cc0fcb8ab6d4059558dfa94083c3c58e8a756ad78620a6dfeab61bb1dc7a71302a39859d278df76da41de4c28c34905da911245bac79f6c71822a18d3dd9d304f0dcfc5a6ca29402bc2aaa9eb36a4d1a0fefffc885f21f5fc9b2d0dae9896cb290c20c") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000010000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f9b6e47156fd5a51bc2924f01f0f7c88b655ce89367d795268d671970268334d3b9bf2428333295175cc164d2b4d0331dfdd5e8071fbd7edb73b225200809e057a22de08959e58c0568771659ed9c6a890da7f386b9ca13b027637c62399ae72b0a2c8be98b90cd7660cffdeb3a249307dc4a9fb51e28e5ca8b4786d2a0ba988b55657889f9462") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000004000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"55b5cb1ed5a5fadef5618d92b84980704f144046e64317b664b8e17678cd04bdbc697981f82e4fe31605f02453407e252f25227e0079418c8e3a55179c591d5da601799cf890447116d985e56dad7b0a95f77bbb0fd01f7db3179267a95700f9bc82e161dbbe491e8f318da8bf1c996e2f85f9331f441fe432750257025d724f9da0fca89d893a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000200000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"978ae0491f84c893f3da87975c18be400d944e69cd0e56cf82c959a542094ecf6134fd649d7816e538903a2b1a55c0501f7212863e85567d9289a1cdeb212cf5c3b9bf745b384b424a6c16757db9c5624a5d809fea4cad5160355277c91aaed892e32874410129ad0778e7013eb7b7faae42e533d0448a6c1d6236bc4a21c285655810909b3048") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000020000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"526ff1cb4787b90542fe84f488cd74d87cee9199531ec1119d1bb7d84096efdc50ba0b277073556aa068a1e022933135c2ffa8671dba05cba62f993f6153f77133ca07fa9a0abdd9d48eabbc9b5bcbe793d2ab8778eb9f38ca5e724c28ebc3f629e0c509fb861747045a2e11bba137159ef471790ea197672529e6d7e3cb889dbd20fdcb43410a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000004000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bd83b455d0876cc20fbc618e2c0c88697274f2ce45b1d64781a129246a0b771944e55f351ed7a5bcd6ee1bcf48dc43987c1fc56078c3202ea39473415e8b1bfa35cde55fd3086c0c1316a48ca41833b4ac8267fa34a6be9b9f9fbe5c294cd1b3cc73aa702bd50fc1f19a8633fcbca7d2726d13429c129ee5966ee914e467d4cf1654ff4acd0986") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000100000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5dd14ac6d840f85de6a925f2ebff95810745d6899dfa5b5cc88faa7b17776a8bc7c02ae2c0d9c889eba1d0ba1f8a12c030a1476667ca1f168b9ab3cf6c120fbbdf778f2adb50faa0c77b849dc8c5265bfd89ca33abd118d6cfeac94c0c5f89a7cda08bc0a810e0ce903d1db62d8ee0227fa192c501cd9ee5020cf5a9e9c119c3b05535dd9b2728") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000080000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"69ff4fd30f4823c5157261a2c7b5dccba258ff7ff9ea2e1261f9c48a1502c8c688798f782c90031c2dc1b7de8f48615d82c447af6541de1819c9f4d99096eabc72c3a92cf13113b28caaf965fe93647521d57fbc7c9f4a32ab637bc545e10ad9e0ea3727299a517b356e186b5276254085f185ddc0db196baa59c4727e222e7fadc2875bda534c") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000008000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"740291b2fc343f1dda76ed34c8a7b3d24e35b2e478856912fc761ec3af38f59f4cde67563b94324af7dc110870ad9460f8f3427eec16884786501c815f5ee0a55323d8351034517147482cf30f7cec20281247e9ad531486599975fdad4a18d940384481ebfa801fe463c9663db10d9c8dbbecba8886a7fed43724ced06d3014a92faa0d2c2c57") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000100000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2cfc7593914e1ad9a6f86f4b3c0a3d54d1c72575645e399773a6993b5508957ba435b9f36d383dfac4d562ad2a33e163371fcfe8826414e287484d0edffbbefc3415e7cdd31fc8ebf59cbd0b3795c38296f89ea2eda54fb6b7da299b7e0e25aa6abd2bae8f34073e8fd400a2a99467fdc8bbf3f873f47ff3cbbefeb0f8dec37405026cec84c92a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000040000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f0dac323894ee9b6cdbe2d8d0939c682cccdf381ceeec8e3e09ea8510357742f9669701dc1540d309dfdfe08a06dcb8039d381a3cc61ac05bfe79b03b811582031f1c114ae74743a2e9c505ed3bbad925db485203163d1a57423d4d77d1cf7d7fa47b765b07effa77862964bcc6979bbd482e0ad3314d635d517038917413cbef7ce1e1cbc6443") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000002000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"43f23dad4a35c5df4eba3eb0131e35d369ef21fd6a79322eaa0073418c1179e40cb33198eee77661328594976b11b1fc35b4b6a7226405840d720edb5531fa608cda618e8ea6113d0adbd2b6d6144ec2c5442fb936b9dec8c55b8f7e04d5b11ad5f6c583eede6c340d2249457210e72280a315f5a9c17bc78222407dad569a6a40c669c6de04e7") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000200000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4043c3080afeba3992efba42e952a5f5db64b9e4fa52db123cd8461bff3fae0f03e3dbe13b4eae182e5d77215540945fabb70f11b8fe15d73ffd5415e0b5e4682ff0a6c0924488f6082fe23144dafab1aacf88c8300f65510274ede2f2221e0e707d4b892f81d547072a09b488d75400adf05ed03088d49731fe75eedbeb501580bada8b903562") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000040000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3bce5ae98e5e7e6da72cdecbfd8d78f1da2116df58f2f5e8dd4e9ebe208ab842ad7f1a3597ebf30f25c6e0e1243f00bc6f6db5e7a13565edc07379f6ea519043e85f199992406fbda3b1614a2984807b108672dab7c2104db82e1e508e83332f041d054243e3f0a560793f5b0cc343671974729fd987cc4feab8ce491fcb154ed35b10259454fb") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000001000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7e413eaa0d04c131dfbcb0c8f38d5a797ea306fb4886427da930f6e493edd5f4d6eacd433258c13f00697d1dc3594f7da539d46f8e6207f51ba61895b06ac1b535197e13e44f1429c264b5f1fc921359d535294aea349cb4e298a5050cacf897b39987bb60ec39a794704b4d529c3852cb7f3fb1f3636248f19c986ed4a550f02c58342581909e") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000800000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4296d5c91894ed8dc1284bc902f4697442743ab6f20f3655e5246aee8f5f5a7b210e81101b2148e8efd2495f719807fc41cb0d49a808e56d7a4205fad001b0a8f5365980e28dd0bc59554e4fa43d0496c6b2705ecd4f9c28d8502396aa9da8852e0f5e52639c54ae8df1d6e2cebfb68b820d76ac3adef6c47d0bc3cc0f0853654511801d194994") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000080000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e38134aa000c8f4dd53f9532e39d382df5ed03d880a4fa93885003906e51c9fe26fdf43cfd6b97687b928efab34816534135b94cfe350071c8d333aef48fe829806aab2a1d456e1d2efe3a35ad30d74e3ec8223279fc14c0b113f3d3d0a22f67fe1fff5cdcba5bcf93a53645effb17c46df6d40157731c5765e3fa71179899f8b7eab87b3bee1a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000001000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1546d81dcb7f5e33722f998d11cd69b43b33c6c3f5a9d75cbd8abaeedb7a8b2bb48d9033d34a1b13469d0f63325f6f9f6fd86ba5190dde5b543d3245e3abf008746afcc64fbad36df7dc8ffdca788ca07c25d7840761f1fc611bbf14c71b0aa71f23ef7d099a5764c1e91c9ac831529b7214971d50303cd0bfbd0c0e9dbb4648d9bcc4f1c31c98") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000400000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a9b91222a6fa4c9a5ea11e314455823e99d5a1da37d2c1f41ec9b07944b4069f1be5487998c1b89c76268d4a094a5d4874399788981d83143dc8829d06d78b8f8008c0f649ff6f33aa548d383d43a64745d3c0ab5a74eabb96107e0b4b25463d495e6d89ac726ade27bf29a76e32504a7c22c708246bb4d09ba91c1ac70c24419d7fa19027c905") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000020000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e7ca17f3090e5958fde8300e325799a9d9d559eae41a21418e56e57429dc4705df5eadb302133d451dc97a48f2065469f15fa92d8e96f28b54dd2cf00928ceece9fd5e3327c89253f664c8eaad5adb50e23caab0b05c5a86c1d22b275a496299a241fa4d3a9ecead95f701e7461d941927565332be439636fe7b4b63924fa4cbfc3182c1f76bf5") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000002000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"28f328768f9576b584ab7c6f6654012e54912dd1deab2329bea9a1bf1765f57d36b628fa485d41921a9759a08807b9b6569c1fa3c69ce4785635547141ff96303cb0c20a5d678786213eae79e3a459ef30e477d5c4b128f697734c62ffd2643a27383ac14e719ec57f4333adb7d1d9eadb797e95657e8b3edc5fec84aaaec0338ef8970f96e14b") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000400" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"545b53b03db43ff22fde10b704373be9c1c27bde27058d1d704d8a8ca97189d7755b9823760ac7623f2bcea980c83b6e0c35f50ed26aa5011e1493f1a9b87dbbfd0a45a951e28ac617c2d150d8b341420c46471325d83043f8a541387e08a2fb3c08465ceaccdc089e1480c06581e0481de3fa6a748ee6cdf448906626d0065c4a6504a063997d") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000010" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2f2e9ba41a1ec40d868849b6c577ad01ae2732055e4c243fcd730fd9c125fedcf235f6297b8c73a41466be7dc40d3f4fc63bbdaa9a3b94078c3cb76824b3347c5a30eba9d855c429d7dd4f57e57ccaa28ac66ca92c4bcf9c44f4b7a8c8e695add9a73e3382b7e6f4616e49993472d2806cc542041d030ae56613c1d13803a3f76ac9151e66badd") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000008" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6edc63d3c82c12321b347349b607cecf8e2e42f519026c82354fa65c1a75445eec761d2b5e0f215a61c9cdc0da28508e16cf77fc9c76cb4b53cd9877ce406e61b35fcf31823355c8deb2d4c420e82d5dfd7c2430792d118e1fe146e3712bcc5620e29d6e06089d85f72a72af813d2a93c544b2868b14e9d1ee311d54929a30087f0f6a6189c699") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"8000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ae04e24ae4da4e9d2e2136f17505ce111891896905528a38631fd32888280de56b13033db123185f994be19ce8ad1107ab945b52e406570da57c23cd47e4d33318c746277c4af7cfa52db22d833fe72efbb714fd6f4cae333324af3763c8879961a14a10584f36bab86e33e5f1e482d8052a73003b4da0c178bd7de4a365fdb991ffd159600bab") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0100000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"91cdb2f180bc89cfe86b8b6871cd6b3af61abf6eba01635db619c40a0b2e19edfa8ce5a9bd7f53cc2c9bcfea181e9754a9e245731f658cc282c2ae1cab1ae02c4366d288f0f88e001680bc02f1b19a9637a261a13bd83e312f3758ea89ba72223d65b1cd40cea478b20f4e2bbb9a98ea05fabc05f86df9a289326d379afb99b993a34cf783a1e3") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0040000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ef5ca1cf13f53e65ba9ba1048dbe9f0bf798567f77f9f36e3be148a3940d5a656c34180da04064cdd1c079ee53d5b4e4af8d321b8dbea92ef32211fc3bdc2f477e936e3be3513e477cd3694eb916985f7c172add3aecf1cd69c996cab60e92fe6018538e22337051d1acc265ddf8750703e1ebcffa2d128c525ddb220e033f12a9c9f8055ee08a") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0002000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c353b0048d9ba537c9d8aeeaa811844a01705f6ebb3e20a6f82accbeea810cddcd0e2deecd78be8e9c0b2feb3291a98ee1d4e0d1a3970cbae1160322112fb304b811d7d4088de7d94542bfa0a1e5d0f6e34e521f43b74bc1968f9527b7d2f920c11057cc6aedc65cb49442c9dab5297511b87a7c246ae7f792d0c36454e44c2b07e43c9310e8bf") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000200000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c765de3aeec8c550bd7cc8cc1f5b02c569a79e7de5709782b98f53b050b6d51d849b30a27166250438c2d42425863073d5aea9138edbce97bcf850ddcfa1a29928948765907871427dc770d2471f64aea2412ad7199915e7d001af791d13837dbd4a247129a30ae7b688808720d69bdab29f82fa3336d3e64256be4480d75245ecfa2fc489392c") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000040000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"336660d0944d2b3ef07367a28f2985a327fc04e3a92633938e2d7bcae80af2bccb7d61f5a4bd2941cbaed1105a5146de8f52e4f3b496ef85e7ca23e5ab3ab77aad06b7937d703153db1c73c7402ba6e1fccb31f29039eeaf0d50f0e082b2a60f11641e516b9742f79cf7b316ebe9ca43f79dd273204296abf2fb888ca88d373cea68e19fca8824") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000001000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"78ae232dcb2958f219edf1d60d0a18e4523a96e4e349d3487b70283764102833afefa6600030ef2d56b6296c950e02c3c69e179983b3b96d84c98392d543f5347d330cb341142b10c1ebd9e2e24b88822a86595542b03a06c6876755d4b03dd4342889a1aa255a256c378c93e8f99d1fc15bb2f1936055570d46b80c04c3057ed9105d21374614") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000800000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b5659d043e7e2ee540d34dbbe85b091290ef1fe330bca009fb38149e7a925fa0808746b8b7994cf60878fa54d66b07775095191bb39c3f686d8dff196ebc5a765aa83e697b115d2edb824ad14f10d43dd92a407b131e94d36479f7cccd4f32880218cb890638a37e611fa6bd5218c0aa4e475fb8cece119a6a48b9ec00ad35326928ecb25d3b17") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000080000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"727340e137311efb2ff52e8a25b73c80138dbc27fd092b93050277a849053c85410182ef32a7ee05cae9f824b19b174e920e1f905a47c3f35db85f0fc9912cfdaa4d66dbb02b2816ed37a4c169bc5f52e6ba3b258bd7fed60a7afa76994090b4f6ecfc8577e2a0aee1c748340d3ca9263d3df0c278b60f8c9da388f9d9db593d7711e5750e38ff") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000001000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f560a7a78a2e377609f9e15775405a91de018950232fe11726209639a87eb1a9258a0ef1c055a9870c48475e3965b128ba34ed24f5a532499f9346a7d04e0b1afc60f03c90983f0ced15aa630093faf3333348b5685ed9e789f4522065a1979e8481662c2134f271407b41cdf402844529635610850e9a10eda5e4bdbe7764b69d4ee89c7a3077") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000400000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6906af4a0334c4c252302c16606b13b94a060dd64f45f76de66aeab7ab14a37a2b09995ae765a92839680812b29a3565faa9ea2b70d6bc552c0e700a0026252a9e8409ae1ef30974d44bf81f42bb3fe09ce129ba1a4eb9c36229447d36f5aef243c97a5ff9984fce2daf0e7226e40b3b3fbf6febd7aad8ea6d26b438886b39821a7259a099242f") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000020000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"df6b6ffabcea6f00969c5b9cd1e413be6e0cb441e9062bd20127538f66d270a22ca73cc2add6258f81fe64abb4047dd68acfac4e62aca32d2227cd0708e745a614aa1bb0f62ac0b46d939ddb36c41c9fdb35356c6820e07a8dc87724fbe0d14f9896a1c5d1ebef1e5ce4e345e1a5326b7219051660836d2ab9e45cddf05cc189ed7ed71067834b") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000002000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0198e25d363794808501cca538defcfe26fe50248a7024a803679a6f49c73157e79e0e8b24a8d02238e2687f9acdff3497e6263372635b8db9d493db766246ec289f9a4fe30aaf6061839f8e8bfd2f38e93b1d5bf728674a393f5d08c4bd76557965af9f12f16c19faa4f1d917ef612f631865e53540d47351d95a9df7c1e814d015a6fffe74a7") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000400" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8c8a739b37d4303384e5c95f8067444acbe30529fe7bfde4a9170e1a717e459d76161d92a07743908f5865fabc826d0b83ead3dddc7dc7b5ebe2ddf1affaa673305e963feedd16a26a8387dd1018982f488df0513d6d7bf3f6e1cadad02bc629866ddd4bb10f2fd6c35fda48fd75d7e36635909c37726a3308cdbe74d124e1ab7310b483c19ddc") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000010" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7a02311d94e058708ccd5d7bf897d463015109cefa61e4465007301ce382d6b19f8a648c5a71e3de42c284c4a830a89a6389ff0e894ea77ca6f1c423da2ae35620164139828593fc81c55d2a5fe68816b9213db6ea8db5460fba0d25fdeb4f35f36dd87963d68e01563a2ef1ea09a72994b77d1c125f4d76e7a187dd94ebca14c16b94226925c4") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000008" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8750724134093ef8110d8747317444ff8352d554490ffeb65a912cb3653d759997b04a0ac70408c97c7e99639bf96588ba2d2153fea94722c39390d4c07e9e2089d84a08f9cbbf4e19d49bfaa00db3d947aa85ab6641572045e4cd44f4468a87c5a78d96be07e1f2fa21a3fec6fbf9925d5db7c605a0cefce353aa398b073d9c62a467505befad") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"8000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"be09068ff272195e5ef1eed497a3af4716a8ba2eb3d5e244e83a70fe61aed7fba47d79222c96d1c52b55bbd04a1e5b0a11c8d7e95d3b9d1cf3a733b2e7bda216c8ce9dd5017371d7944c7eeb0e463351ecf095c3d5bb56427027f86a5a821374330b185e846b172d607eff7490a1627dfaed17edc6b99e3a807472aad1c21323fe9d5199db9184") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0100000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"64b8bdf87b828c4b6dbaf7ef698de03df8b33f635714418f9836ade59be1296946c953a0f38ecffc9ecb98e81d5d99a5edfc8f9a0a45b9e41ef3b31f028f1d0f559db4a7f222c442fe23b9a2596a88285122ee4f1363896ea77ca150912ac723bff04b026a2f807e03b29c02077d7b06fc1ab9827c13c8013a6d83bd3b52a26fe7219e0d9252fe") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0040000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0cf25d9f71e5e62c87efb146d2dba869a99118df2c4c3264ebdd5c693da91b141967902a138adb5691130c19f3c83816f7ad6ac4fc8b20525dfa3254dd25fcade35555a0fe0e7a287e22f243d47dea823c26c4101df6c00f192c7d9a148937d1534c1fae8526d98669e11a395d7783bb371196804f9f1886bcd2437f0395484e2db65155858861") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0002000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"74d9ef204a1c34115b1086fd194dd6bfc99741dfaf47ba93273e8785f074a3c296a407fca745e9783bef403fb1d42209b8a34b09a73aaa9791170c256e70fe379151b57c30d0c20cb08530fd3cfc803d78ed04343c9e2505493607a27b5618ae87beefb383d0ac79d74db5d204f456d054e6acb537491f48c1dc643db23e555ab0e6f8fb1623e1") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000200000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"877edbe5594b0f737d748b87cddbfa80c8403f631c32831b9de7587ef9a2dfd04f85715fbcbb9faee86f3819303cda5ec04b09ac53519511823e1787a149c4a54214cb99375eb3d23dc61de03eacaa6598c1631794179ad87775b481cc2df435581a14e65e3b84c1aac3e0bdfbc92c4c6320f762ca6104b5ea4c7259a42f6e85d97c8fa0f858ad") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000040000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"220df2e2ed1b88f0a857863117edc7bf8aeb13c97c91d70d948564de9c94894ecfd901f1e8c284e7aed1606dcec8b77b5020cd7a6c66d516afac6b2bef7a3ede646dc0ad19a36ac8d35a62f090418fcec9c42c698fba547eef7ec44179cc721edadcb5b9fbae979c12bd0c01247d938539890f816a8ad7e5600b35fc5e812fa5f293876264d2d4") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000001000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1e6e344f2ee0f1e2d7d05d6fb18a4134b801c91273524aebefdbf874fbea699e658664526b99fc8e26f3bdd2f174d49a871278d7419264a04a524c4417e96c211646505ea425c76dd1eb6718d68bd3b137d559ef718cdb979136496f1b8cc451b04aeb030e5c036e4c3f9a8b1ed5d3450a558c6d59d8da1d34cd152e7fbd9e7e39d725208423bd") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000800000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7624faf477015716ca06426df7ea917296ec72bec0b32908c7bb6eae0572ae19b04f5cbd909a02360841022965dbb06906d6eea87b358c7856b7d978cdaf0e2a4e6869869faaa07315cb83bd852e72c48b25dacf14ef8ce4954a3dc12b971cfe589dfaac4834fe0c48e552895bc007882fa8793a302bb92395e9c30c7684e88e2f5fb2d63f36c9") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000080000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2079ace491f41958f2f29862278d2df998f7e7b2ab0d21dcc0550634fe0a9a38c338929b683b15dbfb2cd0ddb0cc4ae29fa8e5138971ff446489889fd19c0f4f5e89036ccd2899566ee1aebf583e8ae8488554bc90ca5fb58cf1f0dec6719bd9d61e8362c048a162c8dd191239f0ed7ceb92ef0ee12595973bfe3e8af63c281fb4f2970555eded") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000001000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"59b84791f540ae497920aeb1568134e1e5185cb21ac777d8a440b47f40bea90ceba6b17559eda8e6e3b646bc629c4c3c52303edee3cdd5bacf3540faf09b20c9b80970a76d9e996fc166a7e11bcb83c94411705a3e81d5c2511073101b3a24163788b56bb745d0fd70ba1f11dc70cebfa2c0d289af214a29dba191eee0d814f3bbf3b32de9c3eb") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000400000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"38669c7b3670787b4507e218ed84657ff946470bd56dbb95be01ecd294300019691b8c6276a06fa9603a6f7f57e26607cad73210e2ffc04382a52af30dc964c7c60a027709cc8d5f908e94cdcd2e6817e0b29fe6f936c4968aefcba4eb3f995c9f228f086cec475946360d2d904b8435cc43fd5e1d90ab47ac027ea8290b8cf488ad0602fa06ce") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000020000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"acb372d3cc27bf51889558fb8edd5e7c426539000f269020a81bb449bf25049b3248b471571fa9def846f3891c13daed21c740d7f8f1f09e342c78a98cb68106b4e01511c8f6fe5a02fa4e827be61d7d51dac77ba38da3b27d5ea00506b15e42a190ed0a47a3d9ef83db79bd131b62ab834d94193d10a2082365971d1591f44bd2526c2634089e") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000002000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"78c5b9bdc1d5ac65a4a9f61e55cf56f824593b942040b991c5e78adc8147b8201dd65501432f4e7b5eb00e8afdf88ccbbf370a5ee3ec4c3ad25872bc05bad15f7d6fedeb478790a823b0421ca76773b553a2293ac4814ad45dbdabfdd1b51b65ede8632b4915da881d1cb86bc5b029c3e2edb46ad000bc620b8db32626a283a26da81ccec62496") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000400" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"61aa285eecfa5baa539e1786e0599e5f3e6dd6a68779ec18cf2d56725a6d392cc55f9dd9615f54f40ec710f2026ec301789c65bbb81e7c76f80e517e1af6d922060db2255287cb6dd791b83b4b29158fff51460992adbe15edad83fc7eaad485e2b3dabf76066fedacbf773fc22d9e564b3602d7e27d7555db18036e25f42f4682c92b6a61f3e5") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000010" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1d95dcbf714bf7ad526a2f292b5475b21b45bf0c0452274047347cee96c0c70059b43aecf0cc828216db38aa570a897ef2e047de8ab804d964b56b680d2291001735c7162767f0191f15198a8f4f2f50bff53531dbc4137e17940e68f8a0ba024b55ff4fac4ebc037304aeb69005f75cb00cbaec41a25e75b9482f4f9d3c029a90f8926085003f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000008" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9f90013daa7935ae9eacdae3d6e0318aad3b7f4d972d64a2052c23711e3c10bf292717ead0ade9895f6d9039113267322e883acd73acabc38a50cfd8fe4a575419cb7ba785a05b19705bdb0b5fabd9e79af6ada15c48a31d2af1f9dbed5a87b997886ce2d45a91f15c3e9cffd0e07ce2fb4d763ec8193a1be75019734de4f7bcb06769c54d634f") (:keystream-test #h"91cec9fc7fb37beaccb6ec89514e7c460f63f64715cda01db93345f818e9a6e0" #h"77c0f9a12ec2d111" #h"678295272f435e4d480332f514102151e4f48e0406e38e62c81c79ce1a797afdc4fd3c2941953f3e0c75ad1319d0dbde76054d2dfb5d366878b6eda98e562dd05eaa9361a22ea8f234dbbf1abc775fa91acfbb41258385415b12097f704330f68294459b69bb0e679f66e9f17b3e727b54b94115533ac53e6132413bf64dceb2339be8ab85117c968fa49df2783f0a943defccda473708fec04b1889cb889eff6b8c565cecee87a295dfdcce80654866bffef0eedf982749fc4aea08e3e61e38eddf39e9967cedb0c07455bb1c8c1d170848841a963579638e75df4b01772af2f3d98a151a2ef3ce2515f902f8365c5f8035a7f7114870947f6d38882b8f257ba2b0c9d8188656d193dc26bd9586bb81ff006df42fd1397966cd6016001eb72fd5eda908906dc09731a8391f4317828de0760be031a95080c1dc2fe27b0757f4937500987bdd31b4d609712435f8754b55d5b8d26a00f552d9b5418ecac1295db10fa7e9640f7802e6e63fead7a61fa48588563e73d38b0d2b1040cbc944f56900686fb2ed29103119e6dd6e85bd7dfe139594730b16018487db6b03a6463830dfc3087493e0dd5f55438cc35b0f4bf84ebbf5e37b58aaa5a1b841ee92cb780a2f025f729b9bb020315d480d69acd44960d2eec7dc92fee34e519abbaa45204334bc6cd866cca4c3e5a2797c675a3b1fd9da9a35a5e3ca7d40088f083bda4bce055a15b8a94423f466a39cdd4e6dd36cb02e53a24659b63c9ffe2a4b45ee4be7b9f80f0fa508d42d7d204dee1ae6ef5d8f499c0c43f1e399fc89c61df7ede3abb72180e2caf71103fd17495947ace49dc8eb320aa113b585920b1e211b698190183109b78a2f2e0cf3b2c0c26274e61aab534a556a0e79c8c4d2cd74006f90517cdc09ae60f5350b4acb9cc56bbde0f1b9b02bc54c4f2ae705856c821c5f4840940a2a07abf8b617bcf7875aa39a199937fbcd914e1b03ed8a200dbd81d46c7aa0b54b03693ea7f4f55aa81d57883c7461b3f6d26781ad85cbc08d2a1060fbe9f1dbd085c27877af0e64c216d1275977bfd24f0283f62ac229f03638821c3b4e541913475412dac02ef5939ff6b6f242de41536d0c11861d4c2711b759942b901b468814f83487fc4d332cf3d1f77aa3ec95876953ddad286cabfbf6bb251ff45cb1e1f21e572f1907d4d1d862aa26fdecae97088f0e6561590f4e779459280044688202916526ec572488df7e299f487efcd04b80226923e26766f3fa5fed7c00e0e5b2f8690141e9820804e0ea6aeea3553200f31d6473004da4b8d4725e8086bbfd57937f920d41c5609f99edbc0bd26beb6fb8ccea2b41a1d1b711dbe55ea4422ef2c1fc31939bfbdcb026c21049c1317bcf10193a65778f913b67e81a0facd56059ccd4c4d2") ironclad-0.57/testing/test-vectors/chacha-8.testvec000066400000000000000000002521261420372057600223500ustar00rootroot00000000000000(:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e28a5fa4a67f8c5defed3e6fb7303486aa8427d31419a729572d777953491120b64ab8e72b8deb85cd6aea7cb6089a101824beeb08814a428aab1fa2c816081b8a26af448a1ba906368fd8c83831c18cec8ced811a028e675b8d2be8fce081165ceae9f1d1b7a975497749480569ceb83de6a0a587d4984f19925f5d338e430d6f4495876b511e") (:stream-nonce-mode-test #h"80000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"beb1e81e0f747e43ee51922b3e87fb38d0163907b4ed49336032ab78b67c24579fe28f751bd3703e51d876c017faa43589e63593e03355a7d57b2366f30047c50205727da41c9d3fb42947f0dbdada45f5a50d77078da4fb5e25417eefe2ab60df7b1d9ae2ffee8db188dd999e165055c81b1f1765cb446c0fb1806d04406049075f6dce4bb646") (:stream-nonce-mode-test #h"01000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"03a7669888605a0765e8357475e58673f94fc8161da76c2a3aa2f3caf9fe5449e0fcf38eb882656af83d430d410927d55c972ac4c92ab9da3713e19f761eaa147138c25c8a7ce3d5e7546746ffd2e3515ce6a4b1b2d3f380138668ed39fa92f8a1aee36258e05fae6f566673511765fdb59e05163d55a708c5f9bc45045124cbccf91eeea587b0") (:stream-nonce-mode-test #h"00400000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"eef648b11abf51c8557fb930d7cacf451b1523769ae8dcc708f08d5dea99240f469f8f8f5c716420c007695335fa9f34339346ad8688b7963f661a1b13ee536c44321484ed174b09207843b0b85bcb43521c0e8f76c164b384dd63470703d722b8a4391478f22fa5092510d7348600e9ce0c7228fa88914b4e9454581c53687de9e5575d8624e0") (:stream-nonce-mode-test #h"00020000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"95995f22f5c0006e88e90df1cdd257b55944ef9891a763d4d2d91965384c29f3b2479aa41bad2a8f547fd81d6562b5fb23e2d6118f92fb2b567da31906343838227f805b67955e6be91b193d706b001ae06f645c82ea2feef4d250159804c525d0aca893952c4c3aa4f3980f0c8ed337b9ca15e522cf6c5f6b60ae723324d81faae532ae518b5e") (:stream-nonce-mode-test #h"00002000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7a7c8b2a98419e9aa6c56289589bb2f52ed51edd6c9962a2bdb449759bdbd190e360fdc1d3c1061913aa6dbc17dd1b8118105e726773fffd4b2c4e8112c27869d17e5fbc7917e4028b3da50fe3b525f9376e79f9d82ca33745f4efef63310374ffcf257e91b7c2466ec88f5846f257b015dc6fab5be61e25cb0cda74c0849cac681f2056cbe693") (:stream-nonce-mode-test #h"00000400000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a334d54b70cd79c87996a22192017928c49f7698107b99a90506681f7516ad76ee0d7eacda2a23a9ba5163b486cf782a24d6ef8f6801a6d2365bbef819aab1cee88baecf191fe7f486dbd3122a45c9b1c7da35b2d5b1bde55f32c7abd51a6274427c781fd1d26fb3360d09f62130af18ac0183f8d30678fe51817789b5101a199ab033f909c38d") (:stream-nonce-mode-test #h"00000010000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"184f44da2e36a0ce035534038effca559c169c34e1eccdf845c28132e6a91396dc61ae3f335203c0cb1896e04e42a48ca77c6a96c0722d1a75cdabb91ea15209f39dc16d18d5bd2475c9f8897eb6691f3051b2091ca580f8d8dedbade0374a1d7888e9f1a961c3a7e6bf43773ad5c03afa50c28af17a299a2ca8ee559adec31f4c8c67bfaa447a") (:stream-nonce-mode-test #h"00000008000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b701c323fb12b05954f0d34bf01eaad2bf9796658cc6ac5642435cc321f62f4b6fec7c93c2bddc4f999abe3c330e608f66a4395b5d9016dabc7cd3a28d04f4d2267eaa2008b45a8e5004de6638001f1f08e4deabff74cc98aad6b7a37f55efc9427dc45da85ce9d2ce94119ab09580ee80759d5654e954fef08bdd6ee3beea947976f0a57cf362") (:stream-nonce-mode-test #h"00000000800000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1190727dc8cea2e5caeb08d9db8852ad66a6eb5ab990fbe1a32530f47b581569078428a663a740534c0880895790792f8195fd872b4e88425bb25abf33905363054d18b1f0c904c1a891e44075c3a09d91b41e444608d5058af4fc18b56019b5fb0c43d2670bbeb5568e645e06234650ec2f3a0bd6980418cb44a0127a8a4f23bdd18c911ee76e") (:stream-nonce-mode-test #h"00000000010000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"13c8beb1a3a94b80ab8dd029c18e144bb33ff17d6c957567528afc9dc64bd893aee7ec821d5a9480c8f3da965957658694b3000be081554f5ef3369e736b8290efd4c6340185a2fb43db950e6aafc77f922d9a6e13b51c4a8228ac6e1bfb743280a9cca90b395e8f285ed479902b3bf247ac77fabf665befaaaca0e5c03863ea58df669106bebc") (:stream-nonce-mode-test #h"00000000004000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"02d8760224c38920449ce8d6c4b1f57d290879128c496cd724743b3cad579620d9a389855fe857f9f195aef279ae53f703b3908a93ac9948b0ad465181b594277508e510be6cb36dd0a3e6ce2283bbc7f7c189fcbd100e570016e0f674d0efc5d29fd66e0867be99b4d0c0f41d9b35e4b64ff7710bda747b7c54d91c1fe976b67cbaeed420e841") (:stream-nonce-mode-test #h"00000000000200000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3388dd37601c856e8439a0931e629bf954ed8958845dc3aecf6c0a4f43811135dc6427795d40e94bad2f5e84cdb264bc5aca46ba715fc63568d019f8627d2c2e370cbef7b79dc7c2d1b7c6f320fa00e4834732f3d2e83e666dbd6f8756db2460810e76c2908133e85f022d2859a3146d7a5aee14d63e9dae4df376f7e418fc7147bb38511487b9") (:stream-nonce-mode-test #h"00000000000020000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4b96c959ca1b49618a8bb09512ebfc34c247d9f00ff0e16cd948e3c23ed3b53d4072baeb36a499101c006b1be236d7791dac3370a7efc46198a63e4acc6c98aeb0952c1a114b4f92195d828310f7aafc2c7ea4099549ca7022aaf203641fabc51b617a15826761c05b72358373105f1c7034b516feb8415f4694c9e6c9656387fa07b1a8357fda") (:stream-nonce-mode-test #h"00000000000004000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5fe135ef8f2e6f8255b24c861323bd5697af696e09e85b4f6c82a2047e0dafb189d1d9dc847b4e9b7069d5f493dd3b6fa03ca1ab5a2919e9f7de7d8207177b8f380349cbe524eae91647af5f63a9d0af0d1a891401a24445784b2f61d91775b28ea0eb9242f8b517de97860dd94f38af3fcc2c9f6df1ef74403793b14afc38532fe881c8bb5515") (:stream-nonce-mode-test #h"00000000000000100000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a2c493fa3de8783bda09ea2cd088d16049444ae17ecc4fd1918c0b17f2938687de1170af4794cb9496a80f272dd48c205631ae087489a20b7f69f6a5ead0b86a6b3130c8b530c797add4356be632b9e17317f0d0443c57f4b7662e72dbfd77930cb43c8444149d0ac6839381716a0bd50175d51958a2cf7da7b66dcce780923125bd1c7722ddad") (:stream-nonce-mode-test #h"00000000000000080000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3607f84ef4729d20e4e367378280406d66c7be088489a71429ffecc3d0e05d3b0fd4791df6e8ccb4f07bc33fbfc1599e1ab419dba09004e29d1aded658cedec866e05b3a189362e00d89798683271e08d922660258cb9fe1fee043db6956aa2f18028aa676570e106665f99c192318d2dc54d3dca5ce14079bdc4aaf0f3a1b8c1609c488ea5ba0") (:stream-nonce-mode-test #h"00000000000000008000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1ab27f32cf9ebb3c90d56e5a5e5760a9a1e2f92a4f04033b7d90c22be7ff34bb5caadaa865c24b18d2f6dda593d778754ca8bfc0e832e48fe4df07e198130f5b5423d43ae094fa250982300d62278b9733345584ee67ee6231f7283acacb2069c0cdad7551bd8cca8bb9c7c16ce945ef23ebf6d64d449db4b1a15cf3bc8843449404b8b65c4149") (:stream-nonce-mode-test #h"00000000000000000100000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"46c8c6b5113220fbd32430db04194fc2416dea5937e44ea00f0dfc1b411ab0617c79b6f1b0147b4098d5ebc9b3d751e27ef4bb9907d1e11eea036503633684c4fa9ede06edda4351816b1e9073b9aff3dd89febd4ecad182853933fddf30c1e572caa919324f17447fced7aa594801f035c13e211e40ea0b5c3e9ea35d72667fb9d64e3efcd742") (:stream-nonce-mode-test #h"00000000000000000040000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"786bf95380a85ba6296517e604e1d0a0673f0504b901eb0eaeebcb00491684cb26e850852a01f3f09da7f9da8801292df08bc1f98a738409568754df9e4410993c6e63fccd475743787093e3fb2c43603324850631078a9a0488887f66fb127b62598530073ab391715cf0433fdfb2b03a199930ab4f54f6d23a94b783a26547c195d5fd4ddd75") (:stream-nonce-mode-test #h"00000000000000000002000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"32067330f18837297e75fd2c7efab480ec344bcccfa9c18209a443780147b86179eaeac2f45186a7a397de05e32bff740cea63e368a1bcb6425b6139335f4db8ab8623f77183ce919706891c676054d34ea0e9deb44119394fb28855a39cc6f7de7835ebf2d535ea22e88f90913a65b2d32a075cf2510e6c884dc46218fa5f34282d99170b6c35") (:stream-nonce-mode-test #h"00000000000000000000200000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"81ec9fdebbb969f61687273a65592a64b5a805080eedb0f4ebf18addab017a5fa66c8e4ea92dc39af11d472f0cde8b0ef29e19861565ef1eb3e3624fb6d30a3e361cd516b14b86aa39b11383f1881b9cda24247094260623c3288379d7e5ab9630ca82e8d64962d3a3801c00839c83db4e95b5cf62749bc86d11151c43d931eca2c46b8d776a5a") (:stream-nonce-mode-test #h"00000000000000000000040000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f5921a8a4408764a1204fd47f0b78361dc2280b137b3f4f7cb4b1ee262043500a7c3329cc65132510acda1f7f02b54d70e890ab374c51746da834d07788d2d4bcaf0c387bbaf30499b36114ddd191e25afde3454e556407e0934e7591094079d76e60342bc342bac946576d385d2ef731e1bd9ccb9b011e2404020a48f1e46e7fc72ef72f3ad75") (:stream-nonce-mode-test #h"00000000000000000000001000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b69398edcbfbcf82f3d917c0586a136a4014fd50e59007c63ce907508308d4066fdc9e155b4b3f9473470cf2cb6d3d09da0ba66315edfff52e3b996b435b62bf95d4a4830e55c36ab6ecc0dcdac8fbbdd8e69243e9bcd36edcc30442ab63c67e2b890da84d9d2f9166a54abd9c0461030539b091b850ce1282f32a8b8df4ec58a79db342b9bbb0") (:stream-nonce-mode-test #h"00000000000000000000000800000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"26215392bf6257d72a49fcb3da1e0a0e50e891072196a080572878a83a9bb808a3e9d8293df28b1070450b2248917d72a7ac90131a07ad29446eecb5d17849920290177d44b1137cd93666680e1d5678f0efe9d165358c249ad6a4499cd1390c789d8de8768d057d40dfa35fa8def98b4b16ae4217a0acae413b52140e2d6594bdd79b3e011d34") (:stream-nonce-mode-test #h"00000000000000000000000080000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"892141e5d9df6e0c297d2250ba7ab7d727a8edea3f126d72ab26075ae36a40af0ee02c2eecc02b9f75217a065772455d529a4e513b827af9a922d154bb791da2429d6a8540aab59c15acfe1514a9571698b07f76a58e73fd98c7e8668c86731ffcb58400193d0b5d4a7be521ce9898795fdfa302050318763b927866d163b4aad34d144240b6df") (:stream-nonce-mode-test #h"00000000000000000000000001000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b2b9c504cf04dc10dc004126005d02dfdc05c900eec704022d2c163a5c8920793cea91c1831080072a4f50b89158395322af859d28f0ef016b87a79eada624a8e9e348b1365e704b66c2ff20e3f10fe2bb794b4d0a91400556fdd9485b993e8a89119b728fb18e7c3ac5d1183bd1547105d5ad493c5e56409e8ee2cd28fd900d166851300f002e") (:stream-nonce-mode-test #h"00000000000000000000000000400000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fc25d80448b2ca752a71b2349a030a5504f12ba09f3dd540e346946df23e87c4a002e861f393a2e155217c1ec535dd020d60f1c4a86cc2f3ab452bd6b0c82b69a25718659e13ebee6e12a2f2d3c7ab93904390a275a1e0f28dbaeeab258e3bf978ba4cd8d479da6b2d04084445d9139caccd51038cf3d7984b81bd6800253b0315eb83d1f4130c") (:stream-nonce-mode-test #h"00000000000000000000000000020000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"80daa04951a024e5317d28cb0ee11b5f41005f6f4a8ee01435163e4d87c76ec8bc6a1c2406a0f461c7176f087be6baeb98590b0a70dfbdf7d64df4cb92980216ae722e1338dba26efd929e15e91b002a9e7aa443881ebfb6709abff5acb513d321310c6fde56d5ae2a036094df0f0fa6ea2260c5f0d4f8e546f299320b9d1c0b5e503ac958aa6f") (:stream-nonce-mode-test #h"00000000000000000000000000002000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1da60b640c984a8d662328b23321b151b09b7b57c97442d768bc134756cea2eb0af895f4163fc6d6662c0258970a941b714aca622890fff7dfa5089b94e113ced4398c9cfee311206cf0472049022cba2f318d760b5ff6f985cc036be6978106b83475002f82ce883f99ab5859011e6212de0fb6c0b8c912b1b093f3c4052260eff8dcfae11513") (:stream-nonce-mode-test #h"00000000000000000000000000000400" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"acdd114f53f57f902e78032de95ab68c00ac514520ca494ba521b6d21c5f2082d621905efe668d10fad3b03d44ff12b10c37f335fb13058ab1769562d6fae902972d83b6dc49f85be19f2f1c11ca2fa700950358444b6f2f88ad6db66c1c1a5cf0459d7701460344add0c8b3e2fffd2c9675d9261b643d05a1bf49dd3c72190d161e5bdc780a43") (:stream-nonce-mode-test #h"00000000000000000000000000000010" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"83684974c5583e4e56571ddee8606b01f01f83c3736bd3d95ccea3f7f69df5813e6328d9fa3081b793fcc703c9c80fdb8807ef335a5e33c15548022f33134398df911a697ba3cc7a875559b40a316fe1e1b0835a3809dbdac5bf9f95a7964565d75c8f6f3ee488e2534f9ffff5881f1b7553d885145448e83de23271f79fac5dfbf05c6047b4f6") (:stream-nonce-mode-test #h"00000000000000000000000000000008" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2704be97f07be0dadd76fadc6f618b41df971a70b6a4bc66d01f0cf3f1b65a5d8a7ac4965b68baba3f50386c4420119a23e8bb5d7147d33e61f1624e60ae9fd85a047977b42f81ab7afd3a8547624b9c1e74e8d6de2ff261db13f5acbb4bb3284ca9c90d28ec21820192a1be5857aae1df7acf4f89dd4c191a701ec0490840348478513181dd32") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3e00ef2f895f40d67f5bb8e81f09a5a12c840ec3ce9a7f3b181be188ef711a1e984ce172b9216f419f445367456d5619314a42a3da86b001387bfdb80e0cfe42d2aefa0deaa5c151bf0adb6c01f2a5adc0fd581259f9a2aadcf20f8fd566a26b5032ec38bbc5da98ee0c6f568b872a65a08abf251deb21bb4b56e5d8821e68aa7fe7b1ff12cffd") (:stream-nonce-mode-test #h"8000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c6b5c460b03262045de1c4a3f8b1ed0144e58e37623f6119e9f14b2cd2d68a87a557688402e50060df447773c2fcb94adac6f7dac891c9ee93448492a7e9c9ff14d5f90fa33c1924854fb32ed108c06d8465380eae41d3a223afa0d52fbf41ee2883590090e0983cfa3d56f280a11f0810d535b19aec91deefd1fcf6dc78444dab65f7cb60395b") (:stream-nonce-mode-test #h"0100000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cf5ee9a0494aa9613e05d5ed725b804b12f4a465ee635acc3a311de8740489ea289d04f43c7518db56eb4433e498a1238cd8464d3763ddbb9222ee3bd8fae3c8b4355a7d93dd8867089ee643558b95754efa2bd1a8a1e2d75bcdb32015542638291941feb49965587c4fdfe219cf0ec132a6cd4dc067392e67982fe53278c0b4d330fcd4a025e0") (:stream-nonce-mode-test #h"0040000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"080586a4bc030514cfb3c2a44fe85bf35b67464c21bdcd688002759a9f3f45ba6f2304b9626a260d24da75a2afe7544da2068af6ff5788812700950865a24696290dbb095c5f288b5fa0e70104712ac046194dc6fffe42419d865c5f48ed85eaf74ac1981daed3870696e293361a656dcae7fdd075105c7a59eebb6fcecf4e89a4c6801599a1fc") (:stream-nonce-mode-test #h"0002000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"766e385e4c39f5c9fae3feec7328b5b7ca610f0cf97635be85d64d39db473cc43b8323f9376ff6c93b7efdbe3f5c0c81b9853711cf9f80689df81dc9a9efd75e5d2b839005a62c0401f360ae7c7232e41d3bd086f04343d818007f2ec028b43111e5029b1b747dbad93f6bf376bc0f23f1afb2603f1b21d61d85c9024817ad9727c7cf86fb8776") (:stream-nonce-mode-test #h"0000200000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"653f4a18e3d27daf51f841a00b6c1a2bd2489852d4ae0711e1a4a32ad166fa6f881a2843238c7e17786ba5162bc019d573849c167668510ada2f62b4ff31ad04b8c69257b2286845ae99211a89fc20da0f57f4eb4b4fc7d4b4bcc693f2ce8fb7f7defeee088f31b1aa21ae980d0ce49c34ac1a88742312c2346ef02e1d7786e70253e2e3b12337") (:stream-nonce-mode-test #h"0000040000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7b0d66a51972348a441b2b7a16e06d489d24c4fa5bdd954dc873002d25497ef7d419da073b6e3778f996ac35e4cf14d3e29819379bdfe96ae9fd964f84db2a548f988b923dc5952bc4be510e0d3270734965903d192f4b33d3b6e4441e45f0ecca75e3b998ea172b33c3fbd1b2a5bfa8725fb1ff047b3d4ee798084ae7a5bd5e5e8f77a9101581") (:stream-nonce-mode-test #h"0000001000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6ab408102464f3512f6b9abf508d5e3972016bb14d4182bdcf8a811ec84d4c6d324d933a442ba4e9ea22e250be1e10925a3843409b38466f4d4fbc13ea87f4788e482c20c96c7c1f1b746301ed87d97df1066383658d88c3a1cda0529a7540048543bc04112f5d1a9be7022a8e0e13d271e82176d829350b8260fa86a45d9cc6fc908b6139386b") (:stream-nonce-mode-test #h"0000000800000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8e969123a640cffac7461fd637419c53831ea1146be3056b0db7841c078584529a2b822d072c3cb3c7e9cf72a6309d22d2b967d5cf68e69e59743427ae3f62b4d20716bf8ae7cabf89033be8212d90a1c4582f163e26f89da1b3ba23671dace065ab72f7007349eef2e94f5e253eb38936888f88fa2c7e554b4e457d4d790669ce4eacb82f1212") (:stream-nonce-mode-test #h"0000000080000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"dd77e0307c1e96ad3198c16f473c6cd9dc1e239c96068b8444d6f031a9e6a1a027077d0b97ccdfed3e554966ae7172699434ffa153432b255e6c31335e6fea3a84dc3d78a557918bc40c4c91f72dc7d5f607a2e26062e7078696d77885146c2b7adb71fbd4bc8e98c48d13417cc42f2b8db4e0152c49ac0e543a00c222cfad81a34bb8d8acefdc") (:stream-nonce-mode-test #h"0000000001000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cfffd822512d24b30fa57b44d1c3e913078cf79448e553da1b5726e00cdfd71dbaf856f1ad1311026bb2fdacfb31f99f5c0e4570c14ad638997cb19b86aa09944c42efa654fd8125ccd6158fda9aeee126fca74d0b50c49daf47cce30ace65cffd03dd5335c80a1026545481b948be607a3402ee80ecc726759b5e353eb453841775f2c4292e49") (:stream-nonce-mode-test #h"0000000000400000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"67ca138c98dd6276454ca5b1fab1a6d0e76d2691ce8e8654d61efbd09cba6d07c79b5732cc452b062569c87513bd7999d4145774d94723f3e4129b6bf11dadff065263636d35dc4e7cd02ea32654fa7e2033c8e53c2cc655c1e239ed59ce25693408180163a8b9bd8636caf21017704faccf8edbd22ce7ac6270730a803b804671c8a05da5be93") (:stream-nonce-mode-test #h"0000000000020000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8df8d9b58f0df821e161c5a31c07a69fc6e7950e804b34276ac9936e6dd11479dd9e4e7edffa237a2dce53d191ecb2bde2f1308c613bd8ca9221c7ab9dde81bc6a4bae0293b9aecbf33f9bac6cf9a1e2f4e88a96a4be8b9e61a2773246b4a7c4f4167de78c819d7c80ca9d7ae84421ec316c06bf7dd77973d00efba066c87711e8091e0f5e88b7") (:stream-nonce-mode-test #h"0000000000002000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5dc4050e27f809d995242d5a7e602ab9ab8c5debc036c8279aa95814c62b7c7c0fc3f690ce7e0462e6ab8f9724f948040dfae6a4423536d5dd521cb162b4640f84d89c96c28be80065c2a92543a9d5aa0f9c4f192a737e87b2d2da51812500f3dd2d1f7a7bdc987f9a3a405c8d9b856998637563b668fb0fc084e1ddbd6d10754c954507f199ae") (:stream-nonce-mode-test #h"0000000000000400000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"283fb43fe244249fad413887fcc0b11aaa0d77943aebb42fe5028dadd4989737e27334966f635896370d7f6df9e881073f7c2dc1a4aaf4c533dfc5273a52a42a1110dd0967fe1ffec4d8c7d6fc3c6d1e75d9f9ff2460415cabd6e57cf4de6296eb8e95128bb3551201682297cdcc53d39e2e2409361cee16a853413c0e47253567c32193188e11") (:stream-nonce-mode-test #h"0000000000000010000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"05cc7effb11c1b60ab77e8db738b003fbbab38a72cab18276a442999c8faf1d4a1c8e18903b3ec7e4d932ebe3aa0546b322ff00251c9f7bf28fde7d3847fadc5c2a87db59ae8f95e78edd87e4ae30a2e5898d0e30242c20e45384f548471d325d2d64fa80e0e38d286f30970c8cf174886d3aeac4f0d74e632e8c00c0a120ab5e8eb47d3e588bb") (:stream-nonce-mode-test #h"0000000000000008000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a752eeff48da9994d4be5107c5f748de54871ed3d0be47aab4d27e144f2d05800dc018916efa8b8b46ba8882eddbff5596771519c2e71d8fa4dd2d1d7c935c8a12784aea2623a27fa52d47bc725fc8a54c1ee6c1e04da81c549f1746a997483898506db7ccc40349b77cf66b187347eb2e4e4355a436c41f48ddb6d83d37f1b750110553899758") (:stream-nonce-mode-test #h"0000000000000000800000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"921f5020fe87ff391b8ed2759c84abc253c8825523d900ff7e427f9ad68d78a5fbb901f2146b7ba3d708ab7d74047d721f1b04b24ec5bb5f709bf7071fbacffab2164eb349ba22c04537f3d979682a51bd061339d08fe02fa89fe8bfc42f38219697536260abdb6a7fc497565b0a01bd7e421a18e94cd1e42a269e9f12ed884c05493ad82c0f43") (:stream-nonce-mode-test #h"0000000000000000010000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6565d752d0e7eb3f05a839b9fd899d51c696218233aaec5e93f7284ef974d09ab5179e1c8c8dfa43fa662709d019714e524501184947ec43c7790a5a04ef6cc2152fe0cf5ce6a2f21d08489cbcabaa2fb92b7e51b8d2272ef0240689f81fcd1ae2e051368a29863d5a50068304087d26a165b6745fd471ad34f83d1f0a6ec8d1ebb271498d53a0") (:stream-nonce-mode-test #h"0000000000000000004000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5cb7ce7aa088aadece47889c640e3b0ff8edf3bf2fb22aa5d2599f7e164ef7f8d70febf96d0fd864740b18556d642b788f167133e0d426b50126382ed296a1d5dc999fc1ffb95721182b5586a28bac50e54dbaff24a8d12882eeff35e27e9e9a14fd4a13f4706fe60518e3d9a337a0e635dbef1d03bbd936e6a5f139c6350bf193d8a4e79a4134") (:stream-nonce-mode-test #h"0000000000000000000200000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fe4ade4e071a40da8ad9c392eb4ac08b627c7a149d63b1f57affa07fd88336df38de6e378c1ffb1665c68452dcf4eaee0c7a6fc63df1426773eacddf9689e950dc0704b41f0b6ac0c66e327cf050a92aaddc308f68fdf5901292605ae80fb4e3563a6807494e5bd8e327432e3921872169133a5e0b78b21f2efb4cdc8e13e48746542aef770a0b") (:stream-nonce-mode-test #h"0000000000000000000020000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b9cb457211f03041c73ca1402c9f2287677b09d441fd105548b965268cc09c9ca65f7da3badbaff985b7006fb51221d86e7ea131dc4da78ce5178f00e3aa8c1fe5bb64cfb5395af567d70d1f53d0d8d4b4871827e98ee08e8f871ceb20aa455fb64ebb747af441a0e9e046d71919db6b9b46a2da074f2d3e1881f732cf834f6386e1149b083f4b") (:stream-nonce-mode-test #h"0000000000000000000004000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d755acea62b2a9ab0b5f191e0330fa7cdacaf7558a53cb7a19cc4671588b5a436026660222783804fe894e49ee7e0b21fe9b5dd030e9039c8d0a17bd0b9e9a9414be4351e931a676b912f73c1c38f120a39b2691294c60a46f3806e8b8df216f0bc96e5e09a0d87ae8cd0760c53279cf160600f7a79de6dcf788f81bb92f77a2c7e603236a238c") (:stream-nonce-mode-test #h"0000000000000000000000100000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"880da49ddf99332711ea92d8cf3d5f401fc37c1b8a2e0443f0892a42dfb48fb46dda37b36723d40e715f709f3f4819c2b2fa8a27c664dbf3393aa4239ca65a01794edf06c8d9c1c631c2e92f6b76d8140fac6c52e75ca531537feebfb548c9b1d3cd65b99eb1bff2566126db37df6d510c66be28fcea48c1fb3da62694996922d3636a804594f3") (:stream-nonce-mode-test #h"0000000000000000000000080000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e587e7744cda84f0be0eef60b9558e18505d12fd23f9b384fed598fdea4ac135ffcdc3cdce6ecb361b22f788772a4b9b39ef33934d92c916e2084bd2f6c62996993f3a0fec48aa6dfe080929748f9d1f49e9a404f3ebf71b4b4dd2ceb32a88f9d57d1117bac4855e145701a52e177479f357558693cb761594d2567e924633969f934bc9b9ed63") (:stream-nonce-mode-test #h"0000000000000000000000008000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b95d520ef21e359c6725ce13b6da00835b5bb7e2c916c349ae3769e69163400912313b017ce3036bf2c910d29d20b73da0da1f4ee9e3fb7e990a327a646541878fb2ddf8e4948ac4eedd70a0b6b5cd35d9a20276d08991699fe66637237c7a878dab0bd4179238704a4ab83d75e7679f43c52cd36aafa758c16c54abac0a4ac6817944380fb47e") (:stream-nonce-mode-test #h"0000000000000000000000000100000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"97c3034dc606154e1294f6ac2ebba5fac9a9f2b5fb3c3f1906efeb3012e5b6a1eb3c002acc704fe6e41fc8f79b64f7acb6d3a0f499ecbbbbc540b132b118b3282f7f2738f813fff931d30ed117740afd5bb14fdf39294ca3ca157cadc0b7a6209b376bccd297811283ff6cb84d06d80015411467880b8c5391f364da57f7e42423112598fc6cd9") (:stream-nonce-mode-test #h"0000000000000000000000000040000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0f2c4c6714f63fcdfd276ffeabe7b66dbdbfff071ce479f889ee65d614c10a7de5b51778cd6d2bd39ed89d9664fc59d722bf2ff6ce829ca2dfc6fc821612852818c0059c4647a30feccd08b52ab3316596f375bf9c445a571d8dc0edd9bda88f498d1eaaef903096620df1277268851fa3edd11abcadf8e2b494ff071ee47147f9c977590f3e55") (:stream-nonce-mode-test #h"0000000000000000000000000002000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"de2b7be26d06403bae56bd11cdae8b698681fc070066fb6f9e02ab5d1a4c94c95e7369b8e9b1abb771881a4054f555a0101187c4c214aca5e5a40ff97956daca1d8c3acafbf04613d535eebe5870f9742bd790761b0182e0b0a4cc3bcca80acac7b08a7557b6b5f31bfe28a7c653e71c209965fc75229dd807d03a320d8c9ae8cc53e7e0aa7a2a") (:stream-nonce-mode-test #h"0000000000000000000000000000200000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7db31c09f2ea4f19ef8b1ca883a275b747909a393da8e99208904d2d681d8798c576d5a0074e6f78d2a52bf35b7396476375f5842eed9d5b882a7fa9f0d6e423d94dc76ca471db0eda1029929d62e7be229aa04e144dc4332d68f331e64180e3465e7c645a0ee96f368ec3edb03b04aad23edaf660b1ed34ba5121978f04ca2e580cf7145a40c0") (:stream-nonce-mode-test #h"0000000000000000000000000000040000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"df484d61495467ee71110418e266cfc984899086cc7a11fdd72af8794b2b0ed00de3d78856306827e29bf2571c233b0b336e5e924088cd866b70f077b2e6c8a34f7638f3f8009678b843c4ab128baaa847581d438488803e19d590860f9fb259fc6cb517767ba06069a0a264d9e47a50e8d2587e09d0b87fe85dcbd8d0196b0de4de0bc833124d") (:stream-nonce-mode-test #h"0000000000000000000000000000001000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"62e2753472fad59e96ebeaa742ab7c31f33773718455314364c47d50c623b2ba82ab13c5da7a90cfb10fbff71a437e9a21488ce5b8b9164aedb83f7aae32978acfc1a54d74874eb74a5c57dfa5640e7a971d2d55e9086dd192e23bcb3f583938d7daa7a6bb670c40538db32eab9d31dda00d4cc3f54157f23af47fdf34c98bee897973e30b921c") (:stream-nonce-mode-test #h"0000000000000000000000000000000800000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6c06db486ea412462cdd9a43a455810996b356721a8cd1e8f292a1d8dd4f84a69e41569a6a8701faf32646016fb51dc16f3bbaa3a8ce19b631235980eaee8e1d5732d1b89cf14300211f840bcbdd35a9294daf15832d6c25e92a40629f87067fe6b048476dc48fe3c03dc62d5e1068817891a4b8c0e3d44e5d73051e078bc9940587390658474a") (:stream-nonce-mode-test #h"0000000000000000000000000000000080000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9ee98071b844ea8b2918784244a8dfe7fef3d400ff94eb786806f97e4ac107d0e898c9338764df8c73c26bd6ba2cf468c197e047b7883882335a62782d17b20a3b148d3f7b45d09f65b4d05c9dffebf418957ab18b18ba43af14465bc2eccf1545d14dc6f865211b28b07721d6e5c907d7c7eb1c51f80a70b7ffdf54e2d9d5c0cbf73a496d5c7e") (:stream-nonce-mode-test #h"0000000000000000000000000000000001000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1c5c257f7b53a4b0efe712c7a02c6becd6f606263890e1c2c94a9fb6dcf352b5770447dcd611e835890e55b53068a95448e3a3c39e894712ea512b19c58424245421a7770610619ba5ab1b51b2ed9884f09e82536d842837a4a1ec896004e2a34fd2e610dec7750912634ed8d9b563c729848f0366466a3a1fc13e8132ba3412df162d16038f28") (:stream-nonce-mode-test #h"0000000000000000000000000000000000400000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6a6be08b92aac3ea07fd20ff673fed5c5a2a36d82cced24ad2bdb9abf1969e7ea74a3ea16a7ce73596378623c79d7c8b531c28312831ffbd7623a214965b4bb166b040187381c9bc7c4ea83c67a5a3933090df83a47db0fc25d2b5ad1e30b6398a23fa38f8fcc5067dac73f763c7a6a8b5ae99d1e458264c5c38465e6546960a6c3587139af60f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000020000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1b5722d7ea2b251415c969cf224adda7cea813d2ae9f026a165af823ae59ca45dea54838e0227dcc32644440aeffdc014962b7f0e505321902bae34c46d6990976fef412c2dc343a6a539f1409c8b975e2841dc2f98f3eada54594a1351c5ca9cf7d376c4d0ef1b37951b2a98806428b73db12339c2a2c5ad929339f1637eeca7ad8367083a2c3") (:stream-nonce-mode-test #h"0000000000000000000000000000000000002000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fbd315106742ef2826ad1209d31c06b2c2d4a887bc5d77b62fc596a5074022534440aeba90d6627084dd6e5ba0b805097f6e34cb7436f03bfb0a1912987130bda28b32120288bca59505dc07c0000ba95711cbacb8b381ac691a8408545f1db315557547bbc2dd29f4cec2748615c4c5337f9907fd7d3d33ab4078eef61db1e881b1d05d88424f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000400000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9ef7652b83708e63119fb49b5611ef13879f2c7f6bcd77ee5b83e4b100612884f35138d80e58ac64edfcffdc272c9b636bb68d1035d059f1130d0976fe39dae51257d705d76a24deb7d7b0784a05cd24d9fb6b49e24c97b864a5221596d53553bb4b74f3d08d6e240fa345c1b1e42e972c339e4b05b4b29b4a67756be3395424a576ffcc6c82b4") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000010000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8f3ab481f3099f84efb5b5b0393b286f3dc24bd2e89955f50d8b77bbafe6faae55100fe4ac167c4523cde8fab4605818dcd9c5f0516d977b4523e00d561e01665b190567bff872bffefda8b43f8d7b03225b65065888dd30524675cf3c4ec72c1b415a42c34d415b1ea82574f30f8a74f128a97b692e726454840fe4b82e6519baa815390986d8") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000008000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e0d7d5319e8745d87829aa1e70af3ceae3de4793d2dda9795f594215a93aa030f8bbf7f11c23bfc0ac119743dc09915d50bd68e7107bf535934ea99f716e924dff727d7d951522459cba51763edaa72933aceed9bdd2e5cf7c0ae766894c262184e00bf92781ae27a40039aab3e06fe82e0bb338794c07d55bae26dca04538eeee6676e1ec2d33") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000800000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"04bc16480e36eb3bfd4055ec1ecc321ac0c9480f544edcde03b87aa9444044d6e08bbd8c67553b7e4f411e6c77bc5ab50319e5c95548c3ca0086d3f14f61ad3ba66726e97de8f33bc1e4a85523c9d9f3bfb3982f771612342d11ce9c7ba68f79bfb9eca3318948d2ca6e0095de7af09627c5fb41b683fa5cfa23b73e170cb076301a0f4de82883") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000010000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8d7679470458dcb25f79b24aad4dfd4b5bf6200885a9e0894b12f96d87dee463a0d5d24c983f51860b8919b1d611303941588e45619cf09ef06ea8a49f1d2250bcc40bedf4447137ce77c6a5129f037bdeacbd92fe294a729aa6f7256c44721035545dcc21883eae925d2bced723540747404153ae67d438ce467c1a7cd720884c5397ec70ffe9") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000004000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3ce5c4591cc67da73d160ca5c78cabbbf3d32845f539169d5b74d1e3503ad3a2638e7287890dfe559dde1a7742fd0cfdaaf21325b70476bc0e1a474550057eb0b8ac4c5d3f5567fade1b51617b467b4ec57ff8e61b0a39a40d5ff65ac875cdab5607afd62d95c50c6de12e5c03953dad93696badff577db183f7e6a516958653293e3e83656d63") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000200000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cdce4427d497e4f1dbc72de90c79b59f7a3c7b6c5416572274f3f0a5bac3d0be7654e1404329d2c47d964ae95bb1e3eefae7defd29ecad2f1889c9b2ac3e87b7f083f502b0ac4047915b4bc05b161c4c2eb2ada03c33136cb8c9f11cc803fc4293a7b983d999f65a542ff863ef775eda33f4795aa997d13ed3ad630931cf9be44f36150fd15457") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000020000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"811e8123af99992c3d7ba8d341a07305dda7be77885ba38be74288374df59b8dfc8ea3ec93d9c53271383abb99bad0fba82d2015086d56e92e0de3ca45e40a3b7df967c2a8c8eaeced2205f15cd09e4eaede59279c056b0a3e89e97c1a4afc425acc434e31433553dc6c3150959f8db89f666d1022d054b276aeffd225949f83e0b593e5118e65") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000004000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bc8f191b87d93a954ed499baa3c7a578e219b46136dd0f7fb58f1282cabec2d6d80bd95cbc2e3d964433f0743b55d8b7deb29310d7052b2af6e7f19935b9153dcbd43228c92ec58793d3ed97bf2fe592efe85093faef78f0fd92bad07feb9d68e23123c0bc7e603040546f814d0a133c42d9b0288aa27fea5584bd18336f70015a37d50a810ff5") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000100000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"204c358ee52784349d80a903f097de58fcc91c1bde2d4e421cd34d7add41fb26d75725b32476ac48f43f0d13b995f12f452b61c673e14aa39bed0ac7e678344496e9b43eedb0235c0ccfb98914be11f32d51555bae5c08b4f3e2d0612435563a658c24749115715c41a3ec7c5075c713fcddb51d127e342d8f29365b3d278c108df0e315c5ac99") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000080000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ae39f290913f463a619d10984e94b0b281154c9040a88f37d686ad0ccb056dfaef22f05d51535ee7b156d349f48899d2f5c3797573ae845acbb1c01663353bcf3453f36bbdf37e4729a2cdd615d639d5d9e62e0da5f9b3de537d947b416c1ecac16e8ff8739a329642a5b549a28dc907f6b4a195e30024791e1dba0b698f2d75d4059cc1ec7248") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000008000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6796a4a66d612ad55be55793089c5b73641144b209456f5952a9fbf139ffedf7b8c5cc0ac080cc9e24c74092523d8ccc5eba898a8c8cd074a52332511474d131b864d5720d56b7adf590b193e2b5d24ae94cd3344959b5061c9f650065e5f9e92a05bd77c84f7bf6f3e25f8ff6d2834986399f1b6203cfe0dfe9d1455940bccb81def8b5679b48") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000100000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6a3ebff744a8508abf0ece72596fedeb3151bd935c69f34d91bda122361b81e940f6d4d9e8d846705dca188875e4b01c35e644778c2c6e240e11c7376f2fd8acff7039f15a09f96cd5c91dc08c0cceb303b3b39b095bbf13ed55523ebf0abb56b66537805aae36a74f37f40b3b78401c42f0f1055d2c05eeb1923cbc86fa807acdd27a6a1f1367") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000040000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3afd575065f6e21d31d71d860b6db38642a15790af7faaf10187ba4428a27666cccb2b3cec6a40257c802547e9a4cfb7864d8153b89f9268646bb04642ae63da54ca154094ab8439380d66da1b95fc36d6e6526533b04fb1d2596904f3df79cfe64c1348e0bbab8a715cfebac9e7c0027609d3730510467098b4bec97a7a4938c942a724383f55") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000002000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"20f30d423d027faccbcb0b1fa1d307b6876fda2d3cd22d19c7b02d588ac42a8e7605efac75bdf14b7d5939e7e43acb1b9d9c3c04282ed3b62254b5dc1ca2b374234aa13a49854dd885685a926982508759b6f2aa005583f0e9a25921234b5d1b9eeaa5a101fb8c40c0fe986dc17a61e1bd6f6249f54030f6e57f6131caca606b921970cba4f660") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000200000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"28ea79439de077c2f79289960d1074e5b1fae09a25c7d003241aa7e053967764ab55518f8da3d5230617a8d709b79a6427d193776d63b1f5090bfc1199ad2ac774ab7c92aff4722d12002a44358abbbe8fee0a38f945642d810112b9094bf551fb29fb77d15a7b8587356dd47a83b09b90281391edcd003fba4064ab079e37dcdde7460195b074") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000040000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cf7e70d36edd1852c5393c8332542c8af0c85dcb7ebd9256107daf91cee0809d2688ea37fd87adb392ed0152c3ea852acd0076777e21438989f7a004b26448991596e9ab5e0a93c686c8552fe149b0133ac3af03f3a27cf3deaabca84e818d34b24febe82e5ffaa16079c31223f9a07fa7d0591db721c044ab8d32c63e767bbf77b284fb0a39c5") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000001000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"674fd63cd29300a418ca39e56837c408e32a0902694be2df0e0828afb7e4116dc5869616ba783f3b5ec2941509dcfa1e326afbe742f486ef0caa1c01c5e3ceb6201a7ba74153ad264cc7c2ac6bab589123cd0ad770bc9f8b0013a957676c0f663e0981e0a26ef056f55f954c82a389ca2150653fc8cefbf13b8e1148b9670e50139af28f6a9ec3") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000800000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"18f4bbcf7bf0748c56c6a6ea46baad8bffbdf67ea83216577527770c8db879d2a57c5517c3baf849040528e66c3e6c0b51dbc2fb0b92dc259d7b10449642420afed5fac571dc9372b9c9d66501746d5adbc180a9c7cbb0750489c07e5d142646212958613bb5eb542a0ee1ee4fdca2ede224d38ee7a28ff7a4e2046d0dc7db671600d6a81670cf") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000080000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d6d89217f8be88f36adb6087272acf80341b095998e70c11486fed4ae1b08915731684de45e175d81a183f041e8a74bc130504cfff7f7d5d99c3c8cb89fa760fab8fa7b380952c0713f517e09429d40051cc11ab107bea7b649e890067e794d7815780eca19a4775fc28c2e0ed454946a5e25a419e4da894a55770bb959c8f666c9567d7f8a196") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000001000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0adfd2cce6b6bf0aaf13e258fdb0b647ad68d09a642d35f11d9b124c02a037080819a9ae324c2d6b68f40745546996b1703d1007a00eb3f6d751a317f87773bac81ac613b8ae6661cbc811c09e31a34289d6f5007677644478ca07d52a0d6d95c5dc0a84c3f4beb121f0e47def72b8e727f0b52852d7741d3102ab91ec4affd8379de0c3ee6947") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000400000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a161cb92a7a51a71209620fe85851ef1b60aa15816be54cb369a9799247cb07dce52939602d4bd607c3ae95b80c6d01b20a7445c85af411163301357c4169791751c777904ca2eb1bf0eff40830929cf762425e870074b6aba19fee70c603301ebd033d6b61b7a8cf167f0d9902ec683d4584bf0c644fada91d8b492bc43ab9dd6efc4892d6e4c") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000020000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"aef9a3dd42000e90bf6e38b7b22b3aa047fe6dd458fda597e67042544e8f96d0fce8d852c9b6cdf4064d4f3df7b84a2a0aa77285546c46ae5fa42ad1f5e00e4783a4c2d27763cede3f2a9c368bac6cabdbbbdf5e0f715561cbf9c0a5e2cf16fd029aeb44afa155f870b168182bb63fc2d08ee843e39341441ea77e9391c14466b1ffef64577715") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000002000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2d540b3f637a8797606ce6ce2e344a3653252987a7f75f247a0b7f24fbdc39bd04efd7487e575a5504343e562134ec05f2de962d6b892ce6d3e55d7eab49534572161f9feaa6587381c9effcbdff31cc669a3956788828a7a7fbe42db109088ea807d64576bcefabc2853f1df0f3d882ac2ae8c83e82248b8660aeba3304863428c9cf434125b7") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000400" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bb377a862e836414c8a1915008586f53df3e992de96e7556cb77d636b2409d0c90a83c087e1d8894232eea3cd9e451ffd7de5c4b66db3da325cbf37ae297f85661a85b974a030daa436a4dc72a86c2b885994cf0725eaad507d1bfe650a991de05618fa7a4571222ee020eb5038d2472f8c60d376c581dba65a44bf01328f8b79689b1cc5662c7") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000010" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7ccb3237d8ec5ac5cda6b5a4f50df712553d855b34e082dac6f6436e786eab2cd458c31e4cadd923c582dfd5ca86b527d2b9d5d0aba7d5dec084b82ba5120781fa3cabfd4c5d2f41aa32755eab1b14781c166125a4d2bc2d8e66a12878ffdcb954ba76fa81c234924d25ca24f5b9488a8f473472da904342a7d304543fed0d3ee7568bc6e11655") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000008" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"79ab6820b4687607375d499cf436ec9d727bedc076e2c01262737011dc73c8ad65f134f6859ca922f8c5613ac23018bc9bdee174dd6eace2d566497c7ce9e077aad3d0ff19b930d6af13ed7a091bf5f27af1f3f796fbc76e04df9da744bae4d6ce3f62caa9023f8334c4d2345fdb9759f0a2b69586dedd1354793c2556b038e7af4242a2d5fcc6") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"8000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"82c9b5f9096e270c927ddbaa6131f4f052ce83c0d86fbf763d9ec06d713b72e2a5cee8c8a944c13e8e03302938a3f5a06db3e07b285134ddcc20101e56d4f5751bba0fbaa673086f384942835481f9c8eb2b4c972138d90ad164d34a8d120e5b2d9d1dc931713fcdcb95d53107cba9a50f7fae67e9d693e8bcf682efc3502d51997fa3e9f5b7d3") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0100000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"25f5bec6683916ff44bccd12d102e692176663f4cac53e719509ca74b6b2eec85da4236fb29902012adc8f0d86c8187d25cd1c486966930d0204c4ee88a6ab355a6c9976c7bc6e78baf3108c5364ef42b93b35d2694d2ddf72a4fc7ecdb968fcfe16bedb8d48102fb54f1ce3636e914c0e2dadc7caa2ab1929733a9263325e7275ff12e64ff48c") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0040000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"09b1acadc3fcd3b4c9af5858bfc0fb7d543939a6bbc992fea3d6e2dce785d66cdd5129255834d7efbe7384b2052af58a65beffaf0abcf74ebb92f7da9b54eda47d11995fcc436de0ca1f33534610eed0fa4ebe03ea375f6db3c429ea17d7290b331c216f34757e50da78bc77c275a171d0598d5c74718be1e9ed7f0b592bb29489eb798df09f6d") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0002000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"20128bd5affa2a4c38b854d58c0f2c8d54f49f45a2c7200ccd8e7782f81c293bf62d1d10b3c83846a0a8cde8f0c7f67ec899f88beb4432295b644053ee09fe116e5e1110a1c8907629c82e42fb82eb2e533b2d56bcac30142ed5c0f978275dc3674d52c1074eea6335f84c8d3e9159e901ea062493d414e97b9e698b106369aa403cc86bd6b063") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000200000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bf37e78d336e9ff9b8d0f56a634272af160118aaf1421b685957bb4da40f291db6db9ab88ff1f817948c7e8085c88dfa25805bf8f39fa754363ef3a06c2c7304552e5d050b2dba639c7966c5afd1fd70ce0665b1bbbc39088e7abd3e65d7f8bc0f83b366fa6f1f4db8c309e41f43e8e31d8e1b5f3f682500203ee175a15e10cb2f0c202fa8e1a8") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000040000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4ba5125425ebda07f8b11ced71e4d4b7f587a1609d59e0acd79bc97d8d491e4b16ddafd24b6ebeacfee43e2deeff50cbdc4ca9613c024bb903f49c6d61f1137e23a8de16d7f3f2fcd05fbef23c7894a253b5ad0abf1561e3065d137ea28cd1882d3a87f0c3a77c0c561a089032f62be4c9678c50c59375f85c1ddf90df395934cc592d5c6b403a") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000001000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"287c95fc356af2334fe44142f0e313e9b57fc1156283df3335cc832159cd9afce642a6ee68d421caee60d1d643f0a2343b9e36d8401f4c2a212f8c3d7a2c314919c42eaba2d141ad2b41d2e7b4449df2b59eda049434246af3e8fd94940dd0e7942c9c96b05185fc83db62c3ac81a66cfd6d664269f96dfee36a57ba15fbc5793508b4bb2ce763") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000800000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6d53bd0a8a20108cb4b38f1009f374d33323f4d4f63d474291911398cb2d4497a0ebac11e7c522d44aeeed4340f3c8a20112c984e9ddd01504333acee255135d22b7b5b37616962f1c488d17ab6c3cb49dd3409ff082eba7bb08e91c29a83ba9dafdad1bb8f63bf3813de2f27c0c30180498c55170830b0d1102ed682ec317cb884e9fc6e22ffc") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000080000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"12b2f538fe50ba265d2f4fbad9ea692c6d658f27d6285222048100655f085b7f4647db63b9a1931531a926c8e588990e9140cbc2c31464d080f6e2ab655627e0e294407cbb1bfaec9863b1842c5b0e4daa79dda84e1d24d226d932be912149c7d2cf28ffaa6e4b62f29042a47d9ea00599487b1fe8542e4341282a681476bac4dffe3d7c8d7f58") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000001000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5885bb197f501dfbc3e22ffbfb8209f5de0b84e06ff809e98ddd2db25bc4148ae6847509a0276b1a2bdf7e0aa3a884e519887a32726c42fad2ea6b69168b534d2a4bb8bae63dd90bade3fb3632c08c71a11a6195648079216181f1a017ced3b4c89e905c492076e9ef5373413a1dc2c2b5c5acf253c7b74a0427cc5758ee910f978e6a574305dd") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000400000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2548e30b861faf23dc94fcd2efa5186d3f0fc93f2722680999fb09bc3f94de500a0b88e39342427c2ef4bb233926de2c9059b32b7b7ab5aa28a43c7e25d5a67d3f90589b187f454c69128d925c1910469a8e22d61e7c4d794d0bedafb71e79f4f4f85bc3fcbc47dcae4b69ee540309d2c154d92a36a56d401beb9269f32e853450626fe90b8c39") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000020000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"aa09af0fee50c881200b16ebbe54624a535b82451288aeacab8562046a47c3e7ec29cc999e64b027f8ed5bb8f232746501e86d255bc9cb1189b8ba4e56a527f39c05c79bff55aa727172ceea5627d16c3bc005f9b16b31249a45b5e02c992a0995deae8bff9807327efa53920e3922eb50e7f73a33220a125dd9f62eecd5b4abea3509fe459685") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000002000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8fe302b5ef4d79ac6ae3c5f71fd83c1b16c98e3d4692f6ca521a4d27cbd3c2c7ff33fb59a40f9828c43e30340a50f9e0210b3f112e93215d2acbb094118013bb5727a5c279902204de36403f79295e94769d0e8ddf459709db3ea557967fbd2475ff4075ef1c02ac85451af0448a1403fa19d53ad71f7cfc8d7c66aca0aa8b514ef469df83cebe") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000400" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0dee458c17aa59644b9570909db4bee8efd81466465a63a49b6a6738a4d725bdbef27598e57d4ee14c9bde11fa303e71d15515c872b87984074280e93f9c8f41166d66f09a5a69b3328afb1d53f321a34c0fafefaedf37f9f9063c7b05b4a5b1b9edfe791547307c2155c17eec72cdd9084058ba014369307fa749c1f8d80e70b5d878371668a4") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000010" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"91c9650f082ddf96dd8a5b2ae1ffd35d1eb7800c9deb84ff4bbf00187cae2a784c1f400638277f1f984683a4ea6871c703b5c6149fbe77bdc12d175c717b1c2f872d8c9faa2b86a8ad228866735b548f3112f6bcd2738a64fdf13e6794734b61d6f642b4f41ed3f2a29bc96539979d89c890c4a7e2ef85239fd665ce5a4ab98f501e4f4e90b301") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000008" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0257678c0ae9fd18d26a9374ebbf967326f11f9826e91b488ef2d0b17e162778b92b886cf9af1b0ac3dedc99a05ca144112e9392762315543ada20adfd212faf50718005927e9e01d2cd48a14427bd35df00a4542035f2d5b8bdfed007271a95678538c4ffa7655a1c67adf6b9e3121317e66a6105743ba280665c71ca3cc5712bc39bf08d90a4") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"8000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"856cda30c43a96288a986fc1fb40f2d56ed2ac8fa0abcdf09f9ff6bbbd048dec3aaa75de9d8b3e042ceb1c1a5d422f4001cafcb3d9513a53f3a6dc4580ad25274b46170d67d1731021524ced6f0d9771b00b0e50f3ae25a6b6b99673b248fe0bd2eff5f5a9f0de7570166fed25f587d31c987953cc9fa6e0579e4053be14b5bd43d57187b87b49") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0100000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2b8f4bb3798306ca5130d47c4f8d4ed13aa0edccc1be6942090faeeca0d7599b7ff0fe616bb25aa0153ad6fdc88b954903c22426d478b97b22b8f9b1db00cf06470bdffbc488a8b7c701ebf4061d75c5969186497c95367809afa80bd843b040a79abc6e73a91757f1db73c8eacfa543b38f289d065ab2f3032d377b8c37fe46a333d24fc42f8b") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0040000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f67fa2f10151a0c80754358bfb39ede1639d771411e55b5dec7eb8e0198b48c75b98e4ccf42f61cf202c4cd241826c1b73ae8b26da176d1f38b5d7584e8c1f71e4145ff95e5510137f73531c8f0c69c4a89f05851778b9c5847ee824aa49d0bc86502ee514b58c9e7f7101f2500698db7d4830de5f7810276437d62c5232e810f89ddeb6f0158a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0002000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"454db8beee7f887b519ab6f2276a3c3218828c06bd902eaaddabee800fd3df6868216537125ce3271886d92186ebdc6e156298ff3a22c0cca026553724fac7e494d267bdf5041bad385aec71db3c1024a865e3d8965a4ccc3ad966f3de35f8d08e2acd5095509e07ea8079814797ebfd3969ab56a2c4f0ebd36a05943145ece05fe879427ceedc") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000200000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a36afdb0dc64c8b0b027c05f5a135c70953558d1f1ecc3194d45974bc1d6bb9aff26513bebd63abe9d8a8a45cdca19f2c25adb812aaf75fdac60ddcef52941bc6bc82af3afe1d297c1b74bc226812bdffa71c6f5812ea2c2cd39196caa4a998248df1b0cb657253e696ab94532f425d1f323e7ac9ed0d52a1d0d53ed1c4fd192a1f7b347378052") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000040000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"724b9f90c279f5ba6eec2a1371a21cf6d2b55c0e5535d00c381ccfc6d61c08686b84a14bbcef24389f89db72d733f63e9396c54e75ef71da426398ec8f991bd3abd1a34e36160180e395e430c60d49d765292b4316dad549263a40a71d3abd5e48d48aeeace984852cddd6a2b386d9d06a668efc953772c06305c94891fe0006d51cf862d66b80") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000001000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ba24372fa2e571f04e253f57baf29d61f55b201d5e53215714ab9cb338b7f4e6455bc0c62c55fe870887b52184e9168c45dfc9959ebb6ed710c0b467328fda1659ec71328aebae78aa55bda5b97842791134a11a55d9ce29dd27501466595c8129c6100aebe35c2745c9a114f37ba0568a073e7e7d6c67ade592c0301a7661987262b7c1ca0f1d") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000800000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"94c73d2dd75091c143d4e6240f9bf075d7ad4665c5c1a76ccfd3335328de6c23f8095a2618265aec2679d6a627a63bcc7474e474036e39d24a7a968c7e8f808aa78b9323501fc4c6d0f0496718b9e5d188783e4a57b4b6b41cdecbc2edfbf00f00f1b8692b3a92c894ca99ee70c0918b4026688932dbafd89d6d472c36f3f62271c2171bc352cc") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000080000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1c79c265228135e34ad59f4826d1d1b3413f8e2b8b4eb711159f6505e525ece3763d63416367bd641447d6cebaf06e9e06208aa2f901528b965d2c9ecdceba897cd04337e2524c727c1f830ecc5782a388065cb44cd1e90d7d7209088b72688d041cac0644f48d849d4b9d0e980e61dda489a469665c16fa8f23ce798ececa782db037c20cb307") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000001000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b62fbd67e9deaffc0667f8a4eb48d928df8eaa531721bd9cf867b9aa0552bd89a247fadbad0f709b564ca3cdcaca259cc46eaaa246861821327575d944e7037fc6c5f54043bcc40b3dcf03cf31b08a3191c8b3f59c83d2519c728635a99e94e22872adad66a0250004bff75f0355de8b538a7b62f6d02328d6963e61811a10699218a74063c02c") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000400000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c2f4d4172fc354e66805c44cb1af21f236e548629900e64b32add467d6dbba301164189b54472fdade7f655bccfe151e9a8f0998b6a7df43682b352aabafd59eb0ac57a3411fb34a20fee0928d39415b6baf6c620ba17a4a72e38860614587d6c015aa952e0860024c310e53f0f6256f6325e88a657ba6bd9a9dd471edfd2975ed1727ffd3f912") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000020000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"787612c0ea965132231eb55ec4491a8bbcc2d131fecb2ec76511a62ec0185f1e86610d6435a2ab682aaabe860b968e35e6c81d5aa3156124e6ae79202e123cd995098b25146624f39e2446e1ce337bc7867a196c55eedcf6518514c0afb8b3b4ab6364387e90e6914dac8bc5ad27e0865e838f9e48f42b3eab64b503a663da1f748f8fe1680e6c") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000002000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1991505690d1efb602769f3a2b49213ef031e0e6277e0d1cf24a293be0d1842be086057db2dcf7feee46307bc574b1ddaa20cd713b31ebf5972dc87d2c15054942cae0bf272f88d6276d0878ac7aa739a4d6374590285a7e4ef277d4234dfae8eb5a600f1c064ebde406b1962dff8e6c5fa889a57acb940a53c15e69f70cdc43e068e1c36fcf74") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000400" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4d22fbeb39590baf1baa43c35f51df74abcf2516b7759c0fdc42946a9e362964b4b10b0f2d47540ef8a086ca8c88bdc20be939a7e20dd3c921409a7d46287d3d4241d14c92fd3324dc0520d7e765de30e9000067b7aabbb37b94ea78168758eb957a9379e924967ffe3c57b072adab4113124a8b30c070b64f382be8524967e7025edc5e1de9be") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000010" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0bddf77c8e42bc9a2f29db56ea59cbac158a94a4f70a35c518c64ecb6b9379a34f69025c943cacc49d3246194000e4fdd0abb2600d43afec600b92f34d2dfbfa1f3c088b182bb9f51c8a3354f5491c5479d9b6a86825fb741c284e47b4c923a04eda1486607264abb81e027f18450b4c557100c2505d54577a896fd923799075c8fc31bf3e702a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000008" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f53add4924523ddcfd1aa7fed676b06bbd8b29f233c8e36fe5e4c3434f750254a2207c2dad0f2ca7f20defc945f679281650d5dfb87227bbab33572a3678aa3e44b23cf4f5230ee3662b531136e264949b668ca36a3dfa10425c790804788adc0fed6d7d1492b99a663319f0c5c3b02eaf95df0ada4dc1d3f74820f47f99d42d67f65d6a83a7e4") (:keystream-test #h"e1c236794b24506cb7930f7fbe47e11575a39367cc3967d02b08402e93c956ea" #h"0eab63ed3c1f1250" #h"aa1ae440767c322ea6afc80729be153d1cc25c29d35748baf8026d55aaaf1c61b9fa4f3ad8e93f2e09c6053b492df7c0993e6bc41aca4400251a93b3ef3218b6d33884eb3cabed930f6af6b9eb1814549c8a841117e93bca86ecdc68452d4f2e200ffcbad0e72670c4a1b7421eac11baf2eaf5503580cc78dd48bd749f689a2fe9e177d49e784df0d2ff218a1861fabc4d51737968dedf02ea056a65104799f0f0fb2750eb68f2582154a28b76b94309169de46613d4ef18c97232f95126e542b110d0685ede6cf8fac6f0310a5c99171b619210a9f0db95caa8fb28ee12db2b94f8e809b64b9681d1a04c8364705a767541422acd4ad7413603f5f9f4108151cab657d06a684bd992c4853fca6e8eb5899ba5355ead215655d38d30105810e78541e2d2cf965975e0f920d548744e06c9f0ce8494fd05b9e7e8184706ec62c62803ab5ee84b602a9de2b9c0281f1e3879b7fa7855d364637a01082002078d2611d69d0abc2e22d1a0c84a228af3fb2c2509112dbe8a79ca18be93009782736549d1a2d6e7d261ae49040f051cd1aa22483fa8a4bea3b9509f6d7a265bfe5261ea2e4e45feb804b23ffe9a044f91929d295226077c6f0f44a050116ef93236516314bdcf9660d58bb27f7b56176dba5b8460402377d30e8ebce070682130f1a7b1e461638538af0b07a4234e1273620cd7bb93b59088ae7e4a0245c49bfa05040f02c02833d4931701d2d966ae686962ade5cc50b0f47798c302611a81278315dc56299388c8ab5d9206ed6dc9415c66490a54483ede818b3c4f3103a917d7b55fa0c52f4e2dc36bf8931a97b76fcc9a7704f4acb483e55c2e0edc64397947fd63d90ded402e3be9968f5a4052fad6a33e3909b1f572803a4cbe46df75ef6ed89ed476583817a405caebb376a2585a840f6f84f093f63f0e1867016732d51fadb9513e44e9f3901a698075c94135426b71792abab4324286073d9aeafe08bafbc6f95da435d1e358ab974a6b20f63397957dd58ee39ad529e85b2f4bd3d174640443e6520f6860c3113edc989d69f1220587734a5dcb878eb21e5c3f1d0d65344fc289567057fd3743762f6bfe37117d21d35fa63fc3045966a5598b72cf08ea8aa39a16b857971dc505499d872af6b12f1456d353116ef5e68f0f2a892ebf724ae4ed88af1cdbd8822093e885d698dc87b8a66ad7749e15afc7b872f15f9240c2da7a27667c06b6f4dbc81bece9093ceec588c294cdb4af63c2052bf721bdf3fee03b0bd788f63e6a92ab98459374f87ffd62f9c60911f8c7634b5c86a1c6e2358ded6ca33ce699c775e799e907a81124f27ba164626fede57a2a52c298b0945c4b3eae7bde2dfadda742f1dfa5c5d9f0791bea75b587235e8a1df09c1f002e98cc01bd0f99e336") ironclad-0.57/testing/test-vectors/chacha.testvec000066400000000000000000002521261420372057600222030ustar00rootroot00000000000000(:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"89670952608364fd00b2f90936f031c8e756e15dba04b8493d00429259b20f46cc04f111246b6c2ce066be3bfb32d9aa0fddfbc12123d4b9e44f34dca05a103f6cd135c2878c832b5896b134f6142a9d4d8d0d8f1026d20a0a81512cbce6e9758a7143d021978022a384141a80cea3062f41f67a752e66ad3411984c787e30ad857145afb2adcd") (:stream-nonce-mode-test #h"80000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fbb87fbb8395e05daa3b1d683c422046f913985c2ad9b23cfc06c1d8d04ff213d44a7a7cdb84929f915420a8a3dc58bf0f7ecb4b1f167bb1a5e6153fdaf4493ddd14d939ba4ee02f6cf189bb452fe50e92c94b0b83fc6964fa49848b38984c96ac471083178453bbe1eb83517ae6e2a2c69c273f921266fb6011545837d2861726df0a739dfe53") (:stream-nonce-mode-test #h"01000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ae56060d04f5b597897ff2af1388dbceff5a2a4920335dc17a3cb1b1b10fbe70ece8f4864d8c7cdf0076453a8291c7dbeb3aa9c9d10e8ca36be4449376ed7c42fc3d471c34a36fbbf616bc0a0e7c523030d944f43ec3e78dd6a12466547cb4f7b3cebd0a5005e762e562d1375b7ac44593a991b85d1a60fba2035dfaa2a642d5224edaf8bec393") (:stream-nonce-mode-test #h"00400000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a276339f99316a913885a0a4be870f0691e72b00f1b3f2239f714fe81e88e00cbbe52b4ebbe1ea15894e29658c4cb145e6f89ee4abb045a78514482ce75afb7c65be7ecf3f3064a635b516f7397c9c3dedcb3020be10ff021bed1c9fed9f80b1ea26bb1a9dd75c76ae63895f97c1c7c4a94b425308e0f008478666c21ca1c739451c024ef8bcc3") (:stream-nonce-mode-test #h"00020000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"aad08aacc5722bb6bea6311d8eec24d7f3cc5e4df9e28d97bd62975617302b96ae592cc1bbbc817088f15342b38cf7eba97d4eb46809acce54ddcbe575fcfec72957ed0dc9666c4d5b099c3436f353cdca44582b686d02087511f7d997fdb3e060435d1310af6d38fb4529bddb14355984f89c16f47b24488e10dfac6c3fea6e7add4b7ebc2f53") (:stream-nonce-mode-test #h"00002000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e84db70c1c5a71f39fb548e95a089b54617009d20e61fd1defb67c84a6e0d722c5fd4242e754279e995689f84c7875c571b4a47cd2043a28a6355e4e50445c1ce00561f780ff22a5dafc62da76081de73a09fac6a2e0bf0aefbb394e54b5de625fc8b4c45201b6e1469b40254d84f5f2a3050ded49efec10c106757930e9c4c06f9f4fca95fc74") (:stream-nonce-mode-test #h"00000400000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6f9f50c3780405470ee3205683a866b658f5a249cdd64ff9770f9706cdc5b8d9676927b5bbacf6ffdd32b2b58c9a488cdc8fdf84f0efaba8b0d9d232eb6d55ae330d31d82476a953a5a2d32c3d37846df04ca1c1e55eefd077df7d23e3f54f2e7c5954da8c8ab4a52d776858277dd50cf130c8ea69a888dc84e9173d78e8a7af0a3a32096b2cde") (:stream-nonce-mode-test #h"00000010000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a842cc8b164a99ddd16afa3e9d230faa11662a56203ccd044f44096eec73c1eddb5e2111f828e61955a35aa7db5f4476e7f934717b847a0657e91e8cfe08b3b502fc703ad9048479b9cb1cfdf37062941e88e5749b19b37cbc8c8c653b3027d69322aa2cc499f2e32762f38296a85a159f54c5ca7a4b060d71b947ebbe4ebd210286184dcf5342") (:stream-nonce-mode-test #h"00000008000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"60f175246df283b5d0f1aa829bf8e9cb6e9a5e183befb21ae92c1eb878eeacea51a35d02dbb93bd2a579cd9d2725bfd9d410b581a5c7da1024d7e4a1bc8ad3750dfba2f4520d4bab404573663e68a3a66b7b5b9c4d3e6fa2946814696f60caf294c2ac78690a40b9c8d5a429b99ec47bb48b760cc6d19aac8604d61ff7d8626f60a9207dcd0252") (:stream-nonce-mode-test #h"00000000800000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c5f81f42c4fb06eb1f1f6cc31d563ad14471618157cd66b4d73618fc8fe349c1910d51c812d7c99e1c23e57cdc44e37cac3f9df35c1e7a6664bc507730e2fc955a7d188e8bd7a5030cd870525c12f71a348d32d1c27b90c5d74b521a64edd5b32c90742d20378b371958035f087d536ccf1d2056daaa661c9ffd8c2b170fc5075aaaae2900e4a0") (:stream-nonce-mode-test #h"00000000010000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b6575ae3ca36e1e68cd8e430f7d88ae36a6d6f93860501e164412e0a47ed8811c806a559cda4cf54c7653de2c9b47c3206eea1d8b033ecb1b7f69328ee34e6a7445583c17982e151cd58c62583945af6839d48dbda87d003349fa0e31761f4994f7b17a28a10e32d0b8e13ebe833ef93cfbb4ed058da18fa8cdf84de0a1758405b8df202b47c4a") (:stream-nonce-mode-test #h"00000000004000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"da6ff465c3a5bf296fe727620757301ca9e9500af2e61d384cc4e446c0de08fa9a982c4d7470a5005ed1648fb1fc6950a76b536fc8ad5fd780d06512bba557adc5c6e93ec15e7221fbc316e94331fa73050c9df44e0b33733a0b42dbc8fd0984b8b54f79242893dc945e062fb6ea068ff98750f1cb3d3d3dc5d1e589b3774bd34f66725bd48ebb") (:stream-nonce-mode-test #h"00000000000200000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"07a5346591b55fc213155ea381a51afe6b9d5abaa1901b15787919aa05b524e375a5db6db19e9b74924de1641b22553ce64e2df15f1fc6c6a2506543dbdbd19270e62c5f894e9e858ebdc7b4e15a1ab6ab33bb23bd071b0b60e3be17cdb2db506ca0118ca2f3e4662f084043fac9c6e1b3b950b630b3f7399d868ea4515a6aacc45c9274a3d8c9") (:stream-nonce-mode-test #h"00000000000020000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"34016a467b63a33523777c6f66ed454080fb8749bcc060b4e6c9d017940518a32d3ae4faf539043e1ab68e51c56646490eb0a4f06c647ef2e7f7b82acca07e0c819dfde6aa68bfe567ae1bb60ebb99d8229bee3fe733edbee0103dca3fcfd0519acfd963cf1ea3a5f3b5675ed239548639451b57e34167a37d47185de91e60411d1b6aeb941249") (:stream-nonce-mode-test #h"00000000000004000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1b4311aeae6185c2b435c93f11133a34d19a6bea2ef836e20667854e92f9f5d33dea2868b47100fe81731110d60ea268e7053fd5dd2f3954f2cc21b65e91229acea3777e9ce88aab262b0daf0f7f8edff5a94b6ea718190b876bf5d9d9ed689bdc3d98d9f380a7e59d552d1f47d12c7b97dc36db7a04a221677a84eeb243f40f46e71c45acc987") (:stream-nonce-mode-test #h"00000000000000100000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8dd12cb38a767ee22d64356b95ca714f9c320252ae1a7c9f6506c20726b7e8dc12d1a6f7af27464a524fcbbcd5479915322c9f0ec887845cede1e400e218d06453ab07abc1e7c76e5f7d7ee80e0aaab9baac11c6ce4263dca04cde3a9638f2f19a5896345e3468c2b880869097b179ea4b5251dd577b556beba51f702c8f9af2d257b92b960df6") (:stream-nonce-mode-test #h"00000000000000080000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"adc6e2ada41486b14b53789a7240a5e2815b3b8acc00e1c74d9cc6b2af81aee1ca0b1f62f85ff6796302e58ddabdf5df0e4d7f3f3d4074869b67037dd83a0b77743de247b62c54d464582b7e7e31b8245648822734d1a4f6dc2eb8972ada871581850f80c6e6cff3f9c28d777b658b30b8147c7248b23cbea5f0f26c9e0497b6eddff6781d03b5") (:stream-nonce-mode-test #h"00000000000000008000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a85e240e255720e3d87db955adde5e5bbe8617839ca064e03b1ad9db25a3c3a81d84788d8b4230fd0a8b9ba2dda3b11901407527345a71bd678dc3ebf99fa603a108184a57ed81c191bb3239d5a8c1a06c5d5e64b89336e4feab2fecd14b79d7d54820a9b641e3efd75f30d8d1f386b0d6283aeb4ae1ab2a43f28dfa96ed72d83296a168ff94e5") (:stream-nonce-mode-test #h"00000000000000000100000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"063b941d43a822b7da8101e134b43559b5d4af59ca30f77c87153b1dd3c9c0a4a65b85e2a6eea35998a53fd1672839e64344faf41a7285741e95e3fdae02114db2d6c7ecfbb99071f3ee303610c12246cd79c3c61f3ebe01a82ee4215b85a9f0550ee02151438286e6a1f923bba61422754c23de352541a6da3c1ce72523ab7aae49595b994499") (:stream-nonce-mode-test #h"00000000000000000040000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2bc2824838621de2723ca64163c0306e0ef8b3ff2d6c4cf71b964fee8d1fcb0f89a128e587261a01a5bf211de26c0884986e845cde8ae50bf865d222ca28584c6e8080f95b3eacd4d1bef9ba15940f98fb21e64a90f99e82c84ba4c06aae6023faa10b170eb520f4641fc5596c14d2b466db08daf221035c0849ed3592e014219aa9e2ba6f20a8") (:stream-nonce-mode-test #h"00000000000000000002000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"610c56dd13d7fe4c520bf22d38223f448e9d65ef0f1bffddb9ba686088591d7a35cac86c90cda899d2f94dca2e524be8291b0135431659a8634b54142a0197402477364983de5c2c6026119238e92a4c23f25750ee55cfd07f77f4fa64ad76affa556643b970e9ef2a1b7631c212b5a4be5c11a91d260077a01e00766a97df86a47f0cb69c405e") (:stream-nonce-mode-test #h"00000000000000000000200000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9a5670c8e4da6ca3c6c9dee7ca91a5db70c0951dfd2701f93f529585bf4da085780479742003c17c2e6374139b686449e0b7d13e6ccf71f6bb6b98eb9ec18257411d882a0d41943a5d30cc123c59b8fe2b6b469dcfb8c460cc7490d0a5b056b101ac913638b80446bcbe171b4d81cd0bbc81a0c15c4aefdf1091951b34d5bb65d61ec1c1f11258") (:stream-nonce-mode-test #h"00000000000000000000040000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1ea7c15778101cad8feb3993e40243253d6306c60fb247415f2ed94224a0392ca3c671b5c0e427b245aad502c75673a5d754ccd85adc087040b8050e84e5b711ad3399b23bd2eda52792ea24520e2b8dddf9f5bbb1968790b41b81190a6d4b97a6c776b51f0e3a0766492db068ff116e5a156ba68c524c47a072d617661461b82bdbb4be5ee864") (:stream-nonce-mode-test #h"00000000000000000000001000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e8576f762bf904b4ac97614c740fbcf018efcc6e924cd57271ef07a407f21610902bec78b8022eefa8944187ead1b7d9b67c637411127e7177f7677d87d799181b8b4938099921c80e3516417f54952722df5fd43ff2c88b7feebac12c7630d04877fe53f6b7cd8cc3d469c0629e6c1ddb18de0581de94c51b920ebf9b7a9ddbc0c2a630fc85b3") (:stream-nonce-mode-test #h"00000000000000000000000800000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"eb31ad1efdae6dcc7536c875241ced686bc31f4d35c4936bbd6d9be356df56d56893316defc03e1be1f3467fd4a583a8bdccf5fda78800ef5ec0f9983e01c2e0b15db495617d4d63c91fe0ea7550848e3923a0bb11d74876568a36301bc3d5db292ee5d9228dd1718ef100f7f69873e89c47d624981e1b7d4ca1484c00c96e5a226445d1404666") (:stream-nonce-mode-test #h"00000000000000000000000080000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"dd4ae32664dfd9e9ebc05bb8e7cc1608ae76cc785ceb2a9442e8ca173d2d45abeb399a9ff451191d66d9076bf7ee4a15783b4f71824b22820e92ddd8d6b7e73b223650259deec56301e5e1d253f9bb93a3d7b714f7064bbe59141156a7b9603fdb141f6f13688199637b6356986c5854f374913bee9efa6d5da80b145c846ff70791b94a67cdbf") (:stream-nonce-mode-test #h"00000000000000000000000001000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d670acc0cce0649c6419efd58db369f5f345c159429a9f4fcbaa9f61949e9893097d2bfb8782b90227d25bb04f30e2348690cb650cd2c2f0863999aca111b5b41c0b329638606e0d52bcd65ae16dbff16b6aa4b1509450cfa6ee5b21a936569788a5c3bc89a07c59146be680b7c914d7578dd9f0bd4e6c745de23e83d961dc6b8a9f0a2f806099") (:stream-nonce-mode-test #h"00000000000000000000000000400000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"078882b4993176bb2ec1307f82236446c6b7e34c51382ef1ae6f19d26d14a5e6422c61114ff200c345ab8e9c508791ae6761f9bde90a80560e412402b700a0d75a0e356a90b38640a4463209935005e438afdbb0844a204731f1cd66f40cb9e45f2abfbd5f72eb6c733d3fcfe7e6a6dbd5c594ed15308175389e8be250e1ebddecf31a3b6a56f0") (:stream-nonce-mode-test #h"00000000000000000000000000020000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e09790feeefeda51a901ce724cbbd991fec35749be2c8ef8c9da4abdba8b4617278e2c3473de24c8424f66569fafd11525c481aa208f52c6f13978c7a3178461e3202ee95f52d86cf1c0560d79a15dc11d45c63af424443c553fbb23adfd59ab16715674a571e4ff2cbfe2f10132b30b757979d8059758b12ebc8c2580c2091fa922f029ef5118") (:stream-nonce-mode-test #h"00000000000000000000000000002000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d9c0a0648212b95c7ae589d333f85eed3886beb1119e3a727afb5e30289bf4c64299cf84f524132fd54dd69cce35d0ff0aac9ab653cc6b1b502105a364addfeb0795e4187bfce5c75aea430c87c915abb7a924a58e50decd7da0c0ad9f251c4909a7c1bfc56c39609ddb9240fb7ad8303df2c2e57d066075a39965a05bff6e08f6b34acec77d75") (:stream-nonce-mode-test #h"00000000000000000000000000000400" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8d416438e51a462163e0ffc293b0b8ebccd565d0f57c71d2f226c355cf5420ef8c50fcd169398e925f8bb5ce32c6fbba8cb2efb43dc1b2109ff6e2ef7bb38eea59e8743230f74647ff18cb6e7d090a5868a27ebec42f4b08bf20ec6b229e787cd3d688a63266d68b3aa75dc9c6d93e43de6ae7e0e42581a7f7d92f7f6f545b21a90e7d2a6890c2") (:stream-nonce-mode-test #h"00000000000000000000000000000010" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"47ff1ec09983a1dffc58c0c4ba07410821d6fee9c12a5e445329ff768dec0eb41b258c433f1ab164f620a42793582bdc8068174ac4f2abf36847f60e320d507c1f600158b44db940fa74eb15ab0080eb6ade98138b62cb2258950221c6b5c8149f91ae47537e6f7d6ad2f72095ec08404a386186d9804009c81cd311b5f1b4fd118923b38c0ea8") (:stream-nonce-mode-test #h"00000000000000000000000000000008" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c2b90c7f11b847a6a778faaa5fb88213d0b70c77916f9af1f535995ab15c33360d4ec1705eed07704a499ac0f3684b595965088b35a39040fcfe8e83e80339500d3b47c4f0254e209b3ed51ddd08f30fc0da26d36c831d19149c03db2b46ac97e07685b1116f926b527827ce97ec445d78e5d540bc584fdc14dc77c66899ac4b642264d66398af") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"76b8e0ada0f13d90405d6ae55386bd28bdd219b8a08ded1aa836efcc8b770dc7da41597c5157488d7724e03fb8d84a376a43b8f41518a11cc387b669b2ee65869f07e7be5551387a98ba977c732d080dcb0f29a048e3656912c6533e32ee7aed29b721769ce64e43d57133b074d839d531ed1f28510afb45ace10a1f4b794d6f2d09a0e663266c") (:stream-nonce-mode-test #h"8000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e29edae0466dea17f2576ce95025dd2db2d34fc81b5153f1b70a87f315a35286fb56db91e8dbf0a93faaa25777aad63450dae65ce3eae7fc210f54cc8f77df8662f8955228b2358d61d8c5ccf63a6c40203be5fb4541c39c52861de70b8a1416ddd3fe9a818bae8f0e8ff2288cede0459fbb00032fd85fef972fcb586c228d969d08349670baed") (:stream-nonce-mode-test #h"0100000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c5d30a7ce1ec119378c84f487d775a8542f13ece238a9455e8229e888de85bbd29eb63d0a17a5b999b52da22be4023eb07620a54f6fa6ad8737b71eb0464dac010f656e6d1fd55053e50c4875c9930a33f6d0263bd14dfd6ab8c70521c19338b2308b95cf8d0bb7d202d2102780ea3528f1cb48560f76b20f382b942500fceac26c02c80147c34") (:stream-nonce-mode-test #h"0040000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a822d39703fb46e9ccd2dcf75601fe746f3a22202547060f650508a43f27e655e277e7c9525cc93c45ece389f0f127109699a14eeb900f602477cc91c0bfc894200045ec1c8deb474a2750c7bc939cb714e10f04d693534b41689816014c1940570d7841b3d30237094dfb43c523d08d7a0d12c3e5e1c88cfc330fcfe1edc2f7ac312cd10aa161") (:stream-nonce-mode-test #h"0002000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"79fdc08e0b46cdeed7d28ee9f04c1262c483ca3389a8ad4b2290e9941233e542fd304c08c11dc606cb3ec4621a90caf409c417f50fcc204aac034f60c1918960582984d83ca6e5872a9454af44d478431e4c3048fc177ff47e869e225929e5bd050a0fd97ea7314931352ba86a975e66294c8ddc111436c6d7715f39acb639a6e1a4399f0a7a21") (:stream-nonce-mode-test #h"0000200000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7dc536872864157d28d22e06de9167d1e89e669536b7ace64bb03602d388937eea3046c6cd84500576c688922b5edaaa38a24f3068d7fb6e526f23b017f4d224b700ca7f17b972279c0d3a0e1037cf2517892cab9523da097ace0f80b6c47a390cfbb9e6d846bf3e0bb988c135f7f1b786e483cc239efe1ebfaeb3a90df4f50e645fa252a1ae5c") (:stream-nonce-mode-test #h"0000040000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d45ae542081e2310d6c24b8a0d9b509e5bbf86c3542778cb561946b083e2cd2e89bcb1e3415e68c7e52718ba421e4dd70eb74ee3fe8d83454f25fdb6d2d4bbdc8f4cc2323173a02046426969ad0f1dfbd9ce2c67cf9da3073acfc9112fe4f1478051bb0a76c7d6dd06d91366b37092c4a9be3c5297826b7231627c76ec8bba23ab04f2dbd9a4d7") (:stream-nonce-mode-test #h"0000001000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fbb1445f6e39a80c6f61ecfc732e3bc044866ebbe83dcb8f40655eaab387e968ca6abe94d51826d4d84d1742ea67c7674f486754b94fa3d65bc7e3475f0e2640b9c98824baf8e8380ee0ac89f3d58dc82cc44702c490b825f4def455840245015f28466900d1157f5c083f13d1335d5fd6f1418c8cf9e930d5f59f485e346a623e14a99fc21594") (:stream-nonce-mode-test #h"0000000800000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"40a2bafb9dcba87a7b03cc50456a3ee340357c6ac912f60cd7ad70e77c461c9d599ef7756e23f07d950cbfed9e3c25e0d5601849551177e6bd912aa475b59ce2245cf8f28cfe4b0bbdcd8a466b19fafc7a7df793df6158c9e355791ab94c465e61d038676d53b396ba24123125cc9602b4613f37e92e8a0819f04bbe05b5dbf6d0043e8d8e6d2d") (:stream-nonce-mode-test #h"0000000080000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b2d1044cca8250a5738fb4149c8a21abafbb5b46d781a25fe71a0b833b1907dbfc1c4430c651b2f0e1fa4d10aeb54b40ee3adc0d30684411898532485631c788e8369155b6a26cf05c63ab0a702d1f72f2cc1c89b36c9d3a678dca559e405f6d846b9405983ed34d40015fbc05c9605e36a064d28156ffadf2fbd23d0ba611fd2163ec6027393d") (:stream-nonce-mode-test #h"0000000001000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cef3b8b5ea1c9f5a1afca76b5637cb3fa4f78488d9f401a1c1b23b95a862fa8a14fc1b9bac3f37f48721d3a60b274d3d829f30c9714ca469bdd564c8e378dd000978d14d1721d7c21b461d985054da05c0c03166b918bf2c4681c1bfbe8f0ac94b60de896e98170078cdf22e4b1df577e477c69bcfb32cb6fc7a23415e1cd7d4154404ee511634") (:stream-nonce-mode-test #h"0000000000400000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"59a9ace0159274f9b503fce9f07010b03eaeb738aad90b8cfce331c78864b84815c0e5ea49d9b9d2f8442343c749d67e5088e58f07bd27bf0a0bc05e37702a99c40c38d6390e1b8c8d1b73da0ffc63d0acb1e69fdb771f7006f14738770e1dc378f72d63d40b6d02e7514cbfa0abb80bafdf5973b28a0ee1c1bbec573a470392d95bb6dea580c8") (:stream-nonce-mode-test #h"0000000000020000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4f663a66a6d9603f9304066d6c1f01109e75b37b2623ec21afdf702555b11cf7272a594f03e3ce38c9941f415330d1532a394bede3066acb58e730fe6f76b5a81d77834c861e1e4c208f9cd9445534324392eff6636850df6c8090675219b19b488f60e53b6dde73e54ab7258f9a7c71f580ce237cc5dc6987e08416e5710c4a1227bbfab3203e") (:stream-nonce-mode-test #h"0000000000002000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d156e8b14a494dcf115fb0aab9664a54094c6aabafad2f3378f9c115c03ee9f5c064e682446d64dbfed5fe61ee6bcb788fef617989fef857c67b3438943a28cf160b02fc962197dbde65bab0d0b2eb1eebbec5a3047e799ad999bdc862aeb37c3a9bb7eeb31d3287246a8d8c7dd042b37ed2b4d069d1962152920954aaa334bb071a5bd869bdf4") (:stream-nonce-mode-test #h"0000000000000400000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bc5d174e262d08b7ec0cb7a00aa31f55b2e7577f9ebb489659f6f0eb09b11afa5ada8c682824071bfb262ac7689efe9e8ae5be92d9aa948f8b51c46674f810eca032210c39bfe47f5687bc0dedd8f243b168921c0d1a9586b8d31c5f11230559d145f3f2e087340359716b551dcf1f96ad977f2ed50627e282cd2df93baab444704df2f6dfcc50") (:stream-nonce-mode-test #h"0000000000000010000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"038418e8ce529449ce5a22970de294c1be6836b518cc938bf6691b05c16622b3ba9aaec0bb5deedecb8a77ab55895809aa6c9c626613146acb664f280ea58be21730631a042071979de62cf593fcd47fb975301eacbc2c478f1f9a6eac1e354116282095faf75bf1bc101ceab6600f6bad9b348f15d256931317429308b1efde18f06f841719dc") (:stream-nonce-mode-test #h"0000000000000008000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e3430d3c7e50e8ac3fcfd841b273aa735afc1194132bd7d016d3ccdacbcd0c8afcfdd2bd86958769d242ad03ba672ba9d88a0ef37bfdb8de7d13bf3fdc1749463b0e01ca9e8cb2b617db6cf30c292c0a9ffec2f48c7352eb82d488ffddae7918237d14d9d1ba93fe62156828849cbf0c11c2802104499dd52dd241377fdbc080ff76d4d5c8fe68") (:stream-nonce-mode-test #h"0000000000000000800000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"606d6dc91eaeea71d5e9512b8902c4e7de571ac944755dfd94f8f5dd6f790e02a6c78a941bcd322863f790e08654288811aa05ae5a5eebdf0455445ee2141fec79e3698177e835c99571ef17458ee362d8a4a084ae051057296fa51b9b85d5c0e52ae6df55c7ed9368fc6afca9249c98b75d0892905840bde54a3220d4d7d483ae6c03e9c3e2dc") (:stream-nonce-mode-test #h"0000000000000000010000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a0cdc8dbe1a7ee45deca837d03868552f14a22644e12c1478c3e30e36fe196ec3f0d852b73b84049105f0ae09fdcf652cb26758cd1795150c0136b511510891adf342ca7313d5a04d57bb9612c7ec851ca6e4501f41aefa319aeb52f0a44fedcff30dc4554e36e965502a2ee27392eaf33f45b0e275b30da83a1b80db6c5c73271e0d5f431929b") (:stream-nonce-mode-test #h"0000000000000000004000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"510b502b8f438f7bfcbbb92c4bda299aec1becf9140d4728f36ef115c62a95e12e06ef6d9299020e8083ceb1e1103eddb0f63a312bb38eb78c673e481367eb30179d6a933e00101512f1734788389ee92bea09b40407ed2991ce42d960e55a1d6ce3f48d24a38329e8a287bc32115ed510b10cc3650de7281e4f23044d6e7246c155816e7176e4") (:stream-nonce-mode-test #h"0000000000000000000200000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"757903fe67f3c18eb9bb88e15b1ba456da2cb2d7f2d228d609451dd367d2e8b3b6ab169e13068e2a4f8fe42d87885b7994f75da4ebc5d3780780fd0b15a1837f392903f018cf17ef5277d6b5a89ce8291801dc25611152712cb081e48e4f3a0f52a80fd922ff6465a9dbf5fb6399fcce23b32a1b80402be4fd3964162506ea9c6280ea3845c057") (:stream-nonce-mode-test #h"0000000000000000000020000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a90a254027b10989607faa2c70484ae25d90c4337ef94193e9003f2ba932fcc2c3b4f1d059b614711190d9e4d3bc0c7d8de371f81580b8a2dc45d0ea3d726c9b82c55a95ddd5035025c854fecd721ce6da456ef0f0b1d87f6cc01a97027c3cb501020ddaef53b620dfe62ee78bb5a91a364b06f5ca341eb734b0ec31dc6b1983b8f5a4064b336a") (:stream-nonce-mode-test #h"0000000000000000000004000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a4f4bcd4f72a6f26c3d14ef8b113c538116bc24fc375273a2c64a58d3d37b423380c696e567afb271eda2bd45a8b14e5d4a59d07327193a30042a607ae9256b7afc7d28d5ff9cdaa92a49678cd44b3b1e04a4a54e14b5297081ccede8323692a6fd47c31b4994ce66c4e6789b7f82915725e4a3606ee3f92b5a2828b794e094b63f1b154b8b86b") (:stream-nonce-mode-test #h"0000000000000000000000100000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"aa4e50a1f023b75d47f88e8806c67cbacf604fb587b988200d76536ceb5b44909dd34e7a1648f36f76c75896f430ebb2872f98c3307c04f6b6cedd81b53d540e1776175df6315c487f4ded1328f4ba48da550b1481b09aff50be5052b8df9e057321fe623430313fa1f04ef4b13a020f1460f605787c787077ccbadaba4cb15dd63980f4ea7060") (:stream-nonce-mode-test #h"0000000000000000000000080000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4dd8e391cd9c4e4220649acafb6ac3df4d83811a1e6243f24a8086eda6cded58e946be4d501780566bbc0dca23a350adc9d6d0967f23ef91b59e908bd7314cd6bfd38d5df5d191814eea8cdc328c32c9eaf48a61d1fb2c29715d732b62c5e87f90a520e414a254e6b8043d9ac827f9ef166a0dfb735858035319617a7bb02edf0aacd56ab21e81") (:stream-nonce-mode-test #h"0000000000000000000000008000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6997b2ee4ad0ae33ae653d1df8140ebb6d41c8681a91f104d696c25a851145654e33deb4cb30609ea11abba8c084e69bd8a239bd85268ec1d2c68e49cf3f44a368bd3c29460f8344d251c5214a526b1d68e56f2ae5eb062a9c69b12770d4ebae4e7f5f9893c38ff3ae9205d16a4bd782ae22144b28b8da7f62b66d127b6f5980a8468a024da8c6") (:stream-nonce-mode-test #h"0000000000000000000000000100000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8a6fd6884ef5b7b5aa92ad34c1208f193785f1f3ef804afe330117fca19f6e5746203c93d7375cda2657cfc770b82611ab1fa41d8ec11d81af70a6a315fad04245fee283bbae7277a0181e2f8970faf894caebb1f43a548c2cf0c69d0518f99925f475f7d8e17cf9f9238cb007dba97d1a971006bb2cb95226802ffd54ed6a6c23ec0d60cdd825") (:stream-nonce-mode-test #h"0000000000000000000000000040000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"94ba30855bc0bdc3a03c3098306396d43df75dbe49cebfd659387095d13b1a47aefc45894426bc5784bb3e84246811ba19f4bc86177b2558510b2dc2530f891b7db13a2412ca2dadb9432d1df8a506b3c1739cbc7ea76d99743e3cceaa2eaf61f1a6e77ff8cfca7962633836da6e6da46914a53591988ca5e67c3361ac3c36018ab7aad5ba0138") (:stream-nonce-mode-test #h"0000000000000000000000000002000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1bc3fa4848edc742c3837abaccfc705dc33c93f70eb6b30b52dc2f05accde10c91beb3bf333466719b5ee5a9c4d2da48619e1e9201e84bcdb49028c3b9706fc5dce51d0d7d84c2b49af042cca77038aff2abc22b1336211ec17d56fc3eb184e4a44fb6344fad2f828599075fa07d0dd1f2e19e7d7b22bdd10a913e43cfdba624cd324e5bf536ac") (:stream-nonce-mode-test #h"0000000000000000000000000000200000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e5c6d2e89c9d114af100a7e51b05e76bca6cf921d7364c591e5c7ff4d26db3abf2bbafb826e556dfa9dfea52a02503228dc364a01cbc18fe76e063a2e003488abba35e29daeb75b8488d361d19a78e5ca1cca968f63b587ff3aa86ed3cf6403f9cbabefdf50124d13ae4b5cafa61c4114903f874472d0a76410e668f598f0462493fcbcbe8ee2f") (:stream-nonce-mode-test #h"0000000000000000000000000000040000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ac1e3bdc8cb03b990a3ff5cf45825a820f2fb2c8f9d7450ef2090ace8e9edf245a721bd6bba2390f457327f0ded6eb80ef1599496e957b6d9286c84b1f3de282781f48202ec8abd88adb496570c08b6d911d7bf2538821565e8dc0e56a06c877c101bfa47e8307be970a7170b802856a95337a8f866d75d59ac0e0cc204d6d5df92d71475217d0") (:stream-nonce-mode-test #h"0000000000000000000000000000001000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fadfcdd1bf1f0d7c3807b62036e0803574038724d872b80bf3778aa92dd2723fe0205d9108d448f43ab7427ba073cda09efc08c9e8a19955c9bf701692da42d0ed7bf7f6de2249fb9ec2fe8b63aaf3597be47cd1065ee32a940a6e13fc29367ecdedce0ac949d78eb6213ff9acdbead6f073fe8703cee5def87413b6eb4d23d74d39e24902e4c5") (:stream-nonce-mode-test #h"0000000000000000000000000000000800000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a4c041c6d5a531eef2adfb68732469ce8fda737a85813d134a659522c7fe99b38da4d67e8628e57e6775e024066d212c73c64a6dff01a5f5c25914c1209fd510470f92547ded861afe58ecb0ace4f234e4b818cf9e4272e67e08000863431fece5862219d5cbac34ed4cbfee8b56f4f59c19f1480856df07cac51c36c3e54d7e34dedf022ac452") (:stream-nonce-mode-test #h"0000000000000000000000000000000080000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"38802b66f04f9ad5ee111e849e0507996d8d6d079af05ea6447b4448dcdc5053563009be8808f321cefd4b191ae8637b896ff7bc0e12f17eead902029bb737c0d210e00f577f049759a7790511804de40151a60a3cde0fd19d231ef50614a68fcf3929098bc03bd6e9f5aace1f871cd4981a9bbd938035ac403b1f9db0a6d0f85d4fe2566a7207") (:stream-nonce-mode-test #h"0000000000000000000000000000000001000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6a35a3d43ff0f7db81d504c5943bcdb466438f26fedf7f6b829b2982466dcd056e4c68ff940dac415a47cbade5544c469d785e719b96ed4e0a66115d828682c0796a23eb10748c17177b7782246d2c556d169198bcbe636d03675ab0e2158ba875539e89bd1fbd3688bd78d1404ba11c3064d3db2cef448deebcf13f80dabffdc81c0c317a895f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000400000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7f1635f304162e58e4e8dd7da84e7d5952e6e13a38d2bd188e8e9bc0237e9a78595062eedf39ef6d00f5f7dba94517663996ff1186cb1321645053752c6df73bd36a014aaadf9d6ab56d96d2e93277d74d647c25a5209e0c68297837a88238a8a8a9bc55093a3b9b518c90e9260afe77542abe09d1e76cfd4ab814e637aa71eba71acc7a3c8fc7") (:stream-nonce-mode-test #h"0000000000000000000000000000000000020000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ae920049fb4d5618a9724ef89b82b0a8c591d5cd1fb16e15db99e2e5f7871609c891270851a86b17706cf56292bd9c08dfd0de18e178ce5eec03adf0a0c0f806ff64c7558af1c4a74321cdcdebf3a1398cbbbf6e7f11560e5ae16c98ec8f45fa887c9a25271a7bbc1339a9dbb51a0f931a7c048b8ffe439356cb182164f861332a8a131b50bd77") (:stream-nonce-mode-test #h"0000000000000000000000000000000000002000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6d9704ac3b5684aecea69c856136d41a30e84284f674663cdb16cd0036ff1efd9676328a1ac756707c626770e1dd4331556f8190c653efd4b0e70230453a4665b8e803b876bd0d105284bc688c72b0c996953ee6007fb65ab53a4c0eea84e70fd21cc49953b6e52d91f86fc9ce9e49840d3d41c6d922fab6d03c620922c6b5028731b1db4e3a8e") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000400000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"da9eb741de5837a85e5afd575b8bae281bf72fea5d68fd5cad86bb862629ec6207c26be422d33b16c123afcf1a0c037effa513930bfabc8f4bd24cdd4792e870d0ca647c69ba74694424e0b995454019a2810b7cddc16568f7286859c870be328d3db1c973d4278e61156a86b42a21e208243476cf5b6f5297a32350a0500fd5c86fe46f87e126") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000010000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2d70980afbea9710dd1d99b374376244c1d9272c46f7cf910871bdfdf8e4da336b6d3fb0e23e865c254f0bc8a2d367d331641b3fcb0b53fef5590a3d13af77a6531c96b3c7cf17601cc3a61d416c2557806e3aa7b6d567122ee1850802834b66142ae9018675078c1d7de9349362bb2c7a11e4a35c59ee08fcad57623322a2a61af333c59720b9") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000008000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"85ba6f931b5e4247b2366e24f79a11b500996af856118d261e3414694283ee6da1bec31ae8fa4a698a0f7cc92d11ccb3fe68448254b3788363be4882b59e3d1af03de506cb114b3a103e70e273766160db6d2d43de3d8f2071f675eec6e83f724504d17f3ca7b250f70aa93ec7d73330e45d9ac28b9ec689a1f933865cf72974d8fc02e3a2b0a0") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000800000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"dd79d29d8b7a962103d02b2f307008d2037a7776bbb65961ae38bacd248c247de8e32fd63d93888e7809e46d9e28345f74376a24d330d2c0542bb8d9930c708de08ddd24b7d888abdcb2dde98dd0a81ad758e23fcdb1ceca6b6bc4c610048cb57cd3706412e8389ca7ab74b4189105322d3b93ef90d7e612dfe409ed5d65cf9261f00cb191ec04") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000010000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"810ff1090fff0500a21d2bbda49e94ae40cd7603536fb5ef23f476644cd8da8c1da621c70c9ff3ac75a64438378f201f2c21959ee0042203ecd713a4bbf41a60b90dd660051c2daaadaedb65c13ec6da75e1be3aff23afe3c9dd87f8f9f64c6561f8fd2c00fca06175d53d27fa898ebae4b73cc58e7b268b43654da6aa0f59d407df5ed186a39c") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000004000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d44b225098fbe06ba4277cf30461dbfee392a956fcac7c2d217e5a83fc54fc40061c2980234d3626c8d6435bf731585bdfae96698cdcbbc5d42802d442814bbb8eb2269ebea00b68c8093609c25d4363f3caad9b3a7d0535b168a90533dc9784e8250e796af25f27e3dddd7c6e62a68675a6255fffb90e6730cc1def168e6e0d440570682e190a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000200000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fcc3d5a7e149f6e9a247f45c8250340fbb30f92ea532c6158b809cf2805fc8e52c91cbce170f7134d5dacdb77bfdcba8d5edbc74b07dcad87ee55aea5a4a9b44b04a60a43ee94527e85619f7156ad725198115f71e9b86fc2557cc41f834e44262b61ae58c3cd77808f09a9c87f7d441574ae147eb11016fe21a751df62cb8bd6a88f61e930405") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000020000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"dfc40d2526afb96f5da7bfecbead19437ffc955c638fc3e9b9ba43e34768b8ef56690cef22ba7c5aa3d4dd45f5e221124ff806ed4fa7542e2c47896b94b2ec02e3bb0a4404433e49bf2ef017f7f5daed03a2f8521ccdbaad3930efebd6e81ed49db61c82e7d38d69cd27736c394bcb39939478ba741ed168032e89f5d486a2d0fc1ac585d5177b") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000004000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a39386b6cb0c17ae2684874ba5cf660d73e1c566a0246b4a257defe9a9c632c253fa9fa8aa53b3aa0525e518b01acccb0208ad510083dd412a88ec6aabf360364c0923bd59102aca29b12e4cbdbc7d30a0e9eeae13250e3585b6cbfb93c1cc428f10e87cbad16f16cccee1a57a96b044259b223e074cc436e35e7a93ce761407ecb794d3fb2101") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000100000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9931a2b9eea3ad5658df1ca3983f45cc642b91a439c409edc0d76130e9073597470a5993d73718ba86eb2e875b2be11ff4db08d02944b2c74dedf8738b09afe311b6a0b523e83ec7ac043132e9d49b79a22eff245f716682f2f99b010d0301c37ca09be2b66d849c55d0783ec3757155732359d4aed93a0f55e5a13e748d19eeee5f65404ca724") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000080000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4db374aca73298866adf085498e9f407ab5406c81f9e7ca2b742286339757c001025e83061eda4ffad3e873d535cd88075ad663f09a8661c77fabda0929068ee88449f751e93b3be7246989ce9b189935bae3d516097118ac606ecbe6565da1d80782eeeb3202b1e88aae65e69b125ccabe6a0366edb5f84c3b617576af2ebe7c19cfd0b0ba43c") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000008000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cf6dce0f2cdf8e97305f864f71c9b59f371a9d113f8464b029f990f59429a74deebec3f4ed7cb9e84cf30e5e79b93cae7dd2f54fe88f5b997d40e53a70e8c0fd976226b63a01ce8ef8e590776f522a4fcd21e5becd3bd0b16075fb0c574084b01cd786a99e3b8175c0681336952fd44b893216d99939ed88ee33c65bef0b0615c5f32f345c6690") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000100000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"38b8134dfede23b4319835a4db7ce4942549982e0198afdf6596e53eaa1b32ee048b2adb63120540e26d326228d5ea2dfc1d603de692aefe97b2eab439421d0310e3fd6cac57990009d9d5f1b9205d1b3f26e128ea7fa712fadaae3211d0f3f0426f5524ae2d587a21c2483dbb1b8d33d185b4c0108a968789214daeeea34182005d1e93d4b2fd") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000040000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b9c7044a0b415f0981d5873e938f3edd7213bfd52908f8f98858f50b1c26a3522d26f32dd8454f080bd38bbe8d1add7953e2d19ac33f651e2033be1fbc0c0c260e18e8d405e580d69b17f6ec859d216bb98d958a86bd12a0ebbe32ddf692f8cf5d7f7f8dbc8256ce538a81f383658b4d9c6485e06d1d6beabcce0cc8a389ce651e7fc5b414b46a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000002000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"625b5b23d2206376400f7e7feb5cf138d73bcd2da8a42ae17b6dde13360d5402b14d88e9303330b453cbf3bde2e7e2fe934894dd97900fd4be6baec8f8ba4ddbace2c1329f874b1a66bddbc2fbcfb199628177ab5d64858bd4028d24aa5725f403ae15b5d35478b971155a20d968c9bd0300e70097e35959e0d3bbbe748f9a30d96bb33b09e9cf") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000200000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c21a9ed85f951daad80571ab76e29f427075af0899712aaa2f6f4610ea2b7e7b7b4710b3306c9fa6c5f36cfb70bc391099c51fefdb771e2a79052b5aa44eff8bc096c57dbf6364cb460c0f4b159a686528b9f1882c11a0c8fa743bfd2d6b4fe206f46c15dbec009b893c0b38ca87d3bd3bdbdf6af2a237fe44a818d6259813b39166d005060b69") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000040000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1069153152233e24ba6d641b7dcd36b36669bcee09890cea2ee144103f6c96ce25d859cf4d4b4157bba04c4bade0d71f1888d10d55774dee145886fa9bb716d72b70ded2d68aceedd7b23a705fddbacec934a5fa43d8ad5f3839dc667c4c8362cab801a2de7afe89ca687fb1f987745a05ee068572d39492182d5a159577fb768dbd5e6179a748") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000001000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"06f2625e7947684bd649250138275d94b51de2d98353c3c8a75a411a5c331699f993695707211b751750f7b2bbf65e9b170205c931164716a1107a98baa33c6651889922722b3a76d6f81a4bf04c54b9e96de1ac0a92afebf3f6603ce94c530ac9d62a51cb4720dc155e213d0ccddcd0b21e1b42bd4f780503ddf85d8c2508770583149217def9") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000800000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"39b798a7ca5f6d52d8f2e0c2558e27f021c051291610d143800d1fd43a1a4441edc985702e56ff39746407c4130294442b0f4a166dfdc1c5eda21295bfa84743a5363fa527e9b0d9f4c34378622c0500471750546644684cbf6e6c627a90accf278a1244934a5edd888004b8b65e977da1ee7116e195122cc0f1b7c87e6364720dbe64b653d129") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000080000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"eb37c515f9164e8e740c7db17bba5ab899989784ac45de624d9e972cbda76d89f67adfd5bfd3b247fd0096074dc1d13af2c79570b29e1666e8d5d0b16c345cb01b4a0124beeb0690b57dce22a82012ca2777e7b551ddd8f33338d3a14535ce5a4f40c02874302108e61fbf848ff2d01572245494d0596e4ab55c9c4c6beb642e4d0e303f2a2215") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000001000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e254b27424e2701f1bc021051023d979a5714b3ed9666e769e9a5f5b04442e073deb2a631ed80264a5e1b3f8ffd37feca7b91bea2c5e71e4e891208328bb84573c77ff32efeb7f127bce4a3a1c12a4cfbd2088aa8f75f4e33086c97a1ee2c2ff1421503522855f4da190d224aa966e271045ac843252bc823c7f5ee2227ffaf3dfd381e9fbce36") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000400000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d096b9ab2ee257fbd4d7961f5b5b51cd18ac5e3bfd2ca8f8b7efa364ec8c68008fec4491983e0bc4e13ca2c30c3a034149526201174e25fe69bc5d6551e4b192a9f1098ba2bfe61ffd704dfce692aaee50ad1c41f6d87493b8815481737e0cc8e91c4047616d3192cfaf12369425ac6cafc4135faad0952eecb4742d94572846a67a72d78512b4") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000020000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8e3280355452decbad1787a1e93160bb2db48947c8772e4ef0f6563723c1fc84f397b67df709c7a21d4974a35437e33ec99e433e3adb0ab68aa4db18d6915a70ba563e4692c06cf95da0cffaad1e6f6322aa694a86386e35573a3ae4d0a9103c98a7944cd0e35574e406c23b3210f02204adcfe7f8b54b2efc2468681bf51aaf5ac0d6fc392e5a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000002000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"89bd8d1d6f740201285a589a16a6ba15bf25388c436f9e045920f6023cf0118f30576d57db1f0f0256b95be0f698a056a7a387930f567f27f5683ec78ada64c89d718e9c11e0e8ef4eb844405605616b45ecc0bf01363bc7078050d38f879ce4447f482fd66345c8f3867838bcabd6509623e9fcf9b061a452bdd304f6d8bed013efe5da43060f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000400" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"30d34a4235a797347a409c9f15c89351f85c3b4b03c2dd8b35f7395699c9d9107e0bbf5b138da9094cc74272ad6a785c84cdc272c9329692f683b511ca1524a9db3cd4bf89dd5ada4c1aa53589d38bef47bfd75cb2eea64db0a1002e5dd2bf0294e77814f2ffeb8035e1ca879368f7e24ef5a45580cb69d872c6554c5276d148cd7b44f71d0d7f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000010" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c74c41db293b54d15149e96bc5a571bef9771411803ee2f77d8bc4d5805dea00748433c5dc5b41ae7cb9cedbbbda488bb668923d5b712d2a5837a1a984a3b3300286fed6fcbef23eda6d3a4700932aa5fe59ad0d971b0f33be08334f87148799f83238e7bb7036acae5ec3f48c071940e6333103f2d3c2d8fea51caf14a030ec5afd1c14f20ec1") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000008" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a9f72227c5ae8db6507865c952035e5c6c77e6c3442a3130424c758647826ed7f8980a991360fb2d80effd975569c2c417da09bdb461760e621a8546bccda266961082f998c7627d7b760ae968d522d9f5b33ea79f1459412f8bee486b7c98e2e7a9d4feada472662a579604a56a3467bcf3ed6f082a1599a2e459ab78aa8a004fd1d243c4f71d") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"8000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1c3ae2d1aa4b801602b89d4ea0643da0e91626b6decf9b786cf75d1e9b000acd87d6da533bb768ec718c33be7831fab941f79b0cd50b8639873afb89ce0a19c052da76e960ef21aeb2e1efd5fc76851da530bad73d2aab616e26f6bac1a235ff3551b326f58abf7af868d2d41349407a66869b257801d703b960b58826ff3cfb59578962a33f20") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0100000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1663879eb3f2c9949e2388caa343d361bb132771245ae6d027ca9cb010dc1fa7178dc41f8278bc1f64b3f12769a24097f40d63a86366bdb36ac08abe60c07fe8b057375c89144408cc744624f69f7f4ccbd93366c92fc4dfcada65f1b959d8c64dfc50de711fb46416c2553cc60f21bbfd006491cb17888b4fb3521c4fdd87454232ab0d638ae3") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0040000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b42b0f314248e7d16fc227b7e3628fd978989a8f726d8dbc38e53ecf603c1b46275e63a87881e8bf9a87fcd85d9c833a7c491e62bd91f0dd3e2bea285ae220ead4fbd768b19d117d4293e9672c51d5566b6493ee02f516fdf7a7df3c30368b21cbafc3c3f755cd8abf442cb26cf844b9873f20d4e5927ba4ce57a94f081db3405c84ae67d99c17") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0002000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"09e292434b9e35e61dbb2fa9f7a4f7734199eaedd74e5f9582716fcb59758470f5f069e828bcd0911cad8b644bef2ae376a93da359d340d5407232e5566c534fc6e33f4bca2c78eeea34c385d68082d35aa31a37d962eb3c5405ea27215de19c6019220d9f656ecbeac2b97c6ebe1d12cf75b15583935f279ea6dc3cd114025790f0373304c43c") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000200000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9d34591dfb9a66eca1274c12df3b167d187bd22ea9338d6fa36f18551aa99bb47dc2916caecf431f02f68f7a4440fe2a5da403ca8e340b30a56fef8f94136e573a0db42f7120fc736b35a6502404dc89746f4aa8a4e2b79ddf192b049428b5fa79d0ae28774cbf940e50144989eec12b7ea9f77c5ce5e7db4121b519016ab86db03fcd8e73a719") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000040000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7c6611817ee26b6eaf80f64201a91ead729b342c4caf4d891a1d2bb81382d298f17657fea71800537cfec18b8908480011283f85819c7d4594bcbccbd6fd9651649af64a75da4396884b553b2fbf31ba6479f5aee02d6d8469c357833b68fe63c9336be469602fb5024e76234f22305ce6b189aacdfc0b4c1fcd2bcb56dc7e519d02e7bc6c05eb") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000001000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4464ac848f8981dc0781d3403816600804633e928f1cb212e72973c02f5b86081eae2a2ec2ad1f936a739a87d7043ddcd2e67a472bfb8282e11f093e5e53416b1956ccc9531d3b85698557040ccea41b90ee2fadaece86fde51c80b517ad8355b8ea6db686e35a862c742a4e4f279a25c737e8c62d6d4f781c30b8e937f5abfbc045e76ecf56c4") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000800000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ec5f9be954646a0da3a24eb94a241bc21af4c4e6ea7b4b282a6ea6b435eb6a6428c14d441b4736f929846c541c56dd27982148648eca4769b2d0f65f98b006e4a59180ae5626474ead3e0e6c9db54fc37db9e4a87325029b9269347f6ce2f5ea19091a63184e223163cecbe1d9ad6ef64c31dea600a74bc93b9ea969f5899b2be10bc3ddb51bfd") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000080000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"36446a2be088ebc99c9296f385a94ee4ac6d2c3250995958d996e79cf8e20f9ecf53c2a7bde5c8e2b8e08196399dddce3ea623fed93abfd7883216e9e68e301573b764b014de8930aa8f69bbe6ad94b9ccc0c20ce8c2e7687f8929e5f99b2d9443b35676c97fb11345ae552986b0f3c381b467322b10ee8e264723592f4dc7bfe3beb29b872460") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000001000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9947f6d2470e58defe770cf2911980b8a0bf36771a78885923ad844ffa54ae0b7c3ec3833cd30fd929e5bf091cfe940eeca8a7f55de9cb76532017e27ab5397c68f0555d653ce170ebbd2260f345210771815633afce496a8d8a20ce21ce5e1a5cc407d9efa7e3c2ce93c91568e005bc6ed765e927956de442dee358982cf3cb5b2bb95804b3a6") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000400000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d28edc733ae15c450e1493e088c0746c2b99a741a6e03a13490418d62a06f5d4a9d9afa45d687d2977ae9b1cc5e82a88ba3a6e02fddea051f1b8b0eac9de5763f525ac999093e9e361cc6e5e05b1dd90d057bbbfb61b65e2980679dfee974c379e27cf2ef083212613edf25a672bbeec0a5599927143a606de8a1293bccc4a03a9843e2f1e1867") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000020000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3cfaa7ba5137f11f659ef1b4062720b2cba2a68c894d88b507463318d6c3431691cd6506334298ebaf6154da5799e96388dd38396ae67cec6140c602efe1e7fff2dda0cf65d8b3e5789b542dbae1b7efae4dd74fac6998d9c6363556716c9f0dbc2f4e3bb415001e237e7b37672985c311afb684016164e717b51113146278b4b0bf4fc0c5aa14") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000002000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0cbc7996c4c1463074b0bf57294f13f86e4cefa669e8b51c9d3cba18c416003f50677a41e25a92274d5a5a243fb7af4ce0287a2dbe3030f43ccc79d3a7be88783d2ca9f973c6540e590f35f23f84c8e624a5c71600a2614a6e78ea875ba14ce02fecd95346376a2d6f58f0feaa006fa1420613ed4588d5322c7efe2b1feb15b4d3000f3ac84b42") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000400" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d32dcc303e12dd6721786a964ad5c9d95e969f32f6d612353884898e6a127688c6823364ca78c7cca1171c39d322cea0cd9750f0749a6e8e5b68bd2624b0085945e17838262b68d3881a400c54ec4e3344f4fe30315f218595ea98cfc073b6181a937432303923d7d72ee451865e2bd14b1b7abaf7c23f845b46709ad4f80e320637e278cd3804") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000010" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6550db6ce15a096be3b9c8fa0a5672a60fb24c3dc295f11c632ae65ec2bda9922a563bee1e9f062bdc76c4a9ed49948f38b470708513791125ce119f813a1dab1300a97c2a9cb3506bccb97d15d75f61c6f9adf7dda66f5eabbd7dd3dced755cb0aeffbb106488376dd8f127e49c33f320451b33cf7e1df671065b0251408adcdcaff44fc33ffc") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000008" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8388d00302d3972460fbc334aeefaa5b5f5291a8c4f93fb5c055f06f3dff6addcbde4e5c1824a4fdf6375cb39f4e3071994be43f27a8dc6c130565f94360226232b94297753e57fe242677ec7e674a7dab2fec5679b13517e53b9ac753f9a3718b4c0893599756de3e37e8f05b18d87325e312cbe981d3221bd2c20c323c41b8f6ea2ab545d92e") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"8000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f60181cd5e93aa365a262f96c2bbf6876ea6df52cdd4ff81c8fb41efe3d97589c346cf23409c27a83ed41889458e396d209a03b001a0b6e20747b3e27bf838fcb8bf815279f339414bab827c22607dec4a35fbee4d07daee7f412ebf0fcd9a18b25f6fbcf0fd1cf1d51001c613a0419f729bbe5f143f699a963ae9b510903209f2077acd81db83") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0100000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ef3fdfd6c61578fbf5cf35bd3dd33b8009631634d21e42ac33960bd138e50d32111e4caf237ee53ca8ad6426194a88545ddc497a0b466e7d6bbdb0041b2f586b5305e5e44aff19b235936144675efbe4409eb7e8e5f1430f5f5836aeb49bb5328b017c4b9dc11f8a03863fa803dc71d5726b2b6b31aa32708afe5af1d6b690584d58792b271e5f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0040000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"60f38b546287c9a7cb62c8fe537db38b222d4d0c8d441a9a3f0884c2226f02be3982bac6c55f0182a9e146713827323bdb977610844490dbf1c15e505d04e3931ade2f644929eb15e0be1d83dec77f9050ec92f9b68c994a49ab27c1504b5abc3a50e156316776a4c148cd24945d702cb5625b68ee5c6433fa620246e392b1ece8e0969e28b3cd") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0002000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0e7c34e7ff67fe18f5a5ff0a9272e6084e497581732d91f4f3c8a68770bbad91fb12fbedbd3cda27c4c9525efff4bfcc8c7ee82cfb05c0f705ae64ce5ce6cedfada33d9aad10b7f5121f298dcf3067e8e88b47592f5969a95a88daf0a11b0cc44029030f070ad876ab155d0505eee5b30e82343113cb4d710d7be714d8e49241ed78a78d84bc0b") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000200000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5ddf24f6dd44b9cb3ffc1358ed14da547b6c3480f45d5093dd8cbbedb6f4f3565a99c7f78540dcaf1e77f6789cb6a42c2efd15252669b4d3a0b5b802b3e7f8720b2fa6f7561ea162c4c9264870877119cc70a446a3214b867d202ffb8dac2a7d0ec3933e218a8c918a6428651ac1bd032c7d2327bea318c9d84bf0ee23894295d959166f6bf620") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000040000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1393acb05e951085bd64ef2d6d8b11b174c07c4421dd186ee92b2948cda75d05308ea7f3ce4b10f64063864981b0e4b87da421baad3c4953c33ed70b1f8325e74c24037aad200227a85dbffa37b9df227da4e3d45c2e6c961573b6c2283ecf9320b4002c5fb4eb163d7446b98ecdacb4b7a1b1f25877e73ecb9f8066fbae995fe980d4d4183c45") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000001000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0df696c1c19b9aa832e138573f1d0037d24e0779e3408766e19b41cec06144c388d26f3a9b31669281c529d5bc1f6b182605869f33edf67a29e0704a08a13a257e85de3e8b0efb04bbe8817bd4b76ddc90a121d71cfbfe5b1b8deb6c63c0aed1f800b0312909ecf8c0c39082b84fba0a7bad927da664d5617c4f79d6d295a145b8016ffd768be6") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000800000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b53341d850e2e593995484b4bc41220987f146803c37d33fc6cf6dffe931ab5d0b153e1dd44390216a4a5efae383ff2a583dac9b53c8c6631e074d6b1b62f5e03c208e2cfd9b94a266c45d40528484ef2360a4aaf05ec4fc9f0030019a8893f2ac37a383d9e4e8fa6c11736ee514370cfd48f9c4890c9654d354de430af3efca3926d3d0a15b10") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000080000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"47b21d849219f3e3780f4339e3221360d54caca3ad13e9ee12f50317168cb1533da46395b8c9f271f830afae4d18230831da0023d7a8016bea03d6c0861ea2fdfe23b2f366cb17af78d20a6737d55a2a2cab3701fd0481afd095360568d82307c1ee50cb10fc48846b7b5cd1840158b566b3f81dfccb55734a3665f545d7193c259ec3b6053101") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000001000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"065d067df4ebbedc9c879663d45d3a312ca6e36bbaad3f198000fe2272d39b3bbcd93cc473b27d60655ed20bc909143fb756de54ce839223b3cce631680cabbd42e6a0213c010955a82aa1751024c96432d7e84a0adee99e019abbec08ea16f69b3dde2a8370b84129f29a0d6f143cf8f58284a50017f1a374175625a3e952cf20886fa59237df") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000400000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7d638273dc42db6065acfd19065c6cbf7c50bc3de10ecedbde007fd2cd42eb309925a1f500601f517d27f4ea674534d8ae53ff5836b14ff3782dfead5655cc9e63417a7c214bac28574e417b26cc6b59a59bc6fb2454751cbab42594000dcd2547aa76a7f1c3be699d6062f2d1776eb00fc2577741de56d7c553e459f6168c49f83c9a89298f15") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000020000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"aa3458a3b8478a22569b1999c97ec897a82364b4c56c9d2ddc87fea51e6f7b3fd6b5216700a10e2134cc1e6c2efd053ee6725506172106191ca6db3a742f6c7f44f710e547431d47c9927cf47536ecf1b967cafd30fe4b635cb01eedd9c56c3c99455de9784d08794ff38d4ef319526759631c83d1d38473bd1491f9898d4dfdb39013b5e26e99") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000002000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d7caad5fa6ffb2df3f32558f427d52f7733391e1d35e0fc46e1c49b0d571e5563875c543e68b5e8add784452d733d701f710444482fefe0e77a38ad9623f05870e520bdf5f6fc0b4f6e53fd218b97a2f2c45714d580937cdb1e2461206d5c410a38272455d1a7e5aaa1445e89810ac3d2bacb59c5d2e36f40a003bb6d34d2fc5ce6f81a99ec4da") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000400" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fb3859a37c75544822415bfdb48181114b850137661b9f4725193e52ed31177f3c45fdc3b54f3264ffe4adbcb1795e51423de84221dfef77edfa65be480b438f65b3a2296b5353c88115558921dbf0b91b203a7adc2a8cf2c0bda5e24a2458bf0464d605b4752f1caab45a6a97c308835c198b4caa8f699b07289435e2d67a34df339bdd4b9f8d") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000010" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2095628e5115600ddd7060704a4713882c399b9319ed36af762478e244b1b15047e4efee7868d38af44ed0e0d570eefd69ad2d2b82c4118f26be1b6b949a1068289e87d4ac0ac6c6b965070ace3d20086ac24bec1ea1970a1cc24ca2f053a48cb72c27af57308e6d2358ba8f70ea73388666083bb94eb20a63e19b4a5d1a9f7c52539f7d0d335b") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000008" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"dded9cd3adaf76ecd5844fac1891989d6d51cc6991a7ce35fcb01fa6c3cb5594679fef58787a24208cdaa6947b8db5370f607ca16ccb1168f16d87505ba1bc94187f29e9f87ab7b383229d2454056096bb4673b0980504048599118c69effc7b64d121aae0fdfca5fb6314cad204a67410205a1d0ccaaf93b0678bb9ded84a2d856f32822ab2f1") (:keystream-test #h"30343e6658b5db6a5a0963c1224bcd51dbd1df336fbbc766ceea846af4f54144" #h"f94a6637ef06f9eb" #h"f5b56be7437b3093e753ef59069d0708ed794cfe71954b453e80156fe60a9b469bcbc7612a24555960654f6f36ca111fe202af8dd16eb109d4e0c60c6904b6a36cea834e1ac5c1860533bc14faf8302f1b4d96776fcb707d0402e3256ed4f286508de44b03d6df63096e5063d5b944d7fdb1546ffe9045695ac4abaf7af38c8ce3fea93b98053463507d2634cd2dac44c05fa744991ff1bb6d1b5f393933a0e9854505542f04cdcb9e60589d5516faba7e3760aa0832380908095edfe9cc62e5b828c2db68b6d06a1426c5014519e516afbcdc78cd6dc1ce26f30a87ad6f5e183cf4b424ba67ada583e39e8f4aa76561554ab38d25de3d345fd06d9f4ed0a529197cfbaa0cee99afb332385c4f8fba6ebb017a458d88becae08403790237225c5ea51a09dbe26402efd18b9535cae4d8d987d541df7dc5556987e7ed6a8bc26cc181b301387302a41466b3f2f33df99943f357710398c89bf309115ade01b8154985229a070da48ddce9bb240e4e9594a963e83223b292c827a063850ad54691ecadd026530516d236b9cef7bde595c3199354b6bb7a0df5dc3df8fa78003ef7c69a5c6a9a08b8801071cb2536553fe307783385dc76f78c995be8d10bc16a74b6b3a40e6750ae204288d97e48128896d2af43911fa9d81ae428387951a33279887099730591e838c0d20faae0828b6a31c9e5dfe9f5b6840ec17bf895c2533e285986d1471678ff9b97f7ec324f375242b03d5256180c6647366b860e51ae87a24becd478b082c6139af1d768c950a2ec6e2775b35a50e2fb3e07ac1fb2f22981dd97ba7ae3409b92a44e720b0f453ef9d3dabeb4b1a6c92e54f7a03db2f2053b0d91264249ae7876fc56ed606a22acec46d6509252ba70a92ea9ea5564adf4391e0cdf0facd098a81a242aacf07042e1885c1735b761ac19eac4acde5f56a78b5b98bacd6551be90d8c6d0531575d855aac9cff0559f77232e3cbf843946f1d2eec3bb167f3e1744c559fe66ee757a25cec9171ebc85c6a0f5baa1936462c13926ec183fe007a9ee5bfc2ab3fa29db64429799d59432166845f052b348bec7bea72c090263f617534494d873a34539e99cc0aa217f9c4cc92f67aab405ba6b8dc0320b5b7687fd66f716a3218f11fd904308ddf2fd8358cca3837d2886e96c9215914bce97c724dd983db297ed803906f1f54a1dd5de6b2ecb3cf54c3070b78af3a6d0c7005c152676de86157fb03da7e0ae2b22fe7de4e6266c615ac2543cdfce121fbb9814a06cebadef7de039cfd0ce3759bc57fd2356247ab04efef65557aee60d37c793837467fd06f0bc38fa10d361d0f7e9d4ef8a303d10d88be560cf3c71ec7e7558646c9e494660d12265c76cb4823463acfa5f6210b8d9b1d9688dcaf8436f2b5447") ironclad-0.57/testing/test-vectors/ciphers.lisp000066400000000000000000000057731420372057600217270ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto-tests) (rtest:deftest verify-key.bad-cipher (handler-case (crypto::verify-key :error (make-array 0 :element-type '(unsigned-byte 8))) (crypto:unsupported-cipher () :ok) (:no-error () :error)) :ok) (rtest:deftest verify-key.bad-key0 (handler-case (crypto::verify-key :aes "") (type-error () :ok) (:no-error () :error)) :ok) (rtest:deftest verify-key.bad-key1 (handler-case (crypto::verify-key :aes nil) (crypto:key-not-supplied () :ok) (:no-error () :error)) :ok) (rtest:deftest unprovided-key (handler-case (crypto:make-cipher :blowfish :mode :ecb :initialization-vector (make-array 8 :element-type '(unsigned-byte 8))) (crypto:key-not-supplied () :ok) (:no-error () :error)) :ok) (rtest:deftest unsupported-mode.1 (handler-case (crypto:make-cipher :blowfish :mode :stream :key (make-array 8 :element-type '(unsigned-byte 8)) :initialization-vector (make-array 8 :element-type '(unsigned-byte 8))) (crypto:unsupported-mode () :ok) (:no-error () :error)) :ok) (rtest:deftest unsupported-mode.2 (handler-case (crypto:make-cipher :salsa20 :mode :cbc :key (make-array 16 :element-type '(unsigned-byte 8))) (crypto:unsupported-mode () :ok) (:no-error () :error)) :ok) (rtest:deftest block-length.known-ciphers (dolist (name (crypto:list-all-ciphers) :ok) (unless (crypto:block-length name) (return :error))) :ok) (rtest:deftest block-length.bad-cipher (crypto:block-length :error) nil) (rtest:deftest key-lengths.known-ciphers (dolist (name (crypto:list-all-ciphers) :ok) (unless (crypto:key-lengths name) (return :error))) :ok) (rtest:deftest key-lengths.bad-cipher (crypto:key-lengths :error) nil) #.(loop for cipher in (crypto:list-all-ciphers) collect `(rtest:deftest ,cipher (run-test-vector-file ',cipher *cipher-tests*) t) into forms finally (return `(progn ,@forms))) #.(if (boundp '*cipher-stream-tests*) (loop for cipher in (crypto:list-all-ciphers) collect `(rtest:deftest ,(intern (format nil "~A/~A" cipher '#:stream)) (run-test-vector-file ',cipher *cipher-stream-tests*) t) into forms finally (return `(progn ,@forms))) nil) (rtest:deftest ciphers.crypto-package (every #'(lambda (s) (eq (nth-value 1 (find-symbol (symbol-name s) (find-package :ironclad))) :external)) (crypto:list-all-ciphers)) t) (rtest:deftest clean-symbols.ciphers (loop with n-ciphers = (length (crypto:list-all-ciphers)) for s being each symbol of :crypto when (crypto::%find-cipher s) count s into computed-n-ciphers finally (return (= n-ciphers computed-n-ciphers))) t) ironclad-0.57/testing/test-vectors/cmac.testvec000066400000000000000000000062141420372057600216720ustar00rootroot00000000000000;;;; cmac.lisp -- tests from NIST 800-38B ;;; AES-128 (:mac-test #h"2b7e151628aed2a6abf7158809cf4f3c" #h"" #h"bb1d6929e95937287fa37d129b756746" :aes) (:mac-test #h"2b7e151628aed2a6abf7158809cf4f3c" #h"6bc1bee22e409f96e93d7e117393172a" #h"070a16b46b4d4144f79bdd9dd04a287c" :aes) (:mac-test #h"2b7e151628aed2a6abf7158809cf4f3c" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411" #h"dfa66747de9ae63030ca32611497c827" :aes) (:mac-test #h"2b7e151628aed2a6abf7158809cf4f3c" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"51f0bebf7e3b9d92fc49741779363cfe" :aes) ;;; AES-192 (:mac-test #h"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b" #h"" #h"d17ddf46adaacde531cac483de7a9367" :aes) (:mac-test #h"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b" #h"6bc1bee22e409f96e93d7e117393172a" #h"9e99a7bf31e710900662f65e617c5184" :aes) (:mac-test #h"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411" #h"8a1de5be2eb31aad089a82e6ee908b0e" :aes) (:mac-test #h"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"a1d5df0eed790f794d77589659f39a11" :aes) ;;; AES-256 (:mac-test #h"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4" #h"" #h"028962f61b7bf89efc6b551f4667d983" :aes) (:mac-test #h"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4" #h"6bc1bee22e409f96e93d7e117393172a" #h"28a7023f452e8f82bd4bf28d8c37c35c" :aes) (:mac-test #h"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411" #h"aaf3d8f1de5640c232f5b169b9c911e6" :aes) (:mac-test #h"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"e1992190549f6ed5696a2c056c315410" :aes) ;;; 3DES (triple key) (:mac-test #h"8aa83bf8cbda10620bc1bf19fbb6cd58bc313d4a371ca8b5" #h"" #h"b7a688e122ffaf95" :3des) (:mac-test #h"8aa83bf8cbda10620bc1bf19fbb6cd58bc313d4a371ca8b5" #h"6bc1bee22e409f96" #h"8e8f293136283797" :3des) (:mac-test #h"8aa83bf8cbda10620bc1bf19fbb6cd58bc313d4a371ca8b5" #h"6bc1bee22e409f96e93d7e117393172aae2d8a57" #h"743ddbe0ce2dc2ed" :3des) (:mac-test #h"8aa83bf8cbda10620bc1bf19fbb6cd58bc313d4a371ca8b5" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51" #h"33e6b1092400eae5" :3des) ;;; 3DES (double key) (:mac-test #h"4cf15134a2850dd58a3d10ba80570d384cf15134a2850dd5" #h"" #h"bd2ebf9a3ba00361" :3des) (:mac-test #h"4cf15134a2850dd58a3d10ba80570d384cf15134a2850dd5" #h"6bc1bee22e409f96" #h"4ff2ab813c53ce83" :3des) (:mac-test #h"4cf15134a2850dd58a3d10ba80570d384cf15134a2850dd5" #h"6bc1bee22e409f96e93d7e117393172aae2d8a57" #h"62dd1b471902bd4e" :3des) (:mac-test #h"4cf15134a2850dd58a3d10ba80570d384cf15134a2850dd5" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e51" #h"31b1e431dabc4eb8" :3des) ironclad-0.57/testing/test-vectors/crc24.testvec000066400000000000000000000006611420372057600217040ustar00rootroot00000000000000;;; standard tests for crc24 (:digest-test #a"" #h"b704ce") (:digest-test #a"a" #h"f25713") (:digest-test #a"abc" #h"ba1c7b") (:digest-test #a"message digest" #h"dbf0b6") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"ed3665") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"4662cd") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"8313bb") ironclad-0.57/testing/test-vectors/crc32.testvec000066400000000000000000000006771420372057600217120ustar00rootroot00000000000000;;; standard tests for crc32 (:digest-test #a"" #h"00000000") (:digest-test #a"a" #h"e8b7be43") (:digest-test #a"abc" #h"352441c2") (:digest-test #a"message digest" #h"20159d7f") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"4c2750bd") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"1fc2e6d2") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"7ca94a72") ironclad-0.57/testing/test-vectors/ctr.testvec000066400000000000000000000024521420372057600215570ustar00rootroot00000000000000;;; Tests from NIST document SP800-38A.pdf, #h"Recommendation for Block ;;; Cipher Modes of Operation: Methods and Techniques" (:mode-test :aes #h"2b7e151628aed2a6abf7158809cf4f3c" #h"f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"874d6191b620e3261bef6864990db6ce9806f66b7970fdff8617187bb9fffdff5ae4df3edbd5d35e5b4f09020db03eab1e031dda2fbe03d1792170a0f3009cee") (:mode-test :aes #h"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b" #h"f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"1abc932417521ca24f2b0459fe7e6e0b090339ec0aa6faefd5ccc2c6f4ce8e941e36b26bd1ebc670d1bd1d665620abf74f78a7f6d29809585a97daec58c6b050") (:mode-test :aes #h"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4" #h"f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"601ec313775789a5b7a7f504bbf3d228f443e3ca4d62b59aca84e990cacaf5c52b0930daa23de94ce87017ba2d84988ddfc9c58db67aada613c2dd08457941a6") ironclad-0.57/testing/test-vectors/curve25519.testvec000066400000000000000000000256371420372057600225330ustar00rootroot00000000000000;;;; curve25519 test vectors ;;; Test vector from https://tools.ietf.org/html/draft-josefsson-tls-curve25519-06 (:curve25519-dh-test #h"70076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c6a" #h"8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a" #h"58ab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e06b" #h"de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f" #h"4a5d9d5ba4ce2de1728e3bf480350f25e07e21c947d19e3376f09b3c1e161742") ;;; Test vectors from Wycheproof 0.4.12 (:curve25519-dh-test #h"4852834d9d6b77dadeabaaf2e11dca66d19fe74993a7bec36c6e16a0983feaba" #h"9c647d9ae589b9f58fdc3ca4947efbc915c4b2e08e744a0edf469dac59c8f85a" #h"4852834d9d6b77dadeabaaf2e11dca66d19fe74993a7bec36c6e16a0983feaba" #h"9c647d9ae589b9f58fdc3ca4947efbc915c4b2e08e744a0edf469dac59c8f85a" #h"87b7f212b627f7a54ca5e0bcdaddd5389d9de6156cdbcf8ebe14ffbcfb436551") (:curve25519-dh-test #h"1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae" #h"9c647d9ae589b9f58fdc3ca4947efbc915c4b2e08e744a0edf469dac59c8f85a" #h"1064a67da639a8f6df4fbea2d63358b65bca80a770712e14ea8a72df5a3313ae" #h"9c647d9ae589b9f58fdc3ca4947efbc915c4b2e08e744a0edf469dac59c8f85a" #h"4b82bd8650ea9b81a42181840926a4ffa16434d1bf298de1db87efb5b0a9e34e") (:curve25519-dh-test #h"588c061a50804ac488ad774ac716c3f5ba714b2712e048491379a500211998a8" #h"63aa40c6e38346c5caf23a6df0a5e6c80889a08647e551b3563449befcfc9733" #h"588c061a50804ac488ad774ac716c3f5ba714b2712e048491379a500211998a8" #h"63aa40c6e38346c5caf23a6df0a5e6c80889a08647e551b3563449befcfc9733" #h"b1a707519495ffffb298ff941716b06dfab87cf8d91123fe2be9a233dda22212") (:curve25519-dh-test #h"b05bfd32e55325d9fd648cb302848039000b390e44d521e58aab3b29a6960ba8" #h"0f83c36fded9d32fadf4efa3ae93a90bb5cfa66893bc412c43fa7287dbb99779" #h"b05bfd32e55325d9fd648cb302848039000b390e44d521e58aab3b29a6960ba8" #h"0f83c36fded9d32fadf4efa3ae93a90bb5cfa66893bc412c43fa7287dbb99779" #h"67dd4a6e165533534c0e3f172e4ab8576bca923a5f07b2c069b4c310ff2e935b") (:curve25519-dh-test #h"70e34bcbe1f47fbc0fddfd7c1e1aa53d57bfe0f66d243067b424bb6210bed19c" #h"0b8211a2b6049097f6871c6c052d3c5fc1ba17da9e32ae458403b05bb283092a" #h"70e34bcbe1f47fbc0fddfd7c1e1aa53d57bfe0f66d243067b424bb6210bed19c" #h"0b8211a2b6049097f6871c6c052d3c5fc1ba17da9e32ae458403b05bb283092a" #h"4a0638cfaa9ef1933b47f8939296a6b25be541ef7f70e844c0bcc00b134de64a") (:curve25519-dh-test #h"68c1f3a653a4cdb1d37bba94738f8b957a57beb24d646e994dc29a276aad458d" #h"343ac20a3b9c6a27b1008176509ad30735856ec1c8d8fcae13912d08d152f46c" #h"68c1f3a653a4cdb1d37bba94738f8b957a57beb24d646e994dc29a276aad458d" #h"343ac20a3b9c6a27b1008176509ad30735856ec1c8d8fcae13912d08d152f46c" #h"399491fce8dfab73b4f9f611de8ea0b27b28f85994250b0f475d585d042ac207") (:curve25519-dh-test #h"d877b26d06dff9d9f7fd4c5b3769f8cdd5b30516a5ab806be324ff3eb69ea0b2" #h"fa695fc7be8d1be5bf704898f388c452bafdd3b8eae805f8681a8d15c2d4e142" #h"d877b26d06dff9d9f7fd4c5b3769f8cdd5b30516a5ab806be324ff3eb69ea0b2" #h"fa695fc7be8d1be5bf704898f388c452bafdd3b8eae805f8681a8d15c2d4e142" #h"2c4fe11d490a53861776b13b4354abd4cf5a97699db6e6c68c1626d07662f758") (:curve25519-dh-test #h"207494038f2bb811d47805bcdf04a2ac585ada7f2f23389bfd4658f9ddd4debc" #h"0000000000000000000000000000000000000000000000000000000000000000" #h"207494038f2bb811d47805bcdf04a2ac585ada7f2f23389bfd4658f9ddd4debc" #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000000000000000000000000000000000000000000000000000") (:curve25519-dh-test #h"202e8972b61c7e61930eb9450b5070eae1c670475685541f0476217e4818cfab" #h"0100000000000000000000000000000000000000000000000000000000000000" #h"202e8972b61c7e61930eb9450b5070eae1c670475685541f0476217e4818cfab" #h"0100000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000000000000000000000000000000000000000000000000000") (:curve25519-dh-test #h"38dde9f3e7b799045f9ac3793d4a9277dadeadc41bec0290f81f744f73775f84" #h"0200000000000000000000000000000000000000000000000000000000000000" #h"38dde9f3e7b799045f9ac3793d4a9277dadeadc41bec0290f81f744f73775f84" #h"0200000000000000000000000000000000000000000000000000000000000000" #h"9a2cfe84ff9c4a9739625cae4a3b82a906877a441946f8d7b3d795fe8f5d1639") (:curve25519-dh-test #h"9857a914e3c29036fd9a442ba526b5cdcdf28216153e636c10677acab6bd6aa5" #h"0300000000000000000000000000000000000000000000000000000000000000" #h"9857a914e3c29036fd9a442ba526b5cdcdf28216153e636c10677acab6bd6aa5" #h"0300000000000000000000000000000000000000000000000000000000000000" #h"4da4e0aa072c232ee2f0fa4e519ae50b52c1edd08a534d4ef346c2e106d21d60") (:curve25519-dh-test #h"48e2130d723305ed05e6e5894d398a5e33367a8c6aac8fcdf0a88e4b42820db7" #h"ffffff030000f8ffff1f0000c0ffffff000000feffff070000f0ffff3f000000" #h"48e2130d723305ed05e6e5894d398a5e33367a8c6aac8fcdf0a88e4b42820db7" #h"ffffff030000f8ffff1f0000c0ffffff000000feffff070000f0ffff3f000000" #h"9ed10c53747f647f82f45125d3de15a1e6b824496ab40410ffcc3cfe95760f3b") (:curve25519-dh-test #h"28f41011691851b3a62b641553b30d0dfddcb8fffcf53700a7be2f6a872e9fb0" #h"000000fcffff070000e0ffff3f000000ffffff010000f8ffff0f0000c0ffff7f" #h"28f41011691851b3a62b641553b30d0dfddcb8fffcf53700a7be2f6a872e9fb0" #h"000000fcffff070000e0ffff3f000000ffffff010000f8ffff0f0000c0ffff7f" #h"cf72b4aa6aa1c9f894f4165b86109aa468517648e1f0cc70e1ab08460176506b") (:curve25519-dh-test #h"18a93b6499b9f6b3225ca02fef410e0adec23532321d2d8ef1a6d602a8c65b83" #h"00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffff7f" #h"18a93b6499b9f6b3225ca02fef410e0adec23532321d2d8ef1a6d602a8c65b83" #h"00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffff7f" #h"5d50b62836bb69579410386cf7bb811c14bf85b1c7b17e5924c7ffea91ef9e12") (:curve25519-dh-test #h"c01d1305a1338a1fcac2ba7e2e032b427e0b04903165aca957d8d0553d8717b0" #h"eaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f" #h"c01d1305a1338a1fcac2ba7e2e032b427e0b04903165aca957d8d0553d8717b0" #h"eaffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f" #h"19230eb148d5d67c3c22ab1daeff80a57eae4265ce2872657b2c8099fc698e50") (:curve25519-dh-test #h"386f7f16c50731d64f82e6a170b142a4e34f31fd7768fcb8902925e7d1e21abe" #h"0400000000000000000000000000000000000000000000000000000000000000" #h"386f7f16c50731d64f82e6a170b142a4e34f31fd7768fcb8902925e7d1e21abe" #h"0400000000000000000000000000000000000000000000000000000000000000" #h"0fcab5d842a078d7a71fc59b57bfb4ca0be6873b49dcdb9f44e14ae8fbdfa542") (:curve25519-dh-test #h"e023a289bd5e90fa2804ddc019a05ef3e79d434bb6ea2f522ecb643a75296e95" #h"ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000" #h"e023a289bd5e90fa2804ddc019a05ef3e79d434bb6ea2f522ecb643a75296e95" #h"ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000" #h"54ce8f2275c077e3b1306a3939c5e03eef6bbb88060544758d9fef59b0bc3e4f") (:curve25519-dh-test #h"68f010d62ee8d926053a361c3a75c6ea4ebdc8606ab285003a6f8f4076b01e83" #h"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03" #h"68f010d62ee8d926053a361c3a75c6ea4ebdc8606ab285003a6f8f4076b01e83" #h"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03" #h"f136775c5beb0af8110af10b20372332043cab752419678775a223df57c9d30d") (:curve25519-dh-test #h"58ebcb35b0f8845caf1ec630f96576b62c4b7b6c36b29deb2cb0084651755c96" #h"fffffffbfffffbffffdfffffdffffffffefffffefffff7fffff7ffffbfffff3f" #h"58ebcb35b0f8845caf1ec630f96576b62c4b7b6c36b29deb2cb0084651755c96" #h"fffffffbfffffbffffdfffffdffffffffefffffefffff7fffff7ffffbfffff3f" #h"bf9affd06b844085586460962ef2146ff3d4533d9444aab006eb88cc3054407d") (:curve25519-dh-test #h"188c4bc5b9c44b38bb658b9b2ae82d5b01015e093184b17cb7863503a783e1bb" #h"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f" #h"188c4bc5b9c44b38bb658b9b2ae82d5b01015e093184b17cb7863503a783e1bb" #h"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3f" #h"d480de04f699cb3be0684a9cc2e31281ea0bc5a9dcc157d3d20158d46ca5246d") (:curve25519-dh-test #h"e06c11bb2e13ce3dc7673f67f5482242909423a9ae95ee986a988d98faee23a2" #h"fffffffffeffff7ffffffffffeffff7ffffffffffeffff7ffffffffffeffff7f" #h"e06c11bb2e13ce3dc7673f67f5482242909423a9ae95ee986a988d98faee23a2" #h"fffffffffeffff7ffffffffffeffff7ffffffffffeffff7ffffffffffeffff7f" #h"4c4401cce6b51e4cb18f2790246c9bf914db667750a1cb89069092af07292276") (:curve25519-dh-test #h"c0658c46dde18129293877535b1162b6f9f5414a23cf4d2cbc140a4d99da2b8f" #h"ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f" #h"c0658c46dde18129293877535b1162b6f9f5414a23cf4d2cbc140a4d99da2b8f" #h"ebffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f" #h"578ba8cc2dbdc575afcf9df2b3ee6189f5337d6854c79b4ce165ea12293b3a0f") (:curve25519-dh-test #h"10255c9230a97a30a458ca284a629669293a31890cda9d147febc7d1e22d6bb1" #h"e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800" #h"10255c9230a97a30a458ca284a629669293a31890cda9d147febc7d1e22d6bb1" #h"e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800" #h"0000000000000000000000000000000000000000000000000000000000000000") (:curve25519-dh-test #h"78f1e8edf14481b389448dac8f59c70b038e7cf92ef2c7eff57a72466e115296" #h"5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157" #h"78f1e8edf14481b389448dac8f59c70b038e7cf92ef2c7eff57a72466e115296" #h"5f9c95bca3508c24b1d0b1559c83ef5b04445cc4581c8e86d8224eddd09f1157" #h"0000000000000000000000000000000000000000000000000000000000000000") (:curve25519-dh-test #h"a0a05a3e8f9f44204d5f8059a94ac7dfc39a49ac016dd743dbfa43c5d671fd88" #h"ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f" #h"a0a05a3e8f9f44204d5f8059a94ac7dfc39a49ac016dd743dbfa43c5d671fd88" #h"ecffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f" #h"0000000000000000000000000000000000000000000000000000000000000000") (:curve25519-dh-test #h"d0dbb3ed1906663f15420af31f4eaf6509d9a9949723500605ad7c1c6e7450a9" #h"edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f" #h"d0dbb3ed1906663f15420af31f4eaf6509d9a9949723500605ad7c1c6e7450a9" #h"edffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f" #h"0000000000000000000000000000000000000000000000000000000000000000") (:curve25519-dh-test #h"c0b1d0eb22b244fe3291140072cdd9d989b5f0ecd96c100feb5bca241c1d9f8f" #h"eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f" #h"c0b1d0eb22b244fe3291140072cdd9d989b5f0ecd96c100feb5bca241c1d9f8f" #h"eeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7f" #h"0000000000000000000000000000000000000000000000000000000000000000") (:curve25519-dh-test #h"480bf45f594942a8bc0f3353c6e8b8853d77f351f1c2ca6c2d1abf8a00b4229c" #h"0000000000000000000000000000000000000000000000000000000000000080" #h"480bf45f594942a8bc0f3353c6e8b8853d77f351f1c2ca6c2d1abf8a00b4229c" #h"0000000000000000000000000000000000000000000000000000000000000080" #h"0000000000000000000000000000000000000000000000000000000000000000") (:curve25519-dh-test #h"30f993fcf8514fc89bd8db14cd43ba0d4b2530e73c4276a05e1b145d420cedb4" #h"0100000000000000000000000000000000000000000000000000000000000080" #h"30f993fcf8514fc89bd8db14cd43ba0d4b2530e73c4276a05e1b145d420cedb4" #h"0100000000000000000000000000000000000000000000000000000000000080" #h"0000000000000000000000000000000000000000000000000000000000000000") ironclad-0.57/testing/test-vectors/curve448.testvec000066400000000000000000000012261420372057600223510ustar00rootroot00000000000000;;;; curve448 test vectors ;; Test vector from rfc7748 (:curve448-dh-test #h"9a8f4925d1519f5775cf46b04b5800d4ee9ee8bae8bc5565d498c28dd9c9baf574a9419744897391006382a6f127ab1d9ac2d8c0a598726b" #h"9b08f7cc31b7e3e67d22d5aea121074a273bd2b83de09c63faa73d2c22c5d9bbc836647241d953d40c5b12da88120d53177f80e532c41fa0" #h"1c306a7ac2a0e2e0990b294470cba339e6453772b075811d8fad0d1d6927c120bb5ee8972b0d3e21374c9c921b09d1b0366f10b65173992d" #h"3eb7a829b0cd20f5bcfc0b599b6feccf6da4627107bdb0d4f345b43027d8b972fc3e34fb4232a13ca706dcb57aec3dae07bdc1c67bf33609" #h"07fff4181ac6cc95ec1c16a94a0f74d12da232ce40a77552281d282bb60c0b56fd2464c335543936521c24403085d59a449a5037514a879d") ironclad-0.57/testing/test-vectors/des.testvec000066400000000000000000001057011420372057600215430ustar00rootroot00000000000000;;; #h"standard" test vectors (from NIST, I believe) (:ecb-mode-test #h"0000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"FFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFF" #h"7359B2163E4EDC58") (:ecb-mode-test #h"3000000000000000" #h"1000000000000001" #h"958E6E627A05557B") (:ecb-mode-test #h"1111111111111111" #h"1111111111111111" #h"F40379AB9E0EC533") (:ecb-mode-test #h"0123456789ABCDEF" #h"1111111111111111" #h"17668DFC7292532D") (:ecb-mode-test #h"1111111111111111" #h"0123456789ABCDEF" #h"8A5AE1F81AB8F2DD") (:ecb-mode-test #h"0000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"FEDCBA9876543210" #h"0123456789ABCDEF" #h"ED39D950FA74BCC4") (:ecb-mode-test #h"7CA110454A1A6E57" #h"01A1D6D039776742" #h"690F5B0D9A26939B") (:ecb-mode-test #h"0131D9619DC1376E" #h"5CD54CA83DEF57DA" #h"7A389D10354BD271") (:ecb-mode-test #h"07A1133E4A0B2686" #h"0248D43806F67172" #h"868EBB51CAB4599A") (:ecb-mode-test #h"3849674C2602319E" #h"51454B582DDF440A" #h"7178876E01F19B2A") (:ecb-mode-test #h"04B915BA43FEB5B6" #h"42FD443059577FA2" #h"AF37FB421F8C4095") (:ecb-mode-test #h"0113B970FD34F2CE" #h"059B5E0851CF143A" #h"86A560F10EC6D85B") (:ecb-mode-test #h"0170F175468FB5E6" #h"0756D8E0774761D2" #h"0CD3DA020021DC09") (:ecb-mode-test #h"43297FAD38E373FE" #h"762514B829BF486A" #h"EA676B2CB7DB2B7A") (:ecb-mode-test #h"07A7137045DA2A16" #h"3BDD119049372802" #h"DFD64A815CAF1A0F") (:ecb-mode-test #h"04689104C2FD3B2F" #h"26955F6835AF609A" #h"5C513C9C4886C088") (:ecb-mode-test #h"37D06BB516CB7546" #h"164D5E404F275232" #h"0A2AEEAE3FF4AB77") (:ecb-mode-test #h"1F08260D1AC2465E" #h"6B056E18759F5CCA" #h"EF1BF03E5DFA575A") (:ecb-mode-test #h"584023641ABA6176" #h"004BD6EF09176062" #h"88BF0DB6D70DEE56") (:ecb-mode-test #h"025816164629B007" #h"480D39006EE762F2" #h"A1F9915541020B56") (:ecb-mode-test #h"49793EBC79B3258F" #h"437540C8698F3CFA" #h"6FBF1CAFCFFD0556") (:ecb-mode-test #h"4FB05E1515AB73A7" #h"072D43A077075292" #h"2F22E49BAB7CA1AC") (:ecb-mode-test #h"49E95D6D4CA229BF" #h"02FE55778117F12A" #h"5A6B612CC26CCE4A") (:ecb-mode-test #h"018310DC409B26D6" #h"1D9D5C5018F728C2" #h"5F4C038ED12B2E41") (:ecb-mode-test #h"1C587F1C13924FEF" #h"305532286D6F295A" #h"63FAC0D034D9F793") (:ecb-mode-test #h"0101010101010101" #h"0123456789ABCDEF" #h"617B3A0CE8F07100") (:ecb-mode-test #h"1F1F1F1F0E0E0E0E" #h"0123456789ABCDEF" #h"DB958605F8C8C606") (:ecb-mode-test #h"E0FEE0FEF1FEF1FE" #h"0123456789ABCDEF" #h"EDBFD1C66C29CCC7") (:ecb-mode-test #h"0000000000000000" #h"FFFFFFFFFFFFFFFF" #h"355550B2150E2451") (:ecb-mode-test #h"FFFFFFFFFFFFFFFF" #h"0000000000000000" #h"CAAAAF4DEAF1DBAE") (:ecb-mode-test #h"0123456789ABCDEF" #h"0000000000000000" #h"D5D44FF720683D0D") (:ecb-mode-test #h"FEDCBA9876543210" #h"FFFFFFFFFFFFFFFF" #h"2A2BB008DF97C2F2") ;;; tests from NESSIE (http://www.cryptonessie.org/) (:ecb-mode-test #h"8000000000000000" #h"0000000000000000" #h"95A8D72813DAA94D") (:ecb-mode-test #h"4000000000000000" #h"0000000000000000" #h"0EEC1487DD8C26D5") (:ecb-mode-test #h"2000000000000000" #h"0000000000000000" #h"7AD16FFB79C45926") (:ecb-mode-test #h"1000000000000000" #h"0000000000000000" #h"D3746294CA6A6CF3") (:ecb-mode-test #h"0800000000000000" #h"0000000000000000" #h"809F5F873C1FD761") (:ecb-mode-test #h"0400000000000000" #h"0000000000000000" #h"C02FAFFEC989D1FC") (:ecb-mode-test #h"0200000000000000" #h"0000000000000000" #h"4615AA1D33E72F10") (:ecb-mode-test #h"0100000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"0080000000000000" #h"0000000000000000" #h"2055123350C00858") (:ecb-mode-test #h"0040000000000000" #h"0000000000000000" #h"DF3B99D6577397C8") (:ecb-mode-test #h"0020000000000000" #h"0000000000000000" #h"31FE17369B5288C9") (:ecb-mode-test #h"0010000000000000" #h"0000000000000000" #h"DFDD3CC64DAE1642") (:ecb-mode-test #h"0008000000000000" #h"0000000000000000" #h"178C83CE2B399D94") (:ecb-mode-test #h"0004000000000000" #h"0000000000000000" #h"50F636324A9B7F80") (:ecb-mode-test #h"0002000000000000" #h"0000000000000000" #h"A8468EE3BC18F06D") (:ecb-mode-test #h"0001000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"0000800000000000" #h"0000000000000000" #h"A2DC9E92FD3CDE92") (:ecb-mode-test #h"0000400000000000" #h"0000000000000000" #h"CAC09F797D031287") (:ecb-mode-test #h"0000200000000000" #h"0000000000000000" #h"90BA680B22AEB525") (:ecb-mode-test #h"0000100000000000" #h"0000000000000000" #h"CE7A24F350E280B6") (:ecb-mode-test #h"0000080000000000" #h"0000000000000000" #h"882BFF0AA01A0B87") (:ecb-mode-test #h"0000040000000000" #h"0000000000000000" #h"25610288924511C2") (:ecb-mode-test #h"0000020000000000" #h"0000000000000000" #h"C71516C29C75D170") (:ecb-mode-test #h"0000010000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"0000008000000000" #h"0000000000000000" #h"5199C29A52C9F059") (:ecb-mode-test #h"0000004000000000" #h"0000000000000000" #h"C22F0A294A71F29F") (:ecb-mode-test #h"0000002000000000" #h"0000000000000000" #h"EE371483714C02EA") (:ecb-mode-test #h"0000001000000000" #h"0000000000000000" #h"A81FBD448F9E522F") (:ecb-mode-test #h"0000000800000000" #h"0000000000000000" #h"4F644C92E192DFED") (:ecb-mode-test #h"0000000400000000" #h"0000000000000000" #h"1AFA9A66A6DF92AE") (:ecb-mode-test #h"0000000200000000" #h"0000000000000000" #h"B3C1CC715CB879D8") (:ecb-mode-test #h"0000000100000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"0000000080000000" #h"0000000000000000" #h"19D032E64AB0BD8B") (:ecb-mode-test #h"0000000040000000" #h"0000000000000000" #h"3CFAA7A7DC8720DC") (:ecb-mode-test #h"0000000020000000" #h"0000000000000000" #h"B7265F7F447AC6F3") (:ecb-mode-test #h"0000000010000000" #h"0000000000000000" #h"9DB73B3C0D163F54") (:ecb-mode-test #h"0000000008000000" #h"0000000000000000" #h"8181B65BABF4A975") (:ecb-mode-test #h"0000000004000000" #h"0000000000000000" #h"93C9B64042EAA240") (:ecb-mode-test #h"0000000002000000" #h"0000000000000000" #h"5570530829705592") (:ecb-mode-test #h"0000000001000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"0000000000800000" #h"0000000000000000" #h"8638809E878787A0") (:ecb-mode-test #h"0000000000400000" #h"0000000000000000" #h"41B9A79AF79AC208") (:ecb-mode-test #h"0000000000200000" #h"0000000000000000" #h"7A9BE42F2009A892") (:ecb-mode-test #h"0000000000100000" #h"0000000000000000" #h"29038D56BA6D2745") (:ecb-mode-test #h"0000000000080000" #h"0000000000000000" #h"5495C6ABF1E5DF51") (:ecb-mode-test #h"0000000000040000" #h"0000000000000000" #h"AE13DBD561488933") (:ecb-mode-test #h"0000000000020000" #h"0000000000000000" #h"024D1FFA8904E389") (:ecb-mode-test #h"0000000000010000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"0000000000008000" #h"0000000000000000" #h"D1399712F99BF02E") (:ecb-mode-test #h"0000000000004000" #h"0000000000000000" #h"14C1D7C1CFFEC79E") (:ecb-mode-test #h"0000000000002000" #h"0000000000000000" #h"1DE5279DAE3BED6F") (:ecb-mode-test #h"0000000000001000" #h"0000000000000000" #h"E941A33F85501303") (:ecb-mode-test #h"0000000000000800" #h"0000000000000000" #h"DA99DBBC9A03F379") (:ecb-mode-test #h"0000000000000400" #h"0000000000000000" #h"B7FC92F91D8E92E9") (:ecb-mode-test #h"0000000000000200" #h"0000000000000000" #h"AE8E5CAA3CA04E85") (:ecb-mode-test #h"0000000000000100" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"0000000000000080" #h"0000000000000000" #h"9CC62DF43B6EED74") (:ecb-mode-test #h"0000000000000040" #h"0000000000000000" #h"D863DBB5C59A91A0") (:ecb-mode-test #h"0000000000000020" #h"0000000000000000" #h"A1AB2190545B91D7") (:ecb-mode-test #h"0000000000000010" #h"0000000000000000" #h"0875041E64C570F7") (:ecb-mode-test #h"0000000000000008" #h"0000000000000000" #h"5A594528BEBEF1CC") (:ecb-mode-test #h"0000000000000004" #h"0000000000000000" #h"FCDB3291DE21F0C0") (:ecb-mode-test #h"0000000000000002" #h"0000000000000000" #h"869EFD7F9F265A09") (:ecb-mode-test #h"0000000000000001" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"0000000000000000" #h"8000000000000000" #h"95F8A5E5DD31D900") (:ecb-mode-test #h"0000000000000000" #h"4000000000000000" #h"DD7F121CA5015619") (:ecb-mode-test #h"0000000000000000" #h"2000000000000000" #h"2E8653104F3834EA") (:ecb-mode-test #h"0000000000000000" #h"1000000000000000" #h"4BD388FF6CD81D4F") (:ecb-mode-test #h"0000000000000000" #h"0800000000000000" #h"20B9E767B2FB1456") (:ecb-mode-test #h"0000000000000000" #h"0400000000000000" #h"55579380D77138EF") (:ecb-mode-test #h"0000000000000000" #h"0200000000000000" #h"6CC5DEFAAF04512F") (:ecb-mode-test #h"0000000000000000" #h"0100000000000000" #h"0D9F279BA5D87260") (:ecb-mode-test #h"0000000000000000" #h"0080000000000000" #h"D9031B0271BD5A0A") (:ecb-mode-test #h"0000000000000000" #h"0040000000000000" #h"424250B37C3DD951") (:ecb-mode-test #h"0000000000000000" #h"0020000000000000" #h"B8061B7ECD9A21E5") (:ecb-mode-test #h"0000000000000000" #h"0010000000000000" #h"F15D0F286B65BD28") (:ecb-mode-test #h"0000000000000000" #h"0008000000000000" #h"ADD0CC8D6E5DEBA1") (:ecb-mode-test #h"0000000000000000" #h"0004000000000000" #h"E6D5F82752AD63D1") (:ecb-mode-test #h"0000000000000000" #h"0002000000000000" #h"ECBFE3BD3F591A5E") (:ecb-mode-test #h"0000000000000000" #h"0001000000000000" #h"F356834379D165CD") (:ecb-mode-test #h"0000000000000000" #h"0000800000000000" #h"2B9F982F20037FA9") (:ecb-mode-test #h"0000000000000000" #h"0000400000000000" #h"889DE068A16F0BE6") (:ecb-mode-test #h"0000000000000000" #h"0000200000000000" #h"E19E275D846A1298") (:ecb-mode-test #h"0000000000000000" #h"0000100000000000" #h"329A8ED523D71AEC") (:ecb-mode-test #h"0000000000000000" #h"0000080000000000" #h"E7FCE22557D23C97") (:ecb-mode-test #h"0000000000000000" #h"0000040000000000" #h"12A9F5817FF2D65D") (:ecb-mode-test #h"0000000000000000" #h"0000020000000000" #h"A484C3AD38DC9C19") (:ecb-mode-test #h"0000000000000000" #h"0000010000000000" #h"FBE00A8A1EF8AD72") (:ecb-mode-test #h"0000000000000000" #h"0000008000000000" #h"750D079407521363") (:ecb-mode-test #h"0000000000000000" #h"0000004000000000" #h"64FEED9C724C2FAF") (:ecb-mode-test #h"0000000000000000" #h"0000002000000000" #h"F02B263B328E2B60") (:ecb-mode-test #h"0000000000000000" #h"0000001000000000" #h"9D64555A9A10B852") (:ecb-mode-test #h"0000000000000000" #h"0000000800000000" #h"D106FF0BED5255D7") (:ecb-mode-test #h"0000000000000000" #h"0000000400000000" #h"E1652C6B138C64A5") (:ecb-mode-test #h"0000000000000000" #h"0000000200000000" #h"E428581186EC8F46") (:ecb-mode-test #h"0000000000000000" #h"0000000100000000" #h"AEB5F5EDE22D1A36") (:ecb-mode-test #h"0000000000000000" #h"0000000080000000" #h"E943D7568AEC0C5C") (:ecb-mode-test #h"0000000000000000" #h"0000000040000000" #h"DF98C8276F54B04B") (:ecb-mode-test #h"0000000000000000" #h"0000000020000000" #h"B160E4680F6C696F") (:ecb-mode-test #h"0000000000000000" #h"0000000010000000" #h"FA0752B07D9C4AB8") (:ecb-mode-test #h"0000000000000000" #h"0000000008000000" #h"CA3A2B036DBC8502") (:ecb-mode-test #h"0000000000000000" #h"0000000004000000" #h"5E0905517BB59BCF") (:ecb-mode-test #h"0000000000000000" #h"0000000002000000" #h"814EEB3B91D90726") (:ecb-mode-test #h"0000000000000000" #h"0000000001000000" #h"4D49DB1532919C9F") (:ecb-mode-test #h"0000000000000000" #h"0000000000800000" #h"25EB5FC3F8CF0621") (:ecb-mode-test #h"0000000000000000" #h"0000000000400000" #h"AB6A20C0620D1C6F") (:ecb-mode-test #h"0000000000000000" #h"0000000000200000" #h"79E90DBC98F92CCA") (:ecb-mode-test #h"0000000000000000" #h"0000000000100000" #h"866ECEDD8072BB0E") (:ecb-mode-test #h"0000000000000000" #h"0000000000080000" #h"8B54536F2F3E64A8") (:ecb-mode-test #h"0000000000000000" #h"0000000000040000" #h"EA51D3975595B86B") (:ecb-mode-test #h"0000000000000000" #h"0000000000020000" #h"CAFFC6AC4542DE31") (:ecb-mode-test #h"0000000000000000" #h"0000000000010000" #h"8DD45A2DDF90796C") (:ecb-mode-test #h"0000000000000000" #h"0000000000008000" #h"1029D55E880EC2D0") (:ecb-mode-test #h"0000000000000000" #h"0000000000004000" #h"5D86CB23639DBEA9") (:ecb-mode-test #h"0000000000000000" #h"0000000000002000" #h"1D1CA853AE7C0C5F") (:ecb-mode-test #h"0000000000000000" #h"0000000000001000" #h"CE332329248F3228") (:ecb-mode-test #h"0000000000000000" #h"0000000000000800" #h"8405D1ABE24FB942") (:ecb-mode-test #h"0000000000000000" #h"0000000000000400" #h"E643D78090CA4207") (:ecb-mode-test #h"0000000000000000" #h"0000000000000200" #h"48221B9937748A23") (:ecb-mode-test #h"0000000000000000" #h"0000000000000100" #h"DD7C0BBD61FAFD54") (:ecb-mode-test #h"0000000000000000" #h"0000000000000080" #h"2FBC291A570DB5C4") (:ecb-mode-test #h"0000000000000000" #h"0000000000000040" #h"E07C30D7E4E26E12") (:ecb-mode-test #h"0000000000000000" #h"0000000000000020" #h"0953E2258E8E90A1") (:ecb-mode-test #h"0000000000000000" #h"0000000000000010" #h"5B711BC4CEEBF2EE") (:ecb-mode-test #h"0000000000000000" #h"0000000000000008" #h"CC083F1E6D9E85F6") (:ecb-mode-test #h"0000000000000000" #h"0000000000000004" #h"D2FD8867D50D2DFE") (:ecb-mode-test #h"0000000000000000" #h"0000000000000002" #h"06E7EA22CE92708F") (:ecb-mode-test #h"0000000000000000" #h"0000000000000001" #h"166B40B44ABA4BD6") (:ecb-mode-test #h"0000000000000000" #h"0000000000000000" #h"8CA64DE9C1B123A7") (:ecb-mode-test #h"0101010101010101" #h"0101010101010101" #h"994D4DC157B96C52") (:ecb-mode-test #h"0202020202020202" #h"0202020202020202" #h"E127C2B61D98E6E2") (:ecb-mode-test #h"0303030303030303" #h"0303030303030303" #h"984C91D78A269CE3") (:ecb-mode-test #h"0404040404040404" #h"0404040404040404" #h"1F4570BB77550683") (:ecb-mode-test #h"0505050505050505" #h"0505050505050505" #h"3990ABF98D672B16") (:ecb-mode-test #h"0606060606060606" #h"0606060606060606" #h"3F5150BBA081D585") (:ecb-mode-test #h"0707070707070707" #h"0707070707070707" #h"C65242248C9CF6F2") (:ecb-mode-test #h"0808080808080808" #h"0808080808080808" #h"10772D40FAD24257") (:ecb-mode-test #h"0909090909090909" #h"0909090909090909" #h"F0139440647A6E7B") (:ecb-mode-test #h"0A0A0A0A0A0A0A0A" #h"0A0A0A0A0A0A0A0A" #h"0A288603044D740C") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B" #h"6359916942F7438F") (:ecb-mode-test #h"0C0C0C0C0C0C0C0C" #h"0C0C0C0C0C0C0C0C" #h"934316AE443CF08B") (:ecb-mode-test #h"0D0D0D0D0D0D0D0D" #h"0D0D0D0D0D0D0D0D" #h"E3F56D7F1130A2B7") (:ecb-mode-test #h"0E0E0E0E0E0E0E0E" #h"0E0E0E0E0E0E0E0E" #h"A2E4705087C6B6B4") (:ecb-mode-test #h"0F0F0F0F0F0F0F0F" #h"0F0F0F0F0F0F0F0F" #h"D5D76E09A447E8C3") (:ecb-mode-test #h"1010101010101010" #h"1010101010101010" #h"DD7515F2BFC17F85") (:ecb-mode-test #h"1111111111111111" #h"1111111111111111" #h"F40379AB9E0EC533") (:ecb-mode-test #h"1212121212121212" #h"1212121212121212" #h"96CD27784D1563E5") (:ecb-mode-test #h"1313131313131313" #h"1313131313131313" #h"2911CF5E94D33FE1") (:ecb-mode-test #h"1414141414141414" #h"1414141414141414" #h"377B7F7CA3E5BBB3") (:ecb-mode-test #h"1515151515151515" #h"1515151515151515" #h"701AA63832905A92") (:ecb-mode-test #h"1616161616161616" #h"1616161616161616" #h"2006E716C4252D6D") (:ecb-mode-test #h"1717171717171717" #h"1717171717171717" #h"452C1197422469F8") (:ecb-mode-test #h"1818181818181818" #h"1818181818181818" #h"C33FD1EB49CB64DA") (:ecb-mode-test #h"1919191919191919" #h"1919191919191919" #h"7572278F364EB50D") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A" #h"69E51488403EF4C3") (:ecb-mode-test #h"1B1B1B1B1B1B1B1B" #h"1B1B1B1B1B1B1B1B" #h"FF847E0ADF192825") (:ecb-mode-test #h"1C1C1C1C1C1C1C1C" #h"1C1C1C1C1C1C1C1C" #h"521B7FB3B41BB791") (:ecb-mode-test #h"1D1D1D1D1D1D1D1D" #h"1D1D1D1D1D1D1D1D" #h"26059A6A0F3F6B35") (:ecb-mode-test #h"1E1E1E1E1E1E1E1E" #h"1E1E1E1E1E1E1E1E" #h"F24A8D2231C77538") (:ecb-mode-test #h"1F1F1F1F1F1F1F1F" #h"1F1F1F1F1F1F1F1F" #h"4FD96EC0D3304EF6") (:ecb-mode-test #h"2020202020202020" #h"2020202020202020" #h"18A9D580A900B699") (:ecb-mode-test #h"2121212121212121" #h"2121212121212121" #h"88586E1D755B9B5A") (:ecb-mode-test #h"2222222222222222" #h"2222222222222222" #h"0F8ADFFB11DC2784") (:ecb-mode-test #h"2323232323232323" #h"2323232323232323" #h"2F30446C8312404A") (:ecb-mode-test #h"2424242424242424" #h"2424242424242424" #h"0BA03D9E6C196511") (:ecb-mode-test #h"2525252525252525" #h"2525252525252525" #h"3E55E997611E4B7D") (:ecb-mode-test #h"2626262626262626" #h"2626262626262626" #h"B2522FB5F158F0DF") (:ecb-mode-test #h"2727272727272727" #h"2727272727272727" #h"2109425935406AB8") (:ecb-mode-test #h"2828282828282828" #h"2828282828282828" #h"11A16028F310FF16") (:ecb-mode-test #h"2929292929292929" #h"2929292929292929" #h"73F0C45F379FE67F") (:ecb-mode-test #h"2A2A2A2A2A2A2A2A" #h"2A2A2A2A2A2A2A2A" #h"DCAD4338F7523816") (:ecb-mode-test #h"2B2B2B2B2B2B2B2B" #h"2B2B2B2B2B2B2B2B" #h"B81634C1CEAB298C") (:ecb-mode-test #h"2C2C2C2C2C2C2C2C" #h"2C2C2C2C2C2C2C2C" #h"DD2CCB29B6C4C349") (:ecb-mode-test #h"2D2D2D2D2D2D2D2D" #h"2D2D2D2D2D2D2D2D" #h"7D07A77A2ABD50A7") (:ecb-mode-test #h"2E2E2E2E2E2E2E2E" #h"2E2E2E2E2E2E2E2E" #h"30C1B0C1FD91D371") (:ecb-mode-test #h"2F2F2F2F2F2F2F2F" #h"2F2F2F2F2F2F2F2F" #h"C4427B31AC61973B") (:ecb-mode-test #h"3030303030303030" #h"3030303030303030" #h"F47BB46273B15EB5") (:ecb-mode-test #h"3131313131313131" #h"3131313131313131" #h"655EA628CF62585F") (:ecb-mode-test #h"3232323232323232" #h"3232323232323232" #h"AC978C247863388F") (:ecb-mode-test #h"3333333333333333" #h"3333333333333333" #h"0432ED386F2DE328") (:ecb-mode-test #h"3434343434343434" #h"3434343434343434" #h"D254014CB986B3C2") (:ecb-mode-test #h"3535353535353535" #h"3535353535353535" #h"B256E34BEDB49801") (:ecb-mode-test #h"3636363636363636" #h"3636363636363636" #h"37F8759EB77E7BFC") (:ecb-mode-test #h"3737373737373737" #h"3737373737373737" #h"5013CA4F62C9CEA0") (:ecb-mode-test #h"3838383838383838" #h"3838383838383838" #h"8940F7B3EACA5939") (:ecb-mode-test #h"3939393939393939" #h"3939393939393939" #h"E22B19A55086774B") (:ecb-mode-test #h"3A3A3A3A3A3A3A3A" #h"3A3A3A3A3A3A3A3A" #h"B04A2AAC925ABB0B") (:ecb-mode-test #h"3B3B3B3B3B3B3B3B" #h"3B3B3B3B3B3B3B3B" #h"8D250D58361597FC") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C" #h"51F0114FB6A6CD37") (:ecb-mode-test #h"3D3D3D3D3D3D3D3D" #h"3D3D3D3D3D3D3D3D" #h"9D0BB4DB830ECB73") (:ecb-mode-test #h"3E3E3E3E3E3E3E3E" #h"3E3E3E3E3E3E3E3E" #h"E96089D6368F3E1A") (:ecb-mode-test #h"3F3F3F3F3F3F3F3F" #h"3F3F3F3F3F3F3F3F" #h"5C4CA877A4E1E92D") (:ecb-mode-test #h"4040404040404040" #h"4040404040404040" #h"6D55DDBC8DEA95FF") (:ecb-mode-test #h"4141414141414141" #h"4141414141414141" #h"19DF84AC95551003") (:ecb-mode-test #h"4242424242424242" #h"4242424242424242" #h"724E7332696D08A7") (:ecb-mode-test #h"4343434343434343" #h"4343434343434343" #h"B91810B8CDC58FE2") (:ecb-mode-test #h"4444444444444444" #h"4444444444444444" #h"06E23526EDCCD0C4") (:ecb-mode-test #h"4545454545454545" #h"4545454545454545" #h"EF52491D5468D441") (:ecb-mode-test #h"4646464646464646" #h"4646464646464646" #h"48019C59E39B90C5") (:ecb-mode-test #h"4747474747474747" #h"4747474747474747" #h"0544083FB902D8C0") (:ecb-mode-test #h"4848484848484848" #h"4848484848484848" #h"63B15CADA668CE12") (:ecb-mode-test #h"4949494949494949" #h"4949494949494949" #h"EACC0C1264171071") (:ecb-mode-test #h"4A4A4A4A4A4A4A4A" #h"4A4A4A4A4A4A4A4A" #h"9D2B8C0AC605F274") (:ecb-mode-test #h"4B4B4B4B4B4B4B4B" #h"4B4B4B4B4B4B4B4B" #h"C90F2F4C98A8FB2A") (:ecb-mode-test #h"4C4C4C4C4C4C4C4C" #h"4C4C4C4C4C4C4C4C" #h"03481B4828FD1D04") (:ecb-mode-test #h"4D4D4D4D4D4D4D4D" #h"4D4D4D4D4D4D4D4D" #h"C78FC45A1DCEA2E2") (:ecb-mode-test #h"4E4E4E4E4E4E4E4E" #h"4E4E4E4E4E4E4E4E" #h"DB96D88C3460D801") (:ecb-mode-test #h"4F4F4F4F4F4F4F4F" #h"4F4F4F4F4F4F4F4F" #h"6C69E720F5105518") (:ecb-mode-test #h"5050505050505050" #h"5050505050505050" #h"0D262E418BC893F3") (:ecb-mode-test #h"5151515151515151" #h"5151515151515151" #h"6AD84FD7848A0A5C") (:ecb-mode-test #h"5252525252525252" #h"5252525252525252" #h"C365CB35B34B6114") (:ecb-mode-test #h"5353535353535353" #h"5353535353535353" #h"1155392E877F42A9") (:ecb-mode-test #h"5454545454545454" #h"5454545454545454" #h"531BE5F9405DA715") (:ecb-mode-test #h"5555555555555555" #h"5555555555555555" #h"3BCDD41E6165A5E8") (:ecb-mode-test #h"5656565656565656" #h"5656565656565656" #h"2B1FF5610A19270C") (:ecb-mode-test #h"5757575757575757" #h"5757575757575757" #h"D90772CF3F047CFD") (:ecb-mode-test #h"5858585858585858" #h"5858585858585858" #h"1BEA27FFB72457B7") (:ecb-mode-test #h"5959595959595959" #h"5959595959595959" #h"85C3E0C429F34C27") (:ecb-mode-test #h"5A5A5A5A5A5A5A5A" #h"5A5A5A5A5A5A5A5A" #h"F9038021E37C7618") (:ecb-mode-test #h"5B5B5B5B5B5B5B5B" #h"5B5B5B5B5B5B5B5B" #h"35BC6FF838DBA32F") (:ecb-mode-test #h"5C5C5C5C5C5C5C5C" #h"5C5C5C5C5C5C5C5C" #h"4927ACC8CE45ECE7") (:ecb-mode-test #h"5D5D5D5D5D5D5D5D" #h"5D5D5D5D5D5D5D5D" #h"E812EE6E3572985C") (:ecb-mode-test #h"5E5E5E5E5E5E5E5E" #h"5E5E5E5E5E5E5E5E" #h"9BB93A89627BF65F") (:ecb-mode-test #h"5F5F5F5F5F5F5F5F" #h"5F5F5F5F5F5F5F5F" #h"EF12476884CB74CA") (:ecb-mode-test #h"6060606060606060" #h"6060606060606060" #h"1BF17E00C09E7CBF") (:ecb-mode-test #h"6161616161616161" #h"6161616161616161" #h"29932350C098DB5D") (:ecb-mode-test #h"6262626262626262" #h"6262626262626262" #h"B476E6499842AC54") (:ecb-mode-test #h"6363636363636363" #h"6363636363636363" #h"5C662C29C1E96056") (:ecb-mode-test #h"6464646464646464" #h"6464646464646464" #h"3AF1703D76442789") (:ecb-mode-test #h"6565656565656565" #h"6565656565656565" #h"86405D9B425A8C8C") (:ecb-mode-test #h"6666666666666666" #h"6666666666666666" #h"EBBF4810619C2C55") (:ecb-mode-test #h"6767676767676767" #h"6767676767676767" #h"F8D1CD7367B21B5D") (:ecb-mode-test #h"6868686868686868" #h"6868686868686868" #h"9EE703142BF8D7E2") (:ecb-mode-test #h"6969696969696969" #h"6969696969696969" #h"5FDFFFC3AAAB0CB3") (:ecb-mode-test #h"6A6A6A6A6A6A6A6A" #h"6A6A6A6A6A6A6A6A" #h"26C940AB13574231") (:ecb-mode-test #h"6B6B6B6B6B6B6B6B" #h"6B6B6B6B6B6B6B6B" #h"1E2DC77E36A84693") (:ecb-mode-test #h"6C6C6C6C6C6C6C6C" #h"6C6C6C6C6C6C6C6C" #h"0F4FF4D9BC7E2244") (:ecb-mode-test #h"6D6D6D6D6D6D6D6D" #h"6D6D6D6D6D6D6D6D" #h"A4C9A0D04D3280CD") (:ecb-mode-test #h"6E6E6E6E6E6E6E6E" #h"6E6E6E6E6E6E6E6E" #h"9FAF2C96FE84919D") (:ecb-mode-test #h"6F6F6F6F6F6F6F6F" #h"6F6F6F6F6F6F6F6F" #h"115DBC965E6096C8") (:ecb-mode-test #h"7070707070707070" #h"7070707070707070" #h"AF531E9520994017") (:ecb-mode-test #h"7171717171717171" #h"7171717171717171" #h"B971ADE70E5C89EE") (:ecb-mode-test #h"7272727272727272" #h"7272727272727272" #h"415D81C86AF9C376") (:ecb-mode-test #h"7373737373737373" #h"7373737373737373" #h"8DFB864FDB3C6811") (:ecb-mode-test #h"7474747474747474" #h"7474747474747474" #h"10B1C170E3398F91") (:ecb-mode-test #h"7575757575757575" #h"7575757575757575" #h"CFEF7A1C0218DB1E") (:ecb-mode-test #h"7676767676767676" #h"7676767676767676" #h"DBAC30A2A40B1B9C") (:ecb-mode-test #h"7777777777777777" #h"7777777777777777" #h"89D3BF37052162E9") (:ecb-mode-test #h"7878787878787878" #h"7878787878787878" #h"80D9230BDAEB67DC") (:ecb-mode-test #h"7979797979797979" #h"7979797979797979" #h"3440911019AD68D7") (:ecb-mode-test #h"7A7A7A7A7A7A7A7A" #h"7A7A7A7A7A7A7A7A" #h"9626FE57596E199E") (:ecb-mode-test #h"7B7B7B7B7B7B7B7B" #h"7B7B7B7B7B7B7B7B" #h"DEA0B796624BB5BA") (:ecb-mode-test #h"7C7C7C7C7C7C7C7C" #h"7C7C7C7C7C7C7C7C" #h"E9E40542BDDB3E9D") (:ecb-mode-test #h"7D7D7D7D7D7D7D7D" #h"7D7D7D7D7D7D7D7D" #h"8AD99914B354B911") (:ecb-mode-test #h"7E7E7E7E7E7E7E7E" #h"7E7E7E7E7E7E7E7E" #h"6F85B98DD12CB13B") (:ecb-mode-test #h"7F7F7F7F7F7F7F7F" #h"7F7F7F7F7F7F7F7F" #h"10130DA3C3A23924") (:ecb-mode-test #h"8080808080808080" #h"8080808080808080" #h"EFECF25C3C5DC6DB") (:ecb-mode-test #h"8181818181818181" #h"8181818181818181" #h"907A46722ED34EC4") (:ecb-mode-test #h"8282828282828282" #h"8282828282828282" #h"752666EB4CAB46EE") (:ecb-mode-test #h"8383838383838383" #h"8383838383838383" #h"161BFABD4224C162") (:ecb-mode-test #h"8484848484848484" #h"8484848484848484" #h"215F48699DB44A45") (:ecb-mode-test #h"8585858585858585" #h"8585858585858585" #h"69D901A8A691E661") (:ecb-mode-test #h"8686868686868686" #h"8686868686868686" #h"CBBF6EEFE6529728") (:ecb-mode-test #h"8787878787878787" #h"8787878787878787" #h"7F26DCF425149823") (:ecb-mode-test #h"8888888888888888" #h"8888888888888888" #h"762C40C8FADE9D16") (:ecb-mode-test #h"8989898989898989" #h"8989898989898989" #h"2453CF5D5BF4E463") (:ecb-mode-test #h"8A8A8A8A8A8A8A8A" #h"8A8A8A8A8A8A8A8A" #h"301085E3FDE724E1") (:ecb-mode-test #h"8B8B8B8B8B8B8B8B" #h"8B8B8B8B8B8B8B8B" #h"EF4E3E8F1CC6706E") (:ecb-mode-test #h"8C8C8C8C8C8C8C8C" #h"8C8C8C8C8C8C8C8C" #h"720479B024C397EE") (:ecb-mode-test #h"8D8D8D8D8D8D8D8D" #h"8D8D8D8D8D8D8D8D" #h"BEA27E3795063C89") (:ecb-mode-test #h"8E8E8E8E8E8E8E8E" #h"8E8E8E8E8E8E8E8E" #h"468E5218F1A37611") (:ecb-mode-test #h"8F8F8F8F8F8F8F8F" #h"8F8F8F8F8F8F8F8F" #h"50ACE16ADF66BFE8") (:ecb-mode-test #h"9090909090909090" #h"9090909090909090" #h"EEA24369A19F6937") (:ecb-mode-test #h"9191919191919191" #h"9191919191919191" #h"6050D369017B6E62") (:ecb-mode-test #h"9292929292929292" #h"9292929292929292" #h"5B365F2FB2CD7F32") (:ecb-mode-test #h"9393939393939393" #h"9393939393939393" #h"F0B00B264381DDBB") (:ecb-mode-test #h"9494949494949494" #h"9494949494949494" #h"E1D23881C957B96C") (:ecb-mode-test #h"9595959595959595" #h"9595959595959595" #h"D936BF54ECA8BDCE") (:ecb-mode-test #h"9696969696969696" #h"9696969696969696" #h"A020003C5554F34C") (:ecb-mode-test #h"9797979797979797" #h"9797979797979797" #h"6118FCEBD407281D") (:ecb-mode-test #h"9898989898989898" #h"9898989898989898" #h"072E328C984DE4A2") (:ecb-mode-test #h"9999999999999999" #h"9999999999999999" #h"1440B7EF9E63D3AA") (:ecb-mode-test #h"9A9A9A9A9A9A9A9A" #h"9A9A9A9A9A9A9A9A" #h"79BFA264BDA57373") (:ecb-mode-test #h"9B9B9B9B9B9B9B9B" #h"9B9B9B9B9B9B9B9B" #h"C50E8FC289BBD876") (:ecb-mode-test #h"9C9C9C9C9C9C9C9C" #h"9C9C9C9C9C9C9C9C" #h"A399D3D63E169FA9") (:ecb-mode-test #h"9D9D9D9D9D9D9D9D" #h"9D9D9D9D9D9D9D9D" #h"4B8919B667BD53AB") (:ecb-mode-test #h"9E9E9E9E9E9E9E9E" #h"9E9E9E9E9E9E9E9E" #h"D66CDCAF3F6724A2") (:ecb-mode-test #h"9F9F9F9F9F9F9F9F" #h"9F9F9F9F9F9F9F9F" #h"E40E81FF3F618340") (:ecb-mode-test #h"A0A0A0A0A0A0A0A0" #h"A0A0A0A0A0A0A0A0" #h"10EDB8977B348B35") (:ecb-mode-test #h"A1A1A1A1A1A1A1A1" #h"A1A1A1A1A1A1A1A1" #h"6446C5769D8409A0") (:ecb-mode-test #h"A2A2A2A2A2A2A2A2" #h"A2A2A2A2A2A2A2A2" #h"17ED1191CA8D67A3") (:ecb-mode-test #h"A3A3A3A3A3A3A3A3" #h"A3A3A3A3A3A3A3A3" #h"B6D8533731BA1318") (:ecb-mode-test #h"A4A4A4A4A4A4A4A4" #h"A4A4A4A4A4A4A4A4" #h"CA439007C7245CD0") (:ecb-mode-test #h"A5A5A5A5A5A5A5A5" #h"A5A5A5A5A5A5A5A5" #h"06FC7FDE1C8389E7") (:ecb-mode-test #h"A6A6A6A6A6A6A6A6" #h"A6A6A6A6A6A6A6A6" #h"7A3C1F3BD60CB3D8") (:ecb-mode-test #h"A7A7A7A7A7A7A7A7" #h"A7A7A7A7A7A7A7A7" #h"E415D80048DBA848") (:ecb-mode-test #h"A8A8A8A8A8A8A8A8" #h"A8A8A8A8A8A8A8A8" #h"26F88D30C0FB8302") (:ecb-mode-test #h"A9A9A9A9A9A9A9A9" #h"A9A9A9A9A9A9A9A9" #h"D4E00A9EF5E6D8F3") (:ecb-mode-test #h"AAAAAAAAAAAAAAAA" #h"AAAAAAAAAAAAAAAA" #h"C4322BE19E9A5A17") (:ecb-mode-test #h"ABABABABABABABAB" #h"ABABABABABABABAB" #h"ACE41A06BFA258EA") (:ecb-mode-test #h"ACACACACACACACAC" #h"ACACACACACACACAC" #h"EEAAC6D17880BD56") (:ecb-mode-test #h"ADADADADADADADAD" #h"ADADADADADADADAD" #h"3C9A34CA4CB49EEB") (:ecb-mode-test #h"AEAEAEAEAEAEAEAE" #h"AEAEAEAEAEAEAEAE" #h"9527B0287B75F5A3") (:ecb-mode-test #h"AFAFAFAFAFAFAFAF" #h"AFAFAFAFAFAFAFAF" #h"F2D9D1BE74376C0C") (:ecb-mode-test #h"B0B0B0B0B0B0B0B0" #h"B0B0B0B0B0B0B0B0" #h"939618DF0AEFAAE7") (:ecb-mode-test #h"B1B1B1B1B1B1B1B1" #h"B1B1B1B1B1B1B1B1" #h"24692773CB9F27FE") (:ecb-mode-test #h"B2B2B2B2B2B2B2B2" #h"B2B2B2B2B2B2B2B2" #h"38703BA5E2315D1D") (:ecb-mode-test #h"B3B3B3B3B3B3B3B3" #h"B3B3B3B3B3B3B3B3" #h"FCB7E4B7D702E2FB") (:ecb-mode-test #h"B4B4B4B4B4B4B4B4" #h"B4B4B4B4B4B4B4B4" #h"36F0D0B3675704D5") (:ecb-mode-test #h"B5B5B5B5B5B5B5B5" #h"B5B5B5B5B5B5B5B5" #h"62D473F539FA0D8B") (:ecb-mode-test #h"B6B6B6B6B6B6B6B6" #h"B6B6B6B6B6B6B6B6" #h"1533F3ED9BE8EF8E") (:ecb-mode-test #h"B7B7B7B7B7B7B7B7" #h"B7B7B7B7B7B7B7B7" #h"9C4EA352599731ED") (:ecb-mode-test #h"B8B8B8B8B8B8B8B8" #h"B8B8B8B8B8B8B8B8" #h"FABBF7C046FD273F") (:ecb-mode-test #h"B9B9B9B9B9B9B9B9" #h"B9B9B9B9B9B9B9B9" #h"B7FE63A61C646F3A") (:ecb-mode-test #h"BABABABABABABABA" #h"BABABABABABABABA" #h"10ADB6E2AB972BBE") (:ecb-mode-test #h"BBBBBBBBBBBBBBBB" #h"BBBBBBBBBBBBBBBB" #h"F91DCAD912332F3B") (:ecb-mode-test #h"BCBCBCBCBCBCBCBC" #h"BCBCBCBCBCBCBCBC" #h"46E7EF47323A701D") (:ecb-mode-test #h"BDBDBDBDBDBDBDBD" #h"BDBDBDBDBDBDBDBD" #h"8DB18CCD9692F758") (:ecb-mode-test #h"BEBEBEBEBEBEBEBE" #h"BEBEBEBEBEBEBEBE" #h"E6207B536AAAEFFC") (:ecb-mode-test #h"BFBFBFBFBFBFBFBF" #h"BFBFBFBFBFBFBFBF" #h"92AA224372156A00") (:ecb-mode-test #h"C0C0C0C0C0C0C0C0" #h"C0C0C0C0C0C0C0C0" #h"A3B357885B1E16D2") (:ecb-mode-test #h"C1C1C1C1C1C1C1C1" #h"C1C1C1C1C1C1C1C1" #h"169F7629C970C1E5") (:ecb-mode-test #h"C2C2C2C2C2C2C2C2" #h"C2C2C2C2C2C2C2C2" #h"62F44B247CF1348C") (:ecb-mode-test #h"C3C3C3C3C3C3C3C3" #h"C3C3C3C3C3C3C3C3" #h"AE0FEEB0495932C8") (:ecb-mode-test #h"C4C4C4C4C4C4C4C4" #h"C4C4C4C4C4C4C4C4" #h"72DAF2A7C9EA6803") (:ecb-mode-test #h"C5C5C5C5C5C5C5C5" #h"C5C5C5C5C5C5C5C5" #h"4FB5D5536DA544F4") (:ecb-mode-test #h"C6C6C6C6C6C6C6C6" #h"C6C6C6C6C6C6C6C6" #h"1DD4E65AAF7988B4") (:ecb-mode-test #h"C7C7C7C7C7C7C7C7" #h"C7C7C7C7C7C7C7C7" #h"76BF084C1535A6C6") (:ecb-mode-test #h"C8C8C8C8C8C8C8C8" #h"C8C8C8C8C8C8C8C8" #h"AFEC35B09D36315F") (:ecb-mode-test #h"C9C9C9C9C9C9C9C9" #h"C9C9C9C9C9C9C9C9" #h"C8078A6148818403") (:ecb-mode-test #h"CACACACACACACACA" #h"CACACACACACACACA" #h"4DA91CB4124B67FE") (:ecb-mode-test #h"CBCBCBCBCBCBCBCB" #h"CBCBCBCBCBCBCBCB" #h"2DABFEB346794C3D") (:ecb-mode-test #h"CCCCCCCCCCCCCCCC" #h"CCCCCCCCCCCCCCCC" #h"FBCD12C790D21CD7") (:ecb-mode-test #h"CDCDCDCDCDCDCDCD" #h"CDCDCDCDCDCDCDCD" #h"536873DB879CC770") (:ecb-mode-test #h"CECECECECECECECE" #h"CECECECECECECECE" #h"9AA159D7309DA7A0") (:ecb-mode-test #h"CFCFCFCFCFCFCFCF" #h"CFCFCFCFCFCFCFCF" #h"0B844B9D8C4EA14A") (:ecb-mode-test #h"D0D0D0D0D0D0D0D0" #h"D0D0D0D0D0D0D0D0" #h"3BBD84CE539E68C4") (:ecb-mode-test #h"D1D1D1D1D1D1D1D1" #h"D1D1D1D1D1D1D1D1" #h"CF3E4F3E026E2C8E") (:ecb-mode-test #h"D2D2D2D2D2D2D2D2" #h"D2D2D2D2D2D2D2D2" #h"82F85885D542AF58") (:ecb-mode-test #h"D3D3D3D3D3D3D3D3" #h"D3D3D3D3D3D3D3D3" #h"22D334D6493B3CB6") (:ecb-mode-test #h"D4D4D4D4D4D4D4D4" #h"D4D4D4D4D4D4D4D4" #h"47E9CB3E3154D673") (:ecb-mode-test #h"D5D5D5D5D5D5D5D5" #h"D5D5D5D5D5D5D5D5" #h"2352BCC708ADC7E9") (:ecb-mode-test #h"D6D6D6D6D6D6D6D6" #h"D6D6D6D6D6D6D6D6" #h"8C0F3BA0C8601980") (:ecb-mode-test #h"D7D7D7D7D7D7D7D7" #h"D7D7D7D7D7D7D7D7" #h"EE5E9FD70CEF00E9") (:ecb-mode-test #h"D8D8D8D8D8D8D8D8" #h"D8D8D8D8D8D8D8D8" #h"DEF6BDA6CABF9547") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9" #h"4DADD04A0EA70F20") (:ecb-mode-test #h"DADADADADADADADA" #h"DADADADADADADADA" #h"C1AA16689EE1B482") (:ecb-mode-test #h"DBDBDBDBDBDBDBDB" #h"DBDBDBDBDBDBDBDB" #h"F45FC26193E69AEE") (:ecb-mode-test #h"DCDCDCDCDCDCDCDC" #h"DCDCDCDCDCDCDCDC" #h"D0CFBB937CEDBFB5") (:ecb-mode-test #h"DDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDD" #h"F0752004EE23D87B") (:ecb-mode-test #h"DEDEDEDEDEDEDEDE" #h"DEDEDEDEDEDEDEDE" #h"77A791E28AA464A5") (:ecb-mode-test #h"DFDFDFDFDFDFDFDF" #h"DFDFDFDFDFDFDFDF" #h"E7562A7F56FF4966") (:ecb-mode-test #h"E0E0E0E0E0E0E0E0" #h"E0E0E0E0E0E0E0E0" #h"B026913F2CCFB109") (:ecb-mode-test #h"E1E1E1E1E1E1E1E1" #h"E1E1E1E1E1E1E1E1" #h"0DB572DDCE388AC7") (:ecb-mode-test #h"E2E2E2E2E2E2E2E2" #h"E2E2E2E2E2E2E2E2" #h"D9FA6595F0C094CA") (:ecb-mode-test #h"E3E3E3E3E3E3E3E3" #h"E3E3E3E3E3E3E3E3" #h"ADE4804C4BE4486E") (:ecb-mode-test #h"E4E4E4E4E4E4E4E4" #h"E4E4E4E4E4E4E4E4" #h"007B81F520E6D7DA") (:ecb-mode-test #h"E5E5E5E5E5E5E5E5" #h"E5E5E5E5E5E5E5E5" #h"961AEB77BFC10B3C") (:ecb-mode-test #h"E6E6E6E6E6E6E6E6" #h"E6E6E6E6E6E6E6E6" #h"8A8DD870C9B14AF2") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7" #h"3CC02E14B6349B25") (:ecb-mode-test #h"E8E8E8E8E8E8E8E8" #h"E8E8E8E8E8E8E8E8" #h"BAD3EE68BDDB9607") (:ecb-mode-test #h"E9E9E9E9E9E9E9E9" #h"E9E9E9E9E9E9E9E9" #h"DFF918E93BDAD292") (:ecb-mode-test #h"EAEAEAEAEAEAEAEA" #h"EAEAEAEAEAEAEAEA" #h"8FE559C7CD6FA56D") (:ecb-mode-test #h"EBEBEBEBEBEBEBEB" #h"EBEBEBEBEBEBEBEB" #h"C88480835C1A444C") (:ecb-mode-test #h"ECECECECECECECEC" #h"ECECECECECECECEC" #h"D6EE30A16B2CC01E") (:ecb-mode-test #h"EDEDEDEDEDEDEDED" #h"EDEDEDEDEDEDEDED" #h"6932D887B2EA9C1A") (:ecb-mode-test #h"EEEEEEEEEEEEEEEE" #h"EEEEEEEEEEEEEEEE" #h"0BFC865461F13ACC") (:ecb-mode-test #h"EFEFEFEFEFEFEFEF" #h"EFEFEFEFEFEFEFEF" #h"228AEA0D403E807A") (:ecb-mode-test #h"F0F0F0F0F0F0F0F0" #h"F0F0F0F0F0F0F0F0" #h"2A2891F65BB8173C") (:ecb-mode-test #h"F1F1F1F1F1F1F1F1" #h"F1F1F1F1F1F1F1F1" #h"5D1B8FAF7839494B") (:ecb-mode-test #h"F2F2F2F2F2F2F2F2" #h"F2F2F2F2F2F2F2F2" #h"1C0A9280EECF5D48") (:ecb-mode-test #h"F3F3F3F3F3F3F3F3" #h"F3F3F3F3F3F3F3F3" #h"6CBCE951BBC30F74") (:ecb-mode-test #h"F4F4F4F4F4F4F4F4" #h"F4F4F4F4F4F4F4F4" #h"9CA66E96BD08BC70") (:ecb-mode-test #h"F5F5F5F5F5F5F5F5" #h"F5F5F5F5F5F5F5F5" #h"F5D779FCFBB28BF3") (:ecb-mode-test #h"F6F6F6F6F6F6F6F6" #h"F6F6F6F6F6F6F6F6" #h"0FEC6BBF9B859184") (:ecb-mode-test #h"F7F7F7F7F7F7F7F7" #h"F7F7F7F7F7F7F7F7" #h"EF88D2BF052DBDA8") (:ecb-mode-test #h"F8F8F8F8F8F8F8F8" #h"F8F8F8F8F8F8F8F8" #h"39ADBDDB7363090D") (:ecb-mode-test #h"F9F9F9F9F9F9F9F9" #h"F9F9F9F9F9F9F9F9" #h"C0AEAF445F7E2A7A") (:ecb-mode-test #h"FAFAFAFAFAFAFAFA" #h"FAFAFAFAFAFAFAFA" #h"C66F54067298D4E9") (:ecb-mode-test #h"FBFBFBFBFBFBFBFB" #h"FBFBFBFBFBFBFBFB" #h"E0BA8F4488AAF97C") (:ecb-mode-test #h"FCFCFCFCFCFCFCFC" #h"FCFCFCFCFCFCFCFC" #h"67B36E2875D9631C") (:ecb-mode-test #h"FDFDFDFDFDFDFDFD" #h"FDFDFDFDFDFDFDFD" #h"1ED83D49E267191D") (:ecb-mode-test #h"FEFEFEFEFEFEFEFE" #h"FEFEFEFEFEFEFEFE" #h"66B2B23EA84693AD") (:ecb-mode-test #h"FFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFF" #h"7359B2163E4EDC58") (:ecb-mode-test #h"0001020304050607" #h"0011223344556677" #h"3EF0A891CF8ED990") (:ecb-mode-test #h"2BD6459F82C5B300" #h"EA024714AD5C4D84" #h"126EFE8ED312190A") (:keystream-test #h"d917816e9b678b4b" #h"87426a14f31b1528" #h"839e32f5c9d4f3fe5861553cfc0a6f55a301fa7251fa919a12e16416a13adfdb66284dd7828d8ec4243ce8d9ddc68fbc4689af5f3f9a6fca8634f2a6e53d09aedb549c4cc9ee29470b11070967091bc279e5c5e82b89dc9a8b9b18e2e6668e466f70793c50f21fc7ace71782f5109f561dd76dccfe9a258af46577f6a69b18050e9ac64126ba4d4bf915a100630d993762377e4b6d117a048b20b9c7717aed60086642136daed08b42d727429949cfe8273ff80050cc789b5940ea9f6d2185636cdef607ada0e68375df7cdb1dd728a8ced35952619cf2b826b05f59d8bc219fdf579fc624f507749e45cfc70cccbe9f8a0cfd429a03c18b3116e7b585e2f6f3645fa5ffcac9f3a099d771650168779fe268c61980513f3e1a49da0e453f2fa9f056b94ccab86b8cf46bfa57ac4a54d12258638296bc423c1b416c35f06ecd9f2e6356acf78edb6f5939235010ca74f0826697b7700b6ceb76e3da3697d7c4e4151302be4eae10bb531cba37bac463a0666308385a2dffa3471429740e9081a82ca28edc03dc294e6ee671de9d559f7e25ce7a37d711d95f514f64113296f65e51df76ae3ed0a66614c0614cfdb1d0652f7d843e0239d21dc2b78a81ff6c0a356774b93bacfd30a7653188eae8507488c588897898c79f96f08e8c5530ff007b9c642f71177ee56aabcd72d996a51826f4476f3ef9ab22c81567f77a5168ca9a2ee4816198ce7a9e26a41e94eacd6ef09c954f179dc077c656f3040226cbbcf963317338644252684db7dd5819236db0c2c2bbf1c5ccfcbbe5d46487acaedb49c7b778f0091d2cd594282be938ce8d5f8563a42d783903b20bda387b8d4ffa59e7336af087c0a46b1e2e8e5b1dab10b3226c8cc098cad575451b4fc64b97d4a85b69a097b686038c4a95f11be26dcb9afea48c83c17a205c0631d5fdbda51e8b6d1e691d9655767ce84331e6d6c7aa6169608a95fde202ed550583a5b188b6a862136fc3c94ccfd1c38a6b0d7ef3fab06daab112990bd36a0fa53204671f889ae526bca427a7aadb743248ed5f23bdfb088d5890cac2c5ba6adee587e440ea47ff155bc0a22c563de6ce95d48de19d4c32eaf9c4e41da4c23eb630c0a89a7dc2710d6ebe4e58ae10ebfab7df390963ccae97c9bcb3665b1e13b689792691348476fc57ef098fab37df06917fb90787415d184eac14a9d5185a8fec7d6d225eae514c7eebf9004eeb792a2f51003fef14e8e88abc30d1a59f437213c04875a7d59f2330baa6a8de030f20ce5ce5ec348c9d3be555e9ace370e8bc4f5d4e56388d43b645a973834fa9567f734c3b782f465b74e8c8aefbbe2bb5f047c6a46596634de6b96c67218444ed53da1cc8a4285ea2559a2a0be37910052644dc76e8d22bc20454369c2e10ed") ironclad-0.57/testing/test-vectors/digests.lisp000066400000000000000000000157421420372057600217310ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto-tests) (rtest:deftest make-digest.error (handler-case (crypto:make-digest :error) (crypto:unsupported-digest () :ok) (:no-error () :error)) :ok) (rtest:deftest digest-length.error (handler-case (crypto:digest-length :error) (crypto:unsupported-digest () :ok) (:no-error () :error)) :ok) (rtest:deftest produce-digest.buffer-space (let ((sequence (make-array 0 :element-type '(unsigned-byte 8)))) (dolist (digest (crypto:list-all-digests) :ok) (let* ((digest-length (crypto:digest-length digest)) (buffer (make-array (1- digest-length) :element-type '(unsigned-byte 8)))) (handler-case (crypto:digest-sequence digest sequence :digest buffer :digest-start 0) (crypto:insufficient-buffer-space () :ok) (:no-error () (return :error)))))) :ok) (rtest:deftest produce-digest.using-buffers (let ((sequence (make-array 0 :element-type '(unsigned-byte 8)))) (dolist (digest (crypto:list-all-digests) :ok) (let* ((digest-length (crypto:digest-length digest)) (buffer (make-array digest-length :element-type '(unsigned-byte 8))) (returned (crypto:digest-sequence digest sequence :digest buffer :digest-start 0))) (unless (eq returned buffer) (return :error))))) :ok) #.(loop for digest in (crypto:list-all-digests) collect `(rtest:deftest ,digest (run-test-vector-file ',digest *digest-tests*) t) into forms finally (return `(progn ,@forms))) #.(loop for digest in (crypto:list-all-digests) collect `(rtest:deftest ,(intern (format nil "~A/~A" digest '#:incremental)) (run-test-vector-file ',digest *digest-incremental-tests*) t) into forms finally (return `(progn ,@forms))) #.(loop for digest in (crypto:list-all-digests) collect `(rtest:deftest ,(intern (format nil "~A/~A" digest '#:block-buffering)) (let* ((sequences (mapcar (lambda (s) (coerce s '(simple-array (unsigned-byte 8) (*)))) '(#(71 69 84) #(10) #(10) #(10) #(10) #(120 45 97 109 122 45 100 97 116 101 58) #(84 117 101 44 32 50 54 32 74 117 110 32 50) #(48 49 50 32 49 55 58 50 49 58 51) #(57 32 71 77 84) #(10) #(47 120 47 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97 97)))) (incremental-digest (ironclad:make-digest ',digest)) (incremental-result (dolist (s sequences (ironclad:produce-digest incremental-digest)) (ironclad:update-digest incremental-digest s))) (one-shot-result (ironclad:digest-sequence ',digest (apply 'concatenate '(simple-array (unsigned-byte 8) (*)) sequences)))) (equalp incremental-result one-shot-result)) t) into forms finally (return `(progn ,@forms))) #.(if (boundp '*digest-stream-tests*) (loop for digest in (crypto:list-all-digests) collect `(rtest:deftest ,(intern (format nil "~A/~A" digest '#:stream)) (run-test-vector-file ',digest *digest-stream-tests*) t) into forms finally (return `(progn ,@forms))) nil) #.(loop for digest in (crypto:list-all-digests) collect `(rtest:deftest ,(intern (format nil "~A/~A" digest '#:reinitialize-instance)) (run-test-vector-file ',digest *digest-reinitialize-instance-tests*) t) into forms finally (return `(progn ,@forms))) #.(if (boundp '*digest-fill-pointer-tests*) (loop for digest in (crypto:list-all-digests) collect `(rtest:deftest ,(intern (format nil "~A/~A" digest '#:fill-pointer)) (run-test-vector-file ',digest *digest-fill-pointer-tests*) t) into forms finally (return `(progn ,@forms))) nil) (rtest:deftest digests.crypto-package (every #'(lambda (s) (eq (nth-value 1 (find-symbol (symbol-name s) (find-package :ironclad))) :external)) (crypto:list-all-digests)) t) (rtest:deftest clean-symbols.digest (loop with n-digests = (length (crypto:list-all-digests)) for s being each symbol of :crypto when (crypto::digestp s) count s into computed-n-digests finally (return (= n-digests computed-n-digests))) t) (rtest:deftest copy-digest.null (dolist (digest (crypto:list-all-digests) t) (let* ((original (crypto:make-digest digest)) (copy (crypto:copy-digest original))) ;; Ideally, here we'd also test that'd we'd properly copied ;; everything (we would probably also UPDATE-DIGEST ORIGINAL a bit ;; first, to ensure that we weren't just creating an entirely new ;; digest as our copy). But that requires MOP smarts or separate ;; tests for every digest we support. Ugh--at least for the ;; latter. (when (eq original copy) (return nil)))) t) (rtest:deftest copy-digest.copy (dolist (digest (crypto:list-all-digests) t) (let* ((original (crypto:make-digest digest)) (copy (crypto:make-digest digest))) ;; Make sure we return the object getting passed in. ;; ;; Ideally, here we'd also test that'd we'd properly copied ;; everything (we would probably also UPDATE-DIGEST ORIGINAL a bit ;; first, to ensure that we weren't just creating an entirely new ;; digest as our copy). But that requires MOP smarts or separate ;; tests for every digest we support. Ugh--at least for the ;; latter. (unless (eq (crypto:copy-digest original copy) copy) (return nil)))) t) (rtest:deftest copy-digest.error (dolist (digest (crypto:list-all-digests) t) (let* ((original (crypto:make-digest digest))) (handler-case (crypto:copy-digest original (make-array 10)) (error () nil) (:no-error () (return nil))))) t) ironclad-0.57/testing/test-vectors/dsa.testvec000066400000000000000000000742221420372057600215420ustar00rootroot00000000000000;;;; DSA test vectors ;;; A few test vectors from RFC 6979 ;;; 1024 bits (:dsa-signature-test #x86f5ca03dcfeb225063ff830a0c769b9dd9d6153ad91d7ce27f787c43278b447e6533b86b18bed6e8a48b784a14c252c5be0dbf60b86d6385bd2f12fb763ed8873abfd3f5ba2e0a8c0a59082eac056935e529daf7c610467899c77adedfc846c881870b7b19b2b58f9be0521a17002e3bdd6b86685ee90b3d9a1b02b782b1779 #x996f967f6c8e388d9e28d01e205fba957a5698b1 #x07b0f92546150b62514bb771e2a0c0ce387f03bda6c56b505209ff25fd3c133d89bbcd97e904e09114d9a7defdeadfc9078ea544d2e401aeecc40bb9fbbf78fd87995a10a1c27cb7789b594ba7efb5c4326a9fe59a070e136db77175464adca417be5dce2f40d10a46a3a3943f26ab7fd9c0398ff8c76ee0a56826a8a88f1dbd #x411602cb19a6ccc34494d79d98ef1e7ed5af25f7 #x5df5e01ded31d0297e274e1691c192fe5868fef9e19a84776454b100cf16f65392195a38b90523e2542ee61871c0440cb87c322fc4b4d2ec5e1e7ec766e1be8d4ce935437dc11c3c8fd426338933ebfe739cb3465f4d3668c5e473508253b1e682f65cbdc4fae93c2ea212390e54905a86e2223170b44eaa7da5dd9ffcfb7f3b #h"8151325dcdbae9e0ff95f9f9658432dbedfdb209" #x7bdb6b0ff756e1bb5d53583ef979082f9ad5bd5b #h"2e1a0c2562b2912caaf89186fb0f42001585da5529efb6b0aff2d7a68eb70ca313022253b9a88df5") (:dsa-signature-test #x86f5ca03dcfeb225063ff830a0c769b9dd9d6153ad91d7ce27f787c43278b447e6533b86b18bed6e8a48b784a14c252c5be0dbf60b86d6385bd2f12fb763ed8873abfd3f5ba2e0a8c0a59082eac056935e529daf7c610467899c77adedfc846c881870b7b19b2b58f9be0521a17002e3bdd6b86685ee90b3d9a1b02b782b1779 #x996f967f6c8e388d9e28d01e205fba957a5698b1 #x07b0f92546150b62514bb771e2a0c0ce387f03bda6c56b505209ff25fd3c133d89bbcd97e904e09114d9a7defdeadfc9078ea544d2e401aeecc40bb9fbbf78fd87995a10a1c27cb7789b594ba7efb5c4326a9fe59a070e136db77175464adca417be5dce2f40d10a46a3a3943f26ab7fd9c0398ff8c76ee0a56826a8a88f1dbd #x411602cb19a6ccc34494d79d98ef1e7ed5af25f7 #x5df5e01ded31d0297e274e1691c192fe5868fef9e19a84776454b100cf16f65392195a38b90523e2542ee61871c0440cb87c322fc4b4d2ec5e1e7ec766e1be8d4ce935437dc11c3c8fd426338933ebfe739cb3465f4d3668c5e473508253b1e682f65cbdc4fae93c2ea212390e54905a86e2223170b44eaa7da5dd9ffcfb7f3b #h"9003e374bc726550c2c289447fd0533160f875709386dfa377bfd41c" #x562097c06782d60c3037ba7be104774344687649 #h"4bc3b686aea70145856814a6f1bb53346f02101e410697b92295d994d21edd2f4ada85566f6f94c1") (:dsa-signature-test #x86f5ca03dcfeb225063ff830a0c769b9dd9d6153ad91d7ce27f787c43278b447e6533b86b18bed6e8a48b784a14c252c5be0dbf60b86d6385bd2f12fb763ed8873abfd3f5ba2e0a8c0a59082eac056935e529daf7c610467899c77adedfc846c881870b7b19b2b58f9be0521a17002e3bdd6b86685ee90b3d9a1b02b782b1779 #x996f967f6c8e388d9e28d01e205fba957a5698b1 #x07b0f92546150b62514bb771e2a0c0ce387f03bda6c56b505209ff25fd3c133d89bbcd97e904e09114d9a7defdeadfc9078ea544d2e401aeecc40bb9fbbf78fd87995a10a1c27cb7789b594ba7efb5c4326a9fe59a070e136db77175464adca417be5dce2f40d10a46a3a3943f26ab7fd9c0398ff8c76ee0a56826a8a88f1dbd #x411602cb19a6ccc34494d79d98ef1e7ed5af25f7 #x5df5e01ded31d0297e274e1691c192fe5868fef9e19a84776454b100cf16f65392195a38b90523e2542ee61871c0440cb87c322fc4b4d2ec5e1e7ec766e1be8d4ce935437dc11c3c8fd426338933ebfe739cb3465f4d3668c5e473508253b1e682f65cbdc4fae93c2ea212390e54905a86e2223170b44eaa7da5dd9ffcfb7f3b #h"af2bdbe1aa9b6ec1e2ade1d694f41fc71a831d0268e9891562113d8a62add1bf" #x519ba0546d0c39202a7d34d7dfa5e760b318bcfb #h"81f2f5850be5bc123c43f71a3033e9384611c5454cdd914b65eb6c66a8aaad27299bee6b035f5e89") (:dsa-signature-test #x86f5ca03dcfeb225063ff830a0c769b9dd9d6153ad91d7ce27f787c43278b447e6533b86b18bed6e8a48b784a14c252c5be0dbf60b86d6385bd2f12fb763ed8873abfd3f5ba2e0a8c0a59082eac056935e529daf7c610467899c77adedfc846c881870b7b19b2b58f9be0521a17002e3bdd6b86685ee90b3d9a1b02b782b1779 #x996f967f6c8e388d9e28d01e205fba957a5698b1 #x07b0f92546150b62514bb771e2a0c0ce387f03bda6c56b505209ff25fd3c133d89bbcd97e904e09114d9a7defdeadfc9078ea544d2e401aeecc40bb9fbbf78fd87995a10a1c27cb7789b594ba7efb5c4326a9fe59a070e136db77175464adca417be5dce2f40d10a46a3a3943f26ab7fd9c0398ff8c76ee0a56826a8a88f1dbd #x411602cb19a6ccc34494d79d98ef1e7ed5af25f7 #x5df5e01ded31d0297e274e1691c192fe5868fef9e19a84776454b100cf16f65392195a38b90523e2542ee61871c0440cb87c322fc4b4d2ec5e1e7ec766e1be8d4ce935437dc11c3c8fd426338933ebfe739cb3465f4d3668c5e473508253b1e682f65cbdc4fae93c2ea212390e54905a86e2223170b44eaa7da5dd9ffcfb7f3b #h"9a9083505bc92276aec4be312696ef7bf3bf603f4bbd381196a029f340585312313bca4a9b5b890efee42c77b1ee25fe" #x95897cd7bbb944aa932dbc579c1c09eb6fcfc595 #h"07f2108557ee0e3921bc1774f1ca9b410b4ce65a54df70456c86fac10fab47c1949ab83f2c6f7595") (:dsa-signature-test #x86f5ca03dcfeb225063ff830a0c769b9dd9d6153ad91d7ce27f787c43278b447e6533b86b18bed6e8a48b784a14c252c5be0dbf60b86d6385bd2f12fb763ed8873abfd3f5ba2e0a8c0a59082eac056935e529daf7c610467899c77adedfc846c881870b7b19b2b58f9be0521a17002e3bdd6b86685ee90b3d9a1b02b782b1779 #x996f967f6c8e388d9e28d01e205fba957a5698b1 #x07b0f92546150b62514bb771e2a0c0ce387f03bda6c56b505209ff25fd3c133d89bbcd97e904e09114d9a7defdeadfc9078ea544d2e401aeecc40bb9fbbf78fd87995a10a1c27cb7789b594ba7efb5c4326a9fe59a070e136db77175464adca417be5dce2f40d10a46a3a3943f26ab7fd9c0398ff8c76ee0a56826a8a88f1dbd #x411602cb19a6ccc34494d79d98ef1e7ed5af25f7 #x5df5e01ded31d0297e274e1691c192fe5868fef9e19a84776454b100cf16f65392195a38b90523e2542ee61871c0440cb87c322fc4b4d2ec5e1e7ec766e1be8d4ce935437dc11c3c8fd426338933ebfe739cb3465f4d3668c5e473508253b1e682f65cbdc4fae93c2ea212390e54905a86e2223170b44eaa7da5dd9ffcfb7f3b #h"39a5e04aaff7455d9850c605364f514c11324ce64016960d23d5dc57d3ffd8f49a739468ab8049bf18eef820cdb1ad6c9015f838556bc7fad4138b23fdf986c7" #x09ece7ca27d0f5a4dd4e556c9df1d21d28104f8b #h"16c3491f9b8c3fbbdd5e7a7b667057f0d8ee8e1b02c36a127a7b89edbb72e4ffbc71dabc7d4fc69c") (:dsa-signature-test #x86f5ca03dcfeb225063ff830a0c769b9dd9d6153ad91d7ce27f787c43278b447e6533b86b18bed6e8a48b784a14c252c5be0dbf60b86d6385bd2f12fb763ed8873abfd3f5ba2e0a8c0a59082eac056935e529daf7c610467899c77adedfc846c881870b7b19b2b58f9be0521a17002e3bdd6b86685ee90b3d9a1b02b782b1779 #x996f967f6c8e388d9e28d01e205fba957a5698b1 #x07b0f92546150b62514bb771e2a0c0ce387f03bda6c56b505209ff25fd3c133d89bbcd97e904e09114d9a7defdeadfc9078ea544d2e401aeecc40bb9fbbf78fd87995a10a1c27cb7789b594ba7efb5c4326a9fe59a070e136db77175464adca417be5dce2f40d10a46a3a3943f26ab7fd9c0398ff8c76ee0a56826a8a88f1dbd #x411602cb19a6ccc34494d79d98ef1e7ed5af25f7 #x5df5e01ded31d0297e274e1691c192fe5868fef9e19a84776454b100cf16f65392195a38b90523e2542ee61871c0440cb87c322fc4b4d2ec5e1e7ec766e1be8d4ce935437dc11c3c8fd426338933ebfe739cb3465f4d3668c5e473508253b1e682f65cbdc4fae93c2ea212390e54905a86e2223170b44eaa7da5dd9ffcfb7f3b #h"a94a8fe5ccb19ba61c4c0873d391e987982fbbd3" #x5c842df4f9e344ee09f056838b42c7a17f4a6433 #h"42ab2052fd43e123f0607f115052a67dcd9c5c77183916b0230d45b9931491d4c6b0bd2fb4aaf088") (:dsa-signature-test #x86f5ca03dcfeb225063ff830a0c769b9dd9d6153ad91d7ce27f787c43278b447e6533b86b18bed6e8a48b784a14c252c5be0dbf60b86d6385bd2f12fb763ed8873abfd3f5ba2e0a8c0a59082eac056935e529daf7c610467899c77adedfc846c881870b7b19b2b58f9be0521a17002e3bdd6b86685ee90b3d9a1b02b782b1779 #x996f967f6c8e388d9e28d01e205fba957a5698b1 #x07b0f92546150b62514bb771e2a0c0ce387f03bda6c56b505209ff25fd3c133d89bbcd97e904e09114d9a7defdeadfc9078ea544d2e401aeecc40bb9fbbf78fd87995a10a1c27cb7789b594ba7efb5c4326a9fe59a070e136db77175464adca417be5dce2f40d10a46a3a3943f26ab7fd9c0398ff8c76ee0a56826a8a88f1dbd #x411602cb19a6ccc34494d79d98ef1e7ed5af25f7 #x5df5e01ded31d0297e274e1691c192fe5868fef9e19a84776454b100cf16f65392195a38b90523e2542ee61871c0440cb87c322fc4b4d2ec5e1e7ec766e1be8d4ce935437dc11c3c8fd426338933ebfe739cb3465f4d3668c5e473508253b1e682f65cbdc4fae93c2ea212390e54905a86e2223170b44eaa7da5dd9ffcfb7f3b #h"90a3ed9e32b2aaf4c61c410eb925426119e1a9dc53d4286ade99a809" #x4598b8efc1a53bc8aecd58d1abbb0c0c71e67297 #h"6868e9964e36c1689f6037f91f28d5f2c30610f249cec3acdc83018c5bd2674ecaad35b8cd22940f") (:dsa-signature-test #x86f5ca03dcfeb225063ff830a0c769b9dd9d6153ad91d7ce27f787c43278b447e6533b86b18bed6e8a48b784a14c252c5be0dbf60b86d6385bd2f12fb763ed8873abfd3f5ba2e0a8c0a59082eac056935e529daf7c610467899c77adedfc846c881870b7b19b2b58f9be0521a17002e3bdd6b86685ee90b3d9a1b02b782b1779 #x996f967f6c8e388d9e28d01e205fba957a5698b1 #x07b0f92546150b62514bb771e2a0c0ce387f03bda6c56b505209ff25fd3c133d89bbcd97e904e09114d9a7defdeadfc9078ea544d2e401aeecc40bb9fbbf78fd87995a10a1c27cb7789b594ba7efb5c4326a9fe59a070e136db77175464adca417be5dce2f40d10a46a3a3943f26ab7fd9c0398ff8c76ee0a56826a8a88f1dbd #x411602cb19a6ccc34494d79d98ef1e7ed5af25f7 #x5df5e01ded31d0297e274e1691c192fe5868fef9e19a84776454b100cf16f65392195a38b90523e2542ee61871c0440cb87c322fc4b4d2ec5e1e7ec766e1be8d4ce935437dc11c3c8fd426338933ebfe739cb3465f4d3668c5e473508253b1e682f65cbdc4fae93c2ea212390e54905a86e2223170b44eaa7da5dd9ffcfb7f3b #h"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08" #x5a67592e8128e03a417b0484410fb72c0b630e1a #h"22518c127299b0f6fdc9872b282b9e70d07908126837ec18f150d55de95b5e29be7af5d01e4fe160") (:dsa-signature-test #x86f5ca03dcfeb225063ff830a0c769b9dd9d6153ad91d7ce27f787c43278b447e6533b86b18bed6e8a48b784a14c252c5be0dbf60b86d6385bd2f12fb763ed8873abfd3f5ba2e0a8c0a59082eac056935e529daf7c610467899c77adedfc846c881870b7b19b2b58f9be0521a17002e3bdd6b86685ee90b3d9a1b02b782b1779 #x996f967f6c8e388d9e28d01e205fba957a5698b1 #x07b0f92546150b62514bb771e2a0c0ce387f03bda6c56b505209ff25fd3c133d89bbcd97e904e09114d9a7defdeadfc9078ea544d2e401aeecc40bb9fbbf78fd87995a10a1c27cb7789b594ba7efb5c4326a9fe59a070e136db77175464adca417be5dce2f40d10a46a3a3943f26ab7fd9c0398ff8c76ee0a56826a8a88f1dbd #x411602cb19a6ccc34494d79d98ef1e7ed5af25f7 #x5df5e01ded31d0297e274e1691c192fe5868fef9e19a84776454b100cf16f65392195a38b90523e2542ee61871c0440cb87c322fc4b4d2ec5e1e7ec766e1be8d4ce935437dc11c3c8fd426338933ebfe739cb3465f4d3668c5e473508253b1e682f65cbdc4fae93c2ea212390e54905a86e2223170b44eaa7da5dd9ffcfb7f3b #h"768412320f7b0aa5812fce428dc4706b3cae50e02a64caa16a782249bfe8efc4b7ef1ccb126255d196047dfedf17a0a9" #x220156b761f6ca5e6c9f1b9cf9c24be25f98cd89 #h"854cf929b58d73c3cbfdc421e8d5430cd6db5e6691d0e0f53e22f898d158380676a871a157cda622") (:dsa-signature-test #x86f5ca03dcfeb225063ff830a0c769b9dd9d6153ad91d7ce27f787c43278b447e6533b86b18bed6e8a48b784a14c252c5be0dbf60b86d6385bd2f12fb763ed8873abfd3f5ba2e0a8c0a59082eac056935e529daf7c610467899c77adedfc846c881870b7b19b2b58f9be0521a17002e3bdd6b86685ee90b3d9a1b02b782b1779 #x996f967f6c8e388d9e28d01e205fba957a5698b1 #x07b0f92546150b62514bb771e2a0c0ce387f03bda6c56b505209ff25fd3c133d89bbcd97e904e09114d9a7defdeadfc9078ea544d2e401aeecc40bb9fbbf78fd87995a10a1c27cb7789b594ba7efb5c4326a9fe59a070e136db77175464adca417be5dce2f40d10a46a3a3943f26ab7fd9c0398ff8c76ee0a56826a8a88f1dbd #x411602cb19a6ccc34494d79d98ef1e7ed5af25f7 #x5df5e01ded31d0297e274e1691c192fe5868fef9e19a84776454b100cf16f65392195a38b90523e2542ee61871c0440cb87c322fc4b4d2ec5e1e7ec766e1be8d4ce935437dc11c3c8fd426338933ebfe739cb3465f4d3668c5e473508253b1e682f65cbdc4fae93c2ea212390e54905a86e2223170b44eaa7da5dd9ffcfb7f3b #h"ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff" #x65d2c2eeb175e370f28c75bfcdc028d22c7dbe9c #h"8ea47e475ba8ac6f2d821da3bd212d11a3deb9a07c670c7ad72b6c050c109e1790008097125433e8") ;;; 2048 bits (:dsa-signature-test #x9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b993e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca28371621cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b #xf2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde9998c1f #x5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a338661d10461c0d135472085057f3494309ffa73c611f78b32adbb5740c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097bc5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a33afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd2487199874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f996bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7 #x69c7548c21d0dfea6b9a51c9ead4e27c33d3b3f180316e5bcab92c933f0e4dbc #x667098c654426c78d7f8201eac6c203ef030d43605032c2f1fa937e5237dbd949f34a0a2564fe126dc8b715c5141802ce0979c8246463c40e6b6bdaa2513fa611728716c2e4fd53bc95b89e69949d96512e873b9c8f8dfd499cc312882561adecb31f658e934c0c197f2c4d96b05cbad67381e7b768891e4da3843d24d94cdfb5126e9b8bf21e8358ee0e0a30ef13fd6a664c0dce3731f7fb49a4845a4fd8254687972a2d382599c9bac4e0ed7998193078913032558134976410b89d2c171d123ac35fd977219597aa7d15c1a9a428e59194f75c721ebcbcfae44696a499afa74e04299f132026601638cb87ab79190d4a0986315da8eec6561c938996beadf #h"8151325dcdbae9e0ff95f9f9658432dbedfdb209" #x888fa6f7738a41bdc9846466abdb8174c0338250ae50ce955ca16230f9cbd53e #h"3a1b2dbd7489d6ed7e608fd036c83af396e290dbd602408e8677daabd6e7445ad26fcba19fa3e3058ffc02ca1596cdbb6e0d20cb37b06054f7e36ded0cdbbccf") (:dsa-signature-test #x9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b993e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca28371621cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b #xf2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde9998c1f #x5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a338661d10461c0d135472085057f3494309ffa73c611f78b32adbb5740c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097bc5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a33afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd2487199874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f996bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7 #x69c7548c21d0dfea6b9a51c9ead4e27c33d3b3f180316e5bcab92c933f0e4dbc #x667098c654426c78d7f8201eac6c203ef030d43605032c2f1fa937e5237dbd949f34a0a2564fe126dc8b715c5141802ce0979c8246463c40e6b6bdaa2513fa611728716c2e4fd53bc95b89e69949d96512e873b9c8f8dfd499cc312882561adecb31f658e934c0c197f2c4d96b05cbad67381e7b768891e4da3843d24d94cdfb5126e9b8bf21e8358ee0e0a30ef13fd6a664c0dce3731f7fb49a4845a4fd8254687972a2d382599c9bac4e0ed7998193078913032558134976410b89d2c171d123ac35fd977219597aa7d15c1a9a428e59194f75c721ebcbcfae44696a499afa74e04299f132026601638cb87ab79190d4a0986315da8eec6561c938996beadf #h"9003e374bc726550c2c289447fd0533160f875709386dfa377bfd41c" #xbc372967702082e1aa4fce892209f71ae4ad25a6dfd869334e6f153bd0c4d806 #h"dc9f4deada8d8ff588e98fed0ab690ffce858dc8c79376450eb6b76c24537e2ca65a9c3bc7babe286b195d5da68616da8d47fa0097f36dd19f517327dc848cec") (:dsa-signature-test #x9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b993e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca28371621cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b #xf2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde9998c1f #x5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a338661d10461c0d135472085057f3494309ffa73c611f78b32adbb5740c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097bc5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a33afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd2487199874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f996bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7 #x69c7548c21d0dfea6b9a51c9ead4e27c33d3b3f180316e5bcab92c933f0e4dbc #x667098c654426c78d7f8201eac6c203ef030d43605032c2f1fa937e5237dbd949f34a0a2564fe126dc8b715c5141802ce0979c8246463c40e6b6bdaa2513fa611728716c2e4fd53bc95b89e69949d96512e873b9c8f8dfd499cc312882561adecb31f658e934c0c197f2c4d96b05cbad67381e7b768891e4da3843d24d94cdfb5126e9b8bf21e8358ee0e0a30ef13fd6a664c0dce3731f7fb49a4845a4fd8254687972a2d382599c9bac4e0ed7998193078913032558134976410b89d2c171d123ac35fd977219597aa7d15c1a9a428e59194f75c721ebcbcfae44696a499afa74e04299f132026601638cb87ab79190d4a0986315da8eec6561c938996beadf #h"af2bdbe1aa9b6ec1e2ade1d694f41fc71a831d0268e9891562113d8a62add1bf" #x8926a27c40484216f052f4427cfd5647338b7b3939bc6573af4333569d597c52 #h"eace8bdbbe353c432a795d9ec556c6d021f7a03f42c36e9bc87e4ac7932cc8097081e175455f9247b812b74583e9e94f9ea79bd640dc962533b0680793a38d53") (:dsa-signature-test #x9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b993e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca28371621cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b #xf2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde9998c1f #x5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a338661d10461c0d135472085057f3494309ffa73c611f78b32adbb5740c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097bc5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a33afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd2487199874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f996bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7 #x69c7548c21d0dfea6b9a51c9ead4e27c33d3b3f180316e5bcab92c933f0e4dbc #x667098c654426c78d7f8201eac6c203ef030d43605032c2f1fa937e5237dbd949f34a0a2564fe126dc8b715c5141802ce0979c8246463c40e6b6bdaa2513fa611728716c2e4fd53bc95b89e69949d96512e873b9c8f8dfd499cc312882561adecb31f658e934c0c197f2c4d96b05cbad67381e7b768891e4da3843d24d94cdfb5126e9b8bf21e8358ee0e0a30ef13fd6a664c0dce3731f7fb49a4845a4fd8254687972a2d382599c9bac4e0ed7998193078913032558134976410b89d2c171d123ac35fd977219597aa7d15c1a9a428e59194f75c721ebcbcfae44696a499afa74e04299f132026601638cb87ab79190d4a0986315da8eec6561c938996beadf #h"9a9083505bc92276aec4be312696ef7bf3bf603f4bbd381196a029f340585312313bca4a9b5b890efee42c77b1ee25fe" #xc345d5ab3da0a5bcb7ec8f8fb7a7e96069e03b206371ef7d83e39068ec564920 #h"b2da945e91858834fd9bf616ebac151edbc4b45d27d0dd4a7f6a22739f45c00b19048b63d9fd6bca1d9bae3664e1bcb97f7276c306130969f63f38fa8319021b") (:dsa-signature-test #x9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b993e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca28371621cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b #xf2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde9998c1f #x5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a338661d10461c0d135472085057f3494309ffa73c611f78b32adbb5740c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097bc5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a33afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd2487199874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f996bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7 #x69c7548c21d0dfea6b9a51c9ead4e27c33d3b3f180316e5bcab92c933f0e4dbc #x667098c654426c78d7f8201eac6c203ef030d43605032c2f1fa937e5237dbd949f34a0a2564fe126dc8b715c5141802ce0979c8246463c40e6b6bdaa2513fa611728716c2e4fd53bc95b89e69949d96512e873b9c8f8dfd499cc312882561adecb31f658e934c0c197f2c4d96b05cbad67381e7b768891e4da3843d24d94cdfb5126e9b8bf21e8358ee0e0a30ef13fd6a664c0dce3731f7fb49a4845a4fd8254687972a2d382599c9bac4e0ed7998193078913032558134976410b89d2c171d123ac35fd977219597aa7d15c1a9a428e59194f75c721ebcbcfae44696a499afa74e04299f132026601638cb87ab79190d4a0986315da8eec6561c938996beadf #h"39a5e04aaff7455d9850c605364f514c11324ce64016960d23d5dc57d3ffd8f49a739468ab8049bf18eef820cdb1ad6c9015f838556bc7fad4138b23fdf986c7" #x5a12994431785485b3f5f067221517791b85a597b7a9436995c89ed0374668fc #h"2016ed092dc5fb669b8efb3d1f31a91eecb199879be0cf78f02ba062cb4c942ed0c76f84b5f091e141572a639a4fb8c230807eea7d55c8a154a224400aff2351") (:dsa-signature-test #x9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b993e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca28371621cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b #xf2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde9998c1f #x5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a338661d10461c0d135472085057f3494309ffa73c611f78b32adbb5740c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097bc5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a33afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd2487199874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f996bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7 #x69c7548c21d0dfea6b9a51c9ead4e27c33d3b3f180316e5bcab92c933f0e4dbc #x667098c654426c78d7f8201eac6c203ef030d43605032c2f1fa937e5237dbd949f34a0a2564fe126dc8b715c5141802ce0979c8246463c40e6b6bdaa2513fa611728716c2e4fd53bc95b89e69949d96512e873b9c8f8dfd499cc312882561adecb31f658e934c0c197f2c4d96b05cbad67381e7b768891e4da3843d24d94cdfb5126e9b8bf21e8358ee0e0a30ef13fd6a664c0dce3731f7fb49a4845a4fd8254687972a2d382599c9bac4e0ed7998193078913032558134976410b89d2c171d123ac35fd977219597aa7d15c1a9a428e59194f75c721ebcbcfae44696a499afa74e04299f132026601638cb87ab79190d4a0986315da8eec6561c938996beadf #h"a94a8fe5ccb19ba61c4c0873d391e987982fbbd3" #x6eea486f9d41a037b2c640bc5645694ff8ff4b98d066a25f76be641ccb24ba4f #h"c18270a93cfc6063f57a4dfa86024f700d980e4cf4e2cb65a504397273d98ea0414f22e5f31a8b6d33295c7539c1c1ba3a6160d7d68d50ac0d3a5beac2884faa") (:dsa-signature-test #x9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b993e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca28371621cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b #xf2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde9998c1f #x5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a338661d10461c0d135472085057f3494309ffa73c611f78b32adbb5740c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097bc5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a33afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd2487199874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f996bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7 #x69c7548c21d0dfea6b9a51c9ead4e27c33d3b3f180316e5bcab92c933f0e4dbc #x667098c654426c78d7f8201eac6c203ef030d43605032c2f1fa937e5237dbd949f34a0a2564fe126dc8b715c5141802ce0979c8246463c40e6b6bdaa2513fa611728716c2e4fd53bc95b89e69949d96512e873b9c8f8dfd499cc312882561adecb31f658e934c0c197f2c4d96b05cbad67381e7b768891e4da3843d24d94cdfb5126e9b8bf21e8358ee0e0a30ef13fd6a664c0dce3731f7fb49a4845a4fd8254687972a2d382599c9bac4e0ed7998193078913032558134976410b89d2c171d123ac35fd977219597aa7d15c1a9a428e59194f75c721ebcbcfae44696a499afa74e04299f132026601638cb87ab79190d4a0986315da8eec6561c938996beadf #h"90a3ed9e32b2aaf4c61c410eb925426119e1a9dc53d4286ade99a809" #x06bd4c05ed74719106223be33f2d95da6b3b541dad7bfbd7ac508213b6da6670 #h"272aba31572f6cc55e30bf616b7a265312018dd325be031be0cc82aa17870ea3e9cc286a52cce201586722d36d1e917eb96a4ebdb47932f9576ac645b3a60806") (:dsa-signature-test #x9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b993e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca28371621cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b #xf2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde9998c1f #x5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a338661d10461c0d135472085057f3494309ffa73c611f78b32adbb5740c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097bc5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a33afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd2487199874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f996bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7 #x69c7548c21d0dfea6b9a51c9ead4e27c33d3b3f180316e5bcab92c933f0e4dbc #x667098c654426c78d7f8201eac6c203ef030d43605032c2f1fa937e5237dbd949f34a0a2564fe126dc8b715c5141802ce0979c8246463c40e6b6bdaa2513fa611728716c2e4fd53bc95b89e69949d96512e873b9c8f8dfd499cc312882561adecb31f658e934c0c197f2c4d96b05cbad67381e7b768891e4da3843d24d94cdfb5126e9b8bf21e8358ee0e0a30ef13fd6a664c0dce3731f7fb49a4845a4fd8254687972a2d382599c9bac4e0ed7998193078913032558134976410b89d2c171d123ac35fd977219597aa7d15c1a9a428e59194f75c721ebcbcfae44696a499afa74e04299f132026601638cb87ab79190d4a0986315da8eec6561c938996beadf #h"9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08" #x1d6ce6dda1c5d37307839cd03ab0a5cbb18e60d800937d67dfb4479aac8dead7 #h"8190012a1969f9957d56fccaad223186f423398d58ef5b3cefd5a4146a4476f07452a53f7075d417b4b013b278d1bb8bbd21863f5e7b1cee679cf2188e1ab19e") (:dsa-signature-test #x9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b993e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca28371621cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b #xf2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde9998c1f #x5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a338661d10461c0d135472085057f3494309ffa73c611f78b32adbb5740c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097bc5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a33afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd2487199874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f996bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7 #x69c7548c21d0dfea6b9a51c9ead4e27c33d3b3f180316e5bcab92c933f0e4dbc #x667098c654426c78d7f8201eac6c203ef030d43605032c2f1fa937e5237dbd949f34a0a2564fe126dc8b715c5141802ce0979c8246463c40e6b6bdaa2513fa611728716c2e4fd53bc95b89e69949d96512e873b9c8f8dfd499cc312882561adecb31f658e934c0c197f2c4d96b05cbad67381e7b768891e4da3843d24d94cdfb5126e9b8bf21e8358ee0e0a30ef13fd6a664c0dce3731f7fb49a4845a4fd8254687972a2d382599c9bac4e0ed7998193078913032558134976410b89d2c171d123ac35fd977219597aa7d15c1a9a428e59194f75c721ebcbcfae44696a499afa74e04299f132026601638cb87ab79190d4a0986315da8eec6561c938996beadf #h"768412320f7b0aa5812fce428dc4706b3cae50e02a64caa16a782249bfe8efc4b7ef1ccb126255d196047dfedf17a0a9" #x206e61f73dbe1b2dc8be736b22b079e9dacd974db00eebbc5b64cad39cf9f91c #h"239e66ddbe8f8c230a3d071d601b6ffbdfb5901f94d444c6af56f732beb954be6bd737513d5e72fe85d1c750e0f73921fe299b945aad1c802f15c26a43d34961") (:dsa-signature-test #x9db6fb5951b66bb6fe1e140f1d2ce5502374161fd6538df1648218642f0b5c48c8f7a41aadfa187324b87674fa1822b00f1ecf8136943d7c55757264e5a1a44ffe012e9936e00c1d3e9310b01c7d179805d3058b2a9f4bb6f9716bfe6117c6b5b3cc4d9be341104ad4a80ad6c94e005f4b993e14f091eb51743bf33050c38de235567e1b34c3d6a5c0ceaa1a0f368213c3d19843d0b4b09dcb9fc72d39c8de41f1bf14d4bb4563ca28371621cad3324b6a2d392145bebfac748805236f5ca2fe92b871cd8f9c36d3292b5509ca8caa77a2adfc7bfd77dda6f71125a7456fea153e433256a2261c6a06ed3693797e7995fad5aabbcfbe3eda2741e375404ae25b #xf2c3119374ce76c9356990b465374a17f23f9ed35089bd969f61c6dde9998c1f #x5c7ff6b06f8f143fe8288433493e4769c4d988ace5be25a0e24809670716c613d7b0cee6932f8faa7c44d2cb24523da53fbe4f6ec3595892d1aa58c4328a06c46a15662e7eaa703a1decf8bbb2d05dbe2eb956c142a338661d10461c0d135472085057f3494309ffa73c611f78b32adbb5740c361c9f35be90997db2014e2ef5aa61782f52abeb8bd6432c4dd097bc5423b285dafb60dc364e8161f4a2a35aca3a10b1c4d203cc76a470a33afdcbdd92959859abd8b56e1725252d78eac66e71ba9ae3f1dd2487199874393cd4d832186800654760e1e34c09e4d155179f9ec0dc4473f996bdce6eed1cabed8b6f116f7ad9cf505df0f998e34ab27514b0ffe7 #x69c7548c21d0dfea6b9a51c9ead4e27c33d3b3f180316e5bcab92c933f0e4dbc #x667098c654426c78d7f8201eac6c203ef030d43605032c2f1fa937e5237dbd949f34a0a2564fe126dc8b715c5141802ce0979c8246463c40e6b6bdaa2513fa611728716c2e4fd53bc95b89e69949d96512e873b9c8f8dfd499cc312882561adecb31f658e934c0c197f2c4d96b05cbad67381e7b768891e4da3843d24d94cdfb5126e9b8bf21e8358ee0e0a30ef13fd6a664c0dce3731f7fb49a4845a4fd8254687972a2d382599c9bac4e0ed7998193078913032558134976410b89d2c171d123ac35fd977219597aa7d15c1a9a428e59194f75c721ebcbcfae44696a499afa74e04299f132026601638cb87ab79190d4a0986315da8eec6561c938996beadf #h"ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff" #xaff1651e4cd6036d57aa8b2a05ccf1a9d5a40166340ecbbdc55be10b568aa0aa #h"89ec4bb1400eccff8e7d9aa515cd1de7803f2daff09693ee7fd1353e90a68307c9f0bdabcc0d880bb137a994cc7f3980ce91cc10faf529fc46565b15cea854e1") ironclad-0.57/testing/test-vectors/eax.testvec000066400000000000000000000037401420372057600215450ustar00rootroot00000000000000(:aead-test #h"" #h"6bfb914fd07eae6b" #h"" #h"e037830e8389f27b025a2d6527e79d01" :aes #h"233952dee4d5ed5f9b9c6d6ff80ff478" #h"62ec67f9c3a4a407fcb2a8c49031a8b3") (:aead-test #h"f7fb" #h"fa3bfd4806eb53fa" #h"19dd" #h"5c4c9331049d0bdab0277408f67967e5" :aes #h"91945d3f4dcbee0bf45ef52255f095a4" #h"becaf043b0a23d843194ba972c66debd") (:aead-test #h"1a47cb4933" #h"234a3463c1264ac6" #h"d851d5bae0" #h"3a59f238a23e39199dc9266626c40f80" :aes #h"01f74ad64077f2e704c0f60ada3dd523" #h"70c3db4f0d26368400a10ed05d2bff5e") (:aead-test #h"481c9e39b1" #h"33cce2eabff5a79d" #h"632a9d131a" #h"d4c168a4225d8e1ff755939974a7bede" :aes #h"d07cf6cbb7f313bdde66b727afd3c5e8" #h"8408dfff3c1a2b1292dc199e46b7d617") (:aead-test #h"40d0c07da5e4" #h"aeb96eaebe2970e9" #h"071dfe16c675" #h"cb0677e536f73afe6a14b74ee49844dd" :aes #h"35b6d0580005bbc12b0587124557d2c2" #h"fdb6b06676eedc5c61d74276e1f8e816") (:aead-test #h"4de3b35c3fc039245bd1fb7d" #h"d4482d1ca78dce0f" #h"835bb4f15d743e350e728414" #h"abb8644fd6ccb86947c5e10590210a4f" :aes #h"bd8e6e11475e60b268784c38c62feb22" #h"6eac5c93072d8e8513f750935e46da1b") (:aead-test #h"8b0a79306c9ce7ed99dae4f87f8dd61636" #h"65d2017990d62528" #h"02083e3979da014812f59f11d52630da30" #h"137327d10649b0aa6e1c181db617d7f2" :aes #h"7c77d6e813bed5ac98baa417477a2e7d" #h"1a8c98dcd73d38393b2bf1569deefc19") (:aead-test #h"1bda122bce8a8dbaf1877d962b8592dd2d56" #h"54b9f04e6a09189a" #h"2ec47b2c4954a489afc7ba4897edcdae8cc3" #h"3b60450599bd02c96382902aef7f832a" :aes #h"5fff20cafab119ca2fc73549e20f5b0d" #h"dde59b97d722156d4d9aff2bc7559826") (:aead-test #h"6cf36720872b8513f6eab1a8a44438d5ef11" #h"899a175897561d7e" #h"0de18fd0fdd91e7af19f1d8ee8733938b1e8" #h"e7f6d2231618102fdb7fe55ff1991700" :aes #h"a4a4782bcffd3ec5e7ef6d8c34a56123" #h"b781fcf2f75fa5a8de97a9ca48e522ec") (:aead-test #h"ca40d7446e545ffaed3bd12a740a659ffbbb3ceab7" #h"126735fcc320d25a" #h"cb8920f87a6c75cff39627b56e3ed197c552d295a7" #h"cfc46afc253b4652b1af3795b124ab6e" :aes #h"8395fcf1e95bebd697bd010bc766aac3" #h"22e7add93cfc6393c57ec0b3c17d6b44") ironclad-0.57/testing/test-vectors/ed25519.testvec000066400000000000000000000142401420372057600217630ustar00rootroot00000000000000;;;; ed25519 test vectors ;;; A few test vectors from http://ed25519.cr.yp.to (:ed25519-signature-test #h"9d61b19deffd5a60ba844af492ec2cc44449c5697b326919703bac031cae7f60" #h"d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a" #h"" #h"e5564300c360ac729086e2cc806e828a84877f1eb8e5d974d873e065224901555fb8821590a33bacc61e39701cf9b46bd25bf5f0595bbe24655141438e7a100b") (:ed25519-signature-test #h"4ccd089b28ff96da9db6c346ec114e0f5b8a319f35aba624da8cf6ed4fb8a6fb" #h"3d4017c3e843895a92b70aa74d1b7ebc9c982ccf2ec4968cc0cd55f12af4660c" #h"72" #h"92a009a9f0d4cab8720e820b5f642540a2b27b5416503f8fb3762223ebdb69da085ac1e43e15996e458f3613d0f11d8c387b2eaeb4302aeeb00d291612bb0c00") (:ed25519-signature-test #h"c5aa8df43f9f837bedb7442f31dcb7b166d38535076f094b85ce3a2e0b4458f7" #h"fc51cd8e6218a1a38da47ed00230f0580816ed13ba3303ac5deb911548908025" #h"af82" #h"6291d657deec24024827e69c3abe01a30ce548a284743a445e3680d7db5ac3ac18ff9b538d16f290ae67f760984dc6594a7c15e9716ed28dc027beceea1ec40a") (:ed25519-signature-test #h"0d4a05b07352a5436e180356da0ae6efa0345ff7fb1572575772e8005ed978e9" #h"e61a185bcef2613a6c7cb79763ce945d3b245d76114dd440bcf5f2dc1aa57057" #h"cbc77b" #h"d9868d52c2bebce5f3fa5a79891970f309cb6591e3e1702a70276fa97c24b3a8e58606c38c9758529da50ee31b8219cba45271c689afa60b0ea26c99db19b00c") (:ed25519-signature-test #h"6df9340c138cc188b5fe4464ebaa3f7fc206a2d55c3434707e74c9fc04e20ebb" #h"c0dac102c4533186e25dc43128472353eaabdb878b152aeb8e001f92d90233a7" #h"5f4c8989" #h"124f6fc6b0d100842769e71bd530664d888df8507df6c56dedfdb509aeb93416e26b918d38aa06305df3095697c18b2aa832eaa52edc0ae49fbae5a85e150c07") (:ed25519-signature-test #h"a1ac48aa5ffa3d800819d03b7f62babf291f20904c11a6400e4f45205f103e38" #h"0854e0340f814985fb122b78729479e3fde855c211cadeae56f0d4dc0828d5fa" #h"d6f124ed752021c10926972a0c26f3b1838b3c7af247c18009a231ecce964bf6698637833f607dca836f8a606c72ae3cb170174447a2cce583f6e244dbc163e215b9820de7496ffc5b7050c48f2830246678cba4dc5caa07c1458563aa2d10dcb7770ef8fede027dd7f20ddc8cc78c3a2e2e958bd18c0006cf8fb82d44e53e1da7aa80fd1006f3b2300c9b079d8a66f1e4a3f47061f9e2f45dae35dc295204b19460ca5707ab57ce215a24c10faab3fa20bccd101e7a7d70077599f3d6725707552129cad757d6514c1b28997e471f94b0fded8fbbd065dead196d2c07d3dfa7b9fb3bae7680f76621200d099eebebbea0e8957df5b5e204ca3e9e2952b8a30f0a131a6867b1381e394b1b444310f076326656cf9341678008e9525147d8d61ce93d3bf53900cab912663717e0987293833d1902d7fb047b997b86026c467d7bb17cf45796738f7a774ac126764ed4eb45124309f4586260176ba465918d48330a9cc18c4ecea0ddaf38946acc0e361dd40a7e9133ceb50e1c317ea42bd0980a72b8ba3d8a6c7693dd5602f374f2664df4ba56df01e882fca42cb4db621f476c76e1ea9fd105911a74b77952d9914a5ac0f98a900c1b2e1a56c4ea8518a9ee47c4ed14d0bd35eca560319c8ea24755d71a4e030850bc4dc60389f325804021204ccebc25fedbd32edd8d8446aa23ce56a85f779e858d36af7c073c115e341f412c660fab800fe74c50e714ee086e2fbc8d7abbf3e98fb40ca27f1f01a9aadd8cc2275c2dd3f76e4c1d81c4b792daecc9fe66044941b8b2918486dd4acb562a7b58ad8c60c21b83cf48aefa7256a1ed809e669811f484364970bc5695089919bc32d28ea752e8e318ceff467f77ae1977c5ffd79c17c2da8bc7f823dd94398683189945f8b79238a4e815b142b866acbdbcb7aea7f143fffb7cc2b4b54bbf361afda913ad6df1e49dfd6b532642e63f55d893a470d40370665cfb74efd3f59cb0ff6006174ca35f53b97c543e08af4bf5bb75ff9031610652a3f6f2a0cfe97e7a521f3d2a289114ded34772b0e49817bde1cb924ff514e2866a09e3ede0782d2c0c98e6814b8c1e778cf8306348c933adb2e472dba09db954ff49648373395a2f0181958feb1ea2834c99532873db5c88eb5289c77e90015203ef502ac8e1c48fa1a06dafa6519d52dae3c5567570dd2434e671927c66363f783156893f138a84c75664b30ae4275112736d53d4f399ddda3d23067c073f521afba1f7be585513c2cec9c8f08d2a22c3c85392cd2ae50f3928251f86b310c69a0f8c4e853ab3f3e8129b0566ef4bbbe80b8c02c8928a4de56c0d119a45bbf5af1808d488852d8a45beb0d683248a4d65de1526b3d1d2ffc1f22215b608468cbc3bd39514b397fc0db0f113dbe6fce4652e82ff895b2b4387e041d7e4e7bde4694769665e81" #h"c57e3c091ed24e5e84665bd9bb102db49797df9008f05557fa0d5ad7a295e5e4d2a4716b17f8c91cb12f5abfb1af027fb0411199acc5d285d842a4b65bde4902") (:ed25519-signature-test #h"f5e5767cf153319517630f226876b86c8160cc583bc013744c6bf255f5cc0ee5" #h"278117fc144c72340f67d0f2316e8386ceffbf2b2428c9c51fef7c597f1d426e" #h"08b8b2b733424243760fe426a4b54908632110a66c2f6591eabd3345e3e4eb98fa6e264bf09efe12ee50f8f54e9f77b1e355f6c50544e23fb1433ddf73be84d879de7c0046dc4996d9e773f4bc9efe5738829adb26c81b37c93a1b270b20329d658675fc6ea534e0810a4432826bf58c941efb65d57a338bbd2e26640f89ffbc1a858efcb8550ee3a5e1998bd177e93a7363c344fe6b199ee5d02e82d522c4feba15452f80288a821a579116ec6dad2b3b310da903401aa62100ab5d1a36553e06203b33890cc9b832f79ef80560ccb9a39ce767967ed628c6ad573cb116dbefefd75499da96bd68a8a97b928a8bbc103b6621fcde2beca1231d206be6cd9ec7aff6f6c94fcd7204ed3455c68c83f4a41da4af2b74ef5c53f1d8ac70bdcb7ed185ce81bd84359d44254d95629e9855a94a7c1958d1f8ada5d0532ed8a5aa3fb2d17ba70eb6248e594e1a2297acbbb39d502f1a8c6eb6f1ce22b3de1a1f40cc24554119a831a9aad6079cad88425de6bde1a9187ebb6092cf67bf2b13fd65f27088d78b7e883c8759d2c4f5c65adb7553878ad575f9fad878e80a0c9ba63bcbcc2732e69485bbc9c90bfbd62481d9089beccf80cfe2df16a2cf65bd92dd597b0707e0917af48bbb75fed413d238f5555a7a569d80c3414a8d0859dc65a46128bab27af87a71314f318c782b23ebfe808b82b0ce26401d2e22f04d83d1255dc51addd3b75a2b1ae0784504df543af8969be3ea7082ff7fc9888c144da2af58429ec96031dbcad3dad9af0dcbaaaf268cb8fcffead94f3c7ca495e056a9b47acdb751fb73e666c6c655ade8297297d07ad1ba5e43f1bca32301651339e22904cc8c42f58c30c04aafdb038dda0847dd988dcda6f3bfd15c4b4c4525004aa06eeff8ca61783aacec57fb3d1f92b0fe2fd1a85f6724517b65e614ad6808d6f6ee34dff7310fdc82aebfd904b01e1dc54b2927094b2db68d6f903b68401adebf5a7e08d78ff4ef5d63653a65040cf9bfd4aca7984a74d37145986780fc0b16ac451649de6188a7dbdf191f64b5fc5e2ab47b57f7f7276cd419c17a3ca8e1b939ae49e488acba6b965610b5480109c8b17b80e1b7b750dfc7598d5d5011fd2dcc5600a32ef5b52a1ecc820e308aa342721aac0943bf6686b64b2579376504ccc493d97e6aed3fb0f9cd71a43dd497f01f17c0e2cb3797aa2a2f256656168e6c496afc5fb93246f6b1116398a346f1a641f3b041e989f7914f90cc2c7fff357876e506b50d334ba77c225bc307ba537152f3f1610e4eafe595f6d9d90d11faa933a15ef1369546868a7f3a45a96768d40fd9d03412c091c6315cf4fde7cb68606937380db2eaaa707b4c4185c32eddcdd306705e4dc1ffc872eeee475a64dfac86aba41c0618983f8741c5ef68d3a101e8a3b8cac60c905c15fc910840b94c00a0b9d0" #h"0aab4c900501b3e24d7cdf4663326a3a87df5e4843b2cbdb67cbf6e460fec350aa5371b1508f9f4528ecea23c436d94b5e8fcd4f681e30a6ac00a9704a188a03") ironclad-0.57/testing/test-vectors/ed448.testvec000066400000000000000000000103431420372057600216150ustar00rootroot00000000000000;;;; ed448 test vectors ;;; Some test vectors from https://tools.ietf.org/id/draft-irtf-cfrg-eddsa-05.html (:ed448-signature-test #h"6c82a562cb808d10d632be89c8513ebf6c929f34ddfa8c9f63c9960ef6e348a3528c8a3fcc2f044e39a3fc5b94492f8f032e7549a20098f95b" #h"5fd7449b59b461fd2ce787ec616ad46a1da1342485a70e1f8a0ea75d80e96778edf124769b46c7061bd6783df1e50f6cd1fa1abeafe8256180" #h"" #h"533a37f6bbe457251f023c0d88f976ae2dfb504a843e34d2074fd823d41a591f2b233f034f628281f2fd7a22ddd47d7828c59bd0a21bfd3980ff0d2028d4b18a9df63e006c5d1c2d345b925d8dc00b4104852db99ac5c7cdda8530a113a0f4dbb61149f05a7363268c71d95808ff2e652600") (:ed448-signature-test #h"c4eab05d357007c632f3dbb48489924d552b08fe0c353a0d4a1f00acda2c463afbea67c5e8d2877c5e3bc397a659949ef8021e954e0a12274e" #h"43ba28f430cdff456ae531545f7ecd0ac834a55d9358c0372bfa0c6c6798c0866aea01eb00742802b8438ea4cb82169c235160627b4c3a9480" #h"03" #h"26b8f91727bd62897af15e41eb43c377efb9c610d48f2335cb0bd0087810f4352541b143c4b981b7e18f62de8ccdf633fc1bf037ab7cd779805e0dbcc0aae1cbcee1afb2e027df36bc04dcecbf154336c19f0af7e0a6472905e799f1953d2a0ff3348ab21aa4adafd1d234441cf807c03a00") (:ed448-signature-test #h"cd23d24f714274e744343237b93290f511f6425f98e64459ff203e8985083ffdf60500553abc0e05cd02184bdb89c4ccd67e187951267eb328" #h"dcea9e78f35a1bf3499a831b10b86c90aac01cd84b67a0109b55a36e9328b1e365fce161d71ce7131a543ea4cb5f7e9f1d8b00696447001400" #h"0c3e544074ec63b0265e0c" #h"1f0a8888ce25e8d458a21130879b840a9089d999aaba039eaf3e3afa090a09d389dba82c4ff2ae8ac5cdfb7c55e94d5d961a29fe0109941e00b8dbdeea6d3b051068df7254c0cdc129cbe62db2dc957dbb47b51fd3f213fb8698f064774250a5028961c9bf8ffd973fe5d5c206492b140e00") (:ed448-signature-test #h"258cdd4ada32ed9c9ff54e63756ae582fb8fab2ac721f2c8e676a72768513d939f63dddb55609133f29adf86ec9929dccb52c1c5fd2ff7e21b" #h"3ba16da0c6f2cc1f30187740756f5e798d6bc5fc015d7c63cc9510ee3fd44adc24d8e968b6e46e6f94d19b945361726bd75e149ef09817f580" #h"64a65f3cdedcdd66811e2915" #h"7eeeab7c4e50fb799b418ee5e3197ff6bf15d43a14c34389b59dd1a7b1b85b4ae90438aca634bea45e3a2695f1270f07fdcdf7c62b8efeaf00b45c2c96ba457eb1a8bf075a3db28e5c24f6b923ed4ad747c3c9e03c7079efb87cb110d3a99861e72003cbae6d6b8b827e4e6c143064ff3c00") (:ed448-signature-test #h"7ef4e84544236752fbb56b8f31a23a10e42814f5f55ca037cdcc11c64c9a3b2949c1bb60700314611732a6c2fea98eebc0266a11a93970100e" #h"b3da079b0aa493a5772029f0467baebee5a8112d9d3a22532361da294f7bb3815c5dc59e176b4d9f381ca0938e13c6c07b174be65dfa578e80" #h"64a65f3cdedcdd66811e2915e7" #h"6a12066f55331b6c22acd5d5bfc5d71228fbda80ae8dec26bdd306743c5027cb4890810c162c027468675ecf645a83176c0d7323a2ccde2d80efe5a1268e8aca1d6fbc194d3f77c44986eb4ab4177919ad8bec33eb47bbb5fc6e28196fd1caf56b4e7e0ba5519234d047155ac727a1053100") (:ed448-signature-test #h"d65df341ad13e008567688baedda8e9dcdc17dc024974ea5b4227b6530e339bff21f99e68ca6968f3cca6dfe0fb9f4fab4fa135d5542ea3f01" #h"df9705f58edbab802c7f8363cfe5560ab1c6132c20a9f1dd163483a26f8ac53a39d6808bf4a1dfbd261b099bb03b3fb50906cb28bd8a081f00" #h"bd0f6a3747cd561bdddf4640a332461a4a30a12a434cd0bf40d766d9c6d458e5512204a30c17d1f50b5079631f64eb3112182da3005835461113718d1a5ef944" #h"554bc2480860b49eab8532d2a533b7d578ef473eeb58c98bb2d0e1ce488a98b18dfde9b9b90775e67f47d4a1c3482058efc9f40d2ca033a0801b63d45b3b722ef552bad3b4ccb667da350192b61c508cf7b6b5adadc2c8d9a446ef003fb05cba5f30e88e36ec2703b349ca229c2670833900") (:ed448-signature-test #h"2ec5fe3c17045abdb136a5e6a913e32ab75ae68b53d2fc149b77e504132d37569b7e766ba74a19bd6162343a21c8590aa9cebca9014c636df5" #h"79756f014dcfe2079f5dd9e718be4171e2ef2486a08f25186f6bff43a9936b9bfe12402b08ae65798a3d81e22e9ec80e7690862ef3d4ed3a00" #h"15777532b0bdd0d1389f636c5f6b9ba734c90af572877e2d272dd078aa1e567cfa80e12928bb542330e8409f3174504107ecd5efac61ae7504dabe2a602ede89e5cca6257a7c77e27a702b3ae39fc769fc54f2395ae6a1178cab4738e543072fc1c177fe71e92e25bf03e4ecb72f47b64d0465aaea4c7fad372536c8ba516a6039c3c2a39f0e4d832be432dfa9a706a6e5c7e19f397964ca4258002f7c0541b590316dbc5622b6b2a6fe7a4abffd96105eca76ea7b98816af0748c10df048ce012d901015a51f189f3888145c03650aa23ce894c3bd889e030d565071c59f409a9981b51878fd6fc110624dcbcde0bf7a69ccce38fabdf86f3bef6044819de11" #h"c650ddbb0601c19ca11439e1640dd931f43c518ea5bea70d3dcde5f4191fe53f00cf966546b72bcc7d58be2b9badef28743954e3a44a23f880e8d4f1cfce2d7a61452d26da05896f0a50da66a239a8a188b6d825b3305ad77b73fbac0836ecc60987fd08527c1a8e80d5823e65cafe2a3d00") ironclad-0.57/testing/test-vectors/elgamal-dh.testvec000066400000000000000000000300041420372057600227540ustar00rootroot00000000000000;;;; Diffie-Hellman test vectors (:elgamal-dh-test #xda3a8085d372437805de95b88b675122f575df976610c6a844de99f1df82a06848bf7a42f18895c97402e81118e01a00d0855d51922f434c022350861d58ddf60d65bc6941fc6064b147071a4c30426d82fc90d888f94990267c64beef8c304a4b2b26fb93724d6a9472fa16bc50c5b9b8b59afb62cfe9ea3ba042c73a6ade35 #xa51883e9ac0539859df3d25c716437008bb4bd8ec4786eb4bc643299daef5e3e5af5863a6ac40a597b83a27583f6a658d408825105b16d31b6ed088fc623f648fd6d95e9cefcb0745763cddf564c87bcf4ba7928e74fd6a3080481f588d535e4c026b58a21e1e5ec412ff241b436043e29173f1dc6cb943c09742de989547288 #x42c6ee70beb7465928a1efe692d2281b8f7b53d6 #x5a7890f6d20ee9c7162cd84222cb0c7cb5b4f29244a58fc95327fc41045f476fb3da42fca76a1dd59222a7a7c3872d5af7d8dc254e003eccdb38f291619c51911df2b6ed67d0b459f4bc25819c0078777b9a1a24c72e7c037a3720a1edad5863ef5ac75ce816869c820859558d5721089ddbe331f55bef741396a3bbf85c6c1a #x54081a8fef2127a1f22ed90440b1b09c331d0614 #x0b92af0468b841ea5de4ca91d895b5e922245421de57ed7a88d2de41610b208e8e233705f17b2e9eb91914bad2fa87f0a58519a7da2980bc06e7411c925a6050526bd86e621505e6f610b63fdcd9afcfaa96bd087afca44d9197cc35b559f731357a5b979250c0f3a254bb8165f5072156e3fd6f9a6e69bcf4b4578f78b3bde7 #h"8d8f4175e16e15a42eb9099b11528af88741cc206a088971d3064bb291eda608d1600bff829624db258fd15e95d96d3e74c6be3232afe5c855b9c59681ce13b7aea9ff2b16707e4c02f0e82bf6dadf2149ac62630f6c62dea0e505e3279404da5ffd5a088e8474ae0c8726b8189cb3d2f04baffe700be849df9f91567fc2ebb8") (:elgamal-dh-test #xec6d9f4922c4b88d8d1918ced6f9eb56bcfd2bf5ab4578c0074918d9196ea9b90b9d56c23d981646953ce04afe702fa10d4190e676fa9e37330ca0aa0c79bd1f271cbcbf8f8d4e27d3078113aed0f7f9b6514f1d70e88392ce3675577cf20d29a9bac7297be781bf8b27ffa3e862b4f17a99c5881fbf473fa277219322859b2d6caf73704f4d5c2f5d6aa53e5debec4c580a717f51e1e654f1d7334900c3e7c88b08fff04e4eb3a17552b671c6ec44556008bb65bdd7ee82c1f614bd8060bafbda7f6f2fd8b53a2c2a00edf2d5b1f3283393d196567feeae5ea8d2ceeabe53fdc9edfc9a2483d9ba47c79b54da03dd884ec447b367161efd6b3cc62e3ed9977d #xaecb0bce4bfc90dadda6353533f7214ad4f9abc2e2fa67da3e7785c26f9b44c33c46caa99f1ade901d6af729d437b9500df739047de7d92f751d49a622569d5f1c882f28bd5b54e8ffe57fc43675bf58c40becb93fb988b7eea49b6fb5d63cd7f7a96572ce4e2b2da9b9e46ff70ac4e68b90684602d882363925f0b836062f7f12c3e639d09e3ea34251ff30b9ea1f4bd19199d371ef41d8017dff39cffb2b56dc2d7f20cb8ea074421d9f083e2e5a340454877459d8ee82c5d2eed9b6d6d99c245b9ab1fc76e99363eab561bf110288c470a23cc6f415bff26f3d808ebf06442da31c100fce731c282477184c1a8fd2d27bcab967e33bd3ce3d2a6dd57f3bff #x3abef2371deeb26adfd40c1788b514c5f420eb09fa5e1bc0f9a552b1 #x6088cd6a9308c4418d17f3c2764c5ac98d62c5655a3128b6bd2d81a6f2937347ad8d8dc6d01ca6a231bee08c187261ca963470e0cce76c14cf05e9b7b391642ae9d5c5cfe99d49d352d5f8e772815355800550c76c1072098216183e580f973c1aca1244a3a0cdd322ef6a70bb3d9d6067b8405191c7c217e11e47eee85adee1ef73b4aa565233eb323da013b9fa00b0664de3aa289ff70fc6339ef2b94ecd2bdba9017e9503b149559348d1cf461f41e8a12937157b71b14b7e514f907d07e95496874b559ce25eb6c6318b4ba050ffaa521b8b8233ce5c93cf0c2aafd4a59b27268f943feabc81e15daee6ac847036cc962d28b4d1d40f3968c695432881bd #x6f01b4a219e081b50f856aebc011e41680692e805a498df408960dba #xe796a148656a2b391a6f81dd7f83ad4a3a72f629a87fad6ec9f4616e0ae0b3de34cfb0640c0c92c1e8d845c517258bebcc9d8ae7fdd77dc72c6edc0ee05c2561294c0ef50ab90ba3b740bac32c9a2df17294f22bf5fea474e7ff48daea6abf48dba6f6c7562a6ddfaaf9c2146d3ae2f1de8b9e68092ad76caa767a2c96975fc8b1a88e8848eb089c438d5f932d633e79da19808fa3a1e411ad260565c4954ad32bb0d94b0b746f5266241928f3f0a4441f318700d9e93c6d0f7d57e883eb8b373f4e7893285967028e9e09c774344c05418d6359236fb092f2e3a454483656817317abf309cd7f8016c501133bb8b40875a0ff3b04580abe4d4e717151105bd2 #h"b5f47d4a7dabd5e69c2890df50c0cd6f4ab9568fc66779381fae5385b80d7577d5eae00f307ab39b7efc68f885c365e19f0a30c65ecb46b95fd08e0ebeac55d3d012b9f70294a268a254069574fb07a31625077b720cc1b943ab205e7a29e3dbefaa4701a5afbb05e3d90ffe7c5f1b9ca9ad77d14a7d4448d7b7f552ec18aba47dc034a8268b0438cc2ee4f1dad9f08000bf371dffeb8be77a7521e786add03144be775ce1c3425a62226b1aacef10476e6936b831828d9c545ddd9d6c4e76861ba1825deff55d4bd3b0c4a9a938fdef3adbbea48206902b5665b9bed6b7c12eb5fd8c0b6da425654b41235d7852e139073bfb2cb7dce01294eec20f85847cac") (:elgamal-dh-test #xec6d9f4922c4b88d8d1918ced6f9eb56bcfd2bf5ab4578c0074918d9196ea9b90b9d56c23d981646953ce04afe702fa10d4190e676fa9e37330ca0aa0c79bd1f271cbcbf8f8d4e27d3078113aed0f7f9b6514f1d70e88392ce3675577cf20d29a9bac7297be781bf8b27ffa3e862b4f17a99c5881fbf473fa277219322859b2d6caf73704f4d5c2f5d6aa53e5debec4c580a717f51e1e654f1d7334900c3e7c88b08fff04e4eb3a17552b671c6ec44556008bb65bdd7ee82c1f614bd8060bafbda7f6f2fd8b53a2c2a00edf2d5b1f3283393d196567feeae5ea8d2ceeabe53fdc9edfc9a2483d9ba47c79b54da03dd884ec447b367161efd6b3cc62e3ed9977d #xaecb0bce4bfc90dadda6353533f7214ad4f9abc2e2fa67da3e7785c26f9b44c33c46caa99f1ade901d6af729d437b9500df739047de7d92f751d49a622569d5f1c882f28bd5b54e8ffe57fc43675bf58c40becb93fb988b7eea49b6fb5d63cd7f7a96572ce4e2b2da9b9e46ff70ac4e68b90684602d882363925f0b836062f7f12c3e639d09e3ea34251ff30b9ea1f4bd19199d371ef41d8017dff39cffb2b56dc2d7f20cb8ea074421d9f083e2e5a340454877459d8ee82c5d2eed9b6d6d99c245b9ab1fc76e99363eab561bf110288c470a23cc6f415bff26f3d808ebf06442da31c100fce731c282477184c1a8fd2d27bcab967e33bd3ce3d2a6dd57f3bff #x13309c3a9d824a4fb0e6c103bcf33504e98a4e52474a62a28e68269e #x4ede61e9c7444400fcacf1d91e4a6d1bdbb68166668a60b2f54593ee9cd9861cae788e0d8c1deb8e109f4f051cc339477acc08b77d5540bbbeb290dbe1f560b6c4d35223a8ffea34d91c5075e11e2439f58ba2ef606347588250ecfc909e27d8b43c4d8765e51ee9a147fdcf829062dfe99b342e0e3a253561ea6107236760b7334b46749aa85e96493f5c1e1e52177840aaedcb64b98987571154095130ceb249de8f2410e6ab511273b02dbf733bdb8134d5a19a28690b38ba8e0802cf9414d28c1db4864a5c65876aa364aa80dae00df7ecd01fa2089f1dcd843a9f6d87dd018dfdb171e7d5b4e67d0e9d8564019367bf726ce21f08aa52bf0bdd619523f7 #x2cefac774b820ffff233f843981f00feb396095bc4dc6462398d5251 #x97dffa91e261f7d56ce9d3cf014de4fe76f101ab02c63966cf2a4aaeb26f8c5006d4a9c664c472c24c683b26852a8dc89fcc517261ada6f365bc625f2e5d223e6f6e81ce451a97143e6d8c5c6db5ca62af32a6eb178ac027504c03f96f5c5448ee527ad639dd4e54de239ac9e2104672af2b0884ef951cc0b50a5af225457cb7364d90dcbc0e357d46309203a387769ca6dc24903bf108d01d975546405863e0d1ff61460e158254fd4af495badffc167742df5be8c8228fe038fea95342f762769cddb74b109f90d60b2a5e2a17c791ad3ea71fb48f064e1a0ae1f901953294394a7cd54a08de0ae52c9c0805c0d862c830c60d4ac66551e5dbdcbb439de29e #h"9731a340d8511a83cfee6497b5bb9cc089678e0be85df16b4afb36bc597a949f8bf49941f3cd514faba6a2cf41928ed87b4aafd4d0febc3774c868e02e0bbf644c2f675573a048583babfb4eb11d41921d392c4f10bd81f096af9510a76eeab652fede4ba4288e876122e265aa7f9415830f8274958f106d24246b488cd0d80ad117bc631d800db5e059db630769a86f99e87d483006358a6faeb44a8e1646d7e9c44a60d8d8a1a36106f01484fa3da93b56e4145c7f156ce848939f79069cbef22bb52df7008adb32880d4da2e803fce901498d8cdcb7fc317ab129ea1a743870b82ab4c5b5acb20dbd4e7f0dbda93ca5faa84aeb556237d25fe56ee21d6b5d") (:elgamal-dh-test #xca60d25245efbba8c7f61d2344fd692aa42df7842b83131ad8e6afd94f51adf01fc79a5db87ce2f7c2235fec416ae9d1268e1827b179a3602add735d167d6034cc4f6e33671e6e68bb5340ffc7e8172ed183881d20f773e271ff5db5524bdc3b8bf3ea9e505c993c7879b2c3575c25e0c66800266998ec45a0f8fcfb44884d07156ae63b5be321944453a5c425612a6d76d44fda03530423ffe08245a86702f6b9d7bc87103c4094d9cbb2a69a6560386f025cea444c2779a576efdfbe470209d091609c29a3321402993f820a67de6044a9a3eae9c11d882de1c19a8dd8f8bdc4193c432826cac60bed5e691b441a4c6995d1fe3117a9418777e767afdcdeff #x758d43fb520121e1ad3d6af76e9e84da1057741594d14ca75d6ca296217df11f62db8703f3e212c8bbd381a961a83815f41e4135c068d27417d320acce6285393d8c456bf1298c29545426ede51ae129063159c9467ae7fea75864863a4b2d01feaf6e3da76caf62cfdb5d63751a6188f31b1191f46c0dd141079b16cf545d7c8db633759295efeb4357f8c7bb23006b5f541eb8b7d16f8d43d65b69455e159727fa281cd80a01c4376922a2f0ddd3e1f61f42297a212f9f27fde0ded87974eb63eb1bf3f65986bce9868a88590196779f95e00a87bb271ab159e09c2596ae58e507ab285a0b0b1cf67aac8c31d51bf8da4d0ef99c7e9d5d7cfb765f75cc0a63 #x901729dff82c5cfff88714e327ea3ecc91b196697c4a214fee614222 #x8be42d22a595c7e00c96a17e13976c91fd8da0b9a67ffc5f76295c07df05153d6c4ee14ce3731f290f3aa06bdd35e2d5e069227a2eea34cb0e7c83d9458a9b904f84ef08cab7281ae68a17f18e2a183241b6f4dd7eba7ee2b1b27279ea38c68570d9747020d111d55963a1680a870bd92637abd24e1050d96584823a7e22ef675e54027d20bcd71ecab5d2093e4001f861226b398563a00b88d1dbfcba12315b9285ed8cbf5d183a6f27c8705b2d2da4563582b9b6c4876f3cdc6e41dd593e04bac5a3c4598cbe3f67d3bc723de2f13b4847b2266b7f2ae4b7f2f3c092e0fb5c78b6d65afd54141ec9ba29ec607ccd8c1329bce166029b8395805e6e18441c97 #x7a0fcb52b0497a6830a3efe0828054aa629fc9818bb1562c4a6b1af6 #x3df2f085a43491c109567037d6d21f75fff6e1b458d81f63a29f673c67f1fc646fa07a938a678370e2c412e224d8ad8cb5d7d0d1bd2a340d07d107449d7c6498c3911cb275789fef3e27c3322cad2376b74bce8fd045831f2db8803131a6502b7a9b6e515e93c1653cc410a2fbea6be0d05b337fe3a992d4c871815adb3218d7bd10e2bf870006f45658c0e8e3f15e8e7bd67ccd104bf2445b2681a2739effa234dc567afeece9c4a1debdbb0c615539eeb756b7d4966ec8354d7add5812abfdfdd3fb82b284e00c3cbe11c195b85aef818c90f0220575e3eb629a52514b25425bd01cb390905874c241d3c9dc771a359694d7bc6bac42b3ababd78005a6360c #h"8a5b80886761bcfe35c50bd16a5295d88071ad11d8201b0dcac83d1836c0603e1ced6a7e074e57cd2bc009a74723a88f2dda650110f2b5af8005f5d5b4805ca8169ee738c188be533c4fac444fc70dd280aad6cb818ecee408f7556dfb0b0af4f07b26d81dc2037a3fdf57f0d20373b0e63462e20ea5bb9481572dd1b2b5ef263dd88148e871e48e8146ceebc49d986dc79f42683ee0d64790f4cac79a85780169df50d2eb68a6fd76a9c19b20254701d09808c5a072845c467845b4928753396c1843407acacf2b6d8d9e1f6b07e9e272d553762e4cf8c16da2fb683b74c210722c4fe576a252353162f9a690de6b76f29db8b8f556942a57499ce310459351") (:elgamal-dh-test #xca60d25245efbba8c7f61d2344fd692aa42df7842b83131ad8e6afd94f51adf01fc79a5db87ce2f7c2235fec416ae9d1268e1827b179a3602add735d167d6034cc4f6e33671e6e68bb5340ffc7e8172ed183881d20f773e271ff5db5524bdc3b8bf3ea9e505c993c7879b2c3575c25e0c66800266998ec45a0f8fcfb44884d07156ae63b5be321944453a5c425612a6d76d44fda03530423ffe08245a86702f6b9d7bc87103c4094d9cbb2a69a6560386f025cea444c2779a576efdfbe470209d091609c29a3321402993f820a67de6044a9a3eae9c11d882de1c19a8dd8f8bdc4193c432826cac60bed5e691b441a4c6995d1fe3117a9418777e767afdcdeff #x758d43fb520121e1ad3d6af76e9e84da1057741594d14ca75d6ca296217df11f62db8703f3e212c8bbd381a961a83815f41e4135c068d27417d320acce6285393d8c456bf1298c29545426ede51ae129063159c9467ae7fea75864863a4b2d01feaf6e3da76caf62cfdb5d63751a6188f31b1191f46c0dd141079b16cf545d7c8db633759295efeb4357f8c7bb23006b5f541eb8b7d16f8d43d65b69455e159727fa281cd80a01c4376922a2f0ddd3e1f61f42297a212f9f27fde0ded87974eb63eb1bf3f65986bce9868a88590196779f95e00a87bb271ab159e09c2596ae58e507ab285a0b0b1cf67aac8c31d51bf8da4d0ef99c7e9d5d7cfb765f75cc0a63 #x95da6f68a812305e30882c4dff1c36b6caecb9af858682c9f6e596ad #x291a52bd4ec13c1847ffdae24ca3a6dceb84efc9e679b359056cfa5dc96c32f773bc8ca88b01e3bf7e25eb920dec84df1a116c32c2ab8df0f070679ce2a623c999e78b24ceaefe35e71001fd00eae930360fae163c5e6f9d153ba5838a291496a44f933a8b06e4fb024639c928571ed3a735d57485ce607794bf03330e5b486cdbe6e440aca92f167960d8c957ac4e3af66b2679f91f9d83d9fe92a1bbb395bf6a65135f19c0a53e4ea9108eeb35d04917f4b0c7a17cc207f5b788de041303ed804a71cb3c564e25f6fd7864e9112ef7f7b987b454d9db935826af2c637f2e1690b36b81558512c6299468bd7109309febe3a7d813cefac7dc8b4850f7b3e7ab #x2856184c146f10158e098cbb85e8750c8a801a7385ee62661fb25387 #x2d45330e91ed041a045561db69e841df2da819aa1c73d0d688cb0a1483d8d60635bd680e1993f1b309b85f579365d2c3930ee3ba0b2da3ba9fccde741772bc46dfd1ad1404d5770c8d97f9ea03988ea4b805f12c56ecaf18606558cba420327549950404ae4884c2090c123d097ec036a5f3764701ce432a0901683fb3d7640b1e4120f62c777e2efb7569d408bae10510ef035a7b76f78d92562bb7c73297f1ce578c6bdde2484911d95a57ed1c825ac2a1cf49add8cff4d7b628ffd88e4a01b7cadf9174e64cc94e5a4676000c981ae93d0a155dc57abc90f3e7ca92fb7173efde1c385244aa86369643845672b7cd6f5dbf1d7f4fc7b818595470cea1f013 #h"8be7359c50cc88cac5cd2788cc9ec3ae377aec2befafaa2f79981b759a0e673d7dd80b863e5228d333bac9fbfb3d61dd734420eb31ed3d95b06e6a7ff148c7b5042c8328c5b4a387c2d4677ec055c2121e92f84e3cce910691170668119da102fbe780fad7e4f7e1b640d9c555eeb96e815b03840698dd02d7cf36d8f54a43dda8582e7f5d0041e7012e5d4be567fe7d0ba80f5e33617ec54f701016d0031dfc49ea1e3358dae6e8c7e918c5b7d880a1480701dda018ae5c13530c067c0cedb41ca4cda4436b71b4e00bd102933981413d947fe1c331c3c2499feb36941945e1d6284d95dde02571307cf5811100572e476c05de8422213d9b84abd404ffa18f") ironclad-0.57/testing/test-vectors/elgamal-enc.testvec000066400000000000000000000022061420372057600231310ustar00rootroot00000000000000;;;; Elgamal test vectors ;;; 256 bits (:elgamal-encryption-test #xba4caeaaed8cbe952afd2126c63eb3b345d65c2a0a73d2a3ad4138b6d09bd933 #x05 #x1d391ba2ee3c37fe1ba175a69b2c73a11238ad77675932 #x60d063600eced7c7c55146020e7a31c4476e9793beaed420fec9e77604cae4ef #h"48656c6c6f207468657265" #xf5893c5bab4131264066f57ab3d8ad89e391a0b68a68a1 #h"32bfd5f487966cea9e9356715788c491ec515e4ed48b58f0f00971e93aaa5ec77be8fbff317c93e82fcef9bd515284ba506603fea25d01c0cb874a31f315ee68") ;;; 512 bits (:elgamal-encryption-test #xf1b18ae9f7b4e08fda9a04832f4e919d89462fd31bf12f92791a93519f75076d6ce3942689cdff2f344caff0f82d01864f69f3aecf566c774cbacf728b81a227 #x07 #x14e60b1bdfd33436c0da8a22fdc14a2ccdbbed0627ce68 #x688628c676e4f05d630e1be39d0066178ca7aa83836b645de5add359b4825a12b02ef4252e4e6fa9bec1db0be90f6d7c8629cabb6e531f472b2664868156e20c #h"48656c6c6f207468657265" #x38dbf14e1f319bda9bab33eeeadcaf6b2ea5250577ace7 #h"290f8530c2cc312ec46178724f196f308ad4c523ceabb001facb0506bfed676083fe0f27ac688b5c749ab3cb8a80cd6f7094dba421fb19442f5a413e06a9772b1d69aaad1dc50493fb1b8e8721d621d683f3bf1321be21bc4a43e11b40c9d4d9c80de3aac2ab60d31782b16b61112e68220889d53c4c3136ee6f6ce61f8a23a0") ironclad-0.57/testing/test-vectors/elgamal-sig.testvec000066400000000000000000000032331420372057600231470ustar00rootroot00000000000000;;;; Elgamal test vectors ;;; 256 bits (:elgamal-signature-test #xbaf66cb74820f7dbce4f1ad05426e8965d2fecc8874a80c77caa97e564ac82eb #x454d7a086675f7dfc5b8fae55973e348c2beb2ae92740df01a806ac8daed3fae #x2f4d3faf069b17af887dad47d71b1392dac5cb3f636945776a94d79de1161fc #x68359f51a08483575e2be5bc0dfdcfc4982b5387d9037c212ded21986090b889 #h"af2bdbe1aa9b6ec1e2ade1d694f41fc71a831d0268e9891562113d8a62add1bf" #xa8d7901715afea41d191f295fbe4ff650583f8f6bc90ff37a58cf38c30aa3001 #h"411e2a449fc6d1f493d9b2e2e73fd63b7c18478ba05494bf5ba148e7e77f325c0b2199803a6fe705b3550cb238dddc7a6f542f92546aaa19ed70f92eb09d7b7f") ;;; 512 bits (:elgamal-signature-test #xb977f74d5e479f4be08e69d59bbbfebc868a1407682e551592dbed9b9e0c8a92dae7c7008743e082e864e6c582e951155a5272c777a8bac6e6daaa1e005fbd4b #x9454b26e51875063a120e7e2cd1ef95e12e5b4fbb0ed84ac4f5847a76527ebfacb18d4d74b99f1ae29882070591a110226e5e061433d6fbada2e9b25ab16b091 #xa1787b14ad8a953cefb3433be54d1ea84d137ed53dcf143f94b19825c4f024cf9947387109f2713963f537e203d31f33f0a7c58df52125d85d504293f310c093 #x1eb8072986a950211d8177297a63e7897bfc93c49243a2cca773c01d081737d0fd2837e4fcd37e109abd8e0f6a6716f82baff757fc08f325ab1fb7183208f9f0 #h"39a5e04aaff7455d9850c605364f514c11324ce64016960d23d5dc57d3ffd8f49a739468ab8049bf18eef820cdb1ad6c9015f838556bc7fad4138b23fdf986c7" #x790f439dac205cf43b4e451d168fb6b305a92da40743c1c8687aab54c329911e7e4dcdc814a2553882fbc53410a8738fccd8810654e8be61501f9d8770111b95 #h"9326cf824df7359954f77400adc6fb6c01de7c109025dbf7ace2fac24dde4390d4755683c56f639397ae3a91076a64c2fac4b33bde4c2d576014d2ff726367910b19bf5add4fb29ac281870b89fbbc4bcede3767fd8fcd52674404c2c5dd3e2efa9d4fe944c50d3f9fc1e674c4f7478af2c1c2b50cf29cdec669d474099e8922") ironclad-0.57/testing/test-vectors/etm.testvec000066400000000000000000000204631420372057600215560ustar00rootroot00000000000000(:aead-test #h"" #h"" #h"" #h"2a649f4985d6484e32fc0f48a848a7ef" :xchacha #h"93aed2e1289879be06b5f02fc60e0b8286dd66c48535767079460817d387343b" :stream #h"c752efff9de29f55baeb00d4bc680d14615f9a03ca53521b" :poly1305 #h"5563933ea94a5b6b7c449a24492bd9692a649f4985d6484e32fc0f48a848a7ef" nil) (:aead-test #h"" #h"f257a38061cd19703495" #h"" #h"166ca4eb9151737c84be067a1d6aabda" :xchacha #h"5e528954fc9df9a20395987235f1c920530965464ccfd326be564534b4824a6a" :stream #h"b31c4b04c25e204dcdc0bc37ce2ae95a540c0ce0d6b78264" :poly1305 #h"fe5900dd0304e84ef2310cc33f71914670fecc779c86870d5e4ff992bbedee34" nil) (:aead-test #h"9b5534bf04be3c6bada9" #h"" #h"3a4ef5577e7ae523529f" #h"a55f447e03033bd72995fbe949407348" :xchacha #h"e3674c324507bd5510010190b4345a6c449fed254fb2ce7692ca46e142593426" :stream #h"f438243815b948b01e35a1c433b11d7aa15457c7d9c7688a" :poly1305 #h"f9e05ba648dc169542326c37ff2d8b9cee92b8062140502abf3e80246cee99c4" nil) (:aead-test #h"b2fdafc754759a9cb443" #h"6527dc52e3a0115b60dd" #h"3e9eaa44c82c9a912385" #h"6555c9899db951c39f61c6b0ad2b2e07" :xchacha #h"858cf6796717051bcc25e7831fc35bed3563a8f68d471a773d6d76e81ce945f7" :stream #h"69d7a581dea5fa1d19400b233bdfafb26195cc69fa53cfe3" :poly1305 #h"b970030f93e39ddc667ad4bc510a42f19faf74cab409ac12f8805b40560e7456" nil) (:aead-test #h"9d80262dc7a06df77e44351e20f0d229" #h"c805e42150d5db6a06950c96a472e079" #h"715447b6bedce8459945d5c808b50673" #h"c716ddd387a470422a90f070588c3fd9" :xchacha #h"7369b47a929d74af528c15fc568339662c59e8a713bdacf7456ce785a2810e37" :stream #h"a2c8fe826023a5adfb949c544ea5a9c0cd84d0c543b5720a" :poly1305 #h"9d37c4d2268b53fe3168456a2f1aee3a57886c15ed34b20ccb5713a74bdc56f0" nil) (:aead-test #h"e3c39727cbd0627318d86e5723" #h"5c8dff9c6ab8db840ea35cf22e1fa6dc0809c549" #h"1a7b6b87675078d6e41de82cbe" #h"8a8b6d61ed469ce077bbc76a89233cb8" :xchacha #h"d470fd3c11a281296e6859cd34a53eadca9f3e829aa4dfdbb7091faa026e5797" :stream #h"9b4f956c468708b9894f033fd45543c763fdcdcedfb65110" :poly1305 #h"a5a9ceef8db96951e8e1f9e1c2c7bd120918e9b064ca62396c889a72ef391c8a" nil) (:aead-test #h"48843dd763c072a08091d0087166c9ec1b81a834" #h"9c81accbebc1410307e9c0a1bf" #h"10543683f12417992ea3b1e7dbc981bcbe0ab5a9" #h"b737a162d7010d008edda2371808507b" :xchacha #h"3b4daf4eb0d38ec956909e8f23f3577a4f90642f1b5ac706b62d31b92bd51467" :stream #h"96d1e95cd1d4fc57477c051a1f587ccc3358052db32ace91" :poly1305 #h"945f140ed4575e69cf1c46bd558559d948877eee7872530417dec0ab3ff84d6e" nil) (:aead-test #h"5f0df37e6456d49039db9f9910c78a8bdee7a027fd4f2270030397a4f650177aa567de87fd234afe0057ec33c6ab96ddd1b6a536614278dac2a794a5a3a7466ccb96428f23000253679f4a69bb2db6afc1d70dd1b3f9b93044ef22b30cd7a24594768b1135d872b5408047a1e682d0678ff26ca86a67cf13040ff5cea03fde961839dfceaa839ffd862fb74f47349d1f3a4df5fd8ed8d0b2b7b274a84f489d4db3f274cba0e367a87ba0c43258a13e75a9d878aaa0026d0994666537506bae53975ca18d66311f26ba853acb313279bd0cea927d28b0ad9eae97bd80e0eaa9eea5608ea8d10877467b3b384812c32909c320426436bdffc8290cd8265a5115fc62683e07d4e19948bcff11f97961b0defb5b932ee986239f17d9d8eedbc91deca831d28052d3a320623ed535c4e6f9e618f7ccb475558350eb2ccd658125492100e31689c0efa6235fa0fc0ca0014fae8858962da4d29f5921d8673d5e7543c443b057a2d246f751ea33ebd9cfbcd80ebaccc378f8cc2028de2a9c827f19b2df29c3b466c6ee68ffa8415a9b5c86ac1b96f274724506e4c997d7785135861aead4b815c164bbdfd35e6317924fbc96c0eec735486cbe1616f2a3580372ede15ec053d4a64f5762cb6ffdb3f9dc7c30b58a89373f4f0e85fee6021694a817a6abcdb49d034c9c6badb57b333c474f45269b9c9572cac854f3476f9f8288f4899f8b2b05d20443f9f20e9ea47dadc48f0521fd25d36040bd9ce8e798204c158a880196b3aaa7e69502f6618aac0f8a6658f2357fd577fdaf791e011f2a5350bba1553450a38a430d979474e88e971768b38a91374d1ac3120d8605cfa7820abececc0d9ffdd4a59cf6b53ff751e5f363bfd3a494d739a81b29fc9baeb93f08482a86dc8a52403ad668deef0005d0c2b51fd4445bb7516d16618f524aeafa11fbdf99787ae682446bb5407f8a04c742ee5641545d2eceab99d80d7bff9a67037485f5d155f8e479dbaf7ff039af61d14100" #h"a89f53c1f0ed2972171b25645cbdf3a61b371e48d548fb6062e5cdf2a8b3e40b4c797781adf7fe428a11954b4ef67d778d9efaaa45ac8504b38f7eee33515dc69ea90dd3ea348f4feef9c5e89260b60b2e07302797488834d3e7a096a822a82cf9df244749c39a9ef7b0ead1425ee73ee47e84e2479ded3ed050160a2862b648d1d9938cc90ea7cda0fb324d8550ab30ccd3e670b885c6d9f7a8422bb16c467ccda2b33062c07dfab33372cc9c9490640bf0d2bac66ddf76b288993c4ca1116f8cb3eda4fb07318b7378df90906a906068baa259859f5dc153a9752c850a5a1a1866aa0d893b80ebe303ee4b07c48c09b19984bc8f4efb2caed2d382b06063d6122f34e63094f2671ce095aa5c5631e792c6f77a03b70559e83162c74460ee59054c8798ef429a8b59dd4214a880a014a5063d58cfbe8aa4e86450a8240ae715e2ba3bca339d81da3c0965943828d86ca5ae83833fc00dea55c1925454f73da0af426d0be8637b726e1986ad2b9a7c25210b3bebda0134835d878e4d2081d973c55dccd656790993c6ed849090eb87af9ae46bd05255a87fcc09305cba2448b8fdb25772526c197460a515439dcdda40a24e245d66197671ba6be52d4e0475364a0016415ef5993511c71e201f3f9906d1226e70200dd22a4b5d7265137093679c7774535ea83f32ac9665b123c7993db2d8a12b1a754c0a01a3810821215d59ef6a360161133394401f51d9d27db064520075df0f6366d19d1a603156dcc2c5e1c2971a7dbea58d96f5a527776addf43551d33eab6efe05ea73172bd59d078d7e606e2f4d3ff1ee8c0b090bf7eafbc50474996c4ed94e954358d72f47eeb0feffeba1ba5873afb04ef6f18c4bcf8036d9264a14553377a0f0498af9e0f151a052d535304cef6e4b2f7f11dfefdf0b13754053f45186a057216533dbae7e8cbc18618081abd0343bbb11e62d25e8b88212b54059318e811c84f6d6a64d68f5d194685965679c61f856820bd42e6b2eb0" #h"179c7083b125d599f443365ae4b4bb72083decb99b7e81948096f5937839dda7acb1d62e7f3e0f32b108a072a9a719809f758a435ea2f30241b0ec57b1033760eae66a46b684c65355d0cc0bb75ce069ce398066bda2ab693997c4fa817935600c9370c94a96adbba71f95933cd8e35a79e99b044c3ef430c88fcdf83776f302715a93c2c7f092e70b1b83daf3db0fc9cfff2aa5451b8b9667aa14cb7b985435c305bbef5d129f50c3cf51dc80215754b529db18a21d59cce6c470fd819b45d9ebe1ae4d65829a965e5c490a65af16ccdb481ed06ccc90f042cba927250a808c96c9e9f47bb05fde29ec163ff69c4b25950f0ef6dff0e192b4c00cfd3ff7f03d312784d4d6ef4101e0a20702404ff6ee3c1f31af6b79ee061f3b0eacbca151074b351e9bdcf6c2d20350276d589ee427208036a20ed7dc1afdae4f0d13e9e05de1112b7ac0de1cdab93b5f2013b75e08ee366d70cffee3350b002deb1a74ee1f2026935315c06fe6167e1ac7fda180987b31f2f5ef245354e0591df2171ded74287b86cc824f9ab32272e87dd128fd403ba3c4eb0362d9645624281816b83e032a8291a668d07df389f6b2395d899c76635086ac533a355c902557ed0ba15c3802880c7549fea7d506d4afefe56d15b4a583240c07cdef2cd3b8f03119370efdf1629ea60876680e91b2d05d5dd43cb2f233e53a906fc2d92f343e33f736bd784d447d7ea879baccec4e3bd7af626fdecb668409a7a393cbeb315d55fec6716805431cb263f725f0d6d34338dd6292c700bfb69812e7f542c2528cb6d74c4c0bc9aa6732bb1543b64fa8f7457c8edd55106e65110412fd77d019f35238f546ce5b44b6f28ae3cbf9ef174758213766404362092dcdbc99506fce50885a562200b1aa6905515ab70876e2614fcd9b2fbd275cb71262cac0f781382ea8a59ff5cce8a79301d80b9b0932ae15c0627356368e0793875f5c09f6422c531e528ecbb153fd3fd22801803d7c926b848b3480ec" #h"55b9db34f311444fc8999b7fdb6f498e" :xchacha #h"5ffeb21d5a86eadefecf379e4bca018d924697952f264020dd94e6bc5a2601d5" :stream #h"b19a67f61508db488d841acd7f644b3d21cbee2ac34c21fb" :poly1305 #h"4f4e9bf5fe4d4da5fcfe5a275b844711b217a21a806ab114370bf952ede8198d" nil) (:aead-test #h"" #h"" #h"" #h"c5fc83ed5756ba95b85af2c2bafaff53d7827542bcfeceac5bc441402ad8414d" :aes #h"5acca3cf4180d927897be0b88487e389931938bc84fcb6a4c1a5112e98ba752d" :ctr #h"1473ff278e6f74994468092ed204ac11" :hmac #h"f019026da528160d9e5ec72df31672f50366a7d48176845e303df1ce7930b64e" :sha256) (:aead-test #h"" #h"34c24073c3b92b135d71" #h"" #h"d842c998b8e645b4226ec0a24bfa6ef2aeaf89933af7926844a502b8cb3b92ce" :aes #h"e25e5c70c7aca70f1d7103cd101120a777d8e6afccf98578a18eff72fa3c8507" :ctr #h"30d698143a2a10b047d8e88dd6d6548c" :hmac #h"58cf30358e8434931d4b9df4b662ca5b705264081d085335d9d33a64baa0df37" :sha256) (:aead-test #h"4b5475225e103aff994fb189369349eb" #h"d18f9bcac28b8a288d3e6c44262c00ac" #h"488bf7ccab39d50ea4f59e1c311f615e" #h"2f93c93ca5212d9f5071eab6779443696e356b0dac307ca247b8147aab355aad" :aes #h"ee702bc83c52930b5b57bd8aab7dcd6a0f9eac656e81d567382383bf18e55585" :ctr #h"e04e8b32077cc1f8e25e393eb73f40d9" :hmac #h"907ba9092391e9b8237315b02ba9b6ff1148367dd29bda83a866ae6856b0d744" :sha256) (:aead-test #h"d78665914633d75bbf796fc626d4b9bc8aeb2b5df616d0323358f05d569a09fc" #h"c3606fed1eb335418b65a4b783fdd74da1fe1f0a" #h"53f8d2f5cefd9f6df49df8184211cf0ba9ed3ca80acb581235d694e008c24e71" #h"76d33c468c42d4692255033cac4e48de29465046f60617d495a6b15c400bb3eb" :aes #h"b907703611e19e8a7df9961255919193138e3cd70e787a2d9f32bb11cec6859f" :ctr #h"bfa1b0fdb165dcba4f848950c157706a" :hmac #h"5119dc317afc88f243d0ccdfc8548da72c0cec041ef519a3cad67ae66c0312c7" :sha256) ironclad-0.57/testing/test-vectors/gcm.testvec000066400000000000000000000270531420372057600215410ustar00rootroot00000000000000(:aead-test #h"" #h"" #h"" #h"58e2fccefa7e3061367f1d57a4e7455a" :aes #h"00000000000000000000000000000000" #h"000000000000000000000000") (:aead-test #h"" #h"" #h"" #h"250327c674aaf477aef2675748cf6971" :aes #h"11754cd72aec309bf52f7687212e8957" #h"3c819d9a9bed087615030b65") (:aead-test #h"" #h"7a43ec1d9c0a5a78a0b16533a6213cab" #h"" #h"209fcc8d3675ed938e9c7166709dd946" :aes #h"77be63708971c4e240d1cb79e8d77feb" #h"e0e00f19fed7ba0136a797f3") (:aead-test #h"" #h"c94c410194c765e3dcc7964379758ed3" #h"" #h"94dca8edfcf90bb74b153c8d48a17930" :aes #h"7680c5d3ca6154758e510f4d25b98820" #h"f8f105f9c3df4965780321f8") (:aead-test #h"d5de42b461646c255c87bd2962d3b9a2" #h"" #h"2ccda4a5415cb91e135c2a0f78c9b2fd" #h"b36d1df9b9d5e596f83e8b7f52971cb3" :aes #h"7fddb57453c241d03efbed3ac44e371c" #h"ee283a3fc75575e33efd4887") (:aead-test #h"007c5e5b3e59df24a7c355584fc1518d" #h"" #h"0e1bde206a07a9c2c1b65300f8c64997" #h"2b4401346697138c7a4891ee59867d0c" :aes #h"ab72c77b97cb5fe9a382d9fe81ffdbed" #h"54cc7dc2c37ec006bcc6d1da") (:aead-test #h"c3b3c41f113a31b73d9a5cd432103069" #h"24825602bd12a984e0092d3e448eda5f" #h"93fe7d9e9bfd10348a5606e5cafa7354" #h"0032a1dc85f1c9786925a2e71d8272dd" :aes #h"c939cc13397c1d37de6ae0e1cb7c423c" #h"b3d8cc017cbb89b39e0f67e2") (:aead-test #h"a6c9e0f248f07a3046ece12125666921" #h"10e72efe048648d40139477a2016f8ce" #h"1be9359a543fd7ec3c4bc6f3c9395e89" #h"e2e9c07d4c3c10a6137ca433da42f9a8" :aes #h"599eb65e6b2a2a7fcc40e51c4f6e3257" #h"d407301cfa29af8525981c17") (:aead-test #h"301873be69f05a84f22408aa0862d19a" #h"67105634ac9fbf849970dc416de7ad30" #h"98b03c77a67831bcf16b1dd96c324e1c" #h"39152e26bdc4d17e8c00493fa0be92f2" :aes #h"2d265491712fe6d7087a5545852f4f44" #h"c59868b8701fbf88e6343262") (:aead-test #h"f801e0839619d2c1465f0245869360da" #h"bf12a140d86727f67b860bcf6f34e55f" #h"35371f2779f4140dfdb1afe79d563ed9" #h"cc2b0b0f1f8b3db5dc1b41ce73f5c221" :aes #h"1fd1e536a1c39c75fd583bc8e3372029" #h"281f2552f8c34fb9b3ec85aa") (:aead-test #h"822ae01a0372b6aa46c2e5bf19db92f2" #h"72e9cb26885154d4629e7bc91279bb19" #h"382e440694b0c93be8dd438e37635194" #h"2fa042bff9a9cd35e343b520017841bb" :aes #h"7b0345f6dcf469ecf9b17efa39de5359" #h"b15d6fcde5e6cf1fa99ba145") (:aead-test #h"fd331ca8646091c29f21e5f0a1" #h"2662d895035b6519f3510eae0faa3900ad23cfdf" #h"59fe29b07b0de8d869efbbd9b4" #h"d24c3e9c1c73c0af1097e26061c857de" :aes #h"fe0121f42e599f88ff02a985403e19bb" #h"3bb9eb7724cbe1943d43de21") (:aead-test #h"a2e81f78b8e3e39e6cdf2f2982" #h"cd0a24fd0f6a693a1578b9dfd2a212e990aa662b" #h"a4f08997e2d93c3c622137f9a8" #h"059cf266240236fd3f41a3f4fabb36bf" :aes #h"544ec82f837fbe561f371b266cc52ed5" #h"b756952a0e98cf4cb024a499") (:aead-test #h"85f83bf598dfd55bc8bfde2a64" #h"0944b661fe6294f3c92abb087ec1b259b032dc4e0c5f28681cbe6e63c2178f474326f35ad3ca80c28e3485e7e5b252c8" #h"206f6b3bb032dfecd39f8340b1" #h"425a21b2ea90580c889134032b914bb5" :aes #h"cbd3b8dbfcfb11ce345706e6cd73881a" #h"dc62bb68d0ec9a5d759d6741") (:aead-test #h"bf61b1fb3b24506cc8c730d399" #h"36b66ff81ec23a28944c98d2834cc764bb70703f0b26e079b6eb008ec11ccfb54a189ad393878f0824436ae69e7e2d8c" #h"f72057f873ad12b5e19ce433e0" #h"1fea5b4176464b1f5dce11558a75ec21" :aes #h"a78f34cd0cac70aab64acae18e3cbeee" #h"3c88570498da96e7b52c7929") (:aead-test #h"42f758836986954db44bf37c6ef5e4ac0adaf38f27252a1b82d02ea949c8a1a2dbc0d68b5615ba7c1220ff6510e259f06655d8" #h"5d3624879d35e46849953e45a32a624d6a6c536ed9857c613b572b0333e701557a713e3f010ecdf9a6bd6c9e3e44b065208645aff4aabee611b391528514170084ccf587177f4488f33cfb5e979e42b6e1cfc0a60238982a7aec" #h"81824f0e0d523db30d3da369fdc0d60894c7a0a20646dd015073ad2732bd989b14a222b6ad57af43e1895df9dca2a5344a62cc" #h"57a3ee28136e94c74838997ae9823f3a" :aes #h"2c1f21cf0f6fb3661943155c3e3d8492" #h"23cb5ff362e22426984d1907") (:aead-test #h"73ed042327f70fe9c572a61545eda8b2a0c6e1d6c291ef19248e973aee6c312012f490c2c6f6166f4a59431e182663fcaea05a" #h"0a8a18a7150e940c3d87b38e73baee9a5c049ee21795663e264b694a949822b639092d0e67015e86363583fcf0ca645af9f43375f05fdb4ce84f411dcbca73c2220dea03a20115d2e51398344b16bee1ed7c499b353d6c597af8" #h"aaadbd5c92e9151ce3db7210b8714126b73e43436d242677afa50384f2149b831f1d573c7891c2a91fbc48db29967ec9542b23" #h"21b51ca862cb637cdd03b99a0f93b134" :aes #h"d9f7d2411091f947b4d6f1e2d1f0fb2e" #h"e1934f5db57cc983e6b180e7") (:aead-test #h"7ccdecf13130c20f67dd6f47adec33dfb52bc84a7700431b7fd398d652a123f086ae197328cfaed127a91866c95bdfdb4849ce" #h"bb853b60b5fd8bd24acc9db9dd3de48b775d4a5cb2a879c1dd78bde94cafee06db12a1574eade205dfd3a8c6f68599e120ec73b6b4559cd03d3118b2b1bbe340bb15320c6bf8d8a1c3c1247b4023ba2949ba6a5ab13f2d85b93b" #h"bc1a886c9e5accc34f0c237f7ed996e940e4b0ec882638e69866ed24d86467f5433aee23448df39565a0ecfff2c40e6857f725" #h"5ff9c449d0bfa870ebefe78d519a8d12" :aes #h"b818752aa4452120808c3d211d57c224" #h"d679a0be22c2daf619b11463") (:aead-test #h"9c5280591311dc212d6ee2ad8b83dedf03b91e244d8a42690c9a5821ab971453c8b4f63e15bb8af96aeb4a3e35515b651bc68d" #h"d5134d84a96921537a17869c3ed08c55c29e0a67a30943cb248849843794c1c6fefc98659da9b0f505bdefc2e4ebe9523d2a165b63b5e3b2ba9535821d62aaf95b9c7e6ff1f8807a13e79b9fe589c0d9febbabf9372b01ac2051" #h"bdf0b752160e64b626d5c543954570169e28b033f77b6ef8a37bcbae2a294a9e7060c3235b290f79c69c39a66b0d5ecc81d02a" #h"f93768c97781ad0486f2f9e8210f2a22" :aes #h"528b8948b534d5f780ae3f1e23a47a25" #h"fec5eaf0a6d6f5c4adec9618") (:aead-test #h"cd4828e5977d7fc5bbf7f6d1870bf6333c204087639a3b494a4037170b73fc6b32c4555d1a02a8837441734d6835a54bf35a44" #h"465afd08d7260308d8d21025f31570e5dcd6bcbd6520ecb6ff85de58378d5af6eaf7cb2f1242c0c47b759c58dbc6e4b45c8b993514f14b82eda3fcb6a0df2075a0ab76fa0c5b6cb37d1d28f773dac591790887d2d72f03bcc5ae" #h"4da02474ef189de863d53323ff6737c12efb3d60a890a8d53991de57ffc6cafd44c429a762a2154c5a937120db2161f2cf2ea1" #h"949d399a7e2567b275c6f842de602605" :aes #h"824ca85e2e4b2a6c6e6a65ef8616c57b" #h"d2bf92e7dc53676aac4e6d1d") (:aead-test #h"35df59329eb5fc30c28791164bf9b374df228d2be467414727f457a9dd0f079f7342e23adb06929ce0ad607116ee11718ce320" #h"4feca4174889298e992b765dfa67d33219f9b23898f8e869b7f1fbf5d71d87b44edd963d1055618b9db7bffe96b7856f3197868d6ce5e755a6c751661773e1def403a4cf036151ecae67b35f2891285420956604ef31c9aab341" #h"77670f6520a34dfc05819a10f322b30e397473fe51f8274bfb105c2eec37e24951abaef11e73c3c425a8c4b2d8c3ffeb8ed924" #h"5349ef7a70499f2760123c0d5dcf5a6d" :aes #h"50f5cc5e33774f383235c64e77c502ca6c5d06ab0af6be04" #h"9d4c766490224946d91a99a7") (:aead-test #h"e790cd4eab2aadcc854fe4683b957bf10f13ab4868bdeeefa5d427ca0c674ddef13244718ff2dd70d8071c161e53ddcc022198" #h"d38a465502b5a9f5d48e9f17c24dd9c1b80d2ee404afb5c408c0e6573ad04ec339ee2575407fb982e5ab539986c1f8f2a591171ed017f514ff0ffd48bdae03d9bb7f3f740049937a46e22466def4d56ea43e5a12e520d7867200" #h"c54b6d577269588d9d3250f21da402eaae45b78bfebcc6e0dfd2f723771e7811eda192722af0aae843305a7f17f00f2a91ae60" #h"20099e1c1481be5d5963ebf9249378f2" :aes #h"9639bbb115b2523376926420bbf523f9650e03d56fe0de4a" #h"ffffdd2aeab6163d02622171") (:aead-test #h"9cc4cb143fee1408b2e81b17abffb8d18b3dd5bbe6747e91cbe10ed397263d2baa5bcfaae83b4c23e1f3a47a1c7fc6a04eb55a" #h"e4b219f8cfd2b6f759c4320a7b78ce9708f0115f89bba70d3778008e263c479a1c3626e122c7df34d305ebb2e85593960c08a97f5b0d3fe8b12276ac5e3aca5f845ca3e6d0ab3f675b8ba40e264be00270d4b6a61b269bd6dabc" #h"bb045322f2671dee41e32bb8765a27090a5f87edccefcce6d2c6deeef1818dda4372cb53533b2da3075aaa783c1ffa2f76ce43" #h"cb2b586d003039cef97cf41686978fc4" :aes #h"8aead1752e513b72a8002814cf9b740fe77a42dce2be26e1" #h"8afae88a44dc2b3b08ab84e1") (:aead-test #h"977af5820e2204ff0788b48e7447b1cba21353af53d710c03e763eaf6ccb06c017f8a480050f56982d856a7d607736b59552ee" #h"8743a811e61b64ac4e21e0fd1375d84932529a578472d2394c2f9294f8c5cfe7ae11fb9a1e20c6ca8b5070da4f27ce3eb54a396251d0efad5da5e5025f3a076c45aa1485ede9563c50fd38d9d6fb74a0f3e0dd96538ba3809669" #h"c4921d4b9bc418abec07a9e3298e6809c45d832a0d1cd1ed9c6d9c3f08d99a61e6ef2d8a764943e49af9109e16aa0c7467179e" #h"603934db6ef262b3596caabb7f482cd6" :aes #h"5aa618600858d80d8ac39da89de3bd3cea883c785f4be812" #h"62f5863e2b6b13f1d41a1dcd") (:aead-test #h"82df2bffaa0050668b6193faac3551ffb71f0c86c217406b5114a2145862817755cab8c25494be05d10b4a6e2c9c383e76fe43" #h"b604c73f5626162dc5cb304b0c3a6866bd7d98c0ec13c98ace4b60663640eb2e90b587cced189230bc6aa7ce05a4ae3515acf3776505d927b79ed1d7a8f5b1017b2f12b3cb313be798e41bb649cbce85d1b63e85ec4101d17b34" #h"890709b934a1d4eaf7a9f36b2fae13b672922ba416b4d38e9b26fc289852042613aa318786f182a5c804b8670fe28986bcf692" #h"abc845f2ff15708deb25dcc89b1e7efe" :aes #h"bf6b341c1db40e87450fe564be970ce6ae99eaf0836131e3" #h"61c00736f4386062bc13b903") (:aead-test #h"9d0b15fdf1bd595f91f8b3abc0f7dec927dfd4799935a1795d9ce00c9b879434420fe42c275a7cd7b39d638fb81ca52b49dc41" #h"e4f963f015ffbb99ee3349bbaf7e8e8e6c2a71c230a48f9d59860a29091d2747e01a5ca572347e247d25f56ba7ae8e05cde2be3c97931292c02370208ecd097ef692687fecf2f419d3200162a6480a57dad408a0dfeb492e2c5d" #h"2097e372950a5e9383c675e89eea1c314f999159f5611344b298cda45e62843716f215f82ee663919c64002a5c198d7878fd3f" #h"adbecdb0d5c2224d804d2886ff9a5760" :aes #h"148579a3cbca86d5520d66c0ec71ca5f7e41ba78e56dc6eebd566fed547fe691" #h"b08a5ea1927499c6ecbfd4e0") (:aead-test #h"461cd0caf7427a3d44408d825ed719237272ecd503b9094d1f62c97d63ed83a0b50bdc804ffdd7991da7a5b6dcf48d4bcd2cbc" #h"19a9a1cfc647346781bef51ed9070d05f99a0e0192a223c5cd2522dbdf97d9739dd39fb178ade3339e68774b058aa03e9a20a9a205bc05f32381df4d63396ef691fefd5a71b49a2ad82d5ea428778ca47ee1398792762413cff4" #h"32ca3588e3e56eb4c8301b009d8b84b8a900b2b88ca3c21944205e9dd7311757b51394ae90d8bb3807b471677614f4198af909" #h"3e403d035c71d88f1be1a256c89ba6ad" :aes #h"e49af19182faef0ebeeba9f2d3be044e77b1212358366e4ef59e008aebcd9788" #h"e7f37d79a6a487a5a703edbb") (:aead-test #h"5ca68d858cc30b1cb0514c4e9de98e1a1a835df401f69e9ec6f1bcb1158f09114dff551683b3827457f77e17a7097b1ea69eac" #h"ca09282238d492029afbd30ea9b4aa9d448d77b4b41a791c35ebe3f8e5034ac71210117a843fae647cea020712c27e5c8f85acf933d5e28430c7770862d8dbb197cbbcfe49dd63f6aa05fbd13e32c459342698dfee5935c7c321" #h"5c5223c8eda59a8dc28b08e6c21482a46e5d84d32c7050bf144fc57f4e8094de133198da7b4b8398b167204aff837da15d9ab2" #h"378885950a4491bee3cd681d3c957b9a" :aes #h"c277df045d0a1a3956958f271055c229d2634427b1d73e99d54920da69f72e01" #h"79e24f84bc77a21a6cb14ee2") (:aead-test #h"94f0bbc4340d97d854e25cc7ce85ea1e781e68bf6f639e0a981bb03e3c209cbf5127171cb0fff65bc3ecac92774d10146d1ac5" #h"a3dc9ff9210bc4b3276909883db2c2aa0762cd22b46901a248c0372d073e7778b9c1d8469b26bb42406e484ef7747f71dea785fc0020a2eac17e0ac3fbe0453629efd68d5678fbecc10af8ffbe7828f826defb638763f4ecfe82" #h"6543b4d97fccd273b36436fef719ac31bf0e5c4c058ea71aea2a0e5b60e329be6ea81ce386e6e9fe4480e58363c3b2036865ac" #h"924cf7c0770f228a4b92e9b2a11fc70b" :aes #h"4d07f78d19e6d8bb32bf209f138307890f0f1ae39362779ff2bf1f9b734fe653" #h"d983a5d5af78a3b1cd5fbd58") (:aead-test #h"6f420a32708ccd4df0d3149e8c1d88dceba66ee4546f38db07046ebf30f47627f7fdda1dd79783adabe5f6b6853857b99b864c" #h"a042d97a9b8f6caf51c5f24522d7ed83e2c5d8ec6b37ef2598134a30e57319300c3fdf92fb1d9797f5ef00971f662aae768f69f9ca0455bd6d1059d5f85b8ecb977006b833f90ac2d5bbf4498c83f4d1a42584c0dfc4a2e2453c" #h"a9af961d61ab578cc1348eb6f729603f481c5d9bf9bee3a13eda022bd09c03a4f207c21c45c0232a9742ae8f0c54b4278a3a63" #h"eff9bb26156ec76f0060cd93a959e055" :aes #h"9572b9c57abdf1caae3bebc0e4bbf9e556b5cbacca2c4756050fefd10a666155" #h"de292a9858caaccdcab6a433") (:aead-test #h"" #h"" #h"" #h"8e2ad721f9455f74d8b53d3141f27e8e" :aes #h"1672c3537afa82004c6b8a46f6f0d026" #h"05") (:aead-test #h"28003e30c4a4ca9e41aafefac1e1c3de" #h"bfeb15fcf7b15f0e14c04439b67950bd" #h"00e472971f3a7770aa7158fd92f17bb7" #h"16661b85eb51646c94cf2be4e42d7a8e" :aes #h"ca91e2414409a439b06573d772f90afb" #h"177008f920a06169ccdf753a338553fefd46845869c9244da44997f83d4ce805a18707c84d114f9c68427b22841591e6caecf5c3e72a25167aa860c51bdc1aa56dcd69f29a2f35e70a322b9eba092a98d66a956b4d294383a0ebab26f7c4df1a5d4060dfc45a14155100ea7d9e32debb6537406b757291710505142e7659fc77") ironclad-0.57/testing/test-vectors/gmac.testvec000066400000000000000000000116421420372057600216770ustar00rootroot00000000000000(:mac-test #h"00000000000000000000000000000000" #h"" #h"58e2fccefa7e3061367f1d57a4e7455a" :aes #h"000000000000000000000000") (:mac-test #h"11754cd72aec309bf52f7687212e8957" #h"" #h"250327c674aaf477aef2675748cf6971" :aes #h"3c819d9a9bed087615030b65") (:mac-test #h"77be63708971c4e240d1cb79e8d77feb" #h"7a43ec1d9c0a5a78a0b16533a6213cab" #h"209fcc8d3675ed938e9c7166709dd946" :aes #h"e0e00f19fed7ba0136a797f3") (:mac-test #h"7680c5d3ca6154758e510f4d25b98820" #h"c94c410194c765e3dcc7964379758ed3" #h"94dca8edfcf90bb74b153c8d48a17930" :aes #h"f8f105f9c3df4965780321f8") (:mac-test #h"a82bb1edc7c01a3689006f34bfed783e" #h"9d115bb9bbd119fb777b6316065a9ac8" #h"c491889fa3eca4544ba0d51b8e0f3837" :aes #h"963836b67b188becf9ba1411") (:mac-test #h"b9782d0a5986c63f352d3bc4c7ecc96d" #h"f1a9f0723429c5b26185ac3ea7e13d7a" #h"74d0d36949f0276670f9ddc579e94f3a" :aes #h"4541e15b92edea44eceb1f2a") (:mac-test #h"59b95785b30f205679fc4f3f9a90102f" #h"39852d3182944a5177db277b63910702" #h"8f9a96c013992485b43e2b62745ad173" :aes #h"1908787cc1e1880a6ef5dd17") (:mac-test #h"34dd7926ab13d4078160d87de2e3c724" #h"af698717a6d790b3bfc39195857bb5ff" #h"48116050bbd9118270d0be252d29d5d4" :aes #h"c11ccdaf798ab03af2d97ef9") (:mac-test #h"8ec86fab55aaab0e77455e9cd3dbc78e" #h"e7509e276209a6d3ecfabb53ccdcd236" #h"d96d6ac0d309cebedeba2af9f262132f" :aes #h"15fd90a9867e14f0d63b53b9") (:mac-test #h"66b2473d9e0121666d47633f7008eb1c" #h"c20f686317d67e53dd79bae5c46dc111" #h"9a08616809cf15247dfeb9756ba4f609" :aes #h"c1716c68a24d57770b867e51") (:mac-test #h"5b262a9d00904d30a2587caade091381" #h"23112d078c9914fa3dfe5218cd191016" #h"98854d193a06dbe32ce4497eec5c9a8b" :aes #h"f7bc154ca562e8f2c1845598") (:mac-test #h"2e4fb9cc320188a6f1fa89a7a252273a" #h"80ba4a202a68c3590d6557912c6f878e" #h"9280313273befb8afa0bceca5a966d85" :aes #h"7a6d4ee69c7256c14fba8f5e") (:mac-test #h"2fb45e5b8f993a2bfebc4b15b533e0b4" #h"e85491b2202caf1d7dce03b97e09331c32473941" #h"c75b7832b2a2d9bd827412b6ef5769db" :aes #h"5b05755f984d2b90f94b8027") (:mac-test #h"952117048f77e276c2ef6580537c1403" #h"34b088f982818b5f07dabe2b62f9547f4ed09912" #h"bedd4cf30fd7a4abc49bdcc3f3b248b1" :aes #h"070b8fb46a7ad52885be1b26") (:mac-test #h"7f6453b39bde018560a16a2704217543" #h"11e4ecb256ebff56453fa2e75e43eb9d641049e6" #h"b512623a12d5492b7d76d39be0df5777" :aes #h"0f3eecf48d68353226a77fe4") (:mac-test #h"99e3e8793e686e571d8285c564f75e2b" #h"b668e42d4e444ca8b23cfdd95a9fedd5178aa521144890b093733cf5cf22526c5917ee476541809ac6867a8c399309fc" #h"3f4fba100eaf1f34b0baadaae9995d85" :aes #h"c2dd0ab868da6aa8ad9c0d23") (:mac-test #h"f8e29efd00a423c4ea9456863f83c54f" #h"02c70fc8a2544619c1c3e9fce6b3c6c3bc24643e0f140e6b48ac505ea666cd9a2010c3a8e2f5f10437887fe803b54db3" #h"963cb50aca3e09dd0d9a013c8734155f" :aes #h"2d3cf67cbce69d639bd1c092") (:mac-test #h"00e3491dfcf3bec39c89ccfd80a5a896" #h"73813351b39f5e4000a9ee8d2b85f131634acaede0dd25d691a2b829ad4fe9ea699f12242519847cb083b0b4d3d8b3bc" #h"01b2e9ba719ad77c753b364ecc5aabeb" :aes #h"29f6ff4edc4ac3e97ffb1680") (:mac-test #h"20b5b6b854e187b058a84d57bc1538b6" #h"ca418e71dbf810038174eaa3719b3fcb80531c7110ad9192d105eeaafa15b819ac005668752b344ed1b22faf77048baf03dbddb3b47d6b00e95c4f005e0cc9b7627ccafd3f21b3312aa8d91d3fa0893fe5bff7d44ca46f23afe0" #h"b37286ebaf4a54e0ffc2a1deafc9f6db" :aes #h"94c1935afc061cbf254b936f") (:mac-test #h"7aa53188a9c597126a10d248603ebb62" #h"417fd5147d56de0c74329597824ec2788a344fb60b403edf0187afa12e72a05009bb70f83ccad11efa487c1965cf84feac067c1ffdbf531fca97c554f875c4a1a1d3ab3c53c8a74ef3ee9415a87e231699c82d764debeda18132" #h"997bf84654bb9616c0cc9b45f82c7673" :aes #h"aa45ca5dac41a825c45d36bf") (:mac-test #h"72b5848ed1d2badbd427e16fc3b3e44d" #h"1c0dfcecbd7bb0e680ce042d08b2d9a741267bd1da768df2ba08379233a9973f14928e9da6353768b9b2601c033fd964b16a16daaa3ea35ad7cef7e31eb1f7340aa34e8bfc08b0a6e6205292570ced43316876d0d499d9192e6b" #h"270cd786b95e6820cdb65a231b7530ed" :aes #h"a84c7e928dc6e6379a513a20") (:mac-test #h"b52c505a37d78eda5dd34f20c22540ea1b58963cf8e5bf8ffa85f9f2492505b4" #h"" #h"bdc1ac884d332457a1d2664f168c76f0" :aes #h"516c33929df5a3284ff463d7") (:mac-test #h"78dc4e0aaf52d935c3c01eea57428f00ca1fd475f5da86a49c8dd73d68c8e223" #h"b96baa8c1c75a671bfb2d08d06be5f36" #h"3e5d486aa2e30b22e040b85723a06e76" :aes #h"d79cf22d504cc793c3fb6c8a") (:mac-test #h"886cff5f3e6b8d0e1ad0a38fcdb26de97e8acbe79f6bed66959a598fa5047d65" #h"519fee519d25c7a304d6c6aa1897ee1eb8c59655" #h"f6d47505ec96c98a42dc3ae719877b87" :aes #h"3a8efa1cd74bbab5448f9945") (:mac-test #h"f4069bb739d07d0cafdcbc609ca01597f985c43db63bbaaa0debbb04d384e49c" #h"3e1449c4837f0892f9d55127c75c4b25d69be334baf5f19394d2d8bb460cbf2120e14736d0f634aa792feca20e455f11" #h"805ec2931c2181e5bfb74fa0a975f0cf" :aes #h"d25ff30fdc3d464fe173e805") (:mac-test #h"03ccb7dbc7b8425465c2c3fc39ed0593929ffd02a45ff583bd89b79c6f646fe9" #h"98e68c10bf4b5ae62d434928fc6405147c6301417303ef3a703dcfd2c0c339a4d0a89bd29fe61fecf1066ab06d7a5c31a48ffbfed22f749b17e9bd0dc1c6f8fbd6fd4587184db964d5456132106d782338c3f117ec05229b0899" #h"cf54e7141349b66f248154427810c87a" :aes #h"fd119985533bd5520b301d12") ironclad-0.57/testing/test-vectors/groestl-224.testvec000066400000000000000000000261151420372057600227550ustar00rootroot00000000000000(:digest-test #h"" #h"F2E180FB5947BE964CD584E22E496242C6A329C577FC4CE8C36D34C3") (:digest-test #h"CC" #h"62E367662ADF9317154F877FD740C23FC2356080B477DAC847BE2EB2") (:digest-test #h"41FB" #h"2CD7E4B0F938053442AFBF0D5C5F2E50A07F16C252EBF04DA2B5CF8A") (:digest-test #h"1F877C" #h"1DC3EF787D0D92A2E7B66E28A5BBC14A0F533E3946F3EEECEDC001F9") (:digest-test #h"C1ECFDFC" #h"F58E0B2D0CA78DE9C71B6B485F4E4911F67B547700ADCE09601C30A7") (:digest-test #h"C6F50BB74E29" #h"60196E0AA139EE723131421598990CA13BF74E8AA60ADA1D2E11EDBB") (:digest-test #h"119713CC83EEEF" #h"B7F0C4EB9ABB4F5F3A59F67404D27F37333602C970C6A5862EB43CB3") (:digest-test #h"4A4F202484512526" #h"3BA6FA43B12760343316FF84150F70D4215AE520F10E652E2C1A70F8") (:digest-test #h"52A608AB21CCDD8A4457A57EDE782176" #h"3E195CEFED38F5AF28E330C69BD257DD46BAA4AA4C3A7E9DCB4ED33B") (:digest-test #h"AECBB02759F7433D6FCB06963C74061CD83B5B3FFA6F13C6" #h"737512EA1204888C1D764B8D4F2A4D925687AF6DEA031825212B907B") (:digest-test #h"9F2FCC7C90DE090D6B87CD7E9718C1EA6CB21118FC2D5DE9F97E5DB6AC1E9C10" #h"8F00466C1149A6927EBB1C08AEC62C36EBD76008C26E877ADCE79F7E") (:digest-test #h"D8FABA1F5194C4DB5F176FABFFF856924EF627A37CD08CF55608BBA8F1E324D7C7F157298EABC4DCE7D89CE5162499F9" #h"EC87B0A8654693FD08D82D3A2DDE1805F11602EA7EF024C17F4103A7") (:digest-test #h"E926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7" #h"2BFCC41D9044A4619DA5F5C84ADB8A6715BC65F54A586C3E6A7B6A50") (:digest-test #h"69F9ABBA65592EE01DB4DCE52DBAB90B08FC04193602792EE4DAA263033D59081587B09BBE49D0B49C9825D22840B2FF5D9C5155F975F8F2C2E7A90C75D2E4A8040FE39F63BBAFB403D9E28CC3B86E04E394A9C9E8065BD3C85FA9F0C7891600" #h"1E9775BECD34C2269B649EECEF175B902C14F6A0601E076D27E15F64") (:digest-test #h"2B6DB7CED8665EBE9DEB080295218426BDAA7C6DA9ADD2088932CDFFBAA1C14129BCCDD70F369EFB149285858D2B1D155D14DE2FDB680A8B027284055182A0CAE275234CC9C92863C1B4AB66F304CF0621CD54565F5BFF461D3B461BD40DF28198E3732501B4860EADD503D26D6E69338F4E0456E9E9BAF3D827AE685FB1D817" #h"33EAD6E58F47469E8C391E3B9B8309AD581E6ACB3AB7E7350FF5135D") (:digest-test #h"3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1" #h"6BBB50C983FAA6D5A836BFB96D2520997402AFDA80613C3FD22440A3") (:digest-test #h"0EBF64AC017FEBDCA40FF85FD4AEB8F1A827561C150F74CD5E864857FBBA9C08A46EFB9FF7A16919618C9FB06BF8FE3F0859774DA6C38C5A0C54D44075D1BAF6482B7705C8E1A86E79B0FBF0328246B5E6BE013F934D4ECC34808A3639C49464309DF5AD250BF4521E41B4CDE563566B8625076AD7E260018EEE2F3252D15F36BDBBCE3C74758C68A0E72D83A37DB4D2022A80A4F6B16F4515053E1FE398CC6A74D343D4CBB403597AE68533E18EF893F756F6F554F98BCCBC84702D19F875D347C345B09EDFCB1C71BD6955C5178DFCB07376728CFC3AB9565C0A1A8DCA78221028B00B51B175A2DA2CC0A90C33C169EA8A1A2E375C087AC3657D28AC481D5B5C225AEFA85919FB8628F32F42F1FC0806A250143C084322FE9E30BCC8B89F3DA73469CEB935EE25887D843321CC8ABB3C75E15F4894CBB5731782372A5631979BBE6AEACDFB711A84F83BB89E0F92B88C5EE83E4F9A3C4F80624A17ED5549B77ED7D939C368CD9A92EAAE595105DE7E2889CAD71D01201580038FCF4AB4D285A13BEFAAA14FACFE5099A83F9E71D512519D055F44F757757BCEBBD2734CB91C5C4CE7B411D1E83B42689FDF8A69E63DDFD255B977D7435BEEB5DEBBBA7A47B19CDAB3F1C40E79B926A481A1629A818525C2A198983F23F0DA5DA8B99633689292332BCC2A4AD49769B3E448F8CEDB87C1DE2EF5D04E1C3A8116C3328F6B19B59C318E18F8DB29875C22A0A0C8EA615A593439F7B90AA2AD9C16CA573040A8190A834370378554BDA9DA9486AA3CE3F1B01DBA14B032B3C334F7A1E961426302ED2D38C34F61D7B4D182C0CA303C2F379E74EAF65A48D3D8A95616B2ABA5C88DBF6284C5CD68D902E3958A7B9529F49D38091BAC288734247FCE886D49BCE00AB98B1B962A8DA8B4710644E9DA418529E79A27408B52EB655FDE025A129A38EEEBA936657F725F0EC668380B9DD50C0759AC150F81B696B886E86A5447CCDCB3FBEC08C79471DC3111042FCFFFADC1A973340DD68610631FDDA6AD25148C2D0B48ADA24E6B2D42EA7510991C0455BA1B7F393CA1FA5801F182F89117885455DBF88F63CE0B77669BA965B73A344D3C4C787E3B4AAF58C56FB2589967C71969B1FE92C5E7D91094DBA84F470437339C1DC6918DD5FB835CBE69750363691B0CEE7B80F0D0AEB31DDBDAC52F904A3A91051B54ADF75B0D195763D29FD1B88244F61D6A304807B646326E76FB880D1DF37281A11CED52D5B5873668642C72CD7C70E36825CC17DA6E03C577D12F79CCEFD6B7B76C88B19F7606536793D8D33F7E0A598769883B417C3662B6267001BE7D0914563B2402149357D1C64680DA80B32207A67611EDF0E8D9A767E2BE2ABB21956FC764200945E4BC5830ACCCDC80DE485086514C63DA7F785CBA0C1E9CE5B249B52E7EE570D8657C63C4FC90856DFBBB24C8D2A711CB3A0960685EC55540F6EC2641A429D3DC99D82F26D2C7EACC614FFE988117D8F13B7442A9AE2929D3E1F67B974BB4A4AA960015C9216AFA844A243095F167B114700FB11215EB54357BCB1D4792A0B676C708E710211C3AF73D61B82F4D04BC40C898CE00A2D34C77F5E22DB71F46C939A0EC9C37D1647E23A0F44CC23D710A1DB20E38D009C6580192295C40B478A85A0930181D0962C3B18B6AAC7F5BE99607ADD25BBC23A7530E7E58C93F9FD4AFE5133FD228C6B4D9E43538CD9DCBE76C4D7DEDF22741839558A6B561847327DF7CFF1C17E03EB0ED9DD921974954638CADBF645A4BAA4A62774BA66E2E458A1F7AC67EC394429339C2F620D457F5DD06AE551B69BADDEE99A6C93EDC7BF7CD56898CEC4AB4E633489DD1934B3EAB68601E3560092CB9B1C64B90C9FBB6F62BE60B0E221F1F6E1D58444B731B30AB04C40988093FBD396E65BA703F52ACE0695035EE78E7A4969D3EB5834C58EF60FEE1DE0F0E03E4203FF50F957ED68513F9134A4332B56044EE14CE80EAD7CE532ACA58B1F98423C3CABD9921F83A81C7467B3C6F6DE4B12AD741C7345BD645854BBF859D110C8D60F53AFE65F6A8A0856BBF78954F8ECC831FBB43F030449A9FE72A3C86AB7962ACD28975530CB567CEA713BE76B2262A70896B8A3CAC66772C56A9ED139F3F4349898AECCDEBD5622F32A75EBBC9FE202FE56C957356D40AFEE4718C52D30FBF683CE17056E672F909110C087D361C196FE33C6D80DC6925769F6A93DD41B5BB5FEA806F3BF56C50D69B45A371AC5DCF5CF356BC552E0CF87E22AF0F121B21278B067138E2AFA098E7EDE1C0A8AB29B6CCF6B85D39ADB9CEDD013886D2C23C273A21267B2F2C22B5BF25D5A5CBD083684B454AB5FB854F90CB49B2F53795BBFD46348B30958398344F9C362040E1412F331E2DD1679F31ADBCF8D40BD3BF707A4F3558239A0B9488B3D6A264E6DA3911B0BE47DFF3257B193129DDA9F3C0D9ADEB161F8426CCD01AD2D0854F7319E12DF89DA88C98FBFEA96D1F40BD098AA46BEB471834B039D6F001F804ED3DC47CDE01D5B594D565D94F70BA7387822DBE8D0E44645A914F25D1D15F38EB4E5C9B4F48C6146DBEFF8D36C17E5E57A3F07E561AF390EDFA4E2CFECA19722A3BEEEA23782CD7AF8A61767B010F89A7082E04E807F5CEC49BF5AC71DB3DFDC5665CD1FA5B9EB0C3C7343C674730EC650A13BAE412126C68DAF917862ADB4E220461A6CD0C7511F4F31C47F8A41AC54FC0B34F07DC15060E9A43855DA0A162436B1D3A4B6D8EA87229FAECBBD9A2F0792266DD160E0F8671690411F8A9BC7429F8E0F4EB0098E33F0532057D1E05E6A78FF48A6BDF78176FB462E56B305476A78F099786A6793D2FC3F4F74DABD3A34BC2E50267F06157494B9966E1BF1F8708CBB770580CBB2467FC1B3595345A49A5D8EC528F3E2B3F91B06E0693F87FDA3B68CF99DF5C47BB18B767FBE74EC0B664AC0F1CC6592F01A5659A7F3B4293BFB8541F0A9E3F923A547DD1C784ED624CD3A2C9D1B8C308B3236E4146C93CDC36E17DFEDA5C123E735AD4FEAADCAABF9581BC1060726F545C308E56C7310093F7938A2083DC468BF5FF3C84C2271EC7533838FF15E6F7EE8C71115EA8E342BC33AD64467640B11EFE5F33CECDEE3058E8C17F8CA0488918506FE2FA10B92B9FA87DD7305362D24D4CE454A779612B112C7C7E6D4B632A8475EDADBEA13486CFAF5647E4DF1FB135AE793F8E6D23216B0ADF664A14397DAE07E133A1A58E15B25E9092B61FAD3619BD551858144B80D9075D34128C351643F101BADDFA990CE910F2A8D721B64C495A12F07AF3D32CEDAC92E20DD9638C0DB36EB7B1286138FE056EAE9D91C4A0AB7DC5267FB16A41B771EB01D54701FB43570482157BE10C6FA9E4D866B8B5D650EE6F3FE117B1FA79CBE4F8A9B97928EBA2FCA6D7669B384184895BFE76ABF484B03B9F7CA10308C6CE31197CA15B1A36CEDC3774B6B9DDCC2431E732DB36537F1F4F4883E81E7B3C6D368B4EBDCE34C657711D2CBB4158D519E027C5B4B64575AFCD87CE736C45028D378D70C0FDE73B5499FFB307B9DD82073833C0A84769964FBD7D01C4ECE805E122364B2B485B6DAC7793F1EE7F1CB2A50AE6565CD210308260EF64D9B2FE8378516AD093960D5CA8CFA9FCF28762998020743086B93EEDEC324784428EBA23141466185C740055B1E87BF7F6BEF5CE8E28DD270F9DA64D6FFF2CB0D73A734D45DC56CD03BE9414DB568EE2366F2166FD6D43AF9EEECB13C4A5D3A8E775BEE5942194033AE3EE1754FC046BE91130979AB88E47A4CEA379ED9E77BC4310DDAE2BDB7A5B941E3FB6081CC3ED710E0C603D47EFA82FCCC0D556D4AB58825EBE6EC7700F02FB7A0EED44CD2F8772CCDEE4BA4B883DAAB46264A569AAAE97A0E4369EC00F59D841A1A7CF2D39BC58725B248C7B159D6D68B3D9721231CACAAD38F26F357BFD31FFCEC18CF34EE42C3B375C827C4284B31FCD4374CFE8C2C7A6B952581C9837587CB161EECA237290AFE8095E069A99514DFAFC2FD8CFC734B4AE64807D3ACA2681ADE0FA018B17D2A61F30F0307AE86D67D4A14D9CE214CF41EDB702735F99D58BDACE7F28C7D95A9CAE8B079708C6C7E78ACCAB67F67A598F7C86FE8B8AB6539B2EBB376B6A17144A3ADAD6BE5D617D30607AB4D94C11A7C1858E19B5C7B12F9BE4AC245A9E91A22EE5471AA58538AFB35319F53D6DD69BC2AE48D2B649DFF6E71DEA3B797C071A0C345F66DF053475A40031F323908C71A198C7FB2D542AA8DD97B2F1CE01D11E7FC458518CE1CB451BB9B1D57530D15EC95BA73BD5A386947FF8D0F565549A11B88759D6ABA3A83967BF9543E640A33F6F9D9655A547785B42B11216EC1CCE067630E89708CA896733129DB5312169003B8FACB8DE3F99E65427AEF51CC1C91005BB7F5B65218B1B492FDD67761E0F7C2FC60F7ECA13B09DF6B2A53B5B9CEAB43D5A1EC3260A89B54BC257850F0659E3240DAF073CC5236F65B159CF8FDEC771911C054BB417F6799330D443A735704E66EA9F1D3351837197C19E8226D27A1EB5B664781CF0651231AB25678A4C9F9973DA830ED3871A6EE638DDA3C789B0AC27DF49717CA2A1DF46968D56035EF02B712D12067E72B1E661120FC1FDE4FE6B11BB4D189F29112DBBD6DD0D9E4E78501C8E5EEECC333B208D7B86522C61DE4ED0D4454D19CA62027627344F455C05F429FA17E4A6F0BAFCD4B575CBA3755B042382942190B6EAF762DF7714797E916D58E7DD0DE2CFC41D8E6E410DE623EA5C547334D3A21488CD2D65E6F9E0F123166FD8304309D0160B5A605317E0122308F9FF065AE6ED422437C962A1362EC1F2804B274E3BAE118292FF930BD519EFD3A93E40F949ABC60E8E9190DAAF9FC8099A44311861B02FFB4F9A0AEA81999170ED5BD14B727B42EB44B0B55983F1AC2F2BA80734630D6B7500D65EAB42F6771EEA6872677E252DA4C717BAA07760BFC5FE09D4835A65200A80C2759A476A930B7FB4A738241C3E73A9C75D5A7F0A0BE52138DDA2812AEFBA8FD78D5840E6EA1D15C57EA66A59B3A882A8FD04093A5815A5324BE75C4F83CF16B785D2D3BD36602A0026A9895CB343688EEA40CDB483EDCD87788B668A69D0BC75B07D8C8247A9780E4C1EC342C1198295D699F0829E41A78F0F9978DD52D6491898F1F05B979E587F711DF66F38C23C2BFF9C69086AB970C468315B3B6C36D58A7AE9C749FA06429E6781AE7D49B3B368048641A63DB95EE293A1954201CAD72E92A85E34C7A74B2FD1BCA6AA61435AF2DC32C1A2F559F63E716A6C96F076097E6C45F4372AE6828E9EAAE3EB82361710EC14F67F7D0ED9859249C18D14985302847FC8F3301BD31C7E1E09B2057E9EE46FCC7C9BD8DB59EB0DEB0B1D8D291508CB3837C9B2F191A49595D6AADDCEFEF0DD59ED3A05FA8F6EF03D38F534139D56BCBD4BC3256E1A120D49A5DB1BADB528B0256C61A2F179A23C49928738F9C0FA81FC196D1A74507998415F070EF9C38BAA53951FEE7B68008BC675E0E15BC32A61C30BC132E79C58A3A970FFDDB8B806782DD31242B3C3CF9810BEEA5FB5A1B250EA62336456E7694B4C829508C7DBFE090AF6A850F79D04D2C698637816017F8A920E1B1ADE236E227B3480899BCBB991F6C6C240BBD4114AAF9875935558394A486652B0942F3409B66FAF8B8BF711CC8C34CCA41B8E16C2CDF0160B92A332C1F04BC64582446B98AFF34189675B7A10FFC6F13B3F74654ED7C0590D4AF7F4D747BF89BB2A8F5C8CE610CF4FA4AB714A845E15649B53E54A95213D5A73905941D9467B0BEDDA2BECC1C219E1CAB699652D85B8CD7E0CD11CE5B0CAC76F9EF3D74BD829877898E7350CCA72101076A970BEC6756C3FD1AAF3396F72833F8D4E716AEC6F93718B262710B0DA2F3FD6CBDB204ED0E91D65CAB39ED35F22A01E5D509282752837EBEE968B140989EF5F4D513452784BDB892CAFD8387E05B3012C0458A369E62191F5BDC57DD63CE42E945F493C2B42306B8084F3B25E94ABACF08EE155F3621ACC9626EE487C7A7E4667F0377AE4B2" #h"05545AB3B1E8EF94FF65E77D350752AA2BC4F67690B0713AFFD5DCCA") ironclad-0.57/testing/test-vectors/groestl-256.testvec000066400000000000000000000263251420372057600227650ustar00rootroot00000000000000(:digest-test #h"" #h"1A52D11D550039BE16107F9C58DB9EBCC417F16F736ADB2502567119F0083467") (:digest-test #h"CC" #h"15E2671F0EAF66C0DE3093AB7B1E39DC68F945D7002FC5DFD52D60527E7228D1") (:digest-test #h"41FB" #h"846F1C22FC62B770DE1782EF33414AA5BAA44B690EBFB7D1BDCCA8D2AC59C929") (:digest-test #h"1F877C" #h"05FE7DE2D8CE1770DF766739F788037D0CF2CA7C2B7620835CC34F45B3FCF919") (:digest-test #h"C1ECFDFC" #h"B5EFD33AC395B5B003D7FBDDE66197AE4EE6DA86946F808F0F1F867F77C53FC8") (:digest-test #h"C6F50BB74E29" #h"DC545E6B3B1A1A8B15FEFAA2799FF90FBA664BD2A0466CDC327381AF41760BF8") (:digest-test #h"119713CC83EEEF" #h"878C893000731295D3E1DAB2DBF97CFCDC142C70A74EE7A2C96E84D5B3C873AC") (:digest-test #h"4A4F202484512526" #h"B9A9049619FFA74D3393530DDDD00B7EB0E25074AFFF5A0A6ECF80841B80282B") (:digest-test #h"52A608AB21CCDD8A4457A57EDE782176" #h"604ABE432C627D185E163904298327214E11FF8B7BEBCAFCB62BC71212589B4F") (:digest-test #h"AECBB02759F7433D6FCB06963C74061CD83B5B3FFA6F13C6" #h"D3E49B6D93DEFFD26F944A62C8127844FCDD1EB54014BE3E1DDC43D6C8B124CC") (:digest-test #h"9F2FCC7C90DE090D6B87CD7E9718C1EA6CB21118FC2D5DE9F97E5DB6AC1E9C10" #h"03742380F81141B9E66B5BDBA56F107FF59F66E86D1B7EBC9349D24E9ECE594A") (:digest-test #h"D8FABA1F5194C4DB5F176FABFFF856924EF627A37CD08CF55608BBA8F1E324D7C7F157298EABC4DCE7D89CE5162499F9" #h"A4FC820ADE474688D90BE3C0765DAD696AF2D5B76FF450A34621D2E8C7FB61A2") (:digest-test #h"E926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7" #h"5ADEBBFDF6FD6178892B39A97A32B29FB605F97E1E5C3BBCF624A0E9CD72D145") (:digest-test #h"69F9ABBA65592EE01DB4DCE52DBAB90B08FC04193602792EE4DAA263033D59081587B09BBE49D0B49C9825D22840B2FF5D9C5155F975F8F2C2E7A90C75D2E4A8040FE39F63BBAFB403D9E28CC3B86E04E394A9C9E8065BD3C85FA9F0C7891600" #h"AD172CE63859D319D4521BB533F71E3AA3611833C9AF032073FC1D846041F1B9") (:digest-test #h"2B6DB7CED8665EBE9DEB080295218426BDAA7C6DA9ADD2088932CDFFBAA1C14129BCCDD70F369EFB149285858D2B1D155D14DE2FDB680A8B027284055182A0CAE275234CC9C92863C1B4AB66F304CF0621CD54565F5BFF461D3B461BD40DF28198E3732501B4860EADD503D26D6E69338F4E0456E9E9BAF3D827AE685FB1D817" #h"B8A871928FCC39AB286E5A768B0AE61DDBD765FBC55C2DD2F3D10477D362A08F") (:digest-test #h"3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1" #h"AA65C8AD802D0733E6EBBEE59D1EEB9C02550DF812226F68860B652F0A266471") (:digest-test #h"0EBF64AC017FEBDCA40FF85FD4AEB8F1A827561C150F74CD5E864857FBBA9C08A46EFB9FF7A16919618C9FB06BF8FE3F0859774DA6C38C5A0C54D44075D1BAF6482B7705C8E1A86E79B0FBF0328246B5E6BE013F934D4ECC34808A3639C49464309DF5AD250BF4521E41B4CDE563566B8625076AD7E260018EEE2F3252D15F36BDBBCE3C74758C68A0E72D83A37DB4D2022A80A4F6B16F4515053E1FE398CC6A74D343D4CBB403597AE68533E18EF893F756F6F554F98BCCBC84702D19F875D347C345B09EDFCB1C71BD6955C5178DFCB07376728CFC3AB9565C0A1A8DCA78221028B00B51B175A2DA2CC0A90C33C169EA8A1A2E375C087AC3657D28AC481D5B5C225AEFA85919FB8628F32F42F1FC0806A250143C084322FE9E30BCC8B89F3DA73469CEB935EE25887D843321CC8ABB3C75E15F4894CBB5731782372A5631979BBE6AEACDFB711A84F83BB89E0F92B88C5EE83E4F9A3C4F80624A17ED5549B77ED7D939C368CD9A92EAAE595105DE7E2889CAD71D01201580038FCF4AB4D285A13BEFAAA14FACFE5099A83F9E71D512519D055F44F757757BCEBBD2734CB91C5C4CE7B411D1E83B42689FDF8A69E63DDFD255B977D7435BEEB5DEBBBA7A47B19CDAB3F1C40E79B926A481A1629A818525C2A198983F23F0DA5DA8B99633689292332BCC2A4AD49769B3E448F8CEDB87C1DE2EF5D04E1C3A8116C3328F6B19B59C318E18F8DB29875C22A0A0C8EA615A593439F7B90AA2AD9C16CA573040A8190A834370378554BDA9DA9486AA3CE3F1B01DBA14B032B3C334F7A1E961426302ED2D38C34F61D7B4D182C0CA303C2F379E74EAF65A48D3D8A95616B2ABA5C88DBF6284C5CD68D902E3958A7B9529F49D38091BAC288734247FCE886D49BCE00AB98B1B962A8DA8B4710644E9DA418529E79A27408B52EB655FDE025A129A38EEEBA936657F725F0EC668380B9DD50C0759AC150F81B696B886E86A5447CCDCB3FBEC08C79471DC3111042FCFFFADC1A973340DD68610631FDDA6AD25148C2D0B48ADA24E6B2D42EA7510991C0455BA1B7F393CA1FA5801F182F89117885455DBF88F63CE0B77669BA965B73A344D3C4C787E3B4AAF58C56FB2589967C71969B1FE92C5E7D91094DBA84F470437339C1DC6918DD5FB835CBE69750363691B0CEE7B80F0D0AEB31DDBDAC52F904A3A91051B54ADF75B0D195763D29FD1B88244F61D6A304807B646326E76FB880D1DF37281A11CED52D5B5873668642C72CD7C70E36825CC17DA6E03C577D12F79CCEFD6B7B76C88B19F7606536793D8D33F7E0A598769883B417C3662B6267001BE7D0914563B2402149357D1C64680DA80B32207A67611EDF0E8D9A767E2BE2ABB21956FC764200945E4BC5830ACCCDC80DE485086514C63DA7F785CBA0C1E9CE5B249B52E7EE570D8657C63C4FC90856DFBBB24C8D2A711CB3A0960685EC55540F6EC2641A429D3DC99D82F26D2C7EACC614FFE988117D8F13B7442A9AE2929D3E1F67B974BB4A4AA960015C9216AFA844A243095F167B114700FB11215EB54357BCB1D4792A0B676C708E710211C3AF73D61B82F4D04BC40C898CE00A2D34C77F5E22DB71F46C939A0EC9C37D1647E23A0F44CC23D710A1DB20E38D009C6580192295C40B478A85A0930181D0962C3B18B6AAC7F5BE99607ADD25BBC23A7530E7E58C93F9FD4AFE5133FD228C6B4D9E43538CD9DCBE76C4D7DEDF22741839558A6B561847327DF7CFF1C17E03EB0ED9DD921974954638CADBF645A4BAA4A62774BA66E2E458A1F7AC67EC394429339C2F620D457F5DD06AE551B69BADDEE99A6C93EDC7BF7CD56898CEC4AB4E633489DD1934B3EAB68601E3560092CB9B1C64B90C9FBB6F62BE60B0E221F1F6E1D58444B731B30AB04C40988093FBD396E65BA703F52ACE0695035EE78E7A4969D3EB5834C58EF60FEE1DE0F0E03E4203FF50F957ED68513F9134A4332B56044EE14CE80EAD7CE532ACA58B1F98423C3CABD9921F83A81C7467B3C6F6DE4B12AD741C7345BD645854BBF859D110C8D60F53AFE65F6A8A0856BBF78954F8ECC831FBB43F030449A9FE72A3C86AB7962ACD28975530CB567CEA713BE76B2262A70896B8A3CAC66772C56A9ED139F3F4349898AECCDEBD5622F32A75EBBC9FE202FE56C957356D40AFEE4718C52D30FBF683CE17056E672F909110C087D361C196FE33C6D80DC6925769F6A93DD41B5BB5FEA806F3BF56C50D69B45A371AC5DCF5CF356BC552E0CF87E22AF0F121B21278B067138E2AFA098E7EDE1C0A8AB29B6CCF6B85D39ADB9CEDD013886D2C23C273A21267B2F2C22B5BF25D5A5CBD083684B454AB5FB854F90CB49B2F53795BBFD46348B30958398344F9C362040E1412F331E2DD1679F31ADBCF8D40BD3BF707A4F3558239A0B9488B3D6A264E6DA3911B0BE47DFF3257B193129DDA9F3C0D9ADEB161F8426CCD01AD2D0854F7319E12DF89DA88C98FBFEA96D1F40BD098AA46BEB471834B039D6F001F804ED3DC47CDE01D5B594D565D94F70BA7387822DBE8D0E44645A914F25D1D15F38EB4E5C9B4F48C6146DBEFF8D36C17E5E57A3F07E561AF390EDFA4E2CFECA19722A3BEEEA23782CD7AF8A61767B010F89A7082E04E807F5CEC49BF5AC71DB3DFDC5665CD1FA5B9EB0C3C7343C674730EC650A13BAE412126C68DAF917862ADB4E220461A6CD0C7511F4F31C47F8A41AC54FC0B34F07DC15060E9A43855DA0A162436B1D3A4B6D8EA87229FAECBBD9A2F0792266DD160E0F8671690411F8A9BC7429F8E0F4EB0098E33F0532057D1E05E6A78FF48A6BDF78176FB462E56B305476A78F099786A6793D2FC3F4F74DABD3A34BC2E50267F06157494B9966E1BF1F8708CBB770580CBB2467FC1B3595345A49A5D8EC528F3E2B3F91B06E0693F87FDA3B68CF99DF5C47BB18B767FBE74EC0B664AC0F1CC6592F01A5659A7F3B4293BFB8541F0A9E3F923A547DD1C784ED624CD3A2C9D1B8C308B3236E4146C93CDC36E17DFEDA5C123E735AD4FEAADCAABF9581BC1060726F545C308E56C7310093F7938A2083DC468BF5FF3C84C2271EC7533838FF15E6F7EE8C71115EA8E342BC33AD64467640B11EFE5F33CECDEE3058E8C17F8CA0488918506FE2FA10B92B9FA87DD7305362D24D4CE454A779612B112C7C7E6D4B632A8475EDADBEA13486CFAF5647E4DF1FB135AE793F8E6D23216B0ADF664A14397DAE07E133A1A58E15B25E9092B61FAD3619BD551858144B80D9075D34128C351643F101BADDFA990CE910F2A8D721B64C495A12F07AF3D32CEDAC92E20DD9638C0DB36EB7B1286138FE056EAE9D91C4A0AB7DC5267FB16A41B771EB01D54701FB43570482157BE10C6FA9E4D866B8B5D650EE6F3FE117B1FA79CBE4F8A9B97928EBA2FCA6D7669B384184895BFE76ABF484B03B9F7CA10308C6CE31197CA15B1A36CEDC3774B6B9DDCC2431E732DB36537F1F4F4883E81E7B3C6D368B4EBDCE34C657711D2CBB4158D519E027C5B4B64575AFCD87CE736C45028D378D70C0FDE73B5499FFB307B9DD82073833C0A84769964FBD7D01C4ECE805E122364B2B485B6DAC7793F1EE7F1CB2A50AE6565CD210308260EF64D9B2FE8378516AD093960D5CA8CFA9FCF28762998020743086B93EEDEC324784428EBA23141466185C740055B1E87BF7F6BEF5CE8E28DD270F9DA64D6FFF2CB0D73A734D45DC56CD03BE9414DB568EE2366F2166FD6D43AF9EEECB13C4A5D3A8E775BEE5942194033AE3EE1754FC046BE91130979AB88E47A4CEA379ED9E77BC4310DDAE2BDB7A5B941E3FB6081CC3ED710E0C603D47EFA82FCCC0D556D4AB58825EBE6EC7700F02FB7A0EED44CD2F8772CCDEE4BA4B883DAAB46264A569AAAE97A0E4369EC00F59D841A1A7CF2D39BC58725B248C7B159D6D68B3D9721231CACAAD38F26F357BFD31FFCEC18CF34EE42C3B375C827C4284B31FCD4374CFE8C2C7A6B952581C9837587CB161EECA237290AFE8095E069A99514DFAFC2FD8CFC734B4AE64807D3ACA2681ADE0FA018B17D2A61F30F0307AE86D67D4A14D9CE214CF41EDB702735F99D58BDACE7F28C7D95A9CAE8B079708C6C7E78ACCAB67F67A598F7C86FE8B8AB6539B2EBB376B6A17144A3ADAD6BE5D617D30607AB4D94C11A7C1858E19B5C7B12F9BE4AC245A9E91A22EE5471AA58538AFB35319F53D6DD69BC2AE48D2B649DFF6E71DEA3B797C071A0C345F66DF053475A40031F323908C71A198C7FB2D542AA8DD97B2F1CE01D11E7FC458518CE1CB451BB9B1D57530D15EC95BA73BD5A386947FF8D0F565549A11B88759D6ABA3A83967BF9543E640A33F6F9D9655A547785B42B11216EC1CCE067630E89708CA896733129DB5312169003B8FACB8DE3F99E65427AEF51CC1C91005BB7F5B65218B1B492FDD67761E0F7C2FC60F7ECA13B09DF6B2A53B5B9CEAB43D5A1EC3260A89B54BC257850F0659E3240DAF073CC5236F65B159CF8FDEC771911C054BB417F6799330D443A735704E66EA9F1D3351837197C19E8226D27A1EB5B664781CF0651231AB25678A4C9F9973DA830ED3871A6EE638DDA3C789B0AC27DF49717CA2A1DF46968D56035EF02B712D12067E72B1E661120FC1FDE4FE6B11BB4D189F29112DBBD6DD0D9E4E78501C8E5EEECC333B208D7B86522C61DE4ED0D4454D19CA62027627344F455C05F429FA17E4A6F0BAFCD4B575CBA3755B042382942190B6EAF762DF7714797E916D58E7DD0DE2CFC41D8E6E410DE623EA5C547334D3A21488CD2D65E6F9E0F123166FD8304309D0160B5A605317E0122308F9FF065AE6ED422437C962A1362EC1F2804B274E3BAE118292FF930BD519EFD3A93E40F949ABC60E8E9190DAAF9FC8099A44311861B02FFB4F9A0AEA81999170ED5BD14B727B42EB44B0B55983F1AC2F2BA80734630D6B7500D65EAB42F6771EEA6872677E252DA4C717BAA07760BFC5FE09D4835A65200A80C2759A476A930B7FB4A738241C3E73A9C75D5A7F0A0BE52138DDA2812AEFBA8FD78D5840E6EA1D15C57EA66A59B3A882A8FD04093A5815A5324BE75C4F83CF16B785D2D3BD36602A0026A9895CB343688EEA40CDB483EDCD87788B668A69D0BC75B07D8C8247A9780E4C1EC342C1198295D699F0829E41A78F0F9978DD52D6491898F1F05B979E587F711DF66F38C23C2BFF9C69086AB970C468315B3B6C36D58A7AE9C749FA06429E6781AE7D49B3B368048641A63DB95EE293A1954201CAD72E92A85E34C7A74B2FD1BCA6AA61435AF2DC32C1A2F559F63E716A6C96F076097E6C45F4372AE6828E9EAAE3EB82361710EC14F67F7D0ED9859249C18D14985302847FC8F3301BD31C7E1E09B2057E9EE46FCC7C9BD8DB59EB0DEB0B1D8D291508CB3837C9B2F191A49595D6AADDCEFEF0DD59ED3A05FA8F6EF03D38F534139D56BCBD4BC3256E1A120D49A5DB1BADB528B0256C61A2F179A23C49928738F9C0FA81FC196D1A74507998415F070EF9C38BAA53951FEE7B68008BC675E0E15BC32A61C30BC132E79C58A3A970FFDDB8B806782DD31242B3C3CF9810BEEA5FB5A1B250EA62336456E7694B4C829508C7DBFE090AF6A850F79D04D2C698637816017F8A920E1B1ADE236E227B3480899BCBB991F6C6C240BBD4114AAF9875935558394A486652B0942F3409B66FAF8B8BF711CC8C34CCA41B8E16C2CDF0160B92A332C1F04BC64582446B98AFF34189675B7A10FFC6F13B3F74654ED7C0590D4AF7F4D747BF89BB2A8F5C8CE610CF4FA4AB714A845E15649B53E54A95213D5A73905941D9467B0BEDDA2BECC1C219E1CAB699652D85B8CD7E0CD11CE5B0CAC76F9EF3D74BD829877898E7350CCA72101076A970BEC6756C3FD1AAF3396F72833F8D4E716AEC6F93718B262710B0DA2F3FD6CBDB204ED0E91D65CAB39ED35F22A01E5D509282752837EBEE968B140989EF5F4D513452784BDB892CAFD8387E05B3012C0458A369E62191F5BDC57DD63CE42E945F493C2B42306B8084F3B25E94ABACF08EE155F3621ACC9626EE487C7A7E4667F0377AE4B2" #h"83D3DA3480824CC905C1FE0D9161448533B89C9FEB3328ABB4019C1B002EF28D") ironclad-0.57/testing/test-vectors/groestl-384.testvec000066400000000000000000000273651420372057600227740ustar00rootroot00000000000000(:digest-test #h"" #h"AC353C1095ACE21439251007862D6C62F829DDBE6DE4F78E68D310A9205A736D8B11D99BFFE448F57A1CFA2934F044A5") (:digest-test #h"CC" #h"180967815D83ACFD0C771C2140F5EED93EB4B346FC7B88E73D1FEBB77C6E11EA7834E35ECFABE03083A520DACB76E7B7") (:digest-test #h"41FB" #h"0D997470158F646947C3105EAFEB0A34D09D007BECB83EBFC1FEF41233EB92F6FD9225381F3939475669505B12BB724E") (:digest-test #h"1F877C" #h"CFBC8C4B1C59E39E8FFACB28D81EC520E9A65466737A88A19C62BB442CFDE76879D9575404A3BB86CD2AD867D765C3DE") (:digest-test #h"C1ECFDFC" #h"5E67844DDB8626EDECF9C40D826904058C126DC221A7136977600FDC3F0F2B0F1DA9DAAAB54ED2687017955AADC60086") (:digest-test #h"C6F50BB74E29" #h"3E3197BA9ECA972F90EA2C04FF35B8410D96A949EBE4847FFF070497A20281B4AAB2BBE23DF5381CB1BBA90BD67C627C") (:digest-test #h"119713CC83EEEF" #h"75AD2FC7B38CBDEB430C2A9CA9A2F05AC62D8C28574C16690BF6536EB00232EA9B002DD13BFDE8E9EFFD71178BD609C4") (:digest-test #h"4A4F202484512526" #h"631F3BB9B30322595B72ADD70628EEEA5C55CEDC9916D2A625EAB0B88C6FBF21333EF0EAC4560942766AF565315E483B") (:digest-test #h"52A608AB21CCDD8A4457A57EDE782176" #h"AF07BD127922DDE4F60D9C911E718D3345EF6CD37EE42BA7B0F91A401E3EE760E437F6FF602C380DD77FA4678160D721") (:digest-test #h"AECBB02759F7433D6FCB06963C74061CD83B5B3FFA6F13C6" #h"DB0D6A6517854778A3666D0B9DF0E75D26021E7224276763730219B8E956E4A98A69C993179D3A00C0EB9C008BAE7257") (:digest-test #h"9F2FCC7C90DE090D6B87CD7E9718C1EA6CB21118FC2D5DE9F97E5DB6AC1E9C10" #h"2B6C89FB77E6BB99E50762C31F69AC5D942D358FDF9FB211C515AE05A0D29526A829E47DB0598A146407CF895EFB0E95") (:digest-test #h"D8FABA1F5194C4DB5F176FABFFF856924EF627A37CD08CF55608BBA8F1E324D7C7F157298EABC4DCE7D89CE5162499F9" #h"74C4CDED272D6DAA6B18CFFD5F3B9D3EA4E06CA51E0B90211D094C8C17999CE56320CD68F2FF021D10BE18A57844C5AD") (:digest-test #h"E926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7" #h"428AA2346DDCBA643B9209B72CCBB56706A77846BCD1796387EE78A68086FAF84865F14163CF3E6C4BB585B4337E40E2") (:digest-test #h"69F9ABBA65592EE01DB4DCE52DBAB90B08FC04193602792EE4DAA263033D59081587B09BBE49D0B49C9825D22840B2FF5D9C5155F975F8F2C2E7A90C75D2E4A8040FE39F63BBAFB403D9E28CC3B86E04E394A9C9E8065BD3C85FA9F0C7891600" #h"F23FF03412DC67E385C1483F6C3CE233388F5A567E412B0B2FA5422D1FDBC7363AF9EB8F519AA9F559EC54596BE5351B") (:digest-test #h"2B6DB7CED8665EBE9DEB080295218426BDAA7C6DA9ADD2088932CDFFBAA1C14129BCCDD70F369EFB149285858D2B1D155D14DE2FDB680A8B027284055182A0CAE275234CC9C92863C1B4AB66F304CF0621CD54565F5BFF461D3B461BD40DF28198E3732501B4860EADD503D26D6E69338F4E0456E9E9BAF3D827AE685FB1D817" #h"91502D3DD560BCC6E2C7750DD95ABCE45A30E7DAF7F4B42D8774CE1FC504C93CD8139DAACBF6484FF496DEFAB324823D") (:digest-test #h"3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1" #h"DFAB86A389657A2C4D8D9D248CE12C26D03B3CCEBC5122226AF256432EBDBF4C9BAE3EB5363614A725E43216589D6299") (:digest-test #h"0EBF64AC017FEBDCA40FF85FD4AEB8F1A827561C150F74CD5E864857FBBA9C08A46EFB9FF7A16919618C9FB06BF8FE3F0859774DA6C38C5A0C54D44075D1BAF6482B7705C8E1A86E79B0FBF0328246B5E6BE013F934D4ECC34808A3639C49464309DF5AD250BF4521E41B4CDE563566B8625076AD7E260018EEE2F3252D15F36BDBBCE3C74758C68A0E72D83A37DB4D2022A80A4F6B16F4515053E1FE398CC6A74D343D4CBB403597AE68533E18EF893F756F6F554F98BCCBC84702D19F875D347C345B09EDFCB1C71BD6955C5178DFCB07376728CFC3AB9565C0A1A8DCA78221028B00B51B175A2DA2CC0A90C33C169EA8A1A2E375C087AC3657D28AC481D5B5C225AEFA85919FB8628F32F42F1FC0806A250143C084322FE9E30BCC8B89F3DA73469CEB935EE25887D843321CC8ABB3C75E15F4894CBB5731782372A5631979BBE6AEACDFB711A84F83BB89E0F92B88C5EE83E4F9A3C4F80624A17ED5549B77ED7D939C368CD9A92EAAE595105DE7E2889CAD71D01201580038FCF4AB4D285A13BEFAAA14FACFE5099A83F9E71D512519D055F44F757757BCEBBD2734CB91C5C4CE7B411D1E83B42689FDF8A69E63DDFD255B977D7435BEEB5DEBBBA7A47B19CDAB3F1C40E79B926A481A1629A818525C2A198983F23F0DA5DA8B99633689292332BCC2A4AD49769B3E448F8CEDB87C1DE2EF5D04E1C3A8116C3328F6B19B59C318E18F8DB29875C22A0A0C8EA615A593439F7B90AA2AD9C16CA573040A8190A834370378554BDA9DA9486AA3CE3F1B01DBA14B032B3C334F7A1E961426302ED2D38C34F61D7B4D182C0CA303C2F379E74EAF65A48D3D8A95616B2ABA5C88DBF6284C5CD68D902E3958A7B9529F49D38091BAC288734247FCE886D49BCE00AB98B1B962A8DA8B4710644E9DA418529E79A27408B52EB655FDE025A129A38EEEBA936657F725F0EC668380B9DD50C0759AC150F81B696B886E86A5447CCDCB3FBEC08C79471DC3111042FCFFFADC1A973340DD68610631FDDA6AD25148C2D0B48ADA24E6B2D42EA7510991C0455BA1B7F393CA1FA5801F182F89117885455DBF88F63CE0B77669BA965B73A344D3C4C787E3B4AAF58C56FB2589967C71969B1FE92C5E7D91094DBA84F470437339C1DC6918DD5FB835CBE69750363691B0CEE7B80F0D0AEB31DDBDAC52F904A3A91051B54ADF75B0D195763D29FD1B88244F61D6A304807B646326E76FB880D1DF37281A11CED52D5B5873668642C72CD7C70E36825CC17DA6E03C577D12F79CCEFD6B7B76C88B19F7606536793D8D33F7E0A598769883B417C3662B6267001BE7D0914563B2402149357D1C64680DA80B32207A67611EDF0E8D9A767E2BE2ABB21956FC764200945E4BC5830ACCCDC80DE485086514C63DA7F785CBA0C1E9CE5B249B52E7EE570D8657C63C4FC90856DFBBB24C8D2A711CB3A0960685EC55540F6EC2641A429D3DC99D82F26D2C7EACC614FFE988117D8F13B7442A9AE2929D3E1F67B974BB4A4AA960015C9216AFA844A243095F167B114700FB11215EB54357BCB1D4792A0B676C708E710211C3AF73D61B82F4D04BC40C898CE00A2D34C77F5E22DB71F46C939A0EC9C37D1647E23A0F44CC23D710A1DB20E38D009C6580192295C40B478A85A0930181D0962C3B18B6AAC7F5BE99607ADD25BBC23A7530E7E58C93F9FD4AFE5133FD228C6B4D9E43538CD9DCBE76C4D7DEDF22741839558A6B561847327DF7CFF1C17E03EB0ED9DD921974954638CADBF645A4BAA4A62774BA66E2E458A1F7AC67EC394429339C2F620D457F5DD06AE551B69BADDEE99A6C93EDC7BF7CD56898CEC4AB4E633489DD1934B3EAB68601E3560092CB9B1C64B90C9FBB6F62BE60B0E221F1F6E1D58444B731B30AB04C40988093FBD396E65BA703F52ACE0695035EE78E7A4969D3EB5834C58EF60FEE1DE0F0E03E4203FF50F957ED68513F9134A4332B56044EE14CE80EAD7CE532ACA58B1F98423C3CABD9921F83A81C7467B3C6F6DE4B12AD741C7345BD645854BBF859D110C8D60F53AFE65F6A8A0856BBF78954F8ECC831FBB43F030449A9FE72A3C86AB7962ACD28975530CB567CEA713BE76B2262A70896B8A3CAC66772C56A9ED139F3F4349898AECCDEBD5622F32A75EBBC9FE202FE56C957356D40AFEE4718C52D30FBF683CE17056E672F909110C087D361C196FE33C6D80DC6925769F6A93DD41B5BB5FEA806F3BF56C50D69B45A371AC5DCF5CF356BC552E0CF87E22AF0F121B21278B067138E2AFA098E7EDE1C0A8AB29B6CCF6B85D39ADB9CEDD013886D2C23C273A21267B2F2C22B5BF25D5A5CBD083684B454AB5FB854F90CB49B2F53795BBFD46348B30958398344F9C362040E1412F331E2DD1679F31ADBCF8D40BD3BF707A4F3558239A0B9488B3D6A264E6DA3911B0BE47DFF3257B193129DDA9F3C0D9ADEB161F8426CCD01AD2D0854F7319E12DF89DA88C98FBFEA96D1F40BD098AA46BEB471834B039D6F001F804ED3DC47CDE01D5B594D565D94F70BA7387822DBE8D0E44645A914F25D1D15F38EB4E5C9B4F48C6146DBEFF8D36C17E5E57A3F07E561AF390EDFA4E2CFECA19722A3BEEEA23782CD7AF8A61767B010F89A7082E04E807F5CEC49BF5AC71DB3DFDC5665CD1FA5B9EB0C3C7343C674730EC650A13BAE412126C68DAF917862ADB4E220461A6CD0C7511F4F31C47F8A41AC54FC0B34F07DC15060E9A43855DA0A162436B1D3A4B6D8EA87229FAECBBD9A2F0792266DD160E0F8671690411F8A9BC7429F8E0F4EB0098E33F0532057D1E05E6A78FF48A6BDF78176FB462E56B305476A78F099786A6793D2FC3F4F74DABD3A34BC2E50267F06157494B9966E1BF1F8708CBB770580CBB2467FC1B3595345A49A5D8EC528F3E2B3F91B06E0693F87FDA3B68CF99DF5C47BB18B767FBE74EC0B664AC0F1CC6592F01A5659A7F3B4293BFB8541F0A9E3F923A547DD1C784ED624CD3A2C9D1B8C308B3236E4146C93CDC36E17DFEDA5C123E735AD4FEAADCAABF9581BC1060726F545C308E56C7310093F7938A2083DC468BF5FF3C84C2271EC7533838FF15E6F7EE8C71115EA8E342BC33AD64467640B11EFE5F33CECDEE3058E8C17F8CA0488918506FE2FA10B92B9FA87DD7305362D24D4CE454A779612B112C7C7E6D4B632A8475EDADBEA13486CFAF5647E4DF1FB135AE793F8E6D23216B0ADF664A14397DAE07E133A1A58E15B25E9092B61FAD3619BD551858144B80D9075D34128C351643F101BADDFA990CE910F2A8D721B64C495A12F07AF3D32CEDAC92E20DD9638C0DB36EB7B1286138FE056EAE9D91C4A0AB7DC5267FB16A41B771EB01D54701FB43570482157BE10C6FA9E4D866B8B5D650EE6F3FE117B1FA79CBE4F8A9B97928EBA2FCA6D7669B384184895BFE76ABF484B03B9F7CA10308C6CE31197CA15B1A36CEDC3774B6B9DDCC2431E732DB36537F1F4F4883E81E7B3C6D368B4EBDCE34C657711D2CBB4158D519E027C5B4B64575AFCD87CE736C45028D378D70C0FDE73B5499FFB307B9DD82073833C0A84769964FBD7D01C4ECE805E122364B2B485B6DAC7793F1EE7F1CB2A50AE6565CD210308260EF64D9B2FE8378516AD093960D5CA8CFA9FCF28762998020743086B93EEDEC324784428EBA23141466185C740055B1E87BF7F6BEF5CE8E28DD270F9DA64D6FFF2CB0D73A734D45DC56CD03BE9414DB568EE2366F2166FD6D43AF9EEECB13C4A5D3A8E775BEE5942194033AE3EE1754FC046BE91130979AB88E47A4CEA379ED9E77BC4310DDAE2BDB7A5B941E3FB6081CC3ED710E0C603D47EFA82FCCC0D556D4AB58825EBE6EC7700F02FB7A0EED44CD2F8772CCDEE4BA4B883DAAB46264A569AAAE97A0E4369EC00F59D841A1A7CF2D39BC58725B248C7B159D6D68B3D9721231CACAAD38F26F357BFD31FFCEC18CF34EE42C3B375C827C4284B31FCD4374CFE8C2C7A6B952581C9837587CB161EECA237290AFE8095E069A99514DFAFC2FD8CFC734B4AE64807D3ACA2681ADE0FA018B17D2A61F30F0307AE86D67D4A14D9CE214CF41EDB702735F99D58BDACE7F28C7D95A9CAE8B079708C6C7E78ACCAB67F67A598F7C86FE8B8AB6539B2EBB376B6A17144A3ADAD6BE5D617D30607AB4D94C11A7C1858E19B5C7B12F9BE4AC245A9E91A22EE5471AA58538AFB35319F53D6DD69BC2AE48D2B649DFF6E71DEA3B797C071A0C345F66DF053475A40031F323908C71A198C7FB2D542AA8DD97B2F1CE01D11E7FC458518CE1CB451BB9B1D57530D15EC95BA73BD5A386947FF8D0F565549A11B88759D6ABA3A83967BF9543E640A33F6F9D9655A547785B42B11216EC1CCE067630E89708CA896733129DB5312169003B8FACB8DE3F99E65427AEF51CC1C91005BB7F5B65218B1B492FDD67761E0F7C2FC60F7ECA13B09DF6B2A53B5B9CEAB43D5A1EC3260A89B54BC257850F0659E3240DAF073CC5236F65B159CF8FDEC771911C054BB417F6799330D443A735704E66EA9F1D3351837197C19E8226D27A1EB5B664781CF0651231AB25678A4C9F9973DA830ED3871A6EE638DDA3C789B0AC27DF49717CA2A1DF46968D56035EF02B712D12067E72B1E661120FC1FDE4FE6B11BB4D189F29112DBBD6DD0D9E4E78501C8E5EEECC333B208D7B86522C61DE4ED0D4454D19CA62027627344F455C05F429FA17E4A6F0BAFCD4B575CBA3755B042382942190B6EAF762DF7714797E916D58E7DD0DE2CFC41D8E6E410DE623EA5C547334D3A21488CD2D65E6F9E0F123166FD8304309D0160B5A605317E0122308F9FF065AE6ED422437C962A1362EC1F2804B274E3BAE118292FF930BD519EFD3A93E40F949ABC60E8E9190DAAF9FC8099A44311861B02FFB4F9A0AEA81999170ED5BD14B727B42EB44B0B55983F1AC2F2BA80734630D6B7500D65EAB42F6771EEA6872677E252DA4C717BAA07760BFC5FE09D4835A65200A80C2759A476A930B7FB4A738241C3E73A9C75D5A7F0A0BE52138DDA2812AEFBA8FD78D5840E6EA1D15C57EA66A59B3A882A8FD04093A5815A5324BE75C4F83CF16B785D2D3BD36602A0026A9895CB343688EEA40CDB483EDCD87788B668A69D0BC75B07D8C8247A9780E4C1EC342C1198295D699F0829E41A78F0F9978DD52D6491898F1F05B979E587F711DF66F38C23C2BFF9C69086AB970C468315B3B6C36D58A7AE9C749FA06429E6781AE7D49B3B368048641A63DB95EE293A1954201CAD72E92A85E34C7A74B2FD1BCA6AA61435AF2DC32C1A2F559F63E716A6C96F076097E6C45F4372AE6828E9EAAE3EB82361710EC14F67F7D0ED9859249C18D14985302847FC8F3301BD31C7E1E09B2057E9EE46FCC7C9BD8DB59EB0DEB0B1D8D291508CB3837C9B2F191A49595D6AADDCEFEF0DD59ED3A05FA8F6EF03D38F534139D56BCBD4BC3256E1A120D49A5DB1BADB528B0256C61A2F179A23C49928738F9C0FA81FC196D1A74507998415F070EF9C38BAA53951FEE7B68008BC675E0E15BC32A61C30BC132E79C58A3A970FFDDB8B806782DD31242B3C3CF9810BEEA5FB5A1B250EA62336456E7694B4C829508C7DBFE090AF6A850F79D04D2C698637816017F8A920E1B1ADE236E227B3480899BCBB991F6C6C240BBD4114AAF9875935558394A486652B0942F3409B66FAF8B8BF711CC8C34CCA41B8E16C2CDF0160B92A332C1F04BC64582446B98AFF34189675B7A10FFC6F13B3F74654ED7C0590D4AF7F4D747BF89BB2A8F5C8CE610CF4FA4AB714A845E15649B53E54A95213D5A73905941D9467B0BEDDA2BECC1C219E1CAB699652D85B8CD7E0CD11CE5B0CAC76F9EF3D74BD829877898E7350CCA72101076A970BEC6756C3FD1AAF3396F72833F8D4E716AEC6F93718B262710B0DA2F3FD6CBDB204ED0E91D65CAB39ED35F22A01E5D509282752837EBEE968B140989EF5F4D513452784BDB892CAFD8387E05B3012C0458A369E62191F5BDC57DD63CE42E945F493C2B42306B8084F3B25E94ABACF08EE155F3621ACC9626EE487C7A7E4667F0377AE4B2" #h"7EF97602AA426A643D38A175C607C1EFD72A6537717AE1B5EAE2E368DB69ABFC1EB1CF3C2276EA5F2F4DE1B08E30924A") ironclad-0.57/testing/test-vectors/groestl.testvec000066400000000000000000000304251420372057600224470ustar00rootroot00000000000000(:digest-test #h"" #h"6D3AD29D279110EEF3ADBD66DE2A0345A77BAEDE1557F5D099FCE0C03D6DC2BA8E6D4A6633DFBD66053C20FAA87D1A11F39A7FBE4A6C2F009801370308FC4AD8") (:digest-test #h"CC" #h"B23EEEB675C272C6E37A6EE9AB4DC505C9D6A10020F6BED3948205D04CDD1E90B06E494D186EF4F19266D7DA200C89DC009E2B1A538CDEA199E773FC076F802E") (:digest-test #h"41FB" #h"272BA3FD8A6E392278F234E5053411E8267375A4F9B05D960AFD2E664A67448F500F8BCDD5B8A68D0BDDF3BAF873CDDDE5C235943C58353AD90AED79A6C39CF3") (:digest-test #h"1F877C" #h"413907C17D8CA9E5477DE5491914DC4EB621F35C96267F8E807AFFC0335DD8F6781C053CED249FF3C8C5A4D4AC62FE3D9E6660B30CC09621DE7162E6C271D3C7") (:digest-test #h"C1ECFDFC" #h"4726D760203C1EAF847F6837C74C16ADCEF5B55EAD5768A7C13E21A33D0D7B740F52DE8C81356DA63DABA791DA6680AF015DEB81246550201F232822BB087CE5") (:digest-test #h"C6F50BB74E29" #h"E44A8D25CF351F81AEBAF5A0FCC464C22778813B998268BB422B58C7147F5BFD021302DB33236344BEDCFE83485171BB2C3707628938A9EF7C1918E0EF95BB23") (:digest-test #h"119713CC83EEEF" #h"2EDA0E85C70122155190C52280B4587A9035C479514493848372D72D5D74707A6272C879A8C3E6CEFE2566CAA72C38B0C369B6B84A019BF8F97A84E9304A097E") (:digest-test #h"4A4F202484512526" #h"75D6AE946BC0D3C56D23D0AB0BB85EE1EB4904970EA85225471E54D19E026F4092EA2F4705FC1DA2BFAFCCFCE268E5F864DABF246539821DA19C3F544180A103") (:digest-test #h"52A608AB21CCDD8A4457A57EDE782176" #h"34A2449CF43CB8C943266EBA68A960F98D90811191BB707A01E9F358E8CA26796443FFD4158FD26977B13BE9CF1ADFC3DD8A72745C593D3875921E511C00B559") (:digest-test #h"AECBB02759F7433D6FCB06963C74061CD83B5B3FFA6F13C6" #h"64585F6F6E062CCC299319E5AFD27C05FE9EB484FCEF4396D17108F2EC5AB5F6A2ACFED5DE3A2DF24765E8E12ED699A21AEAA8914D859BA8BF3AB913CE80D4A6") (:digest-test #h"9F2FCC7C90DE090D6B87CD7E9718C1EA6CB21118FC2D5DE9F97E5DB6AC1E9C10" #h"2F84CFC1EA8E271E47E66BDEA3CAC8015B5B881C3E6CC074AB311BB436AC6CF59DDECB75BCD6989E9C97D89BDE523A8C53C837494A77E7B73481B2E89DBD7FD6") (:digest-test #h"D8FABA1F5194C4DB5F176FABFFF856924EF627A37CD08CF55608BBA8F1E324D7C7F157298EABC4DCE7D89CE5162499F9" #h"78890C54EE8E6290E10E358E778BD34E5291B53FA1F611234169666700FC8FC689B4FDC0FC04FE55E6E305603E1E11F972B7D67BDCB61F5C7880B584B8202A38") (:digest-test #h"E926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7" #h"E8EEDDEF7104F8EE0A93C4BE5028DB073B7AC44B73787B3ADCAFDB8AADE084C19550EBB1D968E2B26B9F99BA48D5686E1D7658725F6934A845CB5EE475B8B7F0") (:digest-test #h"69F9ABBA65592EE01DB4DCE52DBAB90B08FC04193602792EE4DAA263033D59081587B09BBE49D0B49C9825D22840B2FF5D9C5155F975F8F2C2E7A90C75D2E4A8040FE39F63BBAFB403D9E28CC3B86E04E394A9C9E8065BD3C85FA9F0C7891600" #h"9ABCB635F87D3CD3B67635A881C504215FF22D2EAC9B482C521C80584361E66523DE99C3FCE00207F85A88DD319621F8F145D2A0583E7A5FAECE46FDBCB0D0D4") (:digest-test #h"2B6DB7CED8665EBE9DEB080295218426BDAA7C6DA9ADD2088932CDFFBAA1C14129BCCDD70F369EFB149285858D2B1D155D14DE2FDB680A8B027284055182A0CAE275234CC9C92863C1B4AB66F304CF0621CD54565F5BFF461D3B461BD40DF28198E3732501B4860EADD503D26D6E69338F4E0456E9E9BAF3D827AE685FB1D817" #h"FF410B511135DBC0B8644C28EFA3EC632326FEB98E50EDC6390C441610D7C514ACDF0A61A0BF01AA9DC1F55D92E085248EBA1C24EE23978B4986AF41C13A6176") (:digest-test #h"3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1" #h"42EDFE5595C0C5DF6A02EEAD0FEB4092D970C54147BD781023AFA29452D96884DB3047C72A1395D12C12C713B11CF0A3E478950F473FE2D47D253F0203BA5C6A") (:digest-test #h"0EBF64AC017FEBDCA40FF85FD4AEB8F1A827561C150F74CD5E864857FBBA9C08A46EFB9FF7A16919618C9FB06BF8FE3F0859774DA6C38C5A0C54D44075D1BAF6482B7705C8E1A86E79B0FBF0328246B5E6BE013F934D4ECC34808A3639C49464309DF5AD250BF4521E41B4CDE563566B8625076AD7E260018EEE2F3252D15F36BDBBCE3C74758C68A0E72D83A37DB4D2022A80A4F6B16F4515053E1FE398CC6A74D343D4CBB403597AE68533E18EF893F756F6F554F98BCCBC84702D19F875D347C345B09EDFCB1C71BD6955C5178DFCB07376728CFC3AB9565C0A1A8DCA78221028B00B51B175A2DA2CC0A90C33C169EA8A1A2E375C087AC3657D28AC481D5B5C225AEFA85919FB8628F32F42F1FC0806A250143C084322FE9E30BCC8B89F3DA73469CEB935EE25887D843321CC8ABB3C75E15F4894CBB5731782372A5631979BBE6AEACDFB711A84F83BB89E0F92B88C5EE83E4F9A3C4F80624A17ED5549B77ED7D939C368CD9A92EAAE595105DE7E2889CAD71D01201580038FCF4AB4D285A13BEFAAA14FACFE5099A83F9E71D512519D055F44F757757BCEBBD2734CB91C5C4CE7B411D1E83B42689FDF8A69E63DDFD255B977D7435BEEB5DEBBBA7A47B19CDAB3F1C40E79B926A481A1629A818525C2A198983F23F0DA5DA8B99633689292332BCC2A4AD49769B3E448F8CEDB87C1DE2EF5D04E1C3A8116C3328F6B19B59C318E18F8DB29875C22A0A0C8EA615A593439F7B90AA2AD9C16CA573040A8190A834370378554BDA9DA9486AA3CE3F1B01DBA14B032B3C334F7A1E961426302ED2D38C34F61D7B4D182C0CA303C2F379E74EAF65A48D3D8A95616B2ABA5C88DBF6284C5CD68D902E3958A7B9529F49D38091BAC288734247FCE886D49BCE00AB98B1B962A8DA8B4710644E9DA418529E79A27408B52EB655FDE025A129A38EEEBA936657F725F0EC668380B9DD50C0759AC150F81B696B886E86A5447CCDCB3FBEC08C79471DC3111042FCFFFADC1A973340DD68610631FDDA6AD25148C2D0B48ADA24E6B2D42EA7510991C0455BA1B7F393CA1FA5801F182F89117885455DBF88F63CE0B77669BA965B73A344D3C4C787E3B4AAF58C56FB2589967C71969B1FE92C5E7D91094DBA84F470437339C1DC6918DD5FB835CBE69750363691B0CEE7B80F0D0AEB31DDBDAC52F904A3A91051B54ADF75B0D195763D29FD1B88244F61D6A304807B646326E76FB880D1DF37281A11CED52D5B5873668642C72CD7C70E36825CC17DA6E03C577D12F79CCEFD6B7B76C88B19F7606536793D8D33F7E0A598769883B417C3662B6267001BE7D0914563B2402149357D1C64680DA80B32207A67611EDF0E8D9A767E2BE2ABB21956FC764200945E4BC5830ACCCDC80DE485086514C63DA7F785CBA0C1E9CE5B249B52E7EE570D8657C63C4FC90856DFBBB24C8D2A711CB3A0960685EC55540F6EC2641A429D3DC99D82F26D2C7EACC614FFE988117D8F13B7442A9AE2929D3E1F67B974BB4A4AA960015C9216AFA844A243095F167B114700FB11215EB54357BCB1D4792A0B676C708E710211C3AF73D61B82F4D04BC40C898CE00A2D34C77F5E22DB71F46C939A0EC9C37D1647E23A0F44CC23D710A1DB20E38D009C6580192295C40B478A85A0930181D0962C3B18B6AAC7F5BE99607ADD25BBC23A7530E7E58C93F9FD4AFE5133FD228C6B4D9E43538CD9DCBE76C4D7DEDF22741839558A6B561847327DF7CFF1C17E03EB0ED9DD921974954638CADBF645A4BAA4A62774BA66E2E458A1F7AC67EC394429339C2F620D457F5DD06AE551B69BADDEE99A6C93EDC7BF7CD56898CEC4AB4E633489DD1934B3EAB68601E3560092CB9B1C64B90C9FBB6F62BE60B0E221F1F6E1D58444B731B30AB04C40988093FBD396E65BA703F52ACE0695035EE78E7A4969D3EB5834C58EF60FEE1DE0F0E03E4203FF50F957ED68513F9134A4332B56044EE14CE80EAD7CE532ACA58B1F98423C3CABD9921F83A81C7467B3C6F6DE4B12AD741C7345BD645854BBF859D110C8D60F53AFE65F6A8A0856BBF78954F8ECC831FBB43F030449A9FE72A3C86AB7962ACD28975530CB567CEA713BE76B2262A70896B8A3CAC66772C56A9ED139F3F4349898AECCDEBD5622F32A75EBBC9FE202FE56C957356D40AFEE4718C52D30FBF683CE17056E672F909110C087D361C196FE33C6D80DC6925769F6A93DD41B5BB5FEA806F3BF56C50D69B45A371AC5DCF5CF356BC552E0CF87E22AF0F121B21278B067138E2AFA098E7EDE1C0A8AB29B6CCF6B85D39ADB9CEDD013886D2C23C273A21267B2F2C22B5BF25D5A5CBD083684B454AB5FB854F90CB49B2F53795BBFD46348B30958398344F9C362040E1412F331E2DD1679F31ADBCF8D40BD3BF707A4F3558239A0B9488B3D6A264E6DA3911B0BE47DFF3257B193129DDA9F3C0D9ADEB161F8426CCD01AD2D0854F7319E12DF89DA88C98FBFEA96D1F40BD098AA46BEB471834B039D6F001F804ED3DC47CDE01D5B594D565D94F70BA7387822DBE8D0E44645A914F25D1D15F38EB4E5C9B4F48C6146DBEFF8D36C17E5E57A3F07E561AF390EDFA4E2CFECA19722A3BEEEA23782CD7AF8A61767B010F89A7082E04E807F5CEC49BF5AC71DB3DFDC5665CD1FA5B9EB0C3C7343C674730EC650A13BAE412126C68DAF917862ADB4E220461A6CD0C7511F4F31C47F8A41AC54FC0B34F07DC15060E9A43855DA0A162436B1D3A4B6D8EA87229FAECBBD9A2F0792266DD160E0F8671690411F8A9BC7429F8E0F4EB0098E33F0532057D1E05E6A78FF48A6BDF78176FB462E56B305476A78F099786A6793D2FC3F4F74DABD3A34BC2E50267F06157494B9966E1BF1F8708CBB770580CBB2467FC1B3595345A49A5D8EC528F3E2B3F91B06E0693F87FDA3B68CF99DF5C47BB18B767FBE74EC0B664AC0F1CC6592F01A5659A7F3B4293BFB8541F0A9E3F923A547DD1C784ED624CD3A2C9D1B8C308B3236E4146C93CDC36E17DFEDA5C123E735AD4FEAADCAABF9581BC1060726F545C308E56C7310093F7938A2083DC468BF5FF3C84C2271EC7533838FF15E6F7EE8C71115EA8E342BC33AD64467640B11EFE5F33CECDEE3058E8C17F8CA0488918506FE2FA10B92B9FA87DD7305362D24D4CE454A779612B112C7C7E6D4B632A8475EDADBEA13486CFAF5647E4DF1FB135AE793F8E6D23216B0ADF664A14397DAE07E133A1A58E15B25E9092B61FAD3619BD551858144B80D9075D34128C351643F101BADDFA990CE910F2A8D721B64C495A12F07AF3D32CEDAC92E20DD9638C0DB36EB7B1286138FE056EAE9D91C4A0AB7DC5267FB16A41B771EB01D54701FB43570482157BE10C6FA9E4D866B8B5D650EE6F3FE117B1FA79CBE4F8A9B97928EBA2FCA6D7669B384184895BFE76ABF484B03B9F7CA10308C6CE31197CA15B1A36CEDC3774B6B9DDCC2431E732DB36537F1F4F4883E81E7B3C6D368B4EBDCE34C657711D2CBB4158D519E027C5B4B64575AFCD87CE736C45028D378D70C0FDE73B5499FFB307B9DD82073833C0A84769964FBD7D01C4ECE805E122364B2B485B6DAC7793F1EE7F1CB2A50AE6565CD210308260EF64D9B2FE8378516AD093960D5CA8CFA9FCF28762998020743086B93EEDEC324784428EBA23141466185C740055B1E87BF7F6BEF5CE8E28DD270F9DA64D6FFF2CB0D73A734D45DC56CD03BE9414DB568EE2366F2166FD6D43AF9EEECB13C4A5D3A8E775BEE5942194033AE3EE1754FC046BE91130979AB88E47A4CEA379ED9E77BC4310DDAE2BDB7A5B941E3FB6081CC3ED710E0C603D47EFA82FCCC0D556D4AB58825EBE6EC7700F02FB7A0EED44CD2F8772CCDEE4BA4B883DAAB46264A569AAAE97A0E4369EC00F59D841A1A7CF2D39BC58725B248C7B159D6D68B3D9721231CACAAD38F26F357BFD31FFCEC18CF34EE42C3B375C827C4284B31FCD4374CFE8C2C7A6B952581C9837587CB161EECA237290AFE8095E069A99514DFAFC2FD8CFC734B4AE64807D3ACA2681ADE0FA018B17D2A61F30F0307AE86D67D4A14D9CE214CF41EDB702735F99D58BDACE7F28C7D95A9CAE8B079708C6C7E78ACCAB67F67A598F7C86FE8B8AB6539B2EBB376B6A17144A3ADAD6BE5D617D30607AB4D94C11A7C1858E19B5C7B12F9BE4AC245A9E91A22EE5471AA58538AFB35319F53D6DD69BC2AE48D2B649DFF6E71DEA3B797C071A0C345F66DF053475A40031F323908C71A198C7FB2D542AA8DD97B2F1CE01D11E7FC458518CE1CB451BB9B1D57530D15EC95BA73BD5A386947FF8D0F565549A11B88759D6ABA3A83967BF9543E640A33F6F9D9655A547785B42B11216EC1CCE067630E89708CA896733129DB5312169003B8FACB8DE3F99E65427AEF51CC1C91005BB7F5B65218B1B492FDD67761E0F7C2FC60F7ECA13B09DF6B2A53B5B9CEAB43D5A1EC3260A89B54BC257850F0659E3240DAF073CC5236F65B159CF8FDEC771911C054BB417F6799330D443A735704E66EA9F1D3351837197C19E8226D27A1EB5B664781CF0651231AB25678A4C9F9973DA830ED3871A6EE638DDA3C789B0AC27DF49717CA2A1DF46968D56035EF02B712D12067E72B1E661120FC1FDE4FE6B11BB4D189F29112DBBD6DD0D9E4E78501C8E5EEECC333B208D7B86522C61DE4ED0D4454D19CA62027627344F455C05F429FA17E4A6F0BAFCD4B575CBA3755B042382942190B6EAF762DF7714797E916D58E7DD0DE2CFC41D8E6E410DE623EA5C547334D3A21488CD2D65E6F9E0F123166FD8304309D0160B5A605317E0122308F9FF065AE6ED422437C962A1362EC1F2804B274E3BAE118292FF930BD519EFD3A93E40F949ABC60E8E9190DAAF9FC8099A44311861B02FFB4F9A0AEA81999170ED5BD14B727B42EB44B0B55983F1AC2F2BA80734630D6B7500D65EAB42F6771EEA6872677E252DA4C717BAA07760BFC5FE09D4835A65200A80C2759A476A930B7FB4A738241C3E73A9C75D5A7F0A0BE52138DDA2812AEFBA8FD78D5840E6EA1D15C57EA66A59B3A882A8FD04093A5815A5324BE75C4F83CF16B785D2D3BD36602A0026A9895CB343688EEA40CDB483EDCD87788B668A69D0BC75B07D8C8247A9780E4C1EC342C1198295D699F0829E41A78F0F9978DD52D6491898F1F05B979E587F711DF66F38C23C2BFF9C69086AB970C468315B3B6C36D58A7AE9C749FA06429E6781AE7D49B3B368048641A63DB95EE293A1954201CAD72E92A85E34C7A74B2FD1BCA6AA61435AF2DC32C1A2F559F63E716A6C96F076097E6C45F4372AE6828E9EAAE3EB82361710EC14F67F7D0ED9859249C18D14985302847FC8F3301BD31C7E1E09B2057E9EE46FCC7C9BD8DB59EB0DEB0B1D8D291508CB3837C9B2F191A49595D6AADDCEFEF0DD59ED3A05FA8F6EF03D38F534139D56BCBD4BC3256E1A120D49A5DB1BADB528B0256C61A2F179A23C49928738F9C0FA81FC196D1A74507998415F070EF9C38BAA53951FEE7B68008BC675E0E15BC32A61C30BC132E79C58A3A970FFDDB8B806782DD31242B3C3CF9810BEEA5FB5A1B250EA62336456E7694B4C829508C7DBFE090AF6A850F79D04D2C698637816017F8A920E1B1ADE236E227B3480899BCBB991F6C6C240BBD4114AAF9875935558394A486652B0942F3409B66FAF8B8BF711CC8C34CCA41B8E16C2CDF0160B92A332C1F04BC64582446B98AFF34189675B7A10FFC6F13B3F74654ED7C0590D4AF7F4D747BF89BB2A8F5C8CE610CF4FA4AB714A845E15649B53E54A95213D5A73905941D9467B0BEDDA2BECC1C219E1CAB699652D85B8CD7E0CD11CE5B0CAC76F9EF3D74BD829877898E7350CCA72101076A970BEC6756C3FD1AAF3396F72833F8D4E716AEC6F93718B262710B0DA2F3FD6CBDB204ED0E91D65CAB39ED35F22A01E5D509282752837EBEE968B140989EF5F4D513452784BDB892CAFD8387E05B3012C0458A369E62191F5BDC57DD63CE42E945F493C2B42306B8084F3B25E94ABACF08EE155F3621ACC9626EE487C7A7E4667F0377AE4B2" #h"D8E719C10134B2A95F4C9CF06BC7A4863E77F70437E1504067CACB3066C32C5C8D87D7E3656B2D2C83AAAC1063824B4FFBEB63C744AD0E775736FBB421478CBC") ironclad-0.57/testing/test-vectors/hmac-kdf.lisp000066400000000000000000000115241420372057600217330ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto-tests) ;;; from RFC 5869 ;;; with SHA-256 (rtest:deftest hmac-kdf-1 (run-kdf-test (crypto:make-kdf 'crypto:hmac-kdf :digest :sha256 :additional-data (ironclad:hex-string-to-byte-array "f0f1f2f3f4f5f6f7f8f9")) (ironclad:hex-string-to-byte-array "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b") (ironclad:hex-string-to-byte-array "000102030405060708090a0b0c") 0 42 (ironclad:hex-string-to-byte-array "3cb25f25faacd57a90434f64d0362f2a2d2d0a90cf1a5a4c5db02d56ecc4c5bf34007208d5b887185865")) t) (rtest:deftest hmac-kdf-2 (run-kdf-test (crypto:make-kdf 'crypto:hmac-kdf :digest :sha256 :additional-data (ironclad:hex-string-to-byte-array "b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff")) (ironclad:hex-string-to-byte-array "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f") (ironclad:hex-string-to-byte-array "606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf") 0 82 (ironclad:hex-string-to-byte-array "b11e398dc80327a1c8e7f78c596a49344f012eda2d4efad8a050cc4c19afa97c59045a99cac7827271cb41c65e590e09da3275600c2f09b8367793a9aca3db71cc30c58179ec3e87c14c01d5c1f3434f1d87")) t) (rtest:deftest hmac-kdf-3 (run-kdf-test (crypto:make-kdf 'crypto:hmac-kdf :digest :sha256) (ironclad:hex-string-to-byte-array "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b") (make-array 0 :element-type '(unsigned-byte 8)) 0 42 (ironclad:hex-string-to-byte-array "8da4e775a563c18f715f802a063c5a31b8a11f5c5ee1879ec3454e5f3c738d2d9d201395faa4b61a96c8")) t) ;;; with SHA-1 (rtest:deftest hmac-kdf-4 (run-kdf-test (crypto:make-kdf 'crypto:hmac-kdf :digest :sha1 :additional-data (ironclad:hex-string-to-byte-array "f0f1f2f3f4f5f6f7f8f9")) (ironclad:hex-string-to-byte-array "0b0b0b0b0b0b0b0b0b0b0b") (ironclad:hex-string-to-byte-array "000102030405060708090a0b0c") 0 42 (ironclad:hex-string-to-byte-array "085a01ea1b10f36933068b56efa5ad81a4f14b822f5b091568a9cdd4f155fda2c22e422478d305f3f896")) t) (rtest:deftest hmac-kdf-5 (run-kdf-test (crypto:make-kdf 'crypto:hmac-kdf :digest :sha1 :additional-data (ironclad:hex-string-to-byte-array "b0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff")) (ironclad:hex-string-to-byte-array "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f") (ironclad:hex-string-to-byte-array "606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf") 0 82 (ironclad:hex-string-to-byte-array "0bd770a74d1160f7c9f12cd5912a06ebff6adcae899d92191fe4305673ba2ffe8fa3f1a4e5ad79f3f334b3b202b2173c486ea37ce3d397ed034c7f9dfeb15c5e927336d0441f4c4300e2cff0d0900b52d3b4")) t) (rtest:deftest hmac-kdf-6 (run-kdf-test (crypto:make-kdf 'crypto:hmac-kdf :digest :sha1) (ironclad:hex-string-to-byte-array "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b") (make-array 0 :element-type '(unsigned-byte 8)) 0 42 (ironclad:hex-string-to-byte-array "0ac1af7002b3d761d1e55298da9d0506b9ae52057220a306e07b6b87e8df21d0ea00033de03984d34918")) t) (rtest:deftest hmac-kdf-7 (run-kdf-test (crypto:make-kdf 'crypto:hmac-kdf :digest :sha1) (ironclad:hex-string-to-byte-array "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c") (make-array 0 :element-type '(unsigned-byte 8)) 0 42 (ironclad:hex-string-to-byte-array "2c91117204d745f3500d636a62f64f0ab3bae548aa53d423b0d1f27ebba6f5e5673a081d70cce7acfc48")) t) ironclad-0.57/testing/test-vectors/hmac.testvec000066400000000000000000000137301420372057600217000ustar00rootroot00000000000000;;; tests from RFC 2104 (:mac-test #h"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" #h"4869205468657265" #h"9294727A3638BB1C13F48EF8158BFC9D" :md5) (:mac-test #h"4a656665" #h"7768617420646f2079612077616e7420666f72206e6f7468696e673f" #h"750c783e6ab0b503eaa86e310a5db738" :md5) (:mac-test #h"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" #h"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd" #h"56be34521d144c88dbb8c733f0e8b3f6" :md5) ;;; tests from RFC 4231 ;;; HMAC-SHA-224 (:mac-test #h"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" #h"4869205468657265" #h"896fb1128abbdf196832107cd49df33f47b4b1169912ba4f53684b22" :sha224) (:mac-test #h"4a656665" #h"7768617420646f2079612077616e7420666f72206e6f7468696e673f" #h"a30e01098bc6dbbf45690f3a7e9e6d0f8bbea2a39e6148008fd05e44" :sha224) (:mac-test #h"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" #h"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd" #h"7fb3cb3588c6c1f6ffa9694d7d6ad2649365b0c1f65d69d1ec8333ea" :sha224) (:mac-test #h"0102030405060708090a0b0c0d0e0f10111213141516171819" #h"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" #h"6c11506874013cac6a2abc1bb382627cec6a90d86efc012de7afec5a" :sha224) (:mac-test #h"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" #h"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b6579202d2048617368204b6579204669727374" #h"95e9a0db962095adaebe9b2d6f0dbce2d499f112f2d2b7273fa6870e" :sha224) ;;; HMAC-SHA-256 (:mac-test #h"4a656665" #h"7768617420646f2079612077616e7420666f72206e6f7468696e673f" #h"5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843" :sha256) (:mac-test #h"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" #h"4869205468657265" #h"b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7" :sha256) (:mac-test #h"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" #h"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd" #h"773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe" :sha256) (:mac-test #h"0102030405060708090a0b0c0d0e0f10111213141516171819" #h"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" #h"82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b" :sha256) (:mac-test #h"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" #h"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b6579202d2048617368204b6579204669727374" #h"60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54" :sha256) ;;; HMAC-SHA-384 (:mac-test #h"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" #h"4869205468657265" #h"afd03944d84895626b0825f4ab46907f15f9dadbe4101ec682aa034c7cebc59cfaea9ea9076ede7f4af152e8b2fa9cb6" :sha384) (:mac-test #h"4a656665" #h"7768617420646f2079612077616e7420666f72206e6f7468696e673f" #h"af45d2e376484031617f78d2b58a6b1b9c7ef464f5a01b47e42ec3736322445e8e2240ca5e69e2c78b3239ecfab21649" :sha384) (:mac-test #h"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" #h"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd" #h"88062608d3e6ad8a0aa2ace014c8a86f0aa635d947ac9febe83ef4e55966144b2a5ab39dc13814b94e3ab6e101a34f27" :sha384) (:mac-test #h"0102030405060708090a0b0c0d0e0f10111213141516171819" #h"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" #h"3e8a69b7783c25851933ab6290af6ca77a9981480850009cc5577c6e1f573b4e6801dd23c4a7d679ccf8a386c674cffb" :sha384) (:mac-test #h"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" #h"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b6579202d2048617368204b6579204669727374" #h"4ece084485813e9088d2c63a041bc5b44f9ef1012a2b588f3cd11f05033ac4c60c2ef6ab4030fe8296248df163f44952" :sha384) ;;; HMAC-SHA-512 (:mac-test #h"4a656665" #h"7768617420646f2079612077616e7420666f72206e6f7468696e673f" #h"164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737" :sha512) (:mac-test #h"0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" #h"4869205468657265" #h"87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854" :sha512) (:mac-test #h"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" #h"dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd" #h"fa73b0089d56a284efb0f0756c890be9b1b5dbdd8ee81a3655f83e33b2279d39bf3e848279a722c806b485a47e67c807b946a337bee8942674278859e13292fb" :sha512) (:mac-test #h"0102030405060708090a0b0c0d0e0f10111213141516171819" #h"cdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcdcd" #h"b0ba465637458c6990e5a8c5f61d4af7e576d97ff94b872de76f8050361ee3dba91ca5c11aa25eb4d679275cc5788063a5f19741120c4f2de2adebeb10a298dd" :sha512) (:mac-test #h"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" #h"54657374205573696e67204c6172676572205468616e20426c6f636b2d53697a65204b6579202d2048617368204b6579204669727374" #h"80b24263c7c1a3ebb71493c1dd7be8b49b46d1f41b4aeec1121b013783f8f3526b56d037e05f2598bd0fd2215d6a1e5295e64f73f63f0aec8b915a985d786598" :sha512) ironclad-0.57/testing/test-vectors/idea.testvec000066400000000000000000000120451420372057600216700ustar00rootroot00000000000000(:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"D53FABBF94FF8B5F" #h"1D0CB2AF1654820A") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"848F836780938169" #h"D7E0468226D0FC56") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"819440CA2065D112" #h"264A8BBA66959075") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"6889F5647AB23D59" #h"F963468B52F45D4D") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"DF8C6FC637E3DAD1" #h"29358CC6C83828AE") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"AC4856242B121589" #h"95CD92F44BACB72D") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"CBE465F232F9D85C" #h"BCE24DC8D0961C44") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"6C2E3617DA2BAC35" #h"1569E0627007B12E") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"D53FABBF94FF8B5F" #h"1320F99BFE052804") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"848F836780938169" #h"4821B99F61ACEBB7") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"819440CA2065D112" #h"C88600093B348575") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"6889F5647AB23D59" #h"61D5397046F99637") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"DF8C6FC637E3DAD1" #h"EF4899B48DE5907C") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"AC4856242B121589" #h"85C6B232294C2F27") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"CBE465F232F9D85C" #h"B67AC767C0C06A55") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"6C2E3617DA2BAC35" #h"B2229067630F7045") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"0000ABBF94FF8B5F" #h"65861BE574E1EAB6") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"848F836780938169" #h"D7E0468226D0FC56") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"819440CA2065D112" #h"264A8BBA66959075") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"6889F5647AB23D59" #h"F963468B52F45D4D") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"DF8C6FC637E3DAD1" #h"29358CC6C83828AE") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"AC4856242B121589" #h"95CD92F44BACB72D") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"CBE465F232F9D85C" #h"BCE24DC8D0961C44") (:ecb-mode-test #h"729A27ED8F5C3E8BAF16560D14C90B43" #h"6C2E3617DA2BAC35" #h"1569E0627007B12E") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"0000ABBF94FF8B5F" #h"CBBB2E6C05EE8C89") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"848F836780938169" #h"4821B99F61ACEBB7") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"819440CA2065D112" #h"C88600093B348575") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"6889F5647AB23D59" #h"61D5397046F99637") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"DF8C6FC637E3DAD1" #h"EF4899B48DE5907C") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"AC4856242B121589" #h"85C6B232294C2F27") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"CBE465F232F9D85C" #h"B67AC767C0C06A55") (:ecb-mode-test #h"000027ED8F5C3E8BAF16560D14C90B43" #h"6C2E3617DA2BAC35" #h"B2229067630F7045") (:keystream-test #h"4ddd050b8a25f44c55f54d88e13ff2d9" #h"9ed8006bf0351b0a" #h"83499e5681e0fbd121ed8a704af5cddd2859e1f0a9c36bf9174316319eba20044f95dcd4093e0dc19b8b6f1196f329222204d979adeeba7f0c99f2629be52214bc72ccaf6fe1762cc0e78a1e589b2f5b59b89ba7321bf8f1f42deca858cd5c136bbc99b07ce1d9f7e0bc58409b0324c082a76f980de3bd902d68d85151b9d7b9a3fe6d39c276478f80e750f3e19976cc8213f1b02009d2ffc6e47b67e9c86b359827fc00726b29a02c014518c996f0ff184a5fee7b3593d86696e8c6855acbf87c89cfa3091413dc501d380d7622b6c8cbe297f1e5ff3dfa84ce5a61f1ab0fa15836c365046e99ac50d3d0afa870e1b59fbdc21d1630955c2eb2b6a1365a2d28cf3c92148b49a8e972735e74836d42e788e6eec8dc43b35bb752ce05c6ef8f020fffd2b47d2f4665275ab82d65a096160f94d65c4d44ea123e64098312cfdcf5c1c8a23859f1c84d1b9a6b5a8b633f8b8495b08809746f65bc4862e49d269b3eeec404692050ff67e7366d1dee19d46ead11d9f497332bfb7cf3a16f3566f47cecfbe5b6d8cde7cb4c6931b7e3d82f1b0cc28e65ed48f257787a2e285a6226bbe70a2802f3302f42fdc467045db583b9d383cf461bc79591d1265c75ec4ca9f49c26e0723627a6c7edc7022e519d6a1868195962683b43b4ff3832e95d21a3315230093f7c6e38d4f7a6283e5e3c46d2024c1f7462976d14b05b00e96bf56cf1d18b40c9157f81a0adf8bde41e5bf33db64d3d086a1d2ff2cc6bfa34f11a49e68b8d8a3d3993f8e40b4eeb8f693fbb2e26c9266f87704568b19c358f4cfceb198954b0b252e657e835645a8bbbf751f89fc197a8748fa77dfb3a7722360120cd81aabbab064f1124e5b528f55ee8aff49aebca0ae39405e0308d556f45a73eb1e7c0c498da27963a19833d4dcbeecfdd5daa58ddd3ebda01aa08a4206d9f0804b767b77fa4621002c07c537ac4542898640de5a298f89d0de6aed441dba0accda5dcb58541986e218f9ea301c8facd78918229995ccaa53549a69af28951fa8f4a1d52b1ae38a34221d0a2ba732e94f1f7544c6b4d80d6421bc55a617d3aa323302486d9b5ef18d36c79f00d3f9ac9a24add2b377f35826db4f8dc0603cffee2504538e7589ec992c26aca0fb8def397d9b0786311a883ad440cb7c74fa9edf2826915263d350d6aa94a0f0e1b41cb09097f7247ae59e914ae385357dfc98fd9a749337bfedc9a89c92bab71c18e5f6cd75eb5b541c03230ad95281ae7aca5b0913209fc4d857a46829955e9b98c8bc4975c4ed8ca36b0bb5df9be8f92b19389df1979d32cf4f039310c9c903d28a7374b5ea256d716da9a4b5d028a0dc605ecbd984f19908e289cc9b1051e54d8186fc1d0ee02221a889860f13aa803b49deb23e69fcf502c5a7c") ironclad-0.57/testing/test-vectors/ironclad.lisp000066400000000000000000000007341420372057600220550ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; ironclad.lisp -- tests for non-cryptography functionality (in-package :crypto-tests) (rtest:deftest quotationp.1 (crypto::quotationp '(quote foo)) t) (rtest:deftest quotationp.2 (crypto::quotationp '(quote foo bar)) nil) (rtest:deftest unquote.1 (crypto::unquote (quote foo)) foo) (rtest:deftest unquote.2 (crypto::unquote 2) 2) (rtest:deftest unquote.3 (crypto::unquote '#1=(list 'foo 'bar)) #1#) ironclad-0.57/testing/test-vectors/jh-224.testvec000066400000000000000000000311251420372057600216740ustar00rootroot00000000000000(:digest-test #h"" #h"2C99DF889B019309051C60FECC2BD285A774940E43175B76B2626630") (:digest-test #h"CC" #h"F79C791AC9B9D80EC934312D6B26748481198E3CA78EBB01B2C9CA51") (:digest-test #h"41FB" #h"BF3EA0F2BC680AAF4ABA50167FD8CD661E8CC63DF10641EE093DD2AE") (:digest-test #h"1F877C" #h"385D05CFACE35FDB84DC180D766330AFDCE0F8F0C751F8F245192057") (:digest-test #h"C1ECFDFC" #h"1C9AA60C55022E1A416448980CA6CA9BF8D2FAC5324570846AA80C02") (:digest-test #h"21F134AC57" #h"89162BB97600960C5D0543A77BFA92A7F9CCC89EA619CBDB98679924") (:digest-test #h"C6F50BB74E29" #h"279293D376A373875B179040003BA3614AF942531C763E3C9D250703") (:digest-test #h"119713CC83EEEF" #h"08CC5F17A9123BD226DAE0C6CC667652DBBC3F3FA3FFC76B72D7926D") (:digest-test #h"4A4F202484512526" #h"E654E5ED2EE87ED09FF7E1FFD1525B07A6C3A2F6B34F7728D1CC7088") (:digest-test #h"EED7422227613B6F53C9" #h"C1AD394AEFC688654A4F1C86A3F56C38031D0006490719C3B5DB0741") (:digest-test #h"5BE43C90F22902E4FE8ED2D3" #h"17A76594C6EA171411D52C7A0D0A8E840102ED61F822C8D896162CF2") (:digest-test #h"52A608AB21CCDD8A4457A57EDE782176" #h"BEF7DD072057E7834CCF86C1A5BAB55C83B65D4E3F4EBB69C324793C") (:digest-test #h"E26193989D06568FE688E75540AEA06747D9F851" #h"92AA4D153A3DBB43FE35D7FB7FBAAE9D096546CB12BF4CBFBA723EC2") (:digest-test #h"0F8B2D8FCFD9D68CFFC17CCFB117709B53D26462A3F346FB7C79B85E" #h"8604AFB25ABB9A5AFC46AD6E800FCC8810380967AB0867A434898879") (:digest-test #h"9F2FCC7C90DE090D6B87CD7E9718C1EA6CB21118FC2D5DE9F97E5DB6AC1E9C10" #h"E2A15FE28C3BC8FB296E197D2FB7B8BE8BA2A37A105AEA6ADEDE816B") (:digest-test #h"D8FABA1F5194C4DB5F176FABFFF856924EF627A37CD08CF55608BBA8F1E324D7C7F157298EABC4DCE7D89CE5162499F9" #h"D7039060277847781C13E118E636AE15CCF7302576787BF28790DA79") (:digest-test #h"EEBCC18057252CBF3F9C070F1A73213356D5D4BC19AC2A411EC8CDEEE7A571E2E20EAF61FD0C33A0FFEB297DDB77A97F0A415347DB66BCAF" #h"5607B3ED6F25C1103AE4B71543B012949FB826BCE4C760A14FFE9E96") (:digest-test #h"E926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7" #h"982A5D2AA039F9C7D5CFF3CC8A34C3A0B205892E7C5B09ED68F2CC84") (:digest-test #h"36F9F0A65F2CA498D739B944D6EFF3DA5EBBA57E7D9C41598A2B0E4380F3CF4B479EC2348D015FFE6256273511154AFCF3B4B4BF09D6C4744FDD0F62D75079D440706B05" #h"446ACC60A59F3903E65D84977F57DDFAE322B2AA55322F25522BE90E") (:digest-test #h"69F9ABBA65592EE01DB4DCE52DBAB90B08FC04193602792EE4DAA263033D59081587B09BBE49D0B49C9825D22840B2FF5D9C5155F975F8F2C2E7A90C75D2E4A8040FE39F63BBAFB403D9E28CC3B86E04E394A9C9E8065BD3C85FA9F0C7891600" #h"C121DC7924194A3EF7329311280DE564CB45578C4B578A622F0B5888") (:digest-test #h"433C5303131624C0021D868A30825475E8D0BD3052A022180398F4CA4423B98214B6BEAAC21C8807A2C33F8C93BD42B092CC1B06CEDF3224D5ED1EC29784444F22E08A55AA58542B524B02CD3D5D5F6907AFE71C5D7462224A3F9D9E53E7E0846DCBB4CE" #h"6549F140CEC6875F66F7965CDAC63411EA88069395807C34F7F7A9F5") (:digest-test #h"2B6DB7CED8665EBE9DEB080295218426BDAA7C6DA9ADD2088932CDFFBAA1C14129BCCDD70F369EFB149285858D2B1D155D14DE2FDB680A8B027284055182A0CAE275234CC9C92863C1B4AB66F304CF0621CD54565F5BFF461D3B461BD40DF28198E3732501B4860EADD503D26D6E69338F4E0456E9E9BAF3D827AE685FB1D817" #h"5E3C00C2C0E126A2E6327AA30DB4C3F66052C74CF10CAC9C380F5D56") (:digest-test #h"DB11F609BABA7B0CA634926B1DD539C8CBADA24967D7ADD4D9876F77C2D80C0F4DCEFBD7121548373582705CCA2495BD2A43716FE64ED26D059CFB566B3364BD49EE0717BDD9810DD14D8FAD80DBBDC4CAFB37CC60FB0FE2A80FB4541B8CA9D59DCE457738A9D3D8F641AF8C3FD6DA162DC16FC01AAC527A4A0255B4D231C0BE50F44F0DB0B713AF03D968FE7F0F61ED0824C55C4B5265548FEBD6AAD5C5EEDF63EFE793489C39B8FD29D104CE" #h"FA028141178DA79D6ED63FC01F15B95C8AEBA18297786CC9CE375E25") (:digest-test #h"3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1" #h"C494C05C8C41893F58784C88A4243DD7B94DE9A96EA14A0E6AE35F05") (:digest-test #h"0EBF64AC017FEBDCA40FF85FD4AEB8F1A827561C150F74CD5E864857FBBA9C08A46EFB9FF7A16919618C9FB06BF8FE3F0859774DA6C38C5A0C54D44075D1BAF6482B7705C8E1A86E79B0FBF0328246B5E6BE013F934D4ECC34808A3639C49464309DF5AD250BF4521E41B4CDE563566B8625076AD7E260018EEE2F3252D15F36BDBBCE3C74758C68A0E72D83A37DB4D2022A80A4F6B16F4515053E1FE398CC6A74D343D4CBB403597AE68533E18EF893F756F6F554F98BCCBC84702D19F875D347C345B09EDFCB1C71BD6955C5178DFCB07376728CFC3AB9565C0A1A8DCA78221028B00B51B175A2DA2CC0A90C33C169EA8A1A2E375C087AC3657D28AC481D5B5C225AEFA85919FB8628F32F42F1FC0806A250143C084322FE9E30BCC8B89F3DA73469CEB935EE25887D843321CC8ABB3C75E15F4894CBB5731782372A5631979BBE6AEACDFB711A84F83BB89E0F92B88C5EE83E4F9A3C4F80624A17ED5549B77ED7D939C368CD9A92EAAE595105DE7E2889CAD71D01201580038FCF4AB4D285A13BEFAAA14FACFE5099A83F9E71D512519D055F44F757757BCEBBD2734CB91C5C4CE7B411D1E83B42689FDF8A69E63DDFD255B977D7435BEEB5DEBBBA7A47B19CDAB3F1C40E79B926A481A1629A818525C2A198983F23F0DA5DA8B99633689292332BCC2A4AD49769B3E448F8CEDB87C1DE2EF5D04E1C3A8116C3328F6B19B59C318E18F8DB29875C22A0A0C8EA615A593439F7B90AA2AD9C16CA573040A8190A834370378554BDA9DA9486AA3CE3F1B01DBA14B032B3C334F7A1E961426302ED2D38C34F61D7B4D182C0CA303C2F379E74EAF65A48D3D8A95616B2ABA5C88DBF6284C5CD68D902E3958A7B9529F49D38091BAC288734247FCE886D49BCE00AB98B1B962A8DA8B4710644E9DA418529E79A27408B52EB655FDE025A129A38EEEBA936657F725F0EC668380B9DD50C0759AC150F81B696B886E86A5447CCDCB3FBEC08C79471DC3111042FCFFFADC1A973340DD68610631FDDA6AD25148C2D0B48ADA24E6B2D42EA7510991C0455BA1B7F393CA1FA5801F182F89117885455DBF88F63CE0B77669BA965B73A344D3C4C787E3B4AAF58C56FB2589967C71969B1FE92C5E7D91094DBA84F470437339C1DC6918DD5FB835CBE69750363691B0CEE7B80F0D0AEB31DDBDAC52F904A3A91051B54ADF75B0D195763D29FD1B88244F61D6A304807B646326E76FB880D1DF37281A11CED52D5B5873668642C72CD7C70E36825CC17DA6E03C577D12F79CCEFD6B7B76C88B19F7606536793D8D33F7E0A598769883B417C3662B6267001BE7D0914563B2402149357D1C64680DA80B32207A67611EDF0E8D9A767E2BE2ABB21956FC764200945E4BC5830ACCCDC80DE485086514C63DA7F785CBA0C1E9CE5B249B52E7EE570D8657C63C4FC90856DFBBB24C8D2A711CB3A0960685EC55540F6EC2641A429D3DC99D82F26D2C7EACC614FFE988117D8F13B7442A9AE2929D3E1F67B974BB4A4AA960015C9216AFA844A243095F167B114700FB11215EB54357BCB1D4792A0B676C708E710211C3AF73D61B82F4D04BC40C898CE00A2D34C77F5E22DB71F46C939A0EC9C37D1647E23A0F44CC23D710A1DB20E38D009C6580192295C40B478A85A0930181D0962C3B18B6AAC7F5BE99607ADD25BBC23A7530E7E58C93F9FD4AFE5133FD228C6B4D9E43538CD9DCBE76C4D7DEDF22741839558A6B561847327DF7CFF1C17E03EB0ED9DD921974954638CADBF645A4BAA4A62774BA66E2E458A1F7AC67EC394429339C2F620D457F5DD06AE551B69BADDEE99A6C93EDC7BF7CD56898CEC4AB4E633489DD1934B3EAB68601E3560092CB9B1C64B90C9FBB6F62BE60B0E221F1F6E1D58444B731B30AB04C40988093FBD396E65BA703F52ACE0695035EE78E7A4969D3EB5834C58EF60FEE1DE0F0E03E4203FF50F957ED68513F9134A4332B56044EE14CE80EAD7CE532ACA58B1F98423C3CABD9921F83A81C7467B3C6F6DE4B12AD741C7345BD645854BBF859D110C8D60F53AFE65F6A8A0856BBF78954F8ECC831FBB43F030449A9FE72A3C86AB7962ACD28975530CB567CEA713BE76B2262A70896B8A3CAC66772C56A9ED139F3F4349898AECCDEBD5622F32A75EBBC9FE202FE56C957356D40AFEE4718C52D30FBF683CE17056E672F909110C087D361C196FE33C6D80DC6925769F6A93DD41B5BB5FEA806F3BF56C50D69B45A371AC5DCF5CF356BC552E0CF87E22AF0F121B21278B067138E2AFA098E7EDE1C0A8AB29B6CCF6B85D39ADB9CEDD013886D2C23C273A21267B2F2C22B5BF25D5A5CBD083684B454AB5FB854F90CB49B2F53795BBFD46348B30958398344F9C362040E1412F331E2DD1679F31ADBCF8D40BD3BF707A4F3558239A0B9488B3D6A264E6DA3911B0BE47DFF3257B193129DDA9F3C0D9ADEB161F8426CCD01AD2D0854F7319E12DF89DA88C98FBFEA96D1F40BD098AA46BEB471834B039D6F001F804ED3DC47CDE01D5B594D565D94F70BA7387822DBE8D0E44645A914F25D1D15F38EB4E5C9B4F48C6146DBEFF8D36C17E5E57A3F07E561AF390EDFA4E2CFECA19722A3BEEEA23782CD7AF8A61767B010F89A7082E04E807F5CEC49BF5AC71DB3DFDC5665CD1FA5B9EB0C3C7343C674730EC650A13BAE412126C68DAF917862ADB4E220461A6CD0C7511F4F31C47F8A41AC54FC0B34F07DC15060E9A43855DA0A162436B1D3A4B6D8EA87229FAECBBD9A2F0792266DD160E0F8671690411F8A9BC7429F8E0F4EB0098E33F0532057D1E05E6A78FF48A6BDF78176FB462E56B305476A78F099786A6793D2FC3F4F74DABD3A34BC2E50267F06157494B9966E1BF1F8708CBB770580CBB2467FC1B3595345A49A5D8EC528F3E2B3F91B06E0693F87FDA3B68CF99DF5C47BB18B767FBE74EC0B664AC0F1CC6592F01A5659A7F3B4293BFB8541F0A9E3F923A547DD1C784ED624CD3A2C9D1B8C308B3236E4146C93CDC36E17DFEDA5C123E735AD4FEAADCAABF9581BC1060726F545C308E56C7310093F7938A2083DC468BF5FF3C84C2271EC7533838FF15E6F7EE8C71115EA8E342BC33AD64467640B11EFE5F33CECDEE3058E8C17F8CA0488918506FE2FA10B92B9FA87DD7305362D24D4CE454A779612B112C7C7E6D4B632A8475EDADBEA13486CFAF5647E4DF1FB135AE793F8E6D23216B0ADF664A14397DAE07E133A1A58E15B25E9092B61FAD3619BD551858144B80D9075D34128C351643F101BADDFA990CE910F2A8D721B64C495A12F07AF3D32CEDAC92E20DD9638C0DB36EB7B1286138FE056EAE9D91C4A0AB7DC5267FB16A41B771EB01D54701FB43570482157BE10C6FA9E4D866B8B5D650EE6F3FE117B1FA79CBE4F8A9B97928EBA2FCA6D7669B384184895BFE76ABF484B03B9F7CA10308C6CE31197CA15B1A36CEDC3774B6B9DDCC2431E732DB36537F1F4F4883E81E7B3C6D368B4EBDCE34C657711D2CBB4158D519E027C5B4B64575AFCD87CE736C45028D378D70C0FDE73B5499FFB307B9DD82073833C0A84769964FBD7D01C4ECE805E122364B2B485B6DAC7793F1EE7F1CB2A50AE6565CD210308260EF64D9B2FE8378516AD093960D5CA8CFA9FCF28762998020743086B93EEDEC324784428EBA23141466185C740055B1E87BF7F6BEF5CE8E28DD270F9DA64D6FFF2CB0D73A734D45DC56CD03BE9414DB568EE2366F2166FD6D43AF9EEECB13C4A5D3A8E775BEE5942194033AE3EE1754FC046BE91130979AB88E47A4CEA379ED9E77BC4310DDAE2BDB7A5B941E3FB6081CC3ED710E0C603D47EFA82FCCC0D556D4AB58825EBE6EC7700F02FB7A0EED44CD2F8772CCDEE4BA4B883DAAB46264A569AAAE97A0E4369EC00F59D841A1A7CF2D39BC58725B248C7B159D6D68B3D9721231CACAAD38F26F357BFD31FFCEC18CF34EE42C3B375C827C4284B31FCD4374CFE8C2C7A6B952581C9837587CB161EECA237290AFE8095E069A99514DFAFC2FD8CFC734B4AE64807D3ACA2681ADE0FA018B17D2A61F30F0307AE86D67D4A14D9CE214CF41EDB702735F99D58BDACE7F28C7D95A9CAE8B079708C6C7E78ACCAB67F67A598F7C86FE8B8AB6539B2EBB376B6A17144A3ADAD6BE5D617D30607AB4D94C11A7C1858E19B5C7B12F9BE4AC245A9E91A22EE5471AA58538AFB35319F53D6DD69BC2AE48D2B649DFF6E71DEA3B797C071A0C345F66DF053475A40031F323908C71A198C7FB2D542AA8DD97B2F1CE01D11E7FC458518CE1CB451BB9B1D57530D15EC95BA73BD5A386947FF8D0F565549A11B88759D6ABA3A83967BF9543E640A33F6F9D9655A547785B42B11216EC1CCE067630E89708CA896733129DB5312169003B8FACB8DE3F99E65427AEF51CC1C91005BB7F5B65218B1B492FDD67761E0F7C2FC60F7ECA13B09DF6B2A53B5B9CEAB43D5A1EC3260A89B54BC257850F0659E3240DAF073CC5236F65B159CF8FDEC771911C054BB417F6799330D443A735704E66EA9F1D3351837197C19E8226D27A1EB5B664781CF0651231AB25678A4C9F9973DA830ED3871A6EE638DDA3C789B0AC27DF49717CA2A1DF46968D56035EF02B712D12067E72B1E661120FC1FDE4FE6B11BB4D189F29112DBBD6DD0D9E4E78501C8E5EEECC333B208D7B86522C61DE4ED0D4454D19CA62027627344F455C05F429FA17E4A6F0BAFCD4B575CBA3755B042382942190B6EAF762DF7714797E916D58E7DD0DE2CFC41D8E6E410DE623EA5C547334D3A21488CD2D65E6F9E0F123166FD8304309D0160B5A605317E0122308F9FF065AE6ED422437C962A1362EC1F2804B274E3BAE118292FF930BD519EFD3A93E40F949ABC60E8E9190DAAF9FC8099A44311861B02FFB4F9A0AEA81999170ED5BD14B727B42EB44B0B55983F1AC2F2BA80734630D6B7500D65EAB42F6771EEA6872677E252DA4C717BAA07760BFC5FE09D4835A65200A80C2759A476A930B7FB4A738241C3E73A9C75D5A7F0A0BE52138DDA2812AEFBA8FD78D5840E6EA1D15C57EA66A59B3A882A8FD04093A5815A5324BE75C4F83CF16B785D2D3BD36602A0026A9895CB343688EEA40CDB483EDCD87788B668A69D0BC75B07D8C8247A9780E4C1EC342C1198295D699F0829E41A78F0F9978DD52D6491898F1F05B979E587F711DF66F38C23C2BFF9C69086AB970C468315B3B6C36D58A7AE9C749FA06429E6781AE7D49B3B368048641A63DB95EE293A1954201CAD72E92A85E34C7A74B2FD1BCA6AA61435AF2DC32C1A2F559F63E716A6C96F076097E6C45F4372AE6828E9EAAE3EB82361710EC14F67F7D0ED9859249C18D14985302847FC8F3301BD31C7E1E09B2057E9EE46FCC7C9BD8DB59EB0DEB0B1D8D291508CB3837C9B2F191A49595D6AADDCEFEF0DD59ED3A05FA8F6EF03D38F534139D56BCBD4BC3256E1A120D49A5DB1BADB528B0256C61A2F179A23C49928738F9C0FA81FC196D1A74507998415F070EF9C38BAA53951FEE7B68008BC675E0E15BC32A61C30BC132E79C58A3A970FFDDB8B806782DD31242B3C3CF9810BEEA5FB5A1B250EA62336456E7694B4C829508C7DBFE090AF6A850F79D04D2C698637816017F8A920E1B1ADE236E227B3480899BCBB991F6C6C240BBD4114AAF9875935558394A486652B0942F3409B66FAF8B8BF711CC8C34CCA41B8E16C2CDF0160B92A332C1F04BC64582446B98AFF34189675B7A10FFC6F13B3F74654ED7C0590D4AF7F4D747BF89BB2A8F5C8CE610CF4FA4AB714A845E15649B53E54A95213D5A73905941D9467B0BEDDA2BECC1C219E1CAB699652D85B8CD7E0CD11CE5B0CAC76F9EF3D74BD829877898E7350CCA72101076A970BEC6756C3FD1AAF3396F72833F8D4E716AEC6F93718B262710B0DA2F3FD6CBDB204ED0E91D65CAB39ED35F22A01E5D509282752837EBEE968B140989EF5F4D513452784BDB892CAFD8387E05B3012C0458A369E62191F5BDC57DD63CE42E945F493C2B42306B8084F3B25E94ABACF08EE155F3621ACC9626EE487C7A7E4667F0377AE4B2" #h"012AC3464A69781524F8ACDCCCAF491CB7E7E53524AE7E95EC96C83E") ironclad-0.57/testing/test-vectors/jh-256.testvec000066400000000000000000000314351420372057600217050ustar00rootroot00000000000000(:digest-test #h"" #h"46E64619C18BB0A92A5E87185A47EEF83CA747B8FCC8E1412921357E326DF434") (:digest-test #h"CC" #h"7B1191F13A2667830142541BFC5918543D2A434C7692E70C3E5E9BBDDDB7F581") (:digest-test #h"41FB" #h"EF3EEEAE2D2457DB084F2A933647D9E77A476EB4E58569A18AD4BA55754F9034") (:digest-test #h"1F877C" #h"54418F1E9B472E53E2FCC3BB10D1BD13F63B3C416589401389E51896FD6766AD") (:digest-test #h"C1ECFDFC" #h"8D7E972CA6EECA9B09B829E4D627C72572B6B8555C7AA081E66167E9E4A10F11") (:digest-test #h"21F134AC57" #h"3A550FCD062011D809CFE08AEF1735089385025FA983A4C1B1EF00A85C474641") (:digest-test #h"C6F50BB74E29" #h"B3EF5D675A1448C355E959228A66E4A6E97BC32980615A19275C60798CF8FACF") (:digest-test #h"119713CC83EEEF" #h"EBAA0BBDD492C14C111375B075F79F9F2E15BDA29F1D8D614611CC974E0026AB") (:digest-test #h"4A4F202484512526" #h"2CF254D773DD18BA2EFD3BE2CB9C8F88AB313FB285DA11E38C8A6680521DBB48") (:digest-test #h"EED7422227613B6F53C9" #h"5261D72A7B72BBE12B8D338531259C1337F7713FEB48E8ED6568D00076DDA3BB") (:digest-test #h"5BE43C90F22902E4FE8ED2D3" #h"EA0E14275A163BEEF3E124B591507B0EE8F0E25AA736B9AFCE6DD6EC9CF8C070") (:digest-test #h"52A608AB21CCDD8A4457A57EDE782176" #h"F51AE94B7E45F0723E444512F8A12B170EE630F08C8271B4F2C50883153213F1") (:digest-test #h"E26193989D06568FE688E75540AEA06747D9F851" #h"46D53B64E7E0C6C5B398DEE32F77357B42AC7150501CEAF52373548C2649D722") (:digest-test #h"0F8B2D8FCFD9D68CFFC17CCFB117709B53D26462A3F346FB7C79B85E" #h"B56A7149B7CD4579FD11CEBCE62B7399F9140F28DA3FF0D1F561EC6F333E1DD9") (:digest-test #h"9F2FCC7C90DE090D6B87CD7E9718C1EA6CB21118FC2D5DE9F97E5DB6AC1E9C10" #h"BDE228032195DB23DF94FABD1A8F3F11062F58781FFB716DAA89323380D1D4A8") (:digest-test #h"D8FABA1F5194C4DB5F176FABFFF856924EF627A37CD08CF55608BBA8F1E324D7C7F157298EABC4DCE7D89CE5162499F9" #h"9AA00804E2DC87A0A3EF0FB97B1A26FE61CF7F59653EC3A2733F095C635C6B9C") (:digest-test #h"EEBCC18057252CBF3F9C070F1A73213356D5D4BC19AC2A411EC8CDEEE7A571E2E20EAF61FD0C33A0FFEB297DDB77A97F0A415347DB66BCAF" #h"DC8B0BEEE7F15EADB52B6279C4EFC517391B5FFB378AF123B166CC1183473430") (:digest-test #h"E926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7" #h"9D35C0CC1880A36EBB6CB33B732C0C2ADB4A418B4BF0DF9173B539263653E90B") (:digest-test #h"36F9F0A65F2CA498D739B944D6EFF3DA5EBBA57E7D9C41598A2B0E4380F3CF4B479EC2348D015FFE6256273511154AFCF3B4B4BF09D6C4744FDD0F62D75079D440706B05" #h"D1FCADDD0CD76D95C94F6A79C56BF1932D39E604C6EABA0339FEFA53E23059F1") (:digest-test #h"69F9ABBA65592EE01DB4DCE52DBAB90B08FC04193602792EE4DAA263033D59081587B09BBE49D0B49C9825D22840B2FF5D9C5155F975F8F2C2E7A90C75D2E4A8040FE39F63BBAFB403D9E28CC3B86E04E394A9C9E8065BD3C85FA9F0C7891600" #h"A8640E72D80B75523ACEF56F9598E39124DBFC7376C7E66C4850C845FB0720FE") (:digest-test #h"433C5303131624C0021D868A30825475E8D0BD3052A022180398F4CA4423B98214B6BEAAC21C8807A2C33F8C93BD42B092CC1B06CEDF3224D5ED1EC29784444F22E08A55AA58542B524B02CD3D5D5F6907AFE71C5D7462224A3F9D9E53E7E0846DCBB4CE" #h"CAED3EEBC63FD905C53AC8C46397D60334CB55F5691B9EF4F73EF1352C343BC7") (:digest-test #h"2B6DB7CED8665EBE9DEB080295218426BDAA7C6DA9ADD2088932CDFFBAA1C14129BCCDD70F369EFB149285858D2B1D155D14DE2FDB680A8B027284055182A0CAE275234CC9C92863C1B4AB66F304CF0621CD54565F5BFF461D3B461BD40DF28198E3732501B4860EADD503D26D6E69338F4E0456E9E9BAF3D827AE685FB1D817" #h"43B7D01D93213874B2AC0792BED8C137E865BA5FA87B20A3151A984F4AF267A6") (:digest-test #h"DB11F609BABA7B0CA634926B1DD539C8CBADA24967D7ADD4D9876F77C2D80C0F4DCEFBD7121548373582705CCA2495BD2A43716FE64ED26D059CFB566B3364BD49EE0717BDD9810DD14D8FAD80DBBDC4CAFB37CC60FB0FE2A80FB4541B8CA9D59DCE457738A9D3D8F641AF8C3FD6DA162DC16FC01AAC527A4A0255B4D231C0BE50F44F0DB0B713AF03D968FE7F0F61ED0824C55C4B5265548FEBD6AAD5C5EEDF63EFE793489C39B8FD29D104CE" #h"4DB77B903C9D54C79008B8A9CB08CFE4265C1C18605200DA803E1ED560CF60BD") (:digest-test #h"3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1" #h"D02B055958E12EF6F499F400144D2B8FB8B4E8975BE487A2FB3B135646783974") (:digest-test #h"0EBF64AC017FEBDCA40FF85FD4AEB8F1A827561C150F74CD5E864857FBBA9C08A46EFB9FF7A16919618C9FB06BF8FE3F0859774DA6C38C5A0C54D44075D1BAF6482B7705C8E1A86E79B0FBF0328246B5E6BE013F934D4ECC34808A3639C49464309DF5AD250BF4521E41B4CDE563566B8625076AD7E260018EEE2F3252D15F36BDBBCE3C74758C68A0E72D83A37DB4D2022A80A4F6B16F4515053E1FE398CC6A74D343D4CBB403597AE68533E18EF893F756F6F554F98BCCBC84702D19F875D347C345B09EDFCB1C71BD6955C5178DFCB07376728CFC3AB9565C0A1A8DCA78221028B00B51B175A2DA2CC0A90C33C169EA8A1A2E375C087AC3657D28AC481D5B5C225AEFA85919FB8628F32F42F1FC0806A250143C084322FE9E30BCC8B89F3DA73469CEB935EE25887D843321CC8ABB3C75E15F4894CBB5731782372A5631979BBE6AEACDFB711A84F83BB89E0F92B88C5EE83E4F9A3C4F80624A17ED5549B77ED7D939C368CD9A92EAAE595105DE7E2889CAD71D01201580038FCF4AB4D285A13BEFAAA14FACFE5099A83F9E71D512519D055F44F757757BCEBBD2734CB91C5C4CE7B411D1E83B42689FDF8A69E63DDFD255B977D7435BEEB5DEBBBA7A47B19CDAB3F1C40E79B926A481A1629A818525C2A198983F23F0DA5DA8B99633689292332BCC2A4AD49769B3E448F8CEDB87C1DE2EF5D04E1C3A8116C3328F6B19B59C318E18F8DB29875C22A0A0C8EA615A593439F7B90AA2AD9C16CA573040A8190A834370378554BDA9DA9486AA3CE3F1B01DBA14B032B3C334F7A1E961426302ED2D38C34F61D7B4D182C0CA303C2F379E74EAF65A48D3D8A95616B2ABA5C88DBF6284C5CD68D902E3958A7B9529F49D38091BAC288734247FCE886D49BCE00AB98B1B962A8DA8B4710644E9DA418529E79A27408B52EB655FDE025A129A38EEEBA936657F725F0EC668380B9DD50C0759AC150F81B696B886E86A5447CCDCB3FBEC08C79471DC3111042FCFFFADC1A973340DD68610631FDDA6AD25148C2D0B48ADA24E6B2D42EA7510991C0455BA1B7F393CA1FA5801F182F89117885455DBF88F63CE0B77669BA965B73A344D3C4C787E3B4AAF58C56FB2589967C71969B1FE92C5E7D91094DBA84F470437339C1DC6918DD5FB835CBE69750363691B0CEE7B80F0D0AEB31DDBDAC52F904A3A91051B54ADF75B0D195763D29FD1B88244F61D6A304807B646326E76FB880D1DF37281A11CED52D5B5873668642C72CD7C70E36825CC17DA6E03C577D12F79CCEFD6B7B76C88B19F7606536793D8D33F7E0A598769883B417C3662B6267001BE7D0914563B2402149357D1C64680DA80B32207A67611EDF0E8D9A767E2BE2ABB21956FC764200945E4BC5830ACCCDC80DE485086514C63DA7F785CBA0C1E9CE5B249B52E7EE570D8657C63C4FC90856DFBBB24C8D2A711CB3A0960685EC55540F6EC2641A429D3DC99D82F26D2C7EACC614FFE988117D8F13B7442A9AE2929D3E1F67B974BB4A4AA960015C9216AFA844A243095F167B114700FB11215EB54357BCB1D4792A0B676C708E710211C3AF73D61B82F4D04BC40C898CE00A2D34C77F5E22DB71F46C939A0EC9C37D1647E23A0F44CC23D710A1DB20E38D009C6580192295C40B478A85A0930181D0962C3B18B6AAC7F5BE99607ADD25BBC23A7530E7E58C93F9FD4AFE5133FD228C6B4D9E43538CD9DCBE76C4D7DEDF22741839558A6B561847327DF7CFF1C17E03EB0ED9DD921974954638CADBF645A4BAA4A62774BA66E2E458A1F7AC67EC394429339C2F620D457F5DD06AE551B69BADDEE99A6C93EDC7BF7CD56898CEC4AB4E633489DD1934B3EAB68601E3560092CB9B1C64B90C9FBB6F62BE60B0E221F1F6E1D58444B731B30AB04C40988093FBD396E65BA703F52ACE0695035EE78E7A4969D3EB5834C58EF60FEE1DE0F0E03E4203FF50F957ED68513F9134A4332B56044EE14CE80EAD7CE532ACA58B1F98423C3CABD9921F83A81C7467B3C6F6DE4B12AD741C7345BD645854BBF859D110C8D60F53AFE65F6A8A0856BBF78954F8ECC831FBB43F030449A9FE72A3C86AB7962ACD28975530CB567CEA713BE76B2262A70896B8A3CAC66772C56A9ED139F3F4349898AECCDEBD5622F32A75EBBC9FE202FE56C957356D40AFEE4718C52D30FBF683CE17056E672F909110C087D361C196FE33C6D80DC6925769F6A93DD41B5BB5FEA806F3BF56C50D69B45A371AC5DCF5CF356BC552E0CF87E22AF0F121B21278B067138E2AFA098E7EDE1C0A8AB29B6CCF6B85D39ADB9CEDD013886D2C23C273A21267B2F2C22B5BF25D5A5CBD083684B454AB5FB854F90CB49B2F53795BBFD46348B30958398344F9C362040E1412F331E2DD1679F31ADBCF8D40BD3BF707A4F3558239A0B9488B3D6A264E6DA3911B0BE47DFF3257B193129DDA9F3C0D9ADEB161F8426CCD01AD2D0854F7319E12DF89DA88C98FBFEA96D1F40BD098AA46BEB471834B039D6F001F804ED3DC47CDE01D5B594D565D94F70BA7387822DBE8D0E44645A914F25D1D15F38EB4E5C9B4F48C6146DBEFF8D36C17E5E57A3F07E561AF390EDFA4E2CFECA19722A3BEEEA23782CD7AF8A61767B010F89A7082E04E807F5CEC49BF5AC71DB3DFDC5665CD1FA5B9EB0C3C7343C674730EC650A13BAE412126C68DAF917862ADB4E220461A6CD0C7511F4F31C47F8A41AC54FC0B34F07DC15060E9A43855DA0A162436B1D3A4B6D8EA87229FAECBBD9A2F0792266DD160E0F8671690411F8A9BC7429F8E0F4EB0098E33F0532057D1E05E6A78FF48A6BDF78176FB462E56B305476A78F099786A6793D2FC3F4F74DABD3A34BC2E50267F06157494B9966E1BF1F8708CBB770580CBB2467FC1B3595345A49A5D8EC528F3E2B3F91B06E0693F87FDA3B68CF99DF5C47BB18B767FBE74EC0B664AC0F1CC6592F01A5659A7F3B4293BFB8541F0A9E3F923A547DD1C784ED624CD3A2C9D1B8C308B3236E4146C93CDC36E17DFEDA5C123E735AD4FEAADCAABF9581BC1060726F545C308E56C7310093F7938A2083DC468BF5FF3C84C2271EC7533838FF15E6F7EE8C71115EA8E342BC33AD64467640B11EFE5F33CECDEE3058E8C17F8CA0488918506FE2FA10B92B9FA87DD7305362D24D4CE454A779612B112C7C7E6D4B632A8475EDADBEA13486CFAF5647E4DF1FB135AE793F8E6D23216B0ADF664A14397DAE07E133A1A58E15B25E9092B61FAD3619BD551858144B80D9075D34128C351643F101BADDFA990CE910F2A8D721B64C495A12F07AF3D32CEDAC92E20DD9638C0DB36EB7B1286138FE056EAE9D91C4A0AB7DC5267FB16A41B771EB01D54701FB43570482157BE10C6FA9E4D866B8B5D650EE6F3FE117B1FA79CBE4F8A9B97928EBA2FCA6D7669B384184895BFE76ABF484B03B9F7CA10308C6CE31197CA15B1A36CEDC3774B6B9DDCC2431E732DB36537F1F4F4883E81E7B3C6D368B4EBDCE34C657711D2CBB4158D519E027C5B4B64575AFCD87CE736C45028D378D70C0FDE73B5499FFB307B9DD82073833C0A84769964FBD7D01C4ECE805E122364B2B485B6DAC7793F1EE7F1CB2A50AE6565CD210308260EF64D9B2FE8378516AD093960D5CA8CFA9FCF28762998020743086B93EEDEC324784428EBA23141466185C740055B1E87BF7F6BEF5CE8E28DD270F9DA64D6FFF2CB0D73A734D45DC56CD03BE9414DB568EE2366F2166FD6D43AF9EEECB13C4A5D3A8E775BEE5942194033AE3EE1754FC046BE91130979AB88E47A4CEA379ED9E77BC4310DDAE2BDB7A5B941E3FB6081CC3ED710E0C603D47EFA82FCCC0D556D4AB58825EBE6EC7700F02FB7A0EED44CD2F8772CCDEE4BA4B883DAAB46264A569AAAE97A0E4369EC00F59D841A1A7CF2D39BC58725B248C7B159D6D68B3D9721231CACAAD38F26F357BFD31FFCEC18CF34EE42C3B375C827C4284B31FCD4374CFE8C2C7A6B952581C9837587CB161EECA237290AFE8095E069A99514DFAFC2FD8CFC734B4AE64807D3ACA2681ADE0FA018B17D2A61F30F0307AE86D67D4A14D9CE214CF41EDB702735F99D58BDACE7F28C7D95A9CAE8B079708C6C7E78ACCAB67F67A598F7C86FE8B8AB6539B2EBB376B6A17144A3ADAD6BE5D617D30607AB4D94C11A7C1858E19B5C7B12F9BE4AC245A9E91A22EE5471AA58538AFB35319F53D6DD69BC2AE48D2B649DFF6E71DEA3B797C071A0C345F66DF053475A40031F323908C71A198C7FB2D542AA8DD97B2F1CE01D11E7FC458518CE1CB451BB9B1D57530D15EC95BA73BD5A386947FF8D0F565549A11B88759D6ABA3A83967BF9543E640A33F6F9D9655A547785B42B11216EC1CCE067630E89708CA896733129DB5312169003B8FACB8DE3F99E65427AEF51CC1C91005BB7F5B65218B1B492FDD67761E0F7C2FC60F7ECA13B09DF6B2A53B5B9CEAB43D5A1EC3260A89B54BC257850F0659E3240DAF073CC5236F65B159CF8FDEC771911C054BB417F6799330D443A735704E66EA9F1D3351837197C19E8226D27A1EB5B664781CF0651231AB25678A4C9F9973DA830ED3871A6EE638DDA3C789B0AC27DF49717CA2A1DF46968D56035EF02B712D12067E72B1E661120FC1FDE4FE6B11BB4D189F29112DBBD6DD0D9E4E78501C8E5EEECC333B208D7B86522C61DE4ED0D4454D19CA62027627344F455C05F429FA17E4A6F0BAFCD4B575CBA3755B042382942190B6EAF762DF7714797E916D58E7DD0DE2CFC41D8E6E410DE623EA5C547334D3A21488CD2D65E6F9E0F123166FD8304309D0160B5A605317E0122308F9FF065AE6ED422437C962A1362EC1F2804B274E3BAE118292FF930BD519EFD3A93E40F949ABC60E8E9190DAAF9FC8099A44311861B02FFB4F9A0AEA81999170ED5BD14B727B42EB44B0B55983F1AC2F2BA80734630D6B7500D65EAB42F6771EEA6872677E252DA4C717BAA07760BFC5FE09D4835A65200A80C2759A476A930B7FB4A738241C3E73A9C75D5A7F0A0BE52138DDA2812AEFBA8FD78D5840E6EA1D15C57EA66A59B3A882A8FD04093A5815A5324BE75C4F83CF16B785D2D3BD36602A0026A9895CB343688EEA40CDB483EDCD87788B668A69D0BC75B07D8C8247A9780E4C1EC342C1198295D699F0829E41A78F0F9978DD52D6491898F1F05B979E587F711DF66F38C23C2BFF9C69086AB970C468315B3B6C36D58A7AE9C749FA06429E6781AE7D49B3B368048641A63DB95EE293A1954201CAD72E92A85E34C7A74B2FD1BCA6AA61435AF2DC32C1A2F559F63E716A6C96F076097E6C45F4372AE6828E9EAAE3EB82361710EC14F67F7D0ED9859249C18D14985302847FC8F3301BD31C7E1E09B2057E9EE46FCC7C9BD8DB59EB0DEB0B1D8D291508CB3837C9B2F191A49595D6AADDCEFEF0DD59ED3A05FA8F6EF03D38F534139D56BCBD4BC3256E1A120D49A5DB1BADB528B0256C61A2F179A23C49928738F9C0FA81FC196D1A74507998415F070EF9C38BAA53951FEE7B68008BC675E0E15BC32A61C30BC132E79C58A3A970FFDDB8B806782DD31242B3C3CF9810BEEA5FB5A1B250EA62336456E7694B4C829508C7DBFE090AF6A850F79D04D2C698637816017F8A920E1B1ADE236E227B3480899BCBB991F6C6C240BBD4114AAF9875935558394A486652B0942F3409B66FAF8B8BF711CC8C34CCA41B8E16C2CDF0160B92A332C1F04BC64582446B98AFF34189675B7A10FFC6F13B3F74654ED7C0590D4AF7F4D747BF89BB2A8F5C8CE610CF4FA4AB714A845E15649B53E54A95213D5A73905941D9467B0BEDDA2BECC1C219E1CAB699652D85B8CD7E0CD11CE5B0CAC76F9EF3D74BD829877898E7350CCA72101076A970BEC6756C3FD1AAF3396F72833F8D4E716AEC6F93718B262710B0DA2F3FD6CBDB204ED0E91D65CAB39ED35F22A01E5D509282752837EBEE968B140989EF5F4D513452784BDB892CAFD8387E05B3012C0458A369E62191F5BDC57DD63CE42E945F493C2B42306B8084F3B25E94ABACF08EE155F3621ACC9626EE487C7A7E4667F0377AE4B2" #h"D337CE8A8769FE7BD2416AA33457CBA8C4244F66E3C00E8207946BAE44CBD13C") ironclad-0.57/testing/test-vectors/jh-384.testvec000066400000000000000000000330751420372057600217110ustar00rootroot00000000000000(:digest-test #h"" #h"2FE5F71B1B3290D3C017FB3C1A4D02A5CBEB03A0476481E25082434A881994B0FF99E078D2C16B105AD069B569315328") (:digest-test #h"CC" #h"CCFA3732089CB4D49AF04DAA865CB2376BFA264E527B5EB8486CD09B3FB9A8019140A1CA9DF7539EFBB3A3118D8E0584") (:digest-test #h"41FB" #h"5CD8BEAD6785A56E184F388C2EDEAE5502FF59B82D214F472C378AC33E451CC16BC91FEEB7B7702718431E7C8550BE85") (:digest-test #h"1F877C" #h"05D72081179C4F5E839C88CC991ED7E8625BCC5F1A61A23588E57EA7656DC372FADFACB0626E0D48FD819DE3EE96C3EA") (:digest-test #h"C1ECFDFC" #h"AB94A321DA66A0C1385FDE960C1A9196A5F3E2D0C68C0778A66F2A663498227C067BA167F99B56CAD5E0234723C3CE5E") (:digest-test #h"21F134AC57" #h"4687363AE0D1BD0B57797F7F98B6860F16478A2D4CE3E3892B2C9DEED97C5C2EFCB86E09AE7BBC397316451E1EE4B200") (:digest-test #h"C6F50BB74E29" #h"B34FA483FF2797884855E7271570B41A261E7984658A6A79F6F120B2804B8288369F1E55F782A41352044AFAF53EB2B6") (:digest-test #h"119713CC83EEEF" #h"563AD0D380360497F4FFF7F04B993711A5A6286D40CFBEBD0766E56005919319212163D9EC2EE1888465170223ECBD12") (:digest-test #h"4A4F202484512526" #h"79DE2F45888B898F0DFC3167B6FAFAD1F3B734C3C81FAF5DE0C22C079EF740E1DEA2AC34C56231D4D99DCD9E975A189B") (:digest-test #h"EED7422227613B6F53C9" #h"3282D7224F2D3F11BD0CCD8A8B08EC2A1B7227C897656FCDAE85770CFCA01D9AD890D7E40F6824FBCE98AF5E99658D80") (:digest-test #h"5BE43C90F22902E4FE8ED2D3" #h"3771F52F3B0E7E9423667809ACBD1D1A44CA3D970EC9F832D47D6D9C5B52D9EB6B6271E0339B742482385A75134FAC6A") (:digest-test #h"52A608AB21CCDD8A4457A57EDE782176" #h"9184052A96DE54E438908383552033F3E209B5FE1DFFBF315C8AAFD1E0504EB233C18219EFA75EE6493E1EA67EAEF964") (:digest-test #h"E26193989D06568FE688E75540AEA06747D9F851" #h"57A7C78BDAD234411F4D987202EC68528D6981764FA3540F89B5DEA1248B45AB61602D7857E77D78A0882FB932876866") (:digest-test #h"0F8B2D8FCFD9D68CFFC17CCFB117709B53D26462A3F346FB7C79B85E" #h"2727FD5C8677BB182066AC735CFEDEBC7C2D5436B1A23F73208D05DF0650F4F48EF969167D29CF50FC57CD80E09E110F") (:digest-test #h"9F2FCC7C90DE090D6B87CD7E9718C1EA6CB21118FC2D5DE9F97E5DB6AC1E9C10" #h"26154CCDDBEE820E9F14D6BFAB069B6AB4C9ACAB8BC76C482080836B88968BDB2787BF64E40577F6968228D3EDB38DA8") (:digest-test #h"D8FABA1F5194C4DB5F176FABFFF856924EF627A37CD08CF55608BBA8F1E324D7C7F157298EABC4DCE7D89CE5162499F9" #h"8B16DD69BDCCAB12E76F7AE0F4288CA3AF26FB54101C4A3DE6C568178C13833FE3A599DE6FD4B6A259F63E86C0DF583F") (:digest-test #h"EEBCC18057252CBF3F9C070F1A73213356D5D4BC19AC2A411EC8CDEEE7A571E2E20EAF61FD0C33A0FFEB297DDB77A97F0A415347DB66BCAF" #h"95CDB4F7D939356C1C13BB4026180518034B9C6EDEC26AEE8E27EA34CB50F35A95193EEECA7B78550CABF173650574AD") (:digest-test #h"E926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7" #h"B605535F1860879C2E7356C762967BC67D6F80A68A85194DAF0057E3ADF3BAFFD3B07CA1BF3BD6C4B76F3CAFC901CE6B") (:digest-test #h"36F9F0A65F2CA498D739B944D6EFF3DA5EBBA57E7D9C41598A2B0E4380F3CF4B479EC2348D015FFE6256273511154AFCF3B4B4BF09D6C4744FDD0F62D75079D440706B05" #h"E1E8B008602B31B81C22B941B3005F5D8154F50F628167DC9A313D13689F19E7ED04838B250D03354AB4B84D43E32D00") (:digest-test #h"69F9ABBA65592EE01DB4DCE52DBAB90B08FC04193602792EE4DAA263033D59081587B09BBE49D0B49C9825D22840B2FF5D9C5155F975F8F2C2E7A90C75D2E4A8040FE39F63BBAFB403D9E28CC3B86E04E394A9C9E8065BD3C85FA9F0C7891600" #h"A390E239A865FE557F358A1DCCA5DD6A0159D0FEFE4EC6F1E098CC023692F996B084D469CB0D01B1CDBE790747285E57") (:digest-test #h"433C5303131624C0021D868A30825475E8D0BD3052A022180398F4CA4423B98214B6BEAAC21C8807A2C33F8C93BD42B092CC1B06CEDF3224D5ED1EC29784444F22E08A55AA58542B524B02CD3D5D5F6907AFE71C5D7462224A3F9D9E53E7E0846DCBB4CE" #h"D316374E7179BDD6D9F55ED728873387FD3C0549CB562A685D2C6B2C901109CA44B7529FC4B4EF53CFF0444C3251F097") (:digest-test #h"2B6DB7CED8665EBE9DEB080295218426BDAA7C6DA9ADD2088932CDFFBAA1C14129BCCDD70F369EFB149285858D2B1D155D14DE2FDB680A8B027284055182A0CAE275234CC9C92863C1B4AB66F304CF0621CD54565F5BFF461D3B461BD40DF28198E3732501B4860EADD503D26D6E69338F4E0456E9E9BAF3D827AE685FB1D817" #h"FEF557B18A29160FD3BC78CC0CC66C5613B0F2D463C231BC23A03BDB15674197A293104D7A86544F8216D8066B84D8B5") (:digest-test #h"DB11F609BABA7B0CA634926B1DD539C8CBADA24967D7ADD4D9876F77C2D80C0F4DCEFBD7121548373582705CCA2495BD2A43716FE64ED26D059CFB566B3364BD49EE0717BDD9810DD14D8FAD80DBBDC4CAFB37CC60FB0FE2A80FB4541B8CA9D59DCE457738A9D3D8F641AF8C3FD6DA162DC16FC01AAC527A4A0255B4D231C0BE50F44F0DB0B713AF03D968FE7F0F61ED0824C55C4B5265548FEBD6AAD5C5EEDF63EFE793489C39B8FD29D104CE" #h"E615BF8E35755D7B75DAD2C6DF097C95DC2BC59CCBFCAF71C39333F3BB30885EF92C4375DDF9D5E7688D01608295BA20") (:digest-test #h"3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1" #h"E8690E13312E80C837853FD947886C1490557EED59359301F9917B74A1898FE421C87B2B912701196962D1BAB8A026C5") (:digest-test #h"0EBF64AC017FEBDCA40FF85FD4AEB8F1A827561C150F74CD5E864857FBBA9C08A46EFB9FF7A16919618C9FB06BF8FE3F0859774DA6C38C5A0C54D44075D1BAF6482B7705C8E1A86E79B0FBF0328246B5E6BE013F934D4ECC34808A3639C49464309DF5AD250BF4521E41B4CDE563566B8625076AD7E260018EEE2F3252D15F36BDBBCE3C74758C68A0E72D83A37DB4D2022A80A4F6B16F4515053E1FE398CC6A74D343D4CBB403597AE68533E18EF893F756F6F554F98BCCBC84702D19F875D347C345B09EDFCB1C71BD6955C5178DFCB07376728CFC3AB9565C0A1A8DCA78221028B00B51B175A2DA2CC0A90C33C169EA8A1A2E375C087AC3657D28AC481D5B5C225AEFA85919FB8628F32F42F1FC0806A250143C084322FE9E30BCC8B89F3DA73469CEB935EE25887D843321CC8ABB3C75E15F4894CBB5731782372A5631979BBE6AEACDFB711A84F83BB89E0F92B88C5EE83E4F9A3C4F80624A17ED5549B77ED7D939C368CD9A92EAAE595105DE7E2889CAD71D01201580038FCF4AB4D285A13BEFAAA14FACFE5099A83F9E71D512519D055F44F757757BCEBBD2734CB91C5C4CE7B411D1E83B42689FDF8A69E63DDFD255B977D7435BEEB5DEBBBA7A47B19CDAB3F1C40E79B926A481A1629A818525C2A198983F23F0DA5DA8B99633689292332BCC2A4AD49769B3E448F8CEDB87C1DE2EF5D04E1C3A8116C3328F6B19B59C318E18F8DB29875C22A0A0C8EA615A593439F7B90AA2AD9C16CA573040A8190A834370378554BDA9DA9486AA3CE3F1B01DBA14B032B3C334F7A1E961426302ED2D38C34F61D7B4D182C0CA303C2F379E74EAF65A48D3D8A95616B2ABA5C88DBF6284C5CD68D902E3958A7B9529F49D38091BAC288734247FCE886D49BCE00AB98B1B962A8DA8B4710644E9DA418529E79A27408B52EB655FDE025A129A38EEEBA936657F725F0EC668380B9DD50C0759AC150F81B696B886E86A5447CCDCB3FBEC08C79471DC3111042FCFFFADC1A973340DD68610631FDDA6AD25148C2D0B48ADA24E6B2D42EA7510991C0455BA1B7F393CA1FA5801F182F89117885455DBF88F63CE0B77669BA965B73A344D3C4C787E3B4AAF58C56FB2589967C71969B1FE92C5E7D91094DBA84F470437339C1DC6918DD5FB835CBE69750363691B0CEE7B80F0D0AEB31DDBDAC52F904A3A91051B54ADF75B0D195763D29FD1B88244F61D6A304807B646326E76FB880D1DF37281A11CED52D5B5873668642C72CD7C70E36825CC17DA6E03C577D12F79CCEFD6B7B76C88B19F7606536793D8D33F7E0A598769883B417C3662B6267001BE7D0914563B2402149357D1C64680DA80B32207A67611EDF0E8D9A767E2BE2ABB21956FC764200945E4BC5830ACCCDC80DE485086514C63DA7F785CBA0C1E9CE5B249B52E7EE570D8657C63C4FC90856DFBBB24C8D2A711CB3A0960685EC55540F6EC2641A429D3DC99D82F26D2C7EACC614FFE988117D8F13B7442A9AE2929D3E1F67B974BB4A4AA960015C9216AFA844A243095F167B114700FB11215EB54357BCB1D4792A0B676C708E710211C3AF73D61B82F4D04BC40C898CE00A2D34C77F5E22DB71F46C939A0EC9C37D1647E23A0F44CC23D710A1DB20E38D009C6580192295C40B478A85A0930181D0962C3B18B6AAC7F5BE99607ADD25BBC23A7530E7E58C93F9FD4AFE5133FD228C6B4D9E43538CD9DCBE76C4D7DEDF22741839558A6B561847327DF7CFF1C17E03EB0ED9DD921974954638CADBF645A4BAA4A62774BA66E2E458A1F7AC67EC394429339C2F620D457F5DD06AE551B69BADDEE99A6C93EDC7BF7CD56898CEC4AB4E633489DD1934B3EAB68601E3560092CB9B1C64B90C9FBB6F62BE60B0E221F1F6E1D58444B731B30AB04C40988093FBD396E65BA703F52ACE0695035EE78E7A4969D3EB5834C58EF60FEE1DE0F0E03E4203FF50F957ED68513F9134A4332B56044EE14CE80EAD7CE532ACA58B1F98423C3CABD9921F83A81C7467B3C6F6DE4B12AD741C7345BD645854BBF859D110C8D60F53AFE65F6A8A0856BBF78954F8ECC831FBB43F030449A9FE72A3C86AB7962ACD28975530CB567CEA713BE76B2262A70896B8A3CAC66772C56A9ED139F3F4349898AECCDEBD5622F32A75EBBC9FE202FE56C957356D40AFEE4718C52D30FBF683CE17056E672F909110C087D361C196FE33C6D80DC6925769F6A93DD41B5BB5FEA806F3BF56C50D69B45A371AC5DCF5CF356BC552E0CF87E22AF0F121B21278B067138E2AFA098E7EDE1C0A8AB29B6CCF6B85D39ADB9CEDD013886D2C23C273A21267B2F2C22B5BF25D5A5CBD083684B454AB5FB854F90CB49B2F53795BBFD46348B30958398344F9C362040E1412F331E2DD1679F31ADBCF8D40BD3BF707A4F3558239A0B9488B3D6A264E6DA3911B0BE47DFF3257B193129DDA9F3C0D9ADEB161F8426CCD01AD2D0854F7319E12DF89DA88C98FBFEA96D1F40BD098AA46BEB471834B039D6F001F804ED3DC47CDE01D5B594D565D94F70BA7387822DBE8D0E44645A914F25D1D15F38EB4E5C9B4F48C6146DBEFF8D36C17E5E57A3F07E561AF390EDFA4E2CFECA19722A3BEEEA23782CD7AF8A61767B010F89A7082E04E807F5CEC49BF5AC71DB3DFDC5665CD1FA5B9EB0C3C7343C674730EC650A13BAE412126C68DAF917862ADB4E220461A6CD0C7511F4F31C47F8A41AC54FC0B34F07DC15060E9A43855DA0A162436B1D3A4B6D8EA87229FAECBBD9A2F0792266DD160E0F8671690411F8A9BC7429F8E0F4EB0098E33F0532057D1E05E6A78FF48A6BDF78176FB462E56B305476A78F099786A6793D2FC3F4F74DABD3A34BC2E50267F06157494B9966E1BF1F8708CBB770580CBB2467FC1B3595345A49A5D8EC528F3E2B3F91B06E0693F87FDA3B68CF99DF5C47BB18B767FBE74EC0B664AC0F1CC6592F01A5659A7F3B4293BFB8541F0A9E3F923A547DD1C784ED624CD3A2C9D1B8C308B3236E4146C93CDC36E17DFEDA5C123E735AD4FEAADCAABF9581BC1060726F545C308E56C7310093F7938A2083DC468BF5FF3C84C2271EC7533838FF15E6F7EE8C71115EA8E342BC33AD64467640B11EFE5F33CECDEE3058E8C17F8CA0488918506FE2FA10B92B9FA87DD7305362D24D4CE454A779612B112C7C7E6D4B632A8475EDADBEA13486CFAF5647E4DF1FB135AE793F8E6D23216B0ADF664A14397DAE07E133A1A58E15B25E9092B61FAD3619BD551858144B80D9075D34128C351643F101BADDFA990CE910F2A8D721B64C495A12F07AF3D32CEDAC92E20DD9638C0DB36EB7B1286138FE056EAE9D91C4A0AB7DC5267FB16A41B771EB01D54701FB43570482157BE10C6FA9E4D866B8B5D650EE6F3FE117B1FA79CBE4F8A9B97928EBA2FCA6D7669B384184895BFE76ABF484B03B9F7CA10308C6CE31197CA15B1A36CEDC3774B6B9DDCC2431E732DB36537F1F4F4883E81E7B3C6D368B4EBDCE34C657711D2CBB4158D519E027C5B4B64575AFCD87CE736C45028D378D70C0FDE73B5499FFB307B9DD82073833C0A84769964FBD7D01C4ECE805E122364B2B485B6DAC7793F1EE7F1CB2A50AE6565CD210308260EF64D9B2FE8378516AD093960D5CA8CFA9FCF28762998020743086B93EEDEC324784428EBA23141466185C740055B1E87BF7F6BEF5CE8E28DD270F9DA64D6FFF2CB0D73A734D45DC56CD03BE9414DB568EE2366F2166FD6D43AF9EEECB13C4A5D3A8E775BEE5942194033AE3EE1754FC046BE91130979AB88E47A4CEA379ED9E77BC4310DDAE2BDB7A5B941E3FB6081CC3ED710E0C603D47EFA82FCCC0D556D4AB58825EBE6EC7700F02FB7A0EED44CD2F8772CCDEE4BA4B883DAAB46264A569AAAE97A0E4369EC00F59D841A1A7CF2D39BC58725B248C7B159D6D68B3D9721231CACAAD38F26F357BFD31FFCEC18CF34EE42C3B375C827C4284B31FCD4374CFE8C2C7A6B952581C9837587CB161EECA237290AFE8095E069A99514DFAFC2FD8CFC734B4AE64807D3ACA2681ADE0FA018B17D2A61F30F0307AE86D67D4A14D9CE214CF41EDB702735F99D58BDACE7F28C7D95A9CAE8B079708C6C7E78ACCAB67F67A598F7C86FE8B8AB6539B2EBB376B6A17144A3ADAD6BE5D617D30607AB4D94C11A7C1858E19B5C7B12F9BE4AC245A9E91A22EE5471AA58538AFB35319F53D6DD69BC2AE48D2B649DFF6E71DEA3B797C071A0C345F66DF053475A40031F323908C71A198C7FB2D542AA8DD97B2F1CE01D11E7FC458518CE1CB451BB9B1D57530D15EC95BA73BD5A386947FF8D0F565549A11B88759D6ABA3A83967BF9543E640A33F6F9D9655A547785B42B11216EC1CCE067630E89708CA896733129DB5312169003B8FACB8DE3F99E65427AEF51CC1C91005BB7F5B65218B1B492FDD67761E0F7C2FC60F7ECA13B09DF6B2A53B5B9CEAB43D5A1EC3260A89B54BC257850F0659E3240DAF073CC5236F65B159CF8FDEC771911C054BB417F6799330D443A735704E66EA9F1D3351837197C19E8226D27A1EB5B664781CF0651231AB25678A4C9F9973DA830ED3871A6EE638DDA3C789B0AC27DF49717CA2A1DF46968D56035EF02B712D12067E72B1E661120FC1FDE4FE6B11BB4D189F29112DBBD6DD0D9E4E78501C8E5EEECC333B208D7B86522C61DE4ED0D4454D19CA62027627344F455C05F429FA17E4A6F0BAFCD4B575CBA3755B042382942190B6EAF762DF7714797E916D58E7DD0DE2CFC41D8E6E410DE623EA5C547334D3A21488CD2D65E6F9E0F123166FD8304309D0160B5A605317E0122308F9FF065AE6ED422437C962A1362EC1F2804B274E3BAE118292FF930BD519EFD3A93E40F949ABC60E8E9190DAAF9FC8099A44311861B02FFB4F9A0AEA81999170ED5BD14B727B42EB44B0B55983F1AC2F2BA80734630D6B7500D65EAB42F6771EEA6872677E252DA4C717BAA07760BFC5FE09D4835A65200A80C2759A476A930B7FB4A738241C3E73A9C75D5A7F0A0BE52138DDA2812AEFBA8FD78D5840E6EA1D15C57EA66A59B3A882A8FD04093A5815A5324BE75C4F83CF16B785D2D3BD36602A0026A9895CB343688EEA40CDB483EDCD87788B668A69D0BC75B07D8C8247A9780E4C1EC342C1198295D699F0829E41A78F0F9978DD52D6491898F1F05B979E587F711DF66F38C23C2BFF9C69086AB970C468315B3B6C36D58A7AE9C749FA06429E6781AE7D49B3B368048641A63DB95EE293A1954201CAD72E92A85E34C7A74B2FD1BCA6AA61435AF2DC32C1A2F559F63E716A6C96F076097E6C45F4372AE6828E9EAAE3EB82361710EC14F67F7D0ED9859249C18D14985302847FC8F3301BD31C7E1E09B2057E9EE46FCC7C9BD8DB59EB0DEB0B1D8D291508CB3837C9B2F191A49595D6AADDCEFEF0DD59ED3A05FA8F6EF03D38F534139D56BCBD4BC3256E1A120D49A5DB1BADB528B0256C61A2F179A23C49928738F9C0FA81FC196D1A74507998415F070EF9C38BAA53951FEE7B68008BC675E0E15BC32A61C30BC132E79C58A3A970FFDDB8B806782DD31242B3C3CF9810BEEA5FB5A1B250EA62336456E7694B4C829508C7DBFE090AF6A850F79D04D2C698637816017F8A920E1B1ADE236E227B3480899BCBB991F6C6C240BBD4114AAF9875935558394A486652B0942F3409B66FAF8B8BF711CC8C34CCA41B8E16C2CDF0160B92A332C1F04BC64582446B98AFF34189675B7A10FFC6F13B3F74654ED7C0590D4AF7F4D747BF89BB2A8F5C8CE610CF4FA4AB714A845E15649B53E54A95213D5A73905941D9467B0BEDDA2BECC1C219E1CAB699652D85B8CD7E0CD11CE5B0CAC76F9EF3D74BD829877898E7350CCA72101076A970BEC6756C3FD1AAF3396F72833F8D4E716AEC6F93718B262710B0DA2F3FD6CBDB204ED0E91D65CAB39ED35F22A01E5D509282752837EBEE968B140989EF5F4D513452784BDB892CAFD8387E05B3012C0458A369E62191F5BDC57DD63CE42E945F493C2B42306B8084F3B25E94ABACF08EE155F3621ACC9626EE487C7A7E4667F0377AE4B2" #h"EBBF0162CDCEEB8963D6719175FC812FB87569FB13D39F720DBD75E7F6EE097B0BCCCC778336FD4693EFB2DBFA3C8250") ironclad-0.57/testing/test-vectors/jh.testvec000066400000000000000000000345351420372057600213770ustar00rootroot00000000000000(:digest-test #h"" #h"90ECF2F76F9D2C8017D979AD5AB96B87D58FC8FC4B83060F3F900774FAA2C8FABE69C5F4FF1EC2B61D6B316941CEDEE117FB04B1F4C5BC1B919AE841C50EEC4F") (:digest-test #h"CC" #h"277C93806945992A7F10102F28471AF2783FE32003B3F63320810E74F1BC233BF8669AB4B922DB9EF13FCDCD4D31193B731EEDDE98FC87C129C04A4A1071F66F") (:digest-test #h"41FB" #h"5D80BE996BA553A0C68FD539FF3859CED2D1FA627AFADDE83464A9F67CAB6D66A32749B5228482A5F4A11332D62974547CB8FF90EBA9DDF03272F873457563F0") (:digest-test #h"1F877C" #h"FD745541F728856A4FE34D53EC2B17A03C9B83C321EA69E708C354198821AAFD98EF2062B566308374763A55AA0291F99A42D9CDBE36952FF58D00A689C2E6A9") (:digest-test #h"C1ECFDFC" #h"6027C238EB7B1D60B64B72EA11713C52DB49FBE9582B6FE9383D0D6F9D120ED85710C2FCE6FF2D5A173C5AE7766ED286C0896330DF7F308638DAB6FC915FC86B") (:digest-test #h"21F134AC57" #h"E334B2946942583370CE0B840D31752F35DE5087F5AB3405872087B496DB14C8CDC2C138B3A26A3191D7B9134DD5ACF8EBCFEA0D2BDED060ED3290A4A33FC3FC") (:digest-test #h"C6F50BB74E29" #h"F30360B24E1A66FE2FAB043779A2FC0313069B55EE2D763E7FD125368BEFA27059ACC55B1AE016881DF31FAED7E758C03D9A77863F98F1290F64CBDEA25C0A36") (:digest-test #h"119713CC83EEEF" #h"5C52EE79194E100C7A75C7F85EC808A1A981A912C56E0689AF5D1329D9BAFE76E8A12526B83B8C541E86FD59489CE42AF304F64596D925C9F5E942A5673E192E") (:digest-test #h"4A4F202484512526" #h"11893879DBC8E810D3ABBA8F38F07895C5B76C038D3BCDBCE71EDFFB803233DD71066A7BAD4F4DE667C2F4197731DC37736604EBF6825D716C491C8441674E9C") (:digest-test #h"EED7422227613B6F53C9" #h"DC2AC1CD7B21817827FD01BF23BB38979F9541F1220CE16FB59DA43CA77AB5C6F4FAF69E78FF6B85A995ACECF9873EF12DD48C7B9D20B5E439504DE7449D70F3") (:digest-test #h"5BE43C90F22902E4FE8ED2D3" #h"B43CD3A0D7ED1CFC2C555DB7823EDF4DD6027928E702DD935F76DC4454F15BAC86FDB031DE899E8226A5489F0DA287E7255FE006E7CD280AEEBFF049E48FCD01") (:digest-test #h"52A608AB21CCDD8A4457A57EDE782176" #h"F23649FBCCD45292E396893E5C04D98C9F76164FD32371AFE72212B706CF7E5F661663826C4E034D69F84B363B1344D3219625C2CA9A3BFB95671017587D1255") (:digest-test #h"E26193989D06568FE688E75540AEA06747D9F851" #h"6CDE03CB40F94765B632004F92E8CF9ECAAC88A9ADE7CB9DBE239720F6847C7CCEB61DB1BBEC25D314BA4A85442AEF23E7086BB9E05D34D66F6E334F132BA1C8") (:digest-test #h"0F8B2D8FCFD9D68CFFC17CCFB117709B53D26462A3F346FB7C79B85E" #h"622B50269D36AD846D009CD7AF70CB739815956B526843C2A2BEE313BB27AB3939A4474B14F7D5959F707E44A695CA506CBABB891588AE81BE0A939F14EC2E68") (:digest-test #h"9F2FCC7C90DE090D6B87CD7E9718C1EA6CB21118FC2D5DE9F97E5DB6AC1E9C10" #h"F33D0A4F425B0919E2C7E67A2484CBD8D9ADC7A025ACFFA8DD3B8494B132D24821505EB305259A727E314A085F256D513952D2CFDB68209549D6C27380241E0A") (:digest-test #h"D8FABA1F5194C4DB5F176FABFFF856924EF627A37CD08CF55608BBA8F1E324D7C7F157298EABC4DCE7D89CE5162499F9" #h"4E91392DAEEE58C42DAF9D05CC001CF06EFE8911CA3A12F90D091821BAE4F29A72AC84113BF7421FE493DDA4DE34E1166B2DE05761660EE38118E01C3D37101D") (:digest-test #h"EEBCC18057252CBF3F9C070F1A73213356D5D4BC19AC2A411EC8CDEEE7A571E2E20EAF61FD0C33A0FFEB297DDB77A97F0A415347DB66BCAF" #h"5B0D347113A9862CAC078D6EEA684F50F049260741CBF8063EB78347D5222FDDC0B81F563A489093D75FE10229EE0444F5863E8EA0503EC68DA600CD82BFDABF") (:digest-test #h"E926AE8B0AF6E53176DBFFCC2A6B88C6BD765F939D3D178A9BDE9EF3AA131C61E31C1E42CDFAF4B4DCDE579A37E150EFBEF5555B4C1CB40439D835A724E2FAE7" #h"D1DBACB16C6A88BEA992CD34F92D1375F05215037CF989E155D324D6D1E4204320CF18C1AD6BF11019CDD112BAC3C7CB73E41A94254B8C5AF3DB8245318FFC70") (:digest-test #h"36F9F0A65F2CA498D739B944D6EFF3DA5EBBA57E7D9C41598A2B0E4380F3CF4B479EC2348D015FFE6256273511154AFCF3B4B4BF09D6C4744FDD0F62D75079D440706B05" #h"150DEAE20C89949D9101A4D64FA5DF890FC3319CE232527BBB946CF0A05799F86E770910B1CC4D2B8E77B384C34AAECE276654086007BEE9829F315997BC820C") (:digest-test #h"69F9ABBA65592EE01DB4DCE52DBAB90B08FC04193602792EE4DAA263033D59081587B09BBE49D0B49C9825D22840B2FF5D9C5155F975F8F2C2E7A90C75D2E4A8040FE39F63BBAFB403D9E28CC3B86E04E394A9C9E8065BD3C85FA9F0C7891600" #h"7ECA01ED545EBAFDF9FAAAA769975C18D4219124D47C2B97CC60DB9B29CE13CE0DB0EECB83EFABD3C4118200812C6E140A1B831B78666A5227CBE155CA561F20") (:digest-test #h"433C5303131624C0021D868A30825475E8D0BD3052A022180398F4CA4423B98214B6BEAAC21C8807A2C33F8C93BD42B092CC1B06CEDF3224D5ED1EC29784444F22E08A55AA58542B524B02CD3D5D5F6907AFE71C5D7462224A3F9D9E53E7E0846DCBB4CE" #h"E7E98123C05700A8EEB27133F3718FF6B8BEAA646DE97614F36A90546AEA803B9EBA7EE5F9D72BA7EBC752A5536DB9331CCBAC06165017681BF4EA49DCF7EECB") (:digest-test #h"2B6DB7CED8665EBE9DEB080295218426BDAA7C6DA9ADD2088932CDFFBAA1C14129BCCDD70F369EFB149285858D2B1D155D14DE2FDB680A8B027284055182A0CAE275234CC9C92863C1B4AB66F304CF0621CD54565F5BFF461D3B461BD40DF28198E3732501B4860EADD503D26D6E69338F4E0456E9E9BAF3D827AE685FB1D817" #h"9EC6669F30F482A65D93FE7811923B6BDF3A1BDE032502E0B1A064C9D893C03507576FC4FBC745D458C1402BA76F7D4C4539C4DFED7C058596FA270416865162") (:digest-test #h"DB11F609BABA7B0CA634926B1DD539C8CBADA24967D7ADD4D9876F77C2D80C0F4DCEFBD7121548373582705CCA2495BD2A43716FE64ED26D059CFB566B3364BD49EE0717BDD9810DD14D8FAD80DBBDC4CAFB37CC60FB0FE2A80FB4541B8CA9D59DCE457738A9D3D8F641AF8C3FD6DA162DC16FC01AAC527A4A0255B4D231C0BE50F44F0DB0B713AF03D968FE7F0F61ED0824C55C4B5265548FEBD6AAD5C5EEDF63EFE793489C39B8FD29D104CE" #h"C4196CBFA57BFF0D2C4DA3C5F22BDCA8C9B2DC10DE2F1F4227BE71241D14EDFFE9741FB71283079C25CAA6A58C58A199E4AB0736CC4C51C463FF8E831F9A00C4") (:digest-test #h"3A3A819C48EFDE2AD914FBF00E18AB6BC4F14513AB27D0C178A188B61431E7F5623CB66B23346775D386B50E982C493ADBBFC54B9A3CD383382336A1A0B2150A15358F336D03AE18F666C7573D55C4FD181C29E6CCFDE63EA35F0ADF5885CFC0A3D84A2B2E4DD24496DB789E663170CEF74798AA1BBCD4574EA0BBA40489D764B2F83AADC66B148B4A0CD95246C127D5871C4F11418690A5DDF01246A0C80A43C70088B6183639DCFDA4125BD113A8F49EE23ED306FAAC576C3FB0C1E256671D817FC2534A52F5B439F72E424DE376F4C565CCA82307DD9EF76DA5B7C4EB7E085172E328807C02D011FFBF33785378D79DC266F6A5BE6BB0E4A92ECEEBAEB1" #h"F9EAF9BE02ED767289802372D67AB3B19EA9422CAD9EFA1A420E4B011C123BA906EE1D4852E12914752D648C432EF34A2BB3960574FEFC56F96CA76D9F619218") (:digest-test #h"0EBF64AC017FEBDCA40FF85FD4AEB8F1A827561C150F74CD5E864857FBBA9C08A46EFB9FF7A16919618C9FB06BF8FE3F0859774DA6C38C5A0C54D44075D1BAF6482B7705C8E1A86E79B0FBF0328246B5E6BE013F934D4ECC34808A3639C49464309DF5AD250BF4521E41B4CDE563566B8625076AD7E260018EEE2F3252D15F36BDBBCE3C74758C68A0E72D83A37DB4D2022A80A4F6B16F4515053E1FE398CC6A74D343D4CBB403597AE68533E18EF893F756F6F554F98BCCBC84702D19F875D347C345B09EDFCB1C71BD6955C5178DFCB07376728CFC3AB9565C0A1A8DCA78221028B00B51B175A2DA2CC0A90C33C169EA8A1A2E375C087AC3657D28AC481D5B5C225AEFA85919FB8628F32F42F1FC0806A250143C084322FE9E30BCC8B89F3DA73469CEB935EE25887D843321CC8ABB3C75E15F4894CBB5731782372A5631979BBE6AEACDFB711A84F83BB89E0F92B88C5EE83E4F9A3C4F80624A17ED5549B77ED7D939C368CD9A92EAAE595105DE7E2889CAD71D01201580038FCF4AB4D285A13BEFAAA14FACFE5099A83F9E71D512519D055F44F757757BCEBBD2734CB91C5C4CE7B411D1E83B42689FDF8A69E63DDFD255B977D7435BEEB5DEBBBA7A47B19CDAB3F1C40E79B926A481A1629A818525C2A198983F23F0DA5DA8B99633689292332BCC2A4AD49769B3E448F8CEDB87C1DE2EF5D04E1C3A8116C3328F6B19B59C318E18F8DB29875C22A0A0C8EA615A593439F7B90AA2AD9C16CA573040A8190A834370378554BDA9DA9486AA3CE3F1B01DBA14B032B3C334F7A1E961426302ED2D38C34F61D7B4D182C0CA303C2F379E74EAF65A48D3D8A95616B2ABA5C88DBF6284C5CD68D902E3958A7B9529F49D38091BAC288734247FCE886D49BCE00AB98B1B962A8DA8B4710644E9DA418529E79A27408B52EB655FDE025A129A38EEEBA936657F725F0EC668380B9DD50C0759AC150F81B696B886E86A5447CCDCB3FBEC08C79471DC3111042FCFFFADC1A973340DD68610631FDDA6AD25148C2D0B48ADA24E6B2D42EA7510991C0455BA1B7F393CA1FA5801F182F89117885455DBF88F63CE0B77669BA965B73A344D3C4C787E3B4AAF58C56FB2589967C71969B1FE92C5E7D91094DBA84F470437339C1DC6918DD5FB835CBE69750363691B0CEE7B80F0D0AEB31DDBDAC52F904A3A91051B54ADF75B0D195763D29FD1B88244F61D6A304807B646326E76FB880D1DF37281A11CED52D5B5873668642C72CD7C70E36825CC17DA6E03C577D12F79CCEFD6B7B76C88B19F7606536793D8D33F7E0A598769883B417C3662B6267001BE7D0914563B2402149357D1C64680DA80B32207A67611EDF0E8D9A767E2BE2ABB21956FC764200945E4BC5830ACCCDC80DE485086514C63DA7F785CBA0C1E9CE5B249B52E7EE570D8657C63C4FC90856DFBBB24C8D2A711CB3A0960685EC55540F6EC2641A429D3DC99D82F26D2C7EACC614FFE988117D8F13B7442A9AE2929D3E1F67B974BB4A4AA960015C9216AFA844A243095F167B114700FB11215EB54357BCB1D4792A0B676C708E710211C3AF73D61B82F4D04BC40C898CE00A2D34C77F5E22DB71F46C939A0EC9C37D1647E23A0F44CC23D710A1DB20E38D009C6580192295C40B478A85A0930181D0962C3B18B6AAC7F5BE99607ADD25BBC23A7530E7E58C93F9FD4AFE5133FD228C6B4D9E43538CD9DCBE76C4D7DEDF22741839558A6B561847327DF7CFF1C17E03EB0ED9DD921974954638CADBF645A4BAA4A62774BA66E2E458A1F7AC67EC394429339C2F620D457F5DD06AE551B69BADDEE99A6C93EDC7BF7CD56898CEC4AB4E633489DD1934B3EAB68601E3560092CB9B1C64B90C9FBB6F62BE60B0E221F1F6E1D58444B731B30AB04C40988093FBD396E65BA703F52ACE0695035EE78E7A4969D3EB5834C58EF60FEE1DE0F0E03E4203FF50F957ED68513F9134A4332B56044EE14CE80EAD7CE532ACA58B1F98423C3CABD9921F83A81C7467B3C6F6DE4B12AD741C7345BD645854BBF859D110C8D60F53AFE65F6A8A0856BBF78954F8ECC831FBB43F030449A9FE72A3C86AB7962ACD28975530CB567CEA713BE76B2262A70896B8A3CAC66772C56A9ED139F3F4349898AECCDEBD5622F32A75EBBC9FE202FE56C957356D40AFEE4718C52D30FBF683CE17056E672F909110C087D361C196FE33C6D80DC6925769F6A93DD41B5BB5FEA806F3BF56C50D69B45A371AC5DCF5CF356BC552E0CF87E22AF0F121B21278B067138E2AFA098E7EDE1C0A8AB29B6CCF6B85D39ADB9CEDD013886D2C23C273A21267B2F2C22B5BF25D5A5CBD083684B454AB5FB854F90CB49B2F53795BBFD46348B30958398344F9C362040E1412F331E2DD1679F31ADBCF8D40BD3BF707A4F3558239A0B9488B3D6A264E6DA3911B0BE47DFF3257B193129DDA9F3C0D9ADEB161F8426CCD01AD2D0854F7319E12DF89DA88C98FBFEA96D1F40BD098AA46BEB471834B039D6F001F804ED3DC47CDE01D5B594D565D94F70BA7387822DBE8D0E44645A914F25D1D15F38EB4E5C9B4F48C6146DBEFF8D36C17E5E57A3F07E561AF390EDFA4E2CFECA19722A3BEEEA23782CD7AF8A61767B010F89A7082E04E807F5CEC49BF5AC71DB3DFDC5665CD1FA5B9EB0C3C7343C674730EC650A13BAE412126C68DAF917862ADB4E220461A6CD0C7511F4F31C47F8A41AC54FC0B34F07DC15060E9A43855DA0A162436B1D3A4B6D8EA87229FAECBBD9A2F0792266DD160E0F8671690411F8A9BC7429F8E0F4EB0098E33F0532057D1E05E6A78FF48A6BDF78176FB462E56B305476A78F099786A6793D2FC3F4F74DABD3A34BC2E50267F06157494B9966E1BF1F8708CBB770580CBB2467FC1B3595345A49A5D8EC528F3E2B3F91B06E0693F87FDA3B68CF99DF5C47BB18B767FBE74EC0B664AC0F1CC6592F01A5659A7F3B4293BFB8541F0A9E3F923A547DD1C784ED624CD3A2C9D1B8C308B3236E4146C93CDC36E17DFEDA5C123E735AD4FEAADCAABF9581BC1060726F545C308E56C7310093F7938A2083DC468BF5FF3C84C2271EC7533838FF15E6F7EE8C71115EA8E342BC33AD64467640B11EFE5F33CECDEE3058E8C17F8CA0488918506FE2FA10B92B9FA87DD7305362D24D4CE454A779612B112C7C7E6D4B632A8475EDADBEA13486CFAF5647E4DF1FB135AE793F8E6D23216B0ADF664A14397DAE07E133A1A58E15B25E9092B61FAD3619BD551858144B80D9075D34128C351643F101BADDFA990CE910F2A8D721B64C495A12F07AF3D32CEDAC92E20DD9638C0DB36EB7B1286138FE056EAE9D91C4A0AB7DC5267FB16A41B771EB01D54701FB43570482157BE10C6FA9E4D866B8B5D650EE6F3FE117B1FA79CBE4F8A9B97928EBA2FCA6D7669B384184895BFE76ABF484B03B9F7CA10308C6CE31197CA15B1A36CEDC3774B6B9DDCC2431E732DB36537F1F4F4883E81E7B3C6D368B4EBDCE34C657711D2CBB4158D519E027C5B4B64575AFCD87CE736C45028D378D70C0FDE73B5499FFB307B9DD82073833C0A84769964FBD7D01C4ECE805E122364B2B485B6DAC7793F1EE7F1CB2A50AE6565CD210308260EF64D9B2FE8378516AD093960D5CA8CFA9FCF28762998020743086B93EEDEC324784428EBA23141466185C740055B1E87BF7F6BEF5CE8E28DD270F9DA64D6FFF2CB0D73A734D45DC56CD03BE9414DB568EE2366F2166FD6D43AF9EEECB13C4A5D3A8E775BEE5942194033AE3EE1754FC046BE91130979AB88E47A4CEA379ED9E77BC4310DDAE2BDB7A5B941E3FB6081CC3ED710E0C603D47EFA82FCCC0D556D4AB58825EBE6EC7700F02FB7A0EED44CD2F8772CCDEE4BA4B883DAAB46264A569AAAE97A0E4369EC00F59D841A1A7CF2D39BC58725B248C7B159D6D68B3D9721231CACAAD38F26F357BFD31FFCEC18CF34EE42C3B375C827C4284B31FCD4374CFE8C2C7A6B952581C9837587CB161EECA237290AFE8095E069A99514DFAFC2FD8CFC734B4AE64807D3ACA2681ADE0FA018B17D2A61F30F0307AE86D67D4A14D9CE214CF41EDB702735F99D58BDACE7F28C7D95A9CAE8B079708C6C7E78ACCAB67F67A598F7C86FE8B8AB6539B2EBB376B6A17144A3ADAD6BE5D617D30607AB4D94C11A7C1858E19B5C7B12F9BE4AC245A9E91A22EE5471AA58538AFB35319F53D6DD69BC2AE48D2B649DFF6E71DEA3B797C071A0C345F66DF053475A40031F323908C71A198C7FB2D542AA8DD97B2F1CE01D11E7FC458518CE1CB451BB9B1D57530D15EC95BA73BD5A386947FF8D0F565549A11B88759D6ABA3A83967BF9543E640A33F6F9D9655A547785B42B11216EC1CCE067630E89708CA896733129DB5312169003B8FACB8DE3F99E65427AEF51CC1C91005BB7F5B65218B1B492FDD67761E0F7C2FC60F7ECA13B09DF6B2A53B5B9CEAB43D5A1EC3260A89B54BC257850F0659E3240DAF073CC5236F65B159CF8FDEC771911C054BB417F6799330D443A735704E66EA9F1D3351837197C19E8226D27A1EB5B664781CF0651231AB25678A4C9F9973DA830ED3871A6EE638DDA3C789B0AC27DF49717CA2A1DF46968D56035EF02B712D12067E72B1E661120FC1FDE4FE6B11BB4D189F29112DBBD6DD0D9E4E78501C8E5EEECC333B208D7B86522C61DE4ED0D4454D19CA62027627344F455C05F429FA17E4A6F0BAFCD4B575CBA3755B042382942190B6EAF762DF7714797E916D58E7DD0DE2CFC41D8E6E410DE623EA5C547334D3A21488CD2D65E6F9E0F123166FD8304309D0160B5A605317E0122308F9FF065AE6ED422437C962A1362EC1F2804B274E3BAE118292FF930BD519EFD3A93E40F949ABC60E8E9190DAAF9FC8099A44311861B02FFB4F9A0AEA81999170ED5BD14B727B42EB44B0B55983F1AC2F2BA80734630D6B7500D65EAB42F6771EEA6872677E252DA4C717BAA07760BFC5FE09D4835A65200A80C2759A476A930B7FB4A738241C3E73A9C75D5A7F0A0BE52138DDA2812AEFBA8FD78D5840E6EA1D15C57EA66A59B3A882A8FD04093A5815A5324BE75C4F83CF16B785D2D3BD36602A0026A9895CB343688EEA40CDB483EDCD87788B668A69D0BC75B07D8C8247A9780E4C1EC342C1198295D699F0829E41A78F0F9978DD52D6491898F1F05B979E587F711DF66F38C23C2BFF9C69086AB970C468315B3B6C36D58A7AE9C749FA06429E6781AE7D49B3B368048641A63DB95EE293A1954201CAD72E92A85E34C7A74B2FD1BCA6AA61435AF2DC32C1A2F559F63E716A6C96F076097E6C45F4372AE6828E9EAAE3EB82361710EC14F67F7D0ED9859249C18D14985302847FC8F3301BD31C7E1E09B2057E9EE46FCC7C9BD8DB59EB0DEB0B1D8D291508CB3837C9B2F191A49595D6AADDCEFEF0DD59ED3A05FA8F6EF03D38F534139D56BCBD4BC3256E1A120D49A5DB1BADB528B0256C61A2F179A23C49928738F9C0FA81FC196D1A74507998415F070EF9C38BAA53951FEE7B68008BC675E0E15BC32A61C30BC132E79C58A3A970FFDDB8B806782DD31242B3C3CF9810BEEA5FB5A1B250EA62336456E7694B4C829508C7DBFE090AF6A850F79D04D2C698637816017F8A920E1B1ADE236E227B3480899BCBB991F6C6C240BBD4114AAF9875935558394A486652B0942F3409B66FAF8B8BF711CC8C34CCA41B8E16C2CDF0160B92A332C1F04BC64582446B98AFF34189675B7A10FFC6F13B3F74654ED7C0590D4AF7F4D747BF89BB2A8F5C8CE610CF4FA4AB714A845E15649B53E54A95213D5A73905941D9467B0BEDDA2BECC1C219E1CAB699652D85B8CD7E0CD11CE5B0CAC76F9EF3D74BD829877898E7350CCA72101076A970BEC6756C3FD1AAF3396F72833F8D4E716AEC6F93718B262710B0DA2F3FD6CBDB204ED0E91D65CAB39ED35F22A01E5D509282752837EBEE968B140989EF5F4D513452784BDB892CAFD8387E05B3012C0458A369E62191F5BDC57DD63CE42E945F493C2B42306B8084F3B25E94ABACF08EE155F3621ACC9626EE487C7A7E4667F0377AE4B2" #h"444B52EBCA171509C213183A54E48270473BB72FFE513A2177C5A780C5562559FBC38E121DCAB5DBC77A9447FC258B554FC4D0DD3926C72D8EEC50AE7E61188C") ironclad-0.57/testing/test-vectors/kalyna128.testvec000066400000000000000000000011011420372057600224670ustar00rootroot00000000000000(:ecb-mode-test #h"000102030405060708090a0b0c0d0e0f" #h"101112131415161718191a1b1c1d1e1f" #h"81bf1c7d779bac20e1c9ea39b4d2ad06") (:ecb-mode-test #h"0f0e0d0c0b0a09080706050403020100" #h"7291ef2b470cc7846f09c2303973dad7" #h"1f1e1d1c1b1a19181716151413121110") (:ecb-mode-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"202122232425262728292a2b2c2d2e2f" #h"58ec3e091000158a1148f7166f334f14") (:ecb-mode-test #h"1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100" #h"f36db456cefddfe1b45b5f7030cad996" #h"2f2e2d2c2b2a29282726252423222120") ironclad-0.57/testing/test-vectors/kalyna256.testvec000066400000000000000000000020011420372057600224710ustar00rootroot00000000000000(:ecb-mode-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f" #h"202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"f66e3d570ec92135aedae323dcbd2a8ca03963ec206a0d5a88385c24617fd92c") (:ecb-mode-test #h"1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100" #h"7fc5237896674e8603c1e9b03f8b4ba3ab5b7c592c3fc3d361edd12586b20fe3" #h"3f3e3d3c3b3a393837363534333231302f2e2d2c2b2a29282726252423222120") (:ecb-mode-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f" #h"606990e9e6b7b67a4bd6d893d72268b78e02c83c3cd7e102fd2e74a8fdfe5dd9") (:ecb-mode-test #h"3f3e3d3c3b3a393837363534333231302f2e2d2c2b2a292827262524232221201f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100" #h"18317a2767dad482bccd07b9a1788d075e7098189e5f84972d0b916d79ba6ae0" #h"5f5e5d5c5b5a595857565554535251504f4e4d4c4b4a49484746454443424140") ironclad-0.57/testing/test-vectors/kalyna512.testvec000066400000000000000000000015001420372057600224670ustar00rootroot00000000000000(:ecb-mode-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f" #h"4a26e31b811c356aa61dd6ca0596231a67ba8354aa47f3a13e1deec320eb56b895d0f417175bab662fd6f134bb15c86ccb906a26856efeb7c5bc6472940dd9d9") (:ecb-mode-test #h"3f3e3d3c3b3a393837363534333231302f2e2d2c2b2a292827262524232221201f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100" #h"ce80843325a052521bead714e6a9d829fd381e0ee9a845bd92044554d9fa46a3757fefdb853bb1f297ff9d833b75e66aaf4157abb5291bdcf094bb13aa5aff22" #h"7f7e7d7c7b7a797877767574737271706f6e6d6c6b6a696867666564636261605f5e5d5c5b5a595857565554535251504f4e4d4c4b4a49484746454443424140") ironclad-0.57/testing/test-vectors/keccak-224.testvec000066400000000000000000000013501420372057600225110ustar00rootroot00000000000000(:digest-test #a"" #h"f71837502ba8e10837bdd8d365adb85591895602fc552b48b7390abd") (:digest-test #a"abc" #h"c30411768506ebe1c2871b1ee2e87d38df342317300a9b97a95ec6a8") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"e51faa2b4655150b931ee8d700dc202f763ca5f962c529eae55012b6") (:digest-test #a"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" #h"344298994b1b06873eae2ce739c425c47291a2e24189e01b524f88dc") (:digest-test #a"The quick brown fox jumps over the lazy dog" #h"310aee6b30c47350576ac2873fa89fd190cdc488442f3ef654cf23fe") (:digest-test #a"The quick brown fox jumps over the lazy dog." #h"c59d4eaeac728671c635ff645014e2afa935bebffdb5fbd207ffdeab") ironclad-0.57/testing/test-vectors/keccak-256.testvec000066400000000000000000000014301420372057600225150ustar00rootroot00000000000000(:digest-test #a"" #h"c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470") (:digest-test #a"abc" #h"4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"45d3b367a6904e6e8d502ee04999a7c27647f91fa845d456525fd352ae3d7371") (:digest-test #a"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" #h"f519747ed599024f3882238e5ab43960132572b7345fbeb9a90769dafd21ad67") (:digest-test #a"The quick brown fox jumps over the lazy dog" #h"4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15") (:digest-test #a"The quick brown fox jumps over the lazy dog." #h"578951e24efd62a3d63a86f7cd19aaa53c898fe287d2552133220370240b572d") ironclad-0.57/testing/test-vectors/keccak-384.testvec000066400000000000000000000017301420372057600225220ustar00rootroot00000000000000(:digest-test #a"" #h"2c23146a63a29acf99e73b88f8c24eaa7dc60aa771780ccc006afbfa8fe2479b2dd2b21362337441ac12b515911957ff") (:digest-test #a"abc" #h"f7df1165f033337be098e7d288ad6a2f74409d7a60b49c36642218de161b1f99f8c681e4afaf31a34db29fb763e3c28e") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"b41e8896428f1bcbb51e17abd6acc98052a3502e0d5bf7fa1af949b4d3c855e7c4dc2c390326b3f3e74c7b1e2b9a3657") (:digest-test #a"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" #h"cc063f34685135368b34f7449108f6d10fa727b09d696ec5331771da46a923b6c34dbd1d4f77e595689c1f3800681c28") (:digest-test #a"The quick brown fox jumps over the lazy dog" #h"283990fa9d5fb731d786c5bbee94ea4db4910f18c62c03d173fc0a5e494422e8a0b3da7574dae7fa0baf005e504063b3") (:digest-test #a"The quick brown fox jumps over the lazy dog." #h"9ad8e17325408eddb6edee6147f13856ad819bb7532668b605a24a2d958f88bd5c169e56dc4b2f89ffd325f6006d820b") ironclad-0.57/testing/test-vectors/keccak.testvec000066400000000000000000003161351420372057600222160ustar00rootroot00000000000000(:digest-test #a"" #h"0eab42de4c3ceb9235fc91acffe746b29c29a8c366b7c60e4e67c466f36a4304c00fa9caf9d87976ba469bcbe06713b435f091ef2769fb160cdab33d3670680e") (:digest-test #a"abc" #h"18587dc2ea106b9a1563e32b3312421ca164c7f1f07bc922a9c83d77cea3a1e5d0c69910739025372dc14ac9642629379540c17e2a65b19d77aa511a9d00bb96") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"6aa6d3669597df6d5a007b00d09c20795b5c4218234e1698a944757a488ecdc09965435d97ca32c3cfed7201ff30e070cd947f1fc12b9d9214c467d342bcba5d") (:digest-test #a"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" #h"ac2fb35251825d3aa48468a9948c0a91b8256f6d97d8fa4160faff2dd9dfcc24f3f1db7a983dad13d53439ccac0b37e24037e7b95f80f59f37a2f683c4ba4682") (:digest-test #a"The quick brown fox jumps over the lazy dog" #h"d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609") (:digest-test #a"The quick brown fox jumps over the lazy dog." #h"ab7192d2b11f51c7dd744e7b3441febf397ca07bf812cceae122ca4ded6387889064f8db9230f173f6d1ab6e24b6e50f065b039f799f5592360a6558eb52d760") ;;; tests vectors from ShortMsgKAT_512.txt in https://keccak.team/obsolete/KeccakKAT-3.zip (:digest-test #h"cc" #h"8630c13cbd066ea74bbe7fe468fec1dee10edc1254fb4c1b7c5fd69b646e44160b8ce01d05a0908ca790dfb080f4b513bc3b6225ece7a810371441a5ac666eb9") (:digest-test #h"41fb" #h"551da6236f8b96fce9f97f1190e901324f0b45e06dbbb5cdb8355d6ed1dc34b3f0eae7dcb68622ff232fa3cece0d4616cdeb3931f93803662a28df1cd535b731") (:digest-test #h"1f877c" #h"eb7f2a98e00af37d964f7d8c44c1fb6e114d8ee21a7b976ae736539efdc1e3fe43becef5015171e6da30168cae99a82c53fa99042774ef982c01626a540f08c0") (:digest-test #h"c1ecfdfc" #h"952d4c0a6f0ef5ce438c52e3edd345ea00f91cf5da8097c1168a16069e958fc05bad90a0c5fb4dd9ec28e84b226b94a847d6bb89235692ef4c9712f0c7030fae") (:digest-test #h"21f134ac57" #h"2e76d93affd62b92fc4f29cb83efbe4ba21d88426aa7f075bfc20960ea258787898172e17045af43ab1fe445532be0185fbea84d9be788b05f14dbf4856a5254") (:digest-test #h"c6f50bb74e29" #h"40fa8074e1e509b206448fbe757d9494b9b51e8d6e674a67f53c11ef92e96c3ea08b95ebd4172b020010cd6cf29539a34d6bfa002a2042787aa8d879a0f5b54c") (:digest-test #h"119713cc83eeef" #h"d1116786a3c1ea46a8f22d82abb4c5d06dc0691b2e747ac9726d0b290e6959f7b23428519a656b237695e56403855ec4c98db0cf87f31b6ceabf2b9b8589b713") (:digest-test #h"4a4f202484512526" #h"f326c7c126ddc277922760feef77c9bab6fb5d3430f652593703d7c5e30135cd0b0575257509a624184330d6ab1f508a666391b5d4690426b4e05301891df897") (:digest-test #h"1f66ab4185ed9b6375" #h"1f5b8a6e8d94f5e2535d46842b9ced467c39c2db323963d3f3d937e9dda76fbc17072dda2ab4771cd7a645145a2aec1b5749bf9efe0cde006cc3ef8936438e0d") (:digest-test #h"eed7422227613b6f53c9" #h"2aeee7a720c030a820cd7baa8570d72cb90b7a238c38c358676358a7ae9a5cf26635b2320d61c1284899e654f0bfdd0a3a9c343ffbd11838b57465e6c3ad3a57") (:digest-test #h"eaeed5cdffd89dece455f1" #h"7b1c1bef3b4deb4b4812c81a6e7b3f2c66fa95157fa3b9d2959dc56b8add100170d3c8d1745fd230a31f89fa17889c4c58946b5d746e47b71ed0394b66d1bdb2") (:digest-test #h"5be43c90f22902e4fe8ed2d3" #h"ee41401af509d6fc0944cd4a0bb29d2dce0dcc862606e669e31381e5d6cecb463143645d696d14e40169cdc71c75686d6e8732b432092626421cc6cc196f80bf") (:digest-test #h"a746273228122f381c3b46e4f1" #h"9b53b410b9f5dce90a77244db407a3d0f4898d112d0044a8f66af933e26666de63ebd2a4322d8fe525ab354ce9676b6a14d0ce6b3d24e6cd5832bea0c5153cef") (:digest-test #h"3c5871cd619c69a63b540eb5a625" #h"2b53fe6583fc24ee8a63801067e4d3bd6e6934ef16bc822fc3a69f4ee13a404d9a3ce2bb4a12c77382bfde4d843f87fd06ed8aecc234a3a24cedfe60bfc06933") (:digest-test #h"fa22874bcc068879e8ef11a69f0722" #h"80946ca68e8c16a9667cd8339d1c5b00f1e0d401d0ecc79458754794838f3ae2949a8cc5fe5584033bca9c5be62c7c08f402ef02f727cefa43bbd374c2a67c52") (:digest-test #h"52a608ab21ccdd8a4457a57ede782176" #h"4b39d3da5bcdf4d9b769015995644311c14c435bf72b1009d6dd71b01a63b97cfb596418e8e42342d117e07471a8914314ba7b0e264dadf0cea381868cbd43d1") (:digest-test #h"82e192e4043ddcd12ecf52969d0f807eed" #h"c37c9dc2e20d8e2f0ae588d7d45a807ccfa000fc948ac42a8ed63bb14f318fc3d4b963f7305980e6a0fd2316b55b63142373b1a29002264855c716c5c9f17f4c") (:digest-test #h"75683dcb556140c522543bb6e9098b21a21e" #h"9073c62555e6095f17df71ad02babb9100288633898489b21c906a3190875baeaccc83be80abd11466fec371ba2c4623d07f0131defaec13a8c732a9f8417163") (:digest-test #h"06e4efe45035e61faaf4287b4d8d1f12ca97e5" #h"23e9352856718e1e2d68a21d56d93117ced7628e984ff04ed8c0cb9b10539e4ede284f94fa71bf4b83bbb493435fd6be26eddb09deac39680e6b05acc87b8c4e") (:digest-test #h"e26193989d06568fe688e75540aea06747d9f851" #h"909d753426b1dee09fc474f18cf810d5d5aadbf8a09af495bf6c22aca0c673021bfc5d2ad94f50b24e1569e956694b21cf2cc8b4f3c7ee4cf195e4424cc415dd") (:digest-test #h"d8dc8fdefbdce9d44e4cbafe78447bae3b5436102a" #h"046c6019fc4d628ae0da7092f9910f269b853d3b57052039ad1375c665405f9fd79d57579f42c4fff249bb85ae65113a9f4276cede73e9ccb0c24753935a006e") (:digest-test #h"57085fd7e14216ab102d8317b0cb338a786d5fc32d8f" #h"51c909a6528949baddaf1ba0b154ea9c33fde5074359505b76d4b7ed54352dd893d40b142a5f802f378cba7b8c3782ecf2a048542be6c5936822214846a8d5e4") (:digest-test #h"a05404df5dbb57697e2c16fa29defac8ab3560d6126fa0" #h"efc8917e1247742a2d4ec29afeddf1e6ece377b3d8ac6e58c9851ce9c99bd599adebfed657baacd1793fc91b04df2957bf6f1888869286002dc4ad9ac7f76793") (:digest-test #h"aecbb02759f7433d6fcb06963c74061cd83b5b3ffa6f13c6" #h"fcef88bcc7ef70d8c3973429ac5139155f9ba643b431013f1817ecd2ff3ab287880f9ea54df7503cb3f73d7cf2b87d2e9bdbd203378fae74ca4bd2667a4aa706") (:digest-test #h"aafdc9243d3d4a096558a360cc27c8d862f0be73db5e88aa55" #h"470bdd8d709875c8e6f88591b97d6486c5f03b54bfc905757483e013f63a6c56984d4518d45c2d2298eadb44af3a0c35a76b573d452f5747844d3ad8f84a2e85") (:digest-test #h"7bc84867f6f9e9fdc3e1046cae3a52c77ed485860ee260e30b15" #h"429fd438b390ad0224028975467ec228f9adcde71e1738005e3717c58f727aa2b7c61780bf0c5f8b766cc6d34551d87d22a130b8c215614204e607aa82ff8469") (:digest-test #h"fac523575a99ec48279a7a459e98ff901918a475034327efb55843" #h"790a010aeb6f13e019a1dc35574b1219e74ff5db6fbd8746733664ffdbcfe1cc6e8ab39117e3244c4fa3c0a962c9f50030aef88e193e7e0d4c4747345f30cb54") (:digest-test #h"0f8b2d8fcfd9d68cffc17ccfb117709b53d26462a3f346fb7c79b85e" #h"aaf7a391600270f7b5a2a3bbc7474ac4154ebeac03a790a57fdad96cea2d043c9fa5f6916790b92f8032d668ed9a07112dc5b2373ec816aabca6f577ce60415e") (:digest-test #h"a963c3e895ff5a0be4824400518d81412f875fa50521e26e85eac90c04" #h"3e2880a974e50f98bd6cc0f9d769af348ce3b7e8fa38cf0ca2da5fd704c9c0e57d5500bea3cb7477927f9c394aa3f9bbc01824350291b9a0a0cbf094bb37da55") (:digest-test #h"03a18688b10cc0edf83adf0a84808a9718383c4070c6c4f295098699ac2c" #h"48e55e0340f20466881a732aa88459ad4bcdef364c3bd045ae099f953d89f15957aef204265c3915ba42fe4235196be3d0f564676227c3c0deacfbaf68f9e717") (:digest-test #h"84fb51b517df6c5accb5d022f8f28da09b10232d42320ffc32dbecc3835b29" #h"9d8098d8d6edbbaa2bcfc6fb2f89c3eac67fec25cdfe75aa7bd570a648e8c8945ff2ec280f6dcf73386109155c5bbc444c707bb42eab873f5f7476657b1bc1a8") (:digest-test #h"9f2fcc7c90de090d6b87cd7e9718c1ea6cb21118fc2d5de9f97e5db6ac1e9c10" #h"1eafedce7292ba73b80ae6151745f43ac95bfc9f31694d422473abca2e69d695cb6544db65506078cb20dbe0762f84aa6afd14a60ab597955be73f3f5c50f7a8") (:digest-test #h"de8f1b3faa4b7040ed4563c3b8e598253178e87e4d0df75e4ff2f2dedd5a0be046" #h"9a7688e31aaf40c15575fc58c6b39267aad3722e696e518a9945cf7f7c0fea84cb3cb2e9f0384a6b5dc671ade7fb4d2b27011173f3eeeaf17cb451cf26542031") (:digest-test #h"62f154ec394d0bc757d045c798c8b87a00e0655d0481a7d2d9fb58d93aedc676b5a0" #h"ada5ca5630660003c4d16149f235faeb78132f7f773a631f820cc5c654b08eab4206bb4ea1389d1cf74d3b60b86e484c90c817cdb5dd5dbf327163b4646f7213") (:digest-test #h"b2dcfe9ff19e2b23ce7da2a4207d3e5ec7c6112a8a22aec9675a886378e14e5bfbad4e" #h"71a0801d32587980b09963a0f547b8b6ee3bade224671bf44f12e3da4f21778bac37fcc73ef45fee1c96688baf9020f487b1a16e3ac91b504845d6fba879134f") (:digest-test #h"47f5697ac8c31409c0868827347a613a3562041c633cf1f1f86865a576e02835ed2c2492" #h"eba678b7a0e5669dc7fa5eca5d5f19fe625e113e5028da5efb138923cd444757b06078e0ba064b36c72ca2187ab9dd31dda6f24668f46c32f8ec21ac59aafa24") (:digest-test #h"512a6d292e67ecb2fe486bfe92660953a75484ff4c4f2eca2b0af0edcdd4339c6b2ee4e542" #h"12df92d889d7ba0df05bcd02d9de58c97f4813126967ff78bdf759c66c4cbe9df68ab31a0256c776730bb25deecf91f0997868ac8bb86df7a0fc110cb0a4de5d") (:digest-test #h"973cf2b4dcf0bfa872b41194cb05bb4e16760a1840d8343301802576197ec19e2a1493d8f4fb" #h"b8c7ce2be4cb32c140e75b75474248c1dd77d19b0cbca31a3ecc2a35c532e4fa3ed4abbcda27aa68a9dda06b245443e5903a65652a94ed3af15065d3e7736e47") (:digest-test #h"80beebcd2e3f8a9451d4499961c9731ae667cdc24ea020ce3b9aa4bbc0a7f79e30a934467da4b0" #h"a0ae9dfb56831fe4a3223c501b697bd8243c471e8343acfd37a6b587feac74571c23deebc9b94a540a02f1b1e2251e01229c9d58c4279f155d5566fb18e81295") (:digest-test #h"7abaa12ec2a7347674e444140ae0fb659d08e1c66decd8d6eae925fa451d65f3c0308e29446b8ed3" #h"631e7847124a70fe6eb293a44a25c50600b5e7e975ca9fab5ae64ab86c7e42c912dd6ec093f01a8debc6e1f5e487af97dc3fd6c53002765050be963ffcd4d989") (:digest-test #h"c88dee9927679b8af422abcbacf283b904ff31e1cac58c7819809f65d5807d46723b20f67ba610c2b7" #h"b989263bb4e0424f95fdc9a49c83a3769fbf31dcedda7e005ab5f22f43d2718debd39085971f7eb7822c9fa0f67f776cec4e35a9a8b8c835ef4e9ebda1922e4d") (:digest-test #h"01e43fe350fcec450ec9b102053e6b5d56e09896e0ddd9074fe138e6038210270c834ce6eadc2bb86bf6" #h"ff6adcb9e1546798d396db78452df1a375b65ee3d54fcc915a8ca3da693e24931999b0fc8a4eb92f6ff85e42bb4cfd9ce7d7863eee709c9ef37642b696174474") (:digest-test #h"337023370a48b62ee43546f17c4ef2bf8d7ecd1d49f90bab604b839c2e6e5bd21540d29ba27ab8e309a4b7" #h"1051b7ff77274b784e7fb7823e756f0c4355047e489775bbedaa7ce5a75efac331492c016ce02eb2be8ba2fe6b735b9a1484e73ac06de573c5d0b4a58822a36a") (:digest-test #h"6892540f964c8c74bd2db02c0ad884510cb38afd4438af31fc912756f3efec6b32b58ebc38fc2a6b913596a8" #h"5639a2824297ca099ecf2a81eef1753f6314cb663d860f05a39e3e801ff82060bba10628e2c0d9e0a84dd05ed637fc0b65ba03bb66e46fb256f2a5b28d3f41d2") (:digest-test #h"f5961dfd2b1ffffda4ffbf30560c165bfedab8ce0be525845deb8dc61004b7db38467205f5dcfb34a2acfe96c0" #h"97f9d642507e6dd179d56f4b815e92d0d486826f273ec711b8f9cb76afc79f900816fdbc13dd3a59fbecba1f3b6953f879f27c8987b24c6ff8557a2c834076b9") (:digest-test #h"ca061a2eb6ceed8881ce2057172d869d73a1951e63d57261384b80ceb5451e77b06cf0f5a0ea15ca907ee1c27eba" #h"afef2af5a01b89be190a0e6e796aa51f1f8c356772c6fc7731f08aab8bd81aee1287c70d564f4f169e37b07f28202a85f468281b4cdc1273cf61eb30e3bdcee1") (:digest-test #h"1743a77251d69242750c4f1140532cd3c33f9b5ccdf7514e8584d4a5f9fbd730bcf84d0d4726364b9bf95ab251d9bb" #h"f467cca67c387ffc9f1b173a084c451095d01ad0bf3953ac103a76f0f1bc86167305a926a941a53417f1611a505aaa205bcfccbfd343465dad8a6c1e80609a9d") (:digest-test #h"d8faba1f5194c4db5f176fabfff856924ef627a37cd08cf55608bba8f1e324d7c7f157298eabc4dce7d89ce5162499f9" #h"4b389a2a0df5e295ea9444f2739b5492f290c4467b0b4cdc1cc9ed2cefa7a9e527e0627cdaf0bda58f17d13f94af7d2deff6fc5d53dd9157674475527fbb4f86") (:digest-test #h"be9684be70340860373c9c482ba517e899fc81baaa12e5c6d7727975d1d41ba8bef788cdb5cf4606c9c1c7f61aed59f97d" #h"6590fffb7311ab7dab370fb518ccc19baa9af7c84179adb002f8facd3c44af2830a84df1e2c2402368cc36614a6ea22903063e57d00ec511a46a9a03fe3819f7") (:digest-test #h"7e15d2b9ea74ca60f66c8dfab377d9198b7b16deb6a1ba0ea3c7ee2042f89d3786e779cf053c77785aa9e692f821f14a7f51" #h"895796b2a0824c55f030d82e794925c38d8459f38cf848519f120ff6a9d5a03ebf006c3ea5021e8f3b3408ff12f01bcddf7a085ba0a9a58944fec1f554836df8") (:digest-test #h"9a219be43713bd578015e9fda66c0f2d83cac563b776ab9f38f3e4f7ef229cb443304fba401efb2bdbd7ece939102298651c86" #h"e4bbd54bfb99d345471f8ab94271b4b748f5ce70c21c28ae6559e03ee7890a2c814043e624a6bd2944350756b37fa8208fc7473a67b310ceebc17d965ed688b2") (:digest-test #h"c8f2b693bd0d75ef99caebdc22adf4088a95a3542f637203e283bbc3268780e787d68d28cc3897452f6a22aa8573ccebf245972a" #h"80d862ad05428a299213e65b50310463fd22c505e693dd4719e0a120eeaa35c5fc1608a08d22e2ccddeca49878bc26abe55a3c9a546347439a942ed0c1a6a23e") (:digest-test #h"ec0f99711016c6a2a07ad80d16427506ce6f441059fd269442baaa28c6ca037b22eeac49d5d894c0bf66219f2c08e9d0e8ab21de52" #h"021b3b392deccb9075559f88c0c229026a2048cef8eeb2d4f94803dcf2da0a73e004d7f14e9fd662670b59229ab3883c340f4e3a8c42624ccb90bec1156f95d4") (:digest-test #h"0dc45181337ca32a8222fe7a3bf42fc9f89744259cff653504d6051fe84b1a7ffd20cb47d4696ce212a686bb9be9a8ab1c697b6d6a33" #h"97bf33a5254c8aca27486428440b1034aaafac8b498ecb830c2581dc68518079b65fb0c595997693ddb8d68d9564ea98dc43cd287e2e018db7dfaaaa205c547a") (:digest-test #h"de286ba4206e8b005714f80fb1cdfaebde91d29f84603e4a3ebc04686f99a46c9e880b96c574825582e8812a26e5a857ffc6579f63742f" #h"c05fd9c3fa73f80956ff1c3b89160eb520ca640e201b3fe5e6e296220e81b59d530476010d3784ca08692b8c716a3be982b37450a96d30a401d3ba3c390d9de3") (:digest-test #h"eebcc18057252cbf3f9c070f1a73213356d5d4bc19ac2a411ec8cdeee7a571e2e20eaf61fd0c33a0ffeb297ddb77a97f0a415347db66bcaf" #h"b980e657c13726dbadb6570ea3a9e633869cadb798eb35c482697a04cb712f1c1e8c5d0bd67e43e52da294e82d5e80a695a74a3d27c0c672adcfe2c928859a6d") (:digest-test #h"416b5cdc9fe951bd361bd7abfc120a5054758eba88fdd68fd84e39d3b09ac25497d36b43cbe7b85a6a3cebda8db4e5549c3ee51bb6fcb6ac1e" #h"6adfc561835fddd70a9feb57c513165d12aeb3283f0dd7774dd58852da9e969abdaf20dd44856fa60e11bdfa2dbb7e3347669fff7a57a8d8d37431c2b309972d") (:digest-test #h"5c5faf66f32e0f8311c32e8da8284a4ed60891a5a7e50fb2956b3cbaa79fc66ca376460e100415401fc2b8518c64502f187ea14bfc9503759705" #h"0e7459bdc857b949cc59a9c649b9625268bf9a11ea81eeefa4ecdd410e2f6fd2c78289c01365f99034ff8fa8c115ddcebefa26a8d6468f5030e641745950061e") (:digest-test #h"7167e1e02be1a7ca69d788666f823ae4eef39271f3c26a5cf7cee05bca83161066dc2e217b330df821103799df6d74810eed363adc4ab99f36046a" #h"2a8ce9df40879b24dadf61c9131f694e5531ade6b7ab071ca10abdd3c2e4a22c868a52986a329f880137ee76109770927d2658e63eb486d880290ac0782cf5bf") (:digest-test #h"2fda311dbba27321c5329510fae6948f03210b76d43e7448d1689a063877b6d14c4f6d0eaa96c150051371f7dd8a4119f7da5c483cc3e6723c01fb7d" #h"a83ce5a6a58376d57db4c58da1b46c131ff1bf8ff2de5e8617fb37e5098398edb53f9888b8752a8aff19178f2f6bd7a33fd36c59e4a631906280907fc1c5ab07") (:digest-test #h"95d1474a5aab5d2422aca6e481187833a6212bd2d0f91451a67dd786dfc91dfed51b35f47e1deb8a8ab4b9cb67b70179cc26f553ae7b569969ce151b8d" #h"9ebfcea2db1676eee6b103119543c6049debd8fb8f1e01a5ab5b348e2919e14c8cfe8e542f2ab747b0fd4a4c3eee4019bb046e24bfe2091fb9c65dca527b71ad") (:digest-test #h"c71bd7941f41df044a2927a8ff55b4b467c33d089f0988aa253d294addbdb32530c0d4208b10d9959823f0c0f0734684006df79f7099870f6bf53211a88d" #h"97b08be7653e9df1b5afa459ea750a3ac9bf3577bcc7e5344fc861184880926def354e4c65b20ec66c47b7affd3e7493958bab0a90724d3d8dd9e1d561fa60c2") (:digest-test #h"f57c64006d9ea761892e145c99df1b24640883da79d9ed5262859dcda8c3c32e05b03d984f1ab4a230242ab6b78d368dc5aaa1e6d3498d53371e84b0c1d4ba" #h"ef8aaf08159bbcb88efac49a33a5248b7ed0544960d8dd54d748a91c0d84c69f308bb54cb5ec97d3f81cdf76e68e0320815b93f2a00942f2168cbc18e8377708") (:digest-test #h"e926ae8b0af6e53176dbffcc2a6b88c6bd765f939d3d178a9bde9ef3aa131c61e31c1e42cdfaf4b4dcde579a37e150efbef5555b4c1cb40439d835a724e2fae7" #h"c0a4d8dca967772dbf6e5508c913e7beba1b749a2b1ac963d0676e6f1dcd4ebaa3f909ef87dd849882dc8253347a5f6520b5b9f510973f443976455f923cfcb9") (:digest-test #h"16e8b3d8f988e9bb04de9c96f2627811c973ce4a5296b4772ca3eefeb80a652bdf21f50df79f32db23f9f73d393b2d57d9a0297f7a2f2e79cfda39fa393df1ac00" #h"cf03c946eb7022f60fb5439462ac22684e47eaacbffe19b797760b4a24a5238be9d90e17d40ea6fe7b2885cef7dfb8bb489401caa94f2dd6e04592e33e76b9d1") (:digest-test #h"fc424eeb27c18a11c01f39c555d8b78a805b88dba1dc2a42ed5e2c0ec737ff68b2456d80eb85e11714fa3f8eabfb906d3c17964cb4f5e76b29c1765db03d91be37fc" #h"2c35f1a57a17cb29403a2b40fc307bde10ba8f7fec7b94e1e42eb4eeb952aad00ec46a26646cd51db0c6b238189d7d470e21c29bf8710423cb5602cab75e29e7") (:digest-test #h"abe3472b54e72734bdba7d9158736464251c4f21b33fbbc92d7fac9a35c4e3322ff01d2380cbaa4ef8fb07d21a2128b7b9f5b6d9f34e13f39c7ffc2e72e47888599ba5" #h"505e6e607c90c57bbe7ce52bb42df3d90bc32de554025730c84ed0f89a0132885d7a40fadff7a4b01de4d29735aefe0e0469f4f172b62a0daba889e152308fc4") (:digest-test #h"36f9f0a65f2ca498d739b944d6eff3da5ebba57e7d9c41598a2b0e4380f3cf4b479ec2348d015ffe6256273511154afcf3b4b4bf09d6c4744fdd0f62d75079d440706b05" #h"7be2c95413c589ec5ad69f8d80bfe9f26540d5c1832c7a49a31a8f5655d9ce8b47d97c69cccd693c211904142a5403da7ad09fbdb825698fe201988fcccd2bb2") (:digest-test #h"abc87763cae1ca98bd8c5b82caba54ac83286f87e9610128ae4de68ac95df5e329c360717bd349f26b872528492ca7c94c2c1e1ef56b74dbb65c2ac351981fdb31d06c77a4" #h"8aac9201d76df13424a32552f04390e499b6168711b70c875789ddaa9b115f8b8259a60d17835e2587f8901c3ca782da9afb28ba87b9fcbe05a47a42f48fcd48") (:digest-test #h"94f7ca8e1a54234c6d53cc734bb3d3150c8ba8c5f880eab8d25fed13793a9701ebe320509286fd8e422e931d99c98da4df7e70ae447bab8cffd92382d8a77760a259fc4fbd72" #h"aa52587d84586317028fb7d3c20892e0288bfe2feabd76d7f89155ffe9ccbf1a09fa0ffb0553e83f79ae58bd30a35fa54892b6aba0093a012427ddab71cdf819") (:digest-test #h"13bd2811f6ed2b6f04ff3895aceed7bef8dcd45eb121791bc194a0f806206bffc3b9281c2b308b1a729ce008119dd3066e9378acdcc50a98a82e20738800b6cddbe5fe9694ad6d" #h"48fc282f37a3e1fb5df4d2da1f7197ec899ae573ca08df550e61ee847eeb1d24c074ff46bcaee224ec7d8cea4256154f0c4d434e682834f6d827bfbdf75112f5") (:digest-test #h"1eed9cba179a009ec2ec5508773dd305477ca117e6d569e66b5f64c6bc64801ce25a8424ce4a26d575b8a6fb10ead3fd1992edddeec2ebe7150dc98f63adc3237ef57b91397aa8a7" #h"6b4b0f126863552a6f40f45e295dc79b9ba2a88ea7c3b2f607ac1a8431a97844c2a7b664443fb23c05739df5494fe9824db80b7f3e67872142f17e2c5544e1ef") (:digest-test #h"ba5b67b5ec3a3ffae2c19dd8176a2ef75c0cd903725d45c9cb7009a900c0b0ca7a2967a95ae68269a6dbf8466c7b6844a1d608ac661f7eff00538e323db5f2c644b78b2d48de1a08aa" #h"7eec7b730056b1bd4f6ffc186fb45591e50cd93cf6e4fc958889f82d3f32c5c74d03a4bcf7d2754298f134698af4559b0e29baaa365cc00db0d51d407179c56d") (:digest-test #h"0efa26ac5673167dcacab860932ed612f65ff49b80fa9ae65465e5542cb62075df1c5ae54fba4db807be25b070033efa223bdd5b1d3c94c6e1909c02b620d4b1b3a6c9fed24d70749604" #h"79cb925aca072ebb3b49a9d0e59bb07dd1c223c1f26c91768b929472c51b977f85c6ceeb54bce89cf9ff6155d7fe8091540f1348ce9592a6403f92105477870e") (:digest-test #h"bbfd933d1fd7bf594ac7f435277dc17d8d5a5b8e4d13d96d2f64e771abbd51a5a8aea741beccbddb177bcea05243ebd003cfdeae877cca4da94605b67691919d8b033f77d384ca01593c1b" #h"b5d1ed8f039044bcfef41e99b2f564f45991b329b503fc91fa29d2408512f8711e9db66f8ae172164650545ae9e3db32aa369ec47e81a77111276e6ca38e4d92") (:digest-test #h"90078999fd3c35b8afbf4066cbde335891365f0fc75c1286cdd88fa51fab94f9b8def7c9ac582a5dbcd95817afb7d1b48f63704e19c2baa4df347f48d4a6d603013c23f1e9611d595ebac37c" #h"782c008a9ee3dda0a182267185c995a2af737ba8cb2f6179f2cdf52505f8d933e712fc4e56d10e175ec8cdd62de6529ce1f078bfa0dc7a5284f8c565182f85d9") (:digest-test #h"64105eca863515c20e7cfbaa0a0b8809046164f374d691cdbd6508aaabc1819f9ac84b52bafc1b0fe7cddbc554b608c01c8904c669d8db316a0953a4c68ece324ec5a49ffdb59a1bd6a292aa0e" #h"91a0241eda8ca597cbb0f703ab7dbaaf859cff77b20401ad46230ce3b2beef6685775de37576014d8da1ba672d47aad95fb53c590b650634cebb43a175738569") (:digest-test #h"d4654be288b9f3b711c2d02015978a8cc57471d5680a092aa534f7372c71ceaab725a383c4fcf4d8deaa57fca3ce056f312961eccf9b86f14981ba5bed6ab5b4498e1f6c82c6cae6fc14845b3c8a" #h"00b02dbcb7a3bc117701f2f159fc4492923c437d3369833a9bd09e78e260d48d37168d36c49777b2e68e6fe9846106a6ab8768c3971fab31fd922aacb87d1cac") (:digest-test #h"12d9394888305ac96e65f2bf0e1b18c29c90fe9d714dd59f651f52b88b3008c588435548066ea2fc4c101118c91f32556224a540de6efddbca296ef1fb00341f5b01fecfc146bdb251b3bdad556cd2" #h"3dedf819b357dfab1c7092abd872a1554dd0962e9944eef9f7f8bce830f2d74f1d9ba2b748bbc6ee0b7600be8cb0ffcb79924d9f51cdb9b06bd6fd37f3050229") (:digest-test #h"871a0d7a5f36c3da1dfce57acd8ab8487c274fad336bc137ebd6ff4658b547c1dcfab65f037aa58f35ef16aff4abe77ba61f65826f7be681b5b6d5a1ea8085e2ae9cd5cf0991878a311b549a6d6af230" #h"5fbe194557b0426f96ba60712176df073eafe04f2a50515455412ea3d80c116758ad952598f48031612181d82a16efe4668ffb3bcce9563a772fe416ff6db3b3") (:digest-test #h"e90b4ffef4d457bc7711ff4aa72231ca25af6b2e206f8bf859d8758b89a7cd36105db2538d06da83bad5f663ba11a5f6f61f236fd5f8d53c5e89f183a3cec615b50c7c681e773d109ff7491b5cc22296c5" #h"2e8ab1619859c11473dc7c474ce8b0ae44b1c38417816fd95b9e0614f31e51ebb1dd16d1cbb584c4ebd28aa99f4a68e09dfe3ad462487f2608124b7528293045") (:digest-test #h"e728de62d75856500c4c77a428612cd804f30c3f10d36fb219c5ca0aa30726ab190e5f3f279e0733d77e7267c17be27d21650a9a4d1e32f649627638dbada9702c7ca303269ed14014b2f3cf8b894eac8554" #h"db2d182bdbac6ac866537e24712332cae74dc3d36168982e4453dd6e009658345255013bc0a54fca17aeedcc4beb79bdee192cfab516d24591c8699f7c758179") (:digest-test #h"6348f229e7b1df3b770c77544e5166e081850fa1c6c88169db74c76e42eb983facb276ad6a0d1fa7b50d3e3b6fcd799ec97470920a7abed47d288ff883e24ca21c7f8016b93bb9b9e078bdb9703d2b781b616e" #h"90a2c05f7001d985b587a046b488bf4ed29d75cc03a745731b5b0ce51bb86387c4ce34018a6d906eb7beb41a09afe9fedd99aacc41b4556f75229c8688c7fca2") (:digest-test #h"4b127fde5de733a1680c2790363627e63ac8a3f1b4707d982caea258655d9bf18f89afe54127482ba01e08845594b671306a025c9a5c5b6f93b0a39522dc877437be5c2436cbf300ce7ab6747934fcfc30aeaaf6" #h"ea3991c4a8a5f0146402de4ae235054c78a48dca340a7d4ad8753995f82347ecfc0054d64eb4f20abc4f415c54701cbc61a7b239a7c221b833d9ea9f94b154e8") (:digest-test #h"08461f006cff4cc64b752c957287e5a0faabc05c9bff89d23fd902d324c79903b48fcb8f8f4b01f3e4ddb483593d25f000386698f5ade7faade9615fdc50d32785ea51d49894e45baa3dc707e224688c6408b68b11" #h"1313023b753ed1727f13cc67a64b989a8bf6548324df9854d8d5a963ed3d860257fe6522b9c6d6cb1bcadf322c985601ba36f7e67110192094aa8f9869a458a8") (:digest-test #h"68c8f8849b120e6e0c9969a5866af591a829b92f33cd9a4a3196957a148c49138e1e2f5c7619a6d5edebe995acd81ec8bb9c7b9cfca678d081ea9e25a75d39db04e18d475920ce828b94e72241f24db72546b352a0e4" #h"9bca2a1a5546a11275bf42f0b48492868359c78d94785a0ee12dc1c3d70a8e97eb462148faed1ffa4dab0e91519bd36c0c5c5fe7cfcff3e180680318e1fcf75b") (:digest-test #h"b8d56472954e31fb54e28fca743f84d8dc34891cb564c64b08f7b71636debd64ca1edbdba7fc5c3e40049ce982bba8c7e0703034e331384695e9de76b5104f2fbc4535ecbeebc33bc27f29f18f6f27e8023b0fbb6f563c" #h"8492f5e621e82fdbff1976b1beecff7d137805b5736ab49216122a95396b863a0481212b6daba8b05e29e287bb0e2f588f86407c84dbfb894e6acfc6f6b2e571") (:digest-test #h"0d58ac665fa84342e60cefee31b1a4eacdb092f122dfc68309077aed1f3e528f578859ee9e4cefb4a728e946324927b675cd4f4ac84f64db3dacfe850c1dd18744c74ceccd9fe4dc214085108f404eab6d8f452b5442a47d" #h"eebe4ec0fe3e0266527f4d9f57a017637eab92377d82b15856a55a22b008df67f27aa5ac04e1deeeb2c819ce41db07dbf6dcaf17a192a4371a1e92badf1e6389") (:digest-test #h"1755e2d2e5d1c1b0156456b539753ff416651d44698e87002dcf61dcfa2b4e72f264d9ad591df1fdee7b41b2eb00283c5aebb3411323b672eaa145c5125185104f20f335804b02325b6dea65603f349f4d5d8b782dd3469ccd" #h"9e36e6291bc2296cb4ba71109cedcc2a3f0b4f1ae5e5406dc4b3e594551d5c70e6f814d2c9b8413103ef07535886b4ac518aaf7aed64abed7a5b0a26f7171425") (:digest-test #h"b180de1a611111ee7584ba2c4b020598cd574ac77e404e853d15a101c6f5a2e5c801d7d85dc95286a1804c870bb9f00fd4dcb03aa8328275158819dcad7253f3e3d237aeaa7979268a5db1c6ce08a9ec7c2579783c8afc1f91a7" #h"f1089483a00b2601be9c16469a090efc49fcb70e62ac0ffea2d1e508083cd5d41dcf2daae1e0eac217859e5feaddcb782ac471c01d7266136185d37b568e9606") (:digest-test #h"cf3583cbdfd4cbc17063b1e7d90b02f0e6e2ee05f99d77e24e560392535e47e05077157f96813544a17046914f9efb64762a23cf7a49fe52a0a4c01c630cfe8727b81fb99a89ff7cc11dca5173057e0417b8fe7a9efba6d95c555f" #h"d063ea794cfd2ed9248665a6084a7b99051c1051e41b7d9dcb1537a1c79cba6deb4d844c6a618e43c7ca020d16976999684feb084616f707209f75c4bd584d86") (:digest-test #h"072fc02340ef99115bad72f92c01e4c093b9599f6cfc45cb380ee686cb5eb019e806ab9bd55e634ab10aa62a9510cc0672cd3eddb589c7df2b67fcd3329f61b1a4441eca87a33c8f55da4fbbad5cf2b2527b8e983bb31a2fadec7523" #h"424a86d746c87c85dabd1dae298a488e4ca2183de692d1d01c4b7994ee5124f9004bea84933c311cc38ea6f604a7769ee178e1ec160a9891c42c462a13a62286") (:digest-test #h"76eecf956a52649f877528146de33df249cd800e21830f65e90f0f25ca9d6540fde40603230eca6760f1139c7f268deba2060631eea92b1fff05f93fd5572fbe29579ecd48bc3a8d6c2eb4a6b26e38d6c5fbf2c08044aeea470a8f2f26" #h"a9403c26a96de2c3d359ee29f3fd1c581154852d19ad12884b79e7082d2da22ec83553baba2bdff2a2fa15947a8e6acd5f5d113ec091bfd1962a0a10401d2c98") (:digest-test #h"7adc0b6693e61c269f278e6944a5a2d8300981e40022f839ac644387bfac9086650085c2cdc585fea47b9d2e52d65a2b29a7dc370401ef5d60dd0d21f9e2b90fae919319b14b8c5565b0423cefb827d5f1203302a9d01523498a4db10374" #h"3d23632ee4c2d4f4118a02a677b5a32427c72ba54899ba2e6ccd22ec3defe0fcb052e3f83d35786cea2080eed148a0a94628e735202e6b2809994c5f5bdafdd6") (:digest-test #h"e1fffa9826cce8b86bccefb8794e48c46cdf372013f782eced1e378269b7be2b7bf51374092261ae120e822be685f2e7a83664bcfbe38fe8633f24e633ffe1988e1bc5acf59a587079a57a910bda60060e85b5f5b6f776f0529639d9cce4bd" #h"d8fa886884ce577a7282deceacf4786e7c68fc69b141137ff5dc7cb3c5f8abc845716dd27397e8bd5ce245107a984a3f8b21f19f99ed40118621dc85303a30b4") (:digest-test #h"69f9abba65592ee01db4dce52dbab90b08fc04193602792ee4daa263033d59081587b09bbe49d0b49c9825d22840b2ff5d9c5155f975f8f2c2e7a90c75d2e4a8040fe39f63bbafb403d9e28cc3b86e04e394a9c9e8065bd3c85fa9f0c7891600" #h"c768cd313602fabb2193f9edbf667b4cdabd57d5ff60bdc22ba7bad5319ea04e7cbec5d4b4c4560ad52609fdd22750b618951796376ed41b2a8eaffdd9927722") (:digest-test #h"38a10a352ca5aedfa8e19c64787d8e9c3a75dbf3b8674bfab29b5dbfc15a63d10fae66cd1a6e6d2452d557967eaad89a4c98449787b0b3164ca5b717a93f24eb0b506ceb70cbbcb8d72b2a72993f909aad92f044e0b5a2c9ac9cb16a0ca2f81f49" #h"8562ce9399806623b2695712266af3d4c14f77d2449143379246962c22398c813544a7dee4c4847f09d3cbe437349b7fc6738ac97075b5dd9e2add6ecaa610f4") (:digest-test #h"6d8c6e449bc13634f115749c248c17cd148b72157a2c37bf8969ea83b4d6ba8c0ee2711c28ee11495f43049596520ce436004b026b6c1f7292b9c436b055cbb72d530d860d1276a1502a5140e3c3f54a93663e4d20edec32d284e25564f624955b52" #h"99ade7b13e8e79aea6ed01a25e10e401cd1d055884575eab3e66b2294f03f8d5dbf72ab1ae39103189383ebfd2e43258510c124a894a793b206fac752c035789") (:digest-test #h"6efcbcaf451c129dbe00b9cef0c3749d3ee9d41c7bd500ade40cdc65dedbbbadb885a5b14b32a0c0d087825201e303288a733842fa7e599c0c514e078f05c821c7a4498b01c40032e9f1872a1c925fa17ce253e8935e4c3c71282242cb716b2089ccc1" #h"d12831ba39dbcd41f56bc7fc071bdaabfb6e7572d08b2fda3bddfc6fa5662f4bdbfa431ca2e38b18172709072e50120db6be93e86cb4ace3c11dd0e1f3f5c712") (:digest-test #h"433c5303131624c0021d868a30825475e8d0bd3052a022180398f4ca4423b98214b6beaac21c8807a2c33f8c93bd42b092cc1b06cedf3224d5ed1ec29784444f22e08a55aa58542b524b02cd3d5d5f6907afe71c5d7462224a3f9d9e53e7e0846dcbb4ce" #h"527d28e341e6b14f4684adb4b824c496c6482e51149565d3d17226828884306b51d6148a72622c2b75f5d3510b799d8bdc03eaede453676a6ec8fe03a1ad0eab") (:digest-test #h"a873e0c67ca639026b6683008f7aa6324d4979550e9bce064ca1e1fb97a30b147a24f3f666c0a72d71348ede701cf2d17e2253c34d1ec3b647dbcef2f879f4eb881c4830b791378c901eb725ea5c172316c6d606e0af7df4df7f76e490cd30b2badf45685f" #h"cacdcf8bf855040e9795c422069d8e37b6286066a2197a320bd934061f66995227be6b85fd928b834d3ca45e1ac3844d9dc66d61581e7799ccfde008639ab3dd") (:digest-test #h"006917b64f9dcdf1d2d87c8a6173b64f6587168e80faa80f82d84f60301e561e312d9fbce62f39a6fb476e01e925f26bcc91de621449be6504c504830aae394096c8fc7694651051365d4ee9070101ec9b68086f2ea8f8ab7b811ea8ad934d5c9b62c60a4771" #h"f454a953501e191a12a80c7a5398f081cef738e25d48b076a52f77fb09ef0bc2325116020bb06c2c585da9f115bd9d8f13b50e8e1fb1664450fae690b7783400") (:digest-test #h"f13c972c52cb3cc4a4df28c97f2df11ce089b815466be88863243eb318c2adb1a417cb1041308598541720197b9b1cb5ba2318bd5574d1df2174af14884149ba9b2f446d609df240ce335599957b8ec80876d9a085ae084907bc5961b20bf5f6ca58d5dab38adb" #h"5f968cc6ecf71c588a3c3ba68858bbff96861f66c0733fd61fa91a479a49618df22d9490219df8008dc78840ae022c5d41af2b890d0214e562da8df0cb3f8522") (:digest-test #h"e35780eb9799ad4c77535d4ddb683cf33ef367715327cf4c4a58ed9cbdcdd486f669f80189d549a9364fa82a51a52654ec721bb3aab95dceb4a86a6afa93826db923517e928f33e3fba850d45660ef83b9876accafa2a9987a254b137c6e140a21691e1069413848" #h"e7149461f9cd00b71c216c50041b3eda9707d7360d4c21740c44c212256a31da398fe09708e450ea4e2826b7ec20bef76cd2fbd9d096af6f77f84abc2e4fb093") (:digest-test #h"64ec021c9585e01ffe6d31bb50d44c79b6993d72678163db474947a053674619d158016adb243f5c8d50aa92f50ab36e579ff2dabb780a2b529370daa299207cfbcdd3a9a25006d19c4f1fe33e4b1eaec315d8c6ee1e730623fd1941875b924eb57d6d0c2edc4e78d6" #h"77097413caa5a2d38259d47ec078871fa09ee5614d4c14feb7a95c921c0aae93b8737a6dc89e57693be8a0710206664b80b657a1079605a0ff9664bbcb0722d6") (:digest-test #h"5954bab512cf327d66b5d9f296180080402624ad7628506b555eea8382562324cf452fba4a2130de3e165d11831a270d9cb97ce8c2d32a96f50d71600bb4ca268cf98e90d6496b0a6619a5a8c63db6d8a0634dfc6c7ec8ea9c006b6c456f1b20cd19e781af20454ac880" #h"55d8e5202360d7d5841419362f864cc900e11c582fd0cab2ff5f1680f6ce927b5379e27a335ebafe1286b9d4a172ab761a36eade60f10468eac4ceafbf63c7cc") (:digest-test #h"03d9f92b2c565709a568724a0aff90f8f347f43b02338f94a03ed32e6f33666ff5802da4c81bdce0d0e86c04afd4edc2fc8b4141c2975b6f07639b1994c973d9a9afce3d9d365862003498513bfa166d2629e314d97441667b007414e739d7febf0fe3c32c17aa188a8683" #h"effb03b497add6230a0ed99122ea868138644ab81e861491e526fae37c39872ca731804a0004599849478a787bc7fce21903ed551d7db881d2a2c367b6168547") (:digest-test #h"f31e8b4f9e0621d531d22a380be5d9abd56faec53cbd39b1fab230ea67184440e5b1d15457bd25f56204fa917fa48e669016cb48c1ffc1e1e45274b3b47379e00a43843cf8601a5551411ec12503e5aac43d8676a1b2297ec7a0800dbfee04292e937f21c005f17411473041" #h"a2269a6ef2ea8f1cf8bc3394d27657b0db996c55e7c47784c0b451202fc5279679d79e06f8dbaa9a63665fd0e914d13c6e056ea006daaf4cb61d2629468e3d25") (:digest-test #h"758ea3fea738973db0b8be7e599bbef4519373d6e6dcd7195ea885fc991d896762992759c2a09002912fb08e0cb5b76f49162aeb8cf87b172cf3ad190253df612f77b1f0c532e3b5fc99c2d31f8f65011695a087a35ee4eee5e334c369d8ee5d29f695815d866da99df3f79403" #h"5a2970d5ec346a8e4e1d5d1e57dc22f6875ddf1ce3626b49a91109e0de991033e932f883b6a795016d5014e268304abe2f7577505aab00956911781f075d113a") (:digest-test #h"47c6e0c2b74948465921868804f0f7bd50dd323583dc784f998a93cd1ca4c6ef84d41dc81c2c40f34b5bee6a93867b3bdba0052c5f59e6f3657918c382e771d33109122cc8bb0e1e53c4e3d13b43ce44970f5e0c079d2ad7d7a3549cd75760c21bb15b447589e86e8d76b1e9ced2" #h"2b4356a64df31936b27f4530f076ee73e71e4e48abde04ff1f548e0727f4a5810b71874187fd96ed510d0d6886af11960a0b3bad1ee75dda4cdc148e162edae9") (:digest-test #h"f690a132ab46b28edfa6479283d6444e371c6459108afd9c35dbd235e0b6b6ff4c4ea58e7554bd002460433b2164ca51e868f7947d7d7a0d792e4abf0be5f450853cc40d85485b2b8857ea31b5ea6e4ccfa2f3a7ef3380066d7d8979fdac618aad3d7e886dea4f005ae4ad05e5065f" #h"edcb59984267bb00402a78f2ca345ef2494956172e10927ee63aff23d0c834bca50c47cdbffd8995036307e9ed4b143e853450367d0e14afc8490073653cd850") (:digest-test #h"58d6a99bc6458824b256916770a8417040721cccfd4b79eacd8b65a3767ce5ba7e74104c985ac56b8cc9aebd16febd4cda5adb130b0ff2329cc8d611eb14dac268a2f9e633c99de33997fea41c52a7c5e1317d5b5daed35eba7d5a60e45d1fa7eaabc35f5c2b0a0f2379231953322c4e" #h"d0b453fbe709c69125dc8fe9e8ae9245211612970373b454f8656a755e8435b321dd3a980fa28719641747e254dc42c9bf012b4d6dbd7ed13020a83b44c504aa") (:digest-test #h"befab574396d7f8b6705e2d5b58b2c1c820bb24e3f4bae3e8fbcd36dbf734ee14e5d6ab972aedd3540235466e825850ee4c512ea9795abfd33f330d9fd7f79e62bbb63a6ea85de15beaeea6f8d204a28956059e2632d11861dfb0e65bc07ac8a159388d5c3277e227286f65ff5e5b5aec1" #h"fe97c011e525110e03149fac4179891afcb6304e1cfd9d84cb7389755554ee723571d76b80b9333a695884192340b3fe022d4a233b7aa8e8c7686745cfe75e67") (:digest-test #h"8e58144fa9179d686478622ce450c748260c95d1ba43b8f9b59abeca8d93488da73463ef40198b4d16fb0b0707201347e0506ff19d01bea0f42b8af9e71a1f1bd168781069d4d338fdef00bf419fbb003031df671f4a37979564f69282de9c65407847dd0da505ab1641c02dea4f0d834986" #h"1bc4ac8d979ca62a7fc81c710cedf65af56c9b652eec356aa92da924d370fdebdf076f91ba4fe1ec5cd78fc4c8885ea4304ba2e8e64944ab4bf4d1b3d7dee745") (:digest-test #h"b55c10eae0ec684c16d13463f29291bf26c82e2fa0422a99c71db4af14dd9c7f33eda52fd73d017cc0f2dbe734d831f0d820d06d5f89dacc485739144f8cfd4799223b1aff9031a105cb6a029ba71e6e5867d85a554991c38df3c9ef8c1e1e9a7630be61caabca69280c399c1fb7a12d12aefc" #h"76e970e9449d868067cd23b1a202cbdc99693ff6fa74ba644ec41cbf8fd139cb0f5d1106fcd6c871c315ff41c3eaf99c636288f0fcf6a40b480cb881d87e098f") (:digest-test #h"2eeea693f585f4ed6f6f8865bbae47a6908aecd7c429e4bec4f0de1d0ca0183fa201a0cb14a529b7d7ac0e6ff6607a3243ee9fb11bcf3e2304fe75ffcddd6c5c2e2a4cd45f63c962d010645058d36571404a6d2b4f44755434d76998e83409c3205aa1615db44057db991231d2cb42624574f545" #h"871666b230c5ad75b96d63be22870621c68fd0899655ba7dc0e0e5299915af252c226dd7217601d3a6880d55ee5a20b10820e21c74f730eea9d47fe26debe006") (:digest-test #h"dab11dc0b047db0420a585f56c42d93175562852428499f66a0db811fcdddab2f7cdffed1543e5fb72110b64686bc7b6887a538ad44c050f1e42631bc4ec8a9f2a047163d822a38989ee4aab01b4c1f161b062d873b1cfa388fd301514f62224157b9bef423c7783b7aac8d30d65cd1bba8d689c2d" #h"7e3ef62552b28a2b18a71ceef2dd8659c8bdf291385ad02fed353775e01594f27cc28cc78663e17cb8b39fd4ea48d494ad0bd7aee9277ec9b21e46523812736e") (:digest-test #h"42e99a2f80aee0e001279a2434f731e01d34a44b1a8101726921c0590c30f3120eb83059f325e894a5ac959dca71ce2214799916424e859d27d789437b9d27240bf8c35adbafcecc322b48aa205b293962d858652abacbd588bcf6cbc388d0993bd622f96ed54614c25b6a9aa527589eaaffcf17ddf7" #h"0b87f6ebaa293ff79c873820846c0fcc943e3a83bd8111931ff03ff3b0bf785c961ca84cf3fd40e0d831dbaea595498fc12da88cc507de720a35c01d73fc9595") (:digest-test #h"3c9b46450c0f2cae8e3823f8bdb4277f31b744ce2eb17054bddc6dff36af7f49fb8a2320cc3bdf8e0a2ea29ad3a55de1165d219adeddb5175253e2d1489e9b6fdd02e2c3d3a4b54d60e3a47334c37913c5695378a669e9b72dec32af5434f93f46176ebf044c4784467c700470d0c0b40c8a088c815816" #h"681babbd2e351501c285812e06f20940fd865516cf028b4787d1ffccd0d537705e8e9b73c608d5a8dc4f08eee0902ac12936ddb8c7b29228c6aaf8d0b909c30d") (:digest-test #h"d1e654b77cb155f5c77971a64df9e5d34c26a3cad6c7f6b300d39deb1910094691adaa095be4ba5d86690a976428635d5526f3e946f7dc3bd4dbc78999e653441187a81f9adcd5a3c5f254bc8256b0158f54673dcc1232f6e918ebfc6c51ce67eaeb042d9f57eec4bfe910e169af78b3de48d137df4f2840" #h"c46d2262f186421d07fd740f922306d99b1e3826f6a32486be5a91dc298f177f50915e17eb4ea2e45494c501736cefb0e22acd989da41ac7bb7be56b04bfb5e1") (:digest-test #h"626f68c18a69a6590159a9c46be03d5965698f2dac3de779b878b3d9c421e0f21b955a16c715c1ec1e22ce3eb645b8b4f263f60660ea3028981eebd6c8c3a367285b691c8ee56944a7cd1217997e1d9c21620b536bdbd5de8925ff71dec6fbc06624ab6b21e329813de90d1e572dfb89a18120c3f606355d25" #h"0b3dbc770332823e686470d842104d3b3c1452f64f1bcc71c5f3fad1c0d93f21efbd48d73c7d4909227b06b06d54057a74e03c36d9c106eba79411f1e6e1cffe") (:digest-test #h"651a6fb3c4b80c7c68c6011675e6094eb56abf5fc3057324ebc6477825061f9f27e7a94633abd1fa598a746e4a577caf524c52ec1788471f92b8c37f23795ca19d559d446cab16cbcdce90b79fa1026cee77bf4ab1b503c5b94c2256ad75b3eac6fd5dcb96aca4b03a834bfb4e9af988cecbf2ae597cb9097940" #h"ca46276b0dc2ec4424bb7136eae1af207bd6e5cd833691c7d37b2caeaf4f484b96a3476fc25feb206ad37cf975383dd522ca0cc6200a3867fee7f178d6953fef") (:digest-test #h"8aaf072fce8a2d96bc10b3c91c809ee93072fb205ca7f10abd82ecd82cf040b1bc49ea13d1857815c0e99781de3adbb5443ce1c897e55188ceaf221aa9681638de05ae1b322938f46bce51543b57ecdb4c266272259d1798de13be90e10efec2d07484d9b21a3870e2aa9e06c21aa2d0c9cf420080a80a91dee16f" #h"815b44668bf3751a3392940fca54c1e3e4ef5227b052332afe6eb7a10ac8ad6438ce8a0277aa14bcc41590f6d6a10b6b1babe6bb4f8d777ea576d634b0be41c0") (:digest-test #h"53f918fd00b1701bd504f8cdea803acca21ac18c564ab90c2a17da592c7d69688f6580575395551e8cd33e0fef08ca6ed4588d4d140b3e44c032355df1c531564d7f4835753344345a6781e11cd5e095b73df5f82c8ae3ad00877936896671e947cc52e2b29dcd463d90a0c9929128da222b5a211450bbc0e02448e2" #h"f47799a8547fc9c07d0f808029e7335607d72224be286e118657bd13a2c51d0374426d9eeb7693bde5ec6181574c1404df29bf96941862ba1a0a9a5903319498") (:digest-test #h"a64599b8a61b5ccec9e67aed69447459c8da3d1ec6c7c7c82a7428b9b584fa67e90f68e2c00fbbed4613666e5168da4a16f395f7a3c3832b3b134bfc9cbaa95d2a0fe252f44ac6681eb6d40ab91c1d0282fed6701c57463d3c5f2bb8c6a7301fb4576aa3b5f15510db8956ff77478c26a7c09bea7b398cfc83503f538e" #h"8a0ae12a9e797fb7bd46cbb910076a32873bffcb9ad98b4fc37316aed681ec49c65abbb9586405ff96cc80da4bb8fa73be1ba9e737595b2307cf369d61baf59c") (:digest-test #h"0e3ab0e054739b00cdb6a87bd12cae024b54cb5e550e6c425360c2e87e59401f5ec24ef0314855f0f56c47695d56a7fb1417693af2a1ed5291f2fee95f75eed54a1b1c2e81226fbff6f63ade584911c71967a8eb70933bc3f5d15bc91b5c2644d9516d3c3a8c154ee48e118bd1442c043c7a0dba5ac5b1d5360aae5b9065" #h"a3c6d58872bafdedfdd50c0309089240d6977d4d3d59fb3f2be133c57d2dfcfcc7c027296f74fe58b2a9a6cb7e5d70088934d051cba57001fe27965cfa071a6f") (:digest-test #h"a62fc595b4096e6336e53fcdfc8d1cc175d71dac9d750a6133d23199eaac288207944cea6b16d27631915b4619f743da2e30a0c00bbdb1bbb35ab852ef3b9aec6b0a8dcc6e9e1abaa3ad62ac0a6c5de765de2c3711b769e3fde44a74016fff82ac46fa8f1797d3b2a726b696e3dea5530439acee3a45c2a51bc32dd055650b" #h"11e0e521b55f02befc7207c06444fcc0c16dcf6f34962921b709a322f35e2193477b0dfa21f213f209705ff3958531a75d94346075feb29a288b62e2315ae270") (:digest-test #h"2b6db7ced8665ebe9deb080295218426bdaa7c6da9add2088932cdffbaa1c14129bccdd70f369efb149285858d2b1d155d14de2fdb680a8b027284055182a0cae275234cc9c92863c1b4ab66f304cf0621cd54565f5bff461d3b461bd40df28198e3732501b4860eadd503d26d6e69338f4e0456e9e9baf3d827ae685fb1d817" #h"aebba57c8ed5af6ec93f4aa45772ff5167b7ea88dfa71364f37d8fc5fdb7dc3b2c8331a08023f21d110b7d821e2dc7e860826235e7e6291912ac521384747354") (:digest-test #h"10db509b2cdcaba6c062ae33be48116a29eb18e390e1bbada5ca0a2718afbcd23431440106594893043cc7f2625281bf7de2655880966a23705f0c5155c2f5cca9f2c2142e96d0a2e763b70686cd421b5db812daced0c6d65035fde558e94f26b3e6dde5bd13980cc80292b723013bd033284584bff27657871b0cf07a849f4ae2" #h"2df1e09540b53a17222dab66275cebeceb1f8a5db26b0c41f955fa0549f3367e82299e0cd673958af7dfa04d741aa63ba2c1ad351764dc9228d215f22c24ca58") (:digest-test #h"9334de60c997bda6086101a6314f64e4458f5ff9450c509df006e8c547983c651ca97879175aaba0c539e82d05c1e02c480975cbb30118121061b1ebac4f8d9a3781e2db6b18042e01ecf9017a64a0e57447ec7fcbe6a7f82585f7403ee2223d52d37b4bf426428613d6b4257980972a0acab508a7620c1cb28eb4e9d30fc41361ec" #h"8299cfcea5f00c93a5eb8a84a13628a68b26796d53fb6a986c95b0b1c248920fb946d8af98343d14efc74a4611c53ccc27c5f14c7237af28364346ca5cd70d1a") (:digest-test #h"e88ab086891693aa535ceb20e64c7ab97c7dd3548f3786339897a5f0c39031549ca870166e477743ccfbe016b4428d89738e426f5ffe81626137f17aecff61b72dbee2dc20961880cfe281dfab5ee38b1921881450e16032de5e4d55ad8d4fca609721b0692bac79be5a06e177fe8c80c0c83519fb3347de9f43d5561cb8107b9b5edc" #h"af57bea357fcba0579c4204c0f8dff181bc8a473014bae78df76069de478b2f2a390327a65bdd24be926551c78f70b0d5f1c8f4b970997d557f06336a315a749") (:digest-test #h"fd19e01a83eb6ec810b94582cb8fbfa2fcb992b53684fb748d2264f020d3b960cb1d6b8c348c2b54a9fcea72330c2aaa9a24ecdb00c436abc702361a82bb8828b85369b8c72ece0082fe06557163899c2a0efa466c33c04343a839417057399a63a3929be1ee4805d6ce3e5d0d0967fe9004696a5663f4cac9179006a2ceb75542d75d68" #h"b299e421061ef26c32bb4f50ee669d05feb2ccba3297289c30e6434057b3ea7f617bbbf7a5555328fc291f794987577f458350df99af3a5778300be0bd80164f") (:digest-test #h"59ae20b6f7e0b3c7a989afb28324a40fca25d8651cf1f46ae383ef6d8441587aa1c04c3e3bf88e8131ce6145cfb8973d961e8432b202fa5af3e09d625faad825bc19da9b5c6c20d02abda2fcc58b5bd3fe507bf201263f30543819510c12bc23e2ddb4f711d087a86edb1b355313363a2de996b891025e147036087401ccf3ca7815bf3c49" #h"cbdfb0d0e720f87259dd0d0b4e9c5319e7f88aaef7f7ab2fa1ca639afa0160822f96b3c357a4894ce53cd713fab23ad052e8565fa3b3a523cb9ce39a6bd535cc") (:digest-test #h"77ee804b9f3295ab2362798b72b0a1b2d3291dceb8139896355830f34b3b328561531f8079b79a6e9980705150866402fdc176c05897e359a6cb1a7ab067383eb497182a7e5aef7038e4c96d133b2782917417e391535b5e1b51f47d8ed7e4d4025fe98dc87b9c1622614bff3d1029e68e372de719803857ca52067cddaad958951cb2068cc6" #h"059a181c83a22bff0aa9baa22d872bdf23cbe341032cf0bf57997a4a1924d24fbae9dca14b6d290692b6a6b6344cbe531734f58ad0224c6e39bd1e87f870aad6") (:digest-test #h"b771d5cef5d1a41a93d15643d7181d2a2ef0a8e84d91812f20ed21f147bef732bf3a60ef4067c3734b85bc8cd471780f10dc9e8291b58339a677b960218f71e793f2797aea349406512829065d37bb55ea796fa4f56fd8896b49b2cd19b43215ad967c712b24e5032d065232e02c127409d2ed4146b9d75d763d52db98d949d3b0fed6a8052fbb" #h"9edeeb10ee1b7bb8f16a280d8cc3eda5e909c554419ddc523b69ecedf2adf3b3c9bc66fef365342471c458126f083a3b8e7c0c9d9d77e9f90196b71f9aadf492") (:digest-test #h"b32d95b0b9aad2a8816de6d06d1f86008505bd8c14124f6e9a163b5a2ade55f835d0ec3880ef50700d3b25e42cc0af050ccd1be5e555b23087e04d7bf9813622780c7313a1954f8740b6ee2d3f71f768dd417f520482bd3a08d4f222b4ee9dbd015447b33507dd50f3ab4247c5de9a8abd62a8decea01e3b87c8b927f5b08beb37674c6f8e380c04" #h"a6054ffc3d81591be964c4b004a3a21142365b59ee98b2873d488293f93a8d7154bf72100012c60d3c9418f6af8ea66372cb4703f5f6381de6d4b9b98cff1e90") (:digest-test #h"04410e31082a47584b406f051398a6abe74e4da59bb6f85e6b49e8a1f7f2ca00dfba5462c2cd2bfde8b64fb21d70c083f11318b56a52d03b81cac5eec29eb31bd0078b6156786da3d6d8c33098c5c47bb67ac64db14165af65b44544d806dde5f487d5373c7f9792c299e9686b7e5821e7c8e2458315b996b5677d926dac57b3f22da873c601016a0d" #h"b0e54a12fdba0738898f1bbf0ba81f81de77648d8d14c20bdd5d90f300d382e069f5dba7eec6b23168b008b9f39c2b93fd742a5902a5e02728f57712d6a61d4e") (:digest-test #h"8b81e9badde026f14d95c019977024c9e13db7a5cd21f9e9fc491d716164bbacdc7060d882615d411438aea056c340cdf977788f6e17d118de55026855f93270472d1fd18b9e7e812bae107e0dfde7063301b71f6cfe4e225cab3b232905a56e994f08ee2891ba922d49c3dafeb75f7c69750cb67d822c96176c46bd8a29f1701373fb09a1a6e3c7158f" #h"3ce96077eb17c6a9c95a9a477748876c6451098dbea2b3261e6d75b64a988e1c75d7eac73bc2402afc726543e2a5bdb76689c0931ff762818dd2d3fe57a50fa9") (:digest-test #h"fa6eed24da6666a22208146b19a532c2ec9ba94f09f1def1e7fc13c399a48e41acc2a589d099276296348f396253b57cb0e40291bd282773656b6e0d8bea1cda084a3738816a840485fcf3fb307f777fa5feac48695c2af4769720258c77943fb4556c362d9cba8bf103aeb9034baa8ea8bfb9c4f8e6742ce0d52c49ea8e974f339612e830e9e7a9c29065" #h"c9acd6d98a349512b952d151ed501562f04ea4bb4b8965812510b9b842531a2b41a0108ac129cf9c9517be790921df64ad1dfc0b93ddba3415eebaf0da72f6a0") (:digest-test #h"9bb4af1b4f09c071ce3cafa92e4eb73ce8a6f5d82a85733440368dee4eb1cbc7b55ac150773b6fe47dbe036c45582ed67e23f4c74585dab509df1b83610564545642b2b1ec463e18048fc23477c6b2aa035594ecd33791af6af4cbc2a1166aba8d628c57e707f0b0e8707caf91cd44bdb915e0296e0190d56d33d8dde10b5b60377838973c1d943c22ed335e" #h"26b4e5c4fa85cb33359450e7f7158fb6a0739984565e9d9ebe6ad65b118296e9c1098c11541c871eb1b89853f1fa73ad8702ebf4fc9be4d0ab057e4391df964e") (:digest-test #h"2167f02118cc62043e9091a647cadbed95611a521fe0d64e8518f16c808ab297725598ae296880a773607a798f7c3cfce80d251ebec6885015f9abf7eaabae46798f82cb5926de5c23f44a3f9f9534b3c6f405b5364c2f8a8bdc5ca49c749bed8ce4ba48897062ae8424ca6dde5f55c0e42a95d1e292ca54fb46a84fbc9cd87f2d0c9e7448de3043ae22fdd229" #h"913bba5c0c13cc49d8310014cf5af1b63ba3d5db8a27699fcfc573688f0e826fb5a7b5d10d3a1de693aa66e08c0915e7278f61b5fa30f1263b134f016f74841f") (:digest-test #h"94b7fa0bc1c44e949b1d7617d31b4720cbe7ca57c6fa4f4094d4761567e389ecc64f6968e4064df70df836a47d0c713336b5028b35930d29eb7a7f9a5af9ad5cf441745baec9bb014ceeff5a41ba5c1ce085feb980bab9cf79f2158e03ef7e63e29c38d7816a84d4f71e0f548b7fc316085ae38a060ff9b8dec36f91ad9ebc0a5b6c338cbb8f6659d342a24368cf" #h"e5d53e81866283179012d9239340b0cbfb8d7aebce0c824dc6653a652bb1b54e0883991be2c3e39ad111a7b24e95daf6f7d9a379d884d64f9c2afd645e1db5e2") (:digest-test #h"ea40e83cb18b3a242c1ecc6ccd0b7853a439dab2c569cfc6dc38a19f5c90acbf76aef9ea3742ff3b54ef7d36eb7ce4ff1c9ab3bc119cff6be93c03e208783335c0ab8137be5b10cdc66ff3f89a1bddc6a1eed74f504cbe7290690bb295a872b9e3fe2cee9e6c67c41db8efd7d863cf10f840fe618e7936da3dca5ca6df933f24f6954ba0801a1294cd8d7e66dfafec" #h"5da83b7e221933cd67fa2af8c9934db74ce822212c99e0ee01f5220b4fe1e9b0388e42e328a1d174e6368f5773853042543a9b493a94b625980b73df3f3fccbb") (:digest-test #h"157d5b7e4507f66d9a267476d33831e7bb768d4d04cc3438da12f9010263ea5fcafbde2579db2f6b58f911d593d5f79fb05fe3596e3fa80ff2f761d1b0e57080055c118c53e53cdb63055261d7c9b2b39bd90acc32520cbbdbda2c4fd8856dbcee173132a2679198daf83007a9b5c51511ae49766c792a29520388444ebefe28256fb33d4260439cba73a9479ee00c63" #h"72de9184beb5c6a37ea2c395734d0d5412991a57cffcc13ff9b5fa0f2046ee87c61811fe8ef2470239d5066c220173de5ebe41885ed8acae397fb395e6ca9aee") (:digest-test #h"836b34b515476f613fe447a4e0c3f3b8f20910ac89a3977055c960d2d5d2b72bd8acc715a9035321b86703a411dde0466d58a59769672aa60ad587b8481de4bba552a1645779789501ec53d540b904821f32b0bd1855b04e4848f9f8cfe9ebd8911be95781a759d7ad9724a7102dbe576776b7c632bc39b9b5e19057e226552a5994c1dbb3b5c7871a11f5537011044c53" #h"b678fa7655584970dedbbc73a16d7840935b104d06dcb468ddd9814d6cf443fa6f9245824dbff3ab5fffef24b29cb2978796f37e7b49b1682d59f79e3c169e81") (:digest-test #h"cc7784a4912a7ab5ad3620aab29ba87077cd3cb83636adc9f3dc94f51edf521b2161ef108f21a0a298557981c0e53ce6ced45bdf782c1ef200d29bab81dd6460586964edab7cebdbbec75fd7925060f7da2b853b2b089588fa0f8c16ec6498b14c55dcee335cb3a91d698e4d393ab8e8eac0825f8adebeee196df41205c011674e53426caa453f8de1cbb57932b0b741d4c6" #h"66c64d5b0585dd8c40becd456e4b0188061ae8059f03e79fe04c40925442ba93b052f52087b30bdbfd4816bbd148696d4fa6c61f216253d7ac178b39ec44c770") (:digest-test #h"7639b461fff270b2455ac1d1afce782944aea5e9087eb4a39eb96bb5c3baaf0e868c8526d3404f9405e79e77bfac5ffb89bf1957b523e17d341d7323c302ea7083872dd5e8705694acdda36d5a1b895aaa16eca6104c82688532c8bfe1790b5dc9f4ec5fe95baed37e1d287be710431f1e5e8ee105bc42ed37d74b1e55984bf1c09fe6a1fa13ef3b96faeaed6a2a1950a12153" #h"a7bd506db9c0509ad47413af4b0e3948b47c18278f15f5b19fbb0b76e2c1c1f19db9438528eb6d87b0b4a509567db39f32641e2944365780914296cf3e48cecf") (:digest-test #h"eb6513fc61b30cfba58d4d7e80f94d14589090cf1d80b1df2e68088dc6104959ba0d583d585e9578ab0aec0cf36c48435eb52ed9ab4bbce7a5abe679c97ae2dbe35e8cc1d45b06dda3cf418665c57cbee4bbb47fa4caf78f4ee656fec237fe4eebbafa206e1ef2bd0ee4ae71bd0e9b2f54f91daadf1febfd7032381d636b733dcb3bf76fb14e23aff1f68ed3dbcf75c9b99c6f26" #h"2e681f9ddbd7c77eab0d225e2ad1f72256be239df25933bcd6cedd757269b35e2a5352b3298a4cda0542ff7d3add2b0cf42f10fbe05a67c8763d54a78a43aea7") (:digest-test #h"1594d74bf5dde444265d4c04dad9721ff3e34cbf622daf341fe16b96431f6c4df1f760d34f296eb97d98d560ad5286fec4dce1724f20b54fd7df51d4bf137add656c80546fb1bf516d62ee82baa992910ef4cc18b70f3f8698276fcfb44e0ec546c2c39cfd8ee91034ff9303058b4252462f86c823eb15bf481e6b79cc3a02218595b3658e8b37382bd5048eaed5fd02c37944e73b" #h"fd9be24763f682043243525e5e0780534a82ad5e83b65eb4acaf5353313a4cc7c5eea9da141de570232cb4126287e5c77657ca8d6a16b5be53f470343e722fd6") (:digest-test #h"4cfa1278903026f66fedd41374558be1b585d03c5c55dac94361df286d4bd39c7cb8037ed3b267b07c346626449d0cc5b0dd2cf221f7e4c3449a4be99985d2d5e67bff2923357ddeab5abcb4619f3a3a57b2cf928a022eb27676c6cf805689004fca4d41ea6c2d0a4789c7605f7bb838dd883b3ad3e6027e775bcf262881428099c7fff95b14c095ea130e0b9938a5e22fc52650f591" #h"14ea33bb33fdf0426e0dfb12de1c613ba97141454c8971bcce25c6d87a6c2403ccfad1e8a6c15754c3cc5ac1718b7f7f1ec003c1b98d70968c5dbb95540b4a17") (:digest-test #h"d3e65cb92cfa79662f6af493d696a07ccf32aaadcceff06e73e8d9f6f909209e66715d6e978788c49efb9087b170ecf3aa86d2d4d1a065ae0efc8924f365d676b3cb9e2bec918fd96d0b43dee83727c9a93bf56ca2b2e59adba85696546a815067fc7a78039629d4948d157e7b0d826d1bf8e81237bab7321312fdaa4d521744f988db6fdf04549d0fdca393d639c729af716e9c8bba48" #h"3b4b395514e0cab04fc9f9d6c358006ce06c93831e8948fb9bd2a863f3fa064e78eb57c76dd2d058d09ab3d105c28c2dacaebd4a473f1fa023053cc15366082f") (:digest-test #h"842cc583504539622d7f71e7e31863a2b885c56a0ba62db4c2a3f2fd12e79660dc7205ca29a0dc0a87db4dc62ee47a41db36b9ddb3293b9ac4baae7df5c6e7201e17f717ab56e12cad476be49608ad2d50309e7d48d2d8de4fa58ac3cfeafeee48c0a9eec88498e3efc51f54d300d828dddccb9d0b06dd021a29cf5cb5b2506915beb8a11998b8b886e0f9b7a80e97d91a7d01270f9a7717" #h"2d7d28c4311e0424d71e7f9d267a2e048aa175455fcb724cf0b13debf448b59b0f28265b0f010f4e4f4065004904a7c2687a5a1b30ab593bc44f698dff5dde33") (:digest-test #h"6c4b0a0719573e57248661e98febe326571f9a1ca813d3638531ae28b4860f23c3a3a8ac1c250034a660e2d71e16d3acc4bf9ce215c6f15b1c0fc7e77d3d27157e66da9ceec9258f8f2bf9e02b4ac93793dd6e29e307ede3695a0df63cbdc0fc66fb770813eb149ca2a916911bee4902c47c7802e69e405fe3c04ceb5522792a5503fa829f707272226621f7c488a7698c0d69aa561be9f378" #h"cb665ec69abd75743c8713034e9e41736f8c1ce2c77a8518e50388c411e6284d9aadcd4d3bd5a9eb74672325e41e8a67acf380d1e8a61684f0e501f5663a031d") (:digest-test #h"51b7dbb7ce2ffeb427a91ccfe5218fd40f9e0b7e24756d4c47cd55606008bdc27d16400933906fd9f30effdd4880022d081155342af3fb6cd53672ab7fb5b3a3bcbe47be1fd3a2278cae8a5fd61c1433f7d350675dd21803746cadca574130f01200024c6340ab0cc2cf74f2234669f34e9009ef2eb94823d62b31407f4ba46f1a1eec41641e84d77727b59e746b8a671bef936f05be820759fa" #h"4515a104fc68094d244b234d9dc06a0243b71d419d29a95c46e3cba6f51e121abe049b34535db3ccbf2ad68d83fc36331f615b3e33deb39a3381dfbcb798fe4d") (:digest-test #h"83599d93f5561e821bd01a472386bc2ff4efbd4aed60d5821e84aae74d8071029810f5e286f8f17651cd27da07b1eb4382f754cd1c95268783ad09220f5502840370d494beb17124220f6afce91ec8a0f55231f9652433e5ce3489b727716cf4aeba7dcda20cd29aa9a859201253f948dd94395aba9e3852bd1d60dda7ae5dc045b283da006e1cbad83cc13292a315db5553305c628dd091146597" #h"cee3e60a49f7caed9387f3ea699524c4ccafd37c1a7e60d2f0ab037720649f108cce8769f70b0c5d049359eeb821022f17c4b5f646b750e3070558ec127057f1") (:digest-test #h"2be9bf526c9d5a75d565dd11ef63b979d068659c7f026c08bea4af161d85a462d80e45040e91f4165c074c43ac661380311a8cbed59cc8e4c4518e80cd2c78ab1cabf66bff83eab3a80148550307310950d034a6286c93a1ece8929e6385c5e3bb6ea8a7c0fb6d6332e320e71cc4eb462a2a62e2bfe08f0ccad93e61bedb5dd0b786a728ab666f07e0576d189c92bf9fb20dca49ac2d3956d47385e2" #h"e6ed6f060906d1a772f47e83907507f88a151de401ed79acb56be57c2596792dc0bc5a9dc1045e37c6a31da1c36200214e4f5698aa2754eeb2caecfc03bec39d") (:digest-test #h"ca76d3a12595a817682617006848675547d3e8f50c2210f9af906c0e7ce50b4460186fe70457a9e879e79fd4d1a688c70a347361c847ba0dd6aa52936eaf8e58a1be2f5c1c704e20146d366aeb3853bed9de9befe9569ac8aaea37a9fb7139a1a1a7d5c748605a8defb297869ebedd71d615a5da23496d11e11abbb126b206fa0a7797ee7de117986012d0362dcef775c2fe145ada6bda1ccb326bf644" #h"9ed4eee87f56ae2741e8e4d65623e4d1fa3aa111f64a85f66e99093baed990fe1d788d6a4be1a72a6615281eb45e1b6fb60afefdd93987f794084bda962fac7f") (:digest-test #h"f76b85dc67421025d64e93096d1d712b7baf7fb001716f02d33b2160c2c882c310ef13a576b1c2d30ef8f78ef8d2f465007109aad93f74cb9e7d7bef7c9590e8af3b267c89c15db238138c45833c98cc4a471a7802723ef4c744a853cf80a0c2568dd4ed58a2c9644806f42104cee53628e5bdf7b63b0b338e931e31b87c24b146c6d040605567ceef5960df9e022cb469d4c787f4cba3c544a1ac91f95f" #h"23139bdd84e9f43a6cc615f0f036199328d39807bec9e786d4251b83b30800f9dbe8edc0b910fcd9d9f204c2ddd4d3b92bc26a0cfaabe764bfb90a1444733cd0") (:digest-test #h"25b8c9c032ea6bcd733ffc8718fbb2a503a4ea8f71dea1176189f694304f0ff68e862a8197b839957549ef243a5279fc2646bd4c009b6d1edebf24738197abb4c992f6b1dc9ba891f570879accd5a6b18691a93c7d0a8d38f95b639c1daeb48c4c2f15ccf5b9d508f8333c32de78781b41850f261b855c4bebcc125a380c54d501c5d3bd07e6b52102116088e53d76583b0161e2a58d0778f091206aabd5a1" #h"ec69397000aed63cb7e86b4fb0bfd3dcee8a6f6a1cfe01a324da13484b73599fcd37ad392662d4c41d90baca66be4d6e3424efd35d7ff4cb07cbdfbebddb7b50") (:digest-test #h"21cfdc2a7ccb7f331b3d2eefff37e48ad9fa9c788c3f3c200e0173d99963e1cbca93623b264e920394ae48bb4c3a5bb96ffbc8f0e53f30e22956adabc2765f57fb761e147ecbf8567533db6e50c8a1f894310a94edf806dd8ca6a0e141c0fa7c9fae6c6ae65f18c93a8529e6e5b553bf55f25be2e80a9882bd37f145fecbeb3d447a3c4e46c21524cc55cdd62f521ab92a8ba72b897996c49bb273198b7b1c9e" #h"2ea3ea00e6e9305ced0fc160e004265221306a2be9613474126825aa3c3170ae07e5ea42f6b74f0b2c1bd2a6cd4d26eb1e04c67c9a4afefc1dd0cb57c2a9f4c7") (:digest-test #h"4e452ba42127dcc956ef4f8f35dd68cb225fb73b5bc7e1ec5a898bba2931563e74faff3b67314f241ec49f4a7061e3bd0213ae826bab380f1f14faab8b0efddd5fd1bb49373853a08f30553d5a55ccbbb8153de4704f29ca2bdeef0419468e05dd51557ccc80c0a96190bbcc4d77ecff21c66bdf486459d427f986410f883a80a5bcc32c20f0478bb9a97a126fc5f95451e40f292a4614930d054c851acd019ccf" #h"6a7addb28f4f2c23cf0c264579fba5f892e010689f837b84d006d91402fbfe9ba44b9126f8b5de1ec6bbe194a3e3854235056a09901d18e8d6f1727dd430212a") (:digest-test #h"fa85671df7dadf99a6ffee97a3ab9991671f5629195049880497487867a6c446b60087fac9a0f2fcc8e3b24e97e42345b93b5f7d3691829d3f8ccd4bb36411b85fc2328eb0c51cb3151f70860ad3246ce0623a8dc8b3c49f958f8690f8e3860e71eb2b1479a5cea0b3f8befd87acaf5362435eaeccb52f38617bc6c5c2c6e269ead1fbd69e941d4ad2012da2c5b21bcfbf98e4a77ab2af1f3fda3233f046d38f1dc8" #h"2c0ee8a165bf88c44c8601c6372e522da9ecf42544dcdc098698f50df8e70eb7440cab2953bb490cd2a5e0887beeae3482192da95e5098d3b318f16fc08d1e1e") (:digest-test #h"e90847ae6797fbc0b6b36d6e588c0a743d725788ca50b6d792352ea8294f5ba654a15366b8e1b288d84f5178240827975a763bc45c7b0430e8a559df4488505e009c63da994f1403f407958203cebb6e37d89c94a5eacf6039a327f6c4dbbc7a2a307d976aa39e41af6537243fc218dfa6ab4dd817b6a397df5ca69107a9198799ed248641b63b42cb4c29bfdd7975ac96edfc274ac562d0474c60347a078ce4c25e88" #h"ddd4ff117231eca0445eada7c7f1d84686520daa70e160c87dbbb3fb32bb9e2f4cc53db5413d4e88de18a0118570318bd6d0e5264d779339ac6f4f4a95546a53") (:digest-test #h"f6d5c2b6c93954fc627602c00c4ca9a7d3ed12b27173f0b2c9b0e4a5939398a665e67e69d0b12fb7e4ceb253e8083d1ceb724ac07f009f094e42f2d6f2129489e846eaff0700a8d4453ef453a3eddc18f408c77a83275617fabc4ea3a2833aa73406c0e966276079d38e8e38539a70e194cc5513aaa457c699383fd1900b1e72bdfb835d1fd321b37ba80549b078a49ea08152869a918ca57f5b54ed71e4fd3ac5c06729" #h"a9744efa42887df292fc09dfeb885f1e801855ded09dc2f97cbfcbd019751878619da1bc9573201c7cc050e2aa1d453e951366d81c188d329b3cb861c1d78f92") (:digest-test #h"cf8562b1bed89892d67ddaaf3deeb28246456e972326dbcdb5cf3fb289aca01e68da5d59896e3a6165358b071b304d6ab3d018944be5049d5e0e2bb819acf67a6006111089e6767132d72dd85beddcbb2d64496db0cc92955ab4c6234f1eea24f2d51483f2e209e4589bf9519fac51b4d061e801125e605f8093bb6997bc163d551596fe4ab7cfae8fb9a90f6980480ce0c229fd1675409bd788354daf316240cfe0af93eb" #h"89cae46246efedad1147eb1868c23a6be54f6bac75f0c98a9aefc6bf3ccb89ae012f2e88a9c838b55e57b232cb3c80bc3c2e9fb3fc9768c6226e93284e208bf2") (:digest-test #h"2ace31abb0a2e3267944d2f75e1559985db7354c6e605f18dc8470423fca30b7331d9b33c4a4326783d1caae1b4f07060eff978e4746bf0c7e30cd61040bd5ec2746b29863eb7f103ebda614c4291a805b6a4c8214230564a0557bc7102e0bd3ed23719252f7435d64d210ee2aafc585be903fa41e1968c50fd5d5367926df7a05e3a42cf07e656ff92de73b036cf8b19898c0cb34557c0c12c2d8b84e91181af467bc75a9d1" #h"e80a63faf248ae762d13887afe8e1954f97327edd9641ce563f4148f9796669827b3a12b06ebd710d4171b86e21bc13360a541845354e0f4934e6fbbd7acbf2d") (:digest-test #h"0d8d09aed19f1013969ce5e7eb92f83a209ae76be31c754844ea9116ceb39a22ebb6003017bbcf26555fa6624185187db8f0cb3564b8b1c06bf685d47f3286eda20b83358f599d2044bbf0583fab8d78f854fe0a596183230c5ef8e54426750eaf2cc4e29d3bdd037e734d863c2bd9789b4c243096138f7672c232314effdfc6513427e2da76916b5248933be312eb5dde4cf70804fb258ac5fb82d58d08177ac6f4756017fff5" #h"09c10c4818a6821c170d6780d006f7e853e30fe2d9a4e96545673704ec0a1a3e356375715994e1ac1d8cb0e56dbdb2f77dc558ed228fb56ee62217e63455fd0b") (:digest-test #h"c3236b73deb7662bf3f3daa58f137b358ba610560ef7455785a9befdb035a066e90704f929bd9689cef0ce3bda5acf4480bceb8d09d10b098ad8500d9b6071dfc3a14af6c77511d81e3aa8844986c3bea6f469f9e02194c92868cd5f51646256798ff0424954c1434bdfed9facb390b07d342e992936e0f88bfd0e884a0ddb679d0547ccdec6384285a45429d115ac7d235a717242021d1dc35641f5f0a48e8445dba58e6cb2c8ea" #h"d1cab5979eb7f53c97dca5d725d8b33008906d7759fd3ebb8401ee2fff01db895495a0a062d47f251bc3fc13988607c6798969d213c941efc152e7db1da68e72") (:digest-test #h"b39feb8283eadc63e8184b51df5ae3fd41aac8a963bb0be1cd08aa5867d8d910c669221e73243360646f6553d1ca05a84e8dc0de05b6419ec349ca994480193d01c92525f3fb3dcefb08afc6d26947bdbbfd85193f53b50609c6140905c53a6686b58e53a319a57b962331ede98149af3de3118a819da4d76706a0424b4e1d2910b0ed26af61d150ebcb46595d4266a0bd7f651ba47d0c7f179ca28545007d92e8419d48fdfbd744ce" #h"96ad163869ae2ffdb89b96f4dc700ece27d1f4daafbc5fb81a8e9513c6ea5e2b6a8bccf4e49a294af326f872740661629ab780581155810e492424c24f8d1dd3") (:digest-test #h"a983d54f503803e8c7999f4edbbe82e9084f422143a932ddddc47a17b0b7564a7f37a99d0786e99476428d29e29d3c197a72bfab1342c12a0fc4787fd7017d7a6174049ea43b5779169ef7472bdbbd941dcb82fc73aac45a8a94c9f2bd3477f61fd3b796f02a1b8264a214c6fea74b7051b226c722099ec7883a462b83b6afdd4009248b8a237f605fe5a08fe7d8b45321421ebba67bd70a0b00ddbf94baab7f359d5d1eea105f28dcfb" #h"fd2e7a6e11e5d00278099eaf403054d617acac5bd3d0a4908191782c89f9217a3f0118bc2b284fdbce803f66b78dd795eb18dc16ba85e19cb6393dc56c06ecca") (:digest-test #h"e4d1c1897a0a866ce564635b74222f9696bf2c7f640dd78d7e2aca66e1b61c642bb03ea7536aae597811e9bf4a7b453ede31f97b46a5f0ef51a071a2b3918df16b152519ae3776f9f1edab4c2a377c3292e96408359d3613844d5eb393000283d5ad3401a318b12fd1474b8612f2bb50fb6a8b9e023a54d7dde28c43d6d8854c8d9d1155935c199811dbfc87e9e0072e90eb88681cc7529714f8fb8a2c9d88567adfb974ee205a9bf7b848" #h"ae53776d969a9b285641998a9f2c70ca71856c956a3c430a32a1e03a8e08d544f16511a27cfa59f6b8275a2357f8efa6544b1cd0c00a9460f47954a146429e49") (:digest-test #h"b10c59723e3dcadd6d75df87d0a1580e73133a9b7d00cb95ec19f5547027323be75158b11f80b6e142c6a78531886d9047b08e551e75e6261e79785366d7024bd7cd9cf322d9be7d57fb661069f2481c7bb759cd71b4b36ca2bc2df6d3a328faebdb995a9794a8d72155ed551a1f87c80bf6059b43fc764900b18a1c2441f7487743cf84e565f61f8dd2ece6b6ccc9444049197aaaf53e926fbee3bfca8be588ec77f29d211be89de18b15f6" #h"d4748c8e17f4117bf2bf71557abb559247552126c36192c5df5c6c3e307d879b703c3fcd7099ddab243e2f1d5ae5066990a7b38d3f2cd7fb115aa6d135e7261d") (:digest-test #h"db11f609baba7b0ca634926b1dd539c8cbada24967d7add4d9876f77c2d80c0f4dcefbd7121548373582705cca2495bd2a43716fe64ed26d059cfb566b3364bd49ee0717bdd9810dd14d8fad80dbbdc4cafb37cc60fb0fe2a80fb4541b8ca9d59dce457738a9d3d8f641af8c3fd6da162dc16fc01aac527a4a0255b4d231c0be50f44f0db0b713af03d968fe7f0f61ed0824c55c4b5265548febd6aad5c5eedf63efe793489c39b8fd29d104ce" #h"d8ff0481a63890f0e5a536ebba2f253fa2cfa19c0f353587af4bdc3190e4f8f54d17d665e8b2011121d444bfadfff3e192d97fa03b849d63f36db20f4cf88a74") (:digest-test #h"bebd4f1a84fc8b15e4452a54bd02d69e304b7f32616aadd90537937106ae4e28de9d8aab02d19bc3e2fde1d651559e296453e4dba94370a14dbbb2d1d4e2022302ee90e208321efcd8528ad89e46dc839ea9df618ea8394a6bff308e7726bae0c19bcd4be52da6258e2ef4e96aa21244429f49ef5cb486d7ff35cac1bacb7e95711944bccb2ab34700d42d1eb38b5d536b947348a458ede3dc6bd6ec547b1b0cae5b257be36a7124e1060c170ffa" #h"52d771b5016c6b1b93d3bf6a13f718a7b4741d528798609308b54cea6037862d923751fddce10580a7d6431bf208df17c1b825f7c7401ccbd6d806b744241acf") (:digest-test #h"5aca56a03a13784bdc3289d9364f79e2a85c12276b49b92db0adaa4f206d5028f213f678c3510e111f9dc4c1c1f8b6acb17a6413aa227607c515c62a733817ba5e762cc6748e7e0d6872c984d723c9bb3b117eb8963185300a80bfa65cde495d70a46c44858605fccbed086c2b45cef963d33294dbe9706b13af22f1b7c4cd5a001cfec251fba18e722c6e1c4b1166918b4f6f48a98b64b3c07fc86a6b17a6d0480ab79d4e6415b520f1c484d675b1" #h"36d472a8ae13d1e70e1fd275117ffe34063befccf6706fab0816e1b81f7fe7f2ddb2a122f1f52c9950644659430f81bcedad5d833df4814cf60ae6c542cc4478") (:digest-test #h"a5aad0e4646a32c85cfcac73f02fc5300f1982fabb2f2179e28303e447854094cdfc854310e5c0f60993ceff54d84d6b46323d930adb07c17599b35b505f09e784bca5985e0172257797fb53649e2e9723efd16865c31b5c3d5113b58bb0bfc8920fabdda086d7537e66d709d050bd14d0c960873f156fad5b3d3840cdfcdc9be6af519db262a27f40896ab25cc39f96984d650611c0d5a3080d5b3a1bf186abd42956588b3b58cd948970d298776060" #h"e504ad7f33d65b8d3487b28805d478778c901c0aff5f889ae95e2919b4f431a80116a8993469e822895f3c21a41d67afda93a5b29b6250f76335a76fe8919274") (:digest-test #h"06cbbe67e94a978203ead6c057a1a5b098478b4b4cbef5a97e93c8e42f5572713575fc2a884531d7622f8f879387a859a80f10ef02708cd8f7413ab385afc357678b9578c0ebf641ef076a1a30f1f75379e9dcb2a885bdd295905ee80c0168a62a9597d10cf12dd2d8cee46645c7e5a141f6e0e23aa482abe5661c16e69ef1e28371e2e236c359ba4e92c25626a7b7ff13f6ea4ae906e1cfe163e91719b1f750a96cbde5fbc953d9e576cd216afc90323a" #h"1dca53be0a34114447d1c1443b92b69dfded705956eae60bbab39178ccb11f526a302aae83720652ef4c5dd450a3647df7b77c4664717d935b4f5b20f206fefe") (:digest-test #h"f1c528cf7739874707d4d8ad5b98f7c77169de0b57188df233b2dc8a5b31eda5db4291dd9f68e6bad37b8d7f6c9c0044b3bf74bbc3d7d1798e138709b0d75e7c593d3cccdc1b20c7174b4e692add820ace262d45ccfae2077e878796347168060a162ecca8c38c1a88350bd63bb539134f700fd4addd5959e255337daa06bc86358fabcbefdfb5bc889783d843c08aadc6c4f6c36f65f156e851c9a0f917e4a367b5ad93d874812a1de6a7b93cd53ad97232" #h"cb1b03b180e04021e0099050eb6b7eb9092c5bd5c445e9d31ee39c724f038e9f619a96d3a2812ca7f208feb2d074c3f817262f7504705623e635b9f273e37a59") (:digest-test #h"9d9f3a7ecd51b41f6572fd0d0881e30390dfb780991dae7db3b47619134718e6f987810e542619dfaa7b505c76b7350c6432d8bf1cfebdf1069b90a35f0d04cbdf130b0dfc7875f4a4e62cdb8e525aadd7ce842520a482ac18f09442d78305fe85a74e39e760a4837482ed2f437dd13b2ec1042afcf9decdc3e877e50ff4106ad10a525230d11920324a81094da31deab6476aa42f20c84843cfc1c58545ee80352bdd3740dd6a16792ae2d86f11641bb717c2" #h"f0482f098b93624bcde1aab58097198649a8dc84421826d1c1011ad41b948384c8ed5a97c64c134b38a0075812a35f9ce3cb200972c2ecdfc408714139b9bff0") (:digest-test #h"5179888724819fbad3afa927d3577796660e6a81c52d98e9303261d5a4a83232f6f758934d50aa83ff9e20a5926dfebaac49529d006eb923c5ae5048ed544ec471ed7191edf46363383824f915769b3e688094c682b02151e5ee01e510b431c8865aff8b6b6f2f59cb6d129da79e97c6d2b8fa6c6da3f603199d2d1bcab547682a81cd6cf65f6551121391d78bcc23b5bd0e922ec6d8bf97c952e84dd28aef909aba31edb903b28fbfc33b7703cd996215a11238" #h"a3188426cea0c18cb638bcc45c4337c40be41f6e03cd2d7c4fee26025c5ca281cfbb3ad1554d45edc2eb03e2ebe3de02f57d36d5b6a88a3c61a6aaede62180d0") (:digest-test #h"576ef3520d30b7a4899b8c0d5e359e45c5189add100e43be429a02fb3de5ff4f8fd0e79d9663acca72cd29c94582b19292a557c5b1315297d168fbb54e9e2ecd13809c2b5fce998edc6570545e1499dbe7fb74d47cd7f35823b212b05bf3f5a79caa34224fdd670d335fcb106f5d92c3946f44d3afcbae2e41ac554d8e6759f332b76be89a0324aa12c5482d1ea3ee89ded4936f3e3c080436f539fa137e74c6d3389bdf5a45074c47bc7b20b0948407a66d855e2f" #h"0b14693e6320668d64ebb3bf6eeb81aafcdb7320ecde80a245786d1b0a808a15c717dc8e8813bf64bf4aa57c29c33e913d6ce1879e52e1919fb83e4a208edaa4") (:digest-test #h"0df2152fa4f4357c8741529dd77e783925d3d76e95bafa2b542a2c33f3d1d117d159cf473f82310356fee4c90a9e505e70f8f24859656368ba09381fa245eb6c3d763f3093f0c89b972e66b53d59406d9f01aea07f8b3b615cac4ee4d05f542e7d0dab45d67ccccd3a606ccbeb31ea1fa7005ba07176e60dab7d78f6810ef086f42f08e595f0ec217372b98970cc6321576d92ce38f7c397a403bada1548d205c343ac09deca86325373c3b76d9f32028fea8eb32515" #h"a9abc3f554c1e717935d28c28e7c26aa9dc5bd6d7b02ed7dc6afe21a0ea027a8801ae076f2872d08635ee81420711862edc4e448c85513289438b3c8be456b5b") (:digest-test #h"3e15350d87d6ebb5c8ad99d42515cfe17980933c7a8f6b8bbbf0a63728cefaad2052623c0bd5931839112a48633fb3c2004e0749c87a41b26a8b48945539d1ff41a4b269462fd199bfecd45374756f55a9116e92093ac99451aefb2af9fd32d6d7f5fbc7f7a540d5097c096ebc3b3a721541de073a1cc02f7fb0fb1b9327fb0b1218ca49c9487ab5396622a13ae546c97abdef6b56380dda7012a8384091b6656d0ab272d363cea78163ff765cdd13ab1738b940d16cae" #h"04dd83d20f58e854d857f24720c50a4b5f83dbc8cabd460d379417cd4813772aa85591b90462f34db3faa4dcae335fb1252bf41162e24975a0dbd308c41a4a6b") (:digest-test #h"c38d6b0b757cb552be40940ece0009ef3b0b59307c1451686f1a22702922800d58bce7a636c1727ee547c01b214779e898fc0e560f8ae7f61bef4d75eaa696b921fd6b735d171535e9edd267c192b99880c87997711002009095d8a7a437e258104a41a505e5ef71e5613ddd2008195f0c574e6ba3fe40099cfa116e5f1a2fa8a6da04badcb4e2d5d0de31fdc4800891c45781a0aac7c907b56d631fca5ce8b2cde620d11d1777ed9fa603541de794ddc5758fcd5fad78c0" #h"ce76b25c928cb75c09c0674e8fcd22089654182cd3d84b85cc44b186a8b1a7cc1bb66f389da6d744a24a7b02bf5c85542d1ba8ef0db4a86d2fc394471b396519") (:digest-test #h"8d2de3f0b37a6385c90739805b170057f091cd0c7a0bc951540f26a5a75b3e694631bb64c7635eed316f51318e9d8de13c70a2aba04a14836855f35e480528b776d0a1e8a23b547c8b8d6a0d09b241d3be9377160cca4e6793d00a515dc2992cb7fc741daca171431da99cce6f7789f129e2ac5cf65b40d703035cd2185bb936c82002daf8cbc27a7a9e554b06196630446a6f0a14ba155ed26d95bd627b7205c072d02b60db0fd7e49ea058c2e0ba202daff0de91e845cf79" #h"02d1671981c2e85d0455ee85f41b8e9c32b1c80221dd432b8bcb5fcefe0996f32fe9fc3eeb3f1f557ae1632750b92d05239af857c42d59a3daeb9629e1158bec") (:digest-test #h"c464bbdad275c50dcd983b65ad1019b9ff85a1e71c807f3204bb2c921dc31fbcd8c5fc45868ae9ef85b6c9b83bba2a5a822201ed68586ec5ec27fb2857a5d1a2d09d09115f22dcc39fe61f5e1ba0ff6e8b4acb4c6da748be7f3f0839739394ff7fa8e39f7f7e84a33c3866875c01bcb1263c9405d91908e9e0b50e7459fabb63d8c6bbb73d8e3483c099b55bc30ff092ff68b6adedfd477d63570c9f5515847f36e24ba0b705557130cec57ebad1d0b31a378e91894ee26e3a04" #h"6b8bc6211fe5001e07b7d20e0c49d314211e3893a39da241b8839bb3a494f9a2fd8561009d22cca1330a69362b386e715f1dbe6291dbeecfadf196da47e53198") (:digest-test #h"8b8d68bb8a75732fe272815a68a1c9c5aa31b41dedc8493e76525d1d013d33cebd9e21a5bb95db2616976a8c07fcf411f5f6bc6f7e0b57aca78cc2790a6f9b898858ac9c79b165ff24e66677531e39f572be5d81eb3264524181115f32780257bfb9aeec6af12af28e587cac068a1a2953b59ad680f4c245b2e3ec36f59940d37e1d3db38e13edb29b5c0f404f6ff87f80fc8be7a225ff22fbb9c8b6b1d7330c57840d24bc75b06b80d30dad6806544d510af6c4785e823ac3e0b8" #h"d00e919dafff3d5e51ad3a3046f5e59d64b69cbcda223cb28bc370201d2c722bae74dfe0086b0eb47bdcb62fabee870c3340d46e55d8cfedf2dd3ced8a8db3f2") (:digest-test #h"6b018710446f368e7421f1bc0ccf562d9c1843846bc8d98d1c9bf7d9d6fcb48bfc3bf83b36d44c4fa93430af75cd190bde36a7f92f867f58a803900df8018150384d85d82132f123006ac2aeba58e02a037fe6afbd65eca7c44977dd3dc74f48b6e7a1bfd5cc4dcf24e4d52e92bd4455848e4928b0eac8b7476fe3cc03e862aa4dff4470dbfed6de48e410f25096487ecfc32a27277f3f5023b2725ade461b1355889554a8836c9cf53bd767f5737d55184eea1ab3f53edd0976c485" #h"cf63f28f107a509a416f9a92c4e4db4dbf00fb52c2e16d8bb9694e09f9142a904c34e1e960bd97b8cfb2c53e7660c79b841d1565cdab83293234026a23a56d12") (:digest-test #h"c9534a24714bd4be37c88a3da1082eda7cabd154c309d7bd670dccd95aa535594463058a29f79031d6ecaa9f675d1211e9359be82669a79c855ea8d89dd38c2c761ddd0ec0ce9e97597432e9a1beae062cdd71edfdfd464119be9e69d18a7a7fd7ce0e2106f0c8b0abf4715e2ca48ef9f454dc203c96656653b727083513f8efb86e49c513bb758b3b052fe21f1c05bb33c37129d6cc81f1aef6adc45b0e8827a830fe545cf57d0955802c117d23ccb55ea28f95c0d8c2f9c5a242b33f" #h"f21b8d45b6a857ce663c074c18cc54d914cdd5eb0d968e6153a5f70069345d205ddf4370ec473fc80b05f937d014c0a464582cb4a73b1b72041c5c99f576a41e") (:digest-test #h"07906c87297b867abf4576e9f3cc7f82f22b154afcbf293b9319f1b0584da6a40c27b32e0b1b7f412c4f1b82480e70a9235b12ec27090a5a33175a2bb28d8adc475cefe33f7803f8ce27967217381f02e67a3b4f84a71f1c5228e0c2ad971373f6f672624fcea8d1a9f85170fad30fa0bbd25035c3b41a6175d467998bd1215f6f3866f53847f9cf68ef3e2fbb54bc994de2302b829c5eea68ec441fcbafd7d16ae4fe9fff98bf00e5bc2ad54dd91ff9fda4dd77b6c754a91955d1fbaad0" #h"92287f42ab1a2123669c4d35f18257d3a536445f0e4d2c801e99f8529cd9e2a79205982c280c7a6cdddef24ce960ec6ca9a35f590aeebc40448c389e915fc4e0") (:digest-test #h"588e94b9054abc2189df69b8ba34341b77cdd528e7860e5defcaa79b0c9a452ad4b82aa306be84536eb7cedcbe058d7b84a6aef826b028b8a0271b69ac3605a9635ea9f5ea0aa700f3eb7835bc54611b922964300c953efe7491e3677c2cebe0822e956cd16433b02c68c4a23252c3f9e151a416b4963257b783e038f6b4d5c9f110f871652c7a649a7bcedcbccc6f2d0725bb903cc196ba76c76aa9f10a190b1d1168993baa9ffc96a1655216773458bec72b0e39c9f2c121378feab4e76a" #h"74a9d8f9f72908c7502d1c41212cd86cf4344721a6f02d390346f2baec6e6137421e6516c3235443bc2337b3a77630712a12f11b7ba24b2d7085499ba74bcb90") (:digest-test #h"08959a7e4baae874928813364071194e2939772f20db7c3157078987c557c2a6d5abe68d520eef3dc491692e1e21bcd880adebf63bb4213b50897fa005256ed41b5690f78f52855c8d9168a4b666fce2da2b456d7a7e7c17ab5f2fb1ee90b79e698712e963715983fd07641ae4b4e9dc73203fac1ae11fa1f8c7941fcc82eab247addb56e2638447e9d609e610b60ce086656aaebf1da3c8a231d7d94e2fd0afe46b391ff14a72eaeb3f44ad4df85866def43d4781a0b3578bc996c87970b132" #h"7432861132e6894bb6ae5115398198317e12cc73c0c5dfc61cb189ff5aa9fb0d62224cbb1bfa8b105784405718e6f8e15e041dad80d11ae507b33c15c6cac824") (:digest-test #h"cb2a234f45e2ecd5863895a451d389a369aab99cfef0d5c9ffca1e6e63f763b5c14fb9b478313c8e8c0efeb3ac9500cf5fd93791b789e67eac12fd038e2547cc8e0fc9db591f33a1e4907c64a922dda23ec9827310b306098554a4a78f050262db5b545b159e1ff1dca6eb734b872343b842c57eafcfda8405eedbb48ef32e99696d135979235c3a05364e371c2d76f1902f1d83146df9495c0a6c57d7bf9ee77e80f9787aee27be1fe126cdc9ef893a4a7dcbbc367e40fe4e1ee90b42ea25af01" #h"6af4ff4c423051e3306ace812e5cfa85532b73deef0dfe601d2630632389d0fab2a109214d32508d2391775665b87a94d1df29db1214cb48dec10dbd3d8cf591") (:digest-test #h"d16beadf02ab1d4dc6f88b8c4554c51e866df830b89c06e786a5f8757e8909310af51c840efe8d20b35331f4355d80f73295974653ddd620cdde4730fb6c8d0d2dcb2b45d92d4fbdb567c0a3e86bd1a8a795af26fbf29fc6c65941cddb090ff7cd230ac5268ab4606fccba9eded0a2b5d014ee0c34f0b2881ac036e24e151be89eeb6cd9a7a790afccff234d7cb11b99ebf58cd0c589f20bdac4f9f0e28f75e3e04e5b3debce607a496d848d67fa7b49132c71b878fd5557e082a18eca1fbda94d4b" #h"4648d263b608cf28ca65b28a361ebb00e0784c65ab1d55c46a785737b6c8d83dd52e3367d898921ea36dada42d893800d0bfcf86554cdf5e7630d60a2e8ee29f") (:digest-test #h"8f65f6bc59a85705016e2bae7fe57980de3127e5ab275f573d334f73f8603106ec3553016608ef2dd6e69b24be0b7113bf6a760ba6e9ce1c48f9e186012cf96a1d4849d75df5bb8315387fd78e9e153e76f8ba7ec6c8849810f59fb4bb9b004318210b37f1299526866f44059e017e22e96cbe418699d014c6ea01c9f0038b10299884dbec3199bb05adc94e955a1533219c1115fed0e5f21228b071f40dd57c4240d98d37b73e412fe0fa4703120d7c0c67972ed233e5deb300a22605472fa3a3ba86" #h"dbd3732440010595ab26f84efeb07732227a7b7b52d6ff339c7ff1b6442249202ae33a0aef5167f5b0474d74a5b50cdb033d6c5c72894a3686fe6ecb36e357f3") (:digest-test #h"84891e52e0d451813210c3fd635b39a03a6b7a7317b221a7abc270dfa946c42669aacbbbdf801e1584f330e28c729847ea14152bd637b3d0f2b38b4bd5bf9c791c58806281103a3eabbaede5e711e539e6a8b2cf297cf351c078b4fa8f7f35cf61bebf8814bf248a01d41e86c5715ea40c63f7375379a7eb1d78f27622fb468ab784aaaba4e534a6dfd1df6fa15511341e725ed2e87f98737ccb7b6a6dfae416477472b046bf1811187d151bfa9f7b2bf9acdb23a3be507cdf14cfdf517d2cb5fb9e4ab6" #h"c24d4054110889290cbc40b82ad8599229d8e86e4ce76bddbbb6f5386223512c9d7e00973c706442b2c80edd20904067af8e4e681aecbfadc6aa15a2ebfe7ddd") (:digest-test #h"fdd7a9433a3b4afabd7a3a5e3457e56debf78e84b7a0b0ca0e8c6d53bd0c2dae31b2700c6128334f43981be3b213b1d7a118d59c7e6b6493a86f866a1635c12859cfb9ad17460a77b4522a5c1883c3d6acc86e6162667ec414e9a104aa892053a2b1d72165a855bacd8faf8034a5dd9b716f47a0818c09bb6baf22aa503c06b4ca261f557761989d2afbd88b6a678ad128af68672107d0f1fc73c5ca740459297b3292b281e93bceb761bde7221c3a55708e5ec84472cddcaa84ecf23723cc0991355c6280" #h"4a6404d278a0ba70488c18d7d1861cde26fd57d66a9affe74f1e646e616003a52fe42520504ac4ace5ca6665cf9155f44ecaa05d55f80fe9794ade17871c5728") (:digest-test #h"70a40bfbef92277a1aad72f6b79d0177197c4ebd432668cfec05d099accb651062b5dff156c0b27336687a94b26679cfdd9daf7ad204338dd9c4d14114033a5c225bd11f217b5f4732da167ee3f939262d4043fc9cba92303b7b5e96aea12adda64859df4b86e9ee0b58e39091e6b188b408ac94e1294a8911245ee361e60e601eff58d1d37639f3753bec80ebb4efde25817436076623fc65415fe51d1b0280366d12c554d86743f3c3b6572e400361a60726131441ba493a83fbe9afda90f7af1ae717238d" #h"fffd1b1e31377dff00b492295bccc735733b021f47bb4afba6549ea6c1ba3832e8587099ad0cc216af5899ac683eb7c246871e21c30feef9bceedfc78d0c966c") (:digest-test #h"74356e449f4bf8644f77b14f4d67cb6bd9c1f5ae357621d5b8147e562b65c66585caf2e491b48529a01a34d226d436959153815380d5689e30b35357cdac6e08d3f2b0e88e200600d62bd9f5eaf488df86a4470ea227006182e44809009868c4c280c43d7d64a5268fa719074960087b3a6abc837882f882c837834535929389a12b2c78187e2ea07ef8b8eef27dc85002c3ae35f1a50bee6a1c48ba7e175f3316670b27983472aa6a61eed0a683a39ee323080620ea44a9f74411ae5ce99030528f9ab49c79f2" #h"33c8f40e1bd1eb1a3a70d2071d27460ef0f6b2d3ece373743842d6b928f3771e4b7446a9ecfbbf552c064f6b26095401097581c38b95e9551119a1fdcb3d58e7") (:digest-test #h"8c3798e51bc68482d7337d3abb75dc9ffe860714a9ad73551e120059860dde24ab87327222b64cf774415a70f724cdf270de3fe47dda07b61c9ef2a3551f45a5584860248fabde676e1cd75f6355aa3eaeabe3b51dc813d9fb2eaa4f0f1d9f834d7cad9c7c695ae84b329385bc0bef895b9f1edf44a03d4b410cc23a79a6b62e4f346a5e8dd851c2857995ddbf5b2d717aeb847310e1f6a46ac3d26a7f9b44985af656d2b7c9406e8a9e8f47dcb4ef6b83caacf9aefb6118bfcff7e44bef6937ebddc89186839b77" #h"2a11cb6921ea662a39ddee7982e3cf5b317195661d5505ad04d11ee23e178ed65f3e06a7f096f4eaf1ff6a09239cf5a0a39dc9f4c92af63fdf7211e1cf467653") (:digest-test #h"fa56bf730c4f8395875189c10c4fb251605757a8fecc31f9737e3c2503b02608e6731e85d7a38393c67de516b85304824bfb135e33bf22b3a23b913bf6acd2b7ab85198b8187b2bcd454d5e3318cacb32fd6261c31ae7f6c54ef6a7a2a4c9f3ecb81ce3555d4f0ad466dd4c108a90399d70041997c3b25345a9653f3c9a6711ab1b91d6a9d2216442da2c973cbd685ee7643bfd77327a2f7ae9cb283620a08716dfb462e5c1d65432ca9d56a90e811443cd1ecb8f0de179c9cb48ba4f6fec360c66f252f6e64edc96b" #h"9196bbbd194541ffee7edbab970738bdd3aadbd6b73d1c85b580afac1232ae8077f743ce8b5b6f2b418b5134cccd4f83645e8631885b14fbbcb909a9836c374c") (:digest-test #h"b6134f9c3e91dd8000740d009dd806240811d51ab1546a974bcb18d344642baa5cd5903af84d58ec5ba17301d5ec0f10ccd0509cbb3fd3fff9172d193af0f782252fd1338c7244d40e0e42362275b22d01c4c3389f19dd69bdf958ebe28e31a4ffe2b5f18a87831cfb7095f58a87c9fa21db72ba269379b2dc2384b3da953c7925761fed324620acea435e52b424a7723f6a2357374157a34cd8252351c25a1b232826cefe1bd3e70ffc15a31e7c0598219d7f00436294d11891b82497bc78aa5363892a2495df8c1eef" #h"1959cae3600f128f72e1821c337d841b14cbbfef3a6d22286f18bdfc3ef63528c11bffa841a6d2208afeb5664d524de83090ab0db07cd47ef52f4d2eaa8454ce") (:digest-test #h"c941cdb9c28ab0a791f2e5c8e8bb52850626aa89205bec3a7e22682313d198b1fa33fc7295381354858758ae6c8ec6fac3245c6e454d16fa2f51c4166fab51df272858f2d603770c40987f64442d487af49cd5c3991ce858ea2a60dab6a65a34414965933973ac2457089e359160b7cdedc42f29e10a91921785f6b7224ee0b349393cdcff6151b50b377d609559923d0984cda6000829b916ab6896693ef6a2199b3c22f7dc5500a15b8258420e314c222bc000bc4e5413e6dd82c993f8330f5c6d1be4bc79f08a1a0a46" #h"a913ddc5bb089c121ff093be529225148df787d48f4f61699eff9fc2910282a898a81a38d66be9b06428d6466a614ca822a872c1c2c4d503d434d3b1d6942102") (:digest-test #h"4499efffac4bcea52747efd1e4f20b73e48758be915c88a1ffe5299b0b005837a46b2f20a9cb3c6e64a9e3c564a27c0f1c6ad1960373036ec5bfe1a8fc6a435c2185ed0f114c50e8b3e4c7ed96b06a036819c9463e864a58d6286f785e32a804443a56af0b4df6abc57ed5c2b185ddee8489ea080deeee66aa33c2e6dab36251c402682b6824821f998c32163164298e1fafd31babbcffb594c91888c6219079d907fdb438ed89529d6d96212fd55abe20399dbefd342248507436931cdead496eb6e4a80358acc78647d043" #h"f10b91564ad93d734743281949bacef065a6432a455236f1bf798de9aec6ccac9b8d373b07c5acfbd676ef21e4a3a9e0f7c38e8756d177d0a5c283d520844b4d") (:digest-test #h"eecbb8fdfa4da62170fd06727f697d81f83f601ff61e478105d3cb7502f2c89bf3e8f56edd469d049807a38882a7eefbc85fc9a950952e9fa84b8afebd3ce782d4da598002827b1eb98882ea1f0a8f7aa9ce013a6e9bc462fb66c8d4a18da21401e1b93356eb12f3725b6db1684f2300a98b9a119e5d27ff704affb618e12708e77e6e5f34139a5a41131fd1d6336c272a8fc37080f041c71341bee6ab550cb4a20a6ddb6a8e0299f2b14bc730c54b8b1c1c487b494bdccfd3a53535ab2f231590bf2c4062fd2ad58f906a2d0d" #h"ef26a1baf33d4de047bdd2ce34736e042ecd33aa569ffc0cb81ecfa66e9f87da8d025ecba24bcb187e4201046fb99a02dfa6f1bf88ec2b88de216cf759fac41d") (:digest-test #h"e64f3e4ace5c8418d65fec2bc5d2a303dd458034736e3b0df719098be7a206deaf52d6ba82316caf330ef852375188cde2b39cc94aa449578a7e2a8e3f5a9d68e816b8d16889fbc0ebf0939d04f63033ae9ae2bdab73b88c26d6bd25ee460ee1ef58fb0afa92cc539f8c76d3d097e7a6a63ebb9b5887edf3cf076028c5bbd5b9db3211371ad3fe121d4e9bf44229f4e1ecf5a0f9f0eba4d5ceb72878ab22c3f0eb5a625323ac66f7061f4a81fac834471e0c59553f108475fe290d43e6a055ae3ee46fb67422f814a68c4be3e8c9" #h"f8e079a6dc5a6a7e7f32ff7e8015d1b26d43b54f166f2111cfb2b1eb238cabee58630ef845e0db00ddf1d800ad67ce7b2b658b42118cc15c8ef3bc9fb252db64") (:digest-test #h"d2cb2d733033f9e91395312808383cc4f0ca974e87ec68400d52e96b3fa6984ac58d9ad0938dde5a973008d818c49607d9de2284e7618f1b8aed8372fbd52ed54557af4220fac09dfa8443011699b97d743f8f2b1aef3537ebb45dcc9e13dfb438428ee190a4efdb3caeb7f3933117bf63abdc7e57beb4171c7e1ad260ab0587806c4d137b6316b50abc9cce0dff3acada47bbb86be777e617bbe578ff4519844db360e0a96c6701290e76bb95d26f0f804c8a4f2717eac4e7de9f2cff3bbc55a17e776c0d02856032a6cd10ad2838" #h"a5bfaa52499a688d9c8d3ddc0ba06decdf3829be5d444acfa412f4c6e863f4786be9935805310734e4f0affe05558999807408e97e100fadd0c93ff160f8b11b") (:digest-test #h"f2998955613dd414cc111df5ce30a995bb792e260b0e37a5b1d942fe90171a4ac2f66d4928d7ad377f4d0554cbf4c523d21f6e5f379d6f4b028cdcb9b1758d3b39663242ff3cb6ede6a36a6f05db3bc41e0d861b384b6dec58bb096d0a422fd542df175e1be1571fb52ae66f2d86a2f6824a8cfaacbac4a7492ad0433eeb15454af8f312b3b2a577750e3efbd370e8a8cac1582581971fba3ba4bd0d76e718dacf8433d33a59d287f8cc92234e7a271041b526e389efb0e40b6a18b3aaf658e82ed1c78631fd23b4c3eb27c3faec8685" #h"ccea9fcf1ad93270ac4690e96b875122c5b5ec20d2cc27079cbf893126c44e0208a8bfa139057d72bd2638059ec8da8a720499af9d4c117f86799d7515dfc6e0") (:digest-test #h"447797e2899b72a356ba55bf4df3acca6cdb1041eb477bd1834a9f9acbc340a294d729f2f97df3a610be0ff15edb9c6d5db41644b9874360140fc64f52aa03f0286c8a640670067a84e017926a70438db1bb361defee7317021425f8821def26d1efd77fc853b818545d055adc9284796e583c76e6fe74c9ac2587aa46aa8f8804f2feb5836cc4b3ababab8429a5783e17d5999f32242eb59ef30cd7adabc16d72dbdb097623047c98989f88d14eaf02a7212be16ec2d07981aaa99949ddf89ecd90333a77bc4e1988a82abf7c7caf3291" #h"2efc5dfe028a35503a25bdf8b2164d86ca7496b7c5ded09c5d414b6977adbb4a6988ab9939d1ec65f46bcc99c1dcd5f19e035d8d3dc387361200e4da80c80671") (:digest-test #h"9f2c18ade9b380c784e170fb763e9aa205f64303067eb1bcea93df5dac4bf5a2e00b78195f808df24fc76e26cb7be31dc35f0844cded1567bba29858cffc97fb29010331b01d6a3fb3159cc1b973d255da9843e34a0a4061cabdb9ed37f241bfabb3c20d32743f4026b59a4ccc385a2301f83c0b0a190b0f2d01acb8f0d41111e10f2f4e149379275599a52dc089b35fdd5234b0cfb7b6d8aebd563ca1fa653c5c021dfd6f5920e6f18bfafdbecbf0ab00281333ed50b9a999549c1c8f8c63d7626c48322e9791d5ff72294049bde91e73f8" #h"e80d7a934fdaf17db8dbb1dc6c42e90e139211c2f599890c06b15d6248fdbe682d77d4e05f26d72852f7492bce118ce7c36950bd2c50f9699bb47d89c3115377") (:digest-test #h"ae159f3fa33619002ae6bcce8cbbdd7d28e5ed9d61534595c4c9f43c402a9bb31f3b301cbfd4a43ce4c24cd5c9849cc6259eca90e2a79e01ffbac07ba0e147fa42676a1d668570e0396387b5bcd599e8e66aaed1b8a191c5a47547f61373021fa6deadcb55363d233c24440f2c73dbb519f7c9fa5a8962efd5f6252c0407f190dfefad707f3c7007d69ff36b8489a5b6b7c557e79dd4f50c06511f599f56c896b35c917b63ba35c6ff8092baf7d1658e77fc95d8a6a43eeb4c01f33f03877f92774be89c1114dd531c011e53a34dc248a2f0e6" #h"c414b29fd07720f46c351f5c80be2094e95d13ad97bdd1f7c5207b695693cd5e1e0169b1aa2e271115bd5171fec51d04b71e3e7ce1618fbfeb382f56f65f7eff") (:digest-test #h"3b8e97c5ffc2d6a40fa7de7fcefc90f3b12c940e7ab415321e29ee692dfac799b009c99dcddb708fce5a178c5c35ee2b8617143edc4c40b4d313661f49abdd93cea79d117518805496fe6acf292c4c2a1f76b403a97d7c399daf85b46ad84e16246c67d6836757bde336c290d5d401e6c1386ab32797af6bb251e9b2d8fe754c47482b72e0b394eab76916126fd68ea7d65eb93d59f5b4c5ac40f7c3b37e7f3694f29424c24af8c8f0ef59cd9dbf1d28e0e10f799a6f78cad1d45b9db3d7dee4a7059abe99182714983b9c9d44d7f5643596d4f3" #h"a4679a4cbee6292203bafba8913245f30e046aba6c0937b407c00b73d17d8d696690ee25ba1b39deb3db93525a8fbcfd88173ba9c7a65b4406d0550ba9b6cc07") (:digest-test #h"3434ec31b10fafdbfeec0dd6bd94e80f7ba9dca19ef075f7eb017512af66d6a4bcf7d16ba0819a1892a6372f9b35bcc7ca8155ee19e8428bc22d214856ed5fa9374c3c09bde169602cc219679f65a1566fc7316f4cc3b631a18fb4449fa6afa16a3db2bc4212eff539c67cf184680826535589c7111d73bffce431b4c40492e763d9279560aaa38eb2dc14a212d723f994a1fe656ff4dd14551ce4e7c621b2aa5604a10001b2878a897a28a08095c325e10a26d2fb1a75bfd64c250309bb55a44f23bbac0d5516a1c687d3b41ef2fbbf9cc56d4739" #h"5f49d6594da939987d1906294b33a037f63c79e078531dfa7e6ce67279d4d5dbeb650ff8690f23b63b7e9c48ea8791b80fdb34ef66dcf0cefe45842ecff4ad1d") (:digest-test #h"7c7953d81c8d208fd1c97681d48f49dd003456de60475b84070ef4847c333b74575b1fc8d2a186964485a3b8634feaa3595aaa1a2f4595a7d6b6153563dee31bbac443c8a33eed6d5d956a980a68366c2527b550ee950250dfb691eacbd5d56ae14b970668be174c89df2fea43ae52f13142639c884fd62a3683c0c3792f0f24ab1318bcb27e21f4737fab62c77ea38bc8fd1cf41f7dab64c13febe7152bf5bb7ab5a78f5346d43cc741cb6f72b7b8980f268b68bf62abdfb1577a52438fe14b591498cc95f071228460c7c5d5ceb4a7bde588e7f21c" #h"b77fb79669ea52c738e58a9ef3ed1501bbe7974478afb5a8bed44549d6232ff8d7aa9eeeaf02f6755327951093243110d7bcfc0e51299db793856b57a77e8420") (:digest-test #h"7a6a4f4fdc59a1d223381ae5af498d74b7252ecf59e389e49130c7eaee626e7bd9897effd92017f4ccde66b0440462cdedfd352d8153e6a4c8d7a0812f701cc737b5178c2556f07111200eb627dbc299caa792dfa58f35935299fa3a3519e9b03166dffa159103ffa35e8577f7c0a86c6b46fe13db8e2cdd9dcfba85bdddcce0a7a8e155f81f712d8e9fe646153d3d22c811bd39f830433b2213dd46301941b59293fd0a33e2b63adbd95239bc01315c46fdb678875b3c81e053a40f581cfbec24a1404b1671a1b88a6d06120229518fb13a74ca0ac5ae" #h"caca0ff43107f730a7fbe6869fba5af1e626c96303be3bc95155164199c88922194511b24c48911186f647ca246427f2ce7ba747271cd8d7c5e1d127c21f1eaa") (:digest-test #h"d9faa14cebe9b7de551b6c0765409a33938562013b5e8e0e1e0a6418df7399d0a6a771fb81c3ca9bd3bb8e2951b0bc792525a294ebd1083688806fe5e7f1e17fd4e3a41d00c89e8fcf4a363caedb1acb558e3d562f1302b3d83bb886ed27b76033798131dab05b4217381eaaa7ba15ec820bb5c13b516dd640eaec5a27d05fdfca0f35b3a5312146806b4c0275bcd0aaa3b2017f346975db566f9b4d137f4ee10644c2a2da66deeca5342e236495c3c6280528bfd32e90af4cd9bb908f34012b52b4bc56d48cc8a6b59bab014988eabd12e1a0a1c2e170e7" #h"e5106b2a0d49d6d1e13e3323232101cea5da71caa24e70efcac57e0ccf156cdf4c2492b03ce0e13437018dab76b9c989883bea69e849f33bb937a397b84ada6a") (:digest-test #h"2d8427433d0c61f2d96cfe80cf1e932265a191365c3b61aaa3d6dcc039f6ba2ad52a6a8cc30fc10f705e6b7705105977fa496c1c708a277a124304f1fc40911e7441d1b5e77b951aad7b01fd5db1b377d165b05bbf898042e39660caf8b279fe5229d1a8db86c0999ed65e53d01ccbc4b43173ccf992b3a14586f6ba42f5fe30afa8ae40c5df29966f9346da5f8b35f16a1de3ab6de0f477d8d8660918060e88b9b9e9ca6a4207033b87a812dbf5544d39e4882010f82b6ce005f8e8ff6fe3c3806bc2b73c2b83afb704345629304f9f86358712e9fae3ca3e" #h"faee462e4bced12ad54d3757d644396ed9203037741661aea32bccadae568c4bdc925eda76610e964fbe3fb26b33bc0bc123ddf9b528715317ce5c92e00ac96f") (:digest-test #h"5e19d97887fcaac0387e22c6f803c34a3dacd2604172433f7a8a7a526ca4a2a1271ecfc5d5d7be5ac0d85d921095350dfc65997d443c21c8094e0a3fefd2961bcb94aed03291ae310ccda75d8ace4bc7d89e7d3e5d1650bda5d668b8b50bfc8e608e184f4d3a9a2badc4ff5f07e0c0bc8a9f2e0b2a26fd6d8c550008faaab75fd71af2a424bec9a7cd9d83fad4c8e9319115656a8717d3b523a68ff8004258b9990ed362308461804ba3e3a7e92d8f2ffae5c2fba55ba5a3c27c0a2f71bd711d2fe1799c2adb31b200035481e9ee5c4adf2ab9c0fa50b23975cf" #h"fbe25b43e540104a3aade897838c63511928af5add4f952f1e6d4c39e70c923df191faa36f46b21f827d9b437996ff7206f73337cf20c6b0db748a707455b420") (:digest-test #h"c8e976ab4638909387ce3b8d4e510c3230e5690e02c45093b1d297910abc481e56eea0f296f98379dfc9080af69e73b2399d1c143bee80ae1328162ce1ba7f6a8374679b20aacd380eb4e61382c99998704d62701afa914f9a2705cdb065885f50d086c3eb5753700c387118bb142f3e6da1e988dfb31ac75d7368931e45d1391a274b22f83ceb072f9bcabc0b216685bfd789f5023971024b1878a205442522f9ea7d8797a4102a3df41703768251fd5e017c85d1200a464118aa35654e7ca39f3c375b8ef8cbe7534dbc64bc20befb417cf60ec92f63d9ee7397" #h"0a41a004573e0a983fe9c93bd57439a20c8f99b800a60d4a07117e8d9b25c0ee38bab3cdb6fc9216b8e07f0ccdd028c418ef97b6d7e15decde7425497644e2e4") (:digest-test #h"7145fa124b7429a1fc2231237a949ba7201bcc1822d3272de005b682398196c25f7e5cc2f289fbf44415f699cb7fe6757791b1443410234ae061edf623359e2b4e32c19bf88450432dd01caa5eb16a1dc378f391ca5e3c4e5f356728bddd4975db7c890da8bbc84cc73ff244394d0d48954978765e4a00b593f70f2ca082673a261ed88dbcef1127728d8cd89bc2c597e9102ced6010f65fa75a14ebe467fa57ce3bd4948b6867d74a9df5c0ec6f530cbf2ee61ce6f06bc8f2864dff5583776b31df8c7ffcb61428a56bf7bd37188b4a5123bbf338393af46eda85e6" #h"ff081507f979f69c6743e42ee758858713b570cb48ff85ef0d728c4e1bb5456d035e498c05ea4cebd820e134bb252ac76ba4949a4fad76871a9972ae2fccceea") (:digest-test #h"7fdfadcc9d29bad23ae038c6c65cda1aef757221b8872ed3d75ff8df7da0627d266e224e812c39f7983e4558bfd0a1f2bef3feb56ba09120ef762917b9c093867948547aee98600d10d87b20106878a8d22c64378bf634f7f75900c03986b077b0bf8b740a82447b61b99fee5376c5eb6680ec9e3088f0bdd0c56883413d60c1357d3c811950e5890e7600103c916341b80c743c6a852b7b4fb60c3ba21f3bc15b8382437a68454779cf3cd7f9f90ccc8ef28d0b706535b1e4108eb5627bb45d719cb046839aee311ca1abdc8319e050d67972cb35a6b1601b25dbf487" #h"03444ae8319ebd121e7707b9cdfd1fdfd52f3d6b3d4bcb2748af421a3c8666c22d8c0d8a096767b1cd16a8d54738c5f67a6f9d48c90827be71691a42be87108b") (:digest-test #h"988638219fd3095421f826f56e4f09e356296b628c3ce6930c9f2e758fd1a80c8273f2f61e4daae65c4f110d3e7ca0965ac7d24e34c0dc4ba2d6ff0bf5bbe93b3585f354d7543cb542a1aa54674d375077f2d360a8f4d42f3db131c3b7ab7306267ba107659864a90c8c909460a73621d1f5d9d3fd95beb19b23db1cb6c0d0fba91d36891529b8bd8263caa1bab56a4affaed44962df096d8d5b1eb845ef31188b3e10f1af811a13f156beb7a288aae593ebd1471b624aa1a7c6adf01e2200b3d72d88a3aed3100c88231e41efc376906f0b580dc895f080fda5741db1cb" #h"5ee0a4459724037b7318815a80147c172d6c8f8874c9a0057706fb3e300fe936815f07672e6447b771de699dfadf345c3bb5974cf019315fadd5534dff6a079c") (:digest-test #h"5aab62756d307a669d146aba988d9074c5a159b3de85151a819b117ca1ff6597f6156e80fdd28c9c3176835164d37da7da11d94e09add770b68a6e081cd22ca0c004bfe7cd283bf43a588da91f509b27a6584c474a4a2f3ee0f1f56447379240a5ab1fb77fdca49b305f07ba86b62756fb9efb4fc225c86845f026ea542076b91a0bc2cdd136e122c659be259d98e5841df4c2f60330d4d8cdee7bf1a0a244524eecc68ff2aef5bf0069c9e87a11c6e519de1a4062a10c83837388f7ef58598a3846f49d499682b683c4a062b421594fafbc1383c943ba83bdef515efcf10d" #h"54085a2f9c327e5d8ee225eff5bd2c2837e44e8057cf1691e6202050079d26851061c4da8d88fc19237e5b658950e66866e92019d9e425e2416240a59d25a6cf") (:digest-test #h"47b8216aa0fbb5d67966f2e82c17c07aa2d6327e96fcd83e3de7333689f3ee79994a1bf45082c4d725ed8d41205cb5bcdf5c341f77facb1da46a5b9b2cbc49eadf786bcd881f371a95fa17df73f606519aea0ff79d5a11427b98ee7f13a5c00637e2854134691059839121fea9abe2cd1bcbbbf27c74caf3678e05bfb1c949897ea01f56ffa4dafbe8644611685c617a3206c7a7036e4ac816799f693dafe7f19f303ce4eba09d21e03610201bfc665b72400a547a1e00fa9b7ad8d84f84b34aef118515e74def11b9188bd1e1f97d9a12c30132ec2806339bdadacda2fd8b78" #h"3ea49b6abd39cdf04bccd648fb7e1f8ae3dae9d3e3a5eab9ce29be356defbbbeb1bb93ae40d31cc1f011dcc6c6ac85b102f2654e2dbbac47333bcdb4758a1a28") (:digest-test #h"8cff1f67fe53c098896d9136389bd8881816ccab34862bb67a656e3d98896f3ce6ffd4da73975809fcdf9666760d6e561c55238b205d8049c1cedeef374d1735daa533147bfa960b2cce4a4f254176bb4d1bd1e89654432b8dbe1a135c42115b394b024856a2a83dc85d6782be4b444239567ccec4b184d4548eae3ff6a192f343292ba2e32a0f267f31cc26719eb85245d415fb897ac2da433ee91a99424c9d7f1766a44171d1651001c38fc79294accc68ceb5665d36218454d3ba169ae058a831338c17743603f81ee173bfc0927464f9bd728dee94c6aeab7aae6ee3a627e8" #h"b3851790ca47575dbf988f82c3b501dc8390a8e8598698166167567a0332913ccc8868584db4acfb2c9dc0f0a6833292f4dcedc47cf003217689bc2422b53b93") (:digest-test #h"eacd07971cff9b9939903f8c1d8cbb5d4db1b548a85d04e037514a583604e787f32992bf2111b97ac5e8a938233552731321522ab5e8583561260b7d13ebeef785b23a41fd8576a6da764a8ed6d822d4957a545d5244756c18aa80e1aad4d1f9c20d259dee1711e2cc8fd013169fb7cc4ce38b362f8e0936ae9198b7e838dcea4f7a5b9429bb3f6bbcf2dc92565e3676c1c5e6eb3dd2a0f86aa23edd3d0891f197447692794b3dfa269611ad97f72b795602b4fdb198f3fd3eb41b415064256e345e8d8c51c555dc8a21904a9b0f1ad0effab7786aac2da3b196507e9f33ca356427" #h"a710cb26c632f289504cd0039ba6ab9b4d3524c52b286d466e2f8939f8684e3f18dca298a2ba67eb710997b7bb10ae279438b9b4868d0adb248f282bb440a130") (:digest-test #h"23ac4e9a42c6ef45c3336ce6dfc2ff7de8884cd23dc912fef0f7756c09d335c189f3ad3a23697abda851a81881a0c8ccafc980ab2c702564c2be15fe4c4b9f10dfb2248d0d0cb2e2887fd4598a1d4acda897944a2ffc580ff92719c95cf2aa42dc584674cb5a9bc5765b9d6ddf5789791d15f8dd925aa12bffafbce60827b490bb7df3dda6f2a143c8bf96abc903d83d59a791e2d62814a89b8080a28060568cf24a80ae61179fe84e0ffad00388178cb6a617d37efd54cc01970a4a41d1a8d3ddce46edbba4ab7c90ad565398d376f431189ce8c1c33e132feae6a8cd17a61c630012" #h"8f677a8089052b47be60c0bb7666e403a5daa5e28a2b632f2e496c587f1fdca0ee33d9e78daa4ef575b13389748b8c24110053b0b96a082c06c3f80ebe8de976") (:digest-test #h"0172df732282c9d488669c358e3492260cbe91c95cfbc1e3fea6c4b0ec129b45f242ace09f152fc6234e1bee8aab8cd56e8b486e1dcba9c05407c2f95da8d8f1c0af78ee2ed82a3a79ec0cb0709396ee62aadb84f8a4ee8a7ccca3c1ee84e302a09ea802204afecf04097e67d0f8e8a9d2651126c0a598a37081e42d168b0ae8a71951c524259e4e2054e535b779679bdade566fe55700858618e626b4a0faf895bcce9011504a49e05fd56127eae3d1f8917afb548ecadabda1020111fec9314c413498a360b08640549a22cb23c731ace743252a8227a0d2689d4c6001606678dfb921" #h"ce631e6f2c2dc5738c0fa958571773b58af130b94824331419ee57e2691ce5f29db3d8fe456cd1e7cdc07f6105fa1b6fd729c2b419008ccd889169c3385db1b9") (:digest-test #h"3875b9240cf3e0a8b59c658540f26a701cf188496e2c2174788b126fd29402d6a75453ba0635284d08835f40051a2a9683dc92afb9383719191231170379ba6f4adc816fecbb0f9c446b785bf520796841e58878b73c58d3ebb097ce4761fdeabe15de2f319dfbaf1742cdeb389559c788131a6793e193856661376c81ce9568da19aa6925b47ffd77a43c7a0e758c37d69254909ff0fbd415ef8eb937bcd49f91468b49974c07dc819abd67395db0e05874ff83dddab895344abd0e7111b2df9e58d76d85ad98106b36295826be04d435615595605e4b4bb824b33c4afeb5e7bb0d19f909" #h"fff677bb58909c158ea677be704253505b106af934f639abfec63bd0c63097aa4bf032fe924149dd991d335e1c44c0220e4d13cbc41b6a98fb5a05faa3fe15b3") (:digest-test #h"747cc1a59fefba94a9c75ba866c30dc5c1cb0c0f8e9361d98484956dd5d1a40f6184afbe3dac9f76028d1caeccfbf69199c6ce2b4c092a3f4d2a56fe5a33a00757f4d7dee5dfb0524311a97ae0668a47971b95766e2f6dd48c3f57841f91f04a00ad5ea70f2d479a2620dc5cd78eaab3a3b011719b7e78d19ddf70d9423798af77517ebc55392fcd01fc600d8d466b9e7a7a85bf33f9cc5419e9bd874ddfd60981150ddaf8d7febaa4374f0872a5628d318000311e2f5655365ad4d407c20e5c04df17a222e7deec79c5ab1116d8572f91cd06e1ccc7ced53736fc867fd49ecebe6bf8082e8a" #h"451ee587226c99989f5ec10050983b1fd661228a4ab48618f1d1173c94fac39ecfd3c26c16653633b26097e31a0f2213b4f1153a57cb48a70d2af1adeb1bbc06") (:digest-test #h"57af971fccaec97435dc2ec9ef0429bcedc6b647729ea168858a6e49ac1071e706f4a5a645ca14e8c7746d65511620682c906c8b86ec901f3dded4167b3f00b06cbfac6aee3728051b3e5ff10b4f9ed8bd0b8da94303c833755b3ca3aeddf0b54bc8d6632138b5d25bab03d17b3458a9d782108006f5bb7de75b5c0ba854b423d8bb801e701e99dc4feaad59bc1c7112453b04d33ea3635639fb802c73c2b71d58a56bbd671b18fe34ed2e3dca38827d63fdb1d4fb3285405004b2b3e26081a8ff08cd6d2b08f8e7b7e90a2ab1ed7a41b1d0128522c2f8bff56a7fe67969422ce839a9d4608f03" #h"f9d6ad8686125e71fe0856e806d68ba97ef123443938d28283387f33e3ac6e2a7de042a3ee5f7994c1eecc5b6f22cbae1349cab2fb7a0a0125ec2320320858d4") (:digest-test #h"04e16dedc1227902baaf332d3d08923601bdd64f573faa1bb7201918cfe16b1e10151dae875da0c0d63c59c3dd050c4c6a874011b018421afc4623ab0381831b2da2a8ba42c96e4f70864ac44e106f94311051e74c77c1291bf5db9539e69567bf6a11cf6932bbbad33f8946bf5814c066d851633d1a513510039b349939bfd42b858c21827c8ff05f1d09b1b0765dc78a135b5ca4dfba0801bcaddfa175623c8b647eacfb4444b85a44f73890607d06d507a4f8393658788669f6ef4deb58d08c50ca0756d5e2f49d1a7ad73e0f0b3d3b5f090acf622b1878c59133e4a848e05153592ea81c6fbf" #h"f26f3268fd620fc476a49aac3ed1580864934a2f6ba881ed8c8fb757aaaa64bcdf501e1913de600bbef6f12c949fea8fd68c645086d5e30c9253588ffbd19be5") (:digest-test #h"7c815c384eee0f288ece27cced52a01603127b079c007378bc5d1e6c5e9e6d1c735723acbbd5801ac49854b2b569d4472d33f40bbb8882956245c366dc3582d71696a97a4e19557e41e54dee482a14229005f93afd2c4a7d8614d10a97a9dfa07f7cd946fa45263063ddd29db8f9e34db60daa32684f0072ea2a9426ecebfa5239fb67f29c18cbaa2af6ed4bf4283936823ac1790164fec5457a9cba7c767ca59392d94cab7448f50eb34e9a93a80027471ce59736f099c886dea1ab4cba4d89f5fc7ae2f21ccd27f611eca4626b2d08dc22382e92c1efb2f6afdc8fdc3d2172604f5035c46b8197d3" #h"080845d6fd22a00b30fa01a4b4f81fdc7b46ca4c6a676ad5863a9dbf6611ba97f24fb59bb5bac4e376b3b8b3357166782876b701273ff351bc8c5805532767d4") (:digest-test #h"e29d505158dbdd937d9e3d2145658ee6f5992a2fc790f4f608d9cdb44a091d5b94b88e81fac4fdf5c49442f13b911c55886469629551189eaff62488f1a479b7db11a1560e198ddccccf50159093425ff7f1cb8d1d1246d0978764087d6bac257026b090efae8cec5f22b6f21c59ace1ac7386f5b8837ca6a12b6fbf5534dd0560ef05ca78104d3b943ddb220feaec89aa5e692a00f822a2ab9a2fe60350d75e7be16ff2526dc643872502d01f42f188abed0a6e9a6f5fd0d1ce7d5755c9ffa66b0af0b20bd806f08e06156690d81ac811778ca3dac2c249b96002017fce93e507e3b953acf99964b847" #h"2678a8715fc7e538522dd7608d769508b63017d9eb6cc48f1cb07d14e741066936c8316bf3211e09f62611e140ddd14a07f97f9f372e99c084ffe289eb302bd8") (:digest-test #h"d85588696f576e65eca0155f395f0cfacd83f36a99111ed5768df2d116d2121e32357ba4f54ede927f189f297d3a97fad4e9a0f5b41d8d89dd7fe20156799c2b7b6bf9c957ba0d6763f5c3bc5129747bbb53652b49290cff1c87e2cdf2c4b95d8aaee09bc8fbfa6883e62d237885810491bfc101f1d8c636e3d0ede838ad05c207a3df4fad76452979eb99f29afaecedd1c63b8d36cf378454a1bb67a741c77ac6b6b3f95f4f02b64dabc15438613ea49750df42ee90101f115aa9abb9ff64324dde9dabbb01054e1bd6b4bcdc7930a44c2300d87ca78c06924d0323ad7887e46c90e8c4d100acd9eed21e" #h"aa03eb09417435da9e6e7803f3b6eab66faa3d59cc622950d61f9b962b69145ac2255cd752cb9607742092697b1a79d124817ae26421e61d1176764832ed354c") (:digest-test #h"3a12f8508b40c32c74492b66323375dcfe49184c78f73179f3314b79e63376b8ac683f5a51f1534bd729b02b04d002f55cbd8e8fc9b5ec1ea6bbe6a0d0e7431518e6ba45d124035f9d3dce0a8bb7bf1430a9f657e0b4ea9f20eb20c786a58181a1e20a96f1628f8728a13bdf7a4b4b32fc8aa7054cc4881ae7fa19afa65c6c3ee1b3ade3192af42054a8a911b8ec1826865d46d93f1e7c5e2b7813c92a506e53886f3d4701bb93d2a681ad109c845904bb861af8af0646b6e399b38b614051d34f6842563a0f37ec00cb3d865fc5d746c4987de2a65071100883a2a9c7a2bfe1e2dd603d9ea24dc7c5fd06be" #h"d3012f2fb56845b258d7598c0bbb2c97d53b602deae9326dc3678b2228454a1e29f28848ed140c70be85cdea9f99a8dc347deabd46d362ed1afb231146a0255d") (:digest-test #h"1861edce46fa5ad17e1ff1deae084dec580f97d0a67885dfe834b9dfac1ae076742ce9e267512ca51f6df5a455af0c5fd6abf94acea103a3370c354485a7846fb84f3ac7c2904b5b2fbf227002ce512133bb7e1c4e50057bfd1e44db33c7cdb969a99e284b184f50a14b068a1fc5009d9b298dbe92239572a7627aac02abe8f3e3b473417f36d4d2505d16b7577f4526c9d94a270a2dfe450d06da8f6fa956879a0a55cfe99e742ea555ea477ba3e9b44ccd508c375423611af92e55345dc215779b2d5119eba49c71d49b9fe3f1569fa24e5ca3e332d042422a8b8158d3ec66a80012976f31ffdf305f0c9c5e" #h"b50c896f2cdf7f105de751ff6cf664e592fab752d652b06898b9b288052df22f721ad87e702af043e6b1e88929850cbd5698a9172c3932400b2538e401a6f081") (:digest-test #h"08d0ffde3a6e4ef65608ea672e4830c12943d7187ccff08f4941cfc13e545f3b9c7ad5eebbe2b01642b486caf855c2c73f58c1e4e3391da8e2d63d96e15fd84953ae5c231911b00ad6050cd7aafdaac9b0f663ae6aab45519d0f5391a541707d479034e73a6ad805ae3598096af078f1393301493d663dd71f83869ca27ba508b7e91e81e128c1716dc3acfe3084b2201e04cf8006617eecf1b640474a5d45cfde9f4d3ef92d6d055b909892194d8a8218db6d8203a84261d200d71473d7488f3427416b6896c137d455f231071cacbc86e0415ab88aec841d96b7b8af41e05bb461a40645bf176601f1e760de5f" #h"a34a2f27c32f993a7e7007867733547481293c391255ffd0e5ccbe91e1cc749b13525af6adfa0c2d1d64bf87dd65b996ada9111c5df55bff8a5742e54b8444f6") (:digest-test #h"d782abb72a5be3392757be02d3e45be6e2099d6f000d042c8a543f50ed6ebc055a7f133b0dd8e9bc348536edcaae2e12ec18e8837df7a1b3c87ec46d50c241dee820fd586197552dc20beea50f445a07a38f1768a39e2b2ff05dddedf751f1def612d2e4d810daa3a0cc904516f9a43af660315385178a529e51f8aae141808c8bc5d7b60cac26bb984ac1890d0436ef780426c547e94a7b08f01acbfc4a3825eae04f520a9016f2fb8bf5165ed12736fc71e36a49a73614739eaa3ec834069b1b40f1350c2b3ab885c02c640b9f7686ed5f99527e41cfcd796fe4c256c9173186c226169ff257954ebda81c0e5f99" #h"dd5f4b167175d9566dca6c5b1b54a33d02efd02e25e23bb6fb02d878a4415e5e8682c209beac04e9882a272d01e8eb435caa5bcd74fc825c6b9082d041dff333") (:digest-test #h"5fce8109a358570e40983e1184e541833bb9091e280f258cfb144387b05d190e431cb19baa67273ba0c58abe91308e1844dcd0b3678baa42f335f2fa05267a0240b3c718a5942b3b3e3bfa98a55c25a1466e8d7a603722cb2bbf03afa54cd769a99f310735ee5a05dae2c22d397bd95635f58c48a67f90e1b73aafcd3f82117f0166657838691005b18da6f341d6e90fc1cdb352b30fae45d348294e501b63252de14740f2b85ae5299ddec3172de8b6d0ba219a20a23bb5e10ff434d39db3f583305e9f5c039d98569e377b75a70ab837d1df269b8a4b566f40bb91b577455fd3c356c914fa06b9a7ce24c7317a172d" #h"a43ae5dad936697564ae1bd9b8624c5c31cc36607322af40e253f10c285467afd0d08252d2bad76efa52e4775c9c26761abe38212855a80112fe02623fbf0a13") (:digest-test #h"6172f1971a6e1e4e6170afbad95d5fec99bf69b24b674bc17dd78011615e502de6f56b86b1a71d3f4348087218ac7b7d09302993be272e4a591968aef18a1262d665610d1070ee91cc8da36e1f841a69a7a682c580e836941d21d909a3afc1f0b963e1ca5ab193e124a1a53df1c587470e5881fb54dae1b0d840f0c8f9d1b04c645ba1041c7d8dbf22030a623aa15638b3d99a2c400ff76f3252079af88d2b37f35ee66c1ad7801a28d3d388ac450b97d5f0f79e4541755356b3b1a5696b023f39ab7ab5f28df4202936bc97393b93bc915cb159ea1bd7a0a414cb4b7a1ac3af68f50d79f0c9c7314e750f7d02faa58bfa" #h"a5ac23d4a0d533cb9d8a68873f5cb749228458d43ce6bd0536c8733777b5e6e3f28fd36bffe69002a0777ba74fef22de3fac4c818b4842816c6094496f968555") (:digest-test #h"5668ecd99dfbe215c4118398ac9c9eaf1a1433fab4ccdd3968064752b625ea944731f75d48a27d047d67547f14dd0ffaa55fa5e29f7af0d161d85eafc4f2029b717c918eab9d304543290bdba7158b68020c0ba4e079bc95b5bc0fc044a992b94b4ccd3bd66d0eabb5dbbab904d62e00752c4e3b0091d773bcf4c14b4377da3efff824b1cb2fa01b32d1e46c909e626ed2dae920f4c7dbeb635bc754facbd8d49beba3f23c1c41ccbfcd0ee0c114e69737f5597c0bf1d859f0c767e18002ae8e39c26261ffde2920d3d0baf0e906138696cfe5b7e32b600f45df3aaa39932f3a7df95b60fa8712a2271fcaf3911ce7b511b1" #h"07f3bcacf5f78816d515cedf1cbba4ffc58d83aa8687b0e7252faab43e7f59a7ff7415727addf9a22560adb5755a2c6df8c7e6dcaceb53106a714d807aaadbf3") (:digest-test #h"03d625488354df30e3f875a68edfcf340e8366a8e1ab67f9d5c5486a96829dfac0578289082b2a62117e1cf418b43b90e0adc881fc6ae8105c888e9ecd21aea1c9ae1a4038dfd17378fed71d02ae492087d7cdcd98f746855227967cb1ab4714261ee3bead3f4db118329d3ebef4bc48a875c19ba763966da0ebea800e01b2f50b00e9dd4caca6dcb314d00184ef71ea2391d760c950710db4a70f9212ffc54861f9dc752ce18867b8ad0c48df8466ef7231e7ac567f0eb55099e622ebb86cb237520190a61c66ad34f1f4e289cb3282ae3eaac6152ed24d2c92bae5a7658252a53c49b7b02dfe54fdb2e90074b6cf310ac661" #h"13a592b73ede487036c8816bd6fc6cdc04dc6133409a6ee990584160518f9ef573264cf04d38a3ba75d150f4f026f6df8936e13c8f4f3ecc9ecbc43fdfc488a4") (:digest-test #h"2edc282ffb90b97118dd03aaa03b145f363905e3cbd2d50ecd692b37bf000185c651d3e9726c690d3773ec1e48510e42b17742b0b0377e7de6b8f55e00a8a4db4740cee6db0830529dd19617501dc1e9359aa3bcf147e0a76b3ab70c4984c13e339e6806bb35e683af8527093670859f3d8a0fc7d493bcba6bb12b5f65e71e705ca5d6c948d66ed3d730b26db395b3447737c26fad089aa0ad0e306cb28bf0acf106f89af3745f0ec72d534968cca543cd2ca50c94b1456743254e358c1317c07a07bf2b0eca438a709367fafc89a57239028fc5fecfd53b8ef958ef10ee0608b7f5cb9923ad97058ec067700cc746c127a61ee3" #h"c2fb590ab74e230b8fe159892f94de04ef7adaa02b918d4994f996538d257f5a80c9b3be8f410170b0c5cac3f507401220881c5e08d8bf0a13247170d39085bc") (:digest-test #h"90b28a6aa1fe533915bcb8e81ed6cacdc10962b7ff82474f845eeb86977600cf70b07ba8e3796141ee340e3fce842a38a50afbe90301a3bdcc591f2e7d9de53e495525560b908c892439990a2ca2679c5539ffdf636777ad9c1cdef809cda9e8dcdb451abb9e9c17efa4379abd24b182bd981cafc792640a183b61694301d04c5b3eaad694a6bd4cc06ef5da8fa23b4fa2a64559c5a68397930079d250c51bcf00e2b16a6c49171433b0aadfd80231276560b80458dd77089b7a1bbcc9e7e4b9f881eacd6c92c4318348a13f4914eb27115a1cfc5d16d7fd94954c3532efaca2cab025103b2d02c6fd71da3a77f417d7932685888a" #h"02951596a13a1a41188a4a1d6346f7eafb60a2051ea67c63237d1a9b79ec4733f33ecec223dedd946b78387b6f2df5e9ab6af7dfbabaf80f4fcc94fa087275e8") (:digest-test #h"2969447d175490f2aa9bb055014dbef2e6854c95f8d60950bfe8c0be8de254c26b2d31b9e4de9c68c9adf49e4ee9b1c2850967f29f5d08738483b417bb96b2a56f0c8aca632b552059c59aac3f61f7b45c966b75f1d9931ff4e596406378cee91aaa726a3a84c33f37e9cdbe626b5745a0b06064a8a8d56e53aaf102d23dd9df0a3fdf7a638509a6761a33fa42fa8ddbd8e16159c93008b53765019c3f0e9f10b144ce2ac57f5d7297f9c9949e4ff68b70d339f87501ce8550b772f32c6da8ad2ce2100a895d8b08fa1eead7c376b407709703c510b50f87e73e43f8e7348f87c3832a547ef2bbe5799abedcf5e1f372ea809233f006" #h"5aa4e32f0ea3e853929bf64acc9565a01300bc007063b939f6dbbe9cae0545ea95fbcac32575aa0727ee4d937071e6b3be74e23fe76fd63ec05c7f7d8a407af0") (:digest-test #h"721645633a44a2c78b19024eaecf58575ab23c27190833c26875dc0f0d50b46aea9c343d82ea7d5b3e50ec700545c615daeaea64726a0f05607576dcd396d812b03fb6551c641087856d050b10e6a4d5577b82a98afb89cee8594c9dc19e79feff0382fcfd127f1b803a4b9946f4ac9a4378e1e6e041b1389a53e3450cd32d9d2941b0cbabdb50da8ea2513145164c3ab6bcbd251c448d2d4b087ac57a59c2285d564f16da4ed5e607ed979592146ffb0ef3f3db308fb342df5eb5924a48256fc763141a278814c82d6d6348577545870ae3a83c7230ac02a1540fe1798f7ef09e335a865a2ae0949b21e4f748fb8a51f44750e213a8fb" #h"495b2aa2103159d9a937e9dd56b059aca98a5e3cb7b59bb690dedc00c692e9d7a18614a73d12e07634b209cc630d1818b09f1076a941ff80474493e3d42b9812") (:digest-test #h"6b860d39725a14b498bb714574b4d37ca787404768f64c648b1751b353ac92bac2c3a28ea909fdf0423336401a02e63ec24325300d823b6864bb701f9d7c7a1f8ec9d0ae3584aa6dd62ea1997cd831b4babd9a4da50932d4efda745c61e4130890e156aee6113716daf95764222a91187db2effea49d5d0596102d619bd26a616bbfda8335505fbb0d90b4c180d1a2335b91538e1668f9f9642790b4e55f9cab0fe2bdd2935d001ee6419abab5457880d0dbff20ed8758f4c20fe759efb33141cf0e892587fe8187e5fbc57786b7e8b089612c936dfc03d27efbbe7c8673f1606bd51d5ff386f4a7ab68edf59f385eb1291f117bfe717399" #h"217b5a985bed80008274470e254443238c5aeacbc7ee2289f0e63b7afe6d0f395e2361fd6d9dc33b4f54f03ff56f6b264976161d80091788ee9d262f147a35fc") (:digest-test #h"6a01830af3889a25183244decb508bd01253d5b508ab490d3124afbf42626b2e70894e9b562b288d0a2450cfacf14a0ddae5c04716e5a0082c33981f6037d23d5e045ee1ef2283fb8b6378a914c5d9441627a722c282ff452e25a7ea608d69cee4393a0725d17963d0342684f255496d8a18c2961145315130549311fc07f0312fb78e6077334f87eaa873bee8aa95698996eb21375eb2b4ef53c14401207deb4568398e5dd9a7cf97e8c9663e23334b46912f8344c19efcf8c2ba6f04325f1a27e062b62a58d0766fc6db4d2c6a1928604b0175d872d16b7908ebc041761187cc785526c2a3873feac3a642bb39f5351550af9770c328af7b" #h"293c551e753bba7f314dcb93a0fad94f3f5dee6ed45d765a708e6fd277601f03f6c905d7e1eaeaec513cbbbd672b817f6d60fbf02c20167d7f4b7b84afeeb3f6") (:digest-test #h"b3c5e74b69933c2533106c563b4ca20238f2b6e675e8681e34a389894785bdade59652d4a73d80a5c85bd454fd1e9ffdad1c3815f5038e9ef432aac5c3c4fe840cc370cf86580a6011778bbedaf511a51b56d1a2eb68394aa299e26da9ada6a2f39b9faff7fba457689b9c1a577b2a1e505fdf75c7a0a64b1df81b3a356001bf0df4e02a1fc59f651c9d585ec6224bb279c6beba2966e8882d68376081b987468e7aed1ef90ebd090ae825795cdca1b4f09a979c8dfc21a48d8a53cdbb26c4db547fc06efe2f9850edd2685a4661cb4911f165d4b63ef25b87d0a96d3dff6ab0758999aad214d07bd4f133a6734fde445fe474711b69a98f7e2b" #h"89fe6314a0246eff3bfd07a95fe239bd5071467f53799175b226daf6c3db618cad4ca1c1af64bf5793f03254f560e6335beaaa86bcb9e961f214b2ae97b47af0") (:digest-test #h"83af34279ccb5430febec07a81950d30f4b66f484826afee7456f0071a51e1bbc55570b5cc7ec6f9309c17bf5befdd7c6ba6e968cf218a2b34bd5cf927ab846e38a40bbd81759e9e33381016a755f699df35d660007b5eadf292feefb735207ebf70b5bd17834f7bfa0e16cb219ad4af524ab1ea37334aa66435e5d397fc0a065c411ebbce32c240b90476d307ce802ec82c1c49bc1bec48c0675ec2a6c6f3ed3e5b741d13437095707c565e10d8a20b8c20468ff9514fcf31b4249cd82dcee58c0a2af538b291a87e3390d737191a07484a5d3f3fb8c8f15ce056e5e5f8febe5e1fb59d6740980aa06ca8a0c20f5712b4cde5d032e92ab89f0ae1" #h"7690f703e894ee22d4dff55a7f8d5021d5f17b729f95a59c4d55cfb225c67be105f2e7cdf56d140e566648e9e9c39bbed96f985a6dae1f21d8ba500f7fd40edf") (:digest-test #h"a7ed84749ccc56bb1dfba57119d279d412b8a986886d810f067af349e8749e9ea746a60b03742636c464fc1ee233acc52c1983914692b64309edfdf29f1ab912ec3e8da074d3f1d231511f5756f0b6eead3e89a6a88fe330a10face267bffbfc3e3090c7fd9a850561f363ad75ea881e7244f80ff55802d5ef7a1a4e7b89fcfa80f16df54d1b056ee637e6964b9e0ffd15b6196bdd7db270c56b47251485348e49813b4eb9ed122a01b3ea45ad5e1a929df61d5c0f3e77e1fdc356b63883a60e9cbb9fc3e00c2f32dbd469659883f690c6772e335f617bc33f161d6f6984252ee12e62b6000ac5231e0c9bc65be223d8dfd94c5004a101af9fd6c0fb" #h"65e415c7958a47fca9eed3846fd1283afeb38e5130f57ecd99dcb21bedda856e3b5fb9f839e579c5ea386eaca8cdc0a9549eaaf6ec452dd6cb5212b709bf5c59") (:digest-test #h"a6fe30dcfcda1a329e82ab50e32b5f50eb25c873c5d2305860a835aecee6264aa36a47429922c4b8b3afd00da16035830edb897831c4e7b00f2c23fc0b15fdc30d85fb70c30c431c638e1a25b51caf1d7e8b050b7f89bfb30f59f0f20fecff3d639abc4255b3868fc45dd81e47eb12ab40f2aac735df5d1dc1ad997cefc4d836b854cee9ac02900036f3867fe0d84afff37bde3308c2206c62c4743375094108877c73b87b2546fe05ea137bedfc06a2796274099a0d554da8f7d7223a48cbf31b7decaa1ebc8b145763e3673168c1b1b715c1cd99ecd3ddb238b06049885ecad9347c2436dff32c771f34a38587a44a82c5d3d137a03caa27e66c8ff6" #h"d6542a2f0654b9b874a627d3d53764a65b1df2c0cec3bcd0b4b088faa1095e54f1799757c4371f8d544e298d600e21e11b2f90d295712621231a09c58b05a704") (:digest-test #h"83167ff53704c3aa19e9fb3303539759c46dd4091a52ddae9ad86408b69335989e61414bc20ab4d01220e35241eff5c9522b079fba597674c8d716fe441e566110b6211531ceccf8fd06bc8e511d00785e57788ed9a1c5c73524f01830d2e1148c92d0edc97113e3b7b5cd3049627abdb8b39dd4d6890e0ee91993f92b03354a88f52251c546e64434d9c3d74544f23fb93e5a2d2f1fb15545b4e1367c97335b0291944c8b730ad3d4789273fa44fb98d78a36c3c3764abeeac7c569c1e43a352e5b770c3504f87090dee075a1c4c85c0c39cf421bdcc615f9eff6cb4fe6468004aece5f30e1ecc6db22ad9939bb2b0ccc96521dfbf4ae008b5b46bc006e" #h"ec983e787628b94c87fff8d57d2d058667d12f5af458bce79bb7844fb41d9c55920f593c8d8730eb8d54ff1d51cd8ad2f1c2a0f7d6b299a21266744e47d142b2") (:digest-test #h"3a3a819c48efde2ad914fbf00e18ab6bc4f14513ab27d0c178a188b61431e7f5623cb66b23346775d386b50e982c493adbbfc54b9a3cd383382336a1a0b2150a15358f336d03ae18f666c7573d55c4fd181c29e6ccfde63ea35f0adf5885cfc0a3d84a2b2e4dd24496db789e663170cef74798aa1bbcd4574ea0bba40489d764b2f83aadc66b148b4a0cd95246c127d5871c4f11418690a5ddf01246a0c80a43c70088b6183639dcfda4125bd113a8f49ee23ed306faac576c3fb0c1e256671d817fc2534a52f5b439f72e424de376f4c565cca82307dd9ef76da5b7c4eb7e085172e328807c02d011ffbf33785378d79dc266f6a5be6bb0e4a92eceebaeb1" #h"81950e7096d31d4f22e3db71cac725bf59e81af54c7ca9e6aeee71c010fc5467466312a01aa5c137cfb140646941556796f612c9351268737c7e9a2b9631d1fa") ironclad-0.57/testing/test-vectors/kupyna-256.testvec000066400000000000000000000031261420372057600226070ustar00rootroot00000000000000(:digest-test #h"" #h"cd5101d1ccdf0d1d1f4ada56e888cd724ca1a0838a3521e7131d4fb78d0f5eb6") (:digest-test #h"ff" #h"ea7677ca4526555680441c117982ea14059ea6d0d7124d6ecdb3deec49e890f4") (:digest-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"08f4ee6f1be6903b324c4e27990cb24ef69dd58dbe84813ee0a52f6631239875") (:digest-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e" #h"1075c8b0cb910f116bda5fa1f19c29cf8ecc75caff7208ba2994b68fc56e8d16") (:digest-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f" #h"0a9474e645a7d25e255e9e89fff42ec7eb31349007059284f0b182e452bda882") (:digest-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff" #h"d305a32b963d149dc765f68594505d4077024f836c1bf03806e1624ce176c08f") ironclad-0.57/testing/test-vectors/kupyna.testvec000066400000000000000000000042301420372057600222720ustar00rootroot00000000000000(:digest-test #h"" #h"656b2f4cd71462388b64a37043ea55dbe445d452aecd46c3298343314ef04019bcfa3f04265a9857f91be91fce197096187ceda78c9c1c021c294a0689198538") (:digest-test #h"ff" #h"871b18cf754b72740307a97b449abeb32b64444cc0d5a4d65830ae5456837a72d8458f12c8f06c98c616abe11897f86263b5cb77c420fb375374bec52b6d0292") (:digest-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f" #h"3813e2109118cdfb5a6d5e72f7208dccc80a2dfb3afdfb02f46992b5edbe536b3560dd1d7e29c6f53978af58b444e37ba685c0dd910533ba5d78efffc13de62a") (:digest-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f" #h"76ed1ac28b1d0143013ffa87213b4090b356441263c13e03fa060a8cada32b979635657f256b15d5fca4a174de029f0b1b4387c878fcc1c00e8705d783fd7ffe") (:digest-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf" #h"b189bfe987f682f5f167f0d7fa565330e126b6e592b1c55d44299064ef95b1a57f3c2d0ecf17869d1d199ebbd02e8857fb8add67a8c31f56cd82c016cf743121") (:digest-test #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff" #h"0dd03d7350c409cb3c29c25893a0724f6b133fa8b9eb90a64d1a8fa93b56556611eb187d715a956b107e3bfc76482298133a9ce8cbc0bd5e1436a5b197284f7e") ironclad-0.57/testing/test-vectors/kuznyechik.testvec000066400000000000000000000137631420372057600231620ustar00rootroot00000000000000(:ecb-mode-test #h"8899aabbccddeeff0011223344556677fedcba98765432100123456789abcdef" #h"1122334455667700ffeeddccbbaa9988" #h"7f679d90bebc24305a468d42b9d4edcd") (:ecb-mode-test #h"8899aabbccddeeff0011223344556677fedcba98765432100123456789abcdef" #h"00112233445566778899aabbcceeff0a" #h"b429912c6e0032f9285452d76718d08b") (:ecb-mode-test #h"8899aabbccddeeff0011223344556677fedcba98765432100123456789abcdef" #h"112233445566778899aabbcceeff0a00" #h"f0ca33549d247ceef3f5a5313bd4b157") (:ecb-mode-test #h"8899aabbccddeeff0011223344556677fedcba98765432100123456789abcdef" #h"2233445566778899aabbcceeff0a0011" #h"d0b09ccde830b9eb3a02c4c5aa8ada98") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"98cc6b54dbcf7bd2f0800c1fab0677ef") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"57ff739d4dc92c1bd7fc01700cc8216f" #h"1fe3cedb5b1be5cfbbd07d5a858cf0a0") (:ecb-mode-test #h"57ff739d4dc92c1bd7fc01700cc8216f00000000000000000000000000000000" #h"d43bb7556ea32e46f2a282b7d45b4e0d" #h"d3bdcd10b76a831311824faf14a084d9") (:ecb-mode-test #h"d43bb7556ea32e46f2a282b7d45b4e0d57ff739d4dc92c1bd7fc01700cc8216f" #h"90afe91bb288544f2c32dc239b2635e6" #h"86ab54dd45b89d2ad623c4c46fdcee42") (:ecb-mode-test #h"90afe91bb288544f2c32dc239b2635e6d43bb7556ea32e46f2a282b7d45b4e0d" #h"6cb4561c40bf0a9705931cb6d408e7fa" #h"b40c3d8fa27c91ca87da3d457a1aa8ba") (:ecb-mode-test #h"6cb4561c40bf0a9705931cb6d408e7fa90afe91bb288544f2c32dc239b2635e6" #h"3059d6d61753b958d92f4781c8640e58" #h"054026a896d64c6aa4f8b049273c20d9") (:ecb-mode-test #h"3059d6d61753b958d92f4781c8640e586cb4561c40bf0a9705931cb6d408e7fa" #h"e69465770505d7f80ef68ca38ab3a3d6" #h"d7b0a845c071f6dc868a9b1a1885c91b") (:ecb-mode-test #h"e69465770505d7f80ef68ca38ab3a3d63059d6d61753b958d92f4781c8640e58" #h"5ab67a5f8539a4a5fd9f0373ba463466" #h"1edc4f82e51d358ab0d40b60201856e1") (:ecb-mode-test #h"5ab67a5f8539a4a5fd9f0373ba463466e69465770505d7f80ef68ca38ab3a3d6" #h"dc096bcd99fc72f79936d4c748e75af7" #h"80e3c07c90d63cc69a8ef815c5bcca9b") (:ecb-mode-test #h"dc096bcd99fc72f79936d4c748e75af75ab67a5f8539a4a5fd9f0373ba463466" #h"c5a3e7cee0f1b7260528a68fb4ea05f2" #h"cd5c43ce9bc24e8436a44b7e63739d00") (:ecb-mode-test #h"c5a3e7cee0f1b7260528a68fb4ea05f2dc096bcd99fc72f79936d4c748e75af7" #h"43d5cec327b24ab90ad34a79d0469151" #h"dd2af8ed586f60104f588fa0d303d205") (:ecb-mode-test #h"43d5cec327b24ab90ad34a79d0469151c5a3e7cee0f1b7260528a68fb4ea05f2" #h"05ba7be9be5274fbeb4ac5fd5faafa10" #h"8a149822b23810370261c8089cfeb173") (:ecb-mode-test #h"05ba7be9be5274fbeb4ac5fd5faafa1043d5cec327b24ab90ad34a79d0469151" #h"89d513b989e3cece4d2e3e4c15d4e01c" #h"3c41c1371dbca42b691f57c0ff7869e7") (:ecb-mode-test #h"89d513b989e3cece4d2e3e4c15d4e01c05ba7be9be5274fbeb4ac5fd5faafa10" #h"e56e462ae2e66f800ce2224c4cafacbe" #h"6fb285e4cbecfc0933ee0f1dc56a0d5e") (:ecb-mode-test #h"e56e462ae2e66f800ce2224c4cafacbe89d513b989e3cece4d2e3e4c15d4e01c" #h"f5dbee5414d79ca46be17346fdc72bf5" #h"c16d1fbadeb4e3d69b1e1df48547befc") (:ecb-mode-test #h"f5dbee5414d79ca46be17346fdc72bf5e56e462ae2e66f800ce2224c4cafacbe" #h"c780fc28815e667b3d224ecf1f4a7d65" #h"e59f60559be7eb61375b087d469df6ab") (:ecb-mode-test #h"c780fc28815e667b3d224ecf1f4a7d65f5dbee5414d79ca46be17346fdc72bf5" #h"2ef17a0d75440ecec9af18d29aba3cda" #h"05eed86d0f3820aab0e2f172cd42897f") (:ecb-mode-test #h"2ef17a0d75440ecec9af18d29aba3cdac780fc28815e667b3d224ecf1f4a7d65" #h"d653fdff96bcf89a929f6377ab41967a" #h"6cb2f71ec32690454ad68c457a606944") (:ecb-mode-test #h"d653fdff96bcf89a929f6377ab41967a2ef17a0d75440ecec9af18d29aba3cda" #h"36bbad8838380c8793a7aea0a11d04d2" #h"84b51911be102dc4d71ce9cab4fd94b1") (:ecb-mode-test #h"36bbad8838380c8793a7aea0a11d04d2d653fdff96bcf89a929f6377ab41967a" #h"034efecfc0efc00d82c3345a8708ae78" #h"be454859d8b319d5ab6a9752f77475e4") (:ecb-mode-test #h"034efecfc0efc00d82c3345a8708ae7836bbad8838380c8793a7aea0a11d04d2" #h"ea38887307337a2934a9eb802f6cfddd" #h"ec56dc8307bd48208e4f02762a83d8fe") (:keystream-test #h"238b3628526af43a68bfb111bf1ad8ce19f7d9ec1cdff896b0161becb75d6c0d" #h"b07f7d6f0c9f49847242f8b7764af8a3" #h"0501f24a532c93f8f375bbda35306845347b1f8617371670584a8f74b9871ecb284166a8412e882d7b19f2377eb10e4458e2ff91346468a096ee0eee92f1bd07f6c662d7f031607f724f490ff40d20703879a1760d99b82cc48701cc4cea5d2e8a8d77fe11339496be7f14d7af41ceb8d288b5383adef0142c4b83faed991c67f7306a9150650a6ee5b2b9b56c6e29ea1b480984655782b1785e19dca6e729ade7a223c79ceae1f4752729ceaa795270ad7bb3d5065e3c84f0c93da24ad3a43f4922862708c76e04a8b889057c01a2ca2b277a819e7420d9ead2842cfd97dd668b22bfdcf24900c7b7c11ed72953bbd02f4f2b728afcb227a1c2b5a36699bfed13c2a40a9c713fb33deedc4eaf2cb3ae2f374a2c9afd23e869328a7c6386550a676d417c00fd18fec79f07202f98e9eb4784abea77e4c889e58e24179da5db834d96e994586f8d4dc6ea98e93c4b7d80fc0f9c1e13fef9ccd115e8eb34cf5c0f61b0c0752d6f897dd948f35e35a0e2d2ce8359bc475395cf7b38329303aeb5800101cd27326b83bec6661c437c6b0e9981a4efe7c588e0cded7ebe8175ef1711aaaa40c2bc69c75cfcad311908d95d080abda251c49fa76dbac41e5f62943320f99db0c89969548decf4a11e3b98cd4101f3ad6647d800d469ef52e27e331a3e7f78791f534c7a9b742ec6a47fc98677a2b2fc5590b18e4f167ccbec4b9576c2b29c6dbf190e4c1cc0970edf99bfa5ba61dae4dfa5dcb2da3b10730815b5fb9614c8050ec5bad2acfd9e299fd4b5c621b25d1fb3468241f2143bc047432d04431f71d8814129ee21ecd4141a7ccbf60263e5a5f9970f66455d7bfa6904b7bccc17299babb869f12c8633254cb2f32f0ea608eb3d96c7c868950ad002d1a8d06355536812b588fa0dc7751f7cb197f1861171c0de7ad3ea501ff3c652d103c307d40a09b952bd178f25be56b84ba5f5b9854a64760ede13924ca032101ecf94667761a5035b41287b8ddc22949578185a37cbee7ced60f5f77db863654bc9576780434922b044b5ce88ce1c8711a4e72481d356f637c37dc14a43619d4c825d7edbc8497822b5505267b76ca11c18dd8cd50bfc9f84330efcf3e380523d0521564b7e460ddc09bf1ec998dfde6e30483da51f44f884a9b840cb5969f421fe9a2dbab4b746001fdf1bd263f6d40079d35578be2dcb0187b9046f645041351155d451012d13924fbc413890a22869b36c27ac8f1c00621e44a1604ea83733925f971f1f95bb175cf3c84f573d084681455accb36227409e57258b4c85703d955455aea15ad61b245844c53fabf7a46e7acf79fceef35f955ecaefdc9290a22e736f14d1e989493d75c4b9e7eb5e0a48d38b15005170bf95edc522c296bde804aed18cdb3a4d9b716c2c") ironclad-0.57/testing/test-vectors/macs.lisp000066400000000000000000000021631420372057600212030ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto-tests) #.(loop for mac in (crypto:list-all-macs) collect `(rtest:deftest ,mac (run-test-vector-file ',mac *mac-tests*) t) into forms finally (return `(progn ,@forms))) #.(loop for mac in (crypto:list-all-macs) collect `(rtest:deftest ,(intern (format nil "~A/~A" mac '#:incremental)) (run-test-vector-file ',mac *mac-incremental-tests*) t) into forms finally (return `(progn ,@forms))) #.(if (boundp '*mac-stream-tests*) (loop for mac in (crypto:list-all-macs) collect `(rtest:deftest ,(intern (format nil "~A/~A" mac '#:stream)) (run-test-vector-file ',mac *mac-stream-tests*) t) into forms finally (return `(progn ,@forms))) nil) #.(loop for mac in (crypto:list-all-macs) collect `(rtest:deftest ,(intern (format nil "~A/~A" mac '#:reinitialize-instance)) (run-test-vector-file ',mac *mac-reinitialize-instance-tests*) t) into forms finally (return `(progn ,@forms))) ironclad-0.57/testing/test-vectors/md2.testvec000066400000000000000000000011111420372057600214400ustar00rootroot00000000000000(:digest-test #a"" #h"8350e5a3e24c153df2275c9f80692773") (:digest-test #a"a" #h"32ec01ec4a6dac72c0ab96fb34c0b5d1") (:digest-test #a"abc" #h"da853b0d3f88d99b30283a69e6ded6bb") (:digest-test #a"message digest" #h"ab4f496bfb2a530b219ff33031fe06b0") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"4e8ddff3650292ab5a4108c3aa47940b") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"da33def2a42df13975352846c30338cd") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"d5976f79d83d3a0dc9806c3c66f3efd8") ironclad-0.57/testing/test-vectors/md4.testvec000066400000000000000000001040001420372057600214430ustar00rootroot00000000000000;;; standard tests (:digest-test #a"" #h"31d6cfe0d16ae931b73c59d7e0c089c0") (:digest-test #a"a" #h"bde52cb31de33e46245e05fbdbd6fb24") (:digest-test #a"abc" #h"a448017aaf21d8525fc10ae87aa6729d") (:digest-test #a"message digest" #h"d9130a8164549fe818874806e1c7014b") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"d79e1c308aa5bbcdeea8ed63df412da9") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"043f8582f241db351ce627e153e7f0e4") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"e33b4ddc9c38f2199c3e7b164fcc0536") ;;; bit-level tests from NESSIE (http://www.cryptonessie.org/) (:digest-bit-test 0 #x80 63 #h"BBD35E5215A4F49086AC51702AC8F453") (:digest-bit-test 0 #x40 63 #h"7F0784ACCCF41ED1BEFC001417DC177F") (:digest-bit-test 0 #x20 63 #h"8B32C668EA420DDD2D0D292F80209203") (:digest-bit-test 0 #x10 63 #h"1FDB0B6005B3FEBB4CCABAB9016E659F") (:digest-bit-test 0 #x08 63 #h"88BD1D0ABB04C65F942F381C1D10B4E8") (:digest-bit-test 0 #x04 63 #h"6D11C1CE327B4AF3219B8E7127F77F87") (:digest-bit-test 0 #x02 63 #h"ABD2C0F985A49416DD93353269CB8B6E") (:digest-bit-test 0 #x01 63 #h"D5ECE790332E2980B265A6C4ADA4B313") (:digest-bit-test 1 #x80 62 #h"1FE57101A89843C127B807A415E27174") (:digest-bit-test 1 #x40 62 #h"7A1DB4C6C50BA59D451FB3E8842B2E24") (:digest-bit-test 1 #x20 62 #h"C9241D9976E8794792CF7C752EA912A4") (:digest-bit-test 1 #x10 62 #h"BCDCA2DD3C1CC599328FDD433F65E5D6") (:digest-bit-test 1 #x08 62 #h"633ED249ECDDD2162778A3FB9C2101A9") (:digest-bit-test 1 #x04 62 #h"7B461DF7AFB13186981A8683102C440B") (:digest-bit-test 1 #x02 62 #h"F00EC0E84F45D2E8F1C3D098963BB556") (:digest-bit-test 1 #x01 62 #h"FBB41C20E1F771F8CF941DE587D46483") (:digest-bit-test 2 #x80 61 #h"CAE77290924AD0AF75C2040742D9A1DC") (:digest-bit-test 2 #x40 61 #h"CA066A24C77C269F054C1C5878E4E80C") (:digest-bit-test 2 #x20 61 #h"A1640FC6F5D39B124622C479995AF67D") (:digest-bit-test 2 #x10 61 #h"B88105189B7FB16E6014DC734AF561D6") (:digest-bit-test 2 #x08 61 #h"2285357FAE38EE229777CF2785B97281") (:digest-bit-test 2 #x04 61 #h"107E5822CB98AFB516A5B447C7727978") (:digest-bit-test 2 #x02 61 #h"4B710DF5F98A1497BE0807692F8FB1DB") (:digest-bit-test 2 #x01 61 #h"F26FBF349B2373A944684CE0EE801E20") (:digest-bit-test 3 #x80 60 #h"F7A42E8770042DF7710E016FC46658C0") (:digest-bit-test 3 #x40 60 #h"293ACF948761A14FC464EF1500DE9C3F") (:digest-bit-test 3 #x20 60 #h"BC7893BB2CF21E9EC9334AC6765EBF2B") (:digest-bit-test 3 #x10 60 #h"45B42B939CF8F1FBB57C5C98837E8B38") (:digest-bit-test 3 #x08 60 #h"4D0F25D2E48D8720D1E6E132DC6B07BF") (:digest-bit-test 3 #x04 60 #h"F6547862D7627CB5B0AB492DEBF82084") (:digest-bit-test 3 #x02 60 #h"671FC792B2855699762FE44EDFBB1F49") (:digest-bit-test 3 #x01 60 #h"CA1A6A7C4C83C3F2B784A266DED6B5DE") (:digest-bit-test 4 #x80 59 #h"07081DEA52B67A10352400DD2E493B5E") (:digest-bit-test 4 #x40 59 #h"8EEA6F82A654706114819BA76492B02C") (:digest-bit-test 4 #x20 59 #h"77F832636B2A4F548F9561B50F00D04F") (:digest-bit-test 4 #x10 59 #h"D85CC14ABB85E1AF9BB0031FD1A0F4E5") (:digest-bit-test 4 #x08 59 #h"8477AD6B25C8329A8E9961E918E509A9") (:digest-bit-test 4 #x04 59 #h"3772EFC29E9B49E745B244C0533208BF") (:digest-bit-test 4 #x02 59 #h"9672F5178E99A1F2D0EE8AAD91773C83") (:digest-bit-test 4 #x01 59 #h"CD286A0381B2B92CC8B5D97B3724B44A") (:digest-bit-test 5 #x80 58 #h"22F9C5DAC3B12BFEDEBE79D5A92CD71E") (:digest-bit-test 5 #x40 58 #h"0CE9433431E2C994C3B3E8C313AF7E53") (:digest-bit-test 5 #x20 58 #h"BF26B54EDCD513D58812A4B098D782C5") (:digest-bit-test 5 #x10 58 #h"63390175CB490D30165690B47F984DBC") (:digest-bit-test 5 #x08 58 #h"93B57559DDD377AF5C8FA4A588B7E403") (:digest-bit-test 5 #x04 58 #h"537DC75DD559E080AACA55921A3CB5E6") (:digest-bit-test 5 #x02 58 #h"6AEBF1038DF6894C14EFD3F8B868D391") (:digest-bit-test 5 #x01 58 #h"07EF953031EC4EFDD007A7445B13016D") (:digest-bit-test 6 #x80 57 #h"D19B3DA81B887021117AACE297455878") (:digest-bit-test 6 #x40 57 #h"889031546AE1F9195E824D5257E9BF99") (:digest-bit-test 6 #x20 57 #h"8944E2D679925948C153821926508797") (:digest-bit-test 6 #x10 57 #h"979E317C4EEB567F419289872669B7B6") (:digest-bit-test 6 #x08 57 #h"17781CF3EF732E6848B76239B89B8765") (:digest-bit-test 6 #x04 57 #h"12AC5D1727F09C1E8EF91352EDCB499F") (:digest-bit-test 6 #x02 57 #h"7873D8BCC863F163F535468F804ABF12") (:digest-bit-test 6 #x01 57 #h"3A1AEF9C29E5208BB6153148EC45DA3B") (:digest-bit-test 7 #x80 56 #h"1DCF200C9E0595290506EE6DE6C80347") (:digest-bit-test 7 #x40 56 #h"244B3E0B1EF717E2684947609FCF0F5C") (:digest-bit-test 7 #x20 56 #h"B6ED2988D01B395A48A554BBDCD2235A") (:digest-bit-test 7 #x10 56 #h"4E5066C4CF9445BF14C96B9ADB0CBBC0") (:digest-bit-test 7 #x08 56 #h"D734B03840FA5D4815047D384AE8F957") (:digest-bit-test 7 #x04 56 #h"0C3E357ED652686CA8ACC945A8A9399B") (:digest-bit-test 7 #x02 56 #h"4A96F69D1F332D13C53B75EC0EC9A98C") (:digest-bit-test 7 #x01 56 #h"C7E506B3C26B016FB58B93C6DC24455C") (:digest-bit-test 8 #x80 55 #h"5341A52A09F29AA025C586C6F30871CD") (:digest-bit-test 8 #x40 55 #h"BCA78320EA99A7EF42F5C50470FB170D") (:digest-bit-test 8 #x20 55 #h"6322D5E6AF7AB230A6B95029C052E15D") (:digest-bit-test 8 #x10 55 #h"1F71B30932FBCC899A96179587162C21") (:digest-bit-test 8 #x08 55 #h"DF6BC482AF780F888EF4816889AD3F72") (:digest-bit-test 8 #x04 55 #h"90EF7853DAA5A1FE63DEBAD8EE1244C6") (:digest-bit-test 8 #x02 55 #h"B25B09E34F72C81E03BA18A82861A281") (:digest-bit-test 8 #x01 55 #h"67F251CB476F65AD4FA54271BCC2D5DC") (:digest-bit-test 9 #x80 54 #h"F38437C6EA09FEB3D408685F6ACB14E5") (:digest-bit-test 9 #x40 54 #h"ACEC89994059ACA9F7969E349F43A078") (:digest-bit-test 9 #x20 54 #h"22B584E43A310FE4A95D008AF6F53578") (:digest-bit-test 9 #x10 54 #h"555694DBA0468B7E47699C195F14BAD4") (:digest-bit-test 9 #x08 54 #h"00A3F64332DCF7F56C573EC1F69B7941") (:digest-bit-test 9 #x04 54 #h"BA0C7968D94657547F7BAC324D75ECFE") (:digest-bit-test 9 #x02 54 #h"D670D44E05180676F3F130B22A210701") (:digest-bit-test 9 #x01 54 #h"F7A6A4776F5AEE80DD9E799628312E67") (:digest-bit-test 10 #x80 53 #h"5C244D2D5B727BB5755F727366453FA9") (:digest-bit-test 10 #x40 53 #h"1E3557F5CCA3A449BAC3C975BBB929CA") (:digest-bit-test 10 #x20 53 #h"29E48D6E694AA6B88816DF35AD0EBA20") (:digest-bit-test 10 #x10 53 #h"611AE1550A2163E622EA480E70B0B76A") (:digest-bit-test 10 #x08 53 #h"FB2BDC98CF0C8ACBDB83DB241E8EB776") (:digest-bit-test 10 #x04 53 #h"B58BCD699DEE5DAA2D7571AF100B8068") (:digest-bit-test 10 #x02 53 #h"EB019E3CFB9C824227F958688A39A8BD") (:digest-bit-test 10 #x01 53 #h"2C6AF1FDAE0FCBB979FBD296F869397D") (:digest-bit-test 11 #x80 52 #h"1240B2BD883CC2E6B79851E440BEE571") (:digest-bit-test 11 #x40 52 #h"7F4A696A12E446D750361491459C3366") (:digest-bit-test 11 #x20 52 #h"63DD0E996BD33ED0AC66B10363878EA2") (:digest-bit-test 11 #x10 52 #h"D6E9605298D44D3C1544F27E5F25DB99") (:digest-bit-test 11 #x08 52 #h"476C4D1C167B5178A5B1FD7E32433DBC") (:digest-bit-test 11 #x04 52 #h"EBB2643274CBB654258610B16F9A86D8") (:digest-bit-test 11 #x02 52 #h"17CCF469B50EA792EF05FC3BBFDCF71D") (:digest-bit-test 11 #x01 52 #h"C1F9C8646DB996F208D14A7F68AA8169") (:digest-bit-test 12 #x80 51 #h"32BB562417D57CCE8232D64247B9F59D") (:digest-bit-test 12 #x40 51 #h"8AE16E4ACC1DDBA9A94A584EA0D2E3F9") (:digest-bit-test 12 #x20 51 #h"07D272C782E6CAB67EFE5B1A9E6AFF9E") (:digest-bit-test 12 #x10 51 #h"095225F76964298D4526399E2B256AE3") (:digest-bit-test 12 #x08 51 #h"5FD4EC9766AAB9298DF74B3BB309B2F8") (:digest-bit-test 12 #x04 51 #h"AE1CBA144FDC928C587DFDB66EE195F8") (:digest-bit-test 12 #x02 51 #h"0BBC13567EC582FFBFBD284EC559935D") (:digest-bit-test 12 #x01 51 #h"E4EEA7ED1354FF9C991128EA6EF05A37") (:digest-bit-test 13 #x80 50 #h"92256984D50F23C70211F228C33125C6") (:digest-bit-test 13 #x40 50 #h"F7CB16B72B1917924C3D27078ED46D14") (:digest-bit-test 13 #x20 50 #h"82061087C8424761ECCB8A33427EFD71") (:digest-bit-test 13 #x10 50 #h"513B968E2DC615D856D8A487459C08DC") (:digest-bit-test 13 #x08 50 #h"78C86BCCA923AF0107DC20D04143356F") (:digest-bit-test 13 #x04 50 #h"B62193B828B5A1B5E79C85230074A503") (:digest-bit-test 13 #x02 50 #h"6D3607862B7A14C74B2C3FC264FF938F") (:digest-bit-test 13 #x01 50 #h"6C268B65574C7E71B1B33A9FBA073028") (:digest-bit-test 14 #x80 49 #h"6EAF3875811D115C423CBDB782CEDB53") (:digest-bit-test 14 #x40 49 #h"76733B1C620219C48B3949EB79BB6162") (:digest-bit-test 14 #x20 49 #h"07C291BFECC39263CE9BEBB61D4F0151") (:digest-bit-test 14 #x10 49 #h"3561F4C91950702DA3C446A3FC608D47") (:digest-bit-test 14 #x08 49 #h"DFAAD6F42AD6D1EA80D18482825D7642") (:digest-bit-test 14 #x04 49 #h"67A4CB746083176B3F0196CFFF14C784") (:digest-bit-test 14 #x02 49 #h"B8326FCD6202593CFEEFEE4EBEF2A6D4") (:digest-bit-test 14 #x01 49 #h"7469B5EF25A906073CE985D8E9B6E3A6") (:digest-bit-test 15 #x80 48 #h"CADE494EF95747A696C914974F8529F9") (:digest-bit-test 15 #x40 48 #h"4C39AEF3783EDFB45FEDF0B24AA9C051") (:digest-bit-test 15 #x20 48 #h"FA04E0FBB65C7CCCD217547D03095F02") (:digest-bit-test 15 #x10 48 #h"54084EBCB91B8135981606FE7B96AB3B") (:digest-bit-test 15 #x08 48 #h"7ED51DDA7ED82A52AD83A25B3488E394") (:digest-bit-test 15 #x04 48 #h"271DD7546EB6E370058B1D2C8BF80749") (:digest-bit-test 15 #x02 48 #h"FE50CC119179A9D07548E39EB346A88A") (:digest-bit-test 15 #x01 48 #h"C4F54F5EAC3CE0368A804C9E271118BF") (:digest-bit-test 16 #x80 47 #h"46F0F8D5CC4F5DAEA65F083CDC60E1DB") (:digest-bit-test 16 #x40 47 #h"67D344764EC49EB384614BB8F32B4D07") (:digest-bit-test 16 #x20 47 #h"B524BF3E80AA6EDE797C8AC992CB06AE") (:digest-bit-test 16 #x10 47 #h"051B1B738DDD2F4704F7C56901879D6A") (:digest-bit-test 16 #x08 47 #h"D0337757E0A97C6F073FEE23B9338137") (:digest-bit-test 16 #x04 47 #h"41CF88BD76E6589EB3F779992BCC8646") (:digest-bit-test 16 #x02 47 #h"D2D1C2A673C7D26719EA7D06E54930F8") (:digest-bit-test 16 #x01 47 #h"0974DA79F1825FF4C0D96974460B1D78") (:digest-bit-test 17 #x80 46 #h"B3141AA98A4C3C52AE7BED0FB3E6DA02") (:digest-bit-test 17 #x40 46 #h"E955F5F222DFC412049CF0CB5DCDA8BA") (:digest-bit-test 17 #x20 46 #h"67FA38FCC938149E2434FDBF4094925A") (:digest-bit-test 17 #x10 46 #h"EF8ED24DCA3CE16EF463B9B4BF432F45") (:digest-bit-test 17 #x08 46 #h"0DE6EE7CDB1AB6DAB4244B0321177216") (:digest-bit-test 17 #x04 46 #h"8F584FC4B32AF8DD020240AE7CDEEBD7") (:digest-bit-test 17 #x02 46 #h"430939F51E8BB6A610C9E8B5F98D111A") (:digest-bit-test 17 #x01 46 #h"50E64EBBA2706F9D341879A04448EAA9") (:digest-bit-test 18 #x80 45 #h"42A07CE420358C8F6098396CE22CA993") (:digest-bit-test 18 #x40 45 #h"0D52BB5B089ABE136BB4AB593D03D57C") (:digest-bit-test 18 #x20 45 #h"5ED8617595F3200E7CF6B8326397AA00") (:digest-bit-test 18 #x10 45 #h"942754C7D535EF0EF553F5450125A831") (:digest-bit-test 18 #x08 45 #h"4587B8BFF1F599A478E4A428C19D5615") (:digest-bit-test 18 #x04 45 #h"1397C38048BCC3AA66B969077F1C62D2") (:digest-bit-test 18 #x02 45 #h"7A9DC04D89B0521D50D05CAAA83AE2EF") (:digest-bit-test 18 #x01 45 #h"A5D4603311C1970EC972AD190F0827C3") (:digest-bit-test 19 #x80 44 #h"DA6E4729A1911A639B3649CABCEC92F5") (:digest-bit-test 19 #x40 44 #h"EBF6599665AC5BEEA657C4E9F54C853A") (:digest-bit-test 19 #x20 44 #h"6BC6C2D4CD06FEF687D3C19C102AC435") (:digest-bit-test 19 #x10 44 #h"70BDFA5136C02554261EF1CBC266941D") (:digest-bit-test 19 #x08 44 #h"F788D088B95B7F560DC723E613053D82") (:digest-bit-test 19 #x04 44 #h"2E954672495564949E25C2207F68B2CC") (:digest-bit-test 19 #x02 44 #h"9AFD84C38D649CC61312C2892081CEE6") (:digest-bit-test 19 #x01 44 #h"3F59B60AD8ADAF8D15E35661B06C191F") (:digest-bit-test 20 #x80 43 #h"2A4451BF917B982FE6F2F611133D6145") (:digest-bit-test 20 #x40 43 #h"86219233D1CF5CC8461E7B7B67021258") (:digest-bit-test 20 #x20 43 #h"882C712BCD8333C7065B52DB7BC19A5A") (:digest-bit-test 20 #x10 43 #h"02A043BDB1922E81BD9ED074B5550C9B") (:digest-bit-test 20 #x08 43 #h"E95F2180F9BDA9680609B5DACC35D438") (:digest-bit-test 20 #x04 43 #h"76C05C78F0E28BD39BDEECB065DE31C8") (:digest-bit-test 20 #x02 43 #h"6413344601FD3B1E8539151B2F688A87") (:digest-bit-test 20 #x01 43 #h"5A6E81FC927131D1437C74DBC6BCD2C8") (:digest-bit-test 21 #x80 42 #h"16727D48488DC7B1C55028B9200DC96F") (:digest-bit-test 21 #x40 42 #h"24926A61E0810C361878588921E0E3A9") (:digest-bit-test 21 #x20 42 #h"0923DE3419F9F268C7C2A6D5DAD7D497") (:digest-bit-test 21 #x10 42 #h"8D598E2B0F8EEDB5B04E6A33D1CE98CC") (:digest-bit-test 21 #x08 42 #h"5AF6606098F0E22B3DD17BC1077A62E8") (:digest-bit-test 21 #x04 42 #h"62B5D8D3B14FE9C452BBF2AADF3B81EA") (:digest-bit-test 21 #x02 42 #h"43D78C46015F1AB109D2FE30052AAE6F") (:digest-bit-test 21 #x01 42 #h"B5ED66241DD79682BB0A9806EF662FC7") (:digest-bit-test 22 #x80 41 #h"619974CCD395FCFE5CF02FF3BA662315") (:digest-bit-test 22 #x40 41 #h"CDDE837F7461E55D0BF9A61DBC6801E1") (:digest-bit-test 22 #x20 41 #h"AB559653C6827C329338AD38FD747047") (:digest-bit-test 22 #x10 41 #h"A46FE12C4FBD38285B5FF154EBF80E61") (:digest-bit-test 22 #x08 41 #h"C9713B0A4429253231587565599FF94B") (:digest-bit-test 22 #x04 41 #h"75AEEFB4108210DFE68EFEB3AFB2E7AE") (:digest-bit-test 22 #x02 41 #h"D4282199C2600B098AF5CF4F6167A00C") (:digest-bit-test 22 #x01 41 #h"32054517D277F032998BFF444FE95DA2") (:digest-bit-test 23 #x80 40 #h"A49093F9C4F3C008CF08557BE76D27CD") (:digest-bit-test 23 #x40 40 #h"9C7806F3E44746AFE28513332D58F9A4") (:digest-bit-test 23 #x20 40 #h"EEC9CF74E56407537B797BAD535E164C") (:digest-bit-test 23 #x10 40 #h"7A4E8818E396894348A6BB9B9532621A") (:digest-bit-test 23 #x08 40 #h"8DABC9FE2D737DC37706C41B50575215") (:digest-bit-test 23 #x04 40 #h"34E835F14E4EC40343708E84EA163E8D") (:digest-bit-test 23 #x02 40 #h"4D8D1E037F329D64ED0752AAF0477AA7") (:digest-bit-test 23 #x01 40 #h"7497441DEB00A263D5335A132A4B8FA6") (:digest-bit-test 24 #x80 39 #h"4C599D8C2BD2572FB69C9A3FE69889AE") (:digest-bit-test 24 #x40 39 #h"4DE04150DC49AE121D39F3192B720575") (:digest-bit-test 24 #x20 39 #h"AC0EDA6732FAF6C03A0458A4E9637F83") (:digest-bit-test 24 #x10 39 #h"3B1D47A30271AFF9DA567FDA4BBBDF7C") (:digest-bit-test 24 #x08 39 #h"8E1A86357FF873D1C175C1C836F66364") (:digest-bit-test 24 #x04 39 #h"93E93726DC16D8557A49736880224619") (:digest-bit-test 24 #x02 39 #h"A4A8AADEF87556D60B5750C81048A2E7") (:digest-bit-test 24 #x01 39 #h"2398942DA53D994A7E4DD68F91676C72") (:digest-bit-test 25 #x80 38 #h"35A88E3124467CED6BF66BE8ABD96F93") (:digest-bit-test 25 #x40 38 #h"CADD29296AE24866EB9F6647B00820D9") (:digest-bit-test 25 #x20 38 #h"1D6636BCC96FB7A658168D36D8F5F457") (:digest-bit-test 25 #x10 38 #h"C92F5CAC84C30B3ABD69FCFA6B0661C6") (:digest-bit-test 25 #x08 38 #h"DF5FB3B4C2060A348F75E8E23881E195") (:digest-bit-test 25 #x04 38 #h"188AA80B6C337DF9D449B82B15986E3F") (:digest-bit-test 25 #x02 38 #h"9D737F50026D12240D4DB709B46D58E1") (:digest-bit-test 25 #x01 38 #h"8EEA8966AB0BFFE09EA95741E77496CE") (:digest-bit-test 26 #x80 37 #h"DD5C3855B1AFE1CB95F0B089D3EA4998") (:digest-bit-test 26 #x40 37 #h"15B441917B86443307ACBEB17903E28A") (:digest-bit-test 26 #x20 37 #h"8B9AC04A7359CAB27ECE8367E66EB1DD") (:digest-bit-test 26 #x10 37 #h"7706D55F0079CB4884358C6B4BCEA8DD") (:digest-bit-test 26 #x08 37 #h"2AABDD8E5BBBB2C71A5947EDA4E82250") (:digest-bit-test 26 #x04 37 #h"692E8799F4600207583CA843C28AF287") (:digest-bit-test 26 #x02 37 #h"7CF376D748E12F38AA598FABBA9CCBBE") (:digest-bit-test 26 #x01 37 #h"5CF3005A49D12B590F8D66651DEA3DD5") (:digest-bit-test 27 #x80 36 #h"832D8A7F23D849DE46AE6B242C7AB2CD") (:digest-bit-test 27 #x40 36 #h"C986FC62A1958C43A83C865FE58FEB0B") (:digest-bit-test 27 #x20 36 #h"42C81E6975949A88C1D290731A8D91CF") (:digest-bit-test 27 #x10 36 #h"D5C3F7DB76B70ACB2D61A5C7EAF57B63") (:digest-bit-test 27 #x08 36 #h"78B48D47312640F3B1B6E7168E051B5F") (:digest-bit-test 27 #x04 36 #h"D70E5706E48CBC4E89A7A03C9739A5BA") (:digest-bit-test 27 #x02 36 #h"7A83FB7A2EDCF2567534B2C6894597BE") (:digest-bit-test 27 #x01 36 #h"69EFEA0635D5E0DA3BB5E8DAC6450F15") (:digest-bit-test 28 #x80 35 #h"2CEF430452F547213E0060E439732BC9") (:digest-bit-test 28 #x40 35 #h"41504BD226814D1B8CE5A8E55BCEA2F2") (:digest-bit-test 28 #x20 35 #h"3B86CD11128F3E0CC02A6877BA972131") (:digest-bit-test 28 #x10 35 #h"DDC565ADB0FB192F8ECA2BA88A8A1617") (:digest-bit-test 28 #x08 35 #h"3BA992E7472A287F5443A4B7F2221248") (:digest-bit-test 28 #x04 35 #h"0FC4DC0CE3175D60460DE92ADAA30D2A") (:digest-bit-test 28 #x02 35 #h"D8CDD5ABF212C71965484392BC6C124B") (:digest-bit-test 28 #x01 35 #h"3A717676580551078A52BF501C600A30") (:digest-bit-test 29 #x80 34 #h"865C8091BACBCF8769BBA30B0D632F7B") (:digest-bit-test 29 #x40 34 #h"4DCFF6335B297771DF356997422BC0D4") (:digest-bit-test 29 #x20 34 #h"624302CC3FCCE2934535FBAF1569066D") (:digest-bit-test 29 #x10 34 #h"72B97C91164BC5B4B44ED53A641EA3E0") (:digest-bit-test 29 #x08 34 #h"93CE2501503C24AAF380273EC5CEFD1F") (:digest-bit-test 29 #x04 34 #h"ABF8F5DDE8FEC0150A1862E39F8D500E") (:digest-bit-test 29 #x02 34 #h"256ACF418C6EF3A796421D1915ED8361") (:digest-bit-test 29 #x01 34 #h"D52D6A384778AAE72B7BC381D32E9D1D") (:digest-bit-test 30 #x80 33 #h"ABA10D2AC6437B7D452D699174AF8804") (:digest-bit-test 30 #x40 33 #h"B5800387557A4F78044719FD8BD3473C") (:digest-bit-test 30 #x20 33 #h"AB949036594E0ECE4C24046D93E0D412") (:digest-bit-test 30 #x10 33 #h"43BFF184762DC63887F60148D76E48DC") (:digest-bit-test 30 #x08 33 #h"5D9AEC1DBF3F18CD12528436FF5FD2CF") (:digest-bit-test 30 #x04 33 #h"268560A41F44D97308C27C757899AD18") (:digest-bit-test 30 #x02 33 #h"831ED0FB77AE0A814D03475D679BDAF8") (:digest-bit-test 30 #x01 33 #h"B9D26E4AB351EFCD1092DE80967FFC1F") (:digest-bit-test 31 #x80 32 #h"F2A62DCF99199D49E6AEBE4F392D0C77") (:digest-bit-test 31 #x40 32 #h"A42FEB16940D4D7479D86A624999AD2A") (:digest-bit-test 31 #x20 32 #h"A5B27E702A3EDEE9946EC87E15F976BB") (:digest-bit-test 31 #x10 32 #h"BF0848C7D1B15D5229EBDC0B0BD038B3") (:digest-bit-test 31 #x08 32 #h"D2019E459B8E4F5B954AABAD128ECEFF") (:digest-bit-test 31 #x04 32 #h"A788071A087E7E4B6825F74CE8A8CADF") (:digest-bit-test 31 #x02 32 #h"2B4D686480A6379FC03D90AEB5C86F33") (:digest-bit-test 31 #x01 32 #h"E982708474DA81345710A20378CE2A67") (:digest-bit-test 32 #x80 31 #h"FF87F490B456AFE143452549C129D89E") (:digest-bit-test 32 #x40 31 #h"F69EAD65AED542643BC2560319978F38") (:digest-bit-test 32 #x20 31 #h"DBC4C1B2BB09B59D58DF6F4F62836922") (:digest-bit-test 32 #x10 31 #h"69C389886C0712456F69D0F9CF8F639F") (:digest-bit-test 32 #x08 31 #h"30BCD138CEBB7FDBA6E1F1381CD11F44") (:digest-bit-test 32 #x04 31 #h"9D996ADCCFC36B12FEFA2BE8CFABD95B") (:digest-bit-test 32 #x02 31 #h"CB406268152E14C548716F39352AC34F") (:digest-bit-test 32 #x01 31 #h"A0B04825CC109E4D76E007AA39BC6553") (:digest-bit-test 33 #x80 30 #h"8D73D3D813C14ED1C56898BA41ACCC26") (:digest-bit-test 33 #x40 30 #h"2F7321C9863B7D7379CAC8B127C00A42") (:digest-bit-test 33 #x20 30 #h"13984F531C0F8AB48AE74125EE65780A") (:digest-bit-test 33 #x10 30 #h"A610CE994AD741163460366002C4F319") (:digest-bit-test 33 #x08 30 #h"C65ED54BB67FE83D6F902D6544438C54") (:digest-bit-test 33 #x04 30 #h"013CF0DDF9A4C640D6B92CFE85B9860F") (:digest-bit-test 33 #x02 30 #h"B3762E84CB42EADE69453D81AD361A0A") (:digest-bit-test 33 #x01 30 #h"35340708EBA84A9D916F06E5C3D17FBA") (:digest-bit-test 34 #x80 29 #h"96EA5D98D41EB4C01A6AA81F98041427") (:digest-bit-test 34 #x40 29 #h"4C06D9489F80E0F3B12BE2519C75F5C0") (:digest-bit-test 34 #x20 29 #h"E46B367072C0C6686DFEB205D301DF82") (:digest-bit-test 34 #x10 29 #h"CDE9A045C3C57841CCDE5813DEB4275E") (:digest-bit-test 34 #x08 29 #h"BA8EC409FAD3F4A2ED51EE907BB5AC01") (:digest-bit-test 34 #x04 29 #h"DF72074C648A095D15EC6DADBF3C5925") (:digest-bit-test 34 #x02 29 #h"D6A4A77C409D399B571F39525C32A6CA") (:digest-bit-test 34 #x01 29 #h"91A1E9545A7429F3ACE04996DEB2A749") (:digest-bit-test 35 #x80 28 #h"40E2605929B2056A0E15EF339793B9A8") (:digest-bit-test 35 #x40 28 #h"C97528C25B98C098BDBAAD1B36BE3837") (:digest-bit-test 35 #x20 28 #h"D736C0CE9B37F201E25A8AEA4FEB7327") (:digest-bit-test 35 #x10 28 #h"9E353F7709472BA386A95EDCCF4827C4") (:digest-bit-test 35 #x08 28 #h"33E38ECB8F90F6D5BAA5EA7741202583") (:digest-bit-test 35 #x04 28 #h"F5E8DAD1164591B8E7E1680E5B0774C7") (:digest-bit-test 35 #x02 28 #h"31D22E6286675D1FB3FFE1FA39F9AC20") (:digest-bit-test 35 #x01 28 #h"9C362C0933D1212FB82530AEA8850980") (:digest-bit-test 36 #x80 27 #h"4F21AC13177670F938372E5C4F27F2CF") (:digest-bit-test 36 #x40 27 #h"EFE719571D6D7A40C9E59A25CCD1E332") (:digest-bit-test 36 #x20 27 #h"CA80D2DA774FBD460B1F9DE81DED27FA") (:digest-bit-test 36 #x10 27 #h"518913DBF627D354FC84240CD094A617") (:digest-bit-test 36 #x08 27 #h"BE2ADDC5E1985BAB750230CBF404E57F") (:digest-bit-test 36 #x04 27 #h"F25486DDFCCDC3A485FB1262FEECAE55") (:digest-bit-test 36 #x02 27 #h"CD66204F6D1F1F7D9D5B3515B2020830") (:digest-bit-test 36 #x01 27 #h"FF8AE245F0C57CF41EE804F02A50F6C4") (:digest-bit-test 37 #x80 26 #h"5B51221EF27C1EEF866035355890A5E4") (:digest-bit-test 37 #x40 26 #h"FE730AF0F19A1A5989CE0A09F4C0E183") (:digest-bit-test 37 #x20 26 #h"AFAC7BDAAB4EC1DD692433C6D0A7C03B") (:digest-bit-test 37 #x10 26 #h"6F2C2F536421C0B5692DA2D44C7FBD60") (:digest-bit-test 37 #x08 26 #h"51CD443D6EDBD2A9531AD8583631D31F") (:digest-bit-test 37 #x04 26 #h"FD673C736F07198D80FCC4504B5F6398") (:digest-bit-test 37 #x02 26 #h"814704B4D6E377F5E432A7AE335489D4") (:digest-bit-test 37 #x01 26 #h"265FB34FBC784919C7B8ADC667256F11") (:digest-bit-test 38 #x80 25 #h"D440BAE2B511C93CE93A29CF502FC418") (:digest-bit-test 38 #x40 25 #h"6DEA21BF7B854B7B483DBEB2960B0821") (:digest-bit-test 38 #x20 25 #h"89EB5F4BE9D4122A89012D675D284F7B") (:digest-bit-test 38 #x10 25 #h"063C5EE35961BAAC960FB49527AFC67D") (:digest-bit-test 38 #x08 25 #h"6082B4AACE19665A1D38B8DA2B79A17E") (:digest-bit-test 38 #x04 25 #h"04F028CA5F997AED87AF61BBB545C685") (:digest-bit-test 38 #x02 25 #h"12AE1D9B9B28CAA6CB087039EE8B25C8") (:digest-bit-test 38 #x01 25 #h"0C7B89B951ECB0C8BE2431FD742CEFE6") (:digest-bit-test 39 #x80 24 #h"4FBB360E60AE501CAB37E5A4F3E8C6D8") (:digest-bit-test 39 #x40 24 #h"EA31199F57786DA6D58D0B3BACBD668B") (:digest-bit-test 39 #x20 24 #h"ABA89F55D83F112F621A2501693A331E") (:digest-bit-test 39 #x10 24 #h"00956676DCF8138E1FEF0530C9E59FD0") (:digest-bit-test 39 #x08 24 #h"B932997CA40CF9D450056DE2E0234D38") (:digest-bit-test 39 #x04 24 #h"B0B54FDE61EC826AAF6941B301B9FA1D") (:digest-bit-test 39 #x02 24 #h"8FD8BC0F48BD80A5BD2B62C4800230B4") (:digest-bit-test 39 #x01 24 #h"E1B2A290E5C8F665A24B5DC022DDC12C") (:digest-bit-test 40 #x80 23 #h"8D915A468B1ADC4390DEAD2709CBFA9C") (:digest-bit-test 40 #x40 23 #h"335C558FEA3E913B1523204C628ACC5E") (:digest-bit-test 40 #x20 23 #h"D5F14992EF1BBD10438E6DE5A27222C6") (:digest-bit-test 40 #x10 23 #h"41D654B7B7DAD4AE3DE1FE69AB13A1B7") (:digest-bit-test 40 #x08 23 #h"DC4F2C360F492C0B98BA1A63A65EAA38") (:digest-bit-test 40 #x04 23 #h"4B2160C6735BDD1EA8112420414045AA") (:digest-bit-test 40 #x02 23 #h"BD2FDD88594F4A18AFD3BB660A77FA1F") (:digest-bit-test 40 #x01 23 #h"711CFCF659134FAD7333FF46119A01B0") (:digest-bit-test 41 #x80 22 #h"26191BE887BC1AFE51B6D3E92B4F88C9") (:digest-bit-test 41 #x40 22 #h"1E7B43A9C56DFFFAD29009D57F374145") (:digest-bit-test 41 #x20 22 #h"B83DE8AA13560F35120C01CDA26BA04A") (:digest-bit-test 41 #x10 22 #h"62A011815241418CD33BDA000E166087") (:digest-bit-test 41 #x08 22 #h"E04880B4DC587B9C6CE5A35408EC09D4") (:digest-bit-test 41 #x04 22 #h"107D1E02C9D5860D96170AC255AA67F5") (:digest-bit-test 41 #x02 22 #h"7C0AA11E779995FB585BDEF438CF9ACD") (:digest-bit-test 41 #x01 22 #h"5CC7953B35C35F8647EFFD9510E75A59") (:digest-bit-test 42 #x80 21 #h"78D8843516DFBB7508455EF5FA142B2D") (:digest-bit-test 42 #x40 21 #h"612B20B5C4F6BAE4F594E9F3F4A82FB3") (:digest-bit-test 42 #x20 21 #h"65D501D431B40185E3E63655EF12F6B7") (:digest-bit-test 42 #x10 21 #h"2F60CD131ABC3C637381D557B8B772DF") (:digest-bit-test 42 #x08 21 #h"D2035E9BB99D8D6135C86317C67490B3") (:digest-bit-test 42 #x04 21 #h"2599B6106634DDFFE1A6097239ED6327") (:digest-bit-test 42 #x02 21 #h"7155929319337413322F167CBA970CFC") (:digest-bit-test 42 #x01 21 #h"7DA0BC63FE503B3E0E4195DA5783EAC5") (:digest-bit-test 43 #x80 20 #h"EB22FC226396838D1A0242DCD75AE8D2") (:digest-bit-test 43 #x40 20 #h"64971E0FADC6912C387214F422D27268") (:digest-bit-test 43 #x20 20 #h"853B17C08A669B84345FD47C27FC64AB") (:digest-bit-test 43 #x10 20 #h"E5C9F54314498E87AF8F4F838D68C207") (:digest-bit-test 43 #x08 20 #h"38C8F547BCCC142B5488DEA99D2FD15B") (:digest-bit-test 43 #x04 20 #h"7890E5E8CFEB171F92E901E2BFF49DEF") (:digest-bit-test 43 #x02 20 #h"134FADF68897B0AAED3D138A5E73B457") (:digest-bit-test 43 #x01 20 #h"655555A93CEC20854AB16BC9A2EE12E1") (:digest-bit-test 44 #x80 19 #h"113CCE04855767F7ECCABAC3AB9DBC4C") (:digest-bit-test 44 #x40 19 #h"8DCABDD80D6891AE82D27A62CA5CBFDC") (:digest-bit-test 44 #x20 19 #h"B55E241BD6E6F1EFEEA94DACED298082") (:digest-bit-test 44 #x10 19 #h"A986C1E46876C5B79876FEE689007EF8") (:digest-bit-test 44 #x08 19 #h"8FDF2D086D8EA0EF2BD4BFB626C8065F") (:digest-bit-test 44 #x04 19 #h"0018C4C92548087707886B19B9B6DEB5") (:digest-bit-test 44 #x02 19 #h"A6A8D3FC4596E65CA9A9474E845B4482") (:digest-bit-test 44 #x01 19 #h"19372E51D0E1FFDD658ED1768C9951C4") (:digest-bit-test 45 #x80 18 #h"3AFEC090447E3E8ECFE9A36DA12A9C4A") (:digest-bit-test 45 #x40 18 #h"AA7A63CE7C642387AB142F3C368F4DAC") (:digest-bit-test 45 #x20 18 #h"67743320502FCC66B7B054C636554F13") (:digest-bit-test 45 #x10 18 #h"8812200381A08D93260BB16D3C7B8053") (:digest-bit-test 45 #x08 18 #h"30A2A0AC2059F43F822738FE41B64392") (:digest-bit-test 45 #x04 18 #h"71F1169342B7E47057F10AE0C514ABDB") (:digest-bit-test 45 #x02 18 #h"A27E2D60772D8EA0C576D439F38CB7FD") (:digest-bit-test 45 #x01 18 #h"AD2D997DF99283C0088ACA0CFA939B6A") (:digest-bit-test 46 #x80 17 #h"1574271BB22E22A26D5E4025F8CA3BE0") (:digest-bit-test 46 #x40 17 #h"0E6593CF9CBE2E5FD9459D4E25FC8808") (:digest-bit-test 46 #x20 17 #h"921D0D98FEE2FD0FAE77BBE8CEE75C4C") (:digest-bit-test 46 #x10 17 #h"330DBD27827948BF7854AD8F770EA413") (:digest-bit-test 46 #x08 17 #h"193F2E38A7E001DC2B132153E86C3170") (:digest-bit-test 46 #x04 17 #h"AB0F8A360190725F0DB386511FA16688") (:digest-bit-test 46 #x02 17 #h"522884031569527E0EA2CD59FF2AFAE6") (:digest-bit-test 46 #x01 17 #h"A70526A45C6204AED6F872AFE0C2030F") (:digest-bit-test 47 #x80 16 #h"2929A46F1243345745BE5F0CEFFFEA9D") (:digest-bit-test 47 #x40 16 #h"A1C2FE4D26AD58FC32025C2BDE0B8F53") (:digest-bit-test 47 #x20 16 #h"49F7F1239B65A00C79B833102DEA4470") (:digest-bit-test 47 #x10 16 #h"D715B83A7C045EA5DE1A1014D3C388E0") (:digest-bit-test 47 #x08 16 #h"C5B9DC3AF4F82C4A0EEB9FD5A3CA71AE") (:digest-bit-test 47 #x04 16 #h"990130C05319F8CCCDFC295F13D0B51E") (:digest-bit-test 47 #x02 16 #h"58D52BCD0D981839F438371952F76FE4") (:digest-bit-test 47 #x01 16 #h"A7167C368E85068EC798C8242D97B9B5") (:digest-bit-test 48 #x80 15 #h"BCCCC2A040780B8634A160077A0518B6") (:digest-bit-test 48 #x40 15 #h"217F09C5C7D9C35370A20293FA48BE64") (:digest-bit-test 48 #x20 15 #h"7E100CAD7A0BCD1F1F91426009E5035C") (:digest-bit-test 48 #x10 15 #h"9937ECE33144619A1B4C06B3B5D958C1") (:digest-bit-test 48 #x08 15 #h"B81C377C685216B65060E496E20DD1AE") (:digest-bit-test 48 #x04 15 #h"95E6F4F0EA2E1D9BFA0CB30CFCEB82C1") (:digest-bit-test 48 #x02 15 #h"40C3B24318632EC9640F3F0C8E561C84") (:digest-bit-test 48 #x01 15 #h"EED48C469E07EE625615E3D75949740A") (:digest-bit-test 49 #x80 14 #h"E7F28F14BE306A1C8B1A01280878F0F1") (:digest-bit-test 49 #x40 14 #h"373585DF43F020AACB6061A95D7A3D04") (:digest-bit-test 49 #x20 14 #h"3B400E497AFFB8C308A953E70EA4C9DC") (:digest-bit-test 49 #x10 14 #h"8E28C7D91C8C70E44D201FCA8264C6D0") (:digest-bit-test 49 #x08 14 #h"106A08239964D83046F4BC5C6FC5D292") (:digest-bit-test 49 #x04 14 #h"BE99DB37B00BF454B7FD234FA38325FB") (:digest-bit-test 49 #x02 14 #h"E60BDC54B53931474DACC0F938EAFB82") (:digest-bit-test 49 #x01 14 #h"AD49039B927F3255746F5F8B29D026BC") (:digest-bit-test 50 #x80 13 #h"243B1CA9BB302073C43D2034D1701008") (:digest-bit-test 50 #x40 13 #h"51D708A3EC669C4AEAE962B7002E84AB") (:digest-bit-test 50 #x20 13 #h"3C3C48C8FECE87A8244A812EB30103D7") (:digest-bit-test 50 #x10 13 #h"62FCEBD1322730F36609C0B71F013977") (:digest-bit-test 50 #x08 13 #h"A40079DD041D39E7F286D4C074319A88") (:digest-bit-test 50 #x04 13 #h"4CE8D48695094B9ED177C32D84490C64") (:digest-bit-test 50 #x02 13 #h"239CB4F2D9DAF02880590639D9473D72") (:digest-bit-test 50 #x01 13 #h"42BEECDFE7ED6721E3D746AD9ADF60D8") (:digest-bit-test 51 #x80 12 #h"6637254EB223AEF1E0070CE24D150A42") (:digest-bit-test 51 #x40 12 #h"EC1C0EFB06D494F5929170230EA29F8B") (:digest-bit-test 51 #x20 12 #h"06E20B68CD82553945F588CF3B072228") (:digest-bit-test 51 #x10 12 #h"4C935F8067F9E89002F664E32310D653") (:digest-bit-test 51 #x08 12 #h"65F609AA81C427B2461DE2E87F19232D") (:digest-bit-test 51 #x04 12 #h"130CB2489827F80099188772A1E297A7") (:digest-bit-test 51 #x02 12 #h"FF2870DAC9CEBF2C00EAF9C7397A84AF") (:digest-bit-test 51 #x01 12 #h"965BEFA150B21B023476934CE2F4DD48") (:digest-bit-test 52 #x80 11 #h"4748E12C9B9B027C2FD250A7BF75D404") (:digest-bit-test 52 #x40 11 #h"3C22EE69FAA79253E66276B9BFAB6E7F") (:digest-bit-test 52 #x20 11 #h"F915A8F4EF3CEEF1239E8EA00A08FDC0") (:digest-bit-test 52 #x10 11 #h"5E9BE5E6AECD61AACAD27B71C219A4FF") (:digest-bit-test 52 #x08 11 #h"B90EA5FCECE69767CB22ACA0322F8182") (:digest-bit-test 52 #x04 11 #h"B03FC9B6458121630E1E12425BDE2B76") (:digest-bit-test 52 #x02 11 #h"4C0C22304A32242DE23C0952251625D7") (:digest-bit-test 52 #x01 11 #h"BDD58B71E31A4537F8CBDAB9E4EA2823") (:digest-bit-test 53 #x80 10 #h"3BC207A83DEBCAE9DB19C67881A2907D") (:digest-bit-test 53 #x40 10 #h"17ABC23A3B7C5C3F4238B4C9B60393FB") (:digest-bit-test 53 #x20 10 #h"990ADD29BBEEA26D36FBE9FAEE480DE0") (:digest-bit-test 53 #x10 10 #h"E739B36FB27CD07EF63C1DEA5F05C2B5") (:digest-bit-test 53 #x08 10 #h"6C2ABCD513756454FD8EFF7C05C347D9") (:digest-bit-test 53 #x04 10 #h"714C165F1098665831F20C3CCACC786B") (:digest-bit-test 53 #x02 10 #h"A4297212FE643FE7585B61B0CA54501E") (:digest-bit-test 53 #x01 10 #h"CC1F3F9C967BB3D518F17CB917AF3541") (:digest-bit-test 54 #x80 9 #h"7CBDDD340A9EDB15E9764C8D0C5CAC82") (:digest-bit-test 54 #x40 9 #h"CBEA87EAD6F2861A1A976B0094CEC936") (:digest-bit-test 54 #x20 9 #h"2BA194132EE5196988287217E16CA218") (:digest-bit-test 54 #x10 9 #h"8A9B3CB20F1F3F9A5B25F51A2744C593") (:digest-bit-test 54 #x08 9 #h"6E379119BBD6CB8956568EB2EAF3CF16") (:digest-bit-test 54 #x04 9 #h"6B3B3AF07FF6CCFA55326CF74CE1BE12") (:digest-bit-test 54 #x02 9 #h"58CC216A7E8B1B520B914A42CD77A95C") (:digest-bit-test 54 #x01 9 #h"62D402575E31D8F00A24829ABB4FB735") (:digest-bit-test 55 #x80 8 #h"27AB445A2D2F6AE41D0BC60AEFC8D8FD") (:digest-bit-test 55 #x40 8 #h"3780B0F8539BF4B4BF650149C0219323") (:digest-bit-test 55 #x20 8 #h"0C12ACE64B7B880FE86AE3930B5C923B") (:digest-bit-test 55 #x10 8 #h"30EA9812001F376C52AA8BF2A8803258") (:digest-bit-test 55 #x08 8 #h"00A77BBA134EC7F048495CC221D0C1AC") (:digest-bit-test 55 #x04 8 #h"91548EE3EC1175D8408610CED2DE1D61") (:digest-bit-test 55 #x02 8 #h"90A3AEB7EE1BEFC671B1E3974694814F") (:digest-bit-test 55 #x01 8 #h"BF4EA65FF974E5864DE084172A42BE94") (:digest-bit-test 56 #x80 7 #h"101087341122D53A5C9C39A14486FBD1") (:digest-bit-test 56 #x40 7 #h"8AC7E1D8C4B6C5D0D7E8AE04C99A5AEB") (:digest-bit-test 56 #x20 7 #h"FDD1A742B9A53720A83D13BBB52E6B59") (:digest-bit-test 56 #x10 7 #h"7074A3E598C6CB6B729953D1912EDE8F") (:digest-bit-test 56 #x08 7 #h"3BCCA8F88026DA33A85EBEA0D92085E7") (:digest-bit-test 56 #x04 7 #h"8C39347BE5FFEEB436720E7B62F95AB7") (:digest-bit-test 56 #x02 7 #h"2A8D32E9D57BCA170A314E10EB2E14D9") (:digest-bit-test 56 #x01 7 #h"AEBA2E5DFA53D0866C670EC2DF9BAEFA") (:digest-bit-test 57 #x80 6 #h"76C4B1546EFE5FE4CE780D88F45112C6") (:digest-bit-test 57 #x40 6 #h"B2C9982B2BB69CF1F803E4FB721EE594") (:digest-bit-test 57 #x20 6 #h"6064131C8D0045906C3A4AC95CEA9850") (:digest-bit-test 57 #x10 6 #h"A573132EB414900A6F2D145054ED9B71") (:digest-bit-test 57 #x08 6 #h"BD3803EBAF57D1D59D2E344B95C95DBA") (:digest-bit-test 57 #x04 6 #h"97679B799CE10FF731F1B036F300261F") (:digest-bit-test 57 #x02 6 #h"045FA3ED64892236889D890D70F88297") (:digest-bit-test 57 #x01 6 #h"EDFEF1B83D497F241AFCAD2670766550") (:digest-bit-test 58 #x80 5 #h"5044776204D1D991CB6D039F3CE639A6") (:digest-bit-test 58 #x40 5 #h"E3C3A88841C4486991BD684C482F468F") (:digest-bit-test 58 #x20 5 #h"204B0EED4092ED3CD041555213C7016E") (:digest-bit-test 58 #x10 5 #h"AA181AEB0883C2EB1517546F05DCF5A1") (:digest-bit-test 58 #x08 5 #h"0776CD1285638E99C9F92B67DFE3A93B") (:digest-bit-test 58 #x04 5 #h"41F545E21F35D1C76D35F46AF08D1AC3") (:digest-bit-test 58 #x02 5 #h"5C0027928ACEA6E8764992BB53D9A200") (:digest-bit-test 58 #x01 5 #h"9F764E6504EEB62D6F7B0551CFEB32C5") (:digest-bit-test 59 #x80 4 #h"65A182D7F3C3551DB2EB9A589C2BC154") (:digest-bit-test 59 #x40 4 #h"E1D3D40E72D89A16E985A7D6D45B2BD6") (:digest-bit-test 59 #x20 4 #h"4DE48F8B3A984A17D9871D4D7394DD96") (:digest-bit-test 59 #x10 4 #h"A616A4C01CB1CB5AC0B170AC7F295C81") (:digest-bit-test 59 #x08 4 #h"D57E28E6A20EB1E605FC1185796FD76A") (:digest-bit-test 59 #x04 4 #h"5162808EB7C844045397AAE6A9FD579A") (:digest-bit-test 59 #x02 4 #h"C02D9BA7FD05719313649E4A9C4B377F") (:digest-bit-test 59 #x01 4 #h"7EDE5C243C23AAC804CF2B9CD82A9B4E") (:digest-bit-test 60 #x80 3 #h"08FA1E2DEB8C28C84D3501C6490C8299") (:digest-bit-test 60 #x40 3 #h"98E814F0BCB5BB2E0C4CECF0E456ED66") (:digest-bit-test 60 #x20 3 #h"D5F234F232A16CA09403113659DF5940") (:digest-bit-test 60 #x10 3 #h"11B36584307FA2026A1EF1FB2F923E53") (:digest-bit-test 60 #x08 3 #h"20EFCB7687C857E2DB86AD61E9EB64F0") (:digest-bit-test 60 #x04 3 #h"52961A3E3F4D807B17924B945D0EF0BA") (:digest-bit-test 60 #x02 3 #h"AE39BED8D20A0BAEE477D53C4388247B") (:digest-bit-test 60 #x01 3 #h"E73B87F8A3FB962D7F8B6E5724FBB394") (:digest-bit-test 61 #x80 2 #h"43A7ED379BEFB67B5A757726B36FAF03") (:digest-bit-test 61 #x40 2 #h"04E387CD2BABD6ED2A581CE0D35CA2C4") (:digest-bit-test 61 #x20 2 #h"C3E46CCE582699F849E852D8CC72786B") (:digest-bit-test 61 #x10 2 #h"E511DC2C83118F52DBC80330DF1F44D7") (:digest-bit-test 61 #x08 2 #h"04D1B43C3ED99FC2A59DA3462142E070") (:digest-bit-test 61 #x04 2 #h"D4C0D26CE697D58ACE25AC2D9FFA99BD") (:digest-bit-test 61 #x02 2 #h"46479C1ED1572FD54099CE935E03A509") (:digest-bit-test 61 #x01 2 #h"8856F192CE9E7FEA0FDC5F5C2FEAA54E") (:digest-bit-test 62 #x80 1 #h"ED72DED2FF418F23A7CC250E3607AF66") (:digest-bit-test 62 #x40 1 #h"055F5FE4A2376F94EE6CFB892F083AF1") (:digest-bit-test 62 #x20 1 #h"E587BC51D8CC4CDBB72B615C7DBE2F19") (:digest-bit-test 62 #x10 1 #h"886FC0C898EEB8A3FA34A62D9CD9EE3E") (:digest-bit-test 62 #x08 1 #h"5CE1643888E280FC6AEA24EB4E7484C5") (:digest-bit-test 62 #x04 1 #h"E28C5C0C011898C183595262938E7AD3") (:digest-bit-test 62 #x02 1 #h"FBCD570FF301F37DB9B59DA5290ACCF9") (:digest-bit-test 62 #x01 1 #h"EEB3F6127C385A4CF0001A0482E7B5AD") (:digest-bit-test 63 #x80 0 #h"C0765C537B427E59CCCA837A101C82A5") (:digest-bit-test 63 #x40 0 #h"C7DA8C6B49A6679F620552876BCFE9AA") (:digest-bit-test 63 #x20 0 #h"EF6FD22A2F3D55B935F7E7842E9A563E") (:digest-bit-test 63 #x10 0 #h"A44C909A87C3EB6201888A92FEBFC1DB") (:digest-bit-test 63 #x08 0 #h"1A2A32D70B2328B8AEDAABF0BBE80190") (:digest-bit-test 63 #x04 0 #h"083F164EA0D8BDB2CE5D18A187792BAA") (:digest-bit-test 63 #x02 0 #h"01A1F51997AD4AF2A6652517B7FFB9DC") (:digest-bit-test 63 #x01 0 #h"F43AF6AEC164C17A6DCDCD7D460B093D") ironclad-0.57/testing/test-vectors/md5.testvec000066400000000000000000001040001420372057600214440ustar00rootroot00000000000000;;; standard tests (:digest-test #a"" #h"d41d8cd98f00b204e9800998ecf8427e") (:digest-test #a"a" #h"0cc175b9c0f1b6a831c399e269772661") (:digest-test #a"abc" #h"900150983cd24fb0d6963f7d28e17f72") (:digest-test #a"message digest" #h"f96b697d7cb7938d525a2f31aaf161d0") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"c3fcd3d76192e4007dfb496cca67e13b") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"d174ab98d277d9f5a5611c2c9f419d9f") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"57edf4a22be3c955ac49da2e2107b67a") ;;; bit-level tests from NESSIE (http://www.cryptonessie.org/) (:digest-bit-test 0 #x80 63 #h"D100ADC7D963AC0B837F7AC29DC701D7") (:digest-bit-test 0 #x40 63 #h"5946DFD41CC23659B3A6671B61BEEBD5") (:digest-bit-test 0 #x20 63 #h"DEC544A38537D47AE3074C1B1FE258CE") (:digest-bit-test 0 #x10 63 #h"F86BBABF1921DDE8BDA8BFD280C7EF42") (:digest-bit-test 0 #x08 63 #h"F5504FB61B4A45F425A7E81A5EE46F9D") (:digest-bit-test 0 #x04 63 #h"6D0FE6F22A181464E6445CECCC9F0637") (:digest-bit-test 0 #x02 63 #h"B17122050F10191A428685C69D6443FC") (:digest-bit-test 0 #x01 63 #h"BC5481E124C00F21E314EF579DC23C42") (:digest-bit-test 1 #x80 62 #h"E0D1D11DB4A1920B5D1E2AC3C8FF2EE5") (:digest-bit-test 1 #x40 62 #h"B41789204BFB001544CF30C99B80C2BF") (:digest-bit-test 1 #x20 62 #h"427E645F8141751530520C4AEDF94AF6") (:digest-bit-test 1 #x10 62 #h"313E604ACFFC20F994BC77A5338868F9") (:digest-bit-test 1 #x08 62 #h"0A53C1D28669E7E0E50FCDF88C8127C5") (:digest-bit-test 1 #x04 62 #h"22589A024E2B52B44365C84BF9053EAB") (:digest-bit-test 1 #x02 62 #h"B0052285C8B28883ADDD0728B85A7FA2") (:digest-bit-test 1 #x01 62 #h"77598FEF54DCD2A8AF4062FEC8EA07D0") (:digest-bit-test 2 #x80 61 #h"C0516F144ADA2C0093BFEA89C9FA5CEF") (:digest-bit-test 2 #x40 61 #h"1A4AAB1565206E54831978864E6B4E98") (:digest-bit-test 2 #x20 61 #h"ED46B74E2F7904F49E2FF64038EFC620") (:digest-bit-test 2 #x10 61 #h"A60F5E85EB851E6367428340BF949D7A") (:digest-bit-test 2 #x08 61 #h"26770E1F01C793D8363B79CEF5594749") (:digest-bit-test 2 #x04 61 #h"71878DF60B5DF9A34B1064ED509F3B07") (:digest-bit-test 2 #x02 61 #h"C372906819C3B158A5A91FD08332EEE8") (:digest-bit-test 2 #x01 61 #h"5E468347458E0171D2459B72FA762A5D") (:digest-bit-test 3 #x80 60 #h"4A3D18FB567AB08710581C9810B3C1F1") (:digest-bit-test 3 #x40 60 #h"AD2FBD456923D0405A7413463E26FC91") (:digest-bit-test 3 #x20 60 #h"4B94D72B5CB2CF60E1360035A6A823A9") (:digest-bit-test 3 #x10 60 #h"562A13C1BC97451ACB25584C7741EECA") (:digest-bit-test 3 #x08 60 #h"97C6A1580F949812E5FEEE45F0DF91E5") (:digest-bit-test 3 #x04 60 #h"711EB2C46C3E465BCF05204A829D75DB") (:digest-bit-test 3 #x02 60 #h"BE9AA44A92B42D0740A59FC3EF96C59B") (:digest-bit-test 3 #x01 60 #h"841A0BCE1788101C5E650ABFA1367509") (:digest-bit-test 4 #x80 59 #h"D51020E2512CEF1F19781497A8065252") (:digest-bit-test 4 #x40 59 #h"03380DEF2104B313079E26A20D65A67C") (:digest-bit-test 4 #x20 59 #h"486D95AC56F4A12878676E896E0A6279") (:digest-bit-test 4 #x10 59 #h"ED0289B0EA4570C831F880A0007F7404") (:digest-bit-test 4 #x08 59 #h"667FFB9C10ACBAF700E30EA0C0497BA8") (:digest-bit-test 4 #x04 59 #h"151C00A49855680BA36700676857A8F4") (:digest-bit-test 4 #x02 59 #h"CA7CD07DA0E6EDA1040613CF4B70777E") (:digest-bit-test 4 #x01 59 #h"71DA93F3E01AE2945AED2BC4F5052C53") (:digest-bit-test 5 #x80 58 #h"421AD4DBECDDCCB0138E6A2AC0E4F6FC") (:digest-bit-test 5 #x40 58 #h"30BFC0E8F8C2FC95773138BC8DA947B6") (:digest-bit-test 5 #x20 58 #h"9D3A13F27EB032F2687D8E6D1788D61E") (:digest-bit-test 5 #x10 58 #h"0BE383B2766ED8B575B9040BC0D42EF5") (:digest-bit-test 5 #x08 58 #h"4427BC6CC79301E7A26C2A3D8ECB6E10") (:digest-bit-test 5 #x04 58 #h"534D98E515BA47AACF89E3C351887F68") (:digest-bit-test 5 #x02 58 #h"8A8A0244B9B3F6F3C0330CBC34304522") (:digest-bit-test 5 #x01 58 #h"E54B50B64867080469586A3A2B3EF892") (:digest-bit-test 6 #x80 57 #h"873821E3ED8865BC96639C18B23A9A44") (:digest-bit-test 6 #x40 57 #h"757E17C903DF12EA67252CBA283B66A0") (:digest-bit-test 6 #x20 57 #h"D344B3E83A02BCF8D75CF6E5FBEBFCF7") (:digest-bit-test 6 #x10 57 #h"08A482079AED8725E0A41DA42F3BCF88") (:digest-bit-test 6 #x08 57 #h"B148E58BB47D90595E34EFD04A6BF45C") (:digest-bit-test 6 #x04 57 #h"FEE2CB77ABF8EE1DBE1FE5112C05EBE7") (:digest-bit-test 6 #x02 57 #h"4A5DB81DDB230FEBA62388CD585EDFF6") (:digest-bit-test 6 #x01 57 #h"2B48DCA04A1CB4CCCF74D8C8AEF831E0") (:digest-bit-test 7 #x80 56 #h"D6B3AA2679C44FFF034482620FC4B6C4") (:digest-bit-test 7 #x40 56 #h"651C77103A6CAA2DDD64253AB619DCEC") (:digest-bit-test 7 #x20 56 #h"4DA303D58A562B00FD3A168750A5DC51") (:digest-bit-test 7 #x10 56 #h"13670CF998C2E742F0466D414B10FE03") (:digest-bit-test 7 #x08 56 #h"0846D2C1F7202CC2DC62B40E23AD1604") (:digest-bit-test 7 #x04 56 #h"09F09DA03DE4AB2FDCD34A101AA71560") (:digest-bit-test 7 #x02 56 #h"55876BC89EB5D8A45A063F46A758C83D") (:digest-bit-test 7 #x01 56 #h"FF2719AE2554BA4C0EB721799CDA860E") (:digest-bit-test 8 #x80 55 #h"99B6A99F2BF6E8DFEAE34BC1B8BEA0FE") (:digest-bit-test 8 #x40 55 #h"153A4356041A8AFC4610244D059D625C") (:digest-bit-test 8 #x20 55 #h"ADFF5B78D55AF02CA60DC92EE7A5FB72") (:digest-bit-test 8 #x10 55 #h"7B25E849B8EF1F651A85707D0B673CE7") (:digest-bit-test 8 #x08 55 #h"3B81887F8FCBD61A81E98257DBE82814") (:digest-bit-test 8 #x04 55 #h"3640E4FC3D96346AACC19CE13197BC26") (:digest-bit-test 8 #x02 55 #h"9F392C0A01B3F31C872501D822E123B1") (:digest-bit-test 8 #x01 55 #h"FA534E290740E8DF8637C76F1904518B") (:digest-bit-test 9 #x80 54 #h"1C0098B2775421532A7CB1844DD304D9") (:digest-bit-test 9 #x40 54 #h"CA4123F709792AABD8593207AA3D870E") (:digest-bit-test 9 #x20 54 #h"5425E8B0EFCD62EA3E1C5F1798E5057C") (:digest-bit-test 9 #x10 54 #h"671ABDDEE265899ABEEB777C26FE0628") (:digest-bit-test 9 #x08 54 #h"3D78D853674651BE79F7EEB985D66CA0") (:digest-bit-test 9 #x04 54 #h"6EE70CE7ACAC7BBFCAA5918FC7D7A231") (:digest-bit-test 9 #x02 54 #h"5A8CD68C9E7EBB8EC286F95527E1FABD") (:digest-bit-test 9 #x01 54 #h"A3B9360D025565B5BBB74E11EB4CCAF6") (:digest-bit-test 10 #x80 53 #h"FF3A4D6DA7A8C8C223B784F7BB89D3A0") (:digest-bit-test 10 #x40 53 #h"9B2E198A717FF73011A49E4436A993EB") (:digest-bit-test 10 #x20 53 #h"3FE32E36378A361D53811CBB3B65E036") (:digest-bit-test 10 #x10 53 #h"CBA94A4C71DE66B971CC1D1715B4BF97") (:digest-bit-test 10 #x08 53 #h"4FFB7C963D0504F6D0F76D3A74982371") (:digest-bit-test 10 #x04 53 #h"C540F2FF6F64B3F8201CA26DEDF38982") (:digest-bit-test 10 #x02 53 #h"7BD5B7EDB6049EB30E29F7AA381D8BA9") (:digest-bit-test 10 #x01 53 #h"4A0630379B12E49EEE8212350A936463") (:digest-bit-test 11 #x80 52 #h"712E4057E7BD5A9E2F37F24557FE8AD8") (:digest-bit-test 11 #x40 52 #h"EF98CA91A9657B23B153EFC5711A97C2") (:digest-bit-test 11 #x20 52 #h"66C77963623201ACADD590E332DCB36A") (:digest-bit-test 11 #x10 52 #h"EE1FA779386BF3ABDFE5B1CDA730BF1F") (:digest-bit-test 11 #x08 52 #h"FA9A2E663AEFB2A3EF14DF8407CC3CC7") (:digest-bit-test 11 #x04 52 #h"F03821A6191AED4FA02B66A9C7F71C63") (:digest-bit-test 11 #x02 52 #h"53A7A4B6D595901360F4507D9362D11F") (:digest-bit-test 11 #x01 52 #h"58507FDADC715BB403A179FE094FDB3F") (:digest-bit-test 12 #x80 51 #h"C6A4255B565F0B7FA5F3BF239B3CE550") (:digest-bit-test 12 #x40 51 #h"331A4C06F709E2BCE0E5331BCD8770F5") (:digest-bit-test 12 #x20 51 #h"10733E1F79C2B5C1F78C688C43A3CD19") (:digest-bit-test 12 #x10 51 #h"FD5DDB64A262D775FEAFECBE6B196361") (:digest-bit-test 12 #x08 51 #h"D23F63302AE2F9D987D50641A74D09CD") (:digest-bit-test 12 #x04 51 #h"206693D8C90F7FC826820AAD553FB3C0") (:digest-bit-test 12 #x02 51 #h"54571E2A04C159B9CD187E84CD591B5D") (:digest-bit-test 12 #x01 51 #h"5FD2ACD825D46FBB58EB912A263D0144") (:digest-bit-test 13 #x80 50 #h"4000D3A40B0CB27806530E25F2CF1645") (:digest-bit-test 13 #x40 50 #h"3129198B6D899EAF6355AA9038E76D25") (:digest-bit-test 13 #x20 50 #h"D8D03681175ADBF8F46242C2EB7DC855") (:digest-bit-test 13 #x10 50 #h"E33B91B2D6B65749DCD7BFD16FF6496D") (:digest-bit-test 13 #x08 50 #h"BCC9EF044C7D4A807D7BA8DE5ABD9DA0") (:digest-bit-test 13 #x04 50 #h"48277E4B13A266FF3389F2A5D219A341") (:digest-bit-test 13 #x02 50 #h"04B174213538AAD2F2546F8CDA4E1AE3") (:digest-bit-test 13 #x01 50 #h"1C2D889EABE9B8DF20AF4F82CB8E9F32") (:digest-bit-test 14 #x80 49 #h"2CC4983246D6613B913C46A9A9626AC0") (:digest-bit-test 14 #x40 49 #h"CA27C85CB612740C0B811B117080104E") (:digest-bit-test 14 #x20 49 #h"15E7103C17842034916397988BBE4179") (:digest-bit-test 14 #x10 49 #h"52C6EFB891B43888B59871EE62DE12C4") (:digest-bit-test 14 #x08 49 #h"B62131086AFE3EA0965181CC25A4271C") (:digest-bit-test 14 #x04 49 #h"F14EB6ABA0B197361A0008A2F7BD2C17") (:digest-bit-test 14 #x02 49 #h"28DEDF5CD293E20E8D4724DE72EF21B4") (:digest-bit-test 14 #x01 49 #h"D734625FCFCECAE9E6422BC9B0E25C09") (:digest-bit-test 15 #x80 48 #h"4837F0FC7F4477E20897DC342E8A441A") (:digest-bit-test 15 #x40 48 #h"1707597D3776B9FC9FA1880174591AF2") (:digest-bit-test 15 #x20 48 #h"BF7B65F71482D88575422D0ED5B45F6B") (:digest-bit-test 15 #x10 48 #h"D249809882892BAED703041E78B4E31F") (:digest-bit-test 15 #x08 48 #h"80D4B2EFDAE671E9201C6EE54CF24744") (:digest-bit-test 15 #x04 48 #h"A7517BC483991C3D517DAD8CB22AE90A") (:digest-bit-test 15 #x02 48 #h"4FEC09054AF195AEE8BE25A69EEDAE9D") (:digest-bit-test 15 #x01 48 #h"E8E8BBD894CC2E34C30580319F434B0D") (:digest-bit-test 16 #x80 47 #h"B8BC4C030D9B5E7C21DAD46C64A01D47") (:digest-bit-test 16 #x40 47 #h"2FE6FF005BD3DD6B7A0DD2E19B494D86") (:digest-bit-test 16 #x20 47 #h"1F19F7138EF63D8E204761C6F94D7A66") (:digest-bit-test 16 #x10 47 #h"4D068C3202A3E6672D423E18F2376590") (:digest-bit-test 16 #x08 47 #h"1E9952941C130B19BB856BF7C575D776") (:digest-bit-test 16 #x04 47 #h"B697FEB25C0DBE9B15AAF267CA43FB00") (:digest-bit-test 16 #x02 47 #h"155EA0621E9038C14C0731059589FD1C") (:digest-bit-test 16 #x01 47 #h"BD0C6E70CD8BDD76D1A785E807758744") (:digest-bit-test 17 #x80 46 #h"9D769C10174B8913F7E8169AE915A753") (:digest-bit-test 17 #x40 46 #h"025001736462C0854B38E97E36A6A722") (:digest-bit-test 17 #x20 46 #h"BAAE5CD4937CE794C123719159FB04C3") (:digest-bit-test 17 #x10 46 #h"3308EF5BBED8073DF6C40840B7CB1949") (:digest-bit-test 17 #x08 46 #h"87162A4A837FD93A5E917C697471C471") (:digest-bit-test 17 #x04 46 #h"C6F9639643E42CE1CD58FF5B1FC77F54") (:digest-bit-test 17 #x02 46 #h"04684925D5CB72903C75586AFB22F824") (:digest-bit-test 17 #x01 46 #h"0EB1E65C388190160ECF5A1B0B9D6264") (:digest-bit-test 18 #x80 45 #h"C7257CEB571C737132D11B6521BE67EA") (:digest-bit-test 18 #x40 45 #h"EE7648EF561CAE348C3DCC1344CA2D8D") (:digest-bit-test 18 #x20 45 #h"18715BA9CAA905F7D42EE35BB9B6DAF0") (:digest-bit-test 18 #x10 45 #h"81F7169AA6B34763F37EC296EDF8E777") (:digest-bit-test 18 #x08 45 #h"16C8DFFC05C2E5A3FAB785169F655EA1") (:digest-bit-test 18 #x04 45 #h"945DBB32B439F6746C1DCA85BCC19650") (:digest-bit-test 18 #x02 45 #h"507294EA0591C0E74EAA016663A9D41B") (:digest-bit-test 18 #x01 45 #h"DE75CF7B97DBB781D9B7B5D4AE8204C7") (:digest-bit-test 19 #x80 44 #h"85D06D83AE3EF12D42A55DF38DE3905D") (:digest-bit-test 19 #x40 44 #h"515433D6CD023AA480E8E111DC43C7B5") (:digest-bit-test 19 #x20 44 #h"9839348A2E202C867FF409B2AD90E8E3") (:digest-bit-test 19 #x10 44 #h"E8FB9977E83A56190180A77BF3CF73A0") (:digest-bit-test 19 #x08 44 #h"5B80805194B94E300C6356B9316E0485") (:digest-bit-test 19 #x04 44 #h"086E40611F0649CC5B330A0BCD430411") (:digest-bit-test 19 #x02 44 #h"48C94CC7533CAB43EDBCC9828F0416C8") (:digest-bit-test 19 #x01 44 #h"2B6F068A88D555E2E7802FC8A045EA47") (:digest-bit-test 20 #x80 43 #h"2A346699E7C039F552426ACA283A666B") (:digest-bit-test 20 #x40 43 #h"E302E0A7AF88DC248AE8EDC617197A36") (:digest-bit-test 20 #x20 43 #h"6A7F062A9765B7E72FA96FA90DDD143E") (:digest-bit-test 20 #x10 43 #h"CDBFDCC221EB2FFAA3786130098C8592") (:digest-bit-test 20 #x08 43 #h"F5A9AFB7A3C5007C5AEE6ECFAAE9B40C") (:digest-bit-test 20 #x04 43 #h"D5B00318E61E0F34BD1487EE222F7080") (:digest-bit-test 20 #x02 43 #h"333CD297065AF4A6895006E9D4280142") (:digest-bit-test 20 #x01 43 #h"32A631DB7E2CEEBDBEAFB4F875024DE8") (:digest-bit-test 21 #x80 42 #h"AE560D63E7BB6F828FE0F86ADF29F86C") (:digest-bit-test 21 #x40 42 #h"9CE9366DA2449989DD4EB7124B1424A3") (:digest-bit-test 21 #x20 42 #h"BAD0D7713C2C6913C46F7F1A2A92B4A4") (:digest-bit-test 21 #x10 42 #h"FD5D05F5B5EB324A2B594BA8D2435825") (:digest-bit-test 21 #x08 42 #h"58E5890DD2E1DAA3F911EC6A9C33B88F") (:digest-bit-test 21 #x04 42 #h"368AEBF2535160286C1508E8B0D8015A") (:digest-bit-test 21 #x02 42 #h"F9BBF1F99BA8DE645D5DA4E4FC661B13") (:digest-bit-test 21 #x01 42 #h"618688BF18F0A630D8AA26E0644FB20D") (:digest-bit-test 22 #x80 41 #h"1EFCDB0E7B1510826FB1073DF48AA5EA") (:digest-bit-test 22 #x40 41 #h"0D7D9124EA411E52CA2B01FFA1EE292A") (:digest-bit-test 22 #x20 41 #h"BDA259C306268A65B348B575C2CA72CA") (:digest-bit-test 22 #x10 41 #h"A3221BD958FEE82FF3C0374885B33138") (:digest-bit-test 22 #x08 41 #h"3ECFA4CF473A94AC01EB576427B2620E") (:digest-bit-test 22 #x04 41 #h"75A2FE3A9471A0D8D45EE5756C46DBD5") (:digest-bit-test 22 #x02 41 #h"3106D91DCF01FDCF28203F8F2D9100DB") (:digest-bit-test 22 #x01 41 #h"8B80DF449634ADD584C56EC82FA8B491") (:digest-bit-test 23 #x80 40 #h"7642C132B0FF94C2585BFAB0DDD7F6AB") (:digest-bit-test 23 #x40 40 #h"1D5E6A65A4ACA67ECD46104B81BE50CB") (:digest-bit-test 23 #x20 40 #h"60E861BC3EDB744A966B43EBEDA7B56E") (:digest-bit-test 23 #x10 40 #h"6D0BD086D12CEF697B746334883AE196") (:digest-bit-test 23 #x08 40 #h"50B7EC4B54BDBBA0EF6D56765B29E2C0") (:digest-bit-test 23 #x04 40 #h"20D8A4B3C11A4759963AF7A6429FA2C3") (:digest-bit-test 23 #x02 40 #h"98FE37C528A7AE0E341B3DBCCD98EEA6") (:digest-bit-test 23 #x01 40 #h"33D64C0B4E5A9E444252F0738B9C2DE0") (:digest-bit-test 24 #x80 39 #h"5D2BE56802387E0D53C4374EEB8C82B6") (:digest-bit-test 24 #x40 39 #h"5CB0C473C47139C526BDDB60043C68C2") (:digest-bit-test 24 #x20 39 #h"EF271AF9F4401397DDB402C99A4F0F4E") (:digest-bit-test 24 #x10 39 #h"72BF2334299E719FA84844CED300CD4A") (:digest-bit-test 24 #x08 39 #h"E3FD2AC469580923C48AEE429B3562CB") (:digest-bit-test 24 #x04 39 #h"267A19F7B8E18E2B4E720432139B6E8C") (:digest-bit-test 24 #x02 39 #h"381382D00904888081A9552B81ED36BB") (:digest-bit-test 24 #x01 39 #h"824D1F79E689A04CFD5EE69DDC580BE2") (:digest-bit-test 25 #x80 38 #h"357C82CE0EB4F6F667DEF290C0D1D120") (:digest-bit-test 25 #x40 38 #h"D389C3A8975C0AACB44104CCF632C1F8") (:digest-bit-test 25 #x20 38 #h"03631F92DA0C67552BF7A026D679F723") (:digest-bit-test 25 #x10 38 #h"CB0A3236BB2F2DC7B785BA63676A964D") (:digest-bit-test 25 #x08 38 #h"79AC06CCCD507714BD453964ED787677") (:digest-bit-test 25 #x04 38 #h"83B33925BED3AC0EB4F9AF6BC75F0D8B") (:digest-bit-test 25 #x02 38 #h"221A948B265FA265ED0217AFA9448AC9") (:digest-bit-test 25 #x01 38 #h"358FBC82B38B0A24D4AF61C87D6C62A5") (:digest-bit-test 26 #x80 37 #h"66D9F3919AE352F3F16246EAD3074E75") (:digest-bit-test 26 #x40 37 #h"84136628469F13A6D30C2F81D9FB8709") (:digest-bit-test 26 #x20 37 #h"6B8D6430324A11559E31A92743F16644") (:digest-bit-test 26 #x10 37 #h"F009B9C33611966B29B945EB38D2B130") (:digest-bit-test 26 #x08 37 #h"DED34074FEDFCDBBCC4DA3074AEB5087") (:digest-bit-test 26 #x04 37 #h"6A528A222478BCA9DFBFAC2A00B64E15") (:digest-bit-test 26 #x02 37 #h"22C5635999C532034A3FBE8CCA3BFBAE") (:digest-bit-test 26 #x01 37 #h"0C9193A1124BD00CEBB09A05CA6BAC7D") (:digest-bit-test 27 #x80 36 #h"9EE0BA3AFFBC9610FBB0C1F93F98E957") (:digest-bit-test 27 #x40 36 #h"40F6E1BAB20BC825462FA8B84B029E03") (:digest-bit-test 27 #x20 36 #h"479AA5097DB0D27D906967DFE0359B94") (:digest-bit-test 27 #x10 36 #h"4EE4F2F35E36A2729EA0BB07658CEF83") (:digest-bit-test 27 #x08 36 #h"A7D27906D1889C91C565FEB36D3E41E5") (:digest-bit-test 27 #x04 36 #h"488D5CD0C76DEEB44D839F0280F42BD8") (:digest-bit-test 27 #x02 36 #h"3383D0E16168120B3A440D5CB517E65C") (:digest-bit-test 27 #x01 36 #h"049F7E9F7A579E9DC8CB2E90370B7DFD") (:digest-bit-test 28 #x80 35 #h"F15759B10756BBC1F057174E11FBEA3C") (:digest-bit-test 28 #x40 35 #h"9E915844865C745CDDAAE9086D67CB7C") (:digest-bit-test 28 #x20 35 #h"3C5A2485AA83037AE41529AE190DF88B") (:digest-bit-test 28 #x10 35 #h"871E522A6D16C4A0E000C8809F9EC5F6") (:digest-bit-test 28 #x08 35 #h"968B472E57E76D5D1E63476B38C58816") (:digest-bit-test 28 #x04 35 #h"E662F9A0CE1298E18FE149BEE0504AB0") (:digest-bit-test 28 #x02 35 #h"30C3AE4FBC27B9ECD88BBC21D8B3F55D") (:digest-bit-test 28 #x01 35 #h"B4DC26D3BFED9ED9BBE0DBAF21DD95FF") (:digest-bit-test 29 #x80 34 #h"F0EDA2E5CB682C4C82A6DED6E1A9E4E2") (:digest-bit-test 29 #x40 34 #h"AE6E5FE9CD9B0B8FBBA08D86A73C1FC9") (:digest-bit-test 29 #x20 34 #h"B0AF28AB9D0FC7EEE36A757E9A1ED66B") (:digest-bit-test 29 #x10 34 #h"70F0627C98DF0A4282D20B07A6A05BA1") (:digest-bit-test 29 #x08 34 #h"7CE886342A970ED79132994AA682BEBC") (:digest-bit-test 29 #x04 34 #h"25313BE41F42B3D30E1CD065D73ACDD7") (:digest-bit-test 29 #x02 34 #h"A90FA5EBF49DD9F4E77716C3C1E9765D") (:digest-bit-test 29 #x01 34 #h"1F9DD8FC6AC8EFBC2D378D6AB44AAFE7") (:digest-bit-test 30 #x80 33 #h"4B0858EEB2639659EACA7B7B7C3349A5") (:digest-bit-test 30 #x40 33 #h"5E8280869101EF49835627FDFB13E5D3") (:digest-bit-test 30 #x20 33 #h"0B495C962E6799B67D93F1B5B590C844") (:digest-bit-test 30 #x10 33 #h"4DC7D22B8F29BEB964B2965191A11463") (:digest-bit-test 30 #x08 33 #h"60768F63CFA2E88A75367561DF60FA01") (:digest-bit-test 30 #x04 33 #h"009B7E32759B44054975D918DA7424CC") (:digest-bit-test 30 #x02 33 #h"DC82A437FF020C9C9BC699ADF214D937") (:digest-bit-test 30 #x01 33 #h"904D158775D4A8666D663AD2FB2E79A1") (:digest-bit-test 31 #x80 32 #h"FC6B5B1628894C202D19C36A29BE2C98") (:digest-bit-test 31 #x40 32 #h"AA186F907E4A59827646EC5DA8CB4B8C") (:digest-bit-test 31 #x20 32 #h"C889405D3292C5F4866E2B82EB743FDB") (:digest-bit-test 31 #x10 32 #h"2ACD03AC14947052515B8F311F759093") (:digest-bit-test 31 #x08 32 #h"B4CDCE550EF4285C2851EF81B479FDE8") (:digest-bit-test 31 #x04 32 #h"9D1FD01C05A09169E37ED94562BAAAF5") (:digest-bit-test 31 #x02 32 #h"E97333985B140C769EF4CDBF13B5FBA3") (:digest-bit-test 31 #x01 32 #h"29911578E644BDF6257D23B8D4DD0D38") (:digest-bit-test 32 #x80 31 #h"ED9D395824171A7F82A0CB538433A22B") (:digest-bit-test 32 #x40 31 #h"101BE3EECE1ED26CE794B90C6C5D0460") (:digest-bit-test 32 #x20 31 #h"89B836293A99ED6E02D5DADE0121AC20") (:digest-bit-test 32 #x10 31 #h"AEBBF1CFCA7CCE6941FA0B93B9E58B7A") (:digest-bit-test 32 #x08 31 #h"C4714103FA3E1AC58C9AB450F4567764") (:digest-bit-test 32 #x04 31 #h"499F861EE4EFB2FB38A00B97EFF10010") (:digest-bit-test 32 #x02 31 #h"D95C0AD5BB39C47DB3B0D6EE7F354444") (:digest-bit-test 32 #x01 31 #h"FB0E49A8512A6514C8E52E8F302C1313") (:digest-bit-test 33 #x80 30 #h"92ACEF120453F4AF4AC41BF1970D7356") (:digest-bit-test 33 #x40 30 #h"1F9836EE1AFDB7972819B91ABF856A4E") (:digest-bit-test 33 #x20 30 #h"0C3D4612FC048FDAA32E4A94B6F1386F") (:digest-bit-test 33 #x10 30 #h"7CE5B968386A1AC3759B4B4BA636D939") (:digest-bit-test 33 #x08 30 #h"4250DA118C52D1BCD8C76D657535EC5E") (:digest-bit-test 33 #x04 30 #h"07A7BDC93E71936D4358FF104F5C6F2B") (:digest-bit-test 33 #x02 30 #h"39069C6B6051F6F0D270A0E04E91369E") (:digest-bit-test 33 #x01 30 #h"882EE17FB046D8A07610C313AC5915DF") (:digest-bit-test 34 #x80 29 #h"BEBF589B9A2561EDA0E6A08221882759") (:digest-bit-test 34 #x40 29 #h"96C91B562423BCD0727E0A0731D797AC") (:digest-bit-test 34 #x20 29 #h"421B5C3068FC2555A4DF70B3817B8780") (:digest-bit-test 34 #x10 29 #h"43D4E2EA49CD56875A788AE9E892D9C5") (:digest-bit-test 34 #x08 29 #h"67FDD0B32AC1C39FC3331B3CAF957E2E") (:digest-bit-test 34 #x04 29 #h"3B1290877EE8C9D6C0785D7D08B13578") (:digest-bit-test 34 #x02 29 #h"239986662C2E2FDD2DA5C8EBD9AC78B4") (:digest-bit-test 34 #x01 29 #h"1FDF66EA7A8791B4DBD42B3D97624788") (:digest-bit-test 35 #x80 28 #h"6831072E80D199D3C4A348AE6DD143D0") (:digest-bit-test 35 #x40 28 #h"9470D664B893EFF4D79B36ED46D9493F") (:digest-bit-test 35 #x20 28 #h"4B635B3106408769F8F1CD71EF4AF402") (:digest-bit-test 35 #x10 28 #h"FC7ABB2218193926602C5BE159EF2157") (:digest-bit-test 35 #x08 28 #h"8F6D97EC60BBF7BE9F9E2DE37B495D9D") (:digest-bit-test 35 #x04 28 #h"A921143B8BCA6CAC4B44D946E5948537") (:digest-bit-test 35 #x02 28 #h"DD2EB5678E96DE9148B8851680016F63") (:digest-bit-test 35 #x01 28 #h"04F0A7E368A6FEF21524BEB4DC5310C2") (:digest-bit-test 36 #x80 27 #h"07BED9042B3422E6158DA127D4C2BD60") (:digest-bit-test 36 #x40 27 #h"D47C8F862F2A5DA9FAA888FDA124808B") (:digest-bit-test 36 #x20 27 #h"C2C749BF832F924E379EAC89959694C3") (:digest-bit-test 36 #x10 27 #h"4096823ABA928A856D6724FD91C57D3D") (:digest-bit-test 36 #x08 27 #h"B731BBD56CFC1E3EFB11F717E494EA82") (:digest-bit-test 36 #x04 27 #h"A4F83A8ACD7A56B5200834DFF5ABA455") (:digest-bit-test 36 #x02 27 #h"1ECA937A011FD3C181A455D5DCDDAC73") (:digest-bit-test 36 #x01 27 #h"F481C363C8AB7EF5AC2DD6B4389BF62F") (:digest-bit-test 37 #x80 26 #h"5E6906AD1D5495F44366D61FDD593689") (:digest-bit-test 37 #x40 26 #h"033F089D5B15DF34AEE9862A2998B190") (:digest-bit-test 37 #x20 26 #h"C5B96A88C4D30AC218A00FE8C8A5FE0E") (:digest-bit-test 37 #x10 26 #h"ECA700AA944E6014C5336A0A797E9EA5") (:digest-bit-test 37 #x08 26 #h"9822EA7178B96DC5156EF33477D9FFF6") (:digest-bit-test 37 #x04 26 #h"5EEEB310879425F489A2910A1E5BF85B") (:digest-bit-test 37 #x02 26 #h"09C86FFA6114D9356DDD340B829B8315") (:digest-bit-test 37 #x01 26 #h"9A7120E4C17EBCE75121C55F56EA7122") (:digest-bit-test 38 #x80 25 #h"B3632C95BCAB4E24EE5333AA2F28941B") (:digest-bit-test 38 #x40 25 #h"3C5C4A9AD5BA676E0F916621C4D09398") (:digest-bit-test 38 #x20 25 #h"723FD90024007F7103E98DA58890DE41") (:digest-bit-test 38 #x10 25 #h"8C83B58202FE44078263C22E3329B2A6") (:digest-bit-test 38 #x08 25 #h"4E8FD8E2758CD544E6682B987AE13820") (:digest-bit-test 38 #x04 25 #h"4B5A95DBC9911A08B27D33F5B606BC1C") (:digest-bit-test 38 #x02 25 #h"B8CE619A1D6B9956E0B54DB4B295994C") (:digest-bit-test 38 #x01 25 #h"4A5F3B1A66788529448A43F3E12AF39D") (:digest-bit-test 39 #x80 24 #h"DFEBB879EC199A81A4D3B4A8B435DD4C") (:digest-bit-test 39 #x40 24 #h"06F8D0A5735612DD5967037B7CDAC850") (:digest-bit-test 39 #x20 24 #h"E57BCB5946E8F7058DB6528F61C430FA") (:digest-bit-test 39 #x10 24 #h"D99EBFDA2BB73EED3665216E8C2A1CF1") (:digest-bit-test 39 #x08 24 #h"61C9AA0D28C04D6DD753EC855214149E") (:digest-bit-test 39 #x04 24 #h"3A6070C3732E697E7FC826E8EEB5094C") (:digest-bit-test 39 #x02 24 #h"063DEEAE397AE2C6F3A6AE4B98AB2C7A") (:digest-bit-test 39 #x01 24 #h"9D15B95AEB06B324A0134A1F9976DCB4") (:digest-bit-test 40 #x80 23 #h"434B09EA2CCB9C84EE9D5E53224A1AEF") (:digest-bit-test 40 #x40 23 #h"EC30D78EC1CE0EF63367AAEB083161BB") (:digest-bit-test 40 #x20 23 #h"CAA711A199F4A91B0B04DD7D7226ADE7") (:digest-bit-test 40 #x10 23 #h"4A7A550DEDFF320DDA0A5538EC0CAA5B") (:digest-bit-test 40 #x08 23 #h"EF5BF0E556BB02C413E3E721EE46CE8E") (:digest-bit-test 40 #x04 23 #h"AE78A69932F7567419555CB281CC43FB") (:digest-bit-test 40 #x02 23 #h"D4974DF3B1C5C570F9EDBBC36B4E0EFA") (:digest-bit-test 40 #x01 23 #h"66F4FC209A7DC510FD540DB13FA5A9D0") (:digest-bit-test 41 #x80 22 #h"D8B0C69B1460D390394B18A8291CCAE6") (:digest-bit-test 41 #x40 22 #h"842F8BAE44E33E459870B947FBA846A4") (:digest-bit-test 41 #x20 22 #h"19EE32DC24E80C8E41A1DE95B555C3DB") (:digest-bit-test 41 #x10 22 #h"5EC5971D4C35A16E4DF4957454C9AC67") (:digest-bit-test 41 #x08 22 #h"28712A9C1B541BF38BDD3579D050D5CB") (:digest-bit-test 41 #x04 22 #h"6A6B51E428A95BEEA6F4D4597296E03D") (:digest-bit-test 41 #x02 22 #h"14D77332F92E1C1BA396812696946307") (:digest-bit-test 41 #x01 22 #h"3494210E35210F36EF5863E9654FE203") (:digest-bit-test 42 #x80 21 #h"2153AFCA13686918AD74D84B91B3FD7E") (:digest-bit-test 42 #x40 21 #h"E8C2D6FDA486A004774D642971D299DE") (:digest-bit-test 42 #x20 21 #h"D8BFD743BAC554D9FAEE587568C779C9") (:digest-bit-test 42 #x10 21 #h"3C6D50F6E8B2DF1F0170DD1F5078005B") (:digest-bit-test 42 #x08 21 #h"904751732AD4A6DD1633F6F32FE15B6C") (:digest-bit-test 42 #x04 21 #h"6F6458AC973D5227EA1FA11BDDCF5C28") (:digest-bit-test 42 #x02 21 #h"3512A0D0699AB677C0E8D18AA60669F5") (:digest-bit-test 42 #x01 21 #h"D20E8CE906D28EB16A79AA50133D0390") (:digest-bit-test 43 #x80 20 #h"FA25C49644FE02B2DCC09B21DC80CC8C") (:digest-bit-test 43 #x40 20 #h"BEF7CB2C5BB419A274DB5F752B58789B") (:digest-bit-test 43 #x20 20 #h"4E5B96D2A37D53FAD56E1011F83A9B95") (:digest-bit-test 43 #x10 20 #h"F896E7E529BA2C51F35FA96713A90A54") (:digest-bit-test 43 #x08 20 #h"08A7042023558FEFE2EED405784152BC") (:digest-bit-test 43 #x04 20 #h"793B08BDBF6FE53A4DABF59D0F3065E9") (:digest-bit-test 43 #x02 20 #h"AA147CCCFE9C4D8DB5B53CB30DD9E06F") (:digest-bit-test 43 #x01 20 #h"5D59349615747260835F2453EEE6BC5B") (:digest-bit-test 44 #x80 19 #h"CC729FB233027898E5C518AF9B545EB0") (:digest-bit-test 44 #x40 19 #h"8B6E6D2982109FF64A86951CF1DB22E6") (:digest-bit-test 44 #x20 19 #h"2C979E5B5505F99C0285462C6E9A2585") (:digest-bit-test 44 #x10 19 #h"5E921F1CDB50574A1D42A318F72F4E06") (:digest-bit-test 44 #x08 19 #h"91C95A8DCA2CA8989CE17EC38A6388A7") (:digest-bit-test 44 #x04 19 #h"684120A9CFAB2CD256FA26077E98D848") (:digest-bit-test 44 #x02 19 #h"FBB5156D83A78CB68DC5DF712C253D1A") (:digest-bit-test 44 #x01 19 #h"3CB2BDC773A346D47EE802D67D547693") (:digest-bit-test 45 #x80 18 #h"DBF8F334AB91DED574DD285F8C000FF4") (:digest-bit-test 45 #x40 18 #h"0B46FA6EE628F27B47F0A4A2596EADEC") (:digest-bit-test 45 #x20 18 #h"EBDFAF3A03CB6F6B132DC4978D68995C") (:digest-bit-test 45 #x10 18 #h"1B8832D27893A6F8B971EF9145CAED46") (:digest-bit-test 45 #x08 18 #h"C7424DA41E411A7DBD0EBD1182DE61A3") (:digest-bit-test 45 #x04 18 #h"4E66E56FD2AD4E534C43A9976DB2C75E") (:digest-bit-test 45 #x02 18 #h"760C2D53D55FBD65E7DAED31E4F463CF") (:digest-bit-test 45 #x01 18 #h"D517E380A8C618BBA8169A905224AD4A") (:digest-bit-test 46 #x80 17 #h"3031C0316DE64B89C3E0780FE5C2ECE6") (:digest-bit-test 46 #x40 17 #h"E11DDBFE49C7D15D4605FE051F7DC13C") (:digest-bit-test 46 #x20 17 #h"6AAED62F00954A26BF916E0C245ACF42") (:digest-bit-test 46 #x10 17 #h"FF448413805677217C354881E17FD9E5") (:digest-bit-test 46 #x08 17 #h"908FD38B278D2DF6E24A13DD924C484D") (:digest-bit-test 46 #x04 17 #h"152F4843E348EFE4E73E74E0CF4B8219") (:digest-bit-test 46 #x02 17 #h"E21E3D6E39C1F98BFE666A2C69520211") (:digest-bit-test 46 #x01 17 #h"E07EA5D16AEB8431BFB016EE7BD0C5CC") (:digest-bit-test 47 #x80 16 #h"AFF6A755F2ABD47A06165D5C28E125BB") (:digest-bit-test 47 #x40 16 #h"DCE5532469BDD235444DF3608D98EBF0") (:digest-bit-test 47 #x20 16 #h"DA4808CEDCF6FD31715854CF73CC3383") (:digest-bit-test 47 #x10 16 #h"22D2C86CA8BE7782C2239D51CC285A52") (:digest-bit-test 47 #x08 16 #h"6DE111AC57EEC38FF4F5B8B458F35C20") (:digest-bit-test 47 #x04 16 #h"0169943B9748514AB5D0083D5174F7F0") (:digest-bit-test 47 #x02 16 #h"C1EB9BCEEC97EBD8E6589C2CE337033F") (:digest-bit-test 47 #x01 16 #h"ECB3F11368167148C7D35CAD06FF0C6C") (:digest-bit-test 48 #x80 15 #h"9A42CB788CDEE1C20EEC7B16F294E184") (:digest-bit-test 48 #x40 15 #h"2CCF587C931D62CAC815676A6A6457B3") (:digest-bit-test 48 #x20 15 #h"F6F2004BC97D03608CABB0BD44E998A1") (:digest-bit-test 48 #x10 15 #h"7C80829659877A03938CC796BA738DEF") (:digest-bit-test 48 #x08 15 #h"4CA3F42094A36B4FE4DC893BFB813310") (:digest-bit-test 48 #x04 15 #h"474513BB6D0C0F73A63DFE920210216E") (:digest-bit-test 48 #x02 15 #h"431BE2611DFFD6DE4EAB6936E0E497DA") (:digest-bit-test 48 #x01 15 #h"813B32050FEDCDB719F95A646E888560") (:digest-bit-test 49 #x80 14 #h"49384B8B60C1A065346A995BB31CEA47") (:digest-bit-test 49 #x40 14 #h"B97D733DE2C048FF0C01891114D0AFB5") (:digest-bit-test 49 #x20 14 #h"8B8346E0F1D63A73CE1CCAD90D2CF097") (:digest-bit-test 49 #x10 14 #h"137398F39EF97AE7B6B682F8253CE123") (:digest-bit-test 49 #x08 14 #h"6E244EC4300F40A8DCBE38A446DE9006") (:digest-bit-test 49 #x04 14 #h"0286C3F8D66DAB8FF8CD925A1B9D7140") (:digest-bit-test 49 #x02 14 #h"788CC909AD9F81FEF4749B8B58C92473") (:digest-bit-test 49 #x01 14 #h"A05C4E77731A523F396EADA342D6E66A") (:digest-bit-test 50 #x80 13 #h"5C5208058E887AEFA1A32E8988A37455") (:digest-bit-test 50 #x40 13 #h"7567725FF801A30914E07CFFE1A6C49A") (:digest-bit-test 50 #x20 13 #h"346DE7910432F66E09BAC32E34EB1B58") (:digest-bit-test 50 #x10 13 #h"145C587A9887EFE3D3E0E758B7589D39") (:digest-bit-test 50 #x08 13 #h"E0CFD61D4F4604C26E299A7F1FF60A9B") (:digest-bit-test 50 #x04 13 #h"031525ABB3AA04A8F9FF4EEA20955BF2") (:digest-bit-test 50 #x02 13 #h"8FC8AFDFFBA17F5F6FECAAB9B52DF2A6") (:digest-bit-test 50 #x01 13 #h"1959366FB1C73BE165B12D3A972BBBF7") (:digest-bit-test 51 #x80 12 #h"822496D965F7D85215D7752AFF1C03CC") (:digest-bit-test 51 #x40 12 #h"C2E0DE6429654FB9590324DCF1D92D8F") (:digest-bit-test 51 #x20 12 #h"4D360BBE43BE367A2A7EE6BFF0ECDC65") (:digest-bit-test 51 #x10 12 #h"83351D012FEF8C39D6C8ED2764365222") (:digest-bit-test 51 #x08 12 #h"68B502C668B792ED079866770B10C965") (:digest-bit-test 51 #x04 12 #h"9160B774CBD240B9971CC01C694254EA") (:digest-bit-test 51 #x02 12 #h"772D02B47D9A881ED8793AEA6DB156A2") (:digest-bit-test 51 #x01 12 #h"453952F734884B80C5843A05693F9BB5") (:digest-bit-test 52 #x80 11 #h"F5816D1064596ABFF2E783455467626B") (:digest-bit-test 52 #x40 11 #h"AB5FE94D6F3942B597087F55689F88E3") (:digest-bit-test 52 #x20 11 #h"53CAAF5CBC27128942AB99FC82F93D16") (:digest-bit-test 52 #x10 11 #h"4ECC87CE3E1663123FC0073032A46698") (:digest-bit-test 52 #x08 11 #h"AEDD921FC1C61F882874AD4C852326E7") (:digest-bit-test 52 #x04 11 #h"13B9902301C02A268AD8BF10B8F9E3A1") (:digest-bit-test 52 #x02 11 #h"A223438271EB74888A765160D6522886") (:digest-bit-test 52 #x01 11 #h"0ADAFB3AB3E613570405A34CD6F45F66") (:digest-bit-test 53 #x80 10 #h"EAE6F63E52CD7468B6D0ECC4B071237C") (:digest-bit-test 53 #x40 10 #h"18D3E8B9062752CAEBE9D883134AAABC") (:digest-bit-test 53 #x20 10 #h"6EDF355D7837ABDFA212D2CD5BCB87D6") (:digest-bit-test 53 #x10 10 #h"0A3ECD269F355AB60EEFBE4091F18AD5") (:digest-bit-test 53 #x08 10 #h"6E7B760A6835B012538A335E380780E3") (:digest-bit-test 53 #x04 10 #h"C662C5004355636CA82CD719F9D1C73E") (:digest-bit-test 53 #x02 10 #h"F5AE69B217C1CF7244A23B131EDD92EA") (:digest-bit-test 53 #x01 10 #h"C1932E05A9013D9F99F4D3E5276A119C") (:digest-bit-test 54 #x80 9 #h"A6B846C6737042EA576BE18DE7E02269") (:digest-bit-test 54 #x40 9 #h"F4152ECC66945DA718F7D9D555187B6C") (:digest-bit-test 54 #x20 9 #h"501779DF50469939215CCCE08A3A94D6") (:digest-bit-test 54 #x10 9 #h"C1ABB35E11F4BC38294874287BEE9AAF") (:digest-bit-test 54 #x08 9 #h"9C91D1E0FA615B35AE1BECB2246E6455") (:digest-bit-test 54 #x04 9 #h"0C0736C7063B09A489911E501C0150E3") (:digest-bit-test 54 #x02 9 #h"B38E7B51485EDD91FD7E9F4378E38816") (:digest-bit-test 54 #x01 9 #h"595EB1247564E5E2F0CD600972D5BDD1") (:digest-bit-test 55 #x80 8 #h"1903BA1EC1F52753FBB268F9F3CCD6B1") (:digest-bit-test 55 #x40 8 #h"AAD887A7C026424568B7ABD0811EB531") (:digest-bit-test 55 #x20 8 #h"A7045885FB7FCD4A53CB0F22C6CDB5AD") (:digest-bit-test 55 #x10 8 #h"CD5B21D3AA49BABBC11B111BBDF76EC9") (:digest-bit-test 55 #x08 8 #h"4643EF5500FDED7B08B5D69C62D5582D") (:digest-bit-test 55 #x04 8 #h"4B90DA4B10A0B514998EF664C3BAFF69") (:digest-bit-test 55 #x02 8 #h"3F93EDCBC0F9DAA89D2034C562F1BDFA") (:digest-bit-test 55 #x01 8 #h"6E4C987BE3A6B24B3E38F1CAFE963C1E") (:digest-bit-test 56 #x80 7 #h"F025E2F601BBD45F231B7DCC4056B365") (:digest-bit-test 56 #x40 7 #h"C6C66B75C45E8E06811AF898D995AE1C") (:digest-bit-test 56 #x20 7 #h"78A2026C6B2693223B902BE948136BB8") (:digest-bit-test 56 #x10 7 #h"E2BBAC6D03DDAF61E40CE15DBFBE90C3") (:digest-bit-test 56 #x08 7 #h"CDB03F27AEDB30F7E596343BECB734BD") (:digest-bit-test 56 #x04 7 #h"93E750C651C7948DA2A60699DF6DEDCA") (:digest-bit-test 56 #x02 7 #h"DEAF528DF04ACF72DE18B3217053D427") (:digest-bit-test 56 #x01 7 #h"46A254BF46ED3199BB635ECCDAF15885") (:digest-bit-test 57 #x80 6 #h"0FF7741D480328D0686A2DEC4B41B4AE") (:digest-bit-test 57 #x40 6 #h"E146B00D2369DC2DDDA083A8BB1A7DEE") (:digest-bit-test 57 #x20 6 #h"C87C5FF808384504E42BFD1BE5A712B1") (:digest-bit-test 57 #x10 6 #h"8275B17CEABDFEF760222DA01A35715D") (:digest-bit-test 57 #x08 6 #h"D3DD3D6F53B45B797778E7FEF28A8C5B") (:digest-bit-test 57 #x04 6 #h"E5F72DF56B978D8DB7E7EED04AF709B4") (:digest-bit-test 57 #x02 6 #h"0F5730004ACE61A069514071F184A1B6") (:digest-bit-test 57 #x01 6 #h"5B70D9641D978CE2E2CFFD7FB77710A9") (:digest-bit-test 58 #x80 5 #h"7EDDEF710BA2068E8598EE4D4359114D") (:digest-bit-test 58 #x40 5 #h"B89DFF15C70666B1F41D53C3EEFDF88B") (:digest-bit-test 58 #x20 5 #h"3762BACD52DC2AD602CFEFDBCCB86699") (:digest-bit-test 58 #x10 5 #h"EC0B054B6DF1C6622ACB55F025092521") (:digest-bit-test 58 #x08 5 #h"38C8CC15D9C50B404EB18E07F5C020DC") (:digest-bit-test 58 #x04 5 #h"B841829E581AA28D25B61890711D99C5") (:digest-bit-test 58 #x02 5 #h"D91E2A0CFD68A772D39A15DCB0061E72") (:digest-bit-test 58 #x01 5 #h"46D2ED6F3043A6201A7A9853320D70BA") (:digest-bit-test 59 #x80 4 #h"0E380317C0B7A38666CA700C54A86A7D") (:digest-bit-test 59 #x40 4 #h"6459F489263B4AA47205258F8844B57B") (:digest-bit-test 59 #x20 4 #h"67CF6FBF0D86024C9B54B140350298C2") (:digest-bit-test 59 #x10 4 #h"67D1FEFA06650699BBA2498D77422E48") (:digest-bit-test 59 #x08 4 #h"7EF6EEF95A7F051CFF31EB3F8906D7BD") (:digest-bit-test 59 #x04 4 #h"8EF040642F6A536C63556B8708BC17E5") (:digest-bit-test 59 #x02 4 #h"DB7648736FFA74596EB5C3B3918AEBA3") (:digest-bit-test 59 #x01 4 #h"01C0DCC29632E632E2D65D22C8D5A397") (:digest-bit-test 60 #x80 3 #h"505A6E9E779E4AC35767F624C815F2E2") (:digest-bit-test 60 #x40 3 #h"E5404AD29B710C5189669E150A710D29") (:digest-bit-test 60 #x20 3 #h"40BEE92CF590D130F7CD8DF31223B105") (:digest-bit-test 60 #x10 3 #h"A213CD218594A7F3EB14B627E1FC5B76") (:digest-bit-test 60 #x08 3 #h"F2ECA81F5EE194D356210A5E83657BCC") (:digest-bit-test 60 #x04 3 #h"BE42CF5328636668130F9000FD6B601C") (:digest-bit-test 60 #x02 3 #h"7D8CB103E55798EBC816DBB9D49B1B0F") (:digest-bit-test 60 #x01 3 #h"7996972214DBEA50ED400B5250E3AE6F") (:digest-bit-test 61 #x80 2 #h"47CAF317CF83F0D4B52015079A22067C") (:digest-bit-test 61 #x40 2 #h"2C8B88503B88BBF4E03F9112EADCAA1E") (:digest-bit-test 61 #x20 2 #h"27D5C2DBD350B6D18849CC5DFD690630") (:digest-bit-test 61 #x10 2 #h"F2F36909DBA92546CCC4536C529E1244") (:digest-bit-test 61 #x08 2 #h"A8F24846E4BEB0662FB1DB3448B9B80E") (:digest-bit-test 61 #x04 2 #h"15E190036F667CE0AE80DB61834DB56F") (:digest-bit-test 61 #x02 2 #h"EBC2C68270E129D7766887108739BAC9") (:digest-bit-test 61 #x01 2 #h"B6A4C6F85D391A98D0513E074B5313C5") (:digest-bit-test 62 #x80 1 #h"25F86F015DF2C1DB33B53BDAC1F7C37E") (:digest-bit-test 62 #x40 1 #h"26154B8662C7AB915CFD5D3AEACA736A") (:digest-bit-test 62 #x20 1 #h"1EFCFE1F115FE9DF8D60F1B985FEBE3A") (:digest-bit-test 62 #x10 1 #h"37DC0F6EDD8AC35C5A556081B41097DD") (:digest-bit-test 62 #x08 1 #h"E4B76A9A8F6BCA334439CB82892C2925") (:digest-bit-test 62 #x04 1 #h"934867C0BBFCB06C5BBA8A324EBF9EA4") (:digest-bit-test 62 #x02 1 #h"56859B2F54F496E8BB0A09231975842E") (:digest-bit-test 62 #x01 1 #h"7D7B4FB873242930EF536C6E80879BA1") (:digest-bit-test 63 #x80 0 #h"CC10DAD64C6DECDA5FBDD62A11BBE586") (:digest-bit-test 63 #x40 0 #h"83F78A4FAA4E4ED312DC33C6B2514700") (:digest-bit-test 63 #x20 0 #h"DDA2969799CEC4F270FCB69209474EC7") (:digest-bit-test 63 #x10 0 #h"8197D643B6A206825B566BFEC1461987") (:digest-bit-test 63 #x08 0 #h"638A19A3375D1CD4A6D597D0ED0FB2A3") (:digest-bit-test 63 #x04 0 #h"62881F317DE9E38108F29307239EC178") (:digest-bit-test 63 #x02 0 #h"441C9490934F4E743EF246C24576AF8E") (:digest-bit-test 63 #x01 0 #h"0B0BA2C1FE0416434ABD826DB682FAD5") ironclad-0.57/testing/test-vectors/misty1.testvec000066400000000000000000001304301420372057600222130ustar00rootroot00000000000000;;; tests from NESSIE (http://www.cryptonessie.org/) (:ecb-mode-test #h"80000000000000000000000000000000" #h"0000000000000000" #h"B5EDA7D64FCD2A02") (:ecb-mode-test #h"40000000000000000000000000000000" #h"0000000000000000" #h"EE7704FEB8363AE7") (:ecb-mode-test #h"20000000000000000000000000000000" #h"0000000000000000" #h"13CE7F4D691500E5") (:ecb-mode-test #h"10000000000000000000000000000000" #h"0000000000000000" #h"95EFB24F87A00F8B") (:ecb-mode-test #h"08000000000000000000000000000000" #h"0000000000000000" #h"2E1B2D4C1F8ADA93") (:ecb-mode-test #h"04000000000000000000000000000000" #h"0000000000000000" #h"93A0C856B5A15D17") (:ecb-mode-test #h"02000000000000000000000000000000" #h"0000000000000000" #h"26F070473709DDD3") (:ecb-mode-test #h"01000000000000000000000000000000" #h"0000000000000000" #h"307648EFA8EDC0E3") (:ecb-mode-test #h"00800000000000000000000000000000" #h"0000000000000000" #h"D8DF4DECAFCF82BA") (:ecb-mode-test #h"00400000000000000000000000000000" #h"0000000000000000" #h"736BC8D9CA650CE5") (:ecb-mode-test #h"00200000000000000000000000000000" #h"0000000000000000" #h"96F0B76064D85F51") (:ecb-mode-test #h"00100000000000000000000000000000" #h"0000000000000000" #h"E64959914035165A") (:ecb-mode-test #h"00080000000000000000000000000000" #h"0000000000000000" #h"71D4A818DD87C28C") (:ecb-mode-test #h"00040000000000000000000000000000" #h"0000000000000000" #h"6D8B15055A9D6F9B") (:ecb-mode-test #h"00020000000000000000000000000000" #h"0000000000000000" #h"55647D1966241FA0") (:ecb-mode-test #h"00010000000000000000000000000000" #h"0000000000000000" #h"35056BD48DD52DD5") (:ecb-mode-test #h"00008000000000000000000000000000" #h"0000000000000000" #h"971D05A15B00795F") (:ecb-mode-test #h"00004000000000000000000000000000" #h"0000000000000000" #h"D736385D0276280D") (:ecb-mode-test #h"00002000000000000000000000000000" #h"0000000000000000" #h"D91357A4CBB45A41") (:ecb-mode-test #h"00001000000000000000000000000000" #h"0000000000000000" #h"BA56FC91CBD8E6A8") (:ecb-mode-test #h"00000800000000000000000000000000" #h"0000000000000000" #h"DF7E8E7A1244DE27") (:ecb-mode-test #h"00000400000000000000000000000000" #h"0000000000000000" #h"1799C7D2C3B2DF95") (:ecb-mode-test #h"00000200000000000000000000000000" #h"0000000000000000" #h"91F7F20D0CFDEBBE") (:ecb-mode-test #h"00000100000000000000000000000000" #h"0000000000000000" #h"1F5880A6AD814FCB") (:ecb-mode-test #h"00000080000000000000000000000000" #h"0000000000000000" #h"7C711BBEA687E4B7") (:ecb-mode-test #h"00000040000000000000000000000000" #h"0000000000000000" #h"B116BD7E2029BBEE") (:ecb-mode-test #h"00000020000000000000000000000000" #h"0000000000000000" #h"2293E34A270DE17E") (:ecb-mode-test #h"00000010000000000000000000000000" #h"0000000000000000" #h"A9E23C1D56A36D4F") (:ecb-mode-test #h"00000008000000000000000000000000" #h"0000000000000000" #h"825EE27FC2DFD114") (:ecb-mode-test #h"00000004000000000000000000000000" #h"0000000000000000" #h"9A2B95A3E21A8E65") (:ecb-mode-test #h"00000002000000000000000000000000" #h"0000000000000000" #h"364931D1869B97ED") (:ecb-mode-test #h"00000001000000000000000000000000" #h"0000000000000000" #h"3B51CCAA6082708D") (:ecb-mode-test #h"00000000800000000000000000000000" #h"0000000000000000" #h"AF7C3B59E56C5BF2") (:ecb-mode-test #h"00000000400000000000000000000000" #h"0000000000000000" #h"13A15901144A0517") (:ecb-mode-test #h"00000000200000000000000000000000" #h"0000000000000000" #h"45DF7FBF944EED60") (:ecb-mode-test #h"00000000100000000000000000000000" #h"0000000000000000" #h"FD53EA6C45E7BD72") (:ecb-mode-test #h"00000000080000000000000000000000" #h"0000000000000000" #h"AE301D63A4ABD99B") (:ecb-mode-test #h"00000000040000000000000000000000" #h"0000000000000000" #h"810AEDB651136C2C") (:ecb-mode-test #h"00000000020000000000000000000000" #h"0000000000000000" #h"6D7923F3E5407939") (:ecb-mode-test #h"00000000010000000000000000000000" #h"0000000000000000" #h"ED659407D3367F3B") (:ecb-mode-test #h"00000000008000000000000000000000" #h"0000000000000000" #h"43884A3A589A83DF") (:ecb-mode-test #h"00000000004000000000000000000000" #h"0000000000000000" #h"B0D5866AE233B4FD") (:ecb-mode-test #h"00000000002000000000000000000000" #h"0000000000000000" #h"1980E8259B9A651E") (:ecb-mode-test #h"00000000001000000000000000000000" #h"0000000000000000" #h"3451535F4FDDB23F") (:ecb-mode-test #h"00000000000800000000000000000000" #h"0000000000000000" #h"46B6A290868205F4") (:ecb-mode-test #h"00000000000400000000000000000000" #h"0000000000000000" #h"439E65B4CB242789") (:ecb-mode-test #h"00000000000200000000000000000000" #h"0000000000000000" #h"F5459731A3478E9F") (:ecb-mode-test #h"00000000000100000000000000000000" #h"0000000000000000" #h"28BF6EE27B74938E") (:ecb-mode-test #h"00000000000080000000000000000000" #h"0000000000000000" #h"F27E0FE7E11DA460") (:ecb-mode-test #h"00000000000040000000000000000000" #h"0000000000000000" #h"0E972F84B35C20D5") (:ecb-mode-test #h"00000000000020000000000000000000" #h"0000000000000000" #h"8CBD55AB09EF7033") (:ecb-mode-test #h"00000000000010000000000000000000" #h"0000000000000000" #h"B162CBDA795222AB") (:ecb-mode-test #h"00000000000008000000000000000000" #h"0000000000000000" #h"EADF5E6B5CA2F205") (:ecb-mode-test #h"00000000000004000000000000000000" #h"0000000000000000" #h"224D51BBC1C022A0") (:ecb-mode-test #h"00000000000002000000000000000000" #h"0000000000000000" #h"32B18E595BA64925") (:ecb-mode-test #h"00000000000001000000000000000000" #h"0000000000000000" #h"12C364DD05943BCF") (:ecb-mode-test #h"00000000000000800000000000000000" #h"0000000000000000" #h"C11549479F7A04A5") (:ecb-mode-test #h"00000000000000400000000000000000" #h"0000000000000000" #h"67CF73E19C4D004D") (:ecb-mode-test #h"00000000000000200000000000000000" #h"0000000000000000" #h"F35F1C16B6885D35") (:ecb-mode-test #h"00000000000000100000000000000000" #h"0000000000000000" #h"D964407E8A910063") (:ecb-mode-test #h"00000000000000080000000000000000" #h"0000000000000000" #h"2118444ECDBEFCB9") (:ecb-mode-test #h"00000000000000040000000000000000" #h"0000000000000000" #h"0891F28A1EF9C52F") (:ecb-mode-test #h"00000000000000020000000000000000" #h"0000000000000000" #h"5771EE0D778E53B0") (:ecb-mode-test #h"00000000000000010000000000000000" #h"0000000000000000" #h"6D957F1C5179EB81") (:ecb-mode-test #h"00000000000000008000000000000000" #h"0000000000000000" #h"4532114D129EE6D6") (:ecb-mode-test #h"00000000000000004000000000000000" #h"0000000000000000" #h"E83CCEA05AC0E368") (:ecb-mode-test #h"00000000000000002000000000000000" #h"0000000000000000" #h"3EC37A76EDD7D36D") (:ecb-mode-test #h"00000000000000001000000000000000" #h"0000000000000000" #h"19DA57F35DBE4278") (:ecb-mode-test #h"00000000000000000800000000000000" #h"0000000000000000" #h"095BBEFD99B3EA5E") (:ecb-mode-test #h"00000000000000000400000000000000" #h"0000000000000000" #h"5C75B1E985742DE0") (:ecb-mode-test #h"00000000000000000200000000000000" #h"0000000000000000" #h"D4F32B059A0F70CE") (:ecb-mode-test #h"00000000000000000100000000000000" #h"0000000000000000" #h"5C3A9D450839EF6A") (:ecb-mode-test #h"00000000000000000080000000000000" #h"0000000000000000" #h"0599BEF5D7799C9E") (:ecb-mode-test #h"00000000000000000040000000000000" #h"0000000000000000" #h"8E9B91B3123406E7") (:ecb-mode-test #h"00000000000000000020000000000000" #h"0000000000000000" #h"C525925B8A708A75") (:ecb-mode-test #h"00000000000000000010000000000000" #h"0000000000000000" #h"8A5833D0FE6A630F") (:ecb-mode-test #h"00000000000000000008000000000000" #h"0000000000000000" #h"DCF3D5BAF3DE61A0") (:ecb-mode-test #h"00000000000000000004000000000000" #h"0000000000000000" #h"F6D5FFEB1564CF9C") (:ecb-mode-test #h"00000000000000000002000000000000" #h"0000000000000000" #h"8425331851134F68") (:ecb-mode-test #h"00000000000000000001000000000000" #h"0000000000000000" #h"02486E0A715229CB") (:ecb-mode-test #h"00000000000000000000800000000000" #h"0000000000000000" #h"2D88ABE9595090E5") (:ecb-mode-test #h"00000000000000000000400000000000" #h"0000000000000000" #h"2B447F384733C6C3") (:ecb-mode-test #h"00000000000000000000200000000000" #h"0000000000000000" #h"E7F1CA05120B5327") (:ecb-mode-test #h"00000000000000000000100000000000" #h"0000000000000000" #h"39F3897FD93F458F") (:ecb-mode-test #h"00000000000000000000080000000000" #h"0000000000000000" #h"58D0D0157012E79E") (:ecb-mode-test #h"00000000000000000000040000000000" #h"0000000000000000" #h"4BC1AE301508B1A0") (:ecb-mode-test #h"00000000000000000000020000000000" #h"0000000000000000" #h"7CA33618F1F4CDC1") (:ecb-mode-test #h"00000000000000000000010000000000" #h"0000000000000000" #h"F771EC2C46CA9507") (:ecb-mode-test #h"00000000000000000000008000000000" #h"0000000000000000" #h"6B3AEDAA8311A9E2") (:ecb-mode-test #h"00000000000000000000004000000000" #h"0000000000000000" #h"645710AAFC1AD56A") (:ecb-mode-test #h"00000000000000000000002000000000" #h"0000000000000000" #h"F3AE7FA8F7ABD0A0") (:ecb-mode-test #h"00000000000000000000001000000000" #h"0000000000000000" #h"3F19DF683E2BF8F3") (:ecb-mode-test #h"00000000000000000000000800000000" #h"0000000000000000" #h"62D646ECFBD4136B") (:ecb-mode-test #h"00000000000000000000000400000000" #h"0000000000000000" #h"5DC2BFAB0997B130") (:ecb-mode-test #h"00000000000000000000000200000000" #h"0000000000000000" #h"ED69491C5F7A3957") (:ecb-mode-test #h"00000000000000000000000100000000" #h"0000000000000000" #h"A14FC5BFF3E137F0") (:ecb-mode-test #h"00000000000000000000000080000000" #h"0000000000000000" #h"DAA30797B07BFBE2") (:ecb-mode-test #h"00000000000000000000000040000000" #h"0000000000000000" #h"20679B78B36B4817") (:ecb-mode-test #h"00000000000000000000000020000000" #h"0000000000000000" #h"097C25FBAAD047F4") (:ecb-mode-test #h"00000000000000000000000010000000" #h"0000000000000000" #h"271B7E9E697AA5AD") (:ecb-mode-test #h"00000000000000000000000008000000" #h"0000000000000000" #h"D0B65735C4BB3C7A") (:ecb-mode-test #h"00000000000000000000000004000000" #h"0000000000000000" #h"C45006F2474B962B") (:ecb-mode-test #h"00000000000000000000000002000000" #h"0000000000000000" #h"D41B09CE3717A549") (:ecb-mode-test #h"00000000000000000000000001000000" #h"0000000000000000" #h"274DCF19128A7A5F") (:ecb-mode-test #h"00000000000000000000000000800000" #h"0000000000000000" #h"367BDF7F4D162AA9") (:ecb-mode-test #h"00000000000000000000000000400000" #h"0000000000000000" #h"C3560CFB89F4EE7E") (:ecb-mode-test #h"00000000000000000000000000200000" #h"0000000000000000" #h"3E06A7C290502DF7") (:ecb-mode-test #h"00000000000000000000000000100000" #h"0000000000000000" #h"A446FAEB2E6C7DC8") (:ecb-mode-test #h"00000000000000000000000000080000" #h"0000000000000000" #h"A6844BF5C273190A") (:ecb-mode-test #h"00000000000000000000000000040000" #h"0000000000000000" #h"CC7305667BE061DD") (:ecb-mode-test #h"00000000000000000000000000020000" #h"0000000000000000" #h"03CBCA8A2CA85241") (:ecb-mode-test #h"00000000000000000000000000010000" #h"0000000000000000" #h"FC6ACEF79D79C572") (:ecb-mode-test #h"00000000000000000000000000008000" #h"0000000000000000" #h"656FACEBBCDFB19C") (:ecb-mode-test #h"00000000000000000000000000004000" #h"0000000000000000" #h"09CF9885BF7BB142") (:ecb-mode-test #h"00000000000000000000000000002000" #h"0000000000000000" #h"071FBD9D2AAD88B2") (:ecb-mode-test #h"00000000000000000000000000001000" #h"0000000000000000" #h"82CB2CC125D4659D") (:ecb-mode-test #h"00000000000000000000000000000800" #h"0000000000000000" #h"8EABA33903F93948") (:ecb-mode-test #h"00000000000000000000000000000400" #h"0000000000000000" #h"83FD413EB23B5C16") (:ecb-mode-test #h"00000000000000000000000000000200" #h"0000000000000000" #h"E4DBB186EE01C8B4") (:ecb-mode-test #h"00000000000000000000000000000100" #h"0000000000000000" #h"12CC44657B6367D1") (:ecb-mode-test #h"00000000000000000000000000000080" #h"0000000000000000" #h"73BC52B34CDE8D7A") (:ecb-mode-test #h"00000000000000000000000000000040" #h"0000000000000000" #h"3A6FB39CDABEABD5") (:ecb-mode-test #h"00000000000000000000000000000020" #h"0000000000000000" #h"3EC0084375B70518") (:ecb-mode-test #h"00000000000000000000000000000010" #h"0000000000000000" #h"96FC7F65AD2B3F92") (:ecb-mode-test #h"00000000000000000000000000000008" #h"0000000000000000" #h"C45A526F6A948F42") (:ecb-mode-test #h"00000000000000000000000000000004" #h"0000000000000000" #h"AC062401CDCC8B18") (:ecb-mode-test #h"00000000000000000000000000000002" #h"0000000000000000" #h"44E1E63DF01EACF3") (:ecb-mode-test #h"00000000000000000000000000000001" #h"0000000000000000" #h"2049AA1BE3546AED") (:ecb-mode-test #h"00000000000000000000000000000000" #h"8000000000000000" #h"BB47122B68178EE9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"4000000000000000" #h"975E0AFE1323CB9A") (:ecb-mode-test #h"00000000000000000000000000000000" #h"2000000000000000" #h"7FADBAC78371B555") (:ecb-mode-test #h"00000000000000000000000000000000" #h"1000000000000000" #h"0666CE4269D64A20") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0800000000000000" #h"14281C76156B12FB") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0400000000000000" #h"01EFBE3899503B7A") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0200000000000000" #h"69E55186D6B41AC0") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0100000000000000" #h"C1224D5C00C53649") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0080000000000000" #h"E2E3AD3A5C601743") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0040000000000000" #h"0A2D672B6D3B2662") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0020000000000000" #h"A7777E08266E63AE") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0010000000000000" #h"B9FA1BC630B6E968") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0008000000000000" #h"BCFD2703E4DBC26C") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0004000000000000" #h"FED66BE3A5024ED4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0002000000000000" #h"736062891E612CCB") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0001000000000000" #h"E2EAF4CEF4189244") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000800000000000" #h"E175AB910F55EC31") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000400000000000" #h"51428715FCA30126") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000200000000000" #h"8C22F1C421E5D83F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000100000000000" #h"034229BD72BF7DF6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000080000000000" #h"1043E7868C9A0360") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000040000000000" #h"05B4532E10C357ED") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000020000000000" #h"15AD7053939C195F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000010000000000" #h"39C9046FF541531F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000008000000000" #h"0295B9BB0ACD5D56") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000004000000000" #h"D27D3BCE0BDD6F78") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000002000000000" #h"A42A7CAE686050F4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000001000000000" #h"45FBE2C7BC916A42") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000800000000" #h"132FBD837DF0B2D8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000400000000" #h"CA4F5CF90D473F0B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000200000000" #h"D7C80CB3ECB2461E") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000100000000" #h"F71E1B9BD3686E69") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000080000000" #h"A02D179F097E8332") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000040000000" #h"69B001D442A887AE") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000020000000" #h"BCF77AE653888D6E") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000010000000" #h"4CC21435088408D4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000008000000" #h"AB62D48D6AFBAE6F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000004000000" #h"B6A2CCB863BBCF41") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000002000000" #h"C9B2B694C8D90701") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000001000000" #h"480C1BEB503D1312") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000800000" #h"FA5338A4D5D67220") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000400000" #h"0E74E96B703D6ABF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000200000" #h"06F76B61B5FB29D3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000100000" #h"7257F075D63C96B3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000080000" #h"F6AACDE1975B1623") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000040000" #h"9D0A06330C318455") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000020000" #h"B11B420CD38D6BD2") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000010000" #h"AD0D7E2E54E42DE2") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000008000" #h"C9C27609861FBE38") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000004000" #h"0022B23DF6EC9E65") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000002000" #h"41E3112DC3972D2A") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000001000" #h"9A59CE2200AC6F27") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000800" #h"4C5176E19F677C2B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000400" #h"E9BDC8C297D238A3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000200" #h"22542D886ADE2FA0") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000100" #h"CCF456283D5942BE") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000080" #h"827918D6CB0B99D9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000040" #h"AB3E7BB7F2CEE428") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000020" #h"689FD6BA4FBF46C1") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000010" #h"FAFEE97F1248CEA7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000008" #h"9FB7BAC7FAB9BEBA") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000004" #h"7644FC51C4550D50") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000002" #h"D134B15213C3573E") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000001" #h"DBC1776E94F1BC4F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000000" #h"B94A62816CB70F6F") (:ecb-mode-test #h"01010101010101010101010101010101" #h"0101010101010101" #h"571B932D3A5B958C") (:ecb-mode-test #h"02020202020202020202020202020202" #h"0202020202020202" #h"08FAA3BCF4C057E9") (:ecb-mode-test #h"03030303030303030303030303030303" #h"0303030303030303" #h"7E12EAB92C53C081") (:ecb-mode-test #h"04040404040404040404040404040404" #h"0404040404040404" #h"567963F2ED9F7199") (:ecb-mode-test #h"05050505050505050505050505050505" #h"0505050505050505" #h"ADCBF8DB7833A636") (:ecb-mode-test #h"06060606060606060606060606060606" #h"0606060606060606" #h"67269073263C9818") (:ecb-mode-test #h"07070707070707070707070707070707" #h"0707070707070707" #h"44FBAB7E8B544C39") (:ecb-mode-test #h"08080808080808080808080808080808" #h"0808080808080808" #h"87B1FD4052B940C7") (:ecb-mode-test #h"09090909090909090909090909090909" #h"0909090909090909" #h"EFF0CB5CF0170A74") (:ecb-mode-test #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"0A0A0A0A0A0A0A0A" #h"DAD2CFFB201C00DF") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B" #h"EBCF435B23CFB4C9") (:ecb-mode-test #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"0C0C0C0C0C0C0C0C" #h"92E00981E5350015") (:ecb-mode-test #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"0D0D0D0D0D0D0D0D" #h"CD70199048ADB686") (:ecb-mode-test #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"0E0E0E0E0E0E0E0E" #h"ACAD6C19AE66EB41") (:ecb-mode-test #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"0F0F0F0F0F0F0F0F" #h"4ECFE751E0E6A16F") (:ecb-mode-test #h"10101010101010101010101010101010" #h"1010101010101010" #h"C7A91953216F1B61") (:ecb-mode-test #h"11111111111111111111111111111111" #h"1111111111111111" #h"0227EB3422109682") (:ecb-mode-test #h"12121212121212121212121212121212" #h"1212121212121212" #h"5B88EB8714B2CE08") (:ecb-mode-test #h"13131313131313131313131313131313" #h"1313131313131313" #h"E325B133AB02C021") (:ecb-mode-test #h"14141414141414141414141414141414" #h"1414141414141414" #h"93A4074EE9C38AE3") (:ecb-mode-test #h"15151515151515151515151515151515" #h"1515151515151515" #h"15AB85B70F337868") (:ecb-mode-test #h"16161616161616161616161616161616" #h"1616161616161616" #h"7EFD6E05D384512F") (:ecb-mode-test #h"17171717171717171717171717171717" #h"1717171717171717" #h"C1E46E7B54BAD271") (:ecb-mode-test #h"18181818181818181818181818181818" #h"1818181818181818" #h"956504E0F372D380") (:ecb-mode-test #h"19191919191919191919191919191919" #h"1919191919191919" #h"667C8BB548330E81") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A" #h"1F8787DF7582DCD0") (:ecb-mode-test #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"1B1B1B1B1B1B1B1B" #h"47F4EAF5BA82C610") (:ecb-mode-test #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"1C1C1C1C1C1C1C1C" #h"0F772431C6E54F3C") (:ecb-mode-test #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"1D1D1D1D1D1D1D1D" #h"51CF4361B3EF3EAC") (:ecb-mode-test #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"1E1E1E1E1E1E1E1E" #h"7AC52498328C66BE") (:ecb-mode-test #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"1F1F1F1F1F1F1F1F" #h"9C4E0F782BBBD830") (:ecb-mode-test #h"20202020202020202020202020202020" #h"2020202020202020" #h"59C1B2425B4A223A") (:ecb-mode-test #h"21212121212121212121212121212121" #h"2121212121212121" #h"31A75DEDAF90946A") (:ecb-mode-test #h"22222222222222222222222222222222" #h"2222222222222222" #h"A08888CEACE91838") (:ecb-mode-test #h"23232323232323232323232323232323" #h"2323232323232323" #h"EE86756508C71B51") (:ecb-mode-test #h"24242424242424242424242424242424" #h"2424242424242424" #h"8C794B7BCA1FB3CE") (:ecb-mode-test #h"25252525252525252525252525252525" #h"2525252525252525" #h"81C83EAEF39FAEC8") (:ecb-mode-test #h"26262626262626262626262626262626" #h"2626262626262626" #h"B5609BB8BCC040E3") (:ecb-mode-test #h"27272727272727272727272727272727" #h"2727272727272727" #h"6E9A9DFD7FA02D5D") (:ecb-mode-test #h"28282828282828282828282828282828" #h"2828282828282828" #h"4BD6B8AC8348E44B") (:ecb-mode-test #h"29292929292929292929292929292929" #h"2929292929292929" #h"702277B1BE362647") (:ecb-mode-test #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"2A2A2A2A2A2A2A2A" #h"99840E2304678EB7") (:ecb-mode-test #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"2B2B2B2B2B2B2B2B" #h"D5FAFF053FC9711E") (:ecb-mode-test #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"2C2C2C2C2C2C2C2C" #h"1465A6902902A9DF") (:ecb-mode-test #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"2D2D2D2D2D2D2D2D" #h"70556A22F96F41CB") (:ecb-mode-test #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"2E2E2E2E2E2E2E2E" #h"DA19418B7D400159") (:ecb-mode-test #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"2F2F2F2F2F2F2F2F" #h"EB2F5818B97997F0") (:ecb-mode-test #h"30303030303030303030303030303030" #h"3030303030303030" #h"028302ABA83606BB") (:ecb-mode-test #h"31313131313131313131313131313131" #h"3131313131313131" #h"F4B33E1EF5BD20CD") (:ecb-mode-test #h"32323232323232323232323232323232" #h"3232323232323232" #h"F92366545DA95426") (:ecb-mode-test #h"33333333333333333333333333333333" #h"3333333333333333" #h"B91E0D50260EA5C1") (:ecb-mode-test #h"34343434343434343434343434343434" #h"3434343434343434" #h"65BB48F7091A87B8") (:ecb-mode-test #h"35353535353535353535353535353535" #h"3535353535353535" #h"74CB938FE242CAD8") (:ecb-mode-test #h"36363636363636363636363636363636" #h"3636363636363636" #h"C51B238963931BEA") (:ecb-mode-test #h"37373737373737373737373737373737" #h"3737373737373737" #h"E85CDA0A33354B77") (:ecb-mode-test #h"38383838383838383838383838383838" #h"3838383838383838" #h"4F6602279DE3F304") (:ecb-mode-test #h"39393939393939393939393939393939" #h"3939393939393939" #h"0A368062D3845F30") (:ecb-mode-test #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"3A3A3A3A3A3A3A3A" #h"48C4236D0448CCEC") (:ecb-mode-test #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"3B3B3B3B3B3B3B3B" #h"897ED180FD105085") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C" #h"59F0C15EE0456714") (:ecb-mode-test #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"3D3D3D3D3D3D3D3D" #h"887C6A8E6E63CDA8") (:ecb-mode-test #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"3E3E3E3E3E3E3E3E" #h"FB8D6E00900CDA0B") (:ecb-mode-test #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"3F3F3F3F3F3F3F3F" #h"AFAA84F9D83D146B") (:ecb-mode-test #h"40404040404040404040404040404040" #h"4040404040404040" #h"2B7E4E486258B909") (:ecb-mode-test #h"41414141414141414141414141414141" #h"4141414141414141" #h"86194C35E114C3FF") (:ecb-mode-test #h"42424242424242424242424242424242" #h"4242424242424242" #h"F1CBC044C9116BC6") (:ecb-mode-test #h"43434343434343434343434343434343" #h"4343434343434343" #h"89CE40A15516F3E9") (:ecb-mode-test #h"44444444444444444444444444444444" #h"4444444444444444" #h"1FEF45E132BE4793") (:ecb-mode-test #h"45454545454545454545454545454545" #h"4545454545454545" #h"D4DD6BFB2B418078") (:ecb-mode-test #h"46464646464646464646464646464646" #h"4646464646464646" #h"9E22E3359F4B004F") (:ecb-mode-test #h"47474747474747474747474747474747" #h"4747474747474747" #h"439299347C7AB95B") (:ecb-mode-test #h"48484848484848484848484848484848" #h"4848484848484848" #h"D0D0D22D1AE3C91E") (:ecb-mode-test #h"49494949494949494949494949494949" #h"4949494949494949" #h"238ED46CB305ED2D") (:ecb-mode-test #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"4A4A4A4A4A4A4A4A" #h"8C5FC44A0A55CD1C") (:ecb-mode-test #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"4B4B4B4B4B4B4B4B" #h"E6DE008CDD7AE66E") (:ecb-mode-test #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"4C4C4C4C4C4C4C4C" #h"59F96896661C3CC5") (:ecb-mode-test #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"4D4D4D4D4D4D4D4D" #h"F1A8707E73332709") (:ecb-mode-test #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"4E4E4E4E4E4E4E4E" #h"EF79FFF808FF2FCF") (:ecb-mode-test #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"4F4F4F4F4F4F4F4F" #h"90BBC887B67C5BE1") (:ecb-mode-test #h"50505050505050505050505050505050" #h"5050505050505050" #h"43A0BB2C9F69540C") (:ecb-mode-test #h"51515151515151515151515151515151" #h"5151515151515151" #h"A76AB7C0F3993C3C") (:ecb-mode-test #h"52525252525252525252525252525252" #h"5252525252525252" #h"404CF5D76770380F") (:ecb-mode-test #h"53535353535353535353535353535353" #h"5353535353535353" #h"1144635F33B4B108") (:ecb-mode-test #h"54545454545454545454545454545454" #h"5454545454545454" #h"533F39599024FEA4") (:ecb-mode-test #h"55555555555555555555555555555555" #h"5555555555555555" #h"4EDE5A21D440F879") (:ecb-mode-test #h"56565656565656565656565656565656" #h"5656565656565656" #h"037F87017D5758FC") (:ecb-mode-test #h"57575757575757575757575757575757" #h"5757575757575757" #h"23C696C1C9D9802C") (:ecb-mode-test #h"58585858585858585858585858585858" #h"5858585858585858" #h"8B421F3F8D5889C9") (:ecb-mode-test #h"59595959595959595959595959595959" #h"5959595959595959" #h"7FE115F7EBD82FDE") (:ecb-mode-test #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"5A5A5A5A5A5A5A5A" #h"0347C94061CF3903") (:ecb-mode-test #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"5B5B5B5B5B5B5B5B" #h"1AC288F297B92B66") (:ecb-mode-test #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"5C5C5C5C5C5C5C5C" #h"37FA640BE196F22C") (:ecb-mode-test #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"5D5D5D5D5D5D5D5D" #h"B12BC54045F08295") (:ecb-mode-test #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"5E5E5E5E5E5E5E5E" #h"4D3CACF8EA0A8F24") (:ecb-mode-test #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"5F5F5F5F5F5F5F5F" #h"8E53BDBDF05F21FE") (:ecb-mode-test #h"60606060606060606060606060606060" #h"6060606060606060" #h"CE119D047B746E77") (:ecb-mode-test #h"61616161616161616161616161616161" #h"6161616161616161" #h"AC67362978CE521D") (:ecb-mode-test #h"62626262626262626262626262626262" #h"6262626262626262" #h"202681CEEF6A0641") (:ecb-mode-test #h"63636363636363636363636363636363" #h"6363636363636363" #h"B6EBDE980A8E406C") (:ecb-mode-test #h"64646464646464646464646464646464" #h"6464646464646464" #h"E4ACD49AED306E31") (:ecb-mode-test #h"65656565656565656565656565656565" #h"6565656565656565" #h"687E41E70893F5E5") (:ecb-mode-test #h"66666666666666666666666666666666" #h"6666666666666666" #h"B9194473591623E2") (:ecb-mode-test #h"67676767676767676767676767676767" #h"6767676767676767" #h"AD84C53AE83B1453") (:ecb-mode-test #h"68686868686868686868686868686868" #h"6868686868686868" #h"F6F6BC9C77B676E7") (:ecb-mode-test #h"69696969696969696969696969696969" #h"6969696969696969" #h"383CB935FEA01616") (:ecb-mode-test #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"6A6A6A6A6A6A6A6A" #h"CB76EABE21CFEFF9") (:ecb-mode-test #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"6B6B6B6B6B6B6B6B" #h"7C760F43BE7A0AE0") (:ecb-mode-test #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"6C6C6C6C6C6C6C6C" #h"A0CC24A85B11E9CD") (:ecb-mode-test #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"6D6D6D6D6D6D6D6D" #h"08BD628666229CDB") (:ecb-mode-test #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"6E6E6E6E6E6E6E6E" #h"248B93D9414CE931") (:ecb-mode-test #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"6F6F6F6F6F6F6F6F" #h"68A7EA5427C71A47") (:ecb-mode-test #h"70707070707070707070707070707070" #h"7070707070707070" #h"0CB6C4E6034E36A8") (:ecb-mode-test #h"71717171717171717171717171717171" #h"7171717171717171" #h"F6236FB9269BE68F") (:ecb-mode-test #h"72727272727272727272727272727272" #h"7272727272727272" #h"4AD577079CC83F3F") (:ecb-mode-test #h"73737373737373737373737373737373" #h"7373737373737373" #h"1BF4A2E98DDE6B85") (:ecb-mode-test #h"74747474747474747474747474747474" #h"7474747474747474" #h"417447C0EFA545B9") (:ecb-mode-test #h"75757575757575757575757575757575" #h"7575757575757575" #h"0E5AF6C1F9A2A4FF") (:ecb-mode-test #h"76767676767676767676767676767676" #h"7676767676767676" #h"D6252FF0F50F6298") (:ecb-mode-test #h"77777777777777777777777777777777" #h"7777777777777777" #h"FD11B762089A77E9") (:ecb-mode-test #h"78787878787878787878787878787878" #h"7878787878787878" #h"8F57548E30F72132") (:ecb-mode-test #h"79797979797979797979797979797979" #h"7979797979797979" #h"0AAAF66AC052234B") (:ecb-mode-test #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"7A7A7A7A7A7A7A7A" #h"4F7301DDF7F9BB23") (:ecb-mode-test #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"7B7B7B7B7B7B7B7B" #h"3ABB712DEE262A5D") (:ecb-mode-test #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"7C7C7C7C7C7C7C7C" #h"870079634F996760") (:ecb-mode-test #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"7D7D7D7D7D7D7D7D" #h"537093845374E9BE") (:ecb-mode-test #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"7E7E7E7E7E7E7E7E" #h"092C2B3DEDA088D1") (:ecb-mode-test #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"7F7F7F7F7F7F7F7F" #h"7B89D9265881A984") (:ecb-mode-test #h"80808080808080808080808080808080" #h"8080808080808080" #h"F6FCF844089D0D7D") (:ecb-mode-test #h"81818181818181818181818181818181" #h"8181818181818181" #h"2FFAF44121E4F834") (:ecb-mode-test #h"82828282828282828282828282828282" #h"8282828282828282" #h"4EED79D6916AA112") (:ecb-mode-test #h"83838383838383838383838383838383" #h"8383838383838383" #h"12B62B3C7FCAA24B") (:ecb-mode-test #h"84848484848484848484848484848484" #h"8484848484848484" #h"F7FAF70C7E4ED8B7") (:ecb-mode-test #h"85858585858585858585858585858585" #h"8585858585858585" #h"C58EC8FEE9DD45CF") (:ecb-mode-test #h"86868686868686868686868686868686" #h"8686868686868686" #h"A6159BD7C1E24B82") (:ecb-mode-test #h"87878787878787878787878787878787" #h"8787878787878787" #h"D4060CA2E13014F7") (:ecb-mode-test #h"88888888888888888888888888888888" #h"8888888888888888" #h"D8316FA573E914EE") (:ecb-mode-test #h"89898989898989898989898989898989" #h"8989898989898989" #h"F3F195EA1E0A4ACC") (:ecb-mode-test #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"8A8A8A8A8A8A8A8A" #h"166D10F9D1DB0B9E") (:ecb-mode-test #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"8B8B8B8B8B8B8B8B" #h"FCE1603171E622CE") (:ecb-mode-test #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"8C8C8C8C8C8C8C8C" #h"484E164004CE642E") (:ecb-mode-test #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"8D8D8D8D8D8D8D8D" #h"542E40966D874793") (:ecb-mode-test #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"8E8E8E8E8E8E8E8E" #h"9C44E79409B316F1") (:ecb-mode-test #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"8F8F8F8F8F8F8F8F" #h"FF403290A75E2386") (:ecb-mode-test #h"90909090909090909090909090909090" #h"9090909090909090" #h"A87936DAE2B2DB22") (:ecb-mode-test #h"91919191919191919191919191919191" #h"9191919191919191" #h"DB57C6183C6DF423") (:ecb-mode-test #h"92929292929292929292929292929292" #h"9292929292929292" #h"FCA1F0D005665F3F") (:ecb-mode-test #h"93939393939393939393939393939393" #h"9393939393939393" #h"414570616E5BB885") (:ecb-mode-test #h"94949494949494949494949494949494" #h"9494949494949494" #h"1B52E733F56BB0F8") (:ecb-mode-test #h"95959595959595959595959595959595" #h"9595959595959595" #h"AB178FAC3A985A48") (:ecb-mode-test #h"96969696969696969696969696969696" #h"9696969696969696" #h"578068221BF3083E") (:ecb-mode-test #h"97979797979797979797979797979797" #h"9797979797979797" #h"96FC28DA980FB460") (:ecb-mode-test #h"98989898989898989898989898989898" #h"9898989898989898" #h"28E3F3C65E216A08") (:ecb-mode-test #h"99999999999999999999999999999999" #h"9999999999999999" #h"D903C4DCBC3FFE5F") (:ecb-mode-test #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"9A9A9A9A9A9A9A9A" #h"37E627617FECF7B0") (:ecb-mode-test #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"9B9B9B9B9B9B9B9B" #h"0E35BA46EF96ECD3") (:ecb-mode-test #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"9C9C9C9C9C9C9C9C" #h"C9B3D8ECC7A4D67B") (:ecb-mode-test #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"9D9D9D9D9D9D9D9D" #h"A51BC886B2DC241A") (:ecb-mode-test #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"9E9E9E9E9E9E9E9E" #h"98BD160DC1FB856B") (:ecb-mode-test #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"9F9F9F9F9F9F9F9F" #h"FBDD5A2F04D26369") (:ecb-mode-test #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"A0A0A0A0A0A0A0A0" #h"B795ED79D56BBE0B") (:ecb-mode-test #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"A1A1A1A1A1A1A1A1" #h"9AA512CFD12AE768") (:ecb-mode-test #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"A2A2A2A2A2A2A2A2" #h"B8BC5A15E3EB39B5") (:ecb-mode-test #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"A3A3A3A3A3A3A3A3" #h"1A5B92DEE0354986") (:ecb-mode-test #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"A4A4A4A4A4A4A4A4" #h"E7723352510DD8A7") (:ecb-mode-test #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"A5A5A5A5A5A5A5A5" #h"5C24B50DBF42BCEF") (:ecb-mode-test #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"A6A6A6A6A6A6A6A6" #h"8791633A42ED1B59") (:ecb-mode-test #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"A7A7A7A7A7A7A7A7" #h"3A95DDAEA53C6F5A") (:ecb-mode-test #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"A8A8A8A8A8A8A8A8" #h"A11241415CB1C9A8") (:ecb-mode-test #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"A9A9A9A9A9A9A9A9" #h"26004A5913819210") (:ecb-mode-test #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"AAAAAAAAAAAAAAAA" #h"2E0BB86F317F0A2F") (:ecb-mode-test #h"ABABABABABABABABABABABABABABABAB" #h"ABABABABABABABAB" #h"CF6A442C967A6B2D") (:ecb-mode-test #h"ACACACACACACACACACACACACACACACAC" #h"ACACACACACACACAC" #h"16D476F2E011E56F") (:ecb-mode-test #h"ADADADADADADADADADADADADADADADAD" #h"ADADADADADADADAD" #h"C14FF78BC53EEBBF") (:ecb-mode-test #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"AEAEAEAEAEAEAEAE" #h"60809C2139A96529") (:ecb-mode-test #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"AFAFAFAFAFAFAFAF" #h"83EDAE6D41125C8B") (:ecb-mode-test #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"B0B0B0B0B0B0B0B0" #h"078B7D7DE5838DE1") (:ecb-mode-test #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"B1B1B1B1B1B1B1B1" #h"BBF50F74D8E64E30") (:ecb-mode-test #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"B2B2B2B2B2B2B2B2" #h"33E318F851C13C00") (:ecb-mode-test #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"B3B3B3B3B3B3B3B3" #h"C25D1D4BF13B0494") (:ecb-mode-test #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"B4B4B4B4B4B4B4B4" #h"64809BA64542F8F9") (:ecb-mode-test #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"B5B5B5B5B5B5B5B5" #h"DBBE3C2D33732A6F") (:ecb-mode-test #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"B6B6B6B6B6B6B6B6" #h"771F20CEE7506BE7") (:ecb-mode-test #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"B7B7B7B7B7B7B7B7" #h"89AAE9CE6FDDC0D1") (:ecb-mode-test #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"B8B8B8B8B8B8B8B8" #h"52C86C5897A492CE") (:ecb-mode-test #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"B9B9B9B9B9B9B9B9" #h"D05859BC5B300611") (:ecb-mode-test #h"BABABABABABABABABABABABABABABABA" #h"BABABABABABABABA" #h"0A3947CFCCCC15AE") (:ecb-mode-test #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"BBBBBBBBBBBBBBBB" #h"90D828A877F824F1") (:ecb-mode-test #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"BCBCBCBCBCBCBCBC" #h"B0AE05B208B85098") (:ecb-mode-test #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"BDBDBDBDBDBDBDBD" #h"453A98C387D17BEA") (:ecb-mode-test #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"BEBEBEBEBEBEBEBE" #h"7F29BBEFDBFEB3C0") (:ecb-mode-test #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"BFBFBFBFBFBFBFBF" #h"87925DA947AAA9B5") (:ecb-mode-test #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"C0C0C0C0C0C0C0C0" #h"474D1C7379419B64") (:ecb-mode-test #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"C1C1C1C1C1C1C1C1" #h"724772EDAF17842C") (:ecb-mode-test #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"C2C2C2C2C2C2C2C2" #h"8B64AE869D361A8C") (:ecb-mode-test #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"C3C3C3C3C3C3C3C3" #h"CE9A813A6C1E4C95") (:ecb-mode-test #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"C4C4C4C4C4C4C4C4" #h"D9A4F2386A83C584") (:ecb-mode-test #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"C5C5C5C5C5C5C5C5" #h"F4168A3DDFAA2DE1") (:ecb-mode-test #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"C6C6C6C6C6C6C6C6" #h"61885F755D6FE00D") (:ecb-mode-test #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"C7C7C7C7C7C7C7C7" #h"46065F64F3B04579") (:ecb-mode-test #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"C8C8C8C8C8C8C8C8" #h"CE7D70FE06A4F602") (:ecb-mode-test #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"C9C9C9C9C9C9C9C9" #h"9ADF1C97A05D2325") (:ecb-mode-test #h"CACACACACACACACACACACACACACACACA" #h"CACACACACACACACA" #h"0C1B8701F2839193") (:ecb-mode-test #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"CBCBCBCBCBCBCBCB" #h"3BD0514A2AD44E75") (:ecb-mode-test #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"CCCCCCCCCCCCCCCC" #h"EF988CCC6F5DAAC0") (:ecb-mode-test #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"CDCDCDCDCDCDCDCD" #h"3537ACF9F8B3A4F6") (:ecb-mode-test #h"CECECECECECECECECECECECECECECECE" #h"CECECECECECECECE" #h"E3A166347132F812") (:ecb-mode-test #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"CFCFCFCFCFCFCFCF" #h"958DB80C130027B4") (:ecb-mode-test #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"D0D0D0D0D0D0D0D0" #h"FC9D1EDE0FB250C3") (:ecb-mode-test #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"D1D1D1D1D1D1D1D1" #h"D0BA9D23BFA4F30C") (:ecb-mode-test #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"D2D2D2D2D2D2D2D2" #h"B6047FD0E88C5D16") (:ecb-mode-test #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"D3D3D3D3D3D3D3D3" #h"2280CD1547BF1D28") (:ecb-mode-test #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"D4D4D4D4D4D4D4D4" #h"FDD4D3D028F2FB78") (:ecb-mode-test #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"D5D5D5D5D5D5D5D5" #h"DDF01B32D03AC025") (:ecb-mode-test #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"D6D6D6D6D6D6D6D6" #h"32F524E8BC58AF66") (:ecb-mode-test #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"D7D7D7D7D7D7D7D7" #h"DE49208313FA68EC") (:ecb-mode-test #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"D8D8D8D8D8D8D8D8" #h"43034D5825C5E79D") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9" #h"A823873BAF077D4D") (:ecb-mode-test #h"DADADADADADADADADADADADADADADADA" #h"DADADADADADADADA" #h"4E93A8AB978FF577") (:ecb-mode-test #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"DBDBDBDBDBDBDBDB" #h"1D774883F9AEE5AB") (:ecb-mode-test #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"DCDCDCDCDCDCDCDC" #h"6B2FA960CB5EEC30") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDD" #h"DFD51237ED2AFB4C") (:ecb-mode-test #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"DEDEDEDEDEDEDEDE" #h"5616A37B8A7F044C") (:ecb-mode-test #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"DFDFDFDFDFDFDFDF" #h"1714F12B51F9A956") (:ecb-mode-test #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"E0E0E0E0E0E0E0E0" #h"9DB0BF0D271ADC8C") (:ecb-mode-test #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"E1E1E1E1E1E1E1E1" #h"F81ECF09BFB07A4B") (:ecb-mode-test #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"E2E2E2E2E2E2E2E2" #h"2ACC610179553E3C") (:ecb-mode-test #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"E3E3E3E3E3E3E3E3" #h"83299006AE845FC0") (:ecb-mode-test #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"E4E4E4E4E4E4E4E4" #h"6B06E0EAFA66D98E") (:ecb-mode-test #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"E5E5E5E5E5E5E5E5" #h"B8C997353FB43561") (:ecb-mode-test #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"E6E6E6E6E6E6E6E6" #h"17ABBE2D0232D6AE") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7" #h"A5A84DE58835BF04") (:ecb-mode-test #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"E8E8E8E8E8E8E8E8" #h"4FABD6C918F1B30C") (:ecb-mode-test #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"E9E9E9E9E9E9E9E9" #h"C5C437C56A0C251B") (:ecb-mode-test #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"EAEAEAEAEAEAEAEA" #h"A360F12B31CCFC5E") (:ecb-mode-test #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"EBEBEBEBEBEBEBEB" #h"F530F8B06DD77B8A") (:ecb-mode-test #h"ECECECECECECECECECECECECECECECEC" #h"ECECECECECECECEC" #h"B3B13472C5D0384C") (:ecb-mode-test #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"EDEDEDEDEDEDEDED" #h"6B7EDFC1D167B799") (:ecb-mode-test #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"EEEEEEEEEEEEEEEE" #h"87CC3BAF3DAA5249") (:ecb-mode-test #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"EFEFEFEFEFEFEFEF" #h"28EEDB935FD35519") (:ecb-mode-test #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"F0F0F0F0F0F0F0F0" #h"085C736ADDCF6EA4") (:ecb-mode-test #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"F1F1F1F1F1F1F1F1" #h"F9247A246DC31749") (:ecb-mode-test #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"F2F2F2F2F2F2F2F2" #h"39D90F5505299D9B") (:ecb-mode-test #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"F3F3F3F3F3F3F3F3" #h"5485D405C02B49C9") (:ecb-mode-test #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"F4F4F4F4F4F4F4F4" #h"A7489DC5DE71ECD5") (:ecb-mode-test #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"F5F5F5F5F5F5F5F5" #h"DECF4E68BB7906AA") (:ecb-mode-test #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"F6F6F6F6F6F6F6F6" #h"87FD57285E24C9BA") (:ecb-mode-test #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"F7F7F7F7F7F7F7F7" #h"C99346E0096027C9") (:ecb-mode-test #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"F8F8F8F8F8F8F8F8" #h"70A5BD315E651F0D") (:ecb-mode-test #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"F9F9F9F9F9F9F9F9" #h"E2B71F17EFE7C352") (:ecb-mode-test #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"FAFAFAFAFAFAFAFA" #h"9559F3D55276183F") (:ecb-mode-test #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"FBFBFBFBFBFBFBFB" #h"F2E90815C1CA2113") (:ecb-mode-test #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"FCFCFCFCFCFCFCFC" #h"2271163D80D4A3C1") (:ecb-mode-test #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"FDFDFDFDFDFDFDFD" #h"21D5792E34359D32") (:ecb-mode-test #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"FEFEFEFEFEFEFEFE" #h"B3E9B62F0DF07DE0") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFF" #h"651F3092AFA551D0") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F" #h"0011223344556677" #h"3A3D8F2F2CDB11A7") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF48" #h"EA024714AD5C4D84" #h"5901047178CCA69C") (:keystream-test #h"4e22347b462d663a1a67e6cf08420c6e" #h"c7ce715c448a4d37" #h"59fd2619d8b1aae65438aac374ca839828d87c7fa9dea0b9d31103019af7a7da87f268101c418d9dc5a7d966fe4e6b6f65ca3a6d7d6c4f42fe7745d815e85b3833dc759f3d39a45fd3b5d64c326af608d207541e9571a991b52e54bc7f8bafa63f95605b2138d856c24d41bdc73a165e6f78da5432a09834ce753287e6354eec4fbe28a3be476c9999ed8420bfba6f64489e1d8924e19f6d6e0241bf17567bdf61b6dbc35529daea7171b0225766de0a9e43e511b1cf56300cb40aa55d20c796b2c7de03682419b9f50ef57d767e039a853ee3b9ce7e65722982a8b48eaf14d6db057286d4b5461369ffb2e39d76ec1b638cfaf97a1af34073828541b949fa0c8dd0998bfc61cdd96e502b9d3468c49791cf2634901cb3fd8c0c697d065e3e52e92a9673e90dbaad13b0e81da5c0b2fe548945d823ef905d3ac246b4b0e7076dd1d0ba775d30fc55c2db9a546b458ba02ee1913d3405ed018368ddd8151490d6c99b0c4ba05aa5d06ae3718e1dac0746533158fa4136897e139f394a19a59888a19635adaf2d687c2d1c9e14e67d768964cf1a56d4d21db7802ee6c8464f3f4791341ab1003ffe26e4568e828421bbbe3811e9f308de4e489617437a1f78d45e53a1023b2e9094cef7f6df67c8d1373a164923cd01871c121ed0841b8d08c5bed682716f64158e4a217cc6c24fff858dbeeee53c80aaf2a1d30f1346dd27e8160862ee49b8d07424c742a2eab5d7a12030cbac1567eb5b614df4bccd93735cc3815b1ece720a9e685bbcd426e2988b474085475a4c5295c5f3c7d3f316ca198b4f2e47f046afa64bff392ff4d8ca42d2848ed23cfe78a5a8967ef1879d5499db6919c6cd20a8c67b0ca335abc6d78353b00656f42136d85629afb35cb82011ef2d31ff385de2a1b5c34ccb565f51eb78932c544eb57fc9b1b691753ce612bd4de837fcdbc8f441a160303261502654cc6385ee47ceddd000587ecd64f05df178f5fd44288c3f7a8f93eca9c4a6cf9c5790e3e854d5e788a29fbded61ba63e7e31d0d25dce129a16a76f8639e1d8ab609008175021fb8f1cf6ec8d90001dd9b38ac9d055421403a5fbc9633bf12f3644022b06788db1a0514079ff5e25cf12d6e0e955c1125ee1a4eba15eee7041d1918ef76314d2802a25070202d95415722cac97cfa32b6f7ce479c6a193fa46314574a1a815e56b346320066072fbf3cba72fddb207f0bd19c3df5b86fa8da21f716831aadd5ce9313839ace032eb3323f4c95d223dd1f5c5354b0a0918298d5facdfb484dcbe49d8c3233ec28b5379c367c961043e0ffaf7deb0000111a36755be0e0a2e3e1fef3e1f25c0e3fe7a72e962424b91de9d2deed92016806e18e2d0d89e9ddd64ad0b6322619106f403ea771f468464b80297e3ea2") ironclad-0.57/testing/test-vectors/modes.lisp000066400000000000000000000011271420372057600213660ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; modes.lisp -- sanity checks for mode reversibility (in-package :crypto-tests) (rtest:deftest :modes.cbc (run-test-vector-file :cbc *mode-tests*) t) (rtest:deftest :modes.cbc.padding (run-test-vector-file :cbc *mode-padding-tests*) t) (rtest:deftest :modes.cfb (run-test-vector-file :cfb *mode-tests*) t) (rtest:deftest :modes.cfb8 (run-test-vector-file :cfb8 *mode-tests*) t) (rtest:deftest :modes.ofb (run-test-vector-file :ofb *mode-tests*) t) (rtest:deftest :modes.ctr (run-test-vector-file :ctr *mode-tests*) t) ironclad-0.57/testing/test-vectors/ofb.testvec000066400000000000000000000024521420372057600215350ustar00rootroot00000000000000;;; Tests from NIST document SP800-38A.pdf, #h"Recommendation for Block ;;; Cipher Modes of Operation: Methods and Techniques" (:mode-test :aes #h"2b7e151628aed2a6abf7158809cf4f3c" #h"000102030405060708090a0b0c0d0e0f" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"3b3fd92eb72dad20333449f8e83cfb4a7789508d16918f03f53c52dac54ed8259740051e9c5fecf64344f7a82260edcc304c6528f659c77866a510d9c1d6ae5e") (:mode-test :aes #h"8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b" #h"000102030405060708090a0b0c0d0e0f" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"cdc80d6fddf18cab34c25909c99a4174fcc28b8d4c63837c09e81700c11004018d9a9aeac0f6596f559c6d4daf59a5f26d9f200857ca6c3e9cac524bd9acc92a") (:mode-test :aes #h"603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4" #h"000102030405060708090a0b0c0d0e0f" #h"6bc1bee22e409f96e93d7e117393172aae2d8a571e03ac9c9eb76fac45af8e5130c81c46a35ce411e5fbc1191a0a52eff69f2445df4f9b17ad2b417be66c3710" #h"dc7e84bfda79164b7ecd8486985d38604febdc6740d20b3ac88f6ad82a4fb08d71ab47a086e86eedf39d1c5bba97c4080126141d67f37be8538f5a8be740e484") ironclad-0.57/testing/test-vectors/padding.lisp000066400000000000000000000051151420372057600216660ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- ;;;; padding.lisp (in-package :crypto-tests) (rtest:deftest pkcs7-padding (let* ((block-size 16) (buffer (make-array block-size :element-type '(unsigned-byte 8) :initial-element #xff)) (padding (make-instance 'crypto::pkcs7-padding))) (flet ((pad-and-check (length) (crypto::add-padding-bytes padding buffer 0 length block-size) (let ((padding-bytes (crypto::count-padding-bytes padding buffer 0 block-size))) (and (= padding-bytes (- block-size length)) (loop for i from length below block-size always (= (aref buffer i) padding-bytes)))))) (if (loop for length from 0 below block-size always (pad-and-check length)) :ok :error))) :ok) (rtest:deftest ansi-x923-padding (let* ((block-size 16) (buffer (make-array block-size :element-type '(unsigned-byte 8) :initial-element #xff)) (padding (make-instance 'crypto::ansi-x923-padding))) (flet ((pad-and-check (length) (crypto::add-padding-bytes padding buffer 0 length block-size) (let ((padding-bytes (crypto::count-padding-bytes padding buffer 0 block-size))) (and (= padding-bytes (- block-size length)) (loop for i from length below (1- block-size) always (zerop (aref buffer i))) (= (aref buffer (1- block-size)) padding-bytes))))) (if (loop for length from 0 below block-size always (pad-and-check length)) :ok :error))) :ok) (rtest:deftest iso-7816-4-padding (let* ((block-size 16) (buffer (make-array block-size :element-type '(unsigned-byte 8) :initial-element #xff)) (padding (make-instance 'crypto::iso-7816-4-padding))) (flet ((pad-and-check (length) (crypto::add-padding-bytes padding buffer 0 length block-size) (let ((padding-bytes (crypto::count-padding-bytes padding buffer 0 block-size))) (and (= padding-bytes (- block-size length)) (= (aref buffer length) #x80) (loop for i from (1+ length) below block-size always (zerop (aref buffer i))))))) (if (loop for length from 0 below block-size always (pad-and-check length)) :ok :error))) :ok) ironclad-0.57/testing/test-vectors/pkcs5.lisp000066400000000000000000000063221420372057600213060ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto-tests) ;;; Test vectors for "bare" PBKDF* are impossible to find; RSA has some, ;;; but they're tied up with other PKCS bits, making the tests a wee bit ;;; more complicated than I'd like. The ones used here are from: ;;; ;;; http://www.di-mgt.com.au/cryptoKDFs.html (defvar *password* (coerce #(#x70 #x61 #x73 #x73 #x77 #x6F #x72 #x64) '(vector (unsigned-byte 8)))) (defvar *salt* (coerce #(#x78 #x57 #x8E #x5A #x5D #x63 #xCB #x6) '(vector (unsigned-byte 8)))) (defun run-kdf-test (kdf password salt iteration-count key-length expected-key) (let ((key (ironclad:derive-key kdf password salt iteration-count key-length))) (not (mismatch key expected-key)))) (defvar *pbkdf1-key* (coerce #(#xDC #x19 #x84 #x7E #x5 #xC6 #x4D #x2F #xAF #x10 #xEB #xFB #x4A #x3D #x2A #x20) '(vector (unsigned-byte 8)))) (rtest:deftest pbkdf1 (run-kdf-test (crypto:make-kdf 'crypto:pbkdf1 :digest 'ironclad:sha1) *password* *salt* 1000 16 *pbkdf1-key*) t) (rtest:deftest pbkdf1.valid-hashes (loop with valid-hashes = '(:md2 :md5 :sha1) for hash in (crypto:list-all-digests) when (handler-case (crypto:make-kdf 'crypto:pbkdf1 :digest hash) (error () nil) (:no-error (kdf) (declare (ignore kdf)) t)) collect hash into candidates finally (return (set-difference candidates valid-hashes))) nil) (defvar *pbkdf2-key* (coerce #(#xBF #xDE #x6B #xE9 #x4D #xF7 #xE1 #x1D #xD4 #x9 #xBC #xE2 #xA #x2 #x55 #xEC #x32 #x7C #xB9 #x36 #xFF #xE9 #x36 #x43) '(vector (unsigned-byte 8)))) (rtest:deftest pbkdf2 (run-kdf-test (crypto:make-kdf 'crypto:pbkdf2 :digest 'ironclad:sha1) *password* *salt* 2048 24 *pbkdf2-key*) t) (rtest:deftest pbkdf2-convenience (ironclad:pbkdf2-check-password *password* "PBKDF2$SHA256:1000$78578e5a5d63cb06$aa2ae650dc866dc4de4fc3c8f06eddac1abc3011a99402fbc46d7e131fac06d5") t) (rtest:deftest unsupported-kdf (handler-case (crypto:make-kdf :random-name) (crypto:unsupported-kdf () :ok) (:no-error () :error)) :ok) (rtest:deftest pbkdf1-invalid-iteration-count (handler-case (ironclad:derive-key (ironclad:make-kdf 'ironclad:pbkdf1 :digest 'ironclad:sha1) *password* *salt* -1 24) (type-error () :ok) (:no-error () :error)) :ok) (rtest:deftest pbkdf1-invalid-key-length (handler-case (ironclad:derive-key (ironclad:make-kdf 'ironclad:pbkdf1 :digest 'ironclad:sha1) *password* *salt* 2048 -1) (type-error () :ok) (:no-error () :error)) :ok) (rtest:deftest pbkdf2-invalid-iteration-count (handler-case (ironclad:derive-key (ironclad:make-kdf 'ironclad:pbkdf2 :digest 'ironclad:sha1) *password* *salt* -1 24) (type-error () :ok) (:no-error () :error)) :ok) (rtest:deftest pbkdf2-invalid-key-length (handler-case (ironclad:derive-key (ironclad:make-kdf 'ironclad:pbkdf2 :digest 'ironclad:sha1) *password* *salt* 2048 -1) (type-error () :ok) (:no-error () :error)) :ok) ironclad-0.57/testing/test-vectors/poly1305.testvec000066400000000000000000000061571420372057600222710ustar00rootroot00000000000000;;; Tests from RFC 7539 (:mac-test #h"85d6be7857556d337f4452fe42d506a80103808afb0db2fd4abff6af4149f51b" #a"Cryptographic Forum Research Group" #h"a8061dc1305136c6c22b8baf0c0127a9") (:mac-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000") (:mac-test #h"0000000000000000000000000000000036e5f6b5c5e06070f0efca96227a863e" #a"Any submission to the IETF intended by the Contributor for publication as all or part of an IETF Internet-Draft or RFC and any statement made within the context of an IETF activity is considered an \"IETF Contribution\". Such statements include oral statements in IETF sessions, as well as written and electronic communications made at any time or place, which are addressed to" #h"36e5f6b5c5e06070f0efca96227a863e") (:mac-test #h"36e5f6b5c5e06070f0efca96227a863e00000000000000000000000000000000" #a"Any submission to the IETF intended by the Contributor for publication as all or part of an IETF Internet-Draft or RFC and any statement made within the context of an IETF activity is considered an \"IETF Contribution\". Such statements include oral statements in IETF sessions, as well as written and electronic communications made at any time or place, which are addressed to" #h"f3477e7cd95417af89a6b8794c310cf0") (:mac-test #h"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0" #h"2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e" #h"4541669a7eaaee61e708dc7cbcc5eb62") (:mac-test #h"0200000000000000000000000000000000000000000000000000000000000000" #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"03000000000000000000000000000000") (:mac-test #h"02000000000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"02000000000000000000000000000000" #h"03000000000000000000000000000000") (:mac-test #h"0100000000000000000000000000000000000000000000000000000000000000" #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11000000000000000000000000000000" #h"05000000000000000000000000000000") (:mac-test #h"0100000000000000000000000000000000000000000000000000000000000000" #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE01010101010101010101010101010101" #h"00000000000000000000000000000000") (:mac-test #h"0200000000000000000000000000000000000000000000000000000000000000" #h"FDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF") (:mac-test #h"0100000000000000040000000000000000000000000000000000000000000000" #h"E33594D7505E43B900000000000000003394D7505E4379CD01000000000000000000000000000000000000000000000001000000000000000000000000000000" #h"14000000000000005500000000000000") (:mac-test #h"0100000000000000040000000000000000000000000000000000000000000000" #h"E33594D7505E43B900000000000000003394D7505E4379CD010000000000000000000000000000000000000000000000" #h"13000000000000000000000000000000") ironclad-0.57/testing/test-vectors/prng-tests.lisp000066400000000000000000000007211420372057600223640ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto-tests) (rtest:deftest :prng-fortuna (run-test-vector-file :prng *prng-tests*) t) (rtest:deftest :prng-fortuna-urandom (let ((prng (crypto:make-prng :fortuna :seed :urandom))) (= (length (crypto:random-data 16 prng)) 16)) t) ;; (random-data (make-prng :fortuna :seed (coerce #(0) 'simple-octet-vector)) 1) #(28)) ironclad-0.57/testing/test-vectors/prng.testvec000066400000000000000000000036301420372057600217340ustar00rootroot00000000000000;; each test should be written by reasoning from the definition in Cryptography ;; Engineering, _not_ by checking what the implementation currently does ;; FIXME: this test was written from current output, not reasoning (:generator-test :aes (#(0 1 2 3)) (#(44 116 1 176 208 92 127 135 160 115 184 21 0 211 133 80) #(247 244 30 42 191 37 124 105 221 173 67 94 54 109 139 209) #(252 200 2 53 195 193 73 89 24 147 7 11 68 110 45 48) #(75 89 212 151 2 169 142 105 253 209 190 32 211 209 77 107))) ;; FIXME: this test was written from current output, not reasoning (:fortuna-test #(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63) ((0 0 #(0 0 0 0))) #(28 139 244 57 186 237 78 109 178 55 6 92 206 115 182 80 136 222 140 84 89 202 228 58 99 94 175 180 125 125 221 69 247 205 229 97)) (:fortuna-test #(63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0) ((0 0 #(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) (0 0 #(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) (0 0 #(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) (0 0 #(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) (0 0 #(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) (0 0 #(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) (0 0 #(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)) (0 0 #(0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16))) #(85 79 98 137 197 243 48 148 228 180 221 219 159 115 89 63)) ironclad-0.57/testing/test-vectors/public-key.lisp000066400000000000000000000035521420372057600223270ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto-tests) (rtest:deftest :rsa-oaep-encryption (run-test-vector-file :rsa-enc *public-key-encryption-tests*) t) (rtest:deftest :elgamal-encryption (run-test-vector-file :elgamal-enc *public-key-encryption-tests*) t) (rtest:deftest :rsa-pss-signature (run-test-vector-file :rsa-sig *public-key-signature-tests*) t) (rtest:deftest :elgamal-signature (run-test-vector-file :elgamal-sig *public-key-signature-tests*) t) (rtest:deftest :dsa-signature (run-test-vector-file :dsa *public-key-signature-tests*) t) (rtest:deftest :ed25519-signature (run-test-vector-file :ed25519 *public-key-signature-tests*) t) (rtest:deftest :ed448-signature (run-test-vector-file :ed448 *public-key-signature-tests*) t) (rtest:deftest :secp256k1-signature (run-test-vector-file :secp256k1-sig *public-key-signature-tests*) t) (rtest:deftest :secp256r1-signature (run-test-vector-file :secp256r1-sig *public-key-signature-tests*) t) (rtest:deftest :secp384r1-signature (run-test-vector-file :secp384r1-sig *public-key-signature-tests*) t) (rtest:deftest :secp521r1-signature (run-test-vector-file :secp521r1-sig *public-key-signature-tests*) t) (rtest:deftest :curve25519-dh (run-test-vector-file :curve25519 *public-key-diffie-hellman-tests*) t) (rtest:deftest :curve448-dh (run-test-vector-file :curve448 *public-key-diffie-hellman-tests*) t) (rtest:deftest :elgamal-dh (run-test-vector-file :elgamal-dh *public-key-diffie-hellman-tests*) t) (rtest:deftest :secp256k1-dh (run-test-vector-file :secp256k1-dh *public-key-diffie-hellman-tests*) t) (rtest:deftest :secp256r1-dh (run-test-vector-file :secp256r1-dh *public-key-diffie-hellman-tests*) t) (rtest:deftest :secp384r1-dh (run-test-vector-file :secp384r1-dh *public-key-diffie-hellman-tests*) t) (rtest:deftest :secp521r1-dh (run-test-vector-file :secp521r1-dh *public-key-diffie-hellman-tests*) t) ironclad-0.57/testing/test-vectors/rc2.testvec000066400000000000000000001310141420372057600214520ustar00rootroot00000000000000;;; tests generated from OpenSSL (valid if you trust OpenSSL, of course) (:ecb-mode-test #h"80000000000000000000000000000000" #h"0000000000000000" #h"4e0cb93d71c2583e") (:ecb-mode-test #h"40000000000000000000000000000000" #h"0000000000000000" #h"92f821098ab905fb") (:ecb-mode-test #h"20000000000000000000000000000000" #h"0000000000000000" #h"5ba37c7d8773b955") (:ecb-mode-test #h"10000000000000000000000000000000" #h"0000000000000000" #h"76082f0a0598c7bf") (:ecb-mode-test #h"08000000000000000000000000000000" #h"0000000000000000" #h"d10d2523612a10c5") (:ecb-mode-test #h"04000000000000000000000000000000" #h"0000000000000000" #h"40f5e1d92969953f") (:ecb-mode-test #h"02000000000000000000000000000000" #h"0000000000000000" #h"22972dffc668c98e") (:ecb-mode-test #h"01000000000000000000000000000000" #h"0000000000000000" #h"820ff88b7233da7c") (:ecb-mode-test #h"00800000000000000000000000000000" #h"0000000000000000" #h"d06929269e4c36b8") (:ecb-mode-test #h"00400000000000000000000000000000" #h"0000000000000000" #h"f617e5c5e4d9cec7") (:ecb-mode-test #h"00200000000000000000000000000000" #h"0000000000000000" #h"b3f2efd05496df66") (:ecb-mode-test #h"00100000000000000000000000000000" #h"0000000000000000" #h"0e9537378f422ed7") (:ecb-mode-test #h"00080000000000000000000000000000" #h"0000000000000000" #h"3c7bd79356ae0228") (:ecb-mode-test #h"00040000000000000000000000000000" #h"0000000000000000" #h"702f19ef7a88724f") (:ecb-mode-test #h"00020000000000000000000000000000" #h"0000000000000000" #h"8bf6cdc07394c542") (:ecb-mode-test #h"00010000000000000000000000000000" #h"0000000000000000" #h"10c027026c15eefa") (:ecb-mode-test #h"00008000000000000000000000000000" #h"0000000000000000" #h"7ce1279f75be4167") (:ecb-mode-test #h"00004000000000000000000000000000" #h"0000000000000000" #h"5a9e0123d1e694c0") (:ecb-mode-test #h"00002000000000000000000000000000" #h"0000000000000000" #h"7c37fc7b2b36c7f4") (:ecb-mode-test #h"00001000000000000000000000000000" #h"0000000000000000" #h"3b26d4c5424a727e") (:ecb-mode-test #h"00000800000000000000000000000000" #h"0000000000000000" #h"181bcd11ce5af0e4") (:ecb-mode-test #h"00000400000000000000000000000000" #h"0000000000000000" #h"d2501d97a6182377") (:ecb-mode-test #h"00000200000000000000000000000000" #h"0000000000000000" #h"886e81cf1be57bae") (:ecb-mode-test #h"00000100000000000000000000000000" #h"0000000000000000" #h"97b579d10753bf6e") (:ecb-mode-test #h"00000080000000000000000000000000" #h"0000000000000000" #h"56328bb7dd7268e8") (:ecb-mode-test #h"00000040000000000000000000000000" #h"0000000000000000" #h"85b3524cf0ca2cc5") (:ecb-mode-test #h"00000020000000000000000000000000" #h"0000000000000000" #h"b7a20d7a41a30f2a") (:ecb-mode-test #h"00000010000000000000000000000000" #h"0000000000000000" #h"284dcfe16167f3b9") (:ecb-mode-test #h"00000008000000000000000000000000" #h"0000000000000000" #h"15f22f56632c1691") (:ecb-mode-test #h"00000004000000000000000000000000" #h"0000000000000000" #h"010ae75ac4dea3e0") (:ecb-mode-test #h"00000002000000000000000000000000" #h"0000000000000000" #h"c6081fd859a3aed8") (:ecb-mode-test #h"00000001000000000000000000000000" #h"0000000000000000" #h"9ec81af3940f1fcd") (:ecb-mode-test #h"00000000800000000000000000000000" #h"0000000000000000" #h"301a70812cf35a78") (:ecb-mode-test #h"00000000400000000000000000000000" #h"0000000000000000" #h"100d4c12fd2c0771") (:ecb-mode-test #h"00000000200000000000000000000000" #h"0000000000000000" #h"567e8837e9014e75") (:ecb-mode-test #h"00000000100000000000000000000000" #h"0000000000000000" #h"560f18781c8cdeee") (:ecb-mode-test #h"00000000080000000000000000000000" #h"0000000000000000" #h"3f932d231baa967a") (:ecb-mode-test #h"00000000040000000000000000000000" #h"0000000000000000" #h"3bdef7c16c33cec0") (:ecb-mode-test #h"00000000020000000000000000000000" #h"0000000000000000" #h"8c4d5817a9542c67") (:ecb-mode-test #h"00000000010000000000000000000000" #h"0000000000000000" #h"a3153dc478241c67") (:ecb-mode-test #h"00000000008000000000000000000000" #h"0000000000000000" #h"231f0ab091b72c5b") (:ecb-mode-test #h"00000000004000000000000000000000" #h"0000000000000000" #h"f04d68c057166e5d") (:ecb-mode-test #h"00000000002000000000000000000000" #h"0000000000000000" #h"04ee526f05860731") (:ecb-mode-test #h"00000000001000000000000000000000" #h"0000000000000000" #h"28ad3c1e3a180a36") (:ecb-mode-test #h"00000000000800000000000000000000" #h"0000000000000000" #h"fe1b8e8c79f17af3") (:ecb-mode-test #h"00000000000400000000000000000000" #h"0000000000000000" #h"3fcdcf288180d0bb") (:ecb-mode-test #h"00000000000200000000000000000000" #h"0000000000000000" #h"a6ae241534eb3174") (:ecb-mode-test #h"00000000000100000000000000000000" #h"0000000000000000" #h"7fcb585721d94088") (:ecb-mode-test #h"00000000000080000000000000000000" #h"0000000000000000" #h"9d9163d2f95f1fd8") (:ecb-mode-test #h"00000000000040000000000000000000" #h"0000000000000000" #h"d9a6c3dc4243c723") (:ecb-mode-test #h"00000000000020000000000000000000" #h"0000000000000000" #h"23e611d37697cf48") (:ecb-mode-test #h"00000000000010000000000000000000" #h"0000000000000000" #h"a5e0f77ea05a5154") (:ecb-mode-test #h"00000000000008000000000000000000" #h"0000000000000000" #h"7a41985490bbcb92") (:ecb-mode-test #h"00000000000004000000000000000000" #h"0000000000000000" #h"c9f4f3d27941f3c3") (:ecb-mode-test #h"00000000000002000000000000000000" #h"0000000000000000" #h"143e0285013e8893") (:ecb-mode-test #h"00000000000001000000000000000000" #h"0000000000000000" #h"fb4234c72eafe8db") (:ecb-mode-test #h"00000000000000800000000000000000" #h"0000000000000000" #h"c3f591b4c7ad163b") (:ecb-mode-test #h"00000000000000400000000000000000" #h"0000000000000000" #h"610d02c6d6d8fd2e") (:ecb-mode-test #h"00000000000000200000000000000000" #h"0000000000000000" #h"e85e654009003a33") (:ecb-mode-test #h"00000000000000100000000000000000" #h"0000000000000000" #h"b8d5bd8057db1634") (:ecb-mode-test #h"00000000000000080000000000000000" #h"0000000000000000" #h"e8e4d071af362cd6") (:ecb-mode-test #h"00000000000000040000000000000000" #h"0000000000000000" #h"c69756c9d0437c08") (:ecb-mode-test #h"00000000000000020000000000000000" #h"0000000000000000" #h"728a791e67a0d6d9") (:ecb-mode-test #h"00000000000000010000000000000000" #h"0000000000000000" #h"a6a715a1398f8c89") (:ecb-mode-test #h"00000000000000008000000000000000" #h"0000000000000000" #h"870ca9aa8688a5c3") (:ecb-mode-test #h"00000000000000004000000000000000" #h"0000000000000000" #h"170df6e99d51529b") (:ecb-mode-test #h"00000000000000002000000000000000" #h"0000000000000000" #h"212f6f80695adfd0") (:ecb-mode-test #h"00000000000000001000000000000000" #h"0000000000000000" #h"35f4716740ebc4ee") (:ecb-mode-test #h"00000000000000000800000000000000" #h"0000000000000000" #h"85efec310cd65c34") (:ecb-mode-test #h"00000000000000000400000000000000" #h"0000000000000000" #h"067e4ed3981193c2") (:ecb-mode-test #h"00000000000000000200000000000000" #h"0000000000000000" #h"d0e6232d904c24e5") (:ecb-mode-test #h"00000000000000000100000000000000" #h"0000000000000000" #h"313ea5f7b489b618") (:ecb-mode-test #h"00000000000000000080000000000000" #h"0000000000000000" #h"44b8524a33ca70f8") (:ecb-mode-test #h"00000000000000000040000000000000" #h"0000000000000000" #h"343cd6a48c06d3f1") (:ecb-mode-test #h"00000000000000000020000000000000" #h"0000000000000000" #h"60bde87a8df8518f") (:ecb-mode-test #h"00000000000000000010000000000000" #h"0000000000000000" #h"966c119718fc1982") (:ecb-mode-test #h"00000000000000000008000000000000" #h"0000000000000000" #h"c863405f0b9f46a0") (:ecb-mode-test #h"00000000000000000004000000000000" #h"0000000000000000" #h"1a111450d4c86d01") (:ecb-mode-test #h"00000000000000000002000000000000" #h"0000000000000000" #h"a96f5f3f06a62531") (:ecb-mode-test #h"00000000000000000001000000000000" #h"0000000000000000" #h"06db60d3a7a87ca6") (:ecb-mode-test #h"00000000000000000000800000000000" #h"0000000000000000" #h"00259b586d7d0f42") (:ecb-mode-test #h"00000000000000000000400000000000" #h"0000000000000000" #h"e24386ae0a279d71") (:ecb-mode-test #h"00000000000000000000200000000000" #h"0000000000000000" #h"598286fcd254ed76") (:ecb-mode-test #h"00000000000000000000100000000000" #h"0000000000000000" #h"9c40c8f4dbeb74a3") (:ecb-mode-test #h"00000000000000000000080000000000" #h"0000000000000000" #h"2c026e0a74060c42") (:ecb-mode-test #h"00000000000000000000040000000000" #h"0000000000000000" #h"b98ddb7d6fec9756") (:ecb-mode-test #h"00000000000000000000020000000000" #h"0000000000000000" #h"bc3436d040cf6478") (:ecb-mode-test #h"00000000000000000000010000000000" #h"0000000000000000" #h"af92c5d0aad741f8") (:ecb-mode-test #h"00000000000000000000008000000000" #h"0000000000000000" #h"16d4e577b11548e3") (:ecb-mode-test #h"00000000000000000000004000000000" #h"0000000000000000" #h"8daffb46f4aa32a6") (:ecb-mode-test #h"00000000000000000000002000000000" #h"0000000000000000" #h"a627863c96c60731") (:ecb-mode-test #h"00000000000000000000001000000000" #h"0000000000000000" #h"94540a47b24eb2b6") (:ecb-mode-test #h"00000000000000000000000800000000" #h"0000000000000000" #h"9dc6fdced7cf2cd0") (:ecb-mode-test #h"00000000000000000000000400000000" #h"0000000000000000" #h"260be0629bf77d42") (:ecb-mode-test #h"00000000000000000000000200000000" #h"0000000000000000" #h"65270363b88cd09e") (:ecb-mode-test #h"00000000000000000000000100000000" #h"0000000000000000" #h"3629ec361ee87125") (:ecb-mode-test #h"00000000000000000000000080000000" #h"0000000000000000" #h"7eb5e4f6eb9d9796") (:ecb-mode-test #h"00000000000000000000000040000000" #h"0000000000000000" #h"4b0cb71d21f13dc8") (:ecb-mode-test #h"00000000000000000000000020000000" #h"0000000000000000" #h"f948cf95bf63f68b") (:ecb-mode-test #h"00000000000000000000000010000000" #h"0000000000000000" #h"522d114c2c3ce0e9") (:ecb-mode-test #h"00000000000000000000000008000000" #h"0000000000000000" #h"0dab7be2df330f0e") (:ecb-mode-test #h"00000000000000000000000004000000" #h"0000000000000000" #h"537a64734daa368b") (:ecb-mode-test #h"00000000000000000000000002000000" #h"0000000000000000" #h"04e0901e162056bb") (:ecb-mode-test #h"00000000000000000000000001000000" #h"0000000000000000" #h"facfc71c24cd6573") (:ecb-mode-test #h"00000000000000000000000000800000" #h"0000000000000000" #h"b80ba62003387a7a") (:ecb-mode-test #h"00000000000000000000000000400000" #h"0000000000000000" #h"6883dfa684da26f5") (:ecb-mode-test #h"00000000000000000000000000200000" #h"0000000000000000" #h"4a23a57710c63a61") (:ecb-mode-test #h"00000000000000000000000000100000" #h"0000000000000000" #h"f4998bf3a4b415cb") (:ecb-mode-test #h"00000000000000000000000000080000" #h"0000000000000000" #h"817e6d7dadbf5493") (:ecb-mode-test #h"00000000000000000000000000040000" #h"0000000000000000" #h"cddc8886891bcfc5") (:ecb-mode-test #h"00000000000000000000000000020000" #h"0000000000000000" #h"acaf75c8524fd417") (:ecb-mode-test #h"00000000000000000000000000010000" #h"0000000000000000" #h"b5c5eb7646d1420a") (:ecb-mode-test #h"00000000000000000000000000008000" #h"0000000000000000" #h"43bd936c5813a998") (:ecb-mode-test #h"00000000000000000000000000004000" #h"0000000000000000" #h"96ede9543c686bf0") (:ecb-mode-test #h"00000000000000000000000000002000" #h"0000000000000000" #h"72189feb81af1075") (:ecb-mode-test #h"00000000000000000000000000001000" #h"0000000000000000" #h"c88b0b7db269ebe7") (:ecb-mode-test #h"00000000000000000000000000000800" #h"0000000000000000" #h"194a2aefe00f07b5") (:ecb-mode-test #h"00000000000000000000000000000400" #h"0000000000000000" #h"4b8dd301c350d4a5") (:ecb-mode-test #h"00000000000000000000000000000200" #h"0000000000000000" #h"5954d828e7d2a479") (:ecb-mode-test #h"00000000000000000000000000000100" #h"0000000000000000" #h"0353b42468875197") (:ecb-mode-test #h"00000000000000000000000000000080" #h"0000000000000000" #h"a3b7fbe595d73098") (:ecb-mode-test #h"00000000000000000000000000000040" #h"0000000000000000" #h"9cdeb658b8308dc5") (:ecb-mode-test #h"00000000000000000000000000000020" #h"0000000000000000" #h"e83e5670a797097a") (:ecb-mode-test #h"00000000000000000000000000000010" #h"0000000000000000" #h"4ce34c031ee97412") (:ecb-mode-test #h"00000000000000000000000000000008" #h"0000000000000000" #h"29d06f35ea388699") (:ecb-mode-test #h"00000000000000000000000000000004" #h"0000000000000000" #h"67ca4b54e3960a3e") (:ecb-mode-test #h"00000000000000000000000000000002" #h"0000000000000000" #h"c93fad35703f9251") (:ecb-mode-test #h"00000000000000000000000000000001" #h"0000000000000000" #h"3988f7b86c14d3f8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"8000000000000000" #h"c71bee6a7f513078") (:ecb-mode-test #h"00000000000000000000000000000000" #h"4000000000000000" #h"c3d0085f3110c15b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"2000000000000000" #h"096793978334800d") (:ecb-mode-test #h"00000000000000000000000000000000" #h"1000000000000000" #h"e7f0238be517ddec") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0800000000000000" #h"ccff0ac1bbfc777a") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0400000000000000" #h"edab2c741c0d7ee9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0200000000000000" #h"fd556989a7851e84") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0100000000000000" #h"3a9ca2996deeca39") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0080000000000000" #h"4b15a3914f7d0108") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0040000000000000" #h"2c8a1c9a330802ac") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0020000000000000" #h"06968ad82ba24a6b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0010000000000000" #h"f4683728c1bbd4be") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0008000000000000" #h"e0d21b01aa51c724") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0004000000000000" #h"0a242aa76b3ad5fb") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0002000000000000" #h"0d798f2e4c0c99e8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0001000000000000" #h"c135d280348b0cf0") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000800000000000" #h"b8ea3f4438be8d92") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000400000000000" #h"0cc09ec3110c3d2d") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000200000000000" #h"d00fec30da0957a8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000100000000000" #h"d0cb2796c17fa36e") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000080000000000" #h"c17790ebd06c29a8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000040000000000" #h"70fe9968efe3e509") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000020000000000" #h"d06cab5e0f8dd270") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000010000000000" #h"7ff73e5715274d22") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000008000000000" #h"ba612b28c86baf6d") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000004000000000" #h"f01725be89258b16") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000002000000000" #h"9fdf714eacc2eadf") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000001000000000" #h"0c4e2af75fd6db92") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000800000000" #h"b66dd4500ad4a9a7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000400000000" #h"eb14ad5ad027ce02") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000200000000" #h"d8429a3cbb609e95") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000100000000" #h"e36f517fadb10283") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000080000000" #h"48fa03648011934c") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000040000000" #h"a97267e0395aa865") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000020000000" #h"74ece2145adc6cc5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000010000000" #h"a2305dc4cf9b8d8c") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000008000000" #h"57f7a24583ef2a59") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000004000000" #h"badf5c80c0211f0a") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000002000000" #h"1006c5f27105c0aa") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000001000000" #h"77d1dec8c18762b5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000800000" #h"364751f0e5fcd7a6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000400000" #h"e246f44b527a0583") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000200000" #h"5b91118af7701b30") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000100000" #h"da756f300ac1f673") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000080000" #h"ebfe28c198b7cd04") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000040000" #h"cae231bf885d582d") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000020000" #h"1498c6c131752c89") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000010000" #h"57dcd4fc811120af") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000008000" #h"c7a0220378c3ff5e") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000004000" #h"90fca671a002124d") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000002000" #h"7bf08f0c7b53e787") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000001000" #h"d24bcd152bf2ad8b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000800" #h"f71b71c15222e0c2") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000400" #h"34193083a4ebffc6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000200" #h"d6f79fc6bd53483b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000100" #h"7817e552eaee7624") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000080" #h"17d7042a52c1a28e") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000040" #h"ba7f5ad5f95f7a8d") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000020" #h"1fd2ebd5972b3fd7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000010" #h"77316a6c1e0ea0e0") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000008" #h"5daf183bc25e487e") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000004" #h"1b5de93f23225161") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000002" #h"5337a50ba5bc4bd8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000001" #h"a93ff797776248cd") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000000" #h"8107714f0d8188a7") (:ecb-mode-test #h"01010101010101010101010101010101" #h"0101010101010101" #h"e9824f4ee0194112") (:ecb-mode-test #h"02020202020202020202020202020202" #h"0202020202020202" #h"6f8d80683dde8f3b") (:ecb-mode-test #h"03030303030303030303030303030303" #h"0303030303030303" #h"86cb384f5d5a78ba") (:ecb-mode-test #h"04040404040404040404040404040404" #h"0404040404040404" #h"dfb1052ff3a158cf") (:ecb-mode-test #h"05050505050505050505050505050505" #h"0505050505050505" #h"e0b20bff51bfd54a") (:ecb-mode-test #h"06060606060606060606060606060606" #h"0606060606060606" #h"1afa42e2d0fc0306") (:ecb-mode-test #h"07070707070707070707070707070707" #h"0707070707070707" #h"24e44d63a6cb9524") (:ecb-mode-test #h"08080808080808080808080808080808" #h"0808080808080808" #h"d2d2a08e3dd8c4d4") (:ecb-mode-test #h"09090909090909090909090909090909" #h"0909090909090909" #h"732a85da5a5cb13a") (:ecb-mode-test #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"0A0A0A0A0A0A0A0A" #h"7898ee5b157aeaba") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B" #h"35489cd27f5f228f") (:ecb-mode-test #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"0C0C0C0C0C0C0C0C" #h"2a11c21c1792ef26") (:ecb-mode-test #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"0D0D0D0D0D0D0D0D" #h"1e687e065fe158e5") (:ecb-mode-test #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"0E0E0E0E0E0E0E0E" #h"47e96a5c58be59c2") (:ecb-mode-test #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"0F0F0F0F0F0F0F0F" #h"75a38f25e69fa070") (:ecb-mode-test #h"10101010101010101010101010101010" #h"1010101010101010" #h"55c2e6f294070eae") (:ecb-mode-test #h"11111111111111111111111111111111" #h"1111111111111111" #h"54e11dd12e18862e") (:ecb-mode-test #h"12121212121212121212121212121212" #h"1212121212121212" #h"fe00e6ab69ac2b55") (:ecb-mode-test #h"13131313131313131313131313131313" #h"1313131313131313" #h"2f512793c1b05556") (:ecb-mode-test #h"14141414141414141414141414141414" #h"1414141414141414" #h"0c80b388ec72638b") (:ecb-mode-test #h"15151515151515151515151515151515" #h"1515151515151515" #h"74f13979c333028c") (:ecb-mode-test #h"16161616161616161616161616161616" #h"1616161616161616" #h"a301ad0515f48e35") (:ecb-mode-test #h"17171717171717171717171717171717" #h"1717171717171717" #h"4592ac61ece30ed7") (:ecb-mode-test #h"18181818181818181818181818181818" #h"1818181818181818" #h"9c15e78938319fe9") (:ecb-mode-test #h"19191919191919191919191919191919" #h"1919191919191919" #h"21eacc6b6d30220d") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A" #h"ac377b275ebd61f8") (:ecb-mode-test #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"1B1B1B1B1B1B1B1B" #h"d4a9c9bc256ad770") (:ecb-mode-test #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"1C1C1C1C1C1C1C1C" #h"026c9a87d1be3bb1") (:ecb-mode-test #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"1D1D1D1D1D1D1D1D" #h"a1f8cf0f094cfbf2") (:ecb-mode-test #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"1E1E1E1E1E1E1E1E" #h"3d5c1f6831a6d353") (:ecb-mode-test #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"1F1F1F1F1F1F1F1F" #h"1f606752b8a9921b") (:ecb-mode-test #h"20202020202020202020202020202020" #h"2020202020202020" #h"79ab8e8234ac2c1b") (:ecb-mode-test #h"21212121212121212121212121212121" #h"2121212121212121" #h"ab4a1c2c7c3328a0") (:ecb-mode-test #h"22222222222222222222222222222222" #h"2222222222222222" #h"ab72ff74de394764") (:ecb-mode-test #h"23232323232323232323232323232323" #h"2323232323232323" #h"b13ec40fac6ee78f") (:ecb-mode-test #h"24242424242424242424242424242424" #h"2424242424242424" #h"599c657a2f540805") (:ecb-mode-test #h"25252525252525252525252525252525" #h"2525252525252525" #h"877a3945e548e178") (:ecb-mode-test #h"26262626262626262626262626262626" #h"2626262626262626" #h"8376c0ab6374153d") (:ecb-mode-test #h"27272727272727272727272727272727" #h"2727272727272727" #h"132c77a95d9e7154") (:ecb-mode-test #h"28282828282828282828282828282828" #h"2828282828282828" #h"62a11a93b1056e62") (:ecb-mode-test #h"29292929292929292929292929292929" #h"2929292929292929" #h"aafeb4637e904710") (:ecb-mode-test #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"2A2A2A2A2A2A2A2A" #h"9beb67d61051bd39") (:ecb-mode-test #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"2B2B2B2B2B2B2B2B" #h"4e96039419fe5f0d") (:ecb-mode-test #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"2C2C2C2C2C2C2C2C" #h"3108820fa03ed431") (:ecb-mode-test #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"2D2D2D2D2D2D2D2D" #h"2a9a5e4ee7977584") (:ecb-mode-test #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"2E2E2E2E2E2E2E2E" #h"cc779bfddf603dbe") (:ecb-mode-test #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"2F2F2F2F2F2F2F2F" #h"cf9fef6e620e25b7") (:ecb-mode-test #h"30303030303030303030303030303030" #h"3030303030303030" #h"2ae62f853d307b23") (:ecb-mode-test #h"31313131313131313131313131313131" #h"3131313131313131" #h"8e5f0412c3a7e16b") (:ecb-mode-test #h"32323232323232323232323232323232" #h"3232323232323232" #h"c610839c72beb575") (:ecb-mode-test #h"33333333333333333333333333333333" #h"3333333333333333" #h"dbea4a0c97d9a230") (:ecb-mode-test #h"34343434343434343434343434343434" #h"3434343434343434" #h"c4d2bb6360009d0c") (:ecb-mode-test #h"35353535353535353535353535353535" #h"3535353535353535" #h"bdf12d8bea358012") (:ecb-mode-test #h"36363636363636363636363636363636" #h"3636363636363636" #h"6c1492d67f549708") (:ecb-mode-test #h"37373737373737373737373737373737" #h"3737373737373737" #h"7906599461a8ad47") (:ecb-mode-test #h"38383838383838383838383838383838" #h"3838383838383838" #h"3f09bb712a8882e0") (:ecb-mode-test #h"39393939393939393939393939393939" #h"3939393939393939" #h"4811894ce2e25c59") (:ecb-mode-test #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"3A3A3A3A3A3A3A3A" #h"c7a2cabd45a2f07a") (:ecb-mode-test #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"3B3B3B3B3B3B3B3B" #h"0af19bee491f1c2b") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C" #h"28804793596a8043") (:ecb-mode-test #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"3D3D3D3D3D3D3D3D" #h"a549f0a5d85a0fb9") (:ecb-mode-test #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"3E3E3E3E3E3E3E3E" #h"547914c7f1a9b404") (:ecb-mode-test #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"3F3F3F3F3F3F3F3F" #h"56c1a1a09afea773") (:ecb-mode-test #h"40404040404040404040404040404040" #h"4040404040404040" #h"7aefe9afd4b98397") (:ecb-mode-test #h"41414141414141414141414141414141" #h"4141414141414141" #h"8fa2934542a2c927") (:ecb-mode-test #h"42424242424242424242424242424242" #h"4242424242424242" #h"83c438340e88471d") (:ecb-mode-test #h"43434343434343434343434343434343" #h"4343434343434343" #h"7fae73e8a52b716f") (:ecb-mode-test #h"44444444444444444444444444444444" #h"4444444444444444" #h"e873f4ba457e996d") (:ecb-mode-test #h"45454545454545454545454545454545" #h"4545454545454545" #h"3d3b00de2c57a85f") (:ecb-mode-test #h"46464646464646464646464646464646" #h"4646464646464646" #h"43fc4484a47e1c42") (:ecb-mode-test #h"47474747474747474747474747474747" #h"4747474747474747" #h"8e6ccbe613c695d9") (:ecb-mode-test #h"48484848484848484848484848484848" #h"4848484848484848" #h"016873641cd2de36") (:ecb-mode-test #h"49494949494949494949494949494949" #h"4949494949494949" #h"df6d982dbbcc08ab") (:ecb-mode-test #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"4A4A4A4A4A4A4A4A" #h"866f9f11a2a508c9") (:ecb-mode-test #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"4B4B4B4B4B4B4B4B" #h"161a4e667be9fa14") (:ecb-mode-test #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"4C4C4C4C4C4C4C4C" #h"8985e2f5e3d2dbf3") (:ecb-mode-test #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"4D4D4D4D4D4D4D4D" #h"4da7c333d3df3b6b") (:ecb-mode-test #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"4E4E4E4E4E4E4E4E" #h"a29d31c656acb500") (:ecb-mode-test #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"4F4F4F4F4F4F4F4F" #h"27d24b40f12fdaca") (:ecb-mode-test #h"50505050505050505050505050505050" #h"5050505050505050" #h"92c398b66959d7d7") (:ecb-mode-test #h"51515151515151515151515151515151" #h"5151515151515151" #h"45cc3e41fe50138e") (:ecb-mode-test #h"52525252525252525252525252525252" #h"5252525252525252" #h"b5263a369ae28be1") (:ecb-mode-test #h"53535353535353535353535353535353" #h"5353535353535353" #h"235955050b5718d1") (:ecb-mode-test #h"54545454545454545454545454545454" #h"5454545454545454" #h"1e10ecd3060e32e2") (:ecb-mode-test #h"55555555555555555555555555555555" #h"5555555555555555" #h"b1ffb248da58063e") (:ecb-mode-test #h"56565656565656565656565656565656" #h"5656565656565656" #h"22ee2dae0a75e47a") (:ecb-mode-test #h"57575757575757575757575757575757" #h"5757575757575757" #h"ba6ff24b2da50e6d") (:ecb-mode-test #h"58585858585858585858585858585858" #h"5858585858585858" #h"ee0af1c84f35cfe0") (:ecb-mode-test #h"59595959595959595959595959595959" #h"5959595959595959" #h"53611a019052706a") (:ecb-mode-test #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"5A5A5A5A5A5A5A5A" #h"8202f731d26cb00e") (:ecb-mode-test #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"5B5B5B5B5B5B5B5B" #h"80776ee86306ae83") (:ecb-mode-test #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"5C5C5C5C5C5C5C5C" #h"5b3276072410ec9c") (:ecb-mode-test #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"5D5D5D5D5D5D5D5D" #h"bd77e49004383bb3") (:ecb-mode-test #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"5E5E5E5E5E5E5E5E" #h"e44e38c7518fd84d") (:ecb-mode-test #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"5F5F5F5F5F5F5F5F" #h"f518be053bd7f7a1") (:ecb-mode-test #h"60606060606060606060606060606060" #h"6060606060606060" #h"ca0ecf6a9208d7e2") (:ecb-mode-test #h"61616161616161616161616161616161" #h"6161616161616161" #h"a1c2f6256b87e1ca") (:ecb-mode-test #h"62626262626262626262626262626262" #h"6262626262626262" #h"0876fb93c96ab756") (:ecb-mode-test #h"63636363636363636363636363636363" #h"6363636363636363" #h"0e4c8dad9256f7b0") (:ecb-mode-test #h"64646464646464646464646464646464" #h"6464646464646464" #h"54a312d52e461048") (:ecb-mode-test #h"65656565656565656565656565656565" #h"6565656565656565" #h"8a1df74e262def5c") (:ecb-mode-test #h"66666666666666666666666666666666" #h"6666666666666666" #h"daf6a9d256a2cf4a") (:ecb-mode-test #h"67676767676767676767676767676767" #h"6767676767676767" #h"b3718f4e5e56f311") (:ecb-mode-test #h"68686868686868686868686868686868" #h"6868686868686868" #h"682b9548e7491408") (:ecb-mode-test #h"69696969696969696969696969696969" #h"6969696969696969" #h"f8fa125c1d585949") (:ecb-mode-test #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"6A6A6A6A6A6A6A6A" #h"1301c213875f59d1") (:ecb-mode-test #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"6B6B6B6B6B6B6B6B" #h"5023df8e2b6bab77") (:ecb-mode-test #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"6C6C6C6C6C6C6C6C" #h"ff53805d537caf0a") (:ecb-mode-test #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"6D6D6D6D6D6D6D6D" #h"4279df53ee18fbe3") (:ecb-mode-test #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"6E6E6E6E6E6E6E6E" #h"2ace6edaf32f1665") (:ecb-mode-test #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"6F6F6F6F6F6F6F6F" #h"20bfd21426929aa8") (:ecb-mode-test #h"70707070707070707070707070707070" #h"7070707070707070" #h"e680c5ae4bfaad52") (:ecb-mode-test #h"71717171717171717171717171717171" #h"7171717171717171" #h"141052351ddd0f75") (:ecb-mode-test #h"72727272727272727272727272727272" #h"7272727272727272" #h"35e4143fdbff8cd9") (:ecb-mode-test #h"73737373737373737373737373737373" #h"7373737373737373" #h"883aeb08ac344ea9") (:ecb-mode-test #h"74747474747474747474747474747474" #h"7474747474747474" #h"8098cd594f5aa7cf") (:ecb-mode-test #h"75757575757575757575757575757575" #h"7575757575757575" #h"35ed936a19f336d4") (:ecb-mode-test #h"76767676767676767676767676767676" #h"7676767676767676" #h"6c81bc81c408ffb8") (:ecb-mode-test #h"77777777777777777777777777777777" #h"7777777777777777" #h"53161b25d3b4ad24") (:ecb-mode-test #h"78787878787878787878787878787878" #h"7878787878787878" #h"ebb6317351e485ea") (:ecb-mode-test #h"79797979797979797979797979797979" #h"7979797979797979" #h"3c9cfc635580cb77") (:ecb-mode-test #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"7A7A7A7A7A7A7A7A" #h"dbf49d8e402bcf7a") (:ecb-mode-test #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"7B7B7B7B7B7B7B7B" #h"140b72d05983ef71") (:ecb-mode-test #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"7C7C7C7C7C7C7C7C" #h"dea95d7d3174d064") (:ecb-mode-test #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"7D7D7D7D7D7D7D7D" #h"e1c8a0e8e8082ef8") (:ecb-mode-test #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"7E7E7E7E7E7E7E7E" #h"262583a7229e9520") (:ecb-mode-test #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"7F7F7F7F7F7F7F7F" #h"7a1fb2589b24b227") (:ecb-mode-test #h"80808080808080808080808080808080" #h"8080808080808080" #h"bf22de302c614872") (:ecb-mode-test #h"81818181818181818181818181818181" #h"8181818181818181" #h"daa83f33f77eefe0") (:ecb-mode-test #h"82828282828282828282828282828282" #h"8282828282828282" #h"ba99372354ce02fd") (:ecb-mode-test #h"83838383838383838383838383838383" #h"8383838383838383" #h"d8618cd87bce7b22") (:ecb-mode-test #h"84848484848484848484848484848484" #h"8484848484848484" #h"c19a8313a021d620") (:ecb-mode-test #h"85858585858585858585858585858585" #h"8585858585858585" #h"096b3ecf139d1567") (:ecb-mode-test #h"86868686868686868686868686868686" #h"8686868686868686" #h"dd4b48c448e58f58") (:ecb-mode-test #h"87878787878787878787878787878787" #h"8787878787878787" #h"8f2c8b54716df547") (:ecb-mode-test #h"88888888888888888888888888888888" #h"8888888888888888" #h"a38ac239ae5cd8b9") (:ecb-mode-test #h"89898989898989898989898989898989" #h"8989898989898989" #h"a097f7f3a05a3926") (:ecb-mode-test #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"8A8A8A8A8A8A8A8A" #h"741034ec52693917") (:ecb-mode-test #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"8B8B8B8B8B8B8B8B" #h"24e4bf7551be54a2") (:ecb-mode-test #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"8C8C8C8C8C8C8C8C" #h"de4ac8bad2b8016e") (:ecb-mode-test #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"8D8D8D8D8D8D8D8D" #h"0e204e542a072a71") (:ecb-mode-test #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"8E8E8E8E8E8E8E8E" #h"b31e641729d3ba91") (:ecb-mode-test #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"8F8F8F8F8F8F8F8F" #h"e7561f244df0a9a3") (:ecb-mode-test #h"90909090909090909090909090909090" #h"9090909090909090" #h"f6f7601aa283ec51") (:ecb-mode-test #h"91919191919191919191919191919191" #h"9191919191919191" #h"9c0a5a6569cde43d") (:ecb-mode-test #h"92929292929292929292929292929292" #h"9292929292929292" #h"d9ffc301516e48cd") (:ecb-mode-test #h"93939393939393939393939393939393" #h"9393939393939393" #h"e4702ff3bc32d616") (:ecb-mode-test #h"94949494949494949494949494949494" #h"9494949494949494" #h"9639f337acd7b095") (:ecb-mode-test #h"95959595959595959595959595959595" #h"9595959595959595" #h"a38d66c701a979cb") (:ecb-mode-test #h"96969696969696969696969696969696" #h"9696969696969696" #h"6bc588ff17bbb618") (:ecb-mode-test #h"97979797979797979797979797979797" #h"9797979797979797" #h"d07341d215d675b6") (:ecb-mode-test #h"98989898989898989898989898989898" #h"9898989898989898" #h"d0e7b523726c863f") (:ecb-mode-test #h"99999999999999999999999999999999" #h"9999999999999999" #h"bf174c7ff8f2a908") (:ecb-mode-test #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"9A9A9A9A9A9A9A9A" #h"8c1c7af696cbe7d6") (:ecb-mode-test #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"9B9B9B9B9B9B9B9B" #h"6246be0146bac5f2") (:ecb-mode-test #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"9C9C9C9C9C9C9C9C" #h"c8ade500dbf45051") (:ecb-mode-test #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"9D9D9D9D9D9D9D9D" #h"f70d090a770cc6ff") (:ecb-mode-test #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"9E9E9E9E9E9E9E9E" #h"cd9c2e1a73de6303") (:ecb-mode-test #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"9F9F9F9F9F9F9F9F" #h"a48d00cecadc7354") (:ecb-mode-test #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"A0A0A0A0A0A0A0A0" #h"1d91e00af83e7f60") (:ecb-mode-test #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"A1A1A1A1A1A1A1A1" #h"c9e8aaf26f684e57") (:ecb-mode-test #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"A2A2A2A2A2A2A2A2" #h"dd2bbb3b8236f68a") (:ecb-mode-test #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"A3A3A3A3A3A3A3A3" #h"fcb3b9fd347ba1d6") (:ecb-mode-test #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"A4A4A4A4A4A4A4A4" #h"6d523c29b27f8bd3") (:ecb-mode-test #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"A5A5A5A5A5A5A5A5" #h"17b653cd659bc712") (:ecb-mode-test #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"A6A6A6A6A6A6A6A6" #h"0cc5910dace550c7") (:ecb-mode-test #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"A7A7A7A7A7A7A7A7" #h"564265dfcec21825") (:ecb-mode-test #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"A8A8A8A8A8A8A8A8" #h"a5f70640f4e7752a") (:ecb-mode-test #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"A9A9A9A9A9A9A9A9" #h"4ca6b60e702a1d21") (:ecb-mode-test #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"AAAAAAAAAAAAAAAA" #h"c5c65a69e2ed7515") (:ecb-mode-test #h"ABABABABABABABABABABABABABABABAB" #h"ABABABABABABABAB" #h"6ff2ef67dc8bba70") (:ecb-mode-test #h"ACACACACACACACACACACACACACACACAC" #h"ACACACACACACACAC" #h"4184b15fdbe046a6") (:ecb-mode-test #h"ADADADADADADADADADADADADADADADAD" #h"ADADADADADADADAD" #h"a49812697f60a396") (:ecb-mode-test #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"AEAEAEAEAEAEAEAE" #h"062a921a8d95b345") (:ecb-mode-test #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"AFAFAFAFAFAFAFAF" #h"4fb9a34dba9caaf1") (:ecb-mode-test #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"B0B0B0B0B0B0B0B0" #h"07512695f597506f") (:ecb-mode-test #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"B1B1B1B1B1B1B1B1" #h"58ac689cf9672792") (:ecb-mode-test #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"B2B2B2B2B2B2B2B2" #h"afa557ac3746c753") (:ecb-mode-test #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"B3B3B3B3B3B3B3B3" #h"d3855256187bced4") (:ecb-mode-test #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"B4B4B4B4B4B4B4B4" #h"32f2dceebc9af81b") (:ecb-mode-test #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"B5B5B5B5B5B5B5B5" #h"3686340159397eb2") (:ecb-mode-test #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"B6B6B6B6B6B6B6B6" #h"711666aac2958f82") (:ecb-mode-test #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"B7B7B7B7B7B7B7B7" #h"79dbf9195694f321") (:ecb-mode-test #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"B8B8B8B8B8B8B8B8" #h"b3a63b52836ef568") (:ecb-mode-test #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"B9B9B9B9B9B9B9B9" #h"91c9d271435c6233") (:ecb-mode-test #h"BABABABABABABABABABABABABABABABA" #h"BABABABABABABABA" #h"7b8150f77f79d213") (:ecb-mode-test #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"BBBBBBBBBBBBBBBB" #h"5a8092045262dc87") (:ecb-mode-test #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"BCBCBCBCBCBCBCBC" #h"a07dd29f4cf6a2df") (:ecb-mode-test #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"BDBDBDBDBDBDBDBD" #h"b2118070a60c9c64") (:ecb-mode-test #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"BEBEBEBEBEBEBEBE" #h"283fbbc9f638192e") (:ecb-mode-test #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"BFBFBFBFBFBFBFBF" #h"e3a471e1c1a66ee4") (:ecb-mode-test #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"C0C0C0C0C0C0C0C0" #h"62828f5e5c45e0e0") (:ecb-mode-test #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"C1C1C1C1C1C1C1C1" #h"ce8a5ac7f0017eb4") (:ecb-mode-test #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"C2C2C2C2C2C2C2C2" #h"bfa27d0a7acbf1e4") (:ecb-mode-test #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"C3C3C3C3C3C3C3C3" #h"b2286c6883b0fbab") (:ecb-mode-test #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"C4C4C4C4C4C4C4C4" #h"61cd74879bec1a33") (:ecb-mode-test #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"C5C5C5C5C5C5C5C5" #h"97b863e52302a219") (:ecb-mode-test #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"C6C6C6C6C6C6C6C6" #h"acbbccf9f0d804ec") (:ecb-mode-test #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"C7C7C7C7C7C7C7C7" #h"97a86a3c28697d31") (:ecb-mode-test #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"C8C8C8C8C8C8C8C8" #h"197042a22819bcdc") (:ecb-mode-test #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"C9C9C9C9C9C9C9C9" #h"7264c6bb0d0b8065") (:ecb-mode-test #h"CACACACACACACACACACACACACACACACA" #h"CACACACACACACACA" #h"55006a3c885a5034") (:ecb-mode-test #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"CBCBCBCBCBCBCBCB" #h"98b98e0ea3387a1e") (:ecb-mode-test #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"CCCCCCCCCCCCCCCC" #h"79498eb893366438") (:ecb-mode-test #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"CDCDCDCDCDCDCDCD" #h"5384457320bde2d1") (:ecb-mode-test #h"CECECECECECECECECECECECECECECECE" #h"CECECECECECECECE" #h"81047508030316b6") (:ecb-mode-test #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"CFCFCFCFCFCFCFCF" #h"afab941420c154bd") (:ecb-mode-test #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"D0D0D0D0D0D0D0D0" #h"1f383446e06ddb7f") (:ecb-mode-test #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"D1D1D1D1D1D1D1D1" #h"48c28844eba53092") (:ecb-mode-test #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"D2D2D2D2D2D2D2D2" #h"3189269384246515") (:ecb-mode-test #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"D3D3D3D3D3D3D3D3" #h"1de63fa1d222b50a") (:ecb-mode-test #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"D4D4D4D4D4D4D4D4" #h"e97e1c9cabdae06a") (:ecb-mode-test #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"D5D5D5D5D5D5D5D5" #h"5335284b1e262179") (:ecb-mode-test #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"D6D6D6D6D6D6D6D6" #h"7b8e0cda3f504864") (:ecb-mode-test #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"D7D7D7D7D7D7D7D7" #h"bdc019f64ee91f0b") (:ecb-mode-test #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"D8D8D8D8D8D8D8D8" #h"6d8112170b1242d6") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9" #h"e472af384143c385") (:ecb-mode-test #h"DADADADADADADADADADADADADADADADA" #h"DADADADADADADADA" #h"99841f48a8e99c7c") (:ecb-mode-test #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"DBDBDBDBDBDBDBDB" #h"68b164e6124037cb") (:ecb-mode-test #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"DCDCDCDCDCDCDCDC" #h"f217c8b90714d05f") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDD" #h"8dc6e54c5b6398e0") (:ecb-mode-test #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"DEDEDEDEDEDEDEDE" #h"ea7a5b67741f6212") (:ecb-mode-test #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"DFDFDFDFDFDFDFDF" #h"8403c78f4ebff342") (:ecb-mode-test #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"E0E0E0E0E0E0E0E0" #h"0c2f81bd94724cc9") (:ecb-mode-test #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"E1E1E1E1E1E1E1E1" #h"5dad83d2b8153158") (:ecb-mode-test #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"E2E2E2E2E2E2E2E2" #h"ecbc6a0959fdf1c9") (:ecb-mode-test #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"E3E3E3E3E3E3E3E3" #h"403871ab351bdc1d") (:ecb-mode-test #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"E4E4E4E4E4E4E4E4" #h"002c607a1502bb86") (:ecb-mode-test #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"E5E5E5E5E5E5E5E5" #h"f1bc15d10a4a5264") (:ecb-mode-test #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"E6E6E6E6E6E6E6E6" #h"002fef3928685a45") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7" #h"6abd5ea83bee0d34") (:ecb-mode-test #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"E8E8E8E8E8E8E8E8" #h"8a1d2564775eabcf") (:ecb-mode-test #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"E9E9E9E9E9E9E9E9" #h"4f40cd3b1de4d815") (:ecb-mode-test #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"EAEAEAEAEAEAEAEA" #h"5ad37c20d15094e8") (:ecb-mode-test #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"EBEBEBEBEBEBEBEB" #h"2efbb091d718e768") (:ecb-mode-test #h"ECECECECECECECECECECECECECECECEC" #h"ECECECECECECECEC" #h"8202992a81159119") (:ecb-mode-test #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"EDEDEDEDEDEDEDED" #h"545e73487bd25858") (:ecb-mode-test #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"EEEEEEEEEEEEEEEE" #h"1cded5de39b6adc9") (:ecb-mode-test #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"EFEFEFEFEFEFEFEF" #h"5e2fe0f76c649d9a") (:ecb-mode-test #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"F0F0F0F0F0F0F0F0" #h"ef200eeb1cf52c14") (:ecb-mode-test #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"F1F1F1F1F1F1F1F1" #h"e78f3295f9c82de9") (:ecb-mode-test #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"F2F2F2F2F2F2F2F2" #h"df473824f9d3e175") (:ecb-mode-test #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"F3F3F3F3F3F3F3F3" #h"59e3b5bc4a31f1f6") (:ecb-mode-test #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"F4F4F4F4F4F4F4F4" #h"22f69c52c722c9ab") (:ecb-mode-test #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"F5F5F5F5F5F5F5F5" #h"01c04b45a3263099") (:ecb-mode-test #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"F6F6F6F6F6F6F6F6" #h"ab348a01c6fb285d") (:ecb-mode-test #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"F7F7F7F7F7F7F7F7" #h"3eb3ddbc697dbd58") (:ecb-mode-test #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"F8F8F8F8F8F8F8F8" #h"6655e845fd6c6ef7") (:ecb-mode-test #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"F9F9F9F9F9F9F9F9" #h"f771266b6779b86a") (:ecb-mode-test #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"FAFAFAFAFAFAFAFA" #h"e71eb873c5518a7b") (:ecb-mode-test #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"FBFBFBFBFBFBFBFB" #h"5703e70d7b0defa8") (:ecb-mode-test #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"FCFCFCFCFCFCFCFC" #h"3eaf55aaa432e0f8") (:ecb-mode-test #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"FDFDFDFDFDFDFDFD" #h"297c036ced195933") (:ecb-mode-test #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"FEFEFEFEFEFEFEFE" #h"cb752d414d79d082") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFF" #h"b0c21a0dbe0a2aa6") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F" #h"0011223344556677" #h"5ab3337c2c72b69f") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF48" #h"EA024714AD5C4D84" #h"1dc0955c2cca541d") (:keystream-test #h"f0c0a4a7b03f86b117d8f62f757c7cd9570393e1a466899f69a4712ed23ae40fa599c48fdf3e6d4b2ed007283d838ded73b97246c53701a6aba6b82b336733f5cdc51815bb57876801bc86fcab85725d9030c42c0b9f922296260902b919a7a66129557395d3d54cca0d2dcefd2a02098fc6e0a5462cc9cb22c5f8a69ba4e5cd" #h"c6771bcb886f74d8" #h"b4b43c1ff7fd5f8664a50db366c96e2067d71b19777775a16e099956682afcb9723faeff62bc522adfe0a705f917a2c4a86841a762eb97d45c11ed46a39313ad671cc4f5e15d5121a324bcd434615ab5bdb2f8ba52a457d6575277a945c0cb1ba9b3b44df2f0102841c7763c32173d55aa7b13a32739f16b0a7c9281764bcdc475ee4e001b7779ff81aeb3c43ef62e0d60627937432bbf396ceed19aa8dcf825b68db51863af32eaab84c2a9cd52e3c6f30c976386c9eda868782e9679aa4ca26813c611f923a698c2248f5eab38de246c52b1de6bfb6894bc9ef68f466008f44ee5ca28c285d2eaaa71382a848eab9f324c1fafaa63b00d7d85f635452252a643a2006eebac33aa31656a4b741ad7099fcd8f3e2a55a119fbe6468c3c76fcc52a45e11d605f348d7d6f571d927b66a78d1b9d8b25ee3cf2b50b08962c33516b585fd144ab57a0bf1a22bad09d3f45407924ea8439f6bae69a14339d52af24a64b33eb8ae51716809bec9c3ed2d4a68b6d31134a250f11bec6efa75988b04a9e2d8adf50fef799d10b76aa07f6ab74ab3214bb56b7e0fb302eed61fcea55e343e32d79d8209feb24b043cf6fe6ef9e5b1cc19e6a26da2af32940a66f6e415417163afda5574b27aa1cf8d494d2946498054cc9877ed5395a33f282b3e225cb3602afd97c7a086690a390c7136fae4b6ad1269f5591a90c60d5cc36e53614dd4e42ac16a60993b9c4d6f17014264aafeab0680956a84b7790e2d58b8e999d854570ae1670319a289a7f89598792f97deeeb879b802c8c63051c9dd0127751d195201599dac11a801e2412490e6b421a52d216d02e60a85ef0937207ee3eef352241410f53c637155548df8103e945685cc3e0e7d7fa08060603d49122127bdf26502dd5feb2ed798681b087880edc35fb9fe10975c6c114e0a9d2a6fc23901f4ee8f5682010c5bab1379d740117b9d3b2be4bfe0b035489d07b1d6dc07955384a4d90f302d593bb9100cada1d820ca8a7902924094d0142bad05e38a99f14ca73c0d77de73862b17b840b794aa4f2a9832cf3e7e13719eb4ccb9f4470c7548b5c284e06698eff162fe9bdd795654fdefeeb7fd1b5f3ed9fecfa71d150ea50647395f9bc0ff56623cfdd3caa914ab82a7f16e5fd10cd36544ff84d57f8c9585e0346d0457315457ddbb760368b27fded17948070240e10aba37b57d3f120b6c41b8f8f30b24c3aca6011f2f51399e6d1fff7a3f466865e93bb93d54944960d2816f86f4e3353ecbb694813271e436c6fd71f086338c72b7c225ae8ed11f6ea416c950d3d8d29cbf670b1c32aa533401ae457a8802c09afcc28591eaa9430548b97efaf0a5c9a966e5331f671962ff199e084b4743d77daaab146716d128e5fd5ac6d48148091ad1fbf") ironclad-0.57/testing/test-vectors/rc5.testvec000066400000000000000000001314511420372057600214620ustar00rootroot00000000000000;;; tests from NESSIE (http://www.cryptonessie.org/) ;;; ;;; n.b. these are all done assuming 12 rounds (:ecb-mode-test #h"80000000000000000000000000000000" #h"0000000000000000" #h"8F681D7F285CDC2F") (:ecb-mode-test #h"40000000000000000000000000000000" #h"0000000000000000" #h"DC14832CF4FE61A8") (:ecb-mode-test #h"20000000000000000000000000000000" #h"0000000000000000" #h"2F2494A0D96958E7") (:ecb-mode-test #h"10000000000000000000000000000000" #h"0000000000000000" #h"410BCDD35DA0963F") (:ecb-mode-test #h"08000000000000000000000000000000" #h"0000000000000000" #h"0C4C1EC0EA4EA260") (:ecb-mode-test #h"04000000000000000000000000000000" #h"0000000000000000" #h"3BBC9C778EDC72B3") (:ecb-mode-test #h"02000000000000000000000000000000" #h"0000000000000000" #h"06381C693372158D") (:ecb-mode-test #h"01000000000000000000000000000000" #h"0000000000000000" #h"587E3D5E4B11860B") (:ecb-mode-test #h"00800000000000000000000000000000" #h"0000000000000000" #h"D6F60736920D9319") (:ecb-mode-test #h"00400000000000000000000000000000" #h"0000000000000000" #h"2ACB30508A017C5D") (:ecb-mode-test #h"00200000000000000000000000000000" #h"0000000000000000" #h"9F1237DD5B57F140") (:ecb-mode-test #h"00100000000000000000000000000000" #h"0000000000000000" #h"A394956442AFCC43") (:ecb-mode-test #h"00080000000000000000000000000000" #h"0000000000000000" #h"F89DB895C619914B") (:ecb-mode-test #h"00040000000000000000000000000000" #h"0000000000000000" #h"F2FA3F8AD897FE55") (:ecb-mode-test #h"00020000000000000000000000000000" #h"0000000000000000" #h"37A7CF80BBA7ED28") (:ecb-mode-test #h"00010000000000000000000000000000" #h"0000000000000000" #h"B4D3613F370CDD26") (:ecb-mode-test #h"00008000000000000000000000000000" #h"0000000000000000" #h"CF6FA85F7D599EED") (:ecb-mode-test #h"00004000000000000000000000000000" #h"0000000000000000" #h"F52C5328B8B73CC2") (:ecb-mode-test #h"00002000000000000000000000000000" #h"0000000000000000" #h"655AEDB550850AF1") (:ecb-mode-test #h"00001000000000000000000000000000" #h"0000000000000000" #h"8D695A777ABC21CE") (:ecb-mode-test #h"00000800000000000000000000000000" #h"0000000000000000" #h"E493DE948CA27B44") (:ecb-mode-test #h"00000400000000000000000000000000" #h"0000000000000000" #h"929BE63E4B0BDC6D") (:ecb-mode-test #h"00000200000000000000000000000000" #h"0000000000000000" #h"72926639928E2E3B") (:ecb-mode-test #h"00000100000000000000000000000000" #h"0000000000000000" #h"A47330C510E3F48A") (:ecb-mode-test #h"00000080000000000000000000000000" #h"0000000000000000" #h"DDF4F2E1733FE495") (:ecb-mode-test #h"00000040000000000000000000000000" #h"0000000000000000" #h"C240C78F92A219B8") (:ecb-mode-test #h"00000020000000000000000000000000" #h"0000000000000000" #h"4ADC682FC6ACBFAD") (:ecb-mode-test #h"00000010000000000000000000000000" #h"0000000000000000" #h"57C7CE07E9CA2BC7") (:ecb-mode-test #h"00000008000000000000000000000000" #h"0000000000000000" #h"34470680FCD4D9CB") (:ecb-mode-test #h"00000004000000000000000000000000" #h"0000000000000000" #h"9A6FB9620B79245F") (:ecb-mode-test #h"00000002000000000000000000000000" #h"0000000000000000" #h"B275A64B37EAF914") (:ecb-mode-test #h"00000001000000000000000000000000" #h"0000000000000000" #h"AEDA56A5190042CE") (:ecb-mode-test #h"00000000800000000000000000000000" #h"0000000000000000" #h"AE861288A7D664D4") (:ecb-mode-test #h"00000000400000000000000000000000" #h"0000000000000000" #h"2C058DA9A41A2604") (:ecb-mode-test #h"00000000200000000000000000000000" #h"0000000000000000" #h"D2F4F442FB27EF3E") (:ecb-mode-test #h"00000000100000000000000000000000" #h"0000000000000000" #h"4A51C6519BA9F04E") (:ecb-mode-test #h"00000000080000000000000000000000" #h"0000000000000000" #h"638F7E9A86AC3FF6") (:ecb-mode-test #h"00000000040000000000000000000000" #h"0000000000000000" #h"AADE1A8BB1DDE268") (:ecb-mode-test #h"00000000020000000000000000000000" #h"0000000000000000" #h"0A875A87E6F2AB87") (:ecb-mode-test #h"00000000010000000000000000000000" #h"0000000000000000" #h"CDCA436661D1EDD1") (:ecb-mode-test #h"00000000008000000000000000000000" #h"0000000000000000" #h"B4BA907F4E6C3F63") (:ecb-mode-test #h"00000000004000000000000000000000" #h"0000000000000000" #h"7790DF95D2FA15CB") (:ecb-mode-test #h"00000000002000000000000000000000" #h"0000000000000000" #h"D78C795A3C2C288B") (:ecb-mode-test #h"00000000001000000000000000000000" #h"0000000000000000" #h"B491EB3DEE1A2EE2") (:ecb-mode-test #h"00000000000800000000000000000000" #h"0000000000000000" #h"E2F2146284D28F74") (:ecb-mode-test #h"00000000000400000000000000000000" #h"0000000000000000" #h"F7BB41B070148B35") (:ecb-mode-test #h"00000000000200000000000000000000" #h"0000000000000000" #h"ADB84CCAD2121BE5") (:ecb-mode-test #h"00000000000100000000000000000000" #h"0000000000000000" #h"800D7FA733B9960C") (:ecb-mode-test #h"00000000000080000000000000000000" #h"0000000000000000" #h"0FE00A54D35ED35E") (:ecb-mode-test #h"00000000000040000000000000000000" #h"0000000000000000" #h"0E53E0B6465D8895") (:ecb-mode-test #h"00000000000020000000000000000000" #h"0000000000000000" #h"01907DF00C43D69C") (:ecb-mode-test #h"00000000000010000000000000000000" #h"0000000000000000" #h"87E399F67357FEE0") (:ecb-mode-test #h"00000000000008000000000000000000" #h"0000000000000000" #h"DCBCCE80E64D7000") (:ecb-mode-test #h"00000000000004000000000000000000" #h"0000000000000000" #h"93B87003240DFF08") (:ecb-mode-test #h"00000000000002000000000000000000" #h"0000000000000000" #h"89555942AE9529CA") (:ecb-mode-test #h"00000000000001000000000000000000" #h"0000000000000000" #h"1AEB38B99495A0CB") (:ecb-mode-test #h"00000000000000800000000000000000" #h"0000000000000000" #h"5DC10990BF7FEAF3") (:ecb-mode-test #h"00000000000000400000000000000000" #h"0000000000000000" #h"5FF336E6E09E151F") (:ecb-mode-test #h"00000000000000200000000000000000" #h"0000000000000000" #h"E4867C31A53F278C") (:ecb-mode-test #h"00000000000000100000000000000000" #h"0000000000000000" #h"AE2D56B443FFBBB0") (:ecb-mode-test #h"00000000000000080000000000000000" #h"0000000000000000" #h"E4B0930CDEA092BF") (:ecb-mode-test #h"00000000000000040000000000000000" #h"0000000000000000" #h"2BD89729A3D0C3BB") (:ecb-mode-test #h"00000000000000020000000000000000" #h"0000000000000000" #h"23ED08C5F4DC6049") (:ecb-mode-test #h"00000000000000010000000000000000" #h"0000000000000000" #h"8FC62B5984577752") (:ecb-mode-test #h"00000000000000008000000000000000" #h"0000000000000000" #h"14613DCC1ABE7A39") (:ecb-mode-test #h"00000000000000004000000000000000" #h"0000000000000000" #h"5E7A901B9FDE2296") (:ecb-mode-test #h"00000000000000002000000000000000" #h"0000000000000000" #h"C4077FCD04CF4870") (:ecb-mode-test #h"00000000000000001000000000000000" #h"0000000000000000" #h"DF7BE5B6876678ED") (:ecb-mode-test #h"00000000000000000800000000000000" #h"0000000000000000" #h"5B8942F5FEA33765") (:ecb-mode-test #h"00000000000000000400000000000000" #h"0000000000000000" #h"994764B14447574B") (:ecb-mode-test #h"00000000000000000200000000000000" #h"0000000000000000" #h"F63BEA609AB9653A") (:ecb-mode-test #h"00000000000000000100000000000000" #h"0000000000000000" #h"6825EFBE4FBCB333") (:ecb-mode-test #h"00000000000000000080000000000000" #h"0000000000000000" #h"BE36BFBF6EAFD879") (:ecb-mode-test #h"00000000000000000040000000000000" #h"0000000000000000" #h"A667934F8149AF84") (:ecb-mode-test #h"00000000000000000020000000000000" #h"0000000000000000" #h"0CFE855287BE997F") (:ecb-mode-test #h"00000000000000000010000000000000" #h"0000000000000000" #h"CA0EB8DFB608C3B8") (:ecb-mode-test #h"00000000000000000008000000000000" #h"0000000000000000" #h"6B1018816D2272CD") (:ecb-mode-test #h"00000000000000000004000000000000" #h"0000000000000000" #h"B7469BCF9E90A2C4") (:ecb-mode-test #h"00000000000000000002000000000000" #h"0000000000000000" #h"48AA658A6925C013") (:ecb-mode-test #h"00000000000000000001000000000000" #h"0000000000000000" #h"D9F87504BA1C3FB3") (:ecb-mode-test #h"00000000000000000000800000000000" #h"0000000000000000" #h"172D40D4F436591C") (:ecb-mode-test #h"00000000000000000000400000000000" #h"0000000000000000" #h"6CAC2B66A306CD73") (:ecb-mode-test #h"00000000000000000000200000000000" #h"0000000000000000" #h"21D7330D53E33DE8") (:ecb-mode-test #h"00000000000000000000100000000000" #h"0000000000000000" #h"06B173283475F8E8") (:ecb-mode-test #h"00000000000000000000080000000000" #h"0000000000000000" #h"FAE2841F2E2FE143") (:ecb-mode-test #h"00000000000000000000040000000000" #h"0000000000000000" #h"A7A81A93E3ECBCD5") (:ecb-mode-test #h"00000000000000000000020000000000" #h"0000000000000000" #h"C2A5BE3EF5EC8AB3") (:ecb-mode-test #h"00000000000000000000010000000000" #h"0000000000000000" #h"B5EB779948BA1623") (:ecb-mode-test #h"00000000000000000000008000000000" #h"0000000000000000" #h"961702D18044CB39") (:ecb-mode-test #h"00000000000000000000004000000000" #h"0000000000000000" #h"59B78C8BCB38A286") (:ecb-mode-test #h"00000000000000000000002000000000" #h"0000000000000000" #h"149630BCFCDCE42F") (:ecb-mode-test #h"00000000000000000000001000000000" #h"0000000000000000" #h"31FC84212D821AB8") (:ecb-mode-test #h"00000000000000000000000800000000" #h"0000000000000000" #h"1BC58ADA2D336C1C") (:ecb-mode-test #h"00000000000000000000000400000000" #h"0000000000000000" #h"3F4A3A940AF166C4") (:ecb-mode-test #h"00000000000000000000000200000000" #h"0000000000000000" #h"89753AB2D0CF3F53") (:ecb-mode-test #h"00000000000000000000000100000000" #h"0000000000000000" #h"8D9638633EBCA8B8") (:ecb-mode-test #h"00000000000000000000000080000000" #h"0000000000000000" #h"5FF9CDADED6F3429") (:ecb-mode-test #h"00000000000000000000000040000000" #h"0000000000000000" #h"EE44FA4A9D7A7A05") (:ecb-mode-test #h"00000000000000000000000020000000" #h"0000000000000000" #h"58DB5741FE4BC562") (:ecb-mode-test #h"00000000000000000000000010000000" #h"0000000000000000" #h"1344DD0FC7FA66A2") (:ecb-mode-test #h"00000000000000000000000008000000" #h"0000000000000000" #h"5A26CE40229FC75F") (:ecb-mode-test #h"00000000000000000000000004000000" #h"0000000000000000" #h"6D065E9A2CF3B415") (:ecb-mode-test #h"00000000000000000000000002000000" #h"0000000000000000" #h"61CA46BABA4C8D3A") (:ecb-mode-test #h"00000000000000000000000001000000" #h"0000000000000000" #h"99F140A08FF367C3") (:ecb-mode-test #h"00000000000000000000000000800000" #h"0000000000000000" #h"0B8940BDB11BE345") (:ecb-mode-test #h"00000000000000000000000000400000" #h"0000000000000000" #h"91010133804AC487") (:ecb-mode-test #h"00000000000000000000000000200000" #h"0000000000000000" #h"C78B7A85517B5EEA") (:ecb-mode-test #h"00000000000000000000000000100000" #h"0000000000000000" #h"CF2506728C542E36") (:ecb-mode-test #h"00000000000000000000000000080000" #h"0000000000000000" #h"FF12180870932832") (:ecb-mode-test #h"00000000000000000000000000040000" #h"0000000000000000" #h"6BC57ADDCF695077") (:ecb-mode-test #h"00000000000000000000000000020000" #h"0000000000000000" #h"BC4A809EEED597F2") (:ecb-mode-test #h"00000000000000000000000000010000" #h"0000000000000000" #h"72B52A71970D60B7") (:ecb-mode-test #h"00000000000000000000000000008000" #h"0000000000000000" #h"768E8E52F5B90C82") (:ecb-mode-test #h"00000000000000000000000000004000" #h"0000000000000000" #h"DD251D79E46362A2") (:ecb-mode-test #h"00000000000000000000000000002000" #h"0000000000000000" #h"E243BEB5973FEFC7") (:ecb-mode-test #h"00000000000000000000000000001000" #h"0000000000000000" #h"96CDEBC83DA721B8") (:ecb-mode-test #h"00000000000000000000000000000800" #h"0000000000000000" #h"8ADD462F714EFDBA") (:ecb-mode-test #h"00000000000000000000000000000400" #h"0000000000000000" #h"AC674285B9E4540C") (:ecb-mode-test #h"00000000000000000000000000000200" #h"0000000000000000" #h"1A71A18BE1CDC037") (:ecb-mode-test #h"00000000000000000000000000000100" #h"0000000000000000" #h"0CB4877BA13CFF53") (:ecb-mode-test #h"00000000000000000000000000000080" #h"0000000000000000" #h"A008F7F61A571A86") (:ecb-mode-test #h"00000000000000000000000000000040" #h"0000000000000000" #h"3E26B0CB22D6536F") (:ecb-mode-test #h"00000000000000000000000000000020" #h"0000000000000000" #h"B77C0B07B3277059") (:ecb-mode-test #h"00000000000000000000000000000010" #h"0000000000000000" #h"BAC5409F22A2AA99") (:ecb-mode-test #h"00000000000000000000000000000008" #h"0000000000000000" #h"E7F29B87919049A0") (:ecb-mode-test #h"00000000000000000000000000000004" #h"0000000000000000" #h"95B437506A1F5067") (:ecb-mode-test #h"00000000000000000000000000000002" #h"0000000000000000" #h"7405DF1B9BC65374") (:ecb-mode-test #h"00000000000000000000000000000001" #h"0000000000000000" #h"52489BF5F14F98D2") (:ecb-mode-test #h"00000000000000000000000000000000" #h"8000000000000000" #h"4FA2D5EE39B74137") (:ecb-mode-test #h"00000000000000000000000000000000" #h"4000000000000000" #h"04E60FB5C6441DD5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"2000000000000000" #h"FA1171CD58261F10") (:ecb-mode-test #h"00000000000000000000000000000000" #h"1000000000000000" #h"349E3CD78060E5EB") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0800000000000000" #h"54C6C8482AB8A4E2") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0400000000000000" #h"804BCFE59F0C8954") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0200000000000000" #h"F4D14CFA3EE9B481") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0100000000000000" #h"DA968333A6C65BE7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0080000000000000" #h"46C4FF9301503D2D") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0040000000000000" #h"CDFF074C4BA8265E") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0020000000000000" #h"BDA0959F633F1AAC") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0010000000000000" #h"8FC51AB26FBE5E97") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0008000000000000" #h"3DB0C7E5BA997608") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0004000000000000" #h"93D28EB470AF073B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0002000000000000" #h"C0A06ED52EDEF8B0") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0001000000000000" #h"FABB5009B1711C73") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000800000000000" #h"94753A63CDDF2157") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000400000000000" #h"418C212BECA3330A") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000200000000000" #h"CA45918EDF128CFF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000100000000000" #h"E0698AB795B7794C") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000080000000000" #h"58762EF054860A81") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000040000000000" #h"883FDCFE44375657") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000020000000000" #h"9FDAAB2BD47390C5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000010000000000" #h"64F108CA31231BCA") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000008000000000" #h"AFADE1ABADA43362") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000004000000000" #h"6A987D66ED176CCA") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000002000000000" #h"73B9F936475FA8DD") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000001000000000" #h"4E5D0326552C013E") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000800000000" #h"7583863E0960FFFF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000400000000" #h"0E7CDF8E36FD5D46") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000200000000" #h"CC74A5C1DAE22BA1") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000100000000" #h"8BF883323140CAA6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000080000000" #h"6A061677A32B330B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000040000000" #h"91D46AB9B92AE6A4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000020000000" #h"D41EDC3D7F846B19") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000010000000" #h"F9A84A33FA626CD7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000008000000" #h"1D415BE3124019F0") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000004000000" #h"4C154FE569DEED07") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000002000000" #h"78A847C198DD7271") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000001000000" #h"1057EE656C013B29") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000800000" #h"408DFD7186AF2563") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000400000" #h"2DE1757F9E0EE6BE") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000200000" #h"CB3610CDBD62958D") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000100000" #h"7E69E66C53CA96B0") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000080000" #h"89413BF393A23167") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000040000" #h"8E5B278638B50B37") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000020000" #h"F6B6468C85DFD608") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000010000" #h"37E7B0C207D436AE") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000008000" #h"D3601DF25C181320") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000004000" #h"7BA87CF78E96450B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000002000" #h"1D98AF7FD8DFB524") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000001000" #h"3B5E9E8275D471BC") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000800" #h"7609BC1137720287") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000400" #h"5EA325CC78190CA2") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000200" #h"DD05C5D9ED42C284") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000100" #h"8F542A10AF0C08C5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000080" #h"117C475C1EC79D8F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000040" #h"FA1B4EFC38CB38F9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000020" #h"15D6A98F07E76BB7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000010" #h"FDFC1F860EC1A432") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000008" #h"6653A552632DB3CA") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000004" #h"F90AF3CF757500E0") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000002" #h"64E414ECF54EB681") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000001" #h"AAF64681E2AC59B1") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000000" #h"21A5DBEE154B8F6D") (:ecb-mode-test #h"01010101010101010101010101010101" #h"0101010101010101" #h"6CABA75030BADD2D") (:ecb-mode-test #h"02020202020202020202020202020202" #h"0202020202020202" #h"5242F450A122809D") (:ecb-mode-test #h"03030303030303030303030303030303" #h"0303030303030303" #h"FD44C2A21A3C84C9") (:ecb-mode-test #h"04040404040404040404040404040404" #h"0404040404040404" #h"38460858F362A332") (:ecb-mode-test #h"05050505050505050505050505050505" #h"0505050505050505" #h"4E8152CF58C5E4A9") (:ecb-mode-test #h"06060606060606060606060606060606" #h"0606060606060606" #h"CCB720D547FBBE46") (:ecb-mode-test #h"07070707070707070707070707070707" #h"0707070707070707" #h"977E36D07FC4A140") (:ecb-mode-test #h"08080808080808080808080808080808" #h"0808080808080808" #h"8D1E08C0850CCF90") (:ecb-mode-test #h"09090909090909090909090909090909" #h"0909090909090909" #h"0E832F2AB3429407") (:ecb-mode-test #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"0A0A0A0A0A0A0A0A" #h"CCE401EE1C6C9BFF") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B" #h"BF628B652E772BA7") (:ecb-mode-test #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"0C0C0C0C0C0C0C0C" #h"42ACD6FEFE5BB691") (:ecb-mode-test #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"0D0D0D0D0D0D0D0D" #h"ADD4BFF533F1C851") (:ecb-mode-test #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"0E0E0E0E0E0E0E0E" #h"6A504F05FF28ACA8") (:ecb-mode-test #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"0F0F0F0F0F0F0F0F" #h"C5B33F57213421E6") (:ecb-mode-test #h"10101010101010101010101010101010" #h"1010101010101010" #h"AC00FDFCAD2D3AE9") (:ecb-mode-test #h"11111111111111111111111111111111" #h"1111111111111111" #h"3E1B0CF71189AB99") (:ecb-mode-test #h"12121212121212121212121212121212" #h"1212121212121212" #h"5334EAA33D4786D3") (:ecb-mode-test #h"13131313131313131313131313131313" #h"1313131313131313" #h"CBC3CC2742BEEC05") (:ecb-mode-test #h"14141414141414141414141414141414" #h"1414141414141414" #h"C023A16B3C7054E1") (:ecb-mode-test #h"15151515151515151515151515151515" #h"1515151515151515" #h"9C9328D4A0B7A4C4") (:ecb-mode-test #h"16161616161616161616161616161616" #h"1616161616161616" #h"72752F9BFF4018D0") (:ecb-mode-test #h"17171717171717171717171717171717" #h"1717171717171717" #h"91A3A4775CDE1A93") (:ecb-mode-test #h"18181818181818181818181818181818" #h"1818181818181818" #h"6C7920CAEE61E7BC") (:ecb-mode-test #h"19191919191919191919191919191919" #h"1919191919191919" #h"6709225C0C76EBB9") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A" #h"9C10B1B6F7BD1E5D") (:ecb-mode-test #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"1B1B1B1B1B1B1B1B" #h"C0099C99E622CAF8") (:ecb-mode-test #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"1C1C1C1C1C1C1C1C" #h"20C0456C020A7109") (:ecb-mode-test #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"1D1D1D1D1D1D1D1D" #h"68E4AFCA39E094BB") (:ecb-mode-test #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"1E1E1E1E1E1E1E1E" #h"1E7F5C7518DF9554") (:ecb-mode-test #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"1F1F1F1F1F1F1F1F" #h"9469D3CEB650F218") (:ecb-mode-test #h"20202020202020202020202020202020" #h"2020202020202020" #h"BDDC38EE9918BDD8") (:ecb-mode-test #h"21212121212121212121212121212121" #h"2121212121212121" #h"0CA14583D18AB171") (:ecb-mode-test #h"22222222222222222222222222222222" #h"2222222222222222" #h"477937288AAF9675") (:ecb-mode-test #h"23232323232323232323232323232323" #h"2323232323232323" #h"76A74F7583D69A0C") (:ecb-mode-test #h"24242424242424242424242424242424" #h"2424242424242424" #h"70B595CFA9A980B9") (:ecb-mode-test #h"25252525252525252525252525252525" #h"2525252525252525" #h"F37385F13459A493") (:ecb-mode-test #h"26262626262626262626262626262626" #h"2626262626262626" #h"7B40D58EF301684D") (:ecb-mode-test #h"27272727272727272727272727272727" #h"2727272727272727" #h"96A76939ACB73852") (:ecb-mode-test #h"28282828282828282828282828282828" #h"2828282828282828" #h"50B32C8CEBC23CA1") (:ecb-mode-test #h"29292929292929292929292929292929" #h"2929292929292929" #h"A1C6E9A2DE77F7CD") (:ecb-mode-test #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"2A2A2A2A2A2A2A2A" #h"DFC4C0C964BD4036") (:ecb-mode-test #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"2B2B2B2B2B2B2B2B" #h"A5770E8164118196") (:ecb-mode-test #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"2C2C2C2C2C2C2C2C" #h"A9B788B267D8AB11") (:ecb-mode-test #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"2D2D2D2D2D2D2D2D" #h"724584114D6672BD") (:ecb-mode-test #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"2E2E2E2E2E2E2E2E" #h"64AFA5253F17447C") (:ecb-mode-test #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"2F2F2F2F2F2F2F2F" #h"897135635482481E") (:ecb-mode-test #h"30303030303030303030303030303030" #h"3030303030303030" #h"B277D70ECF936724") (:ecb-mode-test #h"31313131313131313131313131313131" #h"3131313131313131" #h"6532665C5FB56897") (:ecb-mode-test #h"32323232323232323232323232323232" #h"3232323232323232" #h"71C277B4C74822FE") (:ecb-mode-test #h"33333333333333333333333333333333" #h"3333333333333333" #h"FC2FF1B6718E8C53") (:ecb-mode-test #h"34343434343434343434343434343434" #h"3434343434343434" #h"56C37E81D03AB0F7") (:ecb-mode-test #h"35353535353535353535353535353535" #h"3535353535353535" #h"971C20F52BD6A744") (:ecb-mode-test #h"36363636363636363636363636363636" #h"3636363636363636" #h"CFC69AD99008E960") (:ecb-mode-test #h"37373737373737373737373737373737" #h"3737373737373737" #h"C33A247AF55968F8") (:ecb-mode-test #h"38383838383838383838383838383838" #h"3838383838383838" #h"D3B0D96C1C2F102C") (:ecb-mode-test #h"39393939393939393939393939393939" #h"3939393939393939" #h"267CD0F496DCF651") (:ecb-mode-test #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"3A3A3A3A3A3A3A3A" #h"758E9204026795C7") (:ecb-mode-test #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"3B3B3B3B3B3B3B3B" #h"44D4B0FF04168F60") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C" #h"8D1ECEAC286DD093") (:ecb-mode-test #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"3D3D3D3D3D3D3D3D" #h"91E5513B611B4B07") (:ecb-mode-test #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"3E3E3E3E3E3E3E3E" #h"6EC99E0444BF2B7D") (:ecb-mode-test #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"3F3F3F3F3F3F3F3F" #h"83387CF7E596A0BA") (:ecb-mode-test #h"40404040404040404040404040404040" #h"4040404040404040" #h"49004D5DD78E012F") (:ecb-mode-test #h"41414141414141414141414141414141" #h"4141414141414141" #h"566F76FD5220CE9C") (:ecb-mode-test #h"42424242424242424242424242424242" #h"4242424242424242" #h"82151FF806A10919") (:ecb-mode-test #h"43434343434343434343434343434343" #h"4343434343434343" #h"68A8B02F5037F69F") (:ecb-mode-test #h"44444444444444444444444444444444" #h"4444444444444444" #h"B8D1C1655983FB9B") (:ecb-mode-test #h"45454545454545454545454545454545" #h"4545454545454545" #h"F6D0C498C6D16BC1") (:ecb-mode-test #h"46464646464646464646464646464646" #h"4646464646464646" #h"C71AF1BB575B802A") (:ecb-mode-test #h"47474747474747474747474747474747" #h"4747474747474747" #h"7AFB71115556920B") (:ecb-mode-test #h"48484848484848484848484848484848" #h"4848484848484848" #h"53A25B037E59ACBA") (:ecb-mode-test #h"49494949494949494949494949494949" #h"4949494949494949" #h"7A7103C55DBCDED8") (:ecb-mode-test #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"4A4A4A4A4A4A4A4A" #h"148170D015C218BF") (:ecb-mode-test #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"4B4B4B4B4B4B4B4B" #h"CA979ECC5FDDBF97") (:ecb-mode-test #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"4C4C4C4C4C4C4C4C" #h"24C247AFDCCA7938") (:ecb-mode-test #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"4D4D4D4D4D4D4D4D" #h"7901FD84B4F78B5F") (:ecb-mode-test #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"4E4E4E4E4E4E4E4E" #h"644F08AA654AEAC9") (:ecb-mode-test #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"4F4F4F4F4F4F4F4F" #h"344E3F49BCFF9A0F") (:ecb-mode-test #h"50505050505050505050505050505050" #h"5050505050505050" #h"1A7DF18D492EF8CF") (:ecb-mode-test #h"51515151515151515151515151515151" #h"5151515151515151" #h"3196730672CD0C6F") (:ecb-mode-test #h"52525252525252525252525252525252" #h"5252525252525252" #h"B72C7E16EE0ACACD") (:ecb-mode-test #h"53535353535353535353535353535353" #h"5353535353535353" #h"C2BC8B2AB998E711") (:ecb-mode-test #h"54545454545454545454545454545454" #h"5454545454545454" #h"CB21583B0DF021DD") (:ecb-mode-test #h"55555555555555555555555555555555" #h"5555555555555555" #h"B8E59235A4F470D3") (:ecb-mode-test #h"56565656565656565656565656565656" #h"5656565656565656" #h"BEE1DB030C935717") (:ecb-mode-test #h"57575757575757575757575757575757" #h"5757575757575757" #h"831A7B5099D2100D") (:ecb-mode-test #h"58585858585858585858585858585858" #h"5858585858585858" #h"2A997246A99C4FF8") (:ecb-mode-test #h"59595959595959595959595959595959" #h"5959595959595959" #h"018ED090C80DF752") (:ecb-mode-test #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"5A5A5A5A5A5A5A5A" #h"F1FC03247755C943") (:ecb-mode-test #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"5B5B5B5B5B5B5B5B" #h"55A5A820B37660A3") (:ecb-mode-test #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"5C5C5C5C5C5C5C5C" #h"77D8C21A4077BD57") (:ecb-mode-test #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"5D5D5D5D5D5D5D5D" #h"5A474662F3017D8D") (:ecb-mode-test #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"5E5E5E5E5E5E5E5E" #h"E7FE00C77B9CB5C8") (:ecb-mode-test #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"5F5F5F5F5F5F5F5F" #h"C1F5A9F0E3667DFD") (:ecb-mode-test #h"60606060606060606060606060606060" #h"6060606060606060" #h"D070DAE6A4CC0FD6") (:ecb-mode-test #h"61616161616161616161616161616161" #h"6161616161616161" #h"2E5782307398F040") (:ecb-mode-test #h"62626262626262626262626262626262" #h"6262626262626262" #h"AC24CB79ACA263A9") (:ecb-mode-test #h"63636363636363636363636363636363" #h"6363636363636363" #h"F085D188ECFECF19") (:ecb-mode-test #h"64646464646464646464646464646464" #h"6464646464646464" #h"E8573E9FB5DB8067") (:ecb-mode-test #h"65656565656565656565656565656565" #h"6565656565656565" #h"6586F1C21F49F1C9") (:ecb-mode-test #h"66666666666666666666666666666666" #h"6666666666666666" #h"AA6ED1BD028A7018") (:ecb-mode-test #h"67676767676767676767676767676767" #h"6767676767676767" #h"5A0E065388DB0D92") (:ecb-mode-test #h"68686868686868686868686868686868" #h"6868686868686868" #h"2FF48C50E035D377") (:ecb-mode-test #h"69696969696969696969696969696969" #h"6969696969696969" #h"2839158F422633F7") (:ecb-mode-test #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"6A6A6A6A6A6A6A6A" #h"366261D9B681CD6E") (:ecb-mode-test #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"6B6B6B6B6B6B6B6B" #h"400676D499B835CC") (:ecb-mode-test #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"6C6C6C6C6C6C6C6C" #h"38C60E0610093C5F") (:ecb-mode-test #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"6D6D6D6D6D6D6D6D" #h"D944CCF4F1278308") (:ecb-mode-test #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"6E6E6E6E6E6E6E6E" #h"D27CA8021D0E8900") (:ecb-mode-test #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"6F6F6F6F6F6F6F6F" #h"2FCAA7CC8286C991") (:ecb-mode-test #h"70707070707070707070707070707070" #h"7070707070707070" #h"01A28A76FB00E262") (:ecb-mode-test #h"71717171717171717171717171717171" #h"7171717171717171" #h"A3079D2B4F7998A4") (:ecb-mode-test #h"72727272727272727272727272727272" #h"7272727272727272" #h"4473A4CDE2E07B09") (:ecb-mode-test #h"73737373737373737373737373737373" #h"7373737373737373" #h"11B1DFC2BC9014BE") (:ecb-mode-test #h"74747474747474747474747474747474" #h"7474747474747474" #h"E42BEAA2B5E0F0D2") (:ecb-mode-test #h"75757575757575757575757575757575" #h"7575757575757575" #h"5D3C8E4D35C2CBBB") (:ecb-mode-test #h"76767676767676767676767676767676" #h"7676767676767676" #h"AF4264E1D1C21572") (:ecb-mode-test #h"77777777777777777777777777777777" #h"7777777777777777" #h"A8C305EE61876059") (:ecb-mode-test #h"78787878787878787878787878787878" #h"7878787878787878" #h"58CCA4F7D38DB71B") (:ecb-mode-test #h"79797979797979797979797979797979" #h"7979797979797979" #h"D6489805A076BA05") (:ecb-mode-test #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"7A7A7A7A7A7A7A7A" #h"CB400FF4D35A21F0") (:ecb-mode-test #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"7B7B7B7B7B7B7B7B" #h"5835B7C049530FB8") (:ecb-mode-test #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"7C7C7C7C7C7C7C7C" #h"28151E5AB60D8965") (:ecb-mode-test #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"7D7D7D7D7D7D7D7D" #h"9ABF28D29C7564D1") (:ecb-mode-test #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"7E7E7E7E7E7E7E7E" #h"625CA434EA6015CC") (:ecb-mode-test #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"7F7F7F7F7F7F7F7F" #h"91706282A6F71145") (:ecb-mode-test #h"80808080808080808080808080808080" #h"8080808080808080" #h"9A34CA2680A8FB2C") (:ecb-mode-test #h"81818181818181818181818181818181" #h"8181818181818181" #h"68B056DE990155CB") (:ecb-mode-test #h"82828282828282828282828282828282" #h"8282828282828282" #h"B0CA60CC26647182") (:ecb-mode-test #h"83838383838383838383838383838383" #h"8383838383838383" #h"D28ED6F8CFE7B7F0") (:ecb-mode-test #h"84848484848484848484848484848484" #h"8484848484848484" #h"4529421C70FD6B40") (:ecb-mode-test #h"85858585858585858585858585858585" #h"8585858585858585" #h"BACEC7862A754336") (:ecb-mode-test #h"86868686868686868686868686868686" #h"8686868686868686" #h"4B59956ECB6987A5") (:ecb-mode-test #h"87878787878787878787878787878787" #h"8787878787878787" #h"68D7BA8FF1BD8F10") (:ecb-mode-test #h"88888888888888888888888888888888" #h"8888888888888888" #h"F64675D642402DE2") (:ecb-mode-test #h"89898989898989898989898989898989" #h"8989898989898989" #h"9DA213226DC02670") (:ecb-mode-test #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"8A8A8A8A8A8A8A8A" #h"F18915137DD586B0") (:ecb-mode-test #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"8B8B8B8B8B8B8B8B" #h"8D89FAE8CA1C018D") (:ecb-mode-test #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"8C8C8C8C8C8C8C8C" #h"CE46CE41ED57BA06") (:ecb-mode-test #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"8D8D8D8D8D8D8D8D" #h"0D163E7577A8855A") (:ecb-mode-test #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"8E8E8E8E8E8E8E8E" #h"8E6FD0B5CCCF18DD") (:ecb-mode-test #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"8F8F8F8F8F8F8F8F" #h"07E64F10F5BE3047") (:ecb-mode-test #h"90909090909090909090909090909090" #h"9090909090909090" #h"3D7BB8C9512FAE79") (:ecb-mode-test #h"91919191919191919191919191919191" #h"9191919191919191" #h"F7C11820587A8F92") (:ecb-mode-test #h"92929292929292929292929292929292" #h"9292929292929292" #h"04300AD157EB27D3") (:ecb-mode-test #h"93939393939393939393939393939393" #h"9393939393939393" #h"7EC0611CA1FE60E8") (:ecb-mode-test #h"94949494949494949494949494949494" #h"9494949494949494" #h"DF7D2FA625F9E973") (:ecb-mode-test #h"95959595959595959595959595959595" #h"9595959595959595" #h"BE6587884B6DEA49") (:ecb-mode-test #h"96969696969696969696969696969696" #h"9696969696969696" #h"EBC8A5C154810C45") (:ecb-mode-test #h"97979797979797979797979797979797" #h"9797979797979797" #h"1D4C585A7E117553") (:ecb-mode-test #h"98989898989898989898989898989898" #h"9898989898989898" #h"A5EBE4A940094C69") (:ecb-mode-test #h"99999999999999999999999999999999" #h"9999999999999999" #h"9137D6D560936157") (:ecb-mode-test #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"9A9A9A9A9A9A9A9A" #h"5309FBD4A8DF41AD") (:ecb-mode-test #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"9B9B9B9B9B9B9B9B" #h"719B0AA4E73F319B") (:ecb-mode-test #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"9C9C9C9C9C9C9C9C" #h"699969DAD1399A2C") (:ecb-mode-test #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"9D9D9D9D9D9D9D9D" #h"F7675963C1828C6A") (:ecb-mode-test #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"9E9E9E9E9E9E9E9E" #h"CAD25867B7B2CD79") (:ecb-mode-test #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"9F9F9F9F9F9F9F9F" #h"8D8BFC68D675488F") (:ecb-mode-test #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"A0A0A0A0A0A0A0A0" #h"EACB8CAE72FDFF76") (:ecb-mode-test #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"A1A1A1A1A1A1A1A1" #h"54B7696DC05D6134") (:ecb-mode-test #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"A2A2A2A2A2A2A2A2" #h"15680063D4936D20") (:ecb-mode-test #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"A3A3A3A3A3A3A3A3" #h"CFF5B49498BDB9D4") (:ecb-mode-test #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"A4A4A4A4A4A4A4A4" #h"D696AE19D1429342") (:ecb-mode-test #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"A5A5A5A5A5A5A5A5" #h"EB9FDE4C1DE509D7") (:ecb-mode-test #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"A6A6A6A6A6A6A6A6" #h"FDF7DD9BF59F15EF") (:ecb-mode-test #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"A7A7A7A7A7A7A7A7" #h"7F8220A8A24F9E7B") (:ecb-mode-test #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"A8A8A8A8A8A8A8A8" #h"7AD506F629C1B3A6") (:ecb-mode-test #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"A9A9A9A9A9A9A9A9" #h"DB966AFE3E83B861") (:ecb-mode-test #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"AAAAAAAAAAAAAAAA" #h"BAE9CF655D8204E3") (:ecb-mode-test #h"ABABABABABABABABABABABABABABABAB" #h"ABABABABABABABAB" #h"EBD329E2C0594A52") (:ecb-mode-test #h"ACACACACACACACACACACACACACACACAC" #h"ACACACACACACACAC" #h"0754CB1DC1B144C6") (:ecb-mode-test #h"ADADADADADADADADADADADADADADADAD" #h"ADADADADADADADAD" #h"93FD2776D5689CD0") (:ecb-mode-test #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"AEAEAEAEAEAEAEAE" #h"5C9372172C33454C") (:ecb-mode-test #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"AFAFAFAFAFAFAFAF" #h"D6E1275D786DE69E") (:ecb-mode-test #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"B0B0B0B0B0B0B0B0" #h"074A198C305252A4") (:ecb-mode-test #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"B1B1B1B1B1B1B1B1" #h"6E26D852C00BAEB3") (:ecb-mode-test #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"B2B2B2B2B2B2B2B2" #h"2B370850A5FCA500") (:ecb-mode-test #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"B3B3B3B3B3B3B3B3" #h"B49B04B30F4CB2D2") (:ecb-mode-test #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"B4B4B4B4B4B4B4B4" #h"9E3BC0BCD3CFF466") (:ecb-mode-test #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"B5B5B5B5B5B5B5B5" #h"0873A3528EE214CF") (:ecb-mode-test #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"B6B6B6B6B6B6B6B6" #h"BE2F44E09323C5E3") (:ecb-mode-test #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"B7B7B7B7B7B7B7B7" #h"A624BF7E0C7371BD") (:ecb-mode-test #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"B8B8B8B8B8B8B8B8" #h"254D70CDA6435D0A") (:ecb-mode-test #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"B9B9B9B9B9B9B9B9" #h"5D857F317FD0E124") (:ecb-mode-test #h"BABABABABABABABABABABABABABABABA" #h"BABABABABABABABA" #h"C5946AA4784B433D") (:ecb-mode-test #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"BBBBBBBBBBBBBBBB" #h"823FE76F1B092058") (:ecb-mode-test #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"BCBCBCBCBCBCBCBC" #h"23232BFC9605C1FE") (:ecb-mode-test #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"BDBDBDBDBDBDBDBD" #h"E3AD1301A24142AB") (:ecb-mode-test #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"BEBEBEBEBEBEBEBE" #h"A59551D740C21E24") (:ecb-mode-test #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"BFBFBFBFBFBFBFBF" #h"DD51AA54A8679D90") (:ecb-mode-test #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"C0C0C0C0C0C0C0C0" #h"78F45CC40CEC2E93") (:ecb-mode-test #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"C1C1C1C1C1C1C1C1" #h"3BB9D6E057F47FFE") (:ecb-mode-test #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"C2C2C2C2C2C2C2C2" #h"749CFABB7B5C5821") (:ecb-mode-test #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"C3C3C3C3C3C3C3C3" #h"1E5B1CFBBDB0C9F1") (:ecb-mode-test #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"C4C4C4C4C4C4C4C4" #h"C4CC0EFF546CE088") (:ecb-mode-test #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"C5C5C5C5C5C5C5C5" #h"08AFA212C14F3D95") (:ecb-mode-test #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"C6C6C6C6C6C6C6C6" #h"ED54E38986A9C3E0") (:ecb-mode-test #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"C7C7C7C7C7C7C7C7" #h"C06A363FF909D39D") (:ecb-mode-test #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"C8C8C8C8C8C8C8C8" #h"4C04E1629985AFC5") (:ecb-mode-test #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"C9C9C9C9C9C9C9C9" #h"54D5B758C2A707C0") (:ecb-mode-test #h"CACACACACACACACACACACACACACACACA" #h"CACACACACACACACA" #h"FE720A0F9D1C8907") (:ecb-mode-test #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"CBCBCBCBCBCBCBCB" #h"C249D87F3A37A7A6") (:ecb-mode-test #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"CCCCCCCCCCCCCCCC" #h"12ABA9F0AB7DEE1B") (:ecb-mode-test #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"CDCDCDCDCDCDCDCD" #h"CB72B2F230BB5D2B") (:ecb-mode-test #h"CECECECECECECECECECECECECECECECE" #h"CECECECECECECECE" #h"91C8C06C731F769D") (:ecb-mode-test #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"CFCFCFCFCFCFCFCF" #h"CC6FF2B07ACB2400") (:ecb-mode-test #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"D0D0D0D0D0D0D0D0" #h"1CBAE883F374E148") (:ecb-mode-test #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"D1D1D1D1D1D1D1D1" #h"A8509A3504B1281E") (:ecb-mode-test #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"D2D2D2D2D2D2D2D2" #h"180BB7DC814A98F4") (:ecb-mode-test #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"D3D3D3D3D3D3D3D3" #h"82E6AF824A322810") (:ecb-mode-test #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"D4D4D4D4D4D4D4D4" #h"0C497C678BAC9073") (:ecb-mode-test #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"D5D5D5D5D5D5D5D5" #h"4C87E0FD73F6491D") (:ecb-mode-test #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"D6D6D6D6D6D6D6D6" #h"09DA33A688837896") (:ecb-mode-test #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"D7D7D7D7D7D7D7D7" #h"8C3863C0610344B9") (:ecb-mode-test #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"D8D8D8D8D8D8D8D8" #h"245D7C4FA2F2E43C") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9" #h"AC13E8AE410F323D") (:ecb-mode-test #h"DADADADADADADADADADADADADADADADA" #h"DADADADADADADADA" #h"C4E21F4CBCAD4413") (:ecb-mode-test #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"DBDBDBDBDBDBDBDB" #h"6AA1E55C36A2682A") (:ecb-mode-test #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"DCDCDCDCDCDCDCDC" #h"D832821D2906B4B3") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDD" #h"77437FA1C20F2026") (:ecb-mode-test #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"DEDEDEDEDEDEDEDE" #h"14DCF1D4FA1AC050") (:ecb-mode-test #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"DFDFDFDFDFDFDFDF" #h"9D4B0AA902D8C991") (:ecb-mode-test #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"E0E0E0E0E0E0E0E0" #h"A9220173BC5C90D3") (:ecb-mode-test #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"E1E1E1E1E1E1E1E1" #h"5A1B0B1B626C6013") (:ecb-mode-test #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"E2E2E2E2E2E2E2E2" #h"01379BEAE1A99B8F") (:ecb-mode-test #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"E3E3E3E3E3E3E3E3" #h"3B315FB8C3790AE5") (:ecb-mode-test #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"E4E4E4E4E4E4E4E4" #h"6FB6F6D1C58FEE17") (:ecb-mode-test #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"E5E5E5E5E5E5E5E5" #h"19CB239FA7FB4F9A") (:ecb-mode-test #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"E6E6E6E6E6E6E6E6" #h"3B7A6FE621C955B9") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7" #h"186F0FF49C9A477F") (:ecb-mode-test #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"E8E8E8E8E8E8E8E8" #h"14D8B03ADA6D657A") (:ecb-mode-test #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"E9E9E9E9E9E9E9E9" #h"0BC734E3FA645E9F") (:ecb-mode-test #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"EAEAEAEAEAEAEAEA" #h"803029F702C64ACE") (:ecb-mode-test #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"EBEBEBEBEBEBEBEB" #h"FBAB9F8696D6BA77") (:ecb-mode-test #h"ECECECECECECECECECECECECECECECEC" #h"ECECECECECECECEC" #h"7BB9B6707793A276") (:ecb-mode-test #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"EDEDEDEDEDEDEDED" #h"D1C79B8A49FB6DBC") (:ecb-mode-test #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"EEEEEEEEEEEEEEEE" #h"2B1564BDEACB7B52") (:ecb-mode-test #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"EFEFEFEFEFEFEFEF" #h"987031C9C36DB4FC") (:ecb-mode-test #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"F0F0F0F0F0F0F0F0" #h"34C51D8E465C37B3") (:ecb-mode-test #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"F1F1F1F1F1F1F1F1" #h"8BF64B6997C66DB5") (:ecb-mode-test #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"F2F2F2F2F2F2F2F2" #h"AE2F6E701775A4F9") (:ecb-mode-test #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"F3F3F3F3F3F3F3F3" #h"26E2F58E94216BE8") (:ecb-mode-test #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"F4F4F4F4F4F4F4F4" #h"095BE185ED2220CE") (:ecb-mode-test #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"F5F5F5F5F5F5F5F5" #h"E0D3DB2A70584C12") (:ecb-mode-test #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"F6F6F6F6F6F6F6F6" #h"EEE3687E33787521") (:ecb-mode-test #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"F7F7F7F7F7F7F7F7" #h"D0977FD8EDB1CD7A") (:ecb-mode-test #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"F8F8F8F8F8F8F8F8" #h"D6FDC0D5EAF80022") (:ecb-mode-test #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"F9F9F9F9F9F9F9F9" #h"57BA725738661825") (:ecb-mode-test #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"FAFAFAFAFAFAFAFA" #h"76124554EBE44389") (:ecb-mode-test #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"FBFBFBFBFBFBFBFB" #h"6D62A38F77BC4B87") (:ecb-mode-test #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"FCFCFCFCFCFCFCFC" #h"A63A2B299E16E3F0") (:ecb-mode-test #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"FDFDFDFDFDFDFDFD" #h"BBBC7CC82DE3D48A") (:ecb-mode-test #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"FEFEFEFEFEFEFEFE" #h"5A94182F3EA5DFDA") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFF" #h"778769E9BE0167B7") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F" #h"0011223344556677" #h"2DDC149BCF088B9E") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF48" #h"EA024714AD5C4D84" #h"11E43B86D231EA64") (:keystream-test #h"2cccb857c267320237282615f4b9b7b58d3774110731c3c555d74a3f6de974c194634a8ec42b2e48c9e09dd09ecf5a22535bfeecd524cb04fd38182e739209d901d60375eab2eced4e6e86b1c5c1dfefa663c2b7cbc6bdd3e980c03d7ce525650003883f6662d29411e0e0aa30ae0d6041b73b021000aef3359f06d4d8f11fa5acefa42aa9b725855d5e0ec6d32a2f86662607a17965627981b8b963838998e5dbc6bb21a5773f5c8b85adb77eb8fdf82d8bd433ed768065bfe48f9d330cc2db7c289271edd0aadc881ee0c6216e1702210ae447318fe41dae23e1dc9c54da706e7ea58498c9c08a55fc9c4d63ef405b9a3af11c28369620d04835bce70b97" #h"6d36ffd6b7f8bd50" #h"bde6148b9c36c5c5754a408fae1763a1e3c0ad80b7cf3d3e9c557df1a8fd22eee5c1cdd97f44413f54ef39357398e8ca2b6879fa2f0756ba6513ffe93db0f761a4a7d16af8a2cc6d38b7b2896431e128c11ceb072cf47326e79edbd330837a793dc86fd6b5454830739346af360bc23a4be5ccaede28297ec256b844d6a778fb8ee4733c547f3e3bed48ffccb4928c2253153a3faebabb030556b9719180f1ea1392154e67c5149e27cf5d0826af49b4572785c945c6fd5ea508638fe7d7400286c9744dcac515442f3b5f601182578a0df246fd08883586bf3456e3ff2735608dba2aea5578b2cdc3e9a74e9696cad14cc4cd2640b6cc465c25e205e1ceec6d009f67e67e9021f35f0303608b5e2fb8107e1904eefe11f348a631286b4053bc13d3832c1db7cfe1cb75623e95310da3f54db518db07fa1d1a3689097b9c7f5d77f66f80751d4665c38c8e475b82a3c1770fa9f054e4ac929c18301f0763bb4e66622a86b7e0c38c826f32797ead0d40d7c7d90e087dd47cfd164e60e750e8edefead0d86cd0990de78880d2dd5c2cf4c838082b9444d6f19ea8746d2e2bd3c02cd4f5de4f27b291684c9f25b20a9266af1b349cdff75d5fcc365497fe4bf4284ab57a9952c7c363b94be5ecfb158d33248a12de6f02f81b2e3f35a74eff568a64e074e7b1146dafffa39cfb6f3d26cdade73d40f4dd0176b468c9582921d6cfbeea3fcddd4de9dd51ae9246c1941c8a3ad03bcf1291da38d90a6e69a7c38d71680ca55f0e0f0848d9ebf3147234064d3535b57b9a76b9264463b8e2601c93148bb2e1a80c39cc77f2950bf223abf7ad65f8d644246c7fdd630d6020bb1bdccf56bd46fa9ed4dc9247c8e99d31ab9154238ab02e26732fb42d511e0eb3e08cd33db45c164000f89eb239b8a772deb876d7f99c5654642c7e6a8c0b614ca8eebcbab6d88517312bb73b72342a264bd3e1521ef4891382daf3efb72400d0e47ba210f893cfb2ebf90c56f8f68e52207512f52153a61c5e22790053d5ba0ec7e89c8b7440fcbd75d6bd44f85518d4e7b1563b501a36c4d2bb140085d3b7cc9108ae4b179e4372c29e3f63db4d2059221dac445fc0ce2b83c1050aba759ff67889070ad81223e7cf4d83dc13d2ab744c09202651376daccd5e3e40928d17dd793584188bcb359ca93bf24a20c6a957e6e634cd7b7449331fd15eacdd705521a14d8f6dea9d95e6f7df8958cd4b7138c080c008bb4c5880e41932938130905a30fd123c08ea45bb6f82bf5a8a1a22f8a4743d7313d1c1749daa53d7cc3aab9d943e76fec19eff18f5b8c901782c576f322884a257af7488217972fe30852fecaf728d4547e4654206cc4aa35b0d30f44b25209c7d6b7ccf13851411b32a5788ad30f1fceff76473d34fdb") ironclad-0.57/testing/test-vectors/rc6.testvec000066400000000000000000007611361420372057600214740ustar00rootroot00000000000000;;; test vectors for 128-bit keys from NESSIE (http://www.cryptonessie.org/) (:ecb-mode-test #h"80000000000000000000000000000000" #h"00000000000000000000000000000000" #h"1AD578A02A08162850A15A1552A17AD4") (:ecb-mode-test #h"40000000000000000000000000000000" #h"00000000000000000000000000000000" #h"912E9CF1473035A8443A82495C0730D3") (:ecb-mode-test #h"20000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3D3E851A80ABAF221761931747473048") (:ecb-mode-test #h"10000000000000000000000000000000" #h"00000000000000000000000000000000" #h"96CFC0510819EEB7FCDF2CC7BEABEF77") (:ecb-mode-test #h"08000000000000000000000000000000" #h"00000000000000000000000000000000" #h"FB787268EC3C583A3685973B861AEF8D") (:ecb-mode-test #h"04000000000000000000000000000000" #h"00000000000000000000000000000000" #h"2AE927525C73250D954B619EDAC718BE") (:ecb-mode-test #h"02000000000000000000000000000000" #h"00000000000000000000000000000000" #h"00298D1DB6C6DA02E28E49C63B4A5795") (:ecb-mode-test #h"01000000000000000000000000000000" #h"00000000000000000000000000000000" #h"7E32F418910C9AC8701292B5F96346F3") (:ecb-mode-test #h"00800000000000000000000000000000" #h"00000000000000000000000000000000" #h"9FC6C21A562A049AD320EAA0D43C1998") (:ecb-mode-test #h"00400000000000000000000000000000" #h"00000000000000000000000000000000" #h"7A0BD66C361D641DFD313CBE23F69A57") (:ecb-mode-test #h"00200000000000000000000000000000" #h"00000000000000000000000000000000" #h"C2E2CAD226964597A98C388B27127EA1") (:ecb-mode-test #h"00100000000000000000000000000000" #h"00000000000000000000000000000000" #h"B7F4837AC6F1F808D8EBBF1D08077FB4") (:ecb-mode-test #h"00080000000000000000000000000000" #h"00000000000000000000000000000000" #h"0495E1AEDA7A9EC9ACBF38FE41CB08FA") (:ecb-mode-test #h"00040000000000000000000000000000" #h"00000000000000000000000000000000" #h"E001020E1D0C05BE072695F3F48F07B2") (:ecb-mode-test #h"00020000000000000000000000000000" #h"00000000000000000000000000000000" #h"608CE7A12C9EEC348FF674FB9F8D1972") (:ecb-mode-test #h"00010000000000000000000000000000" #h"00000000000000000000000000000000" #h"916BEC60955C1A3540B4C245F4D3B94B") (:ecb-mode-test #h"00008000000000000000000000000000" #h"00000000000000000000000000000000" #h"B2B91EC4EFE12CD4EDDA71ED52B278B1") (:ecb-mode-test #h"00004000000000000000000000000000" #h"00000000000000000000000000000000" #h"0CA46CF5275313AB3D9494A5BB7D786A") (:ecb-mode-test #h"00002000000000000000000000000000" #h"00000000000000000000000000000000" #h"E679B7C6F661AE52BA5199EC24D4E542") (:ecb-mode-test #h"00001000000000000000000000000000" #h"00000000000000000000000000000000" #h"043FAB3A991B3FEC872AC747640731CB") (:ecb-mode-test #h"00000800000000000000000000000000" #h"00000000000000000000000000000000" #h"EF8C38151A67B9A51E0935BBA14D9E22") (:ecb-mode-test #h"00000400000000000000000000000000" #h"00000000000000000000000000000000" #h"2D4515423CFCF372B5632C2879A71267") (:ecb-mode-test #h"00000200000000000000000000000000" #h"00000000000000000000000000000000" #h"2420A9327B9D2426C19F755BC3D8BD88") (:ecb-mode-test #h"00000100000000000000000000000000" #h"00000000000000000000000000000000" #h"2151D88643EE81D8D23B44D22E2B0D65") (:ecb-mode-test #h"00000080000000000000000000000000" #h"00000000000000000000000000000000" #h"AEFA6F32E963CB2D4D89E673B503DDAC") (:ecb-mode-test #h"00000040000000000000000000000000" #h"00000000000000000000000000000000" #h"43DBE4D6B1BA3F05F16D73B2F80A12DF") (:ecb-mode-test #h"00000020000000000000000000000000" #h"00000000000000000000000000000000" #h"ED8C9B25558CAD4EF9469364BE97CA30") (:ecb-mode-test #h"00000010000000000000000000000000" #h"00000000000000000000000000000000" #h"BDE5B1DC5053F94670599CBE6845604B") (:ecb-mode-test #h"00000008000000000000000000000000" #h"00000000000000000000000000000000" #h"4529434499884BE7C4E6D009F3D5353E") (:ecb-mode-test #h"00000004000000000000000000000000" #h"00000000000000000000000000000000" #h"B3D4C642173189B9295912E860CF6880") (:ecb-mode-test #h"00000002000000000000000000000000" #h"00000000000000000000000000000000" #h"651F1B1629535AD03D5C296D560FDE1F") (:ecb-mode-test #h"00000001000000000000000000000000" #h"00000000000000000000000000000000" #h"8A380594D7396453771A1DFBE2914C8E") (:ecb-mode-test #h"00000000800000000000000000000000" #h"00000000000000000000000000000000" #h"395FE0214AC536428C86737514B6237F") (:ecb-mode-test #h"00000000400000000000000000000000" #h"00000000000000000000000000000000" #h"ACEFAC47A7AB6E635EA9F85EF74DEFF3") (:ecb-mode-test #h"00000000200000000000000000000000" #h"00000000000000000000000000000000" #h"8C208E26E96D9DFA248010D8C1CFDB3B") (:ecb-mode-test #h"00000000100000000000000000000000" #h"00000000000000000000000000000000" #h"D3AE8AE99B3A84C3721EAA57C8EB17B1") (:ecb-mode-test #h"00000000080000000000000000000000" #h"00000000000000000000000000000000" #h"40D8DA37A8A6591A203F2A38AB05A08D") (:ecb-mode-test #h"00000000040000000000000000000000" #h"00000000000000000000000000000000" #h"F0580D0B864E8C03638A33499B36C9A5") (:ecb-mode-test #h"00000000020000000000000000000000" #h"00000000000000000000000000000000" #h"10F19634C2D1006B0C208AA303065B0F") (:ecb-mode-test #h"00000000010000000000000000000000" #h"00000000000000000000000000000000" #h"7D43298935D0AF6DB498542752666C99") (:ecb-mode-test #h"00000000008000000000000000000000" #h"00000000000000000000000000000000" #h"456AD1F19D18900B4F85EB64E06DF643") (:ecb-mode-test #h"00000000004000000000000000000000" #h"00000000000000000000000000000000" #h"08C83A53955102F6E60C2CB0F6C02443") (:ecb-mode-test #h"00000000002000000000000000000000" #h"00000000000000000000000000000000" #h"351C1035006BC7475DF60694859BB491") (:ecb-mode-test #h"00000000001000000000000000000000" #h"00000000000000000000000000000000" #h"BB47464DFF62381AD4A93684D00A817F") (:ecb-mode-test #h"00000000000800000000000000000000" #h"00000000000000000000000000000000" #h"514AC91B28081BD0E0CAE22D766257DF") (:ecb-mode-test #h"00000000000400000000000000000000" #h"00000000000000000000000000000000" #h"7758C19B083A62E6F2CAAD2B4C3DF4DC") (:ecb-mode-test #h"00000000000200000000000000000000" #h"00000000000000000000000000000000" #h"46B352EAC71542E417619E0360221673") (:ecb-mode-test #h"00000000000100000000000000000000" #h"00000000000000000000000000000000" #h"648D51C6F9522FE38108BBFD34015F22") (:ecb-mode-test #h"00000000000080000000000000000000" #h"00000000000000000000000000000000" #h"DCD800CC104B9C098AB4B931C7538F00") (:ecb-mode-test #h"00000000000040000000000000000000" #h"00000000000000000000000000000000" #h"E40601C1632937FA769C58BE63DEB056") (:ecb-mode-test #h"00000000000020000000000000000000" #h"00000000000000000000000000000000" #h"BC968175089F3864C81124A55AA445EC") (:ecb-mode-test #h"00000000000010000000000000000000" #h"00000000000000000000000000000000" #h"05479ACFA5A7C6BC89FE432D8D25A366") (:ecb-mode-test #h"00000000000008000000000000000000" #h"00000000000000000000000000000000" #h"8DDF91E221B4C2043C079F5F0ED63EA7") (:ecb-mode-test #h"00000000000004000000000000000000" #h"00000000000000000000000000000000" #h"66C47E3E339FFD404A61547E54ED0F7F") (:ecb-mode-test #h"00000000000002000000000000000000" #h"00000000000000000000000000000000" #h"3D622A36A3375D2EFFF3B49363F25755") (:ecb-mode-test #h"00000000000001000000000000000000" #h"00000000000000000000000000000000" #h"C2E42DDC662F226D09908E2CFDD03D32") (:ecb-mode-test #h"00000000000000800000000000000000" #h"00000000000000000000000000000000" #h"3221BC8032E72E0DE7580480A99DFD7D") (:ecb-mode-test #h"00000000000000400000000000000000" #h"00000000000000000000000000000000" #h"C65A142D036E99D1A4DA370D964A8A44") (:ecb-mode-test #h"00000000000000200000000000000000" #h"00000000000000000000000000000000" #h"E9C03F4840645726563582AA30464D1E") (:ecb-mode-test #h"00000000000000100000000000000000" #h"00000000000000000000000000000000" #h"93C2F8237D526E910F007FA0CF0608A8") (:ecb-mode-test #h"00000000000000080000000000000000" #h"00000000000000000000000000000000" #h"6F3A45184B87581E98B7B0D873F8B315") (:ecb-mode-test #h"00000000000000040000000000000000" #h"00000000000000000000000000000000" #h"D3569BAB0FDD360451E113895B39D0E2") (:ecb-mode-test #h"00000000000000020000000000000000" #h"00000000000000000000000000000000" #h"4002FF10DDB6FCB6669AE3FED696B2EC") (:ecb-mode-test #h"00000000000000010000000000000000" #h"00000000000000000000000000000000" #h"B265C44F675800A3B498FFA91C440654") (:ecb-mode-test #h"00000000000000008000000000000000" #h"00000000000000000000000000000000" #h"092E77F2537EE742D627EA8628E473E9") (:ecb-mode-test #h"00000000000000004000000000000000" #h"00000000000000000000000000000000" #h"441859995F05E1C06D118CFFB389C9CE") (:ecb-mode-test #h"00000000000000002000000000000000" #h"00000000000000000000000000000000" #h"844480BB205810808DC1F87C2B5281E9") (:ecb-mode-test #h"00000000000000001000000000000000" #h"00000000000000000000000000000000" #h"4B2E7C3B31CFC0CA5B51EA589DFFC9AC") (:ecb-mode-test #h"00000000000000000800000000000000" #h"00000000000000000000000000000000" #h"D55D552EA89C267FF3B0AF688CF00D78") (:ecb-mode-test #h"00000000000000000400000000000000" #h"00000000000000000000000000000000" #h"6AD19E9DD39381C8A02F3CC6F60C8048") (:ecb-mode-test #h"00000000000000000200000000000000" #h"00000000000000000000000000000000" #h"271ED37DB771414743EB781B2B315841") (:ecb-mode-test #h"00000000000000000100000000000000" #h"00000000000000000000000000000000" #h"ED0A833C87FE6CDC56E021BCD3099508") (:ecb-mode-test #h"00000000000000000080000000000000" #h"00000000000000000000000000000000" #h"6DBE8FEEB66CF747FFEC4E6D3D2D6BB0") (:ecb-mode-test #h"00000000000000000040000000000000" #h"00000000000000000000000000000000" #h"79460469EFEA89FA576B526B17709D4E") (:ecb-mode-test #h"00000000000000000020000000000000" #h"00000000000000000000000000000000" #h"5C3C35EC3D15CFAE719221549293A6AC") (:ecb-mode-test #h"00000000000000000010000000000000" #h"00000000000000000000000000000000" #h"607106E18F8C8A6E725AF44A491D891A") (:ecb-mode-test #h"00000000000000000008000000000000" #h"00000000000000000000000000000000" #h"1C22A5627309A238E2CE5A39BE370243") (:ecb-mode-test #h"00000000000000000004000000000000" #h"00000000000000000000000000000000" #h"FB6D4F017D84E9B74C2A59204A2EA0D6") (:ecb-mode-test #h"00000000000000000002000000000000" #h"00000000000000000000000000000000" #h"B66A30712DB3BD6B580678BDA72CC5B5") (:ecb-mode-test #h"00000000000000000001000000000000" #h"00000000000000000000000000000000" #h"59C93B2A53BE699840E29D78ACF05DE0") (:ecb-mode-test #h"00000000000000000000800000000000" #h"00000000000000000000000000000000" #h"AD37DFE5DCBB5A50228537BF24ED0159") (:ecb-mode-test #h"00000000000000000000400000000000" #h"00000000000000000000000000000000" #h"C9FAB85DCB8DA12A7C9416B267F21486") (:ecb-mode-test #h"00000000000000000000200000000000" #h"00000000000000000000000000000000" #h"EC797A0F6EBED4C257BC7FC1D7BD0100") (:ecb-mode-test #h"00000000000000000000100000000000" #h"00000000000000000000000000000000" #h"629D633D7A7C345A3A3CF66565E298E1") (:ecb-mode-test #h"00000000000000000000080000000000" #h"00000000000000000000000000000000" #h"859D400CC95F29E7131561F4D7E4DD12") (:ecb-mode-test #h"00000000000000000000040000000000" #h"00000000000000000000000000000000" #h"932CFF2E8A828C61BA537E186F559E93") (:ecb-mode-test #h"00000000000000000000020000000000" #h"00000000000000000000000000000000" #h"62FA5692938CB84279C7E399BA10E08D") (:ecb-mode-test #h"00000000000000000000010000000000" #h"00000000000000000000000000000000" #h"50321207B2A375B12F4630F3F1909B08") (:ecb-mode-test #h"00000000000000000000008000000000" #h"00000000000000000000000000000000" #h"63978A72D0ACAF85676EAA2D1EE01F3C") (:ecb-mode-test #h"00000000000000000000004000000000" #h"00000000000000000000000000000000" #h"20721CCA68AE0451687D82534A360173") (:ecb-mode-test #h"00000000000000000000002000000000" #h"00000000000000000000000000000000" #h"9223A844EAB1CA5D3A43EBC4C5CF01C8") (:ecb-mode-test #h"00000000000000000000001000000000" #h"00000000000000000000000000000000" #h"70E162CC61AC398CF4D9DBE62FD653CE") (:ecb-mode-test #h"00000000000000000000000800000000" #h"00000000000000000000000000000000" #h"082CED7A4969FD3C8131BF9AE57754DB") (:ecb-mode-test #h"00000000000000000000000400000000" #h"00000000000000000000000000000000" #h"169070D4658D94C12041D14EC60A2B0A") (:ecb-mode-test #h"00000000000000000000000200000000" #h"00000000000000000000000000000000" #h"960E45070B5BA767F1A3117851ECF9DA") (:ecb-mode-test #h"00000000000000000000000100000000" #h"00000000000000000000000000000000" #h"4AAAA999C2421953E3607CA202D4C1DE") (:ecb-mode-test #h"00000000000000000000000080000000" #h"00000000000000000000000000000000" #h"E4B97E5B2BA83D2038B5D08EB792F92F") (:ecb-mode-test #h"00000000000000000000000040000000" #h"00000000000000000000000000000000" #h"ECBC7F9C422FC676152CC7E40391D730") (:ecb-mode-test #h"00000000000000000000000020000000" #h"00000000000000000000000000000000" #h"55EBABC43A33305FB82B39A88A737FFF") (:ecb-mode-test #h"00000000000000000000000010000000" #h"00000000000000000000000000000000" #h"C1BDA064749B2B7A9E9378137462F800") (:ecb-mode-test #h"00000000000000000000000008000000" #h"00000000000000000000000000000000" #h"BDDD0163E4CEAC2C614ABDA9EBE15F3D") (:ecb-mode-test #h"00000000000000000000000004000000" #h"00000000000000000000000000000000" #h"B767CF0E6717B409743AE41C56A2054D") (:ecb-mode-test #h"00000000000000000000000002000000" #h"00000000000000000000000000000000" #h"AD897CFAED8FBBD9A3006F7EB2A7C601") (:ecb-mode-test #h"00000000000000000000000001000000" #h"00000000000000000000000000000000" #h"2929929D821D010A1A30E9CF4415F809") (:ecb-mode-test #h"00000000000000000000000000800000" #h"00000000000000000000000000000000" #h"0C861D39741060051855648B385708B5") (:ecb-mode-test #h"00000000000000000000000000400000" #h"00000000000000000000000000000000" #h"4BA018EA1AFF5C0A9CF368592B08FD34") (:ecb-mode-test #h"00000000000000000000000000200000" #h"00000000000000000000000000000000" #h"4377CD44B655A0ABC40E5B9D3A480EC6") (:ecb-mode-test #h"00000000000000000000000000100000" #h"00000000000000000000000000000000" #h"2F604E94C9CD1DCB730AB0AF407FEDBD") (:ecb-mode-test #h"00000000000000000000000000080000" #h"00000000000000000000000000000000" #h"44A3514094941B7E497BCFE0D746BA48") (:ecb-mode-test #h"00000000000000000000000000040000" #h"00000000000000000000000000000000" #h"1235A968A7D12BA7042E7E63A897DBED") (:ecb-mode-test #h"00000000000000000000000000020000" #h"00000000000000000000000000000000" #h"0BA061C7AD274E004B2E06D3D5FC784D") (:ecb-mode-test #h"00000000000000000000000000010000" #h"00000000000000000000000000000000" #h"E0DB8CE28D1C2F6B692B230A7AB0CB44") (:ecb-mode-test #h"00000000000000000000000000008000" #h"00000000000000000000000000000000" #h"ED4BBD535080655AF3F4D71709B1B8D5") (:ecb-mode-test #h"00000000000000000000000000004000" #h"00000000000000000000000000000000" #h"92D183FBE0BD07A0884EBD1963A193BE") (:ecb-mode-test #h"00000000000000000000000000002000" #h"00000000000000000000000000000000" #h"995BB9E75386C99DA3038C3C6340C838") (:ecb-mode-test #h"00000000000000000000000000001000" #h"00000000000000000000000000000000" #h"4914DA6C7A8E1AB8297A9D280DE576F9") (:ecb-mode-test #h"00000000000000000000000000000800" #h"00000000000000000000000000000000" #h"6415185D85078CE80F46C6E09EDB8B78") (:ecb-mode-test #h"00000000000000000000000000000400" #h"00000000000000000000000000000000" #h"8B2908466F8BD3C1C3A4A5EAFCC0FF92") (:ecb-mode-test #h"00000000000000000000000000000200" #h"00000000000000000000000000000000" #h"425BF2FCF5DD8B0013773F9A0DC09B0D") (:ecb-mode-test #h"00000000000000000000000000000100" #h"00000000000000000000000000000000" #h"9AC35220BE56E453B73CD887B299D06E") (:ecb-mode-test #h"00000000000000000000000000000080" #h"00000000000000000000000000000000" #h"41900EF8223D019F1BC3E8EA68FC763C") (:ecb-mode-test #h"00000000000000000000000000000040" #h"00000000000000000000000000000000" #h"9D294A574144109A9C6DE8E90EE517B6") (:ecb-mode-test #h"00000000000000000000000000000020" #h"00000000000000000000000000000000" #h"4146D6BB7AE455D93EAF43753C7AE693") (:ecb-mode-test #h"00000000000000000000000000000010" #h"00000000000000000000000000000000" #h"4155B7D12FD12F96FD39C576FDD41422") (:ecb-mode-test #h"00000000000000000000000000000008" #h"00000000000000000000000000000000" #h"1AF1E634B06211668CE2410D5EDCA968") (:ecb-mode-test #h"00000000000000000000000000000004" #h"00000000000000000000000000000000" #h"815739510622BFE08EEE06B772368524") (:ecb-mode-test #h"00000000000000000000000000000002" #h"00000000000000000000000000000000" #h"E2F7D8411181A21B02C1466E750056C2") (:ecb-mode-test #h"00000000000000000000000000000001" #h"00000000000000000000000000000000" #h"13095792D8B1D771378839C912CA3C41") (:ecb-mode-test #h"00000000000000000000000000000000" #h"80000000000000000000000000000000" #h"F71F65E7B80C0C6966FEE607984B5CDF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"40000000000000000000000000000000" #h"8CF4A482491CD207289D810C2BB29930") (:ecb-mode-test #h"00000000000000000000000000000000" #h"20000000000000000000000000000000" #h"80EF45D42327E3AED39CD45C4E3E6197") (:ecb-mode-test #h"00000000000000000000000000000000" #h"10000000000000000000000000000000" #h"F28D8DF12AC0837A0919254980B674F9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"08000000000000000000000000000000" #h"9FB984DCBA5B0BDFFCFD97B02B648800") (:ecb-mode-test #h"00000000000000000000000000000000" #h"04000000000000000000000000000000" #h"46F7091CD30CCCF570AFC116F8446492") (:ecb-mode-test #h"00000000000000000000000000000000" #h"02000000000000000000000000000000" #h"77B517AA59EC7D3381188936BDEACCBD") (:ecb-mode-test #h"00000000000000000000000000000000" #h"01000000000000000000000000000000" #h"40D5D97CFFDC390AC35C2734F44CF9FF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00800000000000000000000000000000" #h"B5A6B7C92EFCB55D349B63066AC1E009") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00400000000000000000000000000000" #h"152F0F5EA10FAFD0E63494C5FBDCC469") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00200000000000000000000000000000" #h"61F669BF2B32CD27CF6278392C988510") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00100000000000000000000000000000" #h"53A63CEE35DF00C73577B9255F55C855") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00080000000000000000000000000000" #h"6E46B92E23344321A19321DF136CE9C5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00040000000000000000000000000000" #h"22F1261FAB993350F6ED41DA5D69B9B8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00020000000000000000000000000000" #h"0901BC0A1DB5CC87CDA91EF5F5FF46BC") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00010000000000000000000000000000" #h"2EE65B377C16BE9517BA12F63189DE64") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00008000000000000000000000000000" #h"74BD6FAA83668952E2D546A66B7A8243") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00004000000000000000000000000000" #h"08FB4817F040B54E995B722C483C399E") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00002000000000000000000000000000" #h"5630614200E248D1644B58E3694D8BA6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00001000000000000000000000000000" #h"659A3A27C9F3B0BBC65FC4C15D19051E") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000800000000000000000000000000" #h"FF3B39DCB459EE4FFAFCAC8C7331A6BE") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000400000000000000000000000000" #h"19F0727A66BD056DCB5541EDE14B4662") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000200000000000000000000000000" #h"D0DE4B5B30A294C8A3838B70387C93B6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000100000000000000000000000000" #h"37BDB0A854686484E5EB52239D6C16C4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000080000000000000000000000000" #h"3CC7113F6E6833C9BFB4EE07371488A5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000040000000000000000000000000" #h"A56737C45AC4DBF2417243C2E3B40133") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000020000000000000000000000000" #h"B0A5C817B1E2C307A4BBF8258DF5F41B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000010000000000000000000000000" #h"F2112329EFA070476BD515679C887FC6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000008000000000000000000000000" #h"1AD2023CEC89B9436D03CCB9893C21C2") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000004000000000000000000000000" #h"6BA3E774FCDD02379C6CF2F7BF28B914") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000002000000000000000000000000" #h"A2F8638B0A4014F0641A3CB8A13B5ED9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000001000000000000000000000000" #h"877FEDF7CACCBF0BD7BB5BB236BA96D5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000800000000000000000000000" #h"C9298A9A01C1F276E2E1E04226BF3D5C") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000400000000000000000000000" #h"4E01DB16789DE364085416DE25871A59") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000200000000000000000000000" #h"FD3B5DA07D0054DD10FFB79440AB3A00") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000100000000000000000000000" #h"A2508E8BD26E2FB9944C27F04D60FAA0") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000080000000000000000000000" #h"E9A43055D71335545A6A514F08B868BB") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000040000000000000000000000" #h"587D5B71730D0B59BFBC0A93675B32F3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000020000000000000000000000" #h"90076413F890E8FFF04F1031C779C91F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000010000000000000000000000" #h"FAC9F46E9A1346646EE5C7CED45A84B9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000008000000000000000000000" #h"471F0738C4F4937E4253161F28086803") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000004000000000000000000000" #h"A76F843041C4AED8241850B316D252A3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000002000000000000000000000" #h"5C5FD0334332A39924DB0CC7F0867C2E") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000001000000000000000000000" #h"07B6EDDEF27EE890EBC8FFA187D84438") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000800000000000000000000" #h"11BB0F2DC24461F5E70D2830ED8A7463") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000400000000000000000000" #h"0AB1A99B63CB8E07290AC60D0A4F1FF3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000200000000000000000000" #h"A26B0AFC4D55E7D61518C54E7C1BED01") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000100000000000000000000" #h"50C8C2B68E06CFCB98785E5AD3D5B09D") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000080000000000000000000" #h"ACA305D5D0D1E74FC51AC8C92A72FEA7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000040000000000000000000" #h"5AF970E570BC1652C82FB4B0945D5410") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000020000000000000000000" #h"00C224433138C1A4BD60571AA35580BC") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000010000000000000000000" #h"4EBE79726DAAF4702B075A5898B26075") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000008000000000000000000" #h"8109EE81B1679CEC42DB80D9530AD2F6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000004000000000000000000" #h"403B11B8181D460E9AC0172CBE6DD45F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000002000000000000000000" #h"CDE78E92B5A84717AD9B4162E3B14BFA") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000001000000000000000000" #h"A173D6BEBAA05EC54A47C7E554415963") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000800000000000000000" #h"EF31AD6CBFA7857ACF0C28294BDEF8B8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000400000000000000000" #h"209A30C46E41540C7B0AC8C4822DA253") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000200000000000000000" #h"AF770103EC57EBEB913C83D99F58B6AC") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000100000000000000000" #h"17D0C179EF34DE7F8EC7698A5371EC00") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000080000000000000000" #h"E0285A3F97607250CDB89BF92CBD1F41") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000040000000000000000" #h"D76BA3CE5E4DC974D4803ADB9F821A57") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000020000000000000000" #h"B66579D4159CF0B0114011C0298EBDA3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000010000000000000000" #h"B9761796C787B51852E4C3130B8B662D") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000008000000000000000" #h"D5C638801B97A1C2584ED42132F44109") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000004000000000000000" #h"E54A021B145B7B7761487BCDFD0B032F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000002000000000000000" #h"3EB3AFE73582EFAB0396108B5E0CDEEC") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000001000000000000000" #h"463E10507A26B708A1DFF3763276F5C9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000800000000000000" #h"0EEBF8D85AE19EB24C810CEF565FA77B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000400000000000000" #h"86CA894EEFD1CEAAEA70E00CD14645F6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000200000000000000" #h"989B0FC1FFE4BA6F7CC0F1EDEEB5B932") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000100000000000000" #h"42916ED17877E58933D3D8CEDA8DD7B3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000080000000000000" #h"88C0369158F2FEFFB4CF14130CE10B3B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000040000000000000" #h"DB8976E1DDA56553340236F47F8E9CEF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000020000000000000" #h"C6207672C411F088ACAD20814C66254A") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000010000000000000" #h"A792CF60F44A15D63FB293F9FCF879AC") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000008000000000000" #h"8F733746F91273D97ADA41D3A7D5A9E3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000004000000000000" #h"5DA8F191833E6198689710D5A03EE262") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000002000000000000" #h"D6DB9CEB7E821F6DF4CB1E99105E07AA") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000001000000000000" #h"05F308FFAEA3E1E754974435CE0B77C3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000800000000000" #h"73B8639AAD53AFA1B24165E0C9FD397E") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000400000000000" #h"AF45FDC65FD5F153E29A8D5032650AAD") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000200000000000" #h"A8BB045FB5B867E85FCAD328E13756C9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000100000000000" #h"DD053128C46C78C4414CE3234C16AEB3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000080000000000" #h"B0C82152D1D9E21D7C3F33E1FC9B4D68") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000040000000000" #h"11B56480D5C718A77A1BEA30CC3A53CF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000020000000000" #h"92C99F843674DED7F20A258C57253726") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000010000000000" #h"63B218D069CE9CAF52EF97614BDACFF9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000008000000000" #h"76096721043A016C095D95DD02980289") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000004000000000" #h"87AF16066939B8C4D90E242917DB05CF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000002000000000" #h"F7E0C931B7204308AB5020F106BBA0EF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000001000000000" #h"C697B3602711749580713737729E7049") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000800000000" #h"AF314640B147719EC1B4ABE27CDB58F5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000400000000" #h"B67DAC5BF73AF7546D2FDC3BC142708D") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000200000000" #h"AC53D20E3C06FF82DE52470BCCE1B283") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000100000000" #h"7D65047AF522F01856FDD83A9AAA147A") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000080000000" #h"709D6454033E3FCF8962CAD39B0DC4BD") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000040000000" #h"7B8058E46789EF51D18700511D20CB70") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000020000000" #h"738088C404D8850041AD6B690CC6B65A") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000010000000" #h"7DFDFD55B53D4CD704F96CF93311AFC4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000008000000" #h"1DBE62C57AF741D9F2FBF9A340E772C9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000004000000" #h"E7349BAB7CB458736436943DB0CC411D") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000002000000" #h"64E229BF2AF893510358CB0DBEF7E97F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000001000000" #h"4C632CF8C75AD0DDE8316A7B35F871CC") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000800000" #h"2517115CB13E681F0EEA2206C26AD5C4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000400000" #h"8ED5E9D7005D980B078E7F58B47E591E") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000200000" #h"8DBCD253443534B2B8BC698A03166ABE") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000100000" #h"02F34EAB6CC1DBC8809F3D0EB80FA493") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000080000" #h"47E5B71162F75B84D7A699A31FFA29DE") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000040000" #h"B6C1EA2B410D1704058E905EB967C503") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000020000" #h"4383238CE44E30ECDFC90A70EA4C9E96") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000010000" #h"9314DFBB44D530768B159DAABCBD439F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000008000" #h"12D7C80912C299C4F668278FA494D580") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000004000" #h"49FB1EACCA3B1743E15014010E9963DF") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000002000" #h"0DF48D3B128AA63496DBE0CD11083495") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000001000" #h"13240392854D6290A4BE08999843105B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000800" #h"3D4B8705340C3225CE5A724917BA92B4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000400" #h"425DCCF406AD46F2F565BBBC72FE234B") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000200" #h"88C09509CBB95339726C196E63346418") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000100" #h"90724430636A3DB610F25332BE2FEBE6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000080" #h"044B4FAED3EA17338630E828B9960CA7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000040" #h"4A59243AEB65BAA4F7432498FD87EF62") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000020" #h"4324DF8817589D894674B3F311256E9F") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000010" #h"0527269F9FA9E9CC01A03CFA59FD3854") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000008" #h"96CA56F9EFAA393F521679E0B6ACF231") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000004" #h"DA7A328F8A5BF03DD42BC52DEC5C4B15") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000002" #h"5FE3D4C46DB294523166AB46208E0711") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000001" #h"2519B9240C21C1F980FB722AD8CB793E") (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8FC3A53656B1F778C129DF4E9848A41E") (:ecb-mode-test #h"01010101010101010101010101010101" #h"01010101010101010101010101010101" #h"EFB2C7DD69614683DAB0BC607036C425") (:ecb-mode-test #h"02020202020202020202020202020202" #h"02020202020202020202020202020202" #h"A1AE9D211867538B100BD121BA6A3ADC") (:ecb-mode-test #h"03030303030303030303030303030303" #h"03030303030303030303030303030303" #h"8E77797CEC40C34AD3A3230975AE760E") (:ecb-mode-test #h"04040404040404040404040404040404" #h"04040404040404040404040404040404" #h"91086B2221C3FC8E254A97B611D83239") (:ecb-mode-test #h"05050505050505050505050505050505" #h"05050505050505050505050505050505" #h"95CA7F3CA2269A73B4964BD7A6A3DEA0") (:ecb-mode-test #h"06060606060606060606060606060606" #h"06060606060606060606060606060606" #h"BD7EB1B707AA5F801070B9C94F64A5C6") (:ecb-mode-test #h"07070707070707070707070707070707" #h"07070707070707070707070707070707" #h"37CE0ADCFAA89DD737CB15193DCBA48E") (:ecb-mode-test #h"08080808080808080808080808080808" #h"08080808080808080808080808080808" #h"37B6051557E2E535EE8B4955AC5DCB82") (:ecb-mode-test #h"09090909090909090909090909090909" #h"09090909090909090909090909090909" #h"33D6A06EB3B16C0C6078BF56F2966AB2") (:ecb-mode-test #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"521D3B74BA74D29362708CFE62E357AB") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"CDD5D57C2ABED59CEACAA9352103751F") (:ecb-mode-test #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"173D2D1CABD12095742C3045EC50899A") (:ecb-mode-test #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"A85D680132CCF78F2918A9698D6431D6") (:ecb-mode-test #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"C8137067650576081E34565121681374") (:ecb-mode-test #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"EDC375FEF71B83B2BE5187F82D0180EA") (:ecb-mode-test #h"10101010101010101010101010101010" #h"10101010101010101010101010101010" #h"54FD2A83F505EE40F4F6F4F94198ED48") (:ecb-mode-test #h"11111111111111111111111111111111" #h"11111111111111111111111111111111" #h"10CC2D64A5306366D8D594B8CDB4FBD3") (:ecb-mode-test #h"12121212121212121212121212121212" #h"12121212121212121212121212121212" #h"13E3A82E121BC3CCA5C703FCAC451E22") (:ecb-mode-test #h"13131313131313131313131313131313" #h"13131313131313131313131313131313" #h"1D8753BFF6930FA77FD7819F5935C422") (:ecb-mode-test #h"14141414141414141414141414141414" #h"14141414141414141414141414141414" #h"A6FF617A5D0395407BEEC3A311A0CBCB") (:ecb-mode-test #h"15151515151515151515151515151515" #h"15151515151515151515151515151515" #h"034D4716AC68312E05C9497E9FC9430A") (:ecb-mode-test #h"16161616161616161616161616161616" #h"16161616161616161616161616161616" #h"690D68007F51E2E8C9516EF9EE64F85D") (:ecb-mode-test #h"17171717171717171717171717171717" #h"17171717171717171717171717171717" #h"EF1396B41E8AF9BD6B2EBDEB7CC1A91B") (:ecb-mode-test #h"18181818181818181818181818181818" #h"18181818181818181818181818181818" #h"9A20B52BFC5EB501F027978FBD684A1B") (:ecb-mode-test #h"19191919191919191919191919191919" #h"19191919191919191919191919191919" #h"7A1A35FAD281601D522188B546CE1800") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"F715BBB8000B577E6EF5D698511E8D03") (:ecb-mode-test #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"09E83FD6F11C656ACAA1D1FAAF02F086") (:ecb-mode-test #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"41561B53A60A9FBB25304169789461BB") (:ecb-mode-test #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"B47BB77008C75F854861994479DA3E7B") (:ecb-mode-test #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"811CE0CFEB49117D6ED593FBFD5E6CD6") (:ecb-mode-test #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"C9479F831ECEBCFCB91F99FD6379A962") (:ecb-mode-test #h"20202020202020202020202020202020" #h"20202020202020202020202020202020" #h"FF2C70AB530B889BFF5F3C902DE6209A") (:ecb-mode-test #h"21212121212121212121212121212121" #h"21212121212121212121212121212121" #h"695A8754A7A6F18C4F3C6EE9CE0EA103") (:ecb-mode-test #h"22222222222222222222222222222222" #h"22222222222222222222222222222222" #h"2E2DFBB0C8BD286E87625F61A2F7D887") (:ecb-mode-test #h"23232323232323232323232323232323" #h"23232323232323232323232323232323" #h"CE8E66F871157B0182653B625074CB02") (:ecb-mode-test #h"24242424242424242424242424242424" #h"24242424242424242424242424242424" #h"C32823388E5ADBD6AA14186CE0400A4E") (:ecb-mode-test #h"25252525252525252525252525252525" #h"25252525252525252525252525252525" #h"EDEA3E4740736BC47A7891609B86CE9E") (:ecb-mode-test #h"26262626262626262626262626262626" #h"26262626262626262626262626262626" #h"2B2DDCA5AD969636475196D462F5B2A5") (:ecb-mode-test #h"27272727272727272727272727272727" #h"27272727272727272727272727272727" #h"5C46E5F8DD4E7DC61474CB8DFC3E04F0") (:ecb-mode-test #h"28282828282828282828282828282828" #h"28282828282828282828282828282828" #h"6670EBB8C7E041121C5C5E449B675FD2") (:ecb-mode-test #h"29292929292929292929292929292929" #h"29292929292929292929292929292929" #h"808DC7740040F39A6D3CBFAAC5228A23") (:ecb-mode-test #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"15ECD6020C001F45262A1256AF7B066D") (:ecb-mode-test #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"C937773A54DC09B0CC52756A7EEEF178") (:ecb-mode-test #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"B8AB07101FC58ED64BBE203F31F892D4") (:ecb-mode-test #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"FC429A3B703812E0AAD1A325A23E33DE") (:ecb-mode-test #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"C4FFFE21B89FFCC6EC721D49E870ECEC") (:ecb-mode-test #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"D218CB13BC19296A50B5612A3721C1E2") (:ecb-mode-test #h"30303030303030303030303030303030" #h"30303030303030303030303030303030" #h"573FF72784A1CEBD97FED191A3B979EF") (:ecb-mode-test #h"31313131313131313131313131313131" #h"31313131313131313131313131313131" #h"4D44F703C1E1C39C3A2EDF5639394702") (:ecb-mode-test #h"32323232323232323232323232323232" #h"32323232323232323232323232323232" #h"50F09502DB7FCF0095E5F8219DCA5A3C") (:ecb-mode-test #h"33333333333333333333333333333333" #h"33333333333333333333333333333333" #h"9533F79F724484B169CB32EB7FAD0168") (:ecb-mode-test #h"34343434343434343434343434343434" #h"34343434343434343434343434343434" #h"9EB8075BAB79DD8BBF7ECAD69C6B13CE") (:ecb-mode-test #h"35353535353535353535353535353535" #h"35353535353535353535353535353535" #h"E5450816410E771677D879F0A6ED86BD") (:ecb-mode-test #h"36363636363636363636363636363636" #h"36363636363636363636363636363636" #h"07B20FB465C2F4FABC042A07E3163DEA") (:ecb-mode-test #h"37373737373737373737373737373737" #h"37373737373737373737373737373737" #h"26B4CFBE7FDB3B3253E9F5D499DAD6C0") (:ecb-mode-test #h"38383838383838383838383838383838" #h"38383838383838383838383838383838" #h"4FD4E8956C0808613A5EA19A9D753800") (:ecb-mode-test #h"39393939393939393939393939393939" #h"39393939393939393939393939393939" #h"FA74B3A2F745D440E74851D1C0D8679B") (:ecb-mode-test #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"9D6FC40588769E07EC406A0CEBEC99F2") (:ecb-mode-test #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"53602388866685FC37681EBC9BC46F73") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"AB4532B652BDD0FC8ED4034CF3C11A24") (:ecb-mode-test #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"66EFBCE5A3C3795A50C1A6B999CC3E71") (:ecb-mode-test #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"1CAC1DEB42C55E3A3FEB261ED2FB3F50") (:ecb-mode-test #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"31D98EA0E6B439432C3A6BB8E25D600D") (:ecb-mode-test #h"40404040404040404040404040404040" #h"40404040404040404040404040404040" #h"898FD889A6AA36447C89D8CCC8B4043A") (:ecb-mode-test #h"41414141414141414141414141414141" #h"41414141414141414141414141414141" #h"AA74AA28D307802D28EDF73B58BD3BA3") (:ecb-mode-test #h"42424242424242424242424242424242" #h"42424242424242424242424242424242" #h"57F1920F30A23C74DA3CD9CF78F4328C") (:ecb-mode-test #h"43434343434343434343434343434343" #h"43434343434343434343434343434343" #h"2C30C357FB5A8F9D531CE0F17E1286F3") (:ecb-mode-test #h"44444444444444444444444444444444" #h"44444444444444444444444444444444" #h"C6E5EB2B3F9A7744A0128B93A4145A7B") (:ecb-mode-test #h"45454545454545454545454545454545" #h"45454545454545454545454545454545" #h"0DBF0AD86C57F7D25A0CE61F6A6148EE") (:ecb-mode-test #h"46464646464646464646464646464646" #h"46464646464646464646464646464646" #h"5F64A9BC4359153FF2572195A12F52D3") (:ecb-mode-test #h"47474747474747474747474747474747" #h"47474747474747474747474747474747" #h"B6099EE04520977CB7B1DE88E2120FA1") (:ecb-mode-test #h"48484848484848484848484848484848" #h"48484848484848484848484848484848" #h"77AE144A7A3883038561F239C5312F09") (:ecb-mode-test #h"49494949494949494949494949494949" #h"49494949494949494949494949494949" #h"DF0FE7423AA1CF40C8FD45253817FE33") (:ecb-mode-test #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"CE4E05EC0EE20A8A4B27937B7B8ECED4") (:ecb-mode-test #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"BAB91404D49876BEE288311BA3C7456A") (:ecb-mode-test #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"9DC6BCB030F1FBC24ADBF6EA5238E507") (:ecb-mode-test #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"BFACD02D59B26640B80B1886CD6E7D03") (:ecb-mode-test #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"2076B2B836A8C545B3C103050E7AFF41") (:ecb-mode-test #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"653B5B9A9751451C89DF56D79CFD07EF") (:ecb-mode-test #h"50505050505050505050505050505050" #h"50505050505050505050505050505050" #h"7F4060C7776DEED87F7F9B26BEAFA428") (:ecb-mode-test #h"51515151515151515151515151515151" #h"51515151515151515151515151515151" #h"B7072058AEF8AA25604ACE1531C81C59") (:ecb-mode-test #h"52525252525252525252525252525252" #h"52525252525252525252525252525252" #h"40A0515E8F01E55C60F70E0DAE4A1D31") (:ecb-mode-test #h"53535353535353535353535353535353" #h"53535353535353535353535353535353" #h"9805BD832CBCBEE6B439D866F3ED53F9") (:ecb-mode-test #h"54545454545454545454545454545454" #h"54545454545454545454545454545454" #h"81334B63525932E8B9342094A8DBB917") (:ecb-mode-test #h"55555555555555555555555555555555" #h"55555555555555555555555555555555" #h"59670A6CBA2E729FEDD36389481541A4") (:ecb-mode-test #h"56565656565656565656565656565656" #h"56565656565656565656565656565656" #h"84B3279AE90EACB5BF863DC17AE9212E") (:ecb-mode-test #h"57575757575757575757575757575757" #h"57575757575757575757575757575757" #h"13F3BDFA7EF33A97F496692361AE6167") (:ecb-mode-test #h"58585858585858585858585858585858" #h"58585858585858585858585858585858" #h"080F06D07DC2B4D0B748FA9F28946B0C") (:ecb-mode-test #h"59595959595959595959595959595959" #h"59595959595959595959595959595959" #h"72B8521961C711E79AA30616F0B70687") (:ecb-mode-test #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"75082BB9C98676FBB964DBDCD25705A2") (:ecb-mode-test #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"C00D2666ED3FAF0F01FEEB01A9883B1B") (:ecb-mode-test #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"C70DBF746F722EBC18A4F4B115193ED4") (:ecb-mode-test #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"6283561914D3FABEE1FDD1747515C2D4") (:ecb-mode-test #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"7AAABB3AE21BBA557AE89A0D9B99816C") (:ecb-mode-test #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"4010AB7D9F7237DE123450ECA31B0900") (:ecb-mode-test #h"60606060606060606060606060606060" #h"60606060606060606060606060606060" #h"3E4B358F1A26A197BF3B65B0DB4FB7E5") (:ecb-mode-test #h"61616161616161616161616161616161" #h"61616161616161616161616161616161" #h"2E9D9D04453C0698FB444CFA3340E0B8") (:ecb-mode-test #h"62626262626262626262626262626262" #h"62626262626262626262626262626262" #h"99ABC39983649030A48BAEDA6E718E8A") (:ecb-mode-test #h"63636363636363636363636363636363" #h"63636363636363636363636363636363" #h"39478E48FACF3E28870082DFB51A817B") (:ecb-mode-test #h"64646464646464646464646464646464" #h"64646464646464646464646464646464" #h"1BCA5B87AFEB4D9090910E02E3040CFD") (:ecb-mode-test #h"65656565656565656565656565656565" #h"65656565656565656565656565656565" #h"30B0F7101370BB69E7B20D13050AB876") (:ecb-mode-test #h"66666666666666666666666666666666" #h"66666666666666666666666666666666" #h"CC000CAA9DEB82E9766CD98B9DE131DE") (:ecb-mode-test #h"67676767676767676767676767676767" #h"67676767676767676767676767676767" #h"AEDA25322DEA94FA8345FD467992B1D8") (:ecb-mode-test #h"68686868686868686868686868686868" #h"68686868686868686868686868686868" #h"14D0D8253551FC65B1DE9DB1C3F0AB6A") (:ecb-mode-test #h"69696969696969696969696969696969" #h"69696969696969696969696969696969" #h"67D32FDC0CD1AAC1F20E3F5FDFC986C0") (:ecb-mode-test #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"3D8101226BBB3F4FFD40E68EF5F93626") (:ecb-mode-test #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"684F017186FCC8AC24342CC54BF2FA6C") (:ecb-mode-test #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"4AD0F6751D4DE121269F0FCCD99EFE68") (:ecb-mode-test #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"FDF357681BD91A83E2632698C1525CE0") (:ecb-mode-test #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"AC2698CD31DE9AC9740F53D467902FCB") (:ecb-mode-test #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"ED011F6CD9356CBA1E4715D60AB112A6") (:ecb-mode-test #h"70707070707070707070707070707070" #h"70707070707070707070707070707070" #h"724926624439B1C8694571BC103CFCED") (:ecb-mode-test #h"71717171717171717171717171717171" #h"71717171717171717171717171717171" #h"C2725BBB0E4945AF08A6A7F1A9AF211A") (:ecb-mode-test #h"72727272727272727272727272727272" #h"72727272727272727272727272727272" #h"0ABD84E7FF8FD3F826B4AFBE3AF2B653") (:ecb-mode-test #h"73737373737373737373737373737373" #h"73737373737373737373737373737373" #h"404BEFC70C072CAEE758CC3E697E946D") (:ecb-mode-test #h"74747474747474747474747474747474" #h"74747474747474747474747474747474" #h"0106FFAEE3A63E7B80004B044F864032") (:ecb-mode-test #h"75757575757575757575757575757575" #h"75757575757575757575757575757575" #h"AE43C4368B1FC9B98DB952887C4316B1") (:ecb-mode-test #h"76767676767676767676767676767676" #h"76767676767676767676767676767676" #h"FAC2FD894C5AEBC38A45034F38D44075") (:ecb-mode-test #h"77777777777777777777777777777777" #h"77777777777777777777777777777777" #h"09831AB86A3DF171F1961A8E9F40BDD0") (:ecb-mode-test #h"78787878787878787878787878787878" #h"78787878787878787878787878787878" #h"DFC3FE2EC8C90B113BB11F76F3636E3D") (:ecb-mode-test #h"79797979797979797979797979797979" #h"79797979797979797979797979797979" #h"E9B9BB30C6D86061FA1812FF08CBC65A") (:ecb-mode-test #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"0FC606C92CCFE70FEDAAE3DB6C443762") (:ecb-mode-test #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"85DEC6534601D8B6B11B9060C8A42DF2") (:ecb-mode-test #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"1250BEB80BC3D145284DF9188CCA5C50") (:ecb-mode-test #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"318E30C9CCEBCA2A7F546A49052AF9A4") (:ecb-mode-test #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"49FCFE05AEF655D83155DB617ED581BA") (:ecb-mode-test #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"91EF1DED08B8BC59A916B5739195C758") (:ecb-mode-test #h"80808080808080808080808080808080" #h"80808080808080808080808080808080" #h"B5BCEC5D9EC2161530284CD96653C250") (:ecb-mode-test #h"81818181818181818181818181818181" #h"81818181818181818181818181818181" #h"3B26ABD6B5688159301921809DF64FB1") (:ecb-mode-test #h"82828282828282828282828282828282" #h"82828282828282828282828282828282" #h"DAEA518A364BC404EEDD6903474BB56D") (:ecb-mode-test #h"83838383838383838383838383838383" #h"83838383838383838383838383838383" #h"37C8EBDBCE1501AAD18A395AAADCB415") (:ecb-mode-test #h"84848484848484848484848484848484" #h"84848484848484848484848484848484" #h"399FB3321F29829924CE72FBE9ED2756") (:ecb-mode-test #h"85858585858585858585858585858585" #h"85858585858585858585858585858585" #h"A88E685E95E838E27AC3024370BFE12F") (:ecb-mode-test #h"86868686868686868686868686868686" #h"86868686868686868686868686868686" #h"4C56F71EC80909EC98673D808F42321E") (:ecb-mode-test #h"87878787878787878787878787878787" #h"87878787878787878787878787878787" #h"4EFA656E3F35C570C8DC4EA5524B436C") (:ecb-mode-test #h"88888888888888888888888888888888" #h"88888888888888888888888888888888" #h"808FA06393685AB9143C82CA4B954BE4") (:ecb-mode-test #h"89898989898989898989898989898989" #h"89898989898989898989898989898989" #h"D107696CCF562B2CC2901D50E1BFE320") (:ecb-mode-test #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"98CF296ACAFAF704D6C91D1997202E47") (:ecb-mode-test #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"5A023E5B18861A1FFCCC26F487EBF80F") (:ecb-mode-test #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"8570554F91C1D8366FF6EC2097F110C3") (:ecb-mode-test #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"E1CE24B74C513C884992C98DFCF70BFB") (:ecb-mode-test #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"23F536F1876F44FFB7727D0FAF9F2D70") (:ecb-mode-test #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"D877DD242B0C7CC05D9600419385A3EF") (:ecb-mode-test #h"90909090909090909090909090909090" #h"90909090909090909090909090909090" #h"2896226A5A298578E2C999AF4F382DE7") (:ecb-mode-test #h"91919191919191919191919191919191" #h"91919191919191919191919191919191" #h"B54F6E5FB8F33608A8DFAEAD8EF27B98") (:ecb-mode-test #h"92929292929292929292929292929292" #h"92929292929292929292929292929292" #h"45CF4F783116E562F104B107BD3D10F3") (:ecb-mode-test #h"93939393939393939393939393939393" #h"93939393939393939393939393939393" #h"93F404FF83D493315E2E9665AC2013C5") (:ecb-mode-test #h"94949494949494949494949494949494" #h"94949494949494949494949494949494" #h"1A5664813121482F4DBE1026104D84A8") (:ecb-mode-test #h"95959595959595959595959595959595" #h"95959595959595959595959595959595" #h"AEE4A82CE2FF23E91A497269B82530F6") (:ecb-mode-test #h"96969696969696969696969696969696" #h"96969696969696969696969696969696" #h"E001B8A93500C4D49F8A9A372A1E8A61") (:ecb-mode-test #h"97979797979797979797979797979797" #h"97979797979797979797979797979797" #h"FB23B31999D3D84AFD55600B9EA722CD") (:ecb-mode-test #h"98989898989898989898989898989898" #h"98989898989898989898989898989898" #h"9572170C51A1198373B6ADBAB87AE454") (:ecb-mode-test #h"99999999999999999999999999999999" #h"99999999999999999999999999999999" #h"65CCAA1321D8CB3CA18462C37DBBE4E1") (:ecb-mode-test #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"3E942B1978B989CAC106E4575E6729A7") (:ecb-mode-test #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"3E9AA5B6EC22E250368E9806041F6AA2") (:ecb-mode-test #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"717479032B7D79C5236436D8AE0F3AB5") (:ecb-mode-test #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"2643B168C234D5E0205E212C5CF669F4") (:ecb-mode-test #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"A79DE0F9F3BE54CF4B453A1836F7F491") (:ecb-mode-test #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"CF0836AC18F99D130EE85DE0ACDBE063") (:ecb-mode-test #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"F12ABC04BB0C7F6F794EF428E57F15FA") (:ecb-mode-test #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"383E9B4B9D663B8527E6FAB4A7892832") (:ecb-mode-test #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"432103C74F3C2D68315CDD2831EF8F71") (:ecb-mode-test #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"E06519949E2F6E8B00E15CD58054BB4A") (:ecb-mode-test #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"34A14A8B9E5869C25A9C604300BEC911") (:ecb-mode-test #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"0FB01A7B7F093C400E2FB08E709F7675") (:ecb-mode-test #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"51D28B7FDD1C3EA5ED21EBD1D8B7499D") (:ecb-mode-test #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"3F6FCB543C8771ABFABDD72E0E788FD7") (:ecb-mode-test #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"045A187E0A7009AB426A78B251CA088E") (:ecb-mode-test #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"BF28504290089DB7D289785147BD5D9A") (:ecb-mode-test #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"1297E67DBA4B264248FCDAF3B9E3FE4B") (:ecb-mode-test #h"ABABABABABABABABABABABABABABABAB" #h"ABABABABABABABABABABABABABABABAB" #h"8177E1C48AB5578DBB3C4AA36EEEEF5C") (:ecb-mode-test #h"ACACACACACACACACACACACACACACACAC" #h"ACACACACACACACACACACACACACACACAC" #h"97E785AED832ACF1D419DC01219704D4") (:ecb-mode-test #h"ADADADADADADADADADADADADADADADAD" #h"ADADADADADADADADADADADADADADADAD" #h"23D059447EDB76B0F9B41006399CC087") (:ecb-mode-test #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"7320A4A66FE238B9E1A932F9942DCFAA") (:ecb-mode-test #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"4D8D7376C26FE0AFAA27B61ED1882721") (:ecb-mode-test #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"DEF37D094186DE7209801C7D2D93F61A") (:ecb-mode-test #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"536A8AACDB1156AC2E2D7DD0499BFA5F") (:ecb-mode-test #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"F57A2E78B976A57642DC8BFAFB3480B2") (:ecb-mode-test #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"88177315699E7AE0D5B4B07046ED5990") (:ecb-mode-test #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"02F65559B9AA547A5EA54EB6A8E48960") (:ecb-mode-test #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"F2F02BC7D56F7594E37DB7DF94C1B9C1") (:ecb-mode-test #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"2691BEACD805DC3C69B0295A7308CFD8") (:ecb-mode-test #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"A3A67B09425720C8AAB79DA8F44A8E8A") (:ecb-mode-test #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"DBC7ABF1DD510B5D3A6BA898670B6361") (:ecb-mode-test #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"FA1B51E10654E448C32EFCD7A986CAF0") (:ecb-mode-test #h"BABABABABABABABABABABABABABABABA" #h"BABABABABABABABABABABABABABABABA" #h"C63D856771FC45E5102B14B41A79CB7E") (:ecb-mode-test #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"9030C8326D2B75D1979DC1C3B80796B9") (:ecb-mode-test #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"B11A41E18A535F8F3B343135C73A4670") (:ecb-mode-test #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"BC6F04C2D75634E0054CCE755DE717A7") (:ecb-mode-test #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"AAFAD1353CD8C6469751190678362F03") (:ecb-mode-test #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"9DD8ACCD8D2A504AAE205BAD997F20DE") (:ecb-mode-test #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"0FCBA053A6E5DE5D0E6B9395BDE2BD18") (:ecb-mode-test #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"E3AD2507E0F6BCDCC3D50728E12BF962") (:ecb-mode-test #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"0AB51BDC22FFF1458CB4D3D08EDB164C") (:ecb-mode-test #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"FBF3371047AB698FCFC81442B134AD26") (:ecb-mode-test #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"D026FC11B7B1BB47B020D7A8320A174B") (:ecb-mode-test #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"FAE26B00CAD7DD254EDBB84688A846E9") (:ecb-mode-test #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"91F547F8129DB5B465DF57F0A03E58FE") (:ecb-mode-test #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"AECA4D2C88D33F6A0CEAE619259E3982") (:ecb-mode-test #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"32AAB72FE2809153140156909B52F414") (:ecb-mode-test #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"91EDBD3465D1216B3564F094455F0ECC") (:ecb-mode-test #h"CACACACACACACACACACACACACACACACA" #h"CACACACACACACACACACACACACACACACA" #h"4D14F0124000E96F09938906B99415BA") (:ecb-mode-test #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"297F6B5BF3A01B1D87B7B74DF4E9DC2F") (:ecb-mode-test #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"BCCE55DCAFF6BB7B4D0CAFD112E87FCD") (:ecb-mode-test #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"D7A1E8E4624689000AD7AFB06982D8FE") (:ecb-mode-test #h"CECECECECECECECECECECECECECECECE" #h"CECECECECECECECECECECECECECECECE" #h"D59DAF6299A27A5DE36F7090B777673F") (:ecb-mode-test #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"A5ACE3553FB387187CCFF88C3DEE1ED7") (:ecb-mode-test #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"2CCF6DD6EBEE7C4A4C5586EBF792AC57") (:ecb-mode-test #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"695849E45DE312A07C5E8A6C1C20D6B8") (:ecb-mode-test #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"5E14D156D004D484E040C354F13A8F63") (:ecb-mode-test #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"E4CD1852605EDC0FF576A8310FED4883") (:ecb-mode-test #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"BC7EB0533C90715C314362B1FBDC3545") (:ecb-mode-test #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"AFBDF9336F9CAC06313181937FF1849E") (:ecb-mode-test #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"B590131983C4E266BDE99D577C493B67") (:ecb-mode-test #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"90921A3641666DE025E42B1BDC891FBA") (:ecb-mode-test #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"E3B79B1EC3FA41E7EB3C575ED197588D") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"5D9B53924BFCB123BEF8F3C5431103F2") (:ecb-mode-test #h"DADADADADADADADADADADADADADADADA" #h"DADADADADADADADADADADADADADADADA" #h"12BB6C3773F42D7AB2BD711C3DA6B1F9") (:ecb-mode-test #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"A0D2449463DDB310E0D4D0B547043FA0") (:ecb-mode-test #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"B1E70695E833951DA0C4B38CDA067ACD") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"19AA0D4A04DD8C93935FCB3F39A0D2CD") (:ecb-mode-test #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"98E4BAC98E4B1559B07E3A323D352964") (:ecb-mode-test #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"4B88F29F1DCB339CEF6C80EF949272BA") (:ecb-mode-test #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"8F3C7931AC39D8B62C643BB3AC2C731B") (:ecb-mode-test #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"D620AC385CAA42FD228176995C7EEC61") (:ecb-mode-test #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"D99A20E342818B37A21C87F35C19D559") (:ecb-mode-test #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"0817FC31D13725B3F64790470C883F22") (:ecb-mode-test #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"945FE4DAEEE2AAA1EFE80022311B1040") (:ecb-mode-test #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"F5976BFF2CE360F3A75CACB10B1B26E6") (:ecb-mode-test #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"4D7118A0D1DE4AB7E43765B2E2AE0EE2") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"FC428DC79787BBAC03937C6C0FEDA673") (:ecb-mode-test #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"6DF3580C31F389C898CC905582BCD920") (:ecb-mode-test #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"6B74DC42605029718F4D0C060547CC8B") (:ecb-mode-test #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"B587D402AA54E60DB655B4164847ACA1") (:ecb-mode-test #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"16313A473EFCB6D965C5F1426785B472") (:ecb-mode-test #h"ECECECECECECECECECECECECECECECEC" #h"ECECECECECECECECECECECECECECECEC" #h"734356F14E8A6C5775A4638BBDFCE111") (:ecb-mode-test #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"F66FFD7385B4A87A9E2865D70864DAA6") (:ecb-mode-test #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"FB7FA84127D218FDE6A24CA30379ECCC") (:ecb-mode-test #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"4FADBE831B78D6B3C59DCE8B4293BB79") (:ecb-mode-test #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"DA219657EA1AB63EA46306C2D0B69186") (:ecb-mode-test #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"34BE2E9CB3C4047884CB291416D037C7") (:ecb-mode-test #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"384BAAE4DB758555E2DB6E2995E0CAEC") (:ecb-mode-test #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"7338107A3D9BF3E8C67936E1CB77A22A") (:ecb-mode-test #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"217BC7820BB5A9183D95BF7E99180B87") (:ecb-mode-test #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"56BA9C916AECDC51203CB6BA5FEE8D3B") (:ecb-mode-test #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"8CCA87B86BEB5CCD11A594F20AD5D1B8") (:ecb-mode-test #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"CD0230DBA2982BE4F126FB2E80AB2C24") (:ecb-mode-test #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"A3E46629CF9D1D6DD1A6DE82B86C5934") (:ecb-mode-test #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"AE18D7C35968E90CECA036CF586EB963") (:ecb-mode-test #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"3B0261B9DA91346FAD84DD9CC9EC4A37") (:ecb-mode-test #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"9F3E91301511409E1F997A080F9A9424") (:ecb-mode-test #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"F1BF5CCE9A7D5FBE759A579640348692") (:ecb-mode-test #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"D192CBC80E653C12C647C1EBEB56AE10") (:ecb-mode-test #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"64F5B3E91B4CC3C35AFB6793FCEC836A") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"EFB109978422E50FDCB05335D050D0D7") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F" #h"00112233445566778899AABBCCDDEEFF" #h"09C26143B47B1A22EC2D9CD8B8A4E573") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF48" #h"EA024714AD5C4D84EA024714AD5C4D84" #h"FFA01C309967FD619C58AB1CC4BCA98D") ;;; test vectors for 192-bit keys from NESSIE (http://www.cryptonessie.org/) (:ecb-mode-test #h"800000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8301730C7D5FEFC416BEEC1104C51E36") (:ecb-mode-test #h"400000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"F7EF83BDD4C3D5B30E805C351DB87200") (:ecb-mode-test #h"200000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"A236EB8595FDF9239C658D58342EF566") (:ecb-mode-test #h"100000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"236397EB9EEDA5EA8BF4A42864A5A39F") (:ecb-mode-test #h"080000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"21C3DD416D64F6055C8C3977EEFB4652") (:ecb-mode-test #h"040000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"59128F63BD9D834C3EECA5A5299417D1") (:ecb-mode-test #h"020000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"0F95FA4C48DE95391B45A460B92B22BF") (:ecb-mode-test #h"010000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"5073FABD5FA03D153108B9A5F2128C78") (:ecb-mode-test #h"008000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"B83872427919126F2C976D45872B7596") (:ecb-mode-test #h"004000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"73F8E6C4181758AFA29945E970C8F854") (:ecb-mode-test #h"002000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"B72DC39B9A72EFFA047E3657B1F02B1B") (:ecb-mode-test #h"001000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"081F1C50BF964CCC01949363A1A1C76C") (:ecb-mode-test #h"000800000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"D4A2AB8B904BE542386CC2342AC354D6") (:ecb-mode-test #h"000400000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"BC94C45B53BB5281BFF16F7BC7CCD26E") (:ecb-mode-test #h"000200000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"7D976240134D43279AB809A3EC1BAB8E") (:ecb-mode-test #h"000100000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"BE18D342080322DBBCEDBB83C7F11CA5") (:ecb-mode-test #h"000080000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"D1359D29060E0003C78066A900C90C00") (:ecb-mode-test #h"000040000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"FD0A7E670B7E9B57C913D38E4649715E") (:ecb-mode-test #h"000020000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"C9DFB5B1CB3E079CFC027E67DA61EC2A") (:ecb-mode-test #h"000010000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"10FDD69900FBC470499EDF0AFF655430") (:ecb-mode-test #h"000008000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"565721A361F5F0EB44366DEC1D6841BE") (:ecb-mode-test #h"000004000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"07AD173E39A769D345277F4CFD16BBA8") (:ecb-mode-test #h"000002000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8E89B6B70A10D1866ED4D139A0E6565C") (:ecb-mode-test #h"000001000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"88A431DD4CBBD94778AE53A36EE246DE") (:ecb-mode-test #h"000000800000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"F4C8E31B64506E9BDE6BB682DBCEF50A") (:ecb-mode-test #h"000000400000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"5B0E256E4EAB25AEC08CD2CE5547334D") (:ecb-mode-test #h"000000200000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"EDBAA578C13D7D215057EAD4F03B9E1C") (:ecb-mode-test #h"000000100000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"7EA37DB8EB1B362E370A43DF1ADB2F0A") (:ecb-mode-test #h"000000080000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8B7C67AE8F749C4EFB7418788D369DEC") (:ecb-mode-test #h"000000040000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"34D3A7E87A4B1B3FAC60672A3D82F40D") (:ecb-mode-test #h"000000020000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"4FE628152A1D46CF6DA78D5F17255877") (:ecb-mode-test #h"000000010000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3460A571D035B6DA52AA8E59702B79C0") (:ecb-mode-test #h"000000008000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"CA2375E2E96AB28C7FC3E61B6561B07C") (:ecb-mode-test #h"000000004000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"7E33319A69017428DDBD979D3F6982C6") (:ecb-mode-test #h"000000002000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"49DA8B8AD80A6BBA1003FF6B8D06E3D8") (:ecb-mode-test #h"000000001000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"CCE4C841B39187943DCCA5EB8BBF1221") (:ecb-mode-test #h"000000000800000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3B42FA9129BF36F87E445589460A19BD") (:ecb-mode-test #h"000000000400000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3E397A22C64A8C09B5B59A9D397B0A96") (:ecb-mode-test #h"000000000200000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"159AB9C871FB3EB373A94721E9F0743A") (:ecb-mode-test #h"000000000100000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"9C2DECEEFEDF2475C26EFFEA3A0E2920") (:ecb-mode-test #h"000000000080000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"0FCC4399113E6BF62A23F657BEF97224") (:ecb-mode-test #h"000000000040000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"2FCA4167B034D9EDAC4E12828B911600") (:ecb-mode-test #h"000000000020000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3F9434872C4E49EB8718EDB8896CFF2E") (:ecb-mode-test #h"000000000010000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8168025815D16028078007C9E1370331") (:ecb-mode-test #h"000000000008000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"F0FBF790B49553EC3963805CC2F6AA7E") (:ecb-mode-test #h"000000000004000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"951C45D26A548A9A6152CCBC00D3C6FA") (:ecb-mode-test #h"000000000002000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"845DCC97B1F8CD3254D2B29A59C7AE41") (:ecb-mode-test #h"000000000001000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6694A168D387E4FB3291A376B938136D") (:ecb-mode-test #h"000000000000800000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"9569359A00659B9645565857398C982F") (:ecb-mode-test #h"000000000000400000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"417C97D7F56216FFEBE64A73F8D81168") (:ecb-mode-test #h"000000000000200000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8C46288B3314B9E1BC91E3C901C784A8") (:ecb-mode-test #h"000000000000100000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8EB78926977246F186274D88A4B0E6B3") (:ecb-mode-test #h"000000000000080000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"51E819059AB0325A2DF7F8CF49A54353") (:ecb-mode-test #h"000000000000040000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"56A59894FC1972B03D66D6C43688138B") (:ecb-mode-test #h"000000000000020000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"CB772637B59AD2330ACC8CC2FA7A338B") (:ecb-mode-test #h"000000000000010000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"1E3759E5BBE19EA0F66FBB0702F07440") (:ecb-mode-test #h"000000000000008000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"2112CFD246447D95F1A6BFF65A044121") (:ecb-mode-test #h"000000000000004000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8A7E580BAC4406B297E12B472C2748E3") (:ecb-mode-test #h"000000000000002000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"349ABE7C34357C7C719BD48AB62DF95C") (:ecb-mode-test #h"000000000000001000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"5EDB9089B865DAC899854DACE9DBBDBC") (:ecb-mode-test #h"000000000000000800000000000000000000000000000000" #h"00000000000000000000000000000000" #h"C82372837C0B459699779683785CE09C") (:ecb-mode-test #h"000000000000000400000000000000000000000000000000" #h"00000000000000000000000000000000" #h"B26532F7C0FDFF76BFADD7178E7A2A7A") (:ecb-mode-test #h"000000000000000200000000000000000000000000000000" #h"00000000000000000000000000000000" #h"965F80C599BF6AA85CA2199C785EDAF1") (:ecb-mode-test #h"000000000000000100000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8434DFE0C8717514FB0F8A4FF46930B6") (:ecb-mode-test #h"000000000000000080000000000000000000000000000000" #h"00000000000000000000000000000000" #h"10D701937E2944C7B48BAA32DA64C6A5") (:ecb-mode-test #h"000000000000000040000000000000000000000000000000" #h"00000000000000000000000000000000" #h"9A401E466C3686609B7B92FC6C57EA3B") (:ecb-mode-test #h"000000000000000020000000000000000000000000000000" #h"00000000000000000000000000000000" #h"E3442053C50265AEBEFD327633E449B1") (:ecb-mode-test #h"000000000000000010000000000000000000000000000000" #h"00000000000000000000000000000000" #h"7DF5EC480DEFA928687A35116989A7E2") (:ecb-mode-test #h"000000000000000008000000000000000000000000000000" #h"00000000000000000000000000000000" #h"EB2D38038A867146E3999D3E4DACE2BD") (:ecb-mode-test #h"000000000000000004000000000000000000000000000000" #h"00000000000000000000000000000000" #h"AE420A68558A2A50085331D8C46D7685") (:ecb-mode-test #h"000000000000000002000000000000000000000000000000" #h"00000000000000000000000000000000" #h"049B78384DE81BB815C48CC565DC1029") (:ecb-mode-test #h"000000000000000001000000000000000000000000000000" #h"00000000000000000000000000000000" #h"38EDCB5D37E043621F1EB80C78E40657") (:ecb-mode-test #h"000000000000000000800000000000000000000000000000" #h"00000000000000000000000000000000" #h"928C462D2AE8B7B45C252D0CAE80B34C") (:ecb-mode-test #h"000000000000000000400000000000000000000000000000" #h"00000000000000000000000000000000" #h"B3AD5D661D6DACFD57C214FDB9384491") (:ecb-mode-test #h"000000000000000000200000000000000000000000000000" #h"00000000000000000000000000000000" #h"9785657218402C1F3D1A40E73B015359") (:ecb-mode-test #h"000000000000000000100000000000000000000000000000" #h"00000000000000000000000000000000" #h"302355F21D129456A3EC58CD4C74D334") (:ecb-mode-test #h"000000000000000000080000000000000000000000000000" #h"00000000000000000000000000000000" #h"7322A935E1F65E2F341F778D0A55DAC0") (:ecb-mode-test #h"000000000000000000040000000000000000000000000000" #h"00000000000000000000000000000000" #h"7EEEF0009743F18E1E08F5CB02CFA104") (:ecb-mode-test #h"000000000000000000020000000000000000000000000000" #h"00000000000000000000000000000000" #h"82FA95B00BA5C8D71CB372895E91F7AD") (:ecb-mode-test #h"000000000000000000010000000000000000000000000000" #h"00000000000000000000000000000000" #h"44E308A9BAE6315936931C0D6F3472A4") (:ecb-mode-test #h"000000000000000000008000000000000000000000000000" #h"00000000000000000000000000000000" #h"A0F7760CB5F12B2F7F7451688DCC6DB3") (:ecb-mode-test #h"000000000000000000004000000000000000000000000000" #h"00000000000000000000000000000000" #h"249CBF1A9027A9D4A049DCC61C100631") (:ecb-mode-test #h"000000000000000000002000000000000000000000000000" #h"00000000000000000000000000000000" #h"AE5191679DB49836EBD11781E1A9E809") (:ecb-mode-test #h"000000000000000000001000000000000000000000000000" #h"00000000000000000000000000000000" #h"6F0F72E56952895F7425A34EB97D0D41") (:ecb-mode-test #h"000000000000000000000800000000000000000000000000" #h"00000000000000000000000000000000" #h"E4C8937EA026250290E85A2AA4B3A338") (:ecb-mode-test #h"000000000000000000000400000000000000000000000000" #h"00000000000000000000000000000000" #h"0D1B7815F62D8C6DB79E9755EB5CC047") (:ecb-mode-test #h"000000000000000000000200000000000000000000000000" #h"00000000000000000000000000000000" #h"3B8DA219500F670D2D32C753F613E646") (:ecb-mode-test #h"000000000000000000000100000000000000000000000000" #h"00000000000000000000000000000000" #h"DC16F91F486975C2762AAEF8E4C66543") (:ecb-mode-test #h"000000000000000000000080000000000000000000000000" #h"00000000000000000000000000000000" #h"7CC222B3C5866AC0F27A60C9D9713981") (:ecb-mode-test #h"000000000000000000000040000000000000000000000000" #h"00000000000000000000000000000000" #h"B7F625FC185B3ACEF820AF59570370FD") (:ecb-mode-test #h"000000000000000000000020000000000000000000000000" #h"00000000000000000000000000000000" #h"8AA59EA7476AFE267D7745A2A5E1D0CB") (:ecb-mode-test #h"000000000000000000000010000000000000000000000000" #h"00000000000000000000000000000000" #h"DDB9E4AA397029E10ED5F1984513280B") (:ecb-mode-test #h"000000000000000000000008000000000000000000000000" #h"00000000000000000000000000000000" #h"C92B81F3061A4ABC6C35D1B0AF2BA410") (:ecb-mode-test #h"000000000000000000000004000000000000000000000000" #h"00000000000000000000000000000000" #h"05F510BA96377001A23093980C02FBCD") (:ecb-mode-test #h"000000000000000000000002000000000000000000000000" #h"00000000000000000000000000000000" #h"A22D14EBC78B338735CA0AAD155B0114") (:ecb-mode-test #h"000000000000000000000001000000000000000000000000" #h"00000000000000000000000000000000" #h"C562318B01D5235CCD4DC3D3A8B10DA0") (:ecb-mode-test #h"000000000000000000000000800000000000000000000000" #h"00000000000000000000000000000000" #h"FA248CAA2F7C4B029054A31917BE9B47") (:ecb-mode-test #h"000000000000000000000000400000000000000000000000" #h"00000000000000000000000000000000" #h"FCC4E2E3C6E5DB8DECBF2493E3A52B9A") (:ecb-mode-test #h"000000000000000000000000200000000000000000000000" #h"00000000000000000000000000000000" #h"C5D23718F33ADC9F8B3B35263E47248A") (:ecb-mode-test #h"000000000000000000000000100000000000000000000000" #h"00000000000000000000000000000000" #h"773E59C9CA8EFD081E1CFD4F3DF4BC16") (:ecb-mode-test #h"000000000000000000000000080000000000000000000000" #h"00000000000000000000000000000000" #h"9A5E5AB516ECEA600952D25684DFF5E9") (:ecb-mode-test #h"000000000000000000000000040000000000000000000000" #h"00000000000000000000000000000000" #h"4EB9B9CC17E48F68423C884D64091022") (:ecb-mode-test #h"000000000000000000000000020000000000000000000000" #h"00000000000000000000000000000000" #h"0CCD75BECA8406EBF53CB0ABB1B46B23") (:ecb-mode-test #h"000000000000000000000000010000000000000000000000" #h"00000000000000000000000000000000" #h"0242108DABD2ED9886E8ABD70AA97B29") (:ecb-mode-test #h"000000000000000000000000008000000000000000000000" #h"00000000000000000000000000000000" #h"C52A6EB2958C995465C4F870F1A8269E") (:ecb-mode-test #h"000000000000000000000000004000000000000000000000" #h"00000000000000000000000000000000" #h"5FD2C7F3C81B013B96EC3ACBB0688175") (:ecb-mode-test #h"000000000000000000000000002000000000000000000000" #h"00000000000000000000000000000000" #h"1E63A0B10B0293A8572FD7749ACB9A53") (:ecb-mode-test #h"000000000000000000000000001000000000000000000000" #h"00000000000000000000000000000000" #h"9E1D466FA752C13AF4296CFFB8566DB2") (:ecb-mode-test #h"000000000000000000000000000800000000000000000000" #h"00000000000000000000000000000000" #h"BA1A69D7AD2869734A4954553D4EF249") (:ecb-mode-test #h"000000000000000000000000000400000000000000000000" #h"00000000000000000000000000000000" #h"EC2E7D615474B0B08D47AFCBE4FD8402") (:ecb-mode-test #h"000000000000000000000000000200000000000000000000" #h"00000000000000000000000000000000" #h"5C295AA2183B5FB9498094DB774244D1") (:ecb-mode-test #h"000000000000000000000000000100000000000000000000" #h"00000000000000000000000000000000" #h"1C5A17D1BE0D9EDCF339DB3D2631F236") (:ecb-mode-test #h"000000000000000000000000000080000000000000000000" #h"00000000000000000000000000000000" #h"CF6E9758B39149E3E29FB66CD58D0976") (:ecb-mode-test #h"000000000000000000000000000040000000000000000000" #h"00000000000000000000000000000000" #h"4F3FF2CAB95F678D85207691BFDAB811") (:ecb-mode-test #h"000000000000000000000000000020000000000000000000" #h"00000000000000000000000000000000" #h"463F1FCDF4A918300A93D7BED72F788B") (:ecb-mode-test #h"000000000000000000000000000010000000000000000000" #h"00000000000000000000000000000000" #h"CA5C88802CF0520C6521B106F4A58977") (:ecb-mode-test #h"000000000000000000000000000008000000000000000000" #h"00000000000000000000000000000000" #h"95C83D16F101B16E82D9DF9108A6805A") (:ecb-mode-test #h"000000000000000000000000000004000000000000000000" #h"00000000000000000000000000000000" #h"F98E0BE43F35A4CD52F93FD0877C1638") (:ecb-mode-test #h"000000000000000000000000000002000000000000000000" #h"00000000000000000000000000000000" #h"3B0D41F3A12DE6BDACFCA225F1344D77") (:ecb-mode-test #h"000000000000000000000000000001000000000000000000" #h"00000000000000000000000000000000" #h"BCB6197992A90A62497B53EC8E7E5857") (:ecb-mode-test #h"000000000000000000000000000000800000000000000000" #h"00000000000000000000000000000000" #h"9CA86B881701310C33F6CB2911ED777E") (:ecb-mode-test #h"000000000000000000000000000000400000000000000000" #h"00000000000000000000000000000000" #h"DDF4EBC89B16643E7B4F0B43AB3FC443") (:ecb-mode-test #h"000000000000000000000000000000200000000000000000" #h"00000000000000000000000000000000" #h"650AA74CDF7C5E92720E02A87ECA8FB2") (:ecb-mode-test #h"000000000000000000000000000000100000000000000000" #h"00000000000000000000000000000000" #h"F44E947B2A18F15189884E55EAC372CD") (:ecb-mode-test #h"000000000000000000000000000000080000000000000000" #h"00000000000000000000000000000000" #h"A4CC79AB8F6ABA941D400B45C32DA248") (:ecb-mode-test #h"000000000000000000000000000000040000000000000000" #h"00000000000000000000000000000000" #h"3C49EE1D3E4D8FD1E5CE9C793511F2E7") (:ecb-mode-test #h"000000000000000000000000000000020000000000000000" #h"00000000000000000000000000000000" #h"49199A91A32424357890F5C8E08E168C") (:ecb-mode-test #h"000000000000000000000000000000010000000000000000" #h"00000000000000000000000000000000" #h"438EBCC76304C4231DCDBDF85A876A85") (:ecb-mode-test #h"000000000000000000000000000000008000000000000000" #h"00000000000000000000000000000000" #h"DD04C176440BBC6686C90AEE775BD368") (:ecb-mode-test #h"000000000000000000000000000000004000000000000000" #h"00000000000000000000000000000000" #h"1DBAE21DF9D10630D8E9BA704AA3A6E2") (:ecb-mode-test #h"000000000000000000000000000000002000000000000000" #h"00000000000000000000000000000000" #h"F46B5DF361FF1A58AD233A2884E9B73B") (:ecb-mode-test #h"000000000000000000000000000000001000000000000000" #h"00000000000000000000000000000000" #h"DBD49C75B6CCA6CCEF0423FF3941922A") (:ecb-mode-test #h"000000000000000000000000000000000800000000000000" #h"00000000000000000000000000000000" #h"2C62774D20D574A487057A24280EBBC9") (:ecb-mode-test #h"000000000000000000000000000000000400000000000000" #h"00000000000000000000000000000000" #h"A6E24FFF68DF51B5613692D4098F7E22") (:ecb-mode-test #h"000000000000000000000000000000000200000000000000" #h"00000000000000000000000000000000" #h"A961B427D5FCD129EE29830DBD2952DD") (:ecb-mode-test #h"000000000000000000000000000000000100000000000000" #h"00000000000000000000000000000000" #h"7F637C136F8A57358DD5229B5E3BC38C") (:ecb-mode-test #h"000000000000000000000000000000000080000000000000" #h"00000000000000000000000000000000" #h"6FC5A39B35D2EF01B808E20C05DB9DDE") (:ecb-mode-test #h"000000000000000000000000000000000040000000000000" #h"00000000000000000000000000000000" #h"95E085E82A0883C8F6C1C83D6F4DF270") (:ecb-mode-test #h"000000000000000000000000000000000020000000000000" #h"00000000000000000000000000000000" #h"BDEE30731D4CD3593E46D9A8222485CC") (:ecb-mode-test #h"000000000000000000000000000000000010000000000000" #h"00000000000000000000000000000000" #h"508B5BB4ECCE303014D5A9ABB47DD30D") (:ecb-mode-test #h"000000000000000000000000000000000008000000000000" #h"00000000000000000000000000000000" #h"047832614B07AEABC28A39D5E72007C9") (:ecb-mode-test #h"000000000000000000000000000000000004000000000000" #h"00000000000000000000000000000000" #h"C1D4B662EE239A6DB9262B23C561B677") (:ecb-mode-test #h"000000000000000000000000000000000002000000000000" #h"00000000000000000000000000000000" #h"E567714DF47D43F1505D318C8D553062") (:ecb-mode-test #h"000000000000000000000000000000000001000000000000" #h"00000000000000000000000000000000" #h"CDF70F29AFD13EC6820D2C126D053DC4") (:ecb-mode-test #h"000000000000000000000000000000000000800000000000" #h"00000000000000000000000000000000" #h"182F2FD0ADC68D8DC72B08AC17E642C1") (:ecb-mode-test #h"000000000000000000000000000000000000400000000000" #h"00000000000000000000000000000000" #h"5DAA43AFBCD59026C0C410072A263673") (:ecb-mode-test #h"000000000000000000000000000000000000200000000000" #h"00000000000000000000000000000000" #h"E0C6DD7A8971A7D21AFAE153F115D658") (:ecb-mode-test #h"000000000000000000000000000000000000100000000000" #h"00000000000000000000000000000000" #h"4ED2DAA970922690D8CDF6CDFDA2E8D3") (:ecb-mode-test #h"000000000000000000000000000000000000080000000000" #h"00000000000000000000000000000000" #h"C1F929B679E007B1DDBBE896CE91C8C5") (:ecb-mode-test #h"000000000000000000000000000000000000040000000000" #h"00000000000000000000000000000000" #h"2323F5569BA740E14E05E0FB0914CE44") (:ecb-mode-test #h"000000000000000000000000000000000000020000000000" #h"00000000000000000000000000000000" #h"875AFCE0522E00712AB29E0E77BA57D2") (:ecb-mode-test #h"000000000000000000000000000000000000010000000000" #h"00000000000000000000000000000000" #h"A6185ECBDEFEB900335BAB38D95D7583") (:ecb-mode-test #h"000000000000000000000000000000000000008000000000" #h"00000000000000000000000000000000" #h"1331B89B377EA2A88A181907300BC50C") (:ecb-mode-test #h"000000000000000000000000000000000000004000000000" #h"00000000000000000000000000000000" #h"FC9D177C5B5D072E041D6C2F9EE6B536") (:ecb-mode-test #h"000000000000000000000000000000000000002000000000" #h"00000000000000000000000000000000" #h"5BCE1EA4FD0CC1EDE325DCEB55790565") (:ecb-mode-test #h"000000000000000000000000000000000000001000000000" #h"00000000000000000000000000000000" #h"937FE02D20FCB72F0F57201012B88BA4") (:ecb-mode-test #h"000000000000000000000000000000000000000800000000" #h"00000000000000000000000000000000" #h"5280E7768E573DC74DB90ABDC10422FE") (:ecb-mode-test #h"000000000000000000000000000000000000000400000000" #h"00000000000000000000000000000000" #h"0995E2D8E83C853C58ECF916E8067C3A") (:ecb-mode-test #h"000000000000000000000000000000000000000200000000" #h"00000000000000000000000000000000" #h"98DF44D404B5BD54CA5D55D08E7F1B12") (:ecb-mode-test #h"000000000000000000000000000000000000000100000000" #h"00000000000000000000000000000000" #h"9FD5F1165CD60FA5229CF03080428664") (:ecb-mode-test #h"000000000000000000000000000000000000000080000000" #h"00000000000000000000000000000000" #h"B4AE95212E3E8FFD6B27D4F0CC079CCA") (:ecb-mode-test #h"000000000000000000000000000000000000000040000000" #h"00000000000000000000000000000000" #h"878BD051874AB0BAC12EA94C60CC2671") (:ecb-mode-test #h"000000000000000000000000000000000000000020000000" #h"00000000000000000000000000000000" #h"3B0F2EF2A0849425063F49E65DF4D3AB") (:ecb-mode-test #h"000000000000000000000000000000000000000010000000" #h"00000000000000000000000000000000" #h"07D4297668485EBBF0F9266C203407E2") (:ecb-mode-test #h"000000000000000000000000000000000000000008000000" #h"00000000000000000000000000000000" #h"C2ECFB79C073BD453BDD2323C77FF80D") (:ecb-mode-test #h"000000000000000000000000000000000000000004000000" #h"00000000000000000000000000000000" #h"5173B04FC7C211CA17161164B79D0AE7") (:ecb-mode-test #h"000000000000000000000000000000000000000002000000" #h"00000000000000000000000000000000" #h"5135A445A721783AACD06930D39F72C4") (:ecb-mode-test #h"000000000000000000000000000000000000000001000000" #h"00000000000000000000000000000000" #h"A511E849B1B75DC94B1D73D957B53D78") (:ecb-mode-test #h"000000000000000000000000000000000000000000800000" #h"00000000000000000000000000000000" #h"42312B67F192D72B73689C712D60EAB7") (:ecb-mode-test #h"000000000000000000000000000000000000000000400000" #h"00000000000000000000000000000000" #h"30C89A160855BC3F339A170B715DD482") (:ecb-mode-test #h"000000000000000000000000000000000000000000200000" #h"00000000000000000000000000000000" #h"8DC19A7A97319A3309B98797A59954FA") (:ecb-mode-test #h"000000000000000000000000000000000000000000100000" #h"00000000000000000000000000000000" #h"D0AA5A8B9DFF98E18281E5FF20CCA3DE") (:ecb-mode-test #h"000000000000000000000000000000000000000000080000" #h"00000000000000000000000000000000" #h"AFA70EF4B45EA22E90108B834019120A") (:ecb-mode-test #h"000000000000000000000000000000000000000000040000" #h"00000000000000000000000000000000" #h"2801C6A5C0547CB988A2137A559D12B0") (:ecb-mode-test #h"000000000000000000000000000000000000000000020000" #h"00000000000000000000000000000000" #h"D791F5709D4AFE0642955F1B072F144E") (:ecb-mode-test #h"000000000000000000000000000000000000000000010000" #h"00000000000000000000000000000000" #h"35BB50E6D59A693709DE9B88CC8581F6") (:ecb-mode-test #h"000000000000000000000000000000000000000000008000" #h"00000000000000000000000000000000" #h"9B58CC95279539C1AF0BBC274A62F5C8") (:ecb-mode-test #h"000000000000000000000000000000000000000000004000" #h"00000000000000000000000000000000" #h"F51803FF4EA1B0F0AFF1C68C5C98CB3A") (:ecb-mode-test #h"000000000000000000000000000000000000000000002000" #h"00000000000000000000000000000000" #h"975B5309F1D3ACE9BA08B3D2D3FCB43E") (:ecb-mode-test #h"000000000000000000000000000000000000000000001000" #h"00000000000000000000000000000000" #h"D53CD9381EA85B0C106C22DA611F7336") (:ecb-mode-test #h"000000000000000000000000000000000000000000000800" #h"00000000000000000000000000000000" #h"393270B47546F1BFE35690ACCAC0FEBD") (:ecb-mode-test #h"000000000000000000000000000000000000000000000400" #h"00000000000000000000000000000000" #h"53E21284948996FC03ED9BCC34B45B61") (:ecb-mode-test #h"000000000000000000000000000000000000000000000200" #h"00000000000000000000000000000000" #h"AD9CA2740670DA740C75703A8859382B") (:ecb-mode-test #h"000000000000000000000000000000000000000000000100" #h"00000000000000000000000000000000" #h"AC9C2960E3061E56D8B9A1CDD3EED010") (:ecb-mode-test #h"000000000000000000000000000000000000000000000080" #h"00000000000000000000000000000000" #h"E5F68B122D15823F131DEA0468977D70") (:ecb-mode-test #h"000000000000000000000000000000000000000000000040" #h"00000000000000000000000000000000" #h"7EB7C6460FE9885BC96AFD4D4B65E90E") (:ecb-mode-test #h"000000000000000000000000000000000000000000000020" #h"00000000000000000000000000000000" #h"409147483ADC22592CA41224D35BB323") (:ecb-mode-test #h"000000000000000000000000000000000000000000000010" #h"00000000000000000000000000000000" #h"AB61745316651F61F4E2CC1DFBF8135C") (:ecb-mode-test #h"000000000000000000000000000000000000000000000008" #h"00000000000000000000000000000000" #h"88977EAD91ECF9C83F33EBE41FB7410C") (:ecb-mode-test #h"000000000000000000000000000000000000000000000004" #h"00000000000000000000000000000000" #h"9DC923136A1882D73CB412C986103481") (:ecb-mode-test #h"000000000000000000000000000000000000000000000002" #h"00000000000000000000000000000000" #h"9914219ED77B8FA772B4B8C53F9AD2FC") (:ecb-mode-test #h"000000000000000000000000000000000000000000000001" #h"00000000000000000000000000000000" #h"B9A0FA2324625650A2052D691E7DE9C3") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"80000000000000000000000000000000" #h"A600B72AAC4DFB5271DC45F563FAE428") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"40000000000000000000000000000000" #h"A7B1D7CBFBAB741B41744FF9100529B4") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"20000000000000000000000000000000" #h"D9AAAA866BAB0D68AFFC39CF9888B8C6") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"10000000000000000000000000000000" #h"32B0048A204036E1B45DE285E87E57B8") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"08000000000000000000000000000000" #h"7267FEE7E04ACEB47C8FCC4096720484") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"04000000000000000000000000000000" #h"FF0C22F756C2F5EBDC6610F085D74383") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"02000000000000000000000000000000" #h"A6264FBCB2926C6181AA6F5551244B2F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"01000000000000000000000000000000" #h"D3A5B8FB3CBAA98419D394BB4C66B9D7") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00800000000000000000000000000000" #h"F9FE5D1BA274021F041023CD9AC20399") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00400000000000000000000000000000" #h"7307F7DEBBEFD911B0B590A0667E093D") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00200000000000000000000000000000" #h"4D8A3B987A1E66E72B3FFA520DDD57BB") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00100000000000000000000000000000" #h"0F444C0A7334947DBCB43D72F897E72F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00080000000000000000000000000000" #h"448F29B848D7CFDA617D8A64AC518B0C") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00040000000000000000000000000000" #h"261B4EA7CD31F46C4FBF684395ED7FB8") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00020000000000000000000000000000" #h"25FA5AD347C57047749B15B97FE8ABE6") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00010000000000000000000000000000" #h"F7E13200EBA3F6E8E9F37B092B907961") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00008000000000000000000000000000" #h"9C934B121791B35AFE509A0D5A04BBF2") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00004000000000000000000000000000" #h"3C0F9D40F9608091CDFD831DD6D215EA") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00002000000000000000000000000000" #h"97D7D2AF2F635D43E536E0A5AA18C61E") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00001000000000000000000000000000" #h"1E41EB291C07ECF0908D49A9CBFAB57E") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000800000000000000000000000000" #h"C9CCEB56AF06C494582F2C966EEEFD07") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000400000000000000000000000000" #h"4B21E0D2942CCD21501F698ACA866BD0") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000200000000000000000000000000" #h"BA0DC6ACC50486AD389EF65B5677DE19") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000100000000000000000000000000" #h"EB80DE49F3D5605D9C3CE426EC80FAFD") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000080000000000000000000000000" #h"D6984153BF67512062F876966BD190F3") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000040000000000000000000000000" #h"AC789910F3458D59C5090BE936C6682A") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000020000000000000000000000000" #h"5D64A268407F791DBDAFD0E5C6399A64") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000010000000000000000000000000" #h"2B4F25AC69BA3AD941BBD4E1ECC75E79") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000008000000000000000000000000" #h"FB943544937F3A34DFA0548C0257CE53") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000004000000000000000000000000" #h"125A04339B61FA79FA3757576EC4FAA1") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000002000000000000000000000000" #h"160B88277AC4C81603BD37ECA4FD73DC") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000001000000000000000000000000" #h"4D65B09355F893E26C85E85955767604") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000800000000000000000000000" #h"1EE56A4AB4811DC3B17401CBAA8F5A15") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000400000000000000000000000" #h"6214728772DBD2CDA3124BA8BA2ABF38") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000200000000000000000000000" #h"328B60EDD6FD150934A30100286E07B5") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000100000000000000000000000" #h"2C976B076409056EA7489C7658BB34B9") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000080000000000000000000000" #h"D592EBBA861BBCC369DA99F832B0A773") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000040000000000000000000000" #h"E6F48FB373724153FFFC51758527C6E8") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000020000000000000000000000" #h"6C397B0BF5992740BD6A787F16BD511C") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000010000000000000000000000" #h"2CA57FEE77351E747799C8855780C63F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000008000000000000000000000" #h"194C42AA377D361BBDF283693171FFDB") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000004000000000000000000000" #h"61832D4C637CCE219D2FBB36ACF7992E") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000002000000000000000000000" #h"945D2B20B9FD48F1961D04DBBA1708B5") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000001000000000000000000000" #h"EC152810AA2771AA5E871949BF12B6F1") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000800000000000000000000" #h"E87712941A7EE80510D53509311196B7") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000400000000000000000000" #h"776820A0500F2D90D4DF36F50C395674") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000200000000000000000000" #h"64958DB0758C1E80FCFCBB9FC6195E6D") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000100000000000000000000" #h"37F27D1D918D463B0668A470DE898AB9") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000080000000000000000000" #h"AA71549A4B290289C7060D76FF5A20BC") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000040000000000000000000" #h"95EF0C6213EB7CF56186D76BFA617174") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000020000000000000000000" #h"2F6A4BD794419F9F34CFD0FED825B6CD") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000010000000000000000000" #h"882C2B9E19854367479F0EE25D086F4E") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000008000000000000000000" #h"D246FD18C625C1846741544EC4CE60B6") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000004000000000000000000" #h"9EAF5A8C5673BE9F488D5C7B6521BD8C") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000002000000000000000000" #h"9E7A685F738CB391FAE6ED184087630C") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000001000000000000000000" #h"5E0AC39E49825B2424C7263AA8824232") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000800000000000000000" #h"0B06C4805E20BC990E601E5610A1BEAD") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000400000000000000000" #h"78A99615E809CA88F6F6C6E9AFA532FF") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000200000000000000000" #h"9ACF5CC740AA37663000C89C5F8EE8D8") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000100000000000000000" #h"35D76EBA8F59CA6A78FC2942AC5F7F43") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000080000000000000000" #h"39AD4C9AE2B4D46EF693303B54B53546") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000040000000000000000" #h"EA0833009C96171EAA2BFDEF50DEE473") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000020000000000000000" #h"868A8E86F525E50D3FF33A094A3AE119") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000010000000000000000" #h"3DBB9A366A2A3A660F027191B3613B95") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000008000000000000000" #h"E4CDE1FC6D811CDC25328CDAC8D0AD2B") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000004000000000000000" #h"332010FB6E39F82F00DC1FF6B6F8CFE6") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000002000000000000000" #h"00293BFE5BB3DA2D3652D4E06EE361B2") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000001000000000000000" #h"9BC99B26E0114669EFE218BF014A15AA") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000800000000000000" #h"43C358B6DAB480D0EAEB96DCE57E5B85") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000400000000000000" #h"9842333B8E9FCEC35A8779CCCA7D025A") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000200000000000000" #h"5A47529DB0D103DCC34D2ADD3A19C53F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000100000000000000" #h"8F705A89D4C6EE7E27A14792EC49B652") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000080000000000000" #h"6D4B9905F05096B23D6C13565588F012") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000040000000000000" #h"23DDD34E8598F013C0559B3312341DBA") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000020000000000000" #h"7B5AE9F49ACC68F2FEECB2823C3868A9") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000010000000000000" #h"09F8EED21EB8EE33C02B90637EF24E6B") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000008000000000000" #h"00A2E8DB0417F61EAABAD6E9BF13E4BC") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000004000000000000" #h"CF5DB5AA31599EEDB5A3143E08D23672") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000002000000000000" #h"E09B69B9C0E3365C0EDA54AB3310A5AC") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000001000000000000" #h"33650F826366AEC9A09D7D038708737D") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000800000000000" #h"E84A1EE9A00BA66952B24A6E6AD0C002") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000400000000000" #h"11B1E0969380A0A24E876D6470872796") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000200000000000" #h"D88FCA95FA29C35FDCD9467715F102D7") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000100000000000" #h"A78B86EF0E6959C08F70C810AF8E99CD") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000080000000000" #h"A83E4F27E34360C8033CBC304EBBDF0C") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000040000000000" #h"0AA5B4F05A0B42358ABF19F6E55F66D2") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000020000000000" #h"5C2AC2588982E3CCE99994101FC0A21A") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000010000000000" #h"60A3E107674A0B7F7B931C6EC35BC747") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000008000000000" #h"123D266844DFFF63DA93C4D806325660") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000004000000000" #h"08170908422DCB46EEB046F3D7E4AE3A") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000002000000000" #h"13754D93DC4807807A9535388553FB47") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000001000000000" #h"DFA9741DD3883E39FED5716A706A65EC") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000800000000" #h"CA5C3DCA7BE84DCBE33BF5238EA3F4B0") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000400000000" #h"6EBEED89B297D6918FA5CEAB7A0E985E") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000200000000" #h"3F79AB2119DEBCC44675E340C25B7D85") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000100000000" #h"A7739DE45E6051EBBDC2F0365859BEE0") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000080000000" #h"CEA0C2B3C653B7553605BACCFDD62DF8") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000040000000" #h"7F9742EEE96193CA8981739712F73045") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000020000000" #h"F0103101F4EC92C0CB48145FF34CF51F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000010000000" #h"55A8A3B02951558F343C160E7F86288D") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000008000000" #h"3F9206DB4F3083E8F6EEC33CFE2C1BBF") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000004000000" #h"F012723B2F08A28A5E24BB959FA5EFDD") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000002000000" #h"1A28919DB3AB4A53D5A0E1E566982DF7") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000001000000" #h"E17C960B43B7E926C83DF749C6A5532F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000800000" #h"16DF63CFB77D31CC782C0ED3190136AD") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000400000" #h"1643D697AC4075EC6FE609472FA4C678") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000200000" #h"AD76BF6119FFC36369980D3466CF6570") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000100000" #h"554E53F64D99F89A5BAA7FD5B70E0BD1") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000080000" #h"BDC10FF10FA5E3A41B096C870666DECB") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000040000" #h"6B12E2408646228502972EA7580B05E1") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000020000" #h"B9583810806D5A491B2F69FFF2D2A327") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000010000" #h"E8E9F4A50B834DDEF307503AECD8A3BC") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000008000" #h"D7F4A1C7F7954E789BD61007866FFA80") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000004000" #h"953D7D0FD6DDD25CA25FA23C9322339F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000002000" #h"CD4E607B4324CEC7372DE19CEA5AEF78") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000001000" #h"9B5C29709E0F0E586383EAB29E884009") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000800" #h"28B822B70E7430E44182C2BBAED4D88D") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000400" #h"D2325AF7325642138C355BC4ACAF938F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000200" #h"F4D1A000EC3A370B5A6386355CEE010C") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000100" #h"F9D198D9FDC650AFA72320AD4826506B") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000080" #h"5024595BEB4DAA2239D495BB023757EA") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000040" #h"8A6CDA8F518CA2FB0A860C5567C60104") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000020" #h"D6D90C40B07164436453E8312A633109") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000010" #h"3E73330AE10DF1B8B81D9CA72221E192") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000008" #h"5029AE60BF118AA69E47B235C3551490") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000004" #h"7299F32614EA0BD98D2375CA643EC47F") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000002" #h"DF4A7B804A4D3A13113529C509F8BAF6") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000001" #h"3EFC3791618B7D832BFA6AE030C09122") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6CD61BCB190B30384E8A3F168690AE82") (:ecb-mode-test #h"010101010101010101010101010101010101010101010101" #h"01010101010101010101010101010101" #h"142AA9F25DD64A8A6444304735AA6641") (:ecb-mode-test #h"020202020202020202020202020202020202020202020202" #h"02020202020202020202020202020202" #h"027D0E59F566E4EB40C59028971DE4DC") (:ecb-mode-test #h"030303030303030303030303030303030303030303030303" #h"03030303030303030303030303030303" #h"A9D4D9EF1B3CE468861211E5A738978F") (:ecb-mode-test #h"040404040404040404040404040404040404040404040404" #h"04040404040404040404040404040404" #h"9B944CD76B1C1AFD8E4D479D31A170C2") (:ecb-mode-test #h"050505050505050505050505050505050505050505050505" #h"05050505050505050505050505050505" #h"C773DDAE2D6DBB11AE23A98D78A2BFD7") (:ecb-mode-test #h"060606060606060606060606060606060606060606060606" #h"06060606060606060606060606060606" #h"890C6F733FCF1D7E41A468B341213ED6") (:ecb-mode-test #h"070707070707070707070707070707070707070707070707" #h"07070707070707070707070707070707" #h"477C7DD627EB6699EB1B31AE9059D9FC") (:ecb-mode-test #h"080808080808080808080808080808080808080808080808" #h"08080808080808080808080808080808" #h"0C0C610409A8D91FEA4571F3E2928FA2") (:ecb-mode-test #h"090909090909090909090909090909090909090909090909" #h"09090909090909090909090909090909" #h"D045C56F48507DD57F530AC780B25588") (:ecb-mode-test #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"BCFC44E38461031178EC0172B0360946") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"88C1E0B1822115AD4989AAEB0AE8AEA7") (:ecb-mode-test #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"56EB958E5FCA5254221BE0A2FFA051D7") (:ecb-mode-test #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"D7DB722328CAD284BD4AAD1DEA2FAF62") (:ecb-mode-test #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"E078A45C84ECFE8C92122CEAA1E8BCBC") (:ecb-mode-test #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"F36960995C348DBD8DD062D4D5A89DCD") (:ecb-mode-test #h"101010101010101010101010101010101010101010101010" #h"10101010101010101010101010101010" #h"A8AA6F653475EC3F44253D171EF80054") (:ecb-mode-test #h"111111111111111111111111111111111111111111111111" #h"11111111111111111111111111111111" #h"AD7E4BA8610D935ABAF1544F93726A78") (:ecb-mode-test #h"121212121212121212121212121212121212121212121212" #h"12121212121212121212121212121212" #h"9EDA195C727103015CD512E058791749") (:ecb-mode-test #h"131313131313131313131313131313131313131313131313" #h"13131313131313131313131313131313" #h"76DAE7FD31F3B7317B40C35BAD704AAB") (:ecb-mode-test #h"141414141414141414141414141414141414141414141414" #h"14141414141414141414141414141414" #h"0EA9AD6FBD0BAE067EBEBF3D5593196E") (:ecb-mode-test #h"151515151515151515151515151515151515151515151515" #h"15151515151515151515151515151515" #h"B5875237099EEC0A4C53202235A33D15") (:ecb-mode-test #h"161616161616161616161616161616161616161616161616" #h"16161616161616161616161616161616" #h"F12DBE56066290FA3A7CD1C22E73DDDD") (:ecb-mode-test #h"171717171717171717171717171717171717171717171717" #h"17171717171717171717171717171717" #h"ABC9F137F453E79DCF2D6AABE4E7858D") (:ecb-mode-test #h"181818181818181818181818181818181818181818181818" #h"18181818181818181818181818181818" #h"5D846BBA803CE96E5A842B409C470745") (:ecb-mode-test #h"191919191919191919191919191919191919191919191919" #h"19191919191919191919191919191919" #h"12E6B6E0167FB418D929AFB38A029189") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"D8D9BBE0A2DE0A70106F560BBBB02A8F") (:ecb-mode-test #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"5560DE385820F3FA6C138767FBADA226") (:ecb-mode-test #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"F53279EAC16C11FED708C4DB841DB372") (:ecb-mode-test #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"E6704A7E55D35C2636BCEF75A9004442") (:ecb-mode-test #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"48B51FD3C42320E42ABCC3C1D9C68FC8") (:ecb-mode-test #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"DDB77628D91D3C410D9FA61D57285D1C") (:ecb-mode-test #h"202020202020202020202020202020202020202020202020" #h"20202020202020202020202020202020" #h"67718DA41AA70EA260A05C4357F7CF9B") (:ecb-mode-test #h"212121212121212121212121212121212121212121212121" #h"21212121212121212121212121212121" #h"794C763D6A8CDB04231E8D1D06328A05") (:ecb-mode-test #h"222222222222222222222222222222222222222222222222" #h"22222222222222222222222222222222" #h"5982B918E193D69420DFAF9707083CB4") (:ecb-mode-test #h"232323232323232323232323232323232323232323232323" #h"23232323232323232323232323232323" #h"DA4D581382B09DD7DC8195FED2C5A51C") (:ecb-mode-test #h"242424242424242424242424242424242424242424242424" #h"24242424242424242424242424242424" #h"D5212C15A5C197D7CFC5B0C5B992F368") (:ecb-mode-test #h"252525252525252525252525252525252525252525252525" #h"25252525252525252525252525252525" #h"714B8415147ABCAC84BC737F4564CAC5") (:ecb-mode-test #h"262626262626262626262626262626262626262626262626" #h"26262626262626262626262626262626" #h"A12882BF1C4C764EDC0DE3BB194E7133") (:ecb-mode-test #h"272727272727272727272727272727272727272727272727" #h"27272727272727272727272727272727" #h"AFB7B55686201AFF7317E1B51CC1EBA2") (:ecb-mode-test #h"282828282828282828282828282828282828282828282828" #h"28282828282828282828282828282828" #h"41628154531FF7B12020706484FEFEA2") (:ecb-mode-test #h"292929292929292929292929292929292929292929292929" #h"29292929292929292929292929292929" #h"DC1E858FDC36FBF3FCEE00039F2AA0B5") (:ecb-mode-test #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"35762CCFABF983E2E70DBCE5AEBE7219") (:ecb-mode-test #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"285EA5899F0FEAB729974A75E40D3E8C") (:ecb-mode-test #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"A308360BCC0C2CB210F6B16C64567010") (:ecb-mode-test #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"E56FB73531A6E6BB83783C3896D6F027") (:ecb-mode-test #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"9A7A4908AEACC28F55C0E79CB33EF20A") (:ecb-mode-test #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"76D5DC61B62C82CF86B853321682AECD") (:ecb-mode-test #h"303030303030303030303030303030303030303030303030" #h"30303030303030303030303030303030" #h"E4FE632B6D3BDF0C4763557DCB46DA9B") (:ecb-mode-test #h"313131313131313131313131313131313131313131313131" #h"31313131313131313131313131313131" #h"69DFBE7D5240AC8838F4F32B669A8C28") (:ecb-mode-test #h"323232323232323232323232323232323232323232323232" #h"32323232323232323232323232323232" #h"28F6797D7416C245B77679E15AF77DA1") (:ecb-mode-test #h"333333333333333333333333333333333333333333333333" #h"33333333333333333333333333333333" #h"990BC9672F79EEAB8D0E6EC351FD57A6") (:ecb-mode-test #h"343434343434343434343434343434343434343434343434" #h"34343434343434343434343434343434" #h"802C87F88AF644AB0A045D679876B5CB") (:ecb-mode-test #h"353535353535353535353535353535353535353535353535" #h"35353535353535353535353535353535" #h"F9CF723564C34AE5B702AFD8392B15EA") (:ecb-mode-test #h"363636363636363636363636363636363636363636363636" #h"36363636363636363636363636363636" #h"D5B223E24A77978DA25D9392634B3C11") (:ecb-mode-test #h"373737373737373737373737373737373737373737373737" #h"37373737373737373737373737373737" #h"45262C366C3AB97F1ECD9197E6BC4F5F") (:ecb-mode-test #h"383838383838383838383838383838383838383838383838" #h"38383838383838383838383838383838" #h"A0535C0EE4CD69D8296A7B680A343AC4") (:ecb-mode-test #h"393939393939393939393939393939393939393939393939" #h"39393939393939393939393939393939" #h"88052146B98BAB8ACE2FC5A91BF4B7A7") (:ecb-mode-test #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"F7562819928EEEA2486B56BD932EDF1E") (:ecb-mode-test #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"F55C01154B81E31C56F821A4F06FF244") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"D5ED34A900D38DB5632F0BBAFAD5792E") (:ecb-mode-test #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"13BCD4A8E28C352A305BAC636ABF0200") (:ecb-mode-test #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"677C7E5157A116FF5B92A2C21A846DCD") (:ecb-mode-test #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"2D2A719202601C1B2EF6D05BCC5C7DB9") (:ecb-mode-test #h"404040404040404040404040404040404040404040404040" #h"40404040404040404040404040404040" #h"0E4D9981D1E4D3D23811323E7E16B950") (:ecb-mode-test #h"414141414141414141414141414141414141414141414141" #h"41414141414141414141414141414141" #h"66EF378278F3F79BB7811C3D6FB90AD3") (:ecb-mode-test #h"424242424242424242424242424242424242424242424242" #h"42424242424242424242424242424242" #h"BFF5340ED842F459595F5FD38471C1CA") (:ecb-mode-test #h"434343434343434343434343434343434343434343434343" #h"43434343434343434343434343434343" #h"2A60F3E11DEF6D5A9F107455CF691D0E") (:ecb-mode-test #h"444444444444444444444444444444444444444444444444" #h"44444444444444444444444444444444" #h"28668C5387430A84C5899DD89D1B8A0E") (:ecb-mode-test #h"454545454545454545454545454545454545454545454545" #h"45454545454545454545454545454545" #h"490F01E815B7BC930F552DD96F4BBFFA") (:ecb-mode-test #h"464646464646464646464646464646464646464646464646" #h"46464646464646464646464646464646" #h"314B128A98582E634005133246D8788F") (:ecb-mode-test #h"474747474747474747474747474747474747474747474747" #h"47474747474747474747474747474747" #h"CBAFF2B405310E2923A366FE2B034A9B") (:ecb-mode-test #h"484848484848484848484848484848484848484848484848" #h"48484848484848484848484848484848" #h"D12855EC3FBEC40E1027BE3FAEF261D3") (:ecb-mode-test #h"494949494949494949494949494949494949494949494949" #h"49494949494949494949494949494949" #h"EF6F46A131469062E487C2E13608CBC4") (:ecb-mode-test #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"B20950595CBF0218E287C13C93AB9CF1") (:ecb-mode-test #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"203AE2C13AE730BFB03DDDE321699844") (:ecb-mode-test #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"475C99D8572AE22B0798A5DC38A49FCD") (:ecb-mode-test #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"FE801D4D9371187118FF3F64FC9B0218") (:ecb-mode-test #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"14A41A5626E7203266E2BE73287EE701") (:ecb-mode-test #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"190D0B71ED9EB775131A5AD5D2904B3B") (:ecb-mode-test #h"505050505050505050505050505050505050505050505050" #h"50505050505050505050505050505050" #h"8466377860649BD193978BF983271713") (:ecb-mode-test #h"515151515151515151515151515151515151515151515151" #h"51515151515151515151515151515151" #h"B405D04EB9E353BDE5223B4DD42163F5") (:ecb-mode-test #h"525252525252525252525252525252525252525252525252" #h"52525252525252525252525252525252" #h"A5529CD9487910E04F537B36B5BBA808") (:ecb-mode-test #h"535353535353535353535353535353535353535353535353" #h"53535353535353535353535353535353" #h"6B842FC9A563545D03685BCCDCD6B856") (:ecb-mode-test #h"545454545454545454545454545454545454545454545454" #h"54545454545454545454545454545454" #h"CE74C716ADCDD2C60B034CC3BC1613A0") (:ecb-mode-test #h"555555555555555555555555555555555555555555555555" #h"55555555555555555555555555555555" #h"A36DCFAC253D160667FACA1DC00BF429") (:ecb-mode-test #h"565656565656565656565656565656565656565656565656" #h"56565656565656565656565656565656" #h"D013F46A15095A3D4E7164B691270CC8") (:ecb-mode-test #h"575757575757575757575757575757575757575757575757" #h"57575757575757575757575757575757" #h"76128D217A927C703B526258F320B9EF") (:ecb-mode-test #h"585858585858585858585858585858585858585858585858" #h"58585858585858585858585858585858" #h"661D43017C1B48AE5CC709A56882DFFC") (:ecb-mode-test #h"595959595959595959595959595959595959595959595959" #h"59595959595959595959595959595959" #h"5619896CB9D9E4A765AA22E10AED86F9") (:ecb-mode-test #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"E9D552F76E7D739A3EF120573D7247E9") (:ecb-mode-test #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"8725E61063335C0A1599EAEE5870D6EB") (:ecb-mode-test #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"7411C01B3A5FF29BC2A834EEA1197112") (:ecb-mode-test #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"0BF495D77BF198EC62ED19DD0DB92FF7") (:ecb-mode-test #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"46A8341F67C7B4D3CCB9A67BAD2DABAA") (:ecb-mode-test #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"A41463ECE5B7F7F96AFC4A4FF514F3DE") (:ecb-mode-test #h"606060606060606060606060606060606060606060606060" #h"60606060606060606060606060606060" #h"893FD602ACE200D0746A5085311BAA8E") (:ecb-mode-test #h"616161616161616161616161616161616161616161616161" #h"61616161616161616161616161616161" #h"468A2FA54B6649291E02BE96BB67B0D2") (:ecb-mode-test #h"626262626262626262626262626262626262626262626262" #h"62626262626262626262626262626262" #h"73A1A244E502E7E250440D4745FA4550") (:ecb-mode-test #h"636363636363636363636363636363636363636363636363" #h"63636363636363636363636363636363" #h"822B7EDD011C0D8535050D9A42FA47C8") (:ecb-mode-test #h"646464646464646464646464646464646464646464646464" #h"64646464646464646464646464646464" #h"335D38E80004980416623D3F6D84EC54") (:ecb-mode-test #h"656565656565656565656565656565656565656565656565" #h"65656565656565656565656565656565" #h"A89C7B47EFAD33FA01A421D159E306D2") (:ecb-mode-test #h"666666666666666666666666666666666666666666666666" #h"66666666666666666666666666666666" #h"2685B8C0EAE7466D14DECB25102B3944") (:ecb-mode-test #h"676767676767676767676767676767676767676767676767" #h"67676767676767676767676767676767" #h"2E121F60C6661AA2C3D6CEA0D3227C46") (:ecb-mode-test #h"686868686868686868686868686868686868686868686868" #h"68686868686868686868686868686868" #h"08CA41A6D00B6C500A5C484222788E49") (:ecb-mode-test #h"696969696969696969696969696969696969696969696969" #h"69696969696969696969696969696969" #h"BB14DA91539A29F86B3B701C1F60CED3") (:ecb-mode-test #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"794CA5C449A316FAA0FC9A24199A1DC6") (:ecb-mode-test #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"6B68ACF55556986F9868A11E037A763C") (:ecb-mode-test #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"B784A6ADD6361B4B2CC0E3890B8C8647") (:ecb-mode-test #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"811EAA0B4EE6EC59024E650C5FA33D99") (:ecb-mode-test #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"948272EAA7547ACEB09D468D1DB794E8") (:ecb-mode-test #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"527E0AC9703F7391A4759353897E23FC") (:ecb-mode-test #h"707070707070707070707070707070707070707070707070" #h"70707070707070707070707070707070" #h"467F170403F1076E9F044DFEC1ADA103") (:ecb-mode-test #h"717171717171717171717171717171717171717171717171" #h"71717171717171717171717171717171" #h"0E57883FD7B0B29D8BF1648CAC05AE76") (:ecb-mode-test #h"727272727272727272727272727272727272727272727272" #h"72727272727272727272727272727272" #h"804AB457ACC8469D1B276D94F6A61321") (:ecb-mode-test #h"737373737373737373737373737373737373737373737373" #h"73737373737373737373737373737373" #h"9594EAE3F66E62A0092661755D961345") (:ecb-mode-test #h"747474747474747474747474747474747474747474747474" #h"74747474747474747474747474747474" #h"A9F6A08C545D1CACBF582168C49008A1") (:ecb-mode-test #h"757575757575757575757575757575757575757575757575" #h"75757575757575757575757575757575" #h"D2D5860796AAACA230FB103F64AD6C33") (:ecb-mode-test #h"767676767676767676767676767676767676767676767676" #h"76767676767676767676767676767676" #h"FB0EA0047D883FAD8D9389435941F273") (:ecb-mode-test #h"777777777777777777777777777777777777777777777777" #h"77777777777777777777777777777777" #h"8879538F10FDA289AC832170042B4969") (:ecb-mode-test #h"787878787878787878787878787878787878787878787878" #h"78787878787878787878787878787878" #h"B8E0812BB125789FE2830BB48152CD65") (:ecb-mode-test #h"797979797979797979797979797979797979797979797979" #h"79797979797979797979797979797979" #h"5001C9708981C78EAC4BF720EC9106C6") (:ecb-mode-test #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"A15740D064C98916A439FF78416F1FAD") (:ecb-mode-test #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"A2D4FBD605D8240385A15BBBD89BF234") (:ecb-mode-test #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"603D248544382578273F848640DCFE85") (:ecb-mode-test #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"CCEDEB7D3543B5D586D7C833D0CC1FC6") (:ecb-mode-test #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"6C0BCBC223F68EB65308D36E6A7CE054") (:ecb-mode-test #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"D587B07A5495E3B2594A8DA3BE4BCA62") (:ecb-mode-test #h"808080808080808080808080808080808080808080808080" #h"80808080808080808080808080808080" #h"99F0E435570BCBC800796CC0DF6D7654") (:ecb-mode-test #h"818181818181818181818181818181818181818181818181" #h"81818181818181818181818181818181" #h"B61AA33F5AA1FE871DEC688104F0C85D") (:ecb-mode-test #h"828282828282828282828282828282828282828282828282" #h"82828282828282828282828282828282" #h"B97EC69E0AEB4BB3EFD172E847D9697E") (:ecb-mode-test #h"838383838383838383838383838383838383838383838383" #h"83838383838383838383838383838383" #h"2AD952070BC16E82DF70257F3D0CC503") (:ecb-mode-test #h"848484848484848484848484848484848484848484848484" #h"84848484848484848484848484848484" #h"4998548EA747DDC9685E44DAF0B0EDBB") (:ecb-mode-test #h"858585858585858585858585858585858585858585858585" #h"85858585858585858585858585858585" #h"951A162352C8600A12AFF320E77BD4A6") (:ecb-mode-test #h"868686868686868686868686868686868686868686868686" #h"86868686868686868686868686868686" #h"20CED7A7FE2758AE27DACD889B7D5026") (:ecb-mode-test #h"878787878787878787878787878787878787878787878787" #h"87878787878787878787878787878787" #h"54061DF579C6F376A91E68CC6D9BD8DC") (:ecb-mode-test #h"888888888888888888888888888888888888888888888888" #h"88888888888888888888888888888888" #h"62C0001AD9D2CE1146B7037296DED530") (:ecb-mode-test #h"898989898989898989898989898989898989898989898989" #h"89898989898989898989898989898989" #h"0D6EF429DC67AFDE52F82F6B5847099E") (:ecb-mode-test #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"29FED62B4604F50BB77FD29034D95F89") (:ecb-mode-test #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"D56E7E74658B09DE318A661B71085A56") (:ecb-mode-test #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"7CE0A202393A018BD321FB660D8A156A") (:ecb-mode-test #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"AE89F2A8EF2023423D71AA9E01C816D1") (:ecb-mode-test #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"1249EF77D53670615581E7000FC6DAF9") (:ecb-mode-test #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"0DE028C4B302634BA8BD59104A0D48B1") (:ecb-mode-test #h"909090909090909090909090909090909090909090909090" #h"90909090909090909090909090909090" #h"CD689E38556B4C539EE457FD63298430") (:ecb-mode-test #h"919191919191919191919191919191919191919191919191" #h"91919191919191919191919191919191" #h"45CDF5FAA28D79100DD4A47000C5BEB0") (:ecb-mode-test #h"929292929292929292929292929292929292929292929292" #h"92929292929292929292929292929292" #h"5095E718A9DDA4D2798F5DD9B636F449") (:ecb-mode-test #h"939393939393939393939393939393939393939393939393" #h"93939393939393939393939393939393" #h"B4DA15E1D7211AE28EBD667C399D6281") (:ecb-mode-test #h"949494949494949494949494949494949494949494949494" #h"94949494949494949494949494949494" #h"AA304DDA87A3BB6C7FFB9692E034CCE9") (:ecb-mode-test #h"959595959595959595959595959595959595959595959595" #h"95959595959595959595959595959595" #h"796A7CDB8DF126B635E7C175834BC7C7") (:ecb-mode-test #h"969696969696969696969696969696969696969696969696" #h"96969696969696969696969696969696" #h"E5E956AC096977A8115AEEC027EB1F25") (:ecb-mode-test #h"979797979797979797979797979797979797979797979797" #h"97979797979797979797979797979797" #h"CC0D0AADA60579BF4B143564B57B3208") (:ecb-mode-test #h"989898989898989898989898989898989898989898989898" #h"98989898989898989898989898989898" #h"B76AFCA75AE9C61EA7E267F1E06C3C44") (:ecb-mode-test #h"999999999999999999999999999999999999999999999999" #h"99999999999999999999999999999999" #h"E3531E7712594758528B4532CDF08965") (:ecb-mode-test #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"156F4464FC8E457915262A024C8ED5AB") (:ecb-mode-test #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"114DA9E6BFE05D8D2707D0B31F4F2F0A") (:ecb-mode-test #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"6E53680FE6160DDADC1855C75C42366F") (:ecb-mode-test #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"F58D0495A8CDEB1070B089F103BCF02D") (:ecb-mode-test #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"D3E04C33260283834E1CEBCE907D0FD1") (:ecb-mode-test #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"18AE46B8BE8FBDFEDD1D9050305C1259") (:ecb-mode-test #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"871A2560BEB03121506274FC6ED2FD7E") (:ecb-mode-test #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"6C3912B32DA7EE58922CC2DF12A7F8B2") (:ecb-mode-test #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"E1B5C94595A43BBC79466C04B054D0D2") (:ecb-mode-test #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"A71912665283F0BA0A7383E33390F638") (:ecb-mode-test #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"AF9CC25E259A2C611CC02D0879055F42") (:ecb-mode-test #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"09895C28CAA32440AC84C74A00890AC6") (:ecb-mode-test #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"C4549E4724627C7E24359F804D8B774A") (:ecb-mode-test #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"B97867B7CD8D07A6EB8469A0E6CD19D0") (:ecb-mode-test #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"7C94ACCFECE37C652D5F492BB35B1D67") (:ecb-mode-test #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"F95F9C46A6323CE4EA3DBBE18B10BAD6") (:ecb-mode-test #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"CF7444A1264DD32D674DBEC5F9DE4F32") (:ecb-mode-test #h"ABABABABABABABABABABABABABABABABABABABABABABABAB" #h"ABABABABABABABABABABABABABABABAB" #h"45EE88448607FCCA142CAE0B38B89630") (:ecb-mode-test #h"ACACACACACACACACACACACACACACACACACACACACACACACAC" #h"ACACACACACACACACACACACACACACACAC" #h"C57F88EE947BCBB35ECD90DF8ACD41AA") (:ecb-mode-test #h"ADADADADADADADADADADADADADADADADADADADADADADADAD" #h"ADADADADADADADADADADADADADADADAD" #h"6A391CD6138800A43A310D94F51645A6") (:ecb-mode-test #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"F3325B5B39AD26CE85CFFED58D95605B") (:ecb-mode-test #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"185B3CBD17BF760FB2FEF42811D0A152") (:ecb-mode-test #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"6A69BDF1DF06CEA149DB27FA74693796") (:ecb-mode-test #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"FCB340CCE23A67DD8462D8784B704A81") (:ecb-mode-test #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"D10D476C5E2B4BD17495163315D331C7") (:ecb-mode-test #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"74F62F91CE7E898BC23F9C288ECA8131") (:ecb-mode-test #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"221AA35E8FA963289BF954402C7F5767") (:ecb-mode-test #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"D9CADD4001B469C58E8AFEB2045DC14E") (:ecb-mode-test #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"E956B091DA8616BC967EAE2BB93F0EFF") (:ecb-mode-test #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"E8AF5AABFD522FE792E4CB58CBA4FC06") (:ecb-mode-test #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"E2CC97CDA0F4CB35F59F8299221549CB") (:ecb-mode-test #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"37641DC8E518119705733B0E0CC211B6") (:ecb-mode-test #h"BABABABABABABABABABABABABABABABABABABABABABABABA" #h"BABABABABABABABABABABABABABABABA" #h"1414899DEC805AEC9710AE6254C39010") (:ecb-mode-test #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"7442704A4793030E31B7CF71ABE37399") (:ecb-mode-test #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"891D119206B454760DED44763ACDEA2F") (:ecb-mode-test #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"AE56363468DD5F20CD55D1F36E53D078") (:ecb-mode-test #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"490F5846EBB52D8090F7032D20AC7700") (:ecb-mode-test #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"C0BFCC236DAB252ECB52F44F8E4BFD23") (:ecb-mode-test #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"8903043F51EB14D66D9340668F0A16A5") (:ecb-mode-test #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"0D49D39E655C6C3CB463B6B6D9D42DAC") (:ecb-mode-test #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"D727F873EE8881D9EA091137272C5EE0") (:ecb-mode-test #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"FA6EBF4490B740EF17004860CA5B445F") (:ecb-mode-test #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"28AF740124F0785368E2E2231D579082") (:ecb-mode-test #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"10AD33CFE5D9EF6687ABB9D065715F19") (:ecb-mode-test #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"45F94DFA6B19E28CAC6B6AB84907DBA1") (:ecb-mode-test #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"797B8A4D65FA02247D0F2F7603C2FC65") (:ecb-mode-test #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"467B4CBF6E1E2A00619326E782B2FDED") (:ecb-mode-test #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"E3338D230F714E09BEAFB19254757C04") (:ecb-mode-test #h"CACACACACACACACACACACACACACACACACACACACACACACACA" #h"CACACACACACACACACACACACACACACACA" #h"E9F8E6856F91E653E19471DA5A36FF6D") (:ecb-mode-test #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"2D2A2F80D265F48D16852878EBA3D802") (:ecb-mode-test #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"826441F87A9A09A34D7C78889270425F") (:ecb-mode-test #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"E544A455674A3DB0EEF54E73DAAD7E2F") (:ecb-mode-test #h"CECECECECECECECECECECECECECECECECECECECECECECECE" #h"CECECECECECECECECECECECECECECECE" #h"6B0B240400BE03A62B45C62B0633B68A") (:ecb-mode-test #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"BF33AF930893CC1DD62728B3C8C4CE68") (:ecb-mode-test #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"D6C0FC873214D089D1B41842529C891F") (:ecb-mode-test #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"BA1C211B97C974D7ABF16C9314F4BD7A") (:ecb-mode-test #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"6601680BB93A76A76148B84B0A6CA22F") (:ecb-mode-test #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"0C21133D1EF307663230ADD65E8AA621") (:ecb-mode-test #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"0E9DB7642E76801B56E7AA10659E8A74") (:ecb-mode-test #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"FFBABBBBA569736616BD8F5A57C67092") (:ecb-mode-test #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"DF7C69A685C40EDA694DC6F05C3DA5AB") (:ecb-mode-test #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"3539B288714A2C183EF795BDC16E0913") (:ecb-mode-test #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"BB715ABD1805724B70672F09C937C2EA") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"86CEF5D91A4EC4FB60AEFA4CD2FAA449") (:ecb-mode-test #h"DADADADADADADADADADADADADADADADADADADADADADADADA" #h"DADADADADADADADADADADADADADADADA" #h"4535248C00F1B9745F30C0238EE5B37C") (:ecb-mode-test #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"98038B500EEC91FFD310AEE631D32FB2") (:ecb-mode-test #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"CF95D278FF432001BF462C9C6AFE0E61") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"A907678A089F78CCE753D36655ED301E") (:ecb-mode-test #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"81EDED22C3F8B03FD81DD7A4C484A9F0") (:ecb-mode-test #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"5F168314CFF7C28AB431568797F70102") (:ecb-mode-test #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"B503E49FEB6C6B558202A2AC0731B0AC") (:ecb-mode-test #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"DBF4F2F13406F1123ED2CBECA9B37209") (:ecb-mode-test #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"027AEB003AD0CAD0EE73CA79CFE22002") (:ecb-mode-test #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"E320D12F068244F2E8B5D34EFD5EC9FD") (:ecb-mode-test #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"26F3F4B12F14E0F8E21E6DB77080B6AD") (:ecb-mode-test #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"F6A80024655F2E885A55D4F4AED3B2C6") (:ecb-mode-test #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"B12E64D7541843AE65EEB98D6B8AC52C") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"031809FDFB7813A5F36E7248D3765C17") (:ecb-mode-test #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"CE00D9344DC17DD46E47CDA0C1E6DFF4") (:ecb-mode-test #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"30655F5A08BC1C9886A820F8F81DA572") (:ecb-mode-test #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"F45717E9DEFD895B4327EDAC26E25EBC") (:ecb-mode-test #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"87F30E1AF9A27A875EE181241395EE96") (:ecb-mode-test #h"ECECECECECECECECECECECECECECECECECECECECECECECEC" #h"ECECECECECECECECECECECECECECECEC" #h"211005B8FDF30146001568F06D1BC44D") (:ecb-mode-test #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"CE4CF623B3FB765BA55C79AE0D3A5124") (:ecb-mode-test #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"54763022AE7632112D410CF2DF6399E5") (:ecb-mode-test #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"B52DC47F8019984327218BC2AEAED3DC") (:ecb-mode-test #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"7F1F93044414603842EC01F4D142C3C6") (:ecb-mode-test #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"065B470D99883781F9C83F504B51A3D8") (:ecb-mode-test #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"B0EC21D31BF5C015BF6947D788BAF805") (:ecb-mode-test #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"E86178C63091C9AF6C4BBBC0635049BF") (:ecb-mode-test #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"9CBACD826DEBB69F996F25DF5B7BBE22") (:ecb-mode-test #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"C72F225961872C1224D0623F9CD0C06F") (:ecb-mode-test #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"242FB42309111B33D25CCB9D7684BB9D") (:ecb-mode-test #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"CC094AD32E382F3B4B306C0D6EA4BFA3") (:ecb-mode-test #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"31B2E295D5C15293670F0189521A8CD6") (:ecb-mode-test #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"04E816EC01432DC0C64955758337F1D5") (:ecb-mode-test #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"B522DEB854C7BF853699EDCB94D5574E") (:ecb-mode-test #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"D70C4BD2927D2764D3050E243218C870") (:ecb-mode-test #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"EAC28B0CD7F1201BD090F3ADD8CF646C") (:ecb-mode-test #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"D2D7D8214A7A6640D91A9D8EBB463625") (:ecb-mode-test #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"60BBF3046D7012FA00C4F3353F1D7E3C") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"F33D1E49C3D6266C7F1C7238BBE7AB1F") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F1011121314151617" #h"00112233445566778899AABBCCDDEEFF" #h"37E13FB5351BD78D3E7912FDC5F80FCD") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF482BD6459F82C5B300" #h"EA024714AD5C4D84EA024714AD5C4D84" #h"50D29745329694B65D6F54EE65455180") ;;; test vectors for 256-bit keys from NESSIE (http://www.cryptonessie.org/) (:ecb-mode-test #h"8000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"5172978A58543DE597060983FD799F1B") (:ecb-mode-test #h"4000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"0F86AECE7ACE09A8EAC0345C935BE91A") (:ecb-mode-test #h"2000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8C8D6ACDB23AE4B5BEE4E2C15273286F") (:ecb-mode-test #h"1000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"11395D4BFE4C8258979EE2BF2D24DFF4") (:ecb-mode-test #h"0800000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"D50183337FD8B3FAEF06C78B2ECFC40F") (:ecb-mode-test #h"0400000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"F3969970B4E37D9FFD9BD886200D7C0F") (:ecb-mode-test #h"0200000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"FF101A14CCB71863E0B51E8583D22760") (:ecb-mode-test #h"0100000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"0CACB5AB8A51226134656220DBF23228") (:ecb-mode-test #h"0080000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"BF75C54F53A3F374DC549BE280F6C6E0") (:ecb-mode-test #h"0040000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"1DC755ED6128DC50826E65632C7672D6") (:ecb-mode-test #h"0020000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"D7A46C3A378DB6A9C041D7DB1835DE3F") (:ecb-mode-test #h"0010000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"175FDB12EFB7E7D950777FE12BAAC953") (:ecb-mode-test #h"0008000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"1A5C489CB6E0608EADAF3DBFA8B5FD1B") (:ecb-mode-test #h"0004000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"7FD567FB07007A65CA8D98D4BF66F7F1") (:ecb-mode-test #h"0002000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3256E4481641ED28938AD6471414CD04") (:ecb-mode-test #h"0001000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"A2AD960B437DCD0669681BBBC30F0CF1") (:ecb-mode-test #h"0000800000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"FB04B658FA923EA9CD5FB98BE54989DE") (:ecb-mode-test #h"0000400000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"F3F43741881655CF074E36BD655F420B") (:ecb-mode-test #h"0000200000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"637DCF9D891EAD8D85A842BE0DC8261F") (:ecb-mode-test #h"0000100000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"E663749A2786E3BA3833348A9CE5E7F0") (:ecb-mode-test #h"0000080000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"76F0F7C439E25C54A9BC7AEA05640882") (:ecb-mode-test #h"0000040000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"2CDE682FC40895F1E2464739FAD230DD") (:ecb-mode-test #h"0000020000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3242FE919ADFDCE04F163EBE772AD51D") (:ecb-mode-test #h"0000010000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"CE05F79A80B2947B13BD22EE37FB3F79") (:ecb-mode-test #h"0000008000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"5345BDE33281A0CB4A899A4F18C57563") (:ecb-mode-test #h"0000004000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"2E971691DDFD33D36738C08A517B0B44") (:ecb-mode-test #h"0000002000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"EE144813E2194B18F1593C44932F170F") (:ecb-mode-test #h"0000001000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"F626C435E30ABA4FA6F6DCA30CC08833") (:ecb-mode-test #h"0000000800000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8AD30F69BD7446793C36676755D05F57") (:ecb-mode-test #h"0000000400000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"56851CB7277CBE4AE9AFF86E5BD49F90") (:ecb-mode-test #h"0000000200000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"CA864AC764D6B9B9141A08146CFA7F56") (:ecb-mode-test #h"0000000100000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"484518D9A3C6CF7B7B92393DBBF78E42") (:ecb-mode-test #h"0000000080000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"093F44542B0E41E300C11AE77A48C6C4") (:ecb-mode-test #h"0000000040000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6D9856ADC56605F70EF069D639C9D977") (:ecb-mode-test #h"0000000020000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3FFB2FF7C5457744CABDFB89C0BBA7E8") (:ecb-mode-test #h"0000000010000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6D8254191931BE754D64F70FE3E226C7") (:ecb-mode-test #h"0000000008000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"23F3CC55C460EE949A9934C7E5C06CCB") (:ecb-mode-test #h"0000000004000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8739DA7F4A9D821EAA7A349E25741DAA") (:ecb-mode-test #h"0000000002000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"73E724C08890501275A0559621526948") (:ecb-mode-test #h"0000000001000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"4CC6569D4F6207DDB03B232BFA8AA481") (:ecb-mode-test #h"0000000000800000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"52A6D921AEF99205822B361D8D9DD998") (:ecb-mode-test #h"0000000000400000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"970E1899AEEEB7CCD26F854CA25214E2") (:ecb-mode-test #h"0000000000200000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"D1DEFC8AC21C95160CF71612AAC55A8C") (:ecb-mode-test #h"0000000000100000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"D8C2A3AD65F16024265714C21B8A70C5") (:ecb-mode-test #h"0000000000080000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"55DE20482FAE35A03F0D57B7546EB980") (:ecb-mode-test #h"0000000000040000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"81BCA41F11D12EE26326E042E74961AF") (:ecb-mode-test #h"0000000000020000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6D8D5C30A508436401396224D4E417B5") (:ecb-mode-test #h"0000000000010000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"0FA1ECAB0B3C598C51372A5AAF6E1315") (:ecb-mode-test #h"0000000000008000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"945BF2690A9CE9ED8009004039E1E743") (:ecb-mode-test #h"0000000000004000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"73618AD5FD3A9740CB92C3F870C772B9") (:ecb-mode-test #h"0000000000002000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"A7BAB4D0765D66F06FCB85A42D4CF0EE") (:ecb-mode-test #h"0000000000001000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"2A659EA8BF9EA163976C33A0B7463A56") (:ecb-mode-test #h"0000000000000800000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"4D9D5CC19BF1B2D48EF2CF4CD313D3E3") (:ecb-mode-test #h"0000000000000400000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"0D7A26F850BDD2A633689367901BC2A4") (:ecb-mode-test #h"0000000000000200000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"1A1235352EC6CD1A7A1913E77EF7CE4D") (:ecb-mode-test #h"0000000000000100000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"5FDC541376BAF15D5AC011B9C0B74E75") (:ecb-mode-test #h"0000000000000080000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"CB8DCB7AD04598E8337747E02A8DF16E") (:ecb-mode-test #h"0000000000000040000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"2855A6EEA8B20B8B25EDEE37A7D7E976") (:ecb-mode-test #h"0000000000000020000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"58B5CD00D833233E718DBEAABCC48E8F") (:ecb-mode-test #h"0000000000000010000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6DF58A11F96B67C330ED10FFFB1E6D74") (:ecb-mode-test #h"0000000000000008000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8FD74AAB8D136DCF1B398D1174AA343B") (:ecb-mode-test #h"0000000000000004000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"A81E2F57E80761E361DB1008AC1ABDD8") (:ecb-mode-test #h"0000000000000002000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"BDD939E7A93F6FECC762E2E3321DFEC7") (:ecb-mode-test #h"0000000000000001000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"C281060452693278B48AD9076911EC39") (:ecb-mode-test #h"0000000000000000800000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"C06C159EEAFF3CB4B509DB604060F537") (:ecb-mode-test #h"0000000000000000400000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"757CED2216A9912B5FBFA1E623077E5D") (:ecb-mode-test #h"0000000000000000200000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"9606EDC198F44F955F510FA525E9C80C") (:ecb-mode-test #h"0000000000000000100000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"ADE8D3FAE7A4651855E053F42FFF7905") (:ecb-mode-test #h"0000000000000000080000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"398BA679B6C0A63479F0C6FE25614F01") (:ecb-mode-test #h"0000000000000000040000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"FB77ECA9DEF62902240E4BF3806F3A64") (:ecb-mode-test #h"0000000000000000020000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"B4313D0A9D34B21F69021A5458680579") (:ecb-mode-test #h"0000000000000000010000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"BDC7C4ED3B989BF8288E8B4ACDE3FEEA") (:ecb-mode-test #h"0000000000000000008000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"430A2DAFFA822532FD4843DF9CBAF824") (:ecb-mode-test #h"0000000000000000004000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"16A2DEBA266577150B6DC34995902C99") (:ecb-mode-test #h"0000000000000000002000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"5902382C7675AF5C52A6ADF349454276") (:ecb-mode-test #h"0000000000000000001000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"0D912AA37CFB56223C6ED9E04B3D563F") (:ecb-mode-test #h"0000000000000000000800000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"1FD8880BE6A6E51C0C0E9C2866127F7D") (:ecb-mode-test #h"0000000000000000000400000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"BC4079EE5CDB86BDD8FAE650E2931D98") (:ecb-mode-test #h"0000000000000000000200000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"C52E414FC84C978FAD8CFA103844C306") (:ecb-mode-test #h"0000000000000000000100000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"DF6291B74EF77E82A8FB7C207213125F") (:ecb-mode-test #h"0000000000000000000080000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"530424A0F23CD90074F2D672A4FF3A96") (:ecb-mode-test #h"0000000000000000000040000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"83ED777537F5EE3E5769B8A07476A6AB") (:ecb-mode-test #h"0000000000000000000020000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"5357341784EAB13F104FBAEFC69B726B") (:ecb-mode-test #h"0000000000000000000010000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6DBACA4C68AD93373CBEB1DB0963F33F") (:ecb-mode-test #h"0000000000000000000008000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"EFA128916DF70D852574EC8507625CC8") (:ecb-mode-test #h"0000000000000000000004000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"0BD55284AC672E1A2F248FB89C22B514") (:ecb-mode-test #h"0000000000000000000002000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"E3222E0E2770496C443ED562ECBFC368") (:ecb-mode-test #h"0000000000000000000001000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6B689B6DB9374E072B45A7807DAAB132") (:ecb-mode-test #h"0000000000000000000000800000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3215A725BCFBB120926F8BBCE41FC3EC") (:ecb-mode-test #h"0000000000000000000000400000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"F2475FE25BEF963862CF66C91DA0250B") (:ecb-mode-test #h"0000000000000000000000200000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"5E1CC549BB39348529FD279DFE5E1FFC") (:ecb-mode-test #h"0000000000000000000000100000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"1A8EDD22AA0FE906267DF710DE8DB007") (:ecb-mode-test #h"0000000000000000000000080000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"EE139CE12F8205D4EECCE6D7FD23B01F") (:ecb-mode-test #h"0000000000000000000000040000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"FD84D87207D7BE3A79272CC9DF65E1E6") (:ecb-mode-test #h"0000000000000000000000020000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"CE01B0EEA6BF6D981AFFB07FE1DD164E") (:ecb-mode-test #h"0000000000000000000000010000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"1BCCA9BD22179B1C941947643FB01F0F") (:ecb-mode-test #h"0000000000000000000000008000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"87A581347DF02FF9973A0622DF673804") (:ecb-mode-test #h"0000000000000000000000004000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"1EDEB75B65B365582AB5AA265037FA55") (:ecb-mode-test #h"0000000000000000000000002000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"807DD7E0418803258EF677BA9345CF51") (:ecb-mode-test #h"0000000000000000000000001000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"70CE90D345621481A99DC8EE1A62DCD5") (:ecb-mode-test #h"0000000000000000000000000800000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"BB51E835284E0F7B74C053151F07D207") (:ecb-mode-test #h"0000000000000000000000000400000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"0240317EC3AFA5D4610C545C0D507367") (:ecb-mode-test #h"0000000000000000000000000200000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"9B77B76CA91662A9CB067267F0560C65") (:ecb-mode-test #h"0000000000000000000000000100000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"2219ED37D533B05CDC20B16F45D3DBD9") (:ecb-mode-test #h"0000000000000000000000000080000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"BC5A33AF9E4591BD4CF53B20728C3F85") (:ecb-mode-test #h"0000000000000000000000000040000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"68628B89F58C20E5195DB795C0A41489") (:ecb-mode-test #h"0000000000000000000000000020000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"5D177DE234B6288510163F2351750215") (:ecb-mode-test #h"0000000000000000000000000010000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6015D7BA2F33B88B2BE0016E022E05FE") (:ecb-mode-test #h"0000000000000000000000000008000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"2D203E35B97E3B315C17D9F0F80ACDA0") (:ecb-mode-test #h"0000000000000000000000000004000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"E5800AF9BF96D6B7ED3A2AED899CA456") (:ecb-mode-test #h"0000000000000000000000000002000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"1163E6F8F1DE919686C138089EFA7986") (:ecb-mode-test #h"0000000000000000000000000001000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"2180B46E9EAC63A165BE63DAE17889A4") (:ecb-mode-test #h"0000000000000000000000000000800000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3D751DC36B1046AC808D8275B48697AC") (:ecb-mode-test #h"0000000000000000000000000000400000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"DF022C5EFCEB5D3FE7E72DDF11D16EA3") (:ecb-mode-test #h"0000000000000000000000000000200000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"C706AB7A20E0D038143B78D9D12EC1A4") (:ecb-mode-test #h"0000000000000000000000000000100000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8AFB006F196B00DAE7F0B36C9E88A3B9") (:ecb-mode-test #h"0000000000000000000000000000080000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"BED70262ED524A5C6A495092E2543993") (:ecb-mode-test #h"0000000000000000000000000000040000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"088A58A7351C7A7AF594035514DE0757") (:ecb-mode-test #h"0000000000000000000000000000020000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"F5DF0BB68AB377B12321365C05480EA8") (:ecb-mode-test #h"0000000000000000000000000000010000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"512DC8D603A7E4C8031D3566F141B233") (:ecb-mode-test #h"0000000000000000000000000000008000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"50342EA0E9E81EC53E3683C8C1471602") (:ecb-mode-test #h"0000000000000000000000000000004000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8AAB01E320B17FD9945D725F5EA904BA") (:ecb-mode-test #h"0000000000000000000000000000002000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"76FB320065713C165DECBE5DAFDD79BD") (:ecb-mode-test #h"0000000000000000000000000000001000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"A8AD014D22CD8FCC9557438B8228253A") (:ecb-mode-test #h"0000000000000000000000000000000800000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6017A9EB6F3336882FCCEDEC746C62F6") (:ecb-mode-test #h"0000000000000000000000000000000400000000000000000000000000000000" #h"00000000000000000000000000000000" #h"2EDF94990EB0F4BAFE1F5903102FE874") (:ecb-mode-test #h"0000000000000000000000000000000200000000000000000000000000000000" #h"00000000000000000000000000000000" #h"4EC81B0FA8FAE0025AF09D26F1F200EA") (:ecb-mode-test #h"0000000000000000000000000000000100000000000000000000000000000000" #h"00000000000000000000000000000000" #h"AF7F474333E74691E5D01A3A841F8096") (:ecb-mode-test #h"0000000000000000000000000000000080000000000000000000000000000000" #h"00000000000000000000000000000000" #h"28FCE531836F2A255CA19DE6F53841E8") (:ecb-mode-test #h"0000000000000000000000000000000040000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6282A41053316B1A4027488E6F747003") (:ecb-mode-test #h"0000000000000000000000000000000020000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3668527987AC38A3F7C052A20B668F24") (:ecb-mode-test #h"0000000000000000000000000000000010000000000000000000000000000000" #h"00000000000000000000000000000000" #h"4C3473FE666072653E29354F07EF02B5") (:ecb-mode-test #h"0000000000000000000000000000000008000000000000000000000000000000" #h"00000000000000000000000000000000" #h"0A51D7A5B347225798EDE5663940F32F") (:ecb-mode-test #h"0000000000000000000000000000000004000000000000000000000000000000" #h"00000000000000000000000000000000" #h"D3CA3A8821A3D094CF63CF12136A1249") (:ecb-mode-test #h"0000000000000000000000000000000002000000000000000000000000000000" #h"00000000000000000000000000000000" #h"FBC5E4B37A69AD5F21E53F88E55AB95D") (:ecb-mode-test #h"0000000000000000000000000000000001000000000000000000000000000000" #h"00000000000000000000000000000000" #h"CCCAAA0A2DEFD357EE31C2CFEC9D0E8E") (:ecb-mode-test #h"0000000000000000000000000000000000800000000000000000000000000000" #h"00000000000000000000000000000000" #h"93348B5393560AA416C6E6F0C99A58F7") (:ecb-mode-test #h"0000000000000000000000000000000000400000000000000000000000000000" #h"00000000000000000000000000000000" #h"13AC66E49E23A8D3582AA7117F7A8F2F") (:ecb-mode-test #h"0000000000000000000000000000000000200000000000000000000000000000" #h"00000000000000000000000000000000" #h"C403AD02F23055CEE08281E7D0C7EB2A") (:ecb-mode-test #h"0000000000000000000000000000000000100000000000000000000000000000" #h"00000000000000000000000000000000" #h"65DFD53B699B191CE7A6610A405083DC") (:ecb-mode-test #h"0000000000000000000000000000000000080000000000000000000000000000" #h"00000000000000000000000000000000" #h"3D6F7E99F6512553BB983E8F75672B97") (:ecb-mode-test #h"0000000000000000000000000000000000040000000000000000000000000000" #h"00000000000000000000000000000000" #h"92BA0D580A954F8C8494A840F0252AEF") (:ecb-mode-test #h"0000000000000000000000000000000000020000000000000000000000000000" #h"00000000000000000000000000000000" #h"958D8C9141CE21DBD69E19BA1E4F67AA") (:ecb-mode-test #h"0000000000000000000000000000000000010000000000000000000000000000" #h"00000000000000000000000000000000" #h"E508796197F539FCDC917ECAB19507E0") (:ecb-mode-test #h"0000000000000000000000000000000000008000000000000000000000000000" #h"00000000000000000000000000000000" #h"2200A6914A2050E99A55FB3BF20315E4") (:ecb-mode-test #h"0000000000000000000000000000000000004000000000000000000000000000" #h"00000000000000000000000000000000" #h"627C0B2401EE6C095404CD7AA59EA67E") (:ecb-mode-test #h"0000000000000000000000000000000000002000000000000000000000000000" #h"00000000000000000000000000000000" #h"75159B707278DFE6FD8A024B9FF0D5A8") (:ecb-mode-test #h"0000000000000000000000000000000000001000000000000000000000000000" #h"00000000000000000000000000000000" #h"F47982BE40C39306ACF25A120BC1B4E0") (:ecb-mode-test #h"0000000000000000000000000000000000000800000000000000000000000000" #h"00000000000000000000000000000000" #h"01CAABEF85A1E081EA6983079A90EA34") (:ecb-mode-test #h"0000000000000000000000000000000000000400000000000000000000000000" #h"00000000000000000000000000000000" #h"7F473CD21A453BF74CC76184D6F5496F") (:ecb-mode-test #h"0000000000000000000000000000000000000200000000000000000000000000" #h"00000000000000000000000000000000" #h"659442FD57B94862529D3E4C530826FE") (:ecb-mode-test #h"0000000000000000000000000000000000000100000000000000000000000000" #h"00000000000000000000000000000000" #h"88A9140C094A695716A2966B1A8078A0") (:ecb-mode-test #h"0000000000000000000000000000000000000080000000000000000000000000" #h"00000000000000000000000000000000" #h"28CCFC1BB6180AA7373DA1F5A54E47EA") (:ecb-mode-test #h"0000000000000000000000000000000000000040000000000000000000000000" #h"00000000000000000000000000000000" #h"53DFD8CB845FD279B337B52DBBA3CF4C") (:ecb-mode-test #h"0000000000000000000000000000000000000020000000000000000000000000" #h"00000000000000000000000000000000" #h"1BB5B100DFE6BA16983AD4A0F09FD50B") (:ecb-mode-test #h"0000000000000000000000000000000000000010000000000000000000000000" #h"00000000000000000000000000000000" #h"A896AE30D529D4ACFFCF5B763309CD28") (:ecb-mode-test #h"0000000000000000000000000000000000000008000000000000000000000000" #h"00000000000000000000000000000000" #h"F40A1B359A9B6B1197276C71222371F4") (:ecb-mode-test #h"0000000000000000000000000000000000000004000000000000000000000000" #h"00000000000000000000000000000000" #h"9FDE11C9E6CF9A1E9089820FD928767C") (:ecb-mode-test #h"0000000000000000000000000000000000000002000000000000000000000000" #h"00000000000000000000000000000000" #h"7771A5A99B099A2C861D084E790958A2") (:ecb-mode-test #h"0000000000000000000000000000000000000001000000000000000000000000" #h"00000000000000000000000000000000" #h"BE1907AA5CA148A0282850401C48AF71") (:ecb-mode-test #h"0000000000000000000000000000000000000000800000000000000000000000" #h"00000000000000000000000000000000" #h"8E47D50827FD36B62C0D3BD36F863198") (:ecb-mode-test #h"0000000000000000000000000000000000000000400000000000000000000000" #h"00000000000000000000000000000000" #h"81AA1751209F9173258CD1625DB65E07") (:ecb-mode-test #h"0000000000000000000000000000000000000000200000000000000000000000" #h"00000000000000000000000000000000" #h"1EE8FE72574BD819C97A0DEA2A5E0B64") (:ecb-mode-test #h"0000000000000000000000000000000000000000100000000000000000000000" #h"00000000000000000000000000000000" #h"031BA0B3EFCAE9B08793C8107C277A27") (:ecb-mode-test #h"0000000000000000000000000000000000000000080000000000000000000000" #h"00000000000000000000000000000000" #h"34C8DFD0DC4BA5240CA21BF4959EEF6B") (:ecb-mode-test #h"0000000000000000000000000000000000000000040000000000000000000000" #h"00000000000000000000000000000000" #h"C7A4DA0D5892A185D35447DB904511B5") (:ecb-mode-test #h"0000000000000000000000000000000000000000020000000000000000000000" #h"00000000000000000000000000000000" #h"7A8B9982B6C8AE1B5DC02FC1D9AFA2E0") (:ecb-mode-test #h"0000000000000000000000000000000000000000010000000000000000000000" #h"00000000000000000000000000000000" #h"C77E0DFB29402C587C6DD97E0BD09ABA") (:ecb-mode-test #h"0000000000000000000000000000000000000000008000000000000000000000" #h"00000000000000000000000000000000" #h"1AA2FD990BD0B0715B18482088DE0844") (:ecb-mode-test #h"0000000000000000000000000000000000000000004000000000000000000000" #h"00000000000000000000000000000000" #h"31C2D486FDA54BAB4286A02D260918AC") (:ecb-mode-test #h"0000000000000000000000000000000000000000002000000000000000000000" #h"00000000000000000000000000000000" #h"545F5A95E159B5F0DDF544B60F9C28C3") (:ecb-mode-test #h"0000000000000000000000000000000000000000001000000000000000000000" #h"00000000000000000000000000000000" #h"45C84895AF0393588C67D9CDD5E4D7E2") (:ecb-mode-test #h"0000000000000000000000000000000000000000000800000000000000000000" #h"00000000000000000000000000000000" #h"745BF4AF94A92D32FFE44B41AEF39320") (:ecb-mode-test #h"0000000000000000000000000000000000000000000400000000000000000000" #h"00000000000000000000000000000000" #h"13C47C2F92F91D72F34381AC9A81473D") (:ecb-mode-test #h"0000000000000000000000000000000000000000000200000000000000000000" #h"00000000000000000000000000000000" #h"8836D5AA076110FCD5BD66F3BECB39F6") (:ecb-mode-test #h"0000000000000000000000000000000000000000000100000000000000000000" #h"00000000000000000000000000000000" #h"11EDE6F221E96C7515B1256DF055FBC3") (:ecb-mode-test #h"0000000000000000000000000000000000000000000080000000000000000000" #h"00000000000000000000000000000000" #h"4E3BE7D6830703A6185CF0BDBE7F5BE4") (:ecb-mode-test #h"0000000000000000000000000000000000000000000040000000000000000000" #h"00000000000000000000000000000000" #h"6A1ABDA47972CFF536946A1C7D380810") (:ecb-mode-test #h"0000000000000000000000000000000000000000000020000000000000000000" #h"00000000000000000000000000000000" #h"74031DB865D2FC8319A320FFAC4694D8") (:ecb-mode-test #h"0000000000000000000000000000000000000000000010000000000000000000" #h"00000000000000000000000000000000" #h"E1F751F11027548C057075E8D8F880EA") (:ecb-mode-test #h"0000000000000000000000000000000000000000000008000000000000000000" #h"00000000000000000000000000000000" #h"AF24FA74CA96D89088C9018AA60E1D53") (:ecb-mode-test #h"0000000000000000000000000000000000000000000004000000000000000000" #h"00000000000000000000000000000000" #h"0E5214D31B2C9219F6C9686A35F210FF") (:ecb-mode-test #h"0000000000000000000000000000000000000000000002000000000000000000" #h"00000000000000000000000000000000" #h"2A72E2E692463EE8846C94A483C27E25") (:ecb-mode-test #h"0000000000000000000000000000000000000000000001000000000000000000" #h"00000000000000000000000000000000" #h"2B9C3298626F11072D7B1D80B47A841F") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000800000000000000000" #h"00000000000000000000000000000000" #h"7468CAA1A5FFC828BE5A752C33132E90") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000400000000000000000" #h"00000000000000000000000000000000" #h"29C75ADD5EDE2680C169FF9FD9177331") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000200000000000000000" #h"00000000000000000000000000000000" #h"9BA78930CDD3357A2D84A49725902E8F") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000100000000000000000" #h"00000000000000000000000000000000" #h"F190AC4C43E202F925B5FD1E4CA62DD6") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000080000000000000000" #h"00000000000000000000000000000000" #h"5716FB34A1A6B40C35B2BA860F12163E") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000040000000000000000" #h"00000000000000000000000000000000" #h"43B90548889A171E85515AB05EC76856") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000020000000000000000" #h"00000000000000000000000000000000" #h"B4DE6F86875147F5276D584CEC11AFB4") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000010000000000000000" #h"00000000000000000000000000000000" #h"3DA6C1A8937583BF6491B2E9C52081E6") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000008000000000000000" #h"00000000000000000000000000000000" #h"9A54FCD26D9754ADD5F8967EF551EAB0") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000004000000000000000" #h"00000000000000000000000000000000" #h"F0DCFA56A7E41A859276A6F8927B561D") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000002000000000000000" #h"00000000000000000000000000000000" #h"5881A8AE181F16B64CD0C455389F511C") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000001000000000000000" #h"00000000000000000000000000000000" #h"E9F7AD45D9EA9AA4C830B89EEC61C1B5") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000800000000000000" #h"00000000000000000000000000000000" #h"9118B623A63BFC69A9AAB868D752460B") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000400000000000000" #h"00000000000000000000000000000000" #h"2D208D46FB2177C243C539FCCD4A1E9D") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000200000000000000" #h"00000000000000000000000000000000" #h"2A4F52A297F20E428222008D9BE4A23B") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000100000000000000" #h"00000000000000000000000000000000" #h"EBCFDD28550C9654374590EC4BFD1CDC") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000080000000000000" #h"00000000000000000000000000000000" #h"FABB99266FC741241F6CFC0CED776A11") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000040000000000000" #h"00000000000000000000000000000000" #h"FBDEC944B2303E3A08A964E24130D10D") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000020000000000000" #h"00000000000000000000000000000000" #h"9897E33E6052ABA1F07233BCEF531E32") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000010000000000000" #h"00000000000000000000000000000000" #h"509DCA41B038225B30D8B7880D52999D") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000008000000000000" #h"00000000000000000000000000000000" #h"3F70238F99F2AF394C31308D68F1707C") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000004000000000000" #h"00000000000000000000000000000000" #h"E6FF6426E9025DD6519837F71A6C3636") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000002000000000000" #h"00000000000000000000000000000000" #h"F222502AEF77C1F21DB79B08F7AB8CA2") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000001000000000000" #h"00000000000000000000000000000000" #h"C17D2C00477C1AA20B539BE8174E7202") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000800000000000" #h"00000000000000000000000000000000" #h"0F7B12AE962AF9C0C8CDCAA288FC6E12") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000400000000000" #h"00000000000000000000000000000000" #h"0E740EE58431521A622122AEFB163CE2") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000200000000000" #h"00000000000000000000000000000000" #h"CF0B94FECAC6F67070306654FE198449") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000100000000000" #h"00000000000000000000000000000000" #h"604EA1D0711ACB8E545C0A88976008F9") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000080000000000" #h"00000000000000000000000000000000" #h"71D03D8F6F917FDF5B612180454F3699") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000040000000000" #h"00000000000000000000000000000000" #h"A6BCFE7B73EDCE71DB36AF00B01C37EC") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000020000000000" #h"00000000000000000000000000000000" #h"93D761851BB991221AE77968459787DD") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000010000000000" #h"00000000000000000000000000000000" #h"F117E4D5C88CC1C067C88AE38A5BF1D5") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000008000000000" #h"00000000000000000000000000000000" #h"B534328DA555A9B69AC2A5B08E3CE47E") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000004000000000" #h"00000000000000000000000000000000" #h"7BDFB785D866B6487790B9F6164F5EBD") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000002000000000" #h"00000000000000000000000000000000" #h"5B3BB41E43D02901F5A0231768347B38") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000001000000000" #h"00000000000000000000000000000000" #h"917216669DB1600015F2FE7CBDDA0FF4") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000800000000" #h"00000000000000000000000000000000" #h"C79B582FC430C0187D7B1D7B1E79BDB9") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000400000000" #h"00000000000000000000000000000000" #h"B9A43998AED6BB7B79C91BB4C2530F4E") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000200000000" #h"00000000000000000000000000000000" #h"0B24EBDF9A1D129F5E8397AB7412BC74") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000100000000" #h"00000000000000000000000000000000" #h"96D523E4EF1C888C72460DEBA8D58B78") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000080000000" #h"00000000000000000000000000000000" #h"85708C4539C8B06DD787AFDD06A3FE24") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000040000000" #h"00000000000000000000000000000000" #h"67A106762D2F46B7880750BCF987054C") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000020000000" #h"00000000000000000000000000000000" #h"8F46E37371E81C389CA94A8272A14FC8") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000010000000" #h"00000000000000000000000000000000" #h"92DC700C11BBE46DA9559CAA7BA662F0") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000008000000" #h"00000000000000000000000000000000" #h"90D2B52984DA214F392EF4EAC26A04FE") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000004000000" #h"00000000000000000000000000000000" #h"832D440D62996C5BFCB7FAA08DEB4D2C") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000002000000" #h"00000000000000000000000000000000" #h"69B7F725BA2B0539F6B45F2C8495D571") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000001000000" #h"00000000000000000000000000000000" #h"CE78A2AA25F818D87C46367579FAE698") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000800000" #h"00000000000000000000000000000000" #h"F5E3E4DA4FC90F25F7D6679F076CA32E") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000400000" #h"00000000000000000000000000000000" #h"F7618B001BC19F0195BD21021D9545B6") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000200000" #h"00000000000000000000000000000000" #h"D84E1E36E1100913C7AFDBFE5009EDEA") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000100000" #h"00000000000000000000000000000000" #h"9DB2838E3903829913D2AEE6465202FD") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000080000" #h"00000000000000000000000000000000" #h"361AFBF61BDB378CCF2B76C01469BAA2") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000040000" #h"00000000000000000000000000000000" #h"DC4C998046574B4CC447154F663E8EBD") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000020000" #h"00000000000000000000000000000000" #h"0D890EFA71666BE0A38B423BAD47C90F") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000010000" #h"00000000000000000000000000000000" #h"F39C444538E646A2BD59B443F68C51D5") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000008000" #h"00000000000000000000000000000000" #h"9C6D37340E8F5EA22213E17A9F720238") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000004000" #h"00000000000000000000000000000000" #h"3A23813329F978C1C6C3BE1715011283") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000002000" #h"00000000000000000000000000000000" #h"CE24D63AFA37E2A659A21CF770109BB4") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000001000" #h"00000000000000000000000000000000" #h"DF329017478D86B2C360D55BC2B2ADCF") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000800" #h"00000000000000000000000000000000" #h"BC5EFA1FBF848776746FD7826656E25C") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000400" #h"00000000000000000000000000000000" #h"A3E4185241C566DD2CF8117D4D7699F4") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000200" #h"00000000000000000000000000000000" #h"EF7BBDEB18879C11E2979DCC601CB620") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000100" #h"00000000000000000000000000000000" #h"FDC76A95F9C87E394F82A787D7406D40") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000080" #h"00000000000000000000000000000000" #h"B224E2BECACF6773B9941516195ED06B") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000040" #h"00000000000000000000000000000000" #h"B3951D0CF640BB7BD8F3D9948745FF9E") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000020" #h"00000000000000000000000000000000" #h"F9C8966E2874F736765B89DA10EF4611") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000010" #h"00000000000000000000000000000000" #h"3750F26BAB98833AB30444C0821A594C") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000008" #h"00000000000000000000000000000000" #h"D369C2B7C2337D67A87CD5B4EB45D290") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000004" #h"00000000000000000000000000000000" #h"F3A44B0F53DCC9F79E1AFA8ABB022C84") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000002" #h"00000000000000000000000000000000" #h"6E47C47F3940D369EC703E974AB350B6") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000001" #h"00000000000000000000000000000000" #h"1100DE2A57C47C2EB63277537ADE5716") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"80000000000000000000000000000000" #h"30F5C183F6C81A72F39B618B086CC2DE") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"40000000000000000000000000000000" #h"DB11AFAAB4946101911DF90AFED8AC0D") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"20000000000000000000000000000000" #h"1487FC298DBDA9C520CC5851B17D4079") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"10000000000000000000000000000000" #h"2321D38ACCAAEA5DBA682E7BDCE095AB") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"08000000000000000000000000000000" #h"C4DB11197AE15CF9DFE7D0F3457EC94C") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"04000000000000000000000000000000" #h"1054BFF1A1564172460A0194B57EBE6C") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"02000000000000000000000000000000" #h"2340568047F06139D03FE0A3C75CDBF1") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"01000000000000000000000000000000" #h"3FA18912A1C05E244663BD9A9B5D4046") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00800000000000000000000000000000" #h"7220FA3179267839BB03569E43056BE8") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00400000000000000000000000000000" #h"C7D49A32A6B93D1323EFD7B99FC0A5F7") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00200000000000000000000000000000" #h"C30D9FFB19F2090109AD40FDAB73176B") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00100000000000000000000000000000" #h"54CA1E1FD38713CD454A07339385739F") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00080000000000000000000000000000" #h"034516E874272A5A325EB9D54831B6F7") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00040000000000000000000000000000" #h"42650A58269E311A3B4F7BC414D1488A") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00020000000000000000000000000000" #h"8D4916888A02DC18E1EE95B005C58E18") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00010000000000000000000000000000" #h"B192C07FB927170DF62D6C44819BCD6F") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00008000000000000000000000000000" #h"973C835241ED02CBE39699AF2FFC150A") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00004000000000000000000000000000" #h"F9630817124B0787237D76697D66341F") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00002000000000000000000000000000" #h"51E98EC760A328E35B8D77289726AFC3") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00001000000000000000000000000000" #h"FC2E80BE856AE38BE0682E8C273616AE") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000800000000000000000000000000" #h"A440C29E6F4D6C3540D6C8DB6B02DE4F") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000400000000000000000000000000" #h"E04312CB849684A440114B40C242F1E0") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000200000000000000000000000000" #h"2186FC5F5947AAF6626DCAAFFFB47829") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000100000000000000000000000000" #h"D357AAA0B4548EB23E9CF1B5D33487C3") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000080000000000000000000000000" #h"02239634F2A7CB81D1CACA279659C637") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000040000000000000000000000000" #h"2EF92962D2F7D0A4B075992C3F8FA9C3") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000020000000000000000000000000" #h"F197F67C65438532F17DDBE41F87BA17") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000010000000000000000000000000" #h"6A9387BE237C03056921A9F85AB7A394") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000008000000000000000000000000" #h"5BE801A4767AD211AF20B295E4EB9F72") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000004000000000000000000000000" #h"D38007A33C45B295D06FA99660E8C6E4") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000002000000000000000000000000" #h"C87746C9F5405E9BBBB53D17544AD016") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000001000000000000000000000000" #h"142BB703DC8B4E870165F987B94A3D06") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000800000000000000000000000" #h"3C25BD8199CD580D684BD7EC53601EED") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000400000000000000000000000" #h"283CC22E28A7E48B9FB34F5454A1EB92") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000200000000000000000000000" #h"BE6FA799CE3E6BB239EE35FEF2744A14") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000100000000000000000000000" #h"99BF63EEB37E1C7E8686B28A0F13E120") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000080000000000000000000000" #h"01308C588EC24E97B75A1D32F8C3E770") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000040000000000000000000000" #h"F820CB9552F6800049E51037DD238E7B") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000020000000000000000000000" #h"BBC26F6098B0F4D2235FC139041EB78F") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000010000000000000000000000" #h"836E3B15AA777DEA46606FCC7C2FAB65") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000008000000000000000000000" #h"AAB58970926FE6CFC4017F23FB44C287") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000004000000000000000000000" #h"1DEEF417C2192D50694D1DF67F960E6E") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000002000000000000000000000" #h"4E4EA43FAD14AF207C311D98A1DB4B24") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000001000000000000000000000" #h"E0731CEF0FAF7AE36B4FCB9E1AB95488") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000800000000000000000000" #h"C6FF60796386126058694CAA35BFF163") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000400000000000000000000" #h"AEA22D742BA1919C43E0A42719B1A9C8") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000200000000000000000000" #h"843793D2EF2427D745B9B35BC0AD0555") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000100000000000000000000" #h"3C805CED7CBDEF4F896113D95D4BD975") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000080000000000000000000" #h"5157A8B222432635BEBD29BDAA9C490B") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000040000000000000000000" #h"D7A88C8E82EB2F2BB827E56F33E7B1C3") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000020000000000000000000" #h"DA55FBE256EF08F565A70D870B969B27") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000010000000000000000000" #h"951F6F33FD34701F7C79FC94EFB119CF") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000008000000000000000000" #h"BE2BD92D9F3DBFD3225B7488FFEC09C1") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000004000000000000000000" #h"3C560897DF4AC5F3C33818E2597E90B0") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000002000000000000000000" #h"52C4110C36C90E3A54921B3F1AAB66C0") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000001000000000000000000" #h"9DCED6AECC426A4DFB6B648490A7D002") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000800000000000000000" #h"F2631BD62B10761B923DD415ADCCC59B") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000400000000000000000" #h"2B1E1C0D54367440A122D31058057A42") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000200000000000000000" #h"544C870FBF43AB7CFCF114E00B05D974") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000100000000000000000" #h"1E8B06D5FDF11BF70AD8F8748F7F6C33") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000080000000000000000" #h"582BE6419DB732C646B80E8C8966C7CC") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000040000000000000000" #h"2AB0AEAAF06EAD0BA24CCDD46BCAC4D2") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000020000000000000000" #h"32ABA6C20CFFB3D81A4D3288BF4BDFB1") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000010000000000000000" #h"AB8F8FB0A91662A4E3C54C395BDD6711") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000008000000000000000" #h"F154670ADDE837119060F4ECE9D7B636") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000004000000000000000" #h"64CE436BCC7AAC1DE95D6CECC28C46C2") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000002000000000000000" #h"17A6371CFEAD87CBB6A545D9F9973155") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000001000000000000000" #h"532AC851EF076F571D6B1C9418D7E2E9") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000800000000000000" #h"8CA057121128472C01EF7F6EC39EC63F") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000400000000000000" #h"283DF89A06A93492543BCA4D5DB109E9") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000200000000000000" #h"2A07389C26321F9F7AF46897D80E3CCF") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000100000000000000" #h"1473BBE037060B30273908A495C2F622") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000080000000000000" #h"C937D109334A404B55CEE675092A2D2C") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000040000000000000" #h"0CAA09146104F478E231268F03EA4FB9") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000020000000000000" #h"7FCA0541DC09F947145B69C93E0E382F") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000010000000000000" #h"16739ED42CEF90CA03B686FF13A29A6C") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000008000000000000" #h"911BB934A7D6ED03A5AF9DF7A28E8129") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000004000000000000" #h"3974614212BA6A30AC9541B7776CC29B") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000002000000000000" #h"8D17F86E8423398AB06E739B112048FB") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000001000000000000" #h"76A0AC6091D6DAF57C303E02D5AE8F97") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000800000000000" #h"98C8AD3C3AB0EFB14DF2C96EC4A5923C") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000400000000000" #h"3AF0B1C79917659CF8E5B91D4ED31ED3") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000200000000000" #h"0F6C180C0D449B35A3C7026E513DA0D9") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000100000000000" #h"646F2B75831CA1CB950B5CC79F320F6F") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000080000000000" #h"2877CB6CFED0900A25FE65367B8DF5DC") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000040000000000" #h"5122F1C85198E03E269D90BDA811A8AD") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000020000000000" #h"7FEC2A1C88A6E72D22FE71B513B1C34D") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000010000000000" #h"1176120721DC2C20A1ED31F1572ECBB8") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000008000000000" #h"932B4B9980CF29A3EC9B982A2C0215CE") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000004000000000" #h"BFE6D2C8354E83D26AEF557E2AD1C2EF") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000002000000000" #h"FE4C742734F30C62964D5917C5B63723") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000001000000000" #h"1663275B61F3FACEB365D56D8B51AE33") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000800000000" #h"32EB39C865C149CF81E27D8AE0A91BDB") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000400000000" #h"0229846F9F8150006A27D62E60A762DE") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000200000000" #h"B88BACF0AFFAA2C5CAAC4C7036785A74") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000100000000" #h"C61820350B4DAF92077DB18B2563C050") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000080000000" #h"D4ABF17AA49B24F71DD5151339951D1B") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000040000000" #h"D7C632D6C753246A176B659DBCEF61D8") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000020000000" #h"1F34C055C434A025ADD592A5397D2D35") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000010000000" #h"C399CB8A665E35A23F660C2F8C3D8FE9") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000008000000" #h"09E11B6D984BD70089CB2360448A4B60") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000004000000" #h"E243F7445FCCF52878F8B83BE492EABA") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000002000000" #h"389F39873BDF652BC4F9043E30AD7CE0") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000001000000" #h"0669295AA4EA970860CF675D6469F765") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000800000" #h"35C5F9A85171DC889BFD5332E6C8E0D7") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000400000" #h"E07600A31EA2F2F781EBC12A3DDC936E") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000200000" #h"FB4CBEC86740711F59995673EB73ADE8") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000100000" #h"E572F84C3AEFB9DFCE042B39E68EA160") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000080000" #h"A87AB39149865D45B1E43D35D8C65001") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000040000" #h"4E5215E398BD5D0F7223348581D18158") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000020000" #h"2524BA2E297D0D2B26797441A7CDB01E") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000010000" #h"3DCE8EB2F6FBDBB7A33A26FF6485D4AE") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000008000" #h"28EC64C3D0C3AA145F21F4067322573B") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000004000" #h"EC6E0084F98693A0D3AD1E4790716ACE") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000002000" #h"F09BD8B4646FBAC5556B4F0B816B35EB") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000001000" #h"9CC8722245E3CD23DF490353DCACC9E0") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000800" #h"C73465C832CC907D4F79035E67F9AE29") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000400" #h"F311B9CF73CF5A8FAFB9DBEECC67B9E1") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000200" #h"56494DBCF09A6019B1C6CEE3DB0C844B") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000100" #h"0364CB9DAF55D765BC5CCD46B58FA718") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000080" #h"4DAFE2AAED6E49C98A7B8B979C32E6DB") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000040" #h"2F5BECD180A9449CE7A1ECCCB34057B1") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000020" #h"1C8B0DF1D643B9376B3E40B847850DFD") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000010" #h"674A46D61796154EC5DE8EC7EDA4BD3A") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000008" #h"8F111A48A7C598EFF1CBCB43414A7791") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000004" #h"CBD9C99FB47C9518151222D6F8B07446") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000002" #h"D449C5BE9B01257543932AF7B8777F69") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000001" #h"283D43A1CEA6187A31581D1606BB8B7A") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"8F5FBD0510D15FA893FA3FDA6E857EC2") (:ecb-mode-test #h"0101010101010101010101010101010101010101010101010101010101010101" #h"01010101010101010101010101010101" #h"41ECEE06DDA0946C816F528A767C0EF6") (:ecb-mode-test #h"0202020202020202020202020202020202020202020202020202020202020202" #h"02020202020202020202020202020202" #h"05A4BD219836864E94C4B2889D3235BD") (:ecb-mode-test #h"0303030303030303030303030303030303030303030303030303030303030303" #h"03030303030303030303030303030303" #h"3BC24A403B3A75B8D4B782A9D927D817") (:ecb-mode-test #h"0404040404040404040404040404040404040404040404040404040404040404" #h"04040404040404040404040404040404" #h"A9374C03F7898117A1232C2E23018EA1") (:ecb-mode-test #h"0505050505050505050505050505050505050505050505050505050505050505" #h"05050505050505050505050505050505" #h"10A91632AE37ABC2D033F7BB14AB6924") (:ecb-mode-test #h"0606060606060606060606060606060606060606060606060606060606060606" #h"06060606060606060606060606060606" #h"C561F40FBAACBF9F391AB826A884E9C5") (:ecb-mode-test #h"0707070707070707070707070707070707070707070707070707070707070707" #h"07070707070707070707070707070707" #h"77244792EE580B55573EA54422CA3E88") (:ecb-mode-test #h"0808080808080808080808080808080808080808080808080808080808080808" #h"08080808080808080808080808080808" #h"AD0A7CB23D8395B73AA6282EC794F914") (:ecb-mode-test #h"0909090909090909090909090909090909090909090909090909090909090909" #h"09090909090909090909090909090909" #h"0EE4D2906BAA40545CA568384A931E52") (:ecb-mode-test #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"D5E2D052295D9AA6585DEB4C15A19D87") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"33B778AB136AB9D21DF1790E2F2976BF") (:ecb-mode-test #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"38C855D99A97CEF3D6B81050A4B6D946") (:ecb-mode-test #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"9D5A5E0CCB48545792B7E5E377E93D32") (:ecb-mode-test #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"6C3D6E5D671E9A741E3129336A69494D") (:ecb-mode-test #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"FDB15CFC7B76C08FE55CF9A5A6FFBBD8") (:ecb-mode-test #h"1010101010101010101010101010101010101010101010101010101010101010" #h"10101010101010101010101010101010" #h"3F5E0F2746358A79867BC9C53ED0863A") (:ecb-mode-test #h"1111111111111111111111111111111111111111111111111111111111111111" #h"11111111111111111111111111111111" #h"4134E967037774D15B768CFB5AAE9278") (:ecb-mode-test #h"1212121212121212121212121212121212121212121212121212121212121212" #h"12121212121212121212121212121212" #h"8409D43358FB65E15B982EE201EC297D") (:ecb-mode-test #h"1313131313131313131313131313131313131313131313131313131313131313" #h"13131313131313131313131313131313" #h"8F5ED0CEE82C1180BD9EDEB6F1039385") (:ecb-mode-test #h"1414141414141414141414141414141414141414141414141414141414141414" #h"14141414141414141414141414141414" #h"2C206B2DD373A00B092062B84548DE1E") (:ecb-mode-test #h"1515151515151515151515151515151515151515151515151515151515151515" #h"15151515151515151515151515151515" #h"C8BDB8DB589874C0C63C61AF2396D356") (:ecb-mode-test #h"1616161616161616161616161616161616161616161616161616161616161616" #h"16161616161616161616161616161616" #h"2AC6DB0F6517E029674B1D6BBAC2F0AD") (:ecb-mode-test #h"1717171717171717171717171717171717171717171717171717171717171717" #h"17171717171717171717171717171717" #h"F8A68E8085367FEF4F2957DE5C39890E") (:ecb-mode-test #h"1818181818181818181818181818181818181818181818181818181818181818" #h"18181818181818181818181818181818" #h"EE9AF60D3B823A5A22BD64F431C33D0A") (:ecb-mode-test #h"1919191919191919191919191919191919191919191919191919191919191919" #h"19191919191919191919191919191919" #h"0C089EC9B30C05A0732EDD45388B1206") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"DA8B46B1DE2DF166455289EE80C007F2") (:ecb-mode-test #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"F4ABF5759D1EEF9032003CE71ADC89E5") (:ecb-mode-test #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"C45246D944923F22A52433E6834EABE4") (:ecb-mode-test #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"933DFD6FD6A8F6002EAA8BC96E4D173A") (:ecb-mode-test #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"7F578BE8AEA0B19532CD84EB6CE99C58") (:ecb-mode-test #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"0946EDC0537114610C2C88D7038781DB") (:ecb-mode-test #h"2020202020202020202020202020202020202020202020202020202020202020" #h"20202020202020202020202020202020" #h"A378961A1BD0DC17A858748446D7993D") (:ecb-mode-test #h"2121212121212121212121212121212121212121212121212121212121212121" #h"21212121212121212121212121212121" #h"E00676475A7E79BAA3A4D827E90C4DA5") (:ecb-mode-test #h"2222222222222222222222222222222222222222222222222222222222222222" #h"22222222222222222222222222222222" #h"97705B12EB02AEE32E3B20C8D3D1536E") (:ecb-mode-test #h"2323232323232323232323232323232323232323232323232323232323232323" #h"23232323232323232323232323232323" #h"EF3F9529B28A89C27D453C5851701729") (:ecb-mode-test #h"2424242424242424242424242424242424242424242424242424242424242424" #h"24242424242424242424242424242424" #h"2A59340EAF729D9D420A35356AFFB9B7") (:ecb-mode-test #h"2525252525252525252525252525252525252525252525252525252525252525" #h"25252525252525252525252525252525" #h"7F18A8306EED7B7CAED0CA0A3B984868") (:ecb-mode-test #h"2626262626262626262626262626262626262626262626262626262626262626" #h"26262626262626262626262626262626" #h"3FF1B8949DD23FF33BDDB7E521C58B98") (:ecb-mode-test #h"2727272727272727272727272727272727272727272727272727272727272727" #h"27272727272727272727272727272727" #h"F1564D6E102AEF2B4E9DA47690DF1AEE") (:ecb-mode-test #h"2828282828282828282828282828282828282828282828282828282828282828" #h"28282828282828282828282828282828" #h"E5B1D4094AA87ABCCD772DE2376027C3") (:ecb-mode-test #h"2929292929292929292929292929292929292929292929292929292929292929" #h"29292929292929292929292929292929" #h"B1FBD116E78F6AE98E2E47398D1D6AF4") (:ecb-mode-test #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"077480EF2B318CDB85270DBE23C2E891") (:ecb-mode-test #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"8F19A3D1BB7977A3C6CE913C4D050517") (:ecb-mode-test #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"9C484441D6D7D5F599FEEEB9CB9D20B4") (:ecb-mode-test #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"1E50A480982009BDE185B63F362540AB") (:ecb-mode-test #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"337AF3C8EB758B35422EA948B8E5E5BF") (:ecb-mode-test #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"4DCB003CF973FDD11C1B436D6A231523") (:ecb-mode-test #h"3030303030303030303030303030303030303030303030303030303030303030" #h"30303030303030303030303030303030" #h"B4F6B60191FF256E382EE4091C243819") (:ecb-mode-test #h"3131313131313131313131313131313131313131313131313131313131313131" #h"31313131313131313131313131313131" #h"04E788E38D25065BFC003DDC34016A2C") (:ecb-mode-test #h"3232323232323232323232323232323232323232323232323232323232323232" #h"32323232323232323232323232323232" #h"BD6ADA5AC9D0F4AC07AF306F342539D0") (:ecb-mode-test #h"3333333333333333333333333333333333333333333333333333333333333333" #h"33333333333333333333333333333333" #h"AC2DE2AECF634D8980F1B8CE6C22DD25") (:ecb-mode-test #h"3434343434343434343434343434343434343434343434343434343434343434" #h"34343434343434343434343434343434" #h"96C1A8505DFEC968DA28A5FEEBA99C91") (:ecb-mode-test #h"3535353535353535353535353535353535353535353535353535353535353535" #h"35353535353535353535353535353535" #h"E4E4CB94E2DDA601172BB0DF5EF015E8") (:ecb-mode-test #h"3636363636363636363636363636363636363636363636363636363636363636" #h"36363636363636363636363636363636" #h"BC8BE15A7C1DD5B55B5BC358EBF59B09") (:ecb-mode-test #h"3737373737373737373737373737373737373737373737373737373737373737" #h"37373737373737373737373737373737" #h"35FC60E0CC820CB4139A453554C8FF9A") (:ecb-mode-test #h"3838383838383838383838383838383838383838383838383838383838383838" #h"38383838383838383838383838383838" #h"9CD94C5325854DDC0A2F643A308947B5") (:ecb-mode-test #h"3939393939393939393939393939393939393939393939393939393939393939" #h"39393939393939393939393939393939" #h"111CBA7601D9FB9A1C907574692C8FB7") (:ecb-mode-test #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"6FF68C784289F1EDB9655354AE25376C") (:ecb-mode-test #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"2976F1A757D38B5BE4E092DA06D35E02") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"5B6F7CC56E17890586C22BAF8A2561B8") (:ecb-mode-test #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"D4EFA980403A0156DED415B023A95E9B") (:ecb-mode-test #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"D08247B94300B32D960952E826B18C52") (:ecb-mode-test #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"98600CA772B770B9D1A5ABAD1CEAFC0A") (:ecb-mode-test #h"4040404040404040404040404040404040404040404040404040404040404040" #h"40404040404040404040404040404040" #h"AE04F7ADC21C22C60B21F5C00A3DFA19") (:ecb-mode-test #h"4141414141414141414141414141414141414141414141414141414141414141" #h"41414141414141414141414141414141" #h"2034FB5D77BA8A5ACB3D0D291EAB5AAB") (:ecb-mode-test #h"4242424242424242424242424242424242424242424242424242424242424242" #h"42424242424242424242424242424242" #h"073E5B7C4AEDA8E389EAB1C004F9013B") (:ecb-mode-test #h"4343434343434343434343434343434343434343434343434343434343434343" #h"43434343434343434343434343434343" #h"B6DAB2B60D0632F01A34E022FE65BD70") (:ecb-mode-test #h"4444444444444444444444444444444444444444444444444444444444444444" #h"44444444444444444444444444444444" #h"87B8CD47F0C7C3E35585B1C224426CB2") (:ecb-mode-test #h"4545454545454545454545454545454545454545454545454545454545454545" #h"45454545454545454545454545454545" #h"A5064DD8B8C34EE5ECC2332A3E2BABFD") (:ecb-mode-test #h"4646464646464646464646464646464646464646464646464646464646464646" #h"46464646464646464646464646464646" #h"F24827043DEF50B138CB6075122532E8") (:ecb-mode-test #h"4747474747474747474747474747474747474747474747474747474747474747" #h"47474747474747474747474747474747" #h"15822AAD6F8548362FFDC73B4D5CE3A5") (:ecb-mode-test #h"4848484848484848484848484848484848484848484848484848484848484848" #h"48484848484848484848484848484848" #h"EC758A044AB108FB446BCC102A85D5E9") (:ecb-mode-test #h"4949494949494949494949494949494949494949494949494949494949494949" #h"49494949494949494949494949494949" #h"BC761F3BDA27472513624827E9384E75") (:ecb-mode-test #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"544EEDB2B77BBD0518310DDEA64A71C9") (:ecb-mode-test #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"0BE6BF7A86DA610DFEAA98E1E6F71471") (:ecb-mode-test #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"2B71F5191680F17E5F6272582D9E486B") (:ecb-mode-test #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"48FC5FCEC3367F73D493E09EFCA7CB65") (:ecb-mode-test #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"E1CA452D48B458C516929FB74C284AC7") (:ecb-mode-test #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"886F7BE40205C0191832E3FF637EAB26") (:ecb-mode-test #h"5050505050505050505050505050505050505050505050505050505050505050" #h"50505050505050505050505050505050" #h"6498690FE34315EC6B8F727C0DD8E769") (:ecb-mode-test #h"5151515151515151515151515151515151515151515151515151515151515151" #h"51515151515151515151515151515151" #h"47134F0B0409D108E59BD5C84A7B7D04") (:ecb-mode-test #h"5252525252525252525252525252525252525252525252525252525252525252" #h"52525252525252525252525252525252" #h"35C1D2053EBB859FB0A0CF1C57B0C1A4") (:ecb-mode-test #h"5353535353535353535353535353535353535353535353535353535353535353" #h"53535353535353535353535353535353" #h"8B1858D355BF485D52FDB62FC4F1E112") (:ecb-mode-test #h"5454545454545454545454545454545454545454545454545454545454545454" #h"54545454545454545454545454545454" #h"AE85AE86A47E18C6A737B78E961965DA") (:ecb-mode-test #h"5555555555555555555555555555555555555555555555555555555555555555" #h"55555555555555555555555555555555" #h"7352C66C58C333B378DF5F18DBE7D5D1") (:ecb-mode-test #h"5656565656565656565656565656565656565656565656565656565656565656" #h"56565656565656565656565656565656" #h"2805EABFB9835BC03B70D1FF7C3AD58D") (:ecb-mode-test #h"5757575757575757575757575757575757575757575757575757575757575757" #h"57575757575757575757575757575757" #h"A316D1C5FDF13F3215D2FDE07705B471") (:ecb-mode-test #h"5858585858585858585858585858585858585858585858585858585858585858" #h"58585858585858585858585858585858" #h"B2BCE2C9A9B2DF124CA02518F860CD22") (:ecb-mode-test #h"5959595959595959595959595959595959595959595959595959595959595959" #h"59595959595959595959595959595959" #h"83AFDB28C51770FB7BBCE55A3289C46C") (:ecb-mode-test #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"CE49679C1F60CF82D63CFF5E0205CB82") (:ecb-mode-test #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"DE920AECF4C02A57C0D147D87D1F9708") (:ecb-mode-test #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"AA4A5B5BDE95CB89C20FCCDFF5562A25") (:ecb-mode-test #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"40D23C429DE4B95ADA235FFCD5B271BB") (:ecb-mode-test #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"A47A425592D54D4092285E51D26C9904") (:ecb-mode-test #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"774D4FE2F609B1D028FCFD943569750D") (:ecb-mode-test #h"6060606060606060606060606060606060606060606060606060606060606060" #h"60606060606060606060606060606060" #h"52043A70B14C1777132491ECFBE88056") (:ecb-mode-test #h"6161616161616161616161616161616161616161616161616161616161616161" #h"61616161616161616161616161616161" #h"B1A32F018FDB63CA167CF0E72F9629F5") (:ecb-mode-test #h"6262626262626262626262626262626262626262626262626262626262626262" #h"62626262626262626262626262626262" #h"49C4EC0B638B38334DE266900B2DDC87") (:ecb-mode-test #h"6363636363636363636363636363636363636363636363636363636363636363" #h"63636363636363636363636363636363" #h"5B8110F987FE41F1ADBF2553E8ADC2FD") (:ecb-mode-test #h"6464646464646464646464646464646464646464646464646464646464646464" #h"64646464646464646464646464646464" #h"7C3EE9B019038955E48439947474D94F") (:ecb-mode-test #h"6565656565656565656565656565656565656565656565656565656565656565" #h"65656565656565656565656565656565" #h"CFA3C8DE4E878E8E2704BEE547B06C68") (:ecb-mode-test #h"6666666666666666666666666666666666666666666666666666666666666666" #h"66666666666666666666666666666666" #h"77AFED8B47D1C0AE4EBD878AB833F4F8") (:ecb-mode-test #h"6767676767676767676767676767676767676767676767676767676767676767" #h"67676767676767676767676767676767" #h"586A2E64021F6A08F81EB4F85021D6D1") (:ecb-mode-test #h"6868686868686868686868686868686868686868686868686868686868686868" #h"68686868686868686868686868686868" #h"2F0163311D82C6ADA22D385762CA2777") (:ecb-mode-test #h"6969696969696969696969696969696969696969696969696969696969696969" #h"69696969696969696969696969696969" #h"76343F98A358DDD3154DA2EC06ACDA84") (:ecb-mode-test #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"5299BC5FBDDD3AACAB3F8AFD3BFF969A") (:ecb-mode-test #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"BFCB21291F2FFFDBBAA538F11C38F9C4") (:ecb-mode-test #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"3C0DFBDCFC687037FCF41F0041D4F9E8") (:ecb-mode-test #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"1BE029F3ADC93EFA5AEBF368B69169EE") (:ecb-mode-test #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"DA4A15CDA66D25300C94FFC0BEE8CA14") (:ecb-mode-test #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"49360779359ABA649A7C0AEB719FD06F") (:ecb-mode-test #h"7070707070707070707070707070707070707070707070707070707070707070" #h"70707070707070707070707070707070" #h"DB8381DA6498BE677A0B8D352E9A8A4F") (:ecb-mode-test #h"7171717171717171717171717171717171717171717171717171717171717171" #h"71717171717171717171717171717171" #h"E89143FD946549271010A98030B1A581") (:ecb-mode-test #h"7272727272727272727272727272727272727272727272727272727272727272" #h"72727272727272727272727272727272" #h"CE5B2B1CC32D41C5DE924C8D1186499C") (:ecb-mode-test #h"7373737373737373737373737373737373737373737373737373737373737373" #h"73737373737373737373737373737373" #h"133398CDB0FAD25C7EF187ED54CF8C99") (:ecb-mode-test #h"7474747474747474747474747474747474747474747474747474747474747474" #h"74747474747474747474747474747474" #h"0D276D5DF8F06405A2F1E40EEB46371D") (:ecb-mode-test #h"7575757575757575757575757575757575757575757575757575757575757575" #h"75757575757575757575757575757575" #h"1F7FA8FD6562ECBA741F97BA1F3516E8") (:ecb-mode-test #h"7676767676767676767676767676767676767676767676767676767676767676" #h"76767676767676767676767676767676" #h"67C9D36932440232891E1AE3861EBC5A") (:ecb-mode-test #h"7777777777777777777777777777777777777777777777777777777777777777" #h"77777777777777777777777777777777" #h"D7FB52A59B5EF5A7525B20A2534D3843") (:ecb-mode-test #h"7878787878787878787878787878787878787878787878787878787878787878" #h"78787878787878787878787878787878" #h"13A47B1F05EECA7654D5E8954177156C") (:ecb-mode-test #h"7979797979797979797979797979797979797979797979797979797979797979" #h"79797979797979797979797979797979" #h"80B4C22450C346A8B7A543006DB18F2F") (:ecb-mode-test #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"23DB80B36E88431C6E3BC27D321C4E68") (:ecb-mode-test #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"F6AF4CF2C330606D556B0D04C8E2B416") (:ecb-mode-test #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"8C30082710E0109645EA1A3C5A5E4A41") (:ecb-mode-test #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"80FA1D463D24B97315BECCD0AFE34FEF") (:ecb-mode-test #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"46D86A3DE28D8F888209C74E6382AD9F") (:ecb-mode-test #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"44473A65D59610CB6483321A10D43CBE") (:ecb-mode-test #h"8080808080808080808080808080808080808080808080808080808080808080" #h"80808080808080808080808080808080" #h"8B5F6448DC21B7A255806EE216BA610F") (:ecb-mode-test #h"8181818181818181818181818181818181818181818181818181818181818181" #h"81818181818181818181818181818181" #h"0F33CB570C72235A2D8F0FEC7B545B63") (:ecb-mode-test #h"8282828282828282828282828282828282828282828282828282828282828282" #h"82828282828282828282828282828282" #h"4816FC73256660AA7562BE0E5071BC82") (:ecb-mode-test #h"8383838383838383838383838383838383838383838383838383838383838383" #h"83838383838383838383838383838383" #h"43AF4160467E80059290A6AC7BAA4A46") (:ecb-mode-test #h"8484848484848484848484848484848484848484848484848484848484848484" #h"84848484848484848484848484848484" #h"1FB4670FB79559C60844223EBAFDFE36") (:ecb-mode-test #h"8585858585858585858585858585858585858585858585858585858585858585" #h"85858585858585858585858585858585" #h"A60E6C0DAE838AFB8D7C2D8EAA0BF64C") (:ecb-mode-test #h"8686868686868686868686868686868686868686868686868686868686868686" #h"86868686868686868686868686868686" #h"C5D9B82890DEDEE4E5E1919EED08DAE3") (:ecb-mode-test #h"8787878787878787878787878787878787878787878787878787878787878787" #h"87878787878787878787878787878787" #h"250703745A955FDDA99A757F83AC3042") (:ecb-mode-test #h"8888888888888888888888888888888888888888888888888888888888888888" #h"88888888888888888888888888888888" #h"D2256893CBE5A1C0C9C913DF01100FE4") (:ecb-mode-test #h"8989898989898989898989898989898989898989898989898989898989898989" #h"89898989898989898989898989898989" #h"CE78B65D592C20E260BFBAE226A39D2F") (:ecb-mode-test #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"3CE271926127EAA4C1292B58622212E8") (:ecb-mode-test #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"BC73F0065D686EB1ECF28408EB7A07E4") (:ecb-mode-test #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"562E1BBCA0AE3BD89A021A62BE8AAC97") (:ecb-mode-test #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"D59A11F1FE4D358BA2795D4CB228BE97") (:ecb-mode-test #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"9F229940801606D80BA97D41BB874812") (:ecb-mode-test #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"5B047EA4379D790C47F1C1ED1718B585") (:ecb-mode-test #h"9090909090909090909090909090909090909090909090909090909090909090" #h"90909090909090909090909090909090" #h"A759AB33A4372D87B4B4609846187E0D") (:ecb-mode-test #h"9191919191919191919191919191919191919191919191919191919191919191" #h"91919191919191919191919191919191" #h"76BDF6D200918080969A45948E74179C") (:ecb-mode-test #h"9292929292929292929292929292929292929292929292929292929292929292" #h"92929292929292929292929292929292" #h"415B8FC9F03C29E4A60EB761C8E74A05") (:ecb-mode-test #h"9393939393939393939393939393939393939393939393939393939393939393" #h"93939393939393939393939393939393" #h"742887F818D35C945DF724422EF5EBB0") (:ecb-mode-test #h"9494949494949494949494949494949494949494949494949494949494949494" #h"94949494949494949494949494949494" #h"E467ADD5DD64E5A0885D244A5DA2F631") (:ecb-mode-test #h"9595959595959595959595959595959595959595959595959595959595959595" #h"95959595959595959595959595959595" #h"B6F68148ED9A6D72F13E4D41F518DDBD") (:ecb-mode-test #h"9696969696969696969696969696969696969696969696969696969696969696" #h"96969696969696969696969696969696" #h"02FDDCC5052D78160A897058D1A7AF34") (:ecb-mode-test #h"9797979797979797979797979797979797979797979797979797979797979797" #h"97979797979797979797979797979797" #h"5DD31E247695CC3DBD78A647AAAE5E88") (:ecb-mode-test #h"9898989898989898989898989898989898989898989898989898989898989898" #h"98989898989898989898989898989898" #h"BEA9FC7C4CC6D377E9516220D4499093") (:ecb-mode-test #h"9999999999999999999999999999999999999999999999999999999999999999" #h"99999999999999999999999999999999" #h"479A3AAEC96F126159550697FA06EA5F") (:ecb-mode-test #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"27EC7D1AFEF6D3ED5640FB682D2655DE") (:ecb-mode-test #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"4410B85B93E6323885038EA347987522") (:ecb-mode-test #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"ADDDDB68ACE7B693E415A47CAD9E9243") (:ecb-mode-test #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"D022059811637D5E7D79D00DD038C971") (:ecb-mode-test #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"1C894F59DEEA393CC8F0B10D0776C4D4") (:ecb-mode-test #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"4C590C53DB8A1BDD0E5B632D7526E447") (:ecb-mode-test #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"AB82622223DEE61E171E16F02513B299") (:ecb-mode-test #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"25145659D41C2B094FFBC95AA480BCCA") (:ecb-mode-test #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"A4412CF097A9ACF4864F079AE20A4113") (:ecb-mode-test #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"FB6B54DDF10D1EACA89359AC97AF2D33") (:ecb-mode-test #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"7F312533F38FA2C4BF0D7C839123E8B9") (:ecb-mode-test #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"DB249DBE78B7AF0EA5B680BE36779893") (:ecb-mode-test #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"5E6B1C020CF0101A65E0C792FF6F9D56") (:ecb-mode-test #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"FA7CAC608B8DC8D5724C5AFFA4955E8B") (:ecb-mode-test #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"CA1E477E26F4B139F5CE82BDFB33889D") (:ecb-mode-test #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"2F079CE5524DBB13D63E967EB93292AC") (:ecb-mode-test #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"EFBBD75DD535F8266C1B669204ED3652") (:ecb-mode-test #h"ABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABAB" #h"ABABABABABABABABABABABABABABABAB" #h"A8F953FDAF7E245D4CDDEE67FEBA703E") (:ecb-mode-test #h"ACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACAC" #h"ACACACACACACACACACACACACACACACAC" #h"067E5F98CBB6D3300FC77BD563D03E36") (:ecb-mode-test #h"ADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADAD" #h"ADADADADADADADADADADADADADADADAD" #h"9D7C6FF24EB123C880631B1BBD05903D") (:ecb-mode-test #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"7D031A7C7F285FE9EBFC376D81F5ACFA") (:ecb-mode-test #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"5B7EAB3872097577801D89B4B32C02E7") (:ecb-mode-test #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"3E7C551467F9D5A37FD908CD53BBCACB") (:ecb-mode-test #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"7648DC27654E287CC1DC2238A51BCFCE") (:ecb-mode-test #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"3BB54679AB2B2CEA276F39A02BE753BC") (:ecb-mode-test #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"BBCC73D1E90D383D986B8423B3CFE4A5") (:ecb-mode-test #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"18CB14A2ADF005096CA5BF66EC99D26E") (:ecb-mode-test #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"71F64CA25E1F8A1FFED4DE47B5DB5AB6") (:ecb-mode-test #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"37DEC731BA8BE85DEA95E4C00D1B5149") (:ecb-mode-test #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"959AFEE28E44407156F897B03AF341AC") (:ecb-mode-test #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"92A0D0EBF5B8EB39A9C2BACB756088D5") (:ecb-mode-test #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"83E154BACD52495DEB7F3E27D7F94185") (:ecb-mode-test #h"BABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABABA" #h"BABABABABABABABABABABABABABABABA" #h"944BC70E999A6E83D6D3BB3D1E4B3D0F") (:ecb-mode-test #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"62E3BC89CCAA4AABB84E711514B72869") (:ecb-mode-test #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"25994A3B6E0725D3E22E0590CA70CA71") (:ecb-mode-test #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"DD235399C2EC127EBEA1430F90570D2A") (:ecb-mode-test #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"60B58AB96CB2B80768FDC9FFDCAA2CC5") (:ecb-mode-test #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"5841CF7EAB45A56F67BF95B22AD5BD6E") (:ecb-mode-test #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"8F1731B452815BE73424CCA396FCC0C5") (:ecb-mode-test #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"1E1EAE83B0F3DF2A437CEB165BDA5191") (:ecb-mode-test #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"CC112FC4D16FFDBBA9A89774D97E24E8") (:ecb-mode-test #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"B4FA203D1D739EA2D5449AB82F2BC5C7") (:ecb-mode-test #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"1ABDD362C683018E3E3D5048F2042925") (:ecb-mode-test #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"FCEE4FB9FE9BF8BDEC454AAAC43FA059") (:ecb-mode-test #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"A80A46F397AF6F6C6DF47350E4D55D27") (:ecb-mode-test #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"044BB1F4251DCEE03745E15E5A887720") (:ecb-mode-test #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"71D1224C8DF1FC3D13459CE2F6F7E6C2") (:ecb-mode-test #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"055E63A9EB7F25441F67AB97D5D13789") (:ecb-mode-test #h"CACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACACA" #h"CACACACACACACACACACACACACACACACA" #h"1ADB9933FDBA27CF859C82F7C07DBA41") (:ecb-mode-test #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"FCF29D7D2A87FFEF7E3B806292D419B9") (:ecb-mode-test #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"6CD27F41B3D3DC39E681696A7C190A92") (:ecb-mode-test #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"D6669233D43127176FCC93FFCA953600") (:ecb-mode-test #h"CECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECE" #h"CECECECECECECECECECECECECECECECE" #h"CCE3FAEBA35643C5A749E589A532BAB2") (:ecb-mode-test #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"9C9436B8B7EA53323B1FD0BE13FAB980") (:ecb-mode-test #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"16ED7994B93F42AA47F7B8418E038AF1") (:ecb-mode-test #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"948590A5F7280D77F7E90A23C237ACE9") (:ecb-mode-test #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"7E667E550C0D1E34A2992B6F297127B7") (:ecb-mode-test #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"B04EFA621DEB9DC468CAB452D71870A5") (:ecb-mode-test #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"EEFDC6C8BF26D7FE343EA46270A66581") (:ecb-mode-test #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"74F9907E9C10DE9637DD670AF0BD3538") (:ecb-mode-test #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"4B21E006C3E8427DCD2DB42A0A654D41") (:ecb-mode-test #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"AA7BB1307530885ADF97BB17A94D77DB") (:ecb-mode-test #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"28E04622125B6C7C3F6E7CBB936828BE") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"4D674671F642E2526F079CF7244A12BC") (:ecb-mode-test #h"DADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADADA" #h"DADADADADADADADADADADADADADADADA" #h"2A2D10E96ABE5A49191C8F09DCBAD8DF") (:ecb-mode-test #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"885BC34961A6BE3DE3B01C072B4B83B1") (:ecb-mode-test #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"AA63E58592B4E9383F77E28C85A19861") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"76FA05760B9636326A462BAFAE319264") (:ecb-mode-test #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"997EF7F6DCD1B6E9FE6AB3BF017C3DD7") (:ecb-mode-test #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"A16BA6FFB4F2A315C773394930C7CA55") (:ecb-mode-test #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"41A686AA18A1DDE19CBEFFB40C20BFD6") (:ecb-mode-test #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"FBB5480BA5DACBD651C25FEDEAD9550F") (:ecb-mode-test #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"79C6F04212FF6F3CE1337FC94155C0C3") (:ecb-mode-test #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"C9B3385A6117688088A74FE69D85A75E") (:ecb-mode-test #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"40DE94A956298229745B1D6D2288ACCF") (:ecb-mode-test #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"00E8F328C3EA3FD56879A7AB76676F58") (:ecb-mode-test #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"FA9473FDC7FE510CF4F1E90619F8A069") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"B60CF82FE8A1BD7085AB14A129004D2B") (:ecb-mode-test #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"218FA02A1A845D760AF7303A04D152B2") (:ecb-mode-test #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"2ECBF0AEDACD98E84A9E049CD76B893C") (:ecb-mode-test #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"BBAA2D7E3E3B95E3135CF0D037372A7A") (:ecb-mode-test #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"EB37307C4283D3B44703BDB09B8A91DE") (:ecb-mode-test #h"ECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECECEC" #h"ECECECECECECECECECECECECECECECEC" #h"DF67EEB3D6A1BDF54F414A0DBC79BC59") (:ecb-mode-test #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"F59A986D73D98351420F755BBF3C5F94") (:ecb-mode-test #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"A9B38C2A80B204248F2F3458BA246D2A") (:ecb-mode-test #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"A2270F4FC2FF6BD4759E7760B9F138E1") (:ecb-mode-test #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"AD758DFCF9482FCE35A83CFE114D3C7B") (:ecb-mode-test #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"A792EA51C9410550FE40CF8169183326") (:ecb-mode-test #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"636284D1BD6169E93A34AEC638A10DE2") (:ecb-mode-test #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"AFA32B1472F24054CAACB70E0B7D58AB") (:ecb-mode-test #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"6FBF54EBA62CC155CEC5544B9652EBF1") (:ecb-mode-test #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"F91CAC6E14B53586A1A16DC13AEABD09") (:ecb-mode-test #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"1D5D55D3A316B49767DEF93FD270A06E") (:ecb-mode-test #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"191615B13852CCAE755DB689815E01AA") (:ecb-mode-test #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"47B514031DFBD57082DB1AB6AD10830F") (:ecb-mode-test #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"9E9F120791DDD28622F4C029C9D5440B") (:ecb-mode-test #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"27165EAA5E3FFA0F9F1481747D92FBAB") (:ecb-mode-test #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"3F0DC37A7123D78410C19A756A18E51F") (:ecb-mode-test #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"55615B53EEA249F18C4246533D3C4E0E") (:ecb-mode-test #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"35725FFF671680BE7DBD46D1326298A5") (:ecb-mode-test #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"DAE333F1F9616CCDA06889F871F30339") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"5983A4D8DD1904C2ED9A2A416265552F") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F" #h"00112233445566778899AABBCCDDEEFF" #h"E5C82D388ED59B96EE87E3F48A6E879E") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF482BD6459F82C5B300952C49104881FF48" #h"EA024714AD5C4D84EA024714AD5C4D84" #h"A565F4A3F2AED0708F3885BA9C216946") (:keystream-test #h"face439a3d55886014d04e59bfb4fcac5439608beff33fe3940823fefda5f9bdc05efdbd2654b04f788c2f2257623885b47e4072969ab5603f06d1d337460c95ff494ba08fb309306319a021462dd81efe60446a8beca344da9b2f7fd7ea4425b25f27986a07cb601067923a0779e8e6406147f70965480f947085036e839a87ee271da03ead966713fea2ca2541d063079931541f15d52ec3e0b3a66f7d542ad54700e26fc7825dd5928316e54faa5dbacd63c5f031d063006ded3d86905b808283449bc1acb028d738e4d87610704f547326c982cbfbcd0e9ee15515cfbbbfd77c4e0aa236678c9b1576552b0f83c48a900963098b79950ecbaf54ca3c71" #h"74be148e3befc9ffdb90a8c1b336a431" #h"1f13a77b4044e1961db35925554a6811a2d30fae730a2a2937d54eb7743345dc31b309b15758667e6ff53035662a1adc491d1617d3f93eb6d727cb77e59ad93d52b599056b106b943a15de2bf5c69b8e72e72ae7f142ab4ba8b97ce3db7aeb120e8a4f39f34dbdc63e32471dfe7d03c8157cac53625e3b34e082ae985db461383c52982a67b529e06ddbe1ca446c8a90a16cdf5e09340faffafb5b534553ebce92b6a6a8d6c17d3060fd8ac3dcf6acb725af630e680a2e06affa6fde09398c3928af81026e35425f06d4ce6637f9b58f095b8419a1afb6fdc0d303e68321872986be815b873ee90bc1e335bf7594b0f46b337ff04d40eb649efbed713633ad9d31898e98c68990b0c1b3aad893a87cdaaef50bd0b290319f5d28d2839468b6ce060c4a64f4d0fead290cec5e9b1efed58681ab7de9dc70e9af2905f3f44c71d14fdf866b324c19ff5affc743f7ea07e8f7f01f1169f310eeff0d6b3870bf89ddc0d5c261c8755a588b33d16e4b06a141e1368e275b2f450180c80e6ae6a56bd0dcce6a2ffb0478c656ebd8f97806107693388b07d8045e7ce110a2bc129d21bcab2dd270e6d12c19f4ac2414252c3ec5cb3a2b84c12e44fd1aa442608dc15b233074c7ca5857116063506449f098590bf9b61bc04800ae4035fa9e400f2e82ed6440a809a653e00e2a4b90ee6e9231ae7d933740cce93d14fca2bd842e333a78c219df99255205f4fa3adc9c955073f7c130b9854df327b1ee611b24997509121541db3819acadb7f45b0ef747511732d3a015f4d9bb1314c315fc3cfd11804ec97aa9e9390e756779817f74f02908a0c8225c4d161b3dbf85704e53edc676c6a9ee60d9916ade863dd0370231430b455f08968de3b32f3eef35e046df5887693ec892c195329085433ec5509fef191138a46df26423c2b71a03e743ff27d845f678dc69a30513b0d966d4ca76ccdee19c0bd55366227d573d4db73a01c275ffe1e0b27b8e5a12582af4e49d7dd39f350234b098fbeec0569add70d8d9b9570e0871102516f53b45b0a73ebc4cf9ed3eb360d63840aa458fc931c9bb17d3b14a6f6b740a2bb33055dca4d8dbe3413b3e4654e55b2b46aa34857184d948c7aadb2f6bf2ff0f3a8f1389c2fb6996e5b015db3121413ec48fe650e7608e39da3af8bd705cc1d1643bfb256801639086a4fdac44d1958df8710bde83de9f64a0b77b6e1843d832b3a5cc5922ddc5e1efac0b802505ea67d68aecb2204aadfad22dfc82a96bc245fb96e46d6a92630dc5190dab26dda65260697b4153c22c414f50401a3834512f3a125c48505719a4adf4179ed98f5d5ebc693294acb52f3bbd246e87671241147b4ea8dce7c94d218b2cf2a2c27b7d2de9a93b83ce11e1e08fe65c2cbc5800ce26f6d6") ironclad-0.57/testing/test-vectors/ripemd-128.testvec000066400000000000000000000012721420372057600225560ustar00rootroot00000000000000(:digest-test #a"" #h"cdf26213a150dc3ecb610f18f6b38b46") (:digest-test #a"a" #h"86be7afa339d0fc7cfc785e72f578d33") (:digest-test #a"abc" #h"c14a12199c66e4ba84636b0f69144c77") (:digest-test #a"message digest" #h"9e327b3d6e523062afc1132d7df9d1b8") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"fd2aa607f71dc8f510714922b371834e") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"a1aa0689d0fafa2ddc22e88b49133a06") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"d1e959eb179c911faea4624c60c5c702") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"3f45ef194732c2dbb2c4a2c769795fa3") ironclad-0.57/testing/test-vectors/ripemd-160.testvec000066400000000000000000000013721420372057600225530ustar00rootroot00000000000000(:digest-test #a"" #h"9c1185a5c5e9fc54612808977ee8f548b2258d31") (:digest-test #a"a" #h"0bdc9d2d256b3ee9daae347be6f4dc835a467ffe") (:digest-test #a"abc" #h"8eb208f7e05d987a9b044a8e98c6b087f15a0bfc") (:digest-test #a"message digest" #h"5d0689ef49d2fae572b881b123a85ffa21595f36") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"f71c27109c692c1b56bbdceb5b9d2865b3708dbc") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"12a053384a9c0c88e405a06c27dcf49ada62eb2b") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"b0e20b6e3116640286ed3a87a5713079b21f5189") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"9b752e45573d4b39f4dbd3323cab82bf63326bfb") ironclad-0.57/testing/test-vectors/rsa-enc.testvec000066400000000000000000000315561420372057600223260ustar00rootroot00000000000000;;;; RSA test vectors ;;; A few test vectors from PKCS1v2-OAEP ;;; 1024 bits (:rsa-oaep-encryption-test #xa8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb #x010001 #x53339cfdb79fc8466a655c7316aca85c55fd8f6dd898fdaf119517ef4f52e8fd8e258df93fee180fa0e4ab29693cd83b152a553d4ac4d1812b8b9fa5af0e7f55fe7304df41570926f3311f15c4d65a732c483116ee3d3d2d0af3549ad9bf7cbfb78ad884f84d5beb04724dc7369b31def37d0cf539e9cfcdd3de653729ead5d1 #h"6628194e12073db03ba94cda9ef9532397d50dba79b987004afefe34" #h"18b776ea21069d69776a33e96bad48e1dda0a5ef" #h"354fe67b4a126d5d35fe36c777791a3f7ba13def484e2d3908aff722fad468fb21696de95d0be911c2d3174f8afcc201035f7b6d8e69402de5451618c21a535fa9d7bfc5b8dd9fc243f8cf927db31322d6e881eaa91a996170e657a05a266426d98c88003f8477c1227094a0d9fa1e8c4024309ce1ecccb5210035d47ac72e8a") (:rsa-oaep-encryption-test #xa8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb #x010001 #x53339cfdb79fc8466a655c7316aca85c55fd8f6dd898fdaf119517ef4f52e8fd8e258df93fee180fa0e4ab29693cd83b152a553d4ac4d1812b8b9fa5af0e7f55fe7304df41570926f3311f15c4d65a732c483116ee3d3d2d0af3549ad9bf7cbfb78ad884f84d5beb04724dc7369b31def37d0cf539e9cfcdd3de653729ead5d1 #h"750c4047f547e8e41411856523298ac9bae245efaf1397fbe56f9dd5" #h"0cc742ce4a9b7f32f951bcb251efd925fe4fe35f" #h"640db1acc58e0568fe5407e5f9b701dff8c3c91e716c536fc7fcec6cb5b71c1165988d4a279e1577d730fc7a29932e3f00c81515236d8d8e31017a7a09df4352d904cdeb79aa583adcc31ea698a4c05283daba9089be5491f67c1a4ee48dc74bbbe6643aef846679b4cb395a352d5ed115912df696ffe0702932946d71492b44") (:rsa-oaep-encryption-test #xa8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb #x010001 #x53339cfdb79fc8466a655c7316aca85c55fd8f6dd898fdaf119517ef4f52e8fd8e258df93fee180fa0e4ab29693cd83b152a553d4ac4d1812b8b9fa5af0e7f55fe7304df41570926f3311f15c4d65a732c483116ee3d3d2d0af3549ad9bf7cbfb78ad884f84d5beb04724dc7369b31def37d0cf539e9cfcdd3de653729ead5d1 #h"d94ae0832e6445ce42331cb06d531a82b1db4baad30f746dc916df24d4e3c2451fff59a6423eb0e1d02d4fe646cf699dfd818c6e97b051" #h"2514df4695755a67b288eaf4905c36eec66fd2fd" #h"423736ed035f6026af276c35c0b3741b365e5f76ca091b4e8c29e2f0befee603595aa8322d602d2e625e95eb81b2f1c9724e822eca76db8618cf09c5343503a4360835b5903bc637e3879fb05e0ef32685d5aec5067cd7cc96fe4b2670b6eac3066b1fcf5686b68589aafb7d629b02d8f8625ca3833624d4800fb081b1cf94eb") (:rsa-oaep-encryption-test #xa8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb #x010001 #x53339cfdb79fc8466a655c7316aca85c55fd8f6dd898fdaf119517ef4f52e8fd8e258df93fee180fa0e4ab29693cd83b152a553d4ac4d1812b8b9fa5af0e7f55fe7304df41570926f3311f15c4d65a732c483116ee3d3d2d0af3549ad9bf7cbfb78ad884f84d5beb04724dc7369b31def37d0cf539e9cfcdd3de653729ead5d1 #h"52e650d98e7f2a048b4f86852153b97e01dd316f346a19f67a85" #h"c4435a3e1a18a68b6820436290a37cefb85db3fb" #h"45ead4ca551e662c9800f1aca8283b0525e6abae30be4b4aba762fa40fd3d38e22abefc69794f6ebbbc05ddbb11216247d2f412fd0fba87c6e3acd888813646fd0e48e785204f9c3f73d6d8239562722dddd8771fec48b83a31ee6f592c4cfd4bc88174f3b13a112aae3b9f7b80e0fc6f7255ba880dc7d8021e22ad6a85f0755") (:rsa-oaep-encryption-test #xa8b3b284af8eb50b387034a860f146c4919f318763cd6c5598c8ae4811a1e0abc4c7e0b082d693a5e7fced675cf4668512772c0cbc64a742c6c630f533c8cc72f62ae833c40bf25842e984bb78bdbf97c0107d55bdb662f5c4e0fab9845cb5148ef7392dd3aaff93ae1e6b667bb3d4247616d4f5ba10d4cfd226de88d39f16fb #x010001 #x53339cfdb79fc8466a655c7316aca85c55fd8f6dd898fdaf119517ef4f52e8fd8e258df93fee180fa0e4ab29693cd83b152a553d4ac4d1812b8b9fa5af0e7f55fe7304df41570926f3311f15c4d65a732c483116ee3d3d2d0af3549ad9bf7cbfb78ad884f84d5beb04724dc7369b31def37d0cf539e9cfcdd3de653729ead5d1 #h"8da89fd9e5f974a29feffb462b49180f6cf9e802" #h"b318c42df3be0f83fea823f5a7b47ed5e425a3b5" #h"36f6e34d94a8d34daacba33a2139d00ad85a9345a86051e73071620056b920e219005855a213a0f23897cdcd731b45257c777fe908202befdd0b58386b1244ea0cf539a05d5d10329da44e13030fd760dcd644cfef2094d1910d3f433e1c7c6dd18bc1f2df7f643d662fb9dd37ead9059190f4fa66ca39e869c4eb449cbdc439") ;;; 2048 bits (:rsa-oaep-encryption-test #xae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb #x010001 #x056b04216fe5f354ac77250a4b6b0c8525a85c59b0bd80c56450a22d5f438e596a333aa875e291dd43f48cb88b9d5fc0d499f9fcd1c397f9afc070cd9e398c8d19e61db7c7410a6b2675dfbf5d345b804d201add502d5ce2dfcb091ce9997bbebe57306f383e4d588103f036f7e85d1934d152a323e4a8db451d6f4a5b1b0f102cc150e02feee2b88dea4ad4c1baccb24d84072d14e1d24a6771f7408ee30564fb86d4393a34bcf0b788501d193303f13a2284b001f0f649eaf79328d4ac5c430ab4414920a9460ed1b7bc40ec653e876d09abc509ae45b525190116a0c26101848298509c1c3bf3a483e7274054e15e97075036e989f60932807b5257751e79 #h"8bba6bf82a6c0f86d5f1756e97956870b08953b06b4eb205bc1694ee" #h"47e1ab7119fee56c95ee5eaad86f40d0aa63bd33" #h"53ea5dc08cd260fb3b858567287fa91552c30b2febfba213f0ae87702d068d19bab07fe574523dfb42139d68c3c5afeee0bfe4cb7969cbf382b804d6e61396144e2d0e60741f8993c3014b58b9b1957a8babcd23af854f4c356fb1662aa72bfcc7e586559dc4280d160c126785a723ebeebeff71f11594440aaef87d10793a8774a239d4a04c87fe1467b9daf85208ec6c7255794a96cc29142f9a8bd418e3c1fd67344b0cd0829df3b2bec60253196293c6b34d3f75d32f213dd45c6273d505adf4cced1057cb758fc26aeefa441255ed4e64c199ee075e7f16646182fdb464739b68ab5daff0e63e9552016824f054bf4d3c8c90a97bb6b6553284eb429fcc") (:rsa-oaep-encryption-test #xae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb #x010001 #x056b04216fe5f354ac77250a4b6b0c8525a85c59b0bd80c56450a22d5f438e596a333aa875e291dd43f48cb88b9d5fc0d499f9fcd1c397f9afc070cd9e398c8d19e61db7c7410a6b2675dfbf5d345b804d201add502d5ce2dfcb091ce9997bbebe57306f383e4d588103f036f7e85d1934d152a323e4a8db451d6f4a5b1b0f102cc150e02feee2b88dea4ad4c1baccb24d84072d14e1d24a6771f7408ee30564fb86d4393a34bcf0b788501d193303f13a2284b001f0f649eaf79328d4ac5c430ab4414920a9460ed1b7bc40ec653e876d09abc509ae45b525190116a0c26101848298509c1c3bf3a483e7274054e15e97075036e989f60932807b5257751e79 #h"e6ad181f053b58a904f2457510373e57" #h"6d17f5b4c1ffac351d195bf7b09d09f09a4079cf" #h"a2b1a430a9d657e2fa1c2bb5ed43ffb25c05a308fe9093c01031795f5874400110828ae58fb9b581ce9dddd3e549ae04a0985459bde6c626594e7b05dc4278b2a1465c1368408823c85e96dc66c3a30983c639664fc4569a37fe21e5a195b5776eed2df8d8d361af686e750229bbd663f161868a50615e0c337bec0ca35fec0bb19c36eb2e0bbcc0582fa1d93aacdb061063f59f2ce1ee43605e5d89eca183d2acdfe9f81011022ad3b43a3dd417dac94b4e11ea81b192966e966b182082e71964607b4f8002f36299844a11f2ae0faeac2eae70f8f4f98088acdcd0ac556e9fccc511521908fad26f04c64201450305778758b0538bf8b5bb144a828e629795") (:rsa-oaep-encryption-test #xae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb #x010001 #x056b04216fe5f354ac77250a4b6b0c8525a85c59b0bd80c56450a22d5f438e596a333aa875e291dd43f48cb88b9d5fc0d499f9fcd1c397f9afc070cd9e398c8d19e61db7c7410a6b2675dfbf5d345b804d201add502d5ce2dfcb091ce9997bbebe57306f383e4d588103f036f7e85d1934d152a323e4a8db451d6f4a5b1b0f102cc150e02feee2b88dea4ad4c1baccb24d84072d14e1d24a6771f7408ee30564fb86d4393a34bcf0b788501d193303f13a2284b001f0f649eaf79328d4ac5c430ab4414920a9460ed1b7bc40ec653e876d09abc509ae45b525190116a0c26101848298509c1c3bf3a483e7274054e15e97075036e989f60932807b5257751e79 #h"510a2cf60e866fa2340553c94ea39fbc256311e83e94454b4124" #h"385387514deccc7c740dd8cdf9daee49a1cbfd54" #h"9886c3e6764a8b9a84e84148ebd8c3b1aa8050381a78f668714c16d9cfd2a6edc56979c535d9dee3b44b85c18be8928992371711472216d95dda98d2ee8347c9b14dffdff84aa48d25ac06f7d7e65398ac967b1ce90925f67dce049b7f812db0742997a74d44fe81dbe0e7a3feaf2e5c40af888d550ddbbe3bc20657a29543f8fc2913b9bd1a61b2ab2256ec409bbd7dc0d17717ea25c43f42ed27df8738bf4afc6766ff7aff0859555ee283920f4c8a63c4a7340cbafddc339ecdb4b0515002f96c932b5b79167af699c0ad3fccfdf0f44e85a70262bf2e18fe34b850589975e867ff969d48eabf212271546cdc05a69ecb526e52870c836f307bd798780ede") (:rsa-oaep-encryption-test #xae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb #x010001 #x056b04216fe5f354ac77250a4b6b0c8525a85c59b0bd80c56450a22d5f438e596a333aa875e291dd43f48cb88b9d5fc0d499f9fcd1c397f9afc070cd9e398c8d19e61db7c7410a6b2675dfbf5d345b804d201add502d5ce2dfcb091ce9997bbebe57306f383e4d588103f036f7e85d1934d152a323e4a8db451d6f4a5b1b0f102cc150e02feee2b88dea4ad4c1baccb24d84072d14e1d24a6771f7408ee30564fb86d4393a34bcf0b788501d193303f13a2284b001f0f649eaf79328d4ac5c430ab4414920a9460ed1b7bc40ec653e876d09abc509ae45b525190116a0c26101848298509c1c3bf3a483e7274054e15e97075036e989f60932807b5257751e79 #h"bcdd190da3b7d300df9a06e22caae2a75f10c91ff667b7c16bde8b53064a2649a94045c9" #h"5caca6a0f764161a9684f85d92b6e0ef37ca8b65" #h"6318e9fb5c0d05e5307e1683436e903293ac4642358aaa223d7163013aba87e2dfda8e60c6860e29a1e92686163ea0b9175f329ca3b131a1edd3a77759a8b97bad6a4f8f4396f28cf6f39ca58112e48160d6e203daa5856f3aca5ffed577af499408e3dfd233e3e604dbe34a9c4c9082de65527cac6331d29dc80e0508a0fa7122e7f329f6cca5cfa34d4d1da417805457e008bec549e478ff9e12a763c477d15bbb78f5b69bd57830fc2c4ed686d79bc72a95d85f88134c6b0afe56a8ccfbc855828bb339bd17909cf1d70de3335ae07039093e606d655365de6550b872cd6de1d440ee031b61945f629ad8a353b0d40939e96a3c450d2a8d5eee9f678093c8") (:rsa-oaep-encryption-test #xae45ed5601cec6b8cc05f803935c674ddbe0d75c4c09fd7951fc6b0caec313a8df39970c518bffba5ed68f3f0d7f22a4029d413f1ae07e4ebe9e4177ce23e7f5404b569e4ee1bdcf3c1fb03ef113802d4f855eb9b5134b5a7c8085adcae6fa2fa1417ec3763be171b0c62b760ede23c12ad92b980884c641f5a8fac26bdad4a03381a22fe1b754885094c82506d4019a535a286afeb271bb9ba592de18dcf600c2aeeae56e02f7cf79fc14cf3bdc7cd84febbbf950ca90304b2219a7aa063aefa2c3c1980e560cd64afe779585b6107657b957857efde6010988ab7de417fc88d8f384c4e6e72c3f943e0c31c0c4a5cc36f879d8a3ac9d7d59860eaada6b83bb #x010001 #x056b04216fe5f354ac77250a4b6b0c8525a85c59b0bd80c56450a22d5f438e596a333aa875e291dd43f48cb88b9d5fc0d499f9fcd1c397f9afc070cd9e398c8d19e61db7c7410a6b2675dfbf5d345b804d201add502d5ce2dfcb091ce9997bbebe57306f383e4d588103f036f7e85d1934d152a323e4a8db451d6f4a5b1b0f102cc150e02feee2b88dea4ad4c1baccb24d84072d14e1d24a6771f7408ee30564fb86d4393a34bcf0b788501d193303f13a2284b001f0f649eaf79328d4ac5c430ab4414920a9460ed1b7bc40ec653e876d09abc509ae45b525190116a0c26101848298509c1c3bf3a483e7274054e15e97075036e989f60932807b5257751e79 #h"a7dd6c7dc24b46f9dd5f1e91ada4c3b3df947e877232a9" #h"95bca9e3859894b3dd869fa7ecd5bbc6401bf3e4" #h"75290872ccfd4a4505660d651f56da6daa09ca1301d890632f6a992f3d565cee464afded40ed3b5be9356714ea5aa7655f4a1366c2f17c728f6f2c5a5d1f8e28429bc4e6f8f2cff8da8dc0e0a9808e45fd09ea2fa40cb2b6ce6ffff5c0e159d11b68d90a85f7b84e103b09e682666480c657505c0929259468a314786d74eab131573cf234bf57db7d9e66cc6748192e002dc0deea930585f0831fdcd9bc33d51f79ed2ffc16bcf4d59812fcebcaa3f9069b0e445686d644c25ccf63b456ee5fa6ffe96f19cdf751fed9eaf35957754dbf4bfea5216aa1844dc507cb2d080e722eba150308c2b5ff1193620f1766ecf4481bafb943bd292877f2136ca494aba0") ironclad-0.57/testing/test-vectors/rsa-sig.testvec000066400000000000000000000346231420372057600223410ustar00rootroot00000000000000;;;; RSA test vectors ;;; A few test vectors from PKCS1v2-PSS ;;; 1024 bits (:rsa-pss-signature-test #xa56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137 #x010001 #x33a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325 #h"cdc87da223d786df3b45e0bbbc721326d1ee2af806cc315475cc6f0d9c66e1b62371d45ce2392e1ac92844c310102f156a0d8d52c1f4c40ba3aa65095786cb769757a6563ba958fed0bcc984e8b517a3d5f515b23b8a41e74aa867693f90dfb061a6e86dfaaee64472c00e5f20945729cbebe77f06ce78e08f4098fba41f9d6193c0317e8b60d4b6084acb42d29e3808a3bc372d85e331170fcbf7cc72d0b71c296648b3a4d10f416295d0807aa625cab2744fd9ea8fd223c42537029828bd16be02546f130fd2e33b936d2676e08aed1b73318b750a0167d0" #h"dee959c7e06411361420ff80185ed57f3e6776af" #h"9074308fb598e9701b2294388e52f971faac2b60a5145af185df5287b5ed2887e57ce7fd44dc8634e407c8e0e4360bc226f3ec227f9d9e54638e8d31f5051215df6ebb9c2f9579aa77598a38f914b5b9c1bd83c4e2f9f382a0d0aa3542ffee65984a601bc69eb28deb27dca12c82c2d4c3f66cd500f1ff2b994d8a4e30cbb33c") (:rsa-pss-signature-test #xa56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137 #x010001 #x33a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325 #h"851384cdfe819c22ed6c4ccb30daeb5cf059bc8e1166b7e3530c4c233e2b5f8f71a1cca582d43ecc72b1bca16dfc7013226b9e" #h"ef2869fa40c346cb183dab3d7bffc98fd56df42d" #h"3ef7f46e831bf92b32274142a585ffcefbdca7b32ae90d10fb0f0c729984f04ef29a9df0780775ce43739b97838390db0a5505e63de927028d9d29b219ca2c4517832558a55d694a6d25b9dab66003c4cccd907802193be5170d26147d37b93590241be51c25055f47ef62752cfbe21418fafe98c22c4d4d47724fdb5669e843") (:rsa-pss-signature-test #xa56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137 #x010001 #x33a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325 #h"a4b159941761c40c6a82f2b80d1b94f5aa2654fd17e12d588864679b54cd04ef8bd03012be8dc37f4b83af7963faff0dfa225477437c48017ff2be8191cf3955fc07356eab3f322f7f620e21d254e5db4324279fe067e0910e2e81ca2cab31c745e67a54058eb50d993cdb9ed0b4d029c06d21a94ca661c3ce27fae1d6cb20f4564d66ce4767583d0e5f060215b59017be85ea848939127bd8c9c4d47b51056c031cf336f17c9980f3b8f5b9b6878e8b797aa43b882684333e17893fe9caa6aa299f7ed1a18ee2c54864b7b2b99b72618fb02574d139ef50f019c9eef416971338e7d470" #h"710b9c4747d800d4de87f12afdce6df18107cc77" #h"666026fba71bd3e7cf13157cc2c51a8e4aa684af9778f91849f34335d141c00154c4197621f9624a675b5abc22ee7d5baaffaae1c9baca2cc373b3f33e78e6143c395a91aa7faca664eb733afd14d8827259d99a7550faca501ef2b04e33c23aa51f4b9e8282efdb728cc0ab09405a91607c6369961bc8270d2d4f39fce612b1") (:rsa-pss-signature-test #xa56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137 #x010001 #x33a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325 #h"bc656747fa9eafb3f0" #h"056f00985de14d8ef5cea9e82f8c27bef720335e" #h"4609793b23e9d09362dc21bb47da0b4f3a7622649a47d464019b9aeafe53359c178c91cd58ba6bcb78be0346a7bc637f4b873d4bab38ee661f199634c547a1ad8442e03da015b136e543f7ab07c0c13e4225b8de8cce25d4f6eb8400f81f7e1833b7ee6e334d370964ca79fdb872b4d75223b5eeb08101591fb532d155a6de87") (:rsa-pss-signature-test #xa56e4a0e701017589a5187dc7ea841d156f2ec0e36ad52a44dfeb1e61f7ad991d8c51056ffedb162b4c0f283a12a88a394dff526ab7291cbb307ceabfce0b1dfd5cd9508096d5b2b8b6df5d671ef6377c0921cb23c270a70e2598e6ff89d19f105acc2d3f0cb35f29280e1386b6f64c4ef22e1e1f20d0ce8cffb2249bd9a2137 #x010001 #x33a5042a90b27d4f5451ca9bbbd0b44771a101af884340aef9885f2a4bbe92e894a724ac3c568c8f97853ad07c0266c8c6a3ca0929f1e8f11231884429fc4d9ae55fee896a10ce707c3ed7e734e44727a39574501a532683109c2abacaba283c31b4bd2f53c3ee37e352cee34f9e503bd80c0622ad79c6dcee883547c6a3b325 #h"b45581547e5427770c768e8b82b75564e0ea4e9c32594d6bff706544de0a8776c7a80b4576550eee1b2acabc7e8b7d3ef7bb5b03e462c11047eadd00629ae575480ac1470fe046f13a2bf5af17921dc4b0aa8b02bee6334911651d7f8525d10f32b51d33be520d3ddf5a709955a3dfe78283b9e0ab54046d150c177f037fdccc5be4ea5f68b5e5a38c9d7edcccc4975f455a6909b4" #h"80e70ff86a08de3ec60972b39b4fbfdcea67ae8e" #h"1d2aad221ca4d31ddf13509239019398e3d14b32dc34dc5af4aeaea3c095af73479cf0a45e5629635a53a018377615b16cb9b13b3e09d671eb71e387b8545c5960da5a64776e768e82b2c93583bf104c3fdb23512b7b4e89f633dd0063a530db4524b01c3f384c09310e315a79dcd3d684022a7f31c865a664e316978b759fad") ;;; 2048 bits (:rsa-pss-signature-test #xa5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05 #x010001 #x2d2ff567b3fe74e06191b7fded6de112290c670692430d5969184047da234c9693deed1673ed429539c969d372c04d6b47e0f5b8cee0843e5c22835dbd3b05a0997984ae6058b11bc4907cbf67ed84fa9ae252dfb0d0cd49e618e35dfdfe59bca3ddd66c33cebbc77ad441aa695e13e324b518f01c60f5a85c994ad179f2a6b5fbe93402b11767be01bf073444d6ba1dd2bca5bd074d4a5fae3531ad1303d84b30d897318cbbba04e03c2e66de6d91f82f96ea1d4bb54a5aae102d594657f5c9789553512b296dea29d8023196357e3e3a6e958f39e3c2344038ea604b31edc6f0f7ff6e7181a57c92826a268f86768e96f878562fc71d85d69e448612f7048f #h"883177e5126b9be2d9a9680327d5370c6f26861f5820c43da67a3ad609" #h"04e215ee6ff934b9da70d7730c8734abfcecde89" #h"82c2b160093b8aa3c0f7522b19f87354066c77847abf2a9fce542d0e84e920c5afb49ffdfdace16560ee94a1369601148ebad7a0e151cf16331791a5727d05f21e74e7eb811440206935d744765a15e79f015cb66c532c87a6a05961c8bfad741a9a6657022894393e7223739796c02a77455d0f555b0ec01ddf259b6207fd0fd57614cef1a5573baaff4ec00069951659b85f24300a25160ca8522dc6e6727e57d019d7e63629b8fe5e89e25cc15beb3a647577559299280b9b28f79b0409000be25bbd96408ba3b43cc486184dd1c8e62553fa1af4040f60663de7f5e49c04388e257f1ce89c95dab48a315d9b66b1b7628233876ff2385230d070d07e1666") (:rsa-pss-signature-test #xa5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05 #x010001 #x2d2ff567b3fe74e06191b7fded6de112290c670692430d5969184047da234c9693deed1673ed429539c969d372c04d6b47e0f5b8cee0843e5c22835dbd3b05a0997984ae6058b11bc4907cbf67ed84fa9ae252dfb0d0cd49e618e35dfdfe59bca3ddd66c33cebbc77ad441aa695e13e324b518f01c60f5a85c994ad179f2a6b5fbe93402b11767be01bf073444d6ba1dd2bca5bd074d4a5fae3531ad1303d84b30d897318cbbba04e03c2e66de6d91f82f96ea1d4bb54a5aae102d594657f5c9789553512b296dea29d8023196357e3e3a6e958f39e3c2344038ea604b31edc6f0f7ff6e7181a57c92826a268f86768e96f878562fc71d85d69e448612f7048f #h"dd670a01465868adc93f26131957a50c52fb777cdbaa30892c9e12361164ec13979d43048118e4445db87bee58dd987b3425d02071d8dbae80708b039dbb64dbd1de5657d9fed0c118a54143742e0ff3c87f74e45857647af3f79eb0a14c9d75ea9a1a04b7cf478a897a708fd988f48e801edb0b7039df8c23bb3c56f4e821ac" #h"8b2bdd4b40faf545c778ddf9bc1a49cb57f9b71b" #h"14ae35d9dd06ba92f7f3b897978aed7cd4bf5ff0b585a40bd46ce1b42cd2703053bb9044d64e813d8f96db2dd7007d10118f6f8f8496097ad75e1ff692341b2892ad55a633a1c55e7f0a0ad59a0e203a5b8278aec54dd8622e2831d87174f8caff43ee6c46445345d84a59659bfb92ecd4c818668695f34706f66828a89959637f2bf3e3251c24bdba4d4b7649da0022218b119c84e79a6527ec5b8a5f861c159952e23ec05e1e717346faefe8b1686825bd2b262fb2531066c0de09acde2e4231690728b5d85e115a2f6b92b79c25abc9bd9399ff8bcf825a52ea1f56ea76dd26f43baafa18bfa92a504cbd35699e26d1dcc5a2887385f3c63232f06f3244c3") (:rsa-pss-signature-test #xa5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05 #x010001 #x2d2ff567b3fe74e06191b7fded6de112290c670692430d5969184047da234c9693deed1673ed429539c969d372c04d6b47e0f5b8cee0843e5c22835dbd3b05a0997984ae6058b11bc4907cbf67ed84fa9ae252dfb0d0cd49e618e35dfdfe59bca3ddd66c33cebbc77ad441aa695e13e324b518f01c60f5a85c994ad179f2a6b5fbe93402b11767be01bf073444d6ba1dd2bca5bd074d4a5fae3531ad1303d84b30d897318cbbba04e03c2e66de6d91f82f96ea1d4bb54a5aae102d594657f5c9789553512b296dea29d8023196357e3e3a6e958f39e3c2344038ea604b31edc6f0f7ff6e7181a57c92826a268f86768e96f878562fc71d85d69e448612f7048f #h"48b2b6a57a63c84cea859d65c668284b08d96bdcaabe252db0e4a96cb1bac6019341db6fbefb8d106b0e90eda6bcc6c6262f37e7ea9c7e5d226bd7df85ec5e71efff2f54c5db577ff729ff91b842491de2741d0c631607df586b905b23b91af13da12304bf83eca8a73e871ff9db" #h"4e96fc1b398f92b44671010c0dc3efd6e20c2d73" #h"6e3e4d7b6b15d2fb46013b8900aa5bbb3939cf2c095717987042026ee62c74c54cffd5d7d57efbbf950a0f5c574fa09d3fc1c9f513b05b4ff50dd8df7edfa20102854c35e592180119a70ce5b085182aa02d9ea2aa90d1df03f2daae885ba2f5d05afdac97476f06b93b5bc94a1a80aa9116c4d615f333b098892b25fface266f5db5a5a3bcc10a824ed55aad35b727834fb8c07da28fcf416a5d9b2224f1f8b442b36f91e456fdea2d7cfe3367268de0307a4c74e924159ed33393d5e0655531c77327b89821bdedf880161c78cd4196b5419f7acc3f13e5ebf161b6e7c6724716ca33b85c2e25640192ac2859651d50bde7eb976e51cec828b98b6563b86bb") (:rsa-pss-signature-test #xa5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05 #x010001 #x2d2ff567b3fe74e06191b7fded6de112290c670692430d5969184047da234c9693deed1673ed429539c969d372c04d6b47e0f5b8cee0843e5c22835dbd3b05a0997984ae6058b11bc4907cbf67ed84fa9ae252dfb0d0cd49e618e35dfdfe59bca3ddd66c33cebbc77ad441aa695e13e324b518f01c60f5a85c994ad179f2a6b5fbe93402b11767be01bf073444d6ba1dd2bca5bd074d4a5fae3531ad1303d84b30d897318cbbba04e03c2e66de6d91f82f96ea1d4bb54a5aae102d594657f5c9789553512b296dea29d8023196357e3e3a6e958f39e3c2344038ea604b31edc6f0f7ff6e7181a57c92826a268f86768e96f878562fc71d85d69e448612f7048f #h"0b8777c7f839baf0a64bbbdbc5ce79755c57a205b845c174e2d2e90546a089c4e6ec8adffa23a7ea97bae6b65d782b82db5d2b5a56d22a29a05e7c4433e2b82a621abba90add05ce393fc48a840542451a" #h"c7cd698d84b65128d8835e3a8b1eb0e01cb541ec" #h"34047ff96c4dc0dc90b2d4ff59a1a361a4754b255d2ee0af7d8bf87c9bc9e7ddeede33934c63ca1c0e3d262cb145ef932a1f2c0a997aa6a34f8eaee7477d82ccf09095a6b8acad38d4eec9fb7eab7ad02da1d11d8e54c1825e55bf58c2a23234b902be124f9e9038a8f68fa45dab72f66e0945bf1d8bacc9044c6f07098c9fcec58a3aab100c805178155f030a124c450e5acbda47d0e4f10b80a23f803e774d023b0015c20b9f9bbe7c91296338d5ecb471cafb032007b67a60be5f69504a9f01abb3cb467b260e2bce860be8d95bf92c0c8e1496ed1e528593a4abb6df462dde8a0968dffe4683116857a232f5ebf6c85be238745ad0f38f767a5fdbf486fb") (:rsa-pss-signature-test #xa5dd867ac4cb02f90b9457d48c14a770ef991c56c39c0ec65fd11afa8937cea57b9be7ac73b45c0017615b82d622e318753b6027c0fd157be12f8090fee2a7adcd0eef759f88ba4997c7a42d58c9aa12cb99ae001fe521c13bb5431445a8d5ae4f5e4c7e948ac227d3604071f20e577e905fbeb15dfaf06d1de5ae6253d63a6a2120b31a5da5dabc9550600e20f27d3739e2627925fea3cc509f21dff04e6eea4549c540d6809ff9307eede91fff58733d8385a237d6d3705a33e391900992070df7adf1357cf7e3700ce3667de83f17b8df1778db381dce09cb4ad058a511001a738198ee27cf55a13b754539906582ec8b174bd58d5d1f3d767c613721ae05 #x010001 #x2d2ff567b3fe74e06191b7fded6de112290c670692430d5969184047da234c9693deed1673ed429539c969d372c04d6b47e0f5b8cee0843e5c22835dbd3b05a0997984ae6058b11bc4907cbf67ed84fa9ae252dfb0d0cd49e618e35dfdfe59bca3ddd66c33cebbc77ad441aa695e13e324b518f01c60f5a85c994ad179f2a6b5fbe93402b11767be01bf073444d6ba1dd2bca5bd074d4a5fae3531ad1303d84b30d897318cbbba04e03c2e66de6d91f82f96ea1d4bb54a5aae102d594657f5c9789553512b296dea29d8023196357e3e3a6e958f39e3c2344038ea604b31edc6f0f7ff6e7181a57c92826a268f86768e96f878562fc71d85d69e448612f7048f #h"f1036e008e71e964dadc9219ed30e17f06b4b68a955c16b312b1eddf028b74976bed6b3f6a63d4e77859243c9cccdc98016523abb02483b35591c33aad81213bb7c7bb1a470aabc10d44256c4d4559d916" #h"efa8bff96212b2f4a3f371a10d574152655f5dfb" #h"7e0935ea18f4d6c1d17ce82eb2b3836c55b384589ce19dfe743363ac9948d1f346b7bfddfe92efd78adb21faefc89ade42b10f374003fe122e67429a1cb8cbd1f8d9014564c44d120116f4990f1a6e38774c194bd1b8213286b077b0499d2e7b3f434ab12289c556684deed78131934bb3dd6537236f7c6f3dcb09d476be07721e37e1ceed9b2f7b406887bd53157305e1c8b4f84d733bc1e186fe06cc59b6edb8f4bd7ffefdf4f7ba9cfb9d570689b5a1a4109a746a690893db3799255a0cb9215d2d1cd490590e952e8c8786aa0011265252470c041dfbc3eec7c3cbf71c24869d115c0cb4a956f56d530b80ab589acfefc690751ddf36e8d383f83cedd2cc") ironclad-0.57/testing/test-vectors/salsa20-12.testvec000066400000000000000000002521261420372057600224610ustar00rootroot00000000000000(:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cfdc41f0c6e0a38abf71d5c7e8ec7b5d5eb266f8f0a55401426d5d636a68c1adf02ced40350a1edcbcfcc342ab7c4d68e08d9ce2d03ffffdf4c7f5b95fdf95a7eac84ef61235047f448ada16b681320ff600c8543ae8e00b651457da7a1dd463c03a51e7f058e9bb14eac4842bd4056225d7cf475496ce2e9f3621b20125c9cd11c63d7c504bcd") (:stream-nonce-mode-test #h"80000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fc207dbfc76c5e1774961e7a5aad09069b2225ac1ce0fe7a0ce77003e7e5bdf8b31af821000813e6c56b8c1771d6ee7039b2fbd0a68e8ad70a3944b67793789777087c2da45bb9c1a0b547a616ff118e0091d55139304b0fce4336be8343cc95b40593f14dc9ffa80080f7602b0e99e433e06b25de3a50a33aa64d50a367a21ace660ce74d2071") (:stream-nonce-mode-test #h"01000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ddc79aa848777639489b1c383b9e89e2d8b6d7d2bf5f2718b8a9aaf4e61f5b76d4e37345dbaa62d0a6898af6cd383424e7d9d00e23ca4252d6b336b113ba4a1017c1558a47b465193ea0d7a05e5e0d3e4515c652df59917985ff0a40c6dbb4a991ec58c407588138d452f434bddaeb9754546df7fa3f3faf98758a56c274c2f8b0634522cf157a") (:stream-nonce-mode-test #h"00400000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6c11a3f95fec7f48d9c16f93cc901eec8d347bea4c64b63f3e1cd88df4f03a595acc0500efc616dcfeba3e839f0f72c5a54a0801b90c864eeaa7f48cf37dc36554af256ef287be7dc4919f52d739dee205eea8dfce58261889430370d428fbe040ebc030c371253a31354d4b4bc615238b891f8a68726613b4ddd4b3ffbc58804bc22bde9a5a03") (:stream-nonce-mode-test #h"00020000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5c5bfb7d7879a8cb92271e120c8f710bb88221e484f78e065511a43ac79f694284829a3ca48f09b3b412123913ff6fe54c109a074af686e51ecc610249d54ff844024d12156935b57e0a695af265476cdbc6a57d8fc3bbd1520a3c093b81d8c3cae91a3dbd1d02428d3931d7e51726a4344552889a8f0bf850bb7e0076f8c0ddd01bd03c7d36eb") (:stream-nonce-mode-test #h"00002000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e27e394cc6b72eb535fd92d1bdf9f5d624671d5bfc9ef233f6b51f12bf338ae172dc8b7f4ce899bd5ff85b0546f022deb91fea1abac32ee1f7b671e7d6dbf9d6daf59b402482b681f714c5d07fe5e7507ffe1fd27de0ffe05ed9f81916cf9f957e7f78d3bbdd1f8552fcaf6a3685376f2082d13aafa9d80660930df9cbcc7b917ddf1fafed13f3") (:stream-nonce-mode-test #h"00000400000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e81b59467f0f390c6e08a287bc05b1d6bff81f5c6c00474f5029e03829532e1dae125d36e79369030d3d9555e1a507682460ee2dc833ccbe7aa6a5177710920996feb154b7c36a0babd38e06b4f68f7a0f4f8d211a8cd5ec3e2169c42c35eba3d7bc88d02b925c1e78542288ee9ff2666c034f510a69f9b7d85d670d2c349a7e7a44c866a22722") (:stream-nonce-mode-test #h"00000010000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7099ae9d9cb1ab463f1386999890eede6b02d8d6679bab095546a93a3b3718cf105a2bfc94472d8afde35db1a033063bf723639c2031dceb76641b40d467f4407603f7100386447c1a6528f49ad54d37370cba3ecf4c390b4af1f6240ca84640e2f26c904cf8e8ca16e841f32db70d495d8a5f362ff1810057ef31d4c9188f26b80b0a7aa093d2") (:stream-nonce-mode-test #h"00000008000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fb6bd50f88614ee55eb18124d434b4260c39a482d47ca9df71883354ef9dce19043bdd8ff41beac80d4c19d0b0b424bce58d6d64a796e2137aa04ab7cab2d9b12ee9b37d68a965ba8ad0823c45966cf8fe9948890fab47a724195d32cdbacf7b47c5daa786190926069edb002eb76cdd7c6c2a208180ebd309cba710904c1c9354414eaa377ae6") (:stream-nonce-mode-test #h"00000000800000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9bc4531dbb1b3c93379c752ffe09efed7d6df88aca380d1c5c632bbd8e6ef665fecaee6514e3bf29e900a60247f2a8afb07987d38e4b05a3b8fcd99db9aa583a219068fd39f9a00e06e84d1a5ba719c46a2da1e00c7bfbe6471088d9b2e3caf57c8a01428059ee3700042f1fcd1d7c5c2346c2f14178442d63fe981268538b43c0510e4300d126") (:stream-nonce-mode-test #h"00000000010000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9853aa7b7e1d59f6965b9344f4fb46fe512d7375530f29e1145af6e78eba7275e38f66a780a07508bd7b925c99055a97deaee5e624e8d9de316b70a5d1b80d538c0abe924d3c185bc77777745056044a06c8f9b2f56d827638a8ea84d0a5e9911a829580dce8d8c7f8b268a980278e9274f17278b5fd4da64f78bf4fdc35e66c3f0de1d6e78f30") (:stream-nonce-mode-test #h"00000000004000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2c05d37ac04089bd756d9dc8c6b89e60980ae502130b169579aad1c8273d0f2dd8433b8939c4a810ab0a9e55e8e84918683d140575d8652d3d427f1a6d6b30c1466a2e972dfab858ee2f818ad2f3d8b94a4bbb4eb5569a24983fed4461ff1f531a6a227b65cbc7763370447c8c7aed12bb437d91ebaa729721fc621bd9133679810b0d39dc100c") (:stream-nonce-mode-test #h"00000000000200000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fe2b90336d89ede44eb48116eaa3ac5b230c5c340fb4660dd2e0c06bd317112d81faa7dbcdb380abac5dbf93061833b71af04c3c3035c75cac42a0ef2addbf5376cdfc99556025c72bb0643803c8ab51c03876eb61b04aaed5e11bd65b4f485413c21f1db679b2acfddf8e7b9c84c3ea4ed04477d4200233f615db7c392d47a8eb4cf2fad7b315") (:stream-nonce-mode-test #h"00000000000020000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2583bcd1346638cb3f4afb128473b79157f83aea38ed80572269480ab4a5540d026b0132eb22b8f51e83269d104d217fa07b82d75c1b78a0a958fdc38f15d6b949e2345d5f0734d0310c5fbfd35ad2b6f6360d02ef680536b3b1d70e7cf0b4e840071cd768c2e1bf009fab0a309d995e3d566652c3340a203c68565f12d5b8ef5a862b55427822") (:stream-nonce-mode-test #h"00000000000004000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0a2172125b88c3eb438ae305ce6b95579fe534c1235b76cece16b471b3863b0458d09e455f806fde25908565501f6b4e38ff83d8a3a7ff88ffa462f582d55d3f44e71946c20a5760a9e8ed2e8c8cdbacd3db01693c7c31e4bc8fb225d0bc4f54d94bb69ba654fdcd2ebf285709af722bf02334b8c22f67bd447f07ec5b018fb10d36dd06f2fab4") (:stream-nonce-mode-test #h"00000000000000100000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4c706130ade7bc98837e6e78939e25aff5e63de2fbeda1d9b0bcdefee83519de575b4ecfd4749164d9cb52e7dacc880c5f3dd1d195cfad190a55ec755a08bbc8e582f54878fb57fdf0414852235a0318f149786cc35606a723c562d8baa501d8754f5e21b2809b64027a36f807dbb1ee788a536aa2fdeadc581d2d2e443f9f75aa501fa1992f80") (:stream-nonce-mode-test #h"00000000000000080000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"72d031be4c8c694b7f2b5e530e9fd650cd0c69d1b42e4b74d17a1c000f176a125128d9b3de3f4aea6019401256793334a212bc9046e6f042b8423ebe933085b31094095af223732ff1c2e3f2017ea2d6eef6301d14828ef275193adf473ec4100833ce95426a194dbcaffe87d7bc01d97eb0d8eed1e5b712ebb791433045e2327b8f6dbab7541e") (:stream-nonce-mode-test #h"00000000000000008000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"82340bd08fe3d91e8b5ae237303ee1940ad2f8804a9d6ffc2cc78b62baf3babc62309b95623fb3e377b6e25da61f74909a099042aae2af4dd9550d6af5445c340ba2672e7be491190c40fd3020fc814a9984611556b9dcbd97f347e0cb245c2f879b8e18cfae3d6d6af914f6d00c063a85d5e993ad69049ede448baa8cf75f32e1735e85962334") (:stream-nonce-mode-test #h"00000000000000000100000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7e01723f7e6715769cd2056abb8243a3d09668828607bac94bdd90eb3c274fcc963a2ee652444ec2d2890f5396730a7ec1fb1462b038a4f6a3f82a59110a2f72fb4c6d5fed6e3b5058fc92e9a38ac5afe9ceb7771b1117c78c9161eade3c99463beb157fd0c172605dc28ede1595a0cade1d87b37abac9ad991baf380b35272979d0437af3c392") (:stream-nonce-mode-test #h"00000000000000000040000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"27d8a44499e20e287f65d9d8b672286fa4105797d943ceb64e713608634faf8ba5352c3f83fc90f48d4cb4fea0557a1fa95da8ab22e30ba39519faccdc9ffef078b1b55b72090b05b80f4babaaf5f1533f14e667deb1ee17b267f0ace71b99f45764bc3f86f2bda60ae4e995483a0c4f0a670649c14758a1eed525fa868a443891cfd8ad787e28") (:stream-nonce-mode-test #h"00000000000000000002000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"69b8e2de6cf57335791ddc4e386b921ea168d1215e5b34da34a219f14e96af7147b703c867bc11696736ee9a2f7d2640990c665d1af9020a9981df97226e7c15b1487fa3cb63ae57cd3aaa3acef11268bcc5b56d358fa7dbed90cddf364b8280f192ecedffccffc4848349df46ba3df6ec6ccd6bee9fb4f1c9eb3c8ee3b9d97e09bb70acafedb7") (:stream-nonce-mode-test #h"00000000000000000000200000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3be4d86d4021c41f9e5a0f70c0e3d73fe9de9802a1f61d0b83d9f5660ff2dbac68b43fd553742e5225ba2bfbd3b2730bb851915c688ab05fd691fefd0d804796b325a818e95d8d99ef428ecb6e5d50513e05043515a1704d248a8e555c5556090e65bdb678b3da7a8906a1b3b545269df83a3156a2900be3b11862bc560e5289316feca09a44f4") (:stream-nonce-mode-test #h"00000000000000000000040000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d05fcab1d30a5e733d65796cfe1adf7f906122a54f00f3cde0631932550df9bbb67253ad38bbd1244576c86c91eebd7ef28890b6023690e8ac1a5775109ee50a63a924635e9a3d1362f7b548090a01645665cda142666664b4835b68bf057b849c157099eb9965a46e7359404f342a65cac289ea5e933e4c074980420be6e4cd19eee7be14fb25") (:stream-nonce-mode-test #h"00000000000000000000001000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3c1e21c2c26368df800a76a6bcc14bba809376f383e7458d072dd2aec6fd6bc0c491657a908ef156f8c9228a61339cbd24bf48d216dd9cd0b57b142fb8486d3c136acab2aaebb681cb8f41bf7c49eff749c8e8e57bb1988c66fbd48fb40f5238bfa655256023df47b8291c996d3a1f264e1c2586b8c4f25714f5dc9b392f73bc333d230e0eaa36") (:stream-nonce-mode-test #h"00000000000000000000000800000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d419f343d42105c551b8da4a071ce0849e41ec551c8872220959a24374b73dbdbb151420d86bdfde86b25aff9a2f9564821a88b0af1d3993a1603129454f34a00f245fe84f6af975fa3a33d190f850cd2603a1e846934bf0e01193a6f0f3ec4e01e40d8260d9813f715d2ef9b42161b17f893047fa3212d9be39bf669621cb26fda8c5c2e9a042") (:stream-nonce-mode-test #h"00000000000000000000000080000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9b2e739121d5277ce5e0604c4a779ed888d9b1e6084b172e037e9044779fb6ce39eb4b9bdd9957b0546a399d7405db89d0e8caf73f8e4e0d56a48b229304f57f9a225cf60dc0ba4f2cc1e7e3ee78dd629c5c4dc02aac501873424a7d614c1506611c72fa4d3fd58b29f2f62d427bbe7c65b098ea7cbbe8b552bf0267fe74c685e53a1a48028a2e") (:stream-nonce-mode-test #h"00000000000000000000000001000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2133c83347abe6b66a4439a42740cb7ecc6c443395b17aeb9fb3b0f7109beaebd4c4d166b884d3393bea64e250c129e492c916ca5b4d24c8d275641175cf0db4e18af33399c4755d6d419c85452690ff89206da361905c4a4f528d756222131ec07f49ee3ecce2f739161521d6891ce7abe4ff0ef57d47c7d2bfce8c0b1cf2b962f41727525b35") (:stream-nonce-mode-test #h"00000000000000000000000000400000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"61845adefcb254d007a50e4823a7463f032b010bd62afe89fc65f1616ec2f91f641d18e63e1a5300d074bb62c647bfea18cf7247e0c643e9ca65a6bb3a00aea2772e242658c4f61bb1789ec558a43e4711cfa085bc1a81beeb1e0fd0a671b0e5af2f8543734131d74faccddcc9c1d0f197fa1cbdf3caa5f68f650c971ff1ba09f9a9bb7592151d") (:stream-nonce-mode-test #h"00000000000000000000000000020000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cc779d108bb75080f5edf19ba5e1a78c1e9f2c01435150c121b85a1bc5c2e4ec19d1a6477ae4b1f5347a9597030423cc8960714252e281f43820e45f4576db5c17480992c374100c5cb196e2e79850be60db92b2a43f69cd991c2231abb25302e66f9febdda4ed97f4613f1d17d1894a41358b301a5d5b1e8b2d5beba8ba075d6ca203f307011a") (:stream-nonce-mode-test #h"00000000000000000000000000002000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"98135756460e96587ac7420919e6aedd0a1b3a410b845a645f0c2b2316652ca48d6161232c3151dbb890b3e4b5bd968779f42fc1def2c11d2c7afb1903d236d6f5bd623e7bce6aee50af3464c892cb399e29623e282bfa766d450b92b6a18370fd9e28849a9104f8b08806c9ca1db2162d9f487f740a7aa0764888a262c848de37609671a91dc5") (:stream-nonce-mode-test #h"00000000000000000000000000000400" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e50126f5def07ec86cbd598c6d73eac748bc668a409889db23e4981f2602eff8d131e427690647a978b4ede5200a857c69b8ba545ed510a5630edeafc01d032b6a4ba33d61ebe835309d91deab75beef23888fcd7a46d461708f89bc1d8adca7a7f47c8c079208bd7fb4b815d82a78d5f7121856df6cd53b52425e3de4c52b198496db5425eddc") (:stream-nonce-mode-test #h"00000000000000000000000000000010" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ab8a3e54be4b9878bf820f45e85e0c80a00a8e9d06501ee4ba21246e3cd638fd20fb979dd6f9fb8de4695a0da7043060dba23817bcb78c94ea83682ba0ecd5e1ac0121e6a3615e66f4056e21f94e6fa5b8746de22020f7cc3eacf86466c2c9b53740251e49c72dd081e53679936d1bd1eebfe439a4ab763ee888eb8ac463c991458a0cecacd58b") (:stream-nonce-mode-test #h"00000000000000000000000000000008" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a33edfc5ebdfe7cdcc4d25b2ef67a3ea54a5ab6aa56886082defcd6434720f93d752616e1b28035b1768c47343b354817f8d7454fc48096359df424dc0f1a19216cbd23d4ce4c5104a337a6fc7c237a9a0829291d0365d3de5fd6e10025723b96d49db601f2c7d972d7190e7b916f5afccd94f89624922a622209877cbc2d506a51eaa9806e493") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bd78a2f8118a563c761db4f2fbe055da97f90988d27594d9c5dfd13a3efeaa3f68f0d2564850adf5017433968e4b3405ac49a39532124fcd6f47e415c7028a83da50179ed65f7a5c28e96ff325a4e154b47e11dddf1f601a0097d744e706224b214f114ee5e6a77dcf2df58ef20917cabece166054ba672a6b73f0da0da7931074671f874468b6") (:stream-nonce-mode-test #h"8000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"afe411ed1c4e07e4d0cde3b33e31ec190fa4cc796a58bafb848ead8d07d02cd2d4b6f9f30cb0b57007e3733895cc8d1060107975acaeeb689b6cf614ab64a3d608e397d664b03a12cb31711c6a3f1528dd0031b6adc87574a2ad8e8f470f4aa18f21c6ed7b5178a9978847dff457edd5192c7d70b7a8636da61a98eb2053c285f3962301b83533") (:stream-nonce-mode-test #h"0100000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3017b4c29e30f223a756d5457a5e2f80a873dc3ce97ee9f9dcf75136050ece45d4a0d2899e82a45cf3c01401db2415a3b537adb5bf8ad4c6f3b26a81405e85f60ad6e3e06a81b2837dfb21ed655654bada362e21d68a7e032ae22f10179e4aeb7accea5b10aa813fbe9db17ec10e4149c5cb6cda420164e7f6e7bb3075d12c29547d5a90153cf1") (:stream-nonce-mode-test #h"0040000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d35370fc409ee2729711067694626557e18a0c423b5ede308cd51ef08d12973744bda1f9e10f33c7d2b0e4cc31db1d7c2a475d1a9c3abff48bbb7d7e901653e261d2988081d7a7e0972c63c34358f7ecc31875eb642ad2e4dcf083b3a73ccc5857bc040655ca776cbb639961511eafef9947e416d86c737dc0b397903b5fb33de4ab173721c762") (:stream-nonce-mode-test #h"0002000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8bd936269bbc32e02a81095b89e8384be127b0fd751b6e5ffc2da7ba75c19b2723d25619c3d6517be1f4f32739e92f7c5d4bde842b689794946d1d5bc70d72edacaa0d012bed630b9aa002110ca89fa6ae3b4d202c2b58341e6c66147f1dd4fbfda823e326ac178ef84bf589e96587d48d2985a7c2f3b83629f766b5019144cfeeec411439327e") (:stream-nonce-mode-test #h"0000200000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2817baa279c2e38743a8971a554e1dcaa76833afa424c3d5c4a2fe1cbecfca3b617f46af068a542d96d7064312311cd3b8685bbfa8129fdfaacd4f1320ada9977aa8dde2fa830a0898c12030a199d690fa7da7ef3a9d9ba66d6b954f41a85a7e872dd4409381f452c5bdb16143c4d5ada51fc52da5b60a4ee099741ecae59be4d8495ae6427826") (:stream-nonce-mode-test #h"0000040000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2a4a62a90ad578cd3eda7f67e9c2037853eb24c0fc27150e8b19074207ed07237d42acab61abd7a33d5ffa3f2f9a03e9ae92fabbb6a3382669dda25125206b197ce4ea8a2bbe96c5533557838e2d398cf13544a2f21ebc2fe40ef2e3dec8b698e814d89d601ba8445dad9f038bdd92ce1a8d3314c9ba3b5edc7e97b977f5eb7f37c3c76d1979f7") (:stream-nonce-mode-test #h"0000001000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0b5b3d1e653759c67fda0a4ea40f030f791b0cf5db733dae33f83ab056a772c0d310dbbf5372909a625b7bab4d1fc47d6bc5d8427fb69a74e5cd8969d150dd849fb37d80bdf8db5d22a8df249afbd459a6ae3674d11c98cf9692b218c9ced496d5f1328434e09480dacb434113e2c245792f5dc78f93ae31922544251268e8e0d4782c3d557527") (:stream-nonce-mode-test #h"0000000800000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fe752c0b2e97a64791dc1fd2ab71b3a855c35e30f83babd0a138c886f5efa25d36bf2e42d626ae0965a4d7f0d2b6371d2b12ce82de0706c3865ecfcbf4842e53c1eca0620d65cc0e980e00b885cffe5d586c2615ded8731e511a45f438d3d6ed234daaad0b094ec8a4e163a36972261bd7ed4986ddc999365ea32e506be982854caa59ee4f88c4") (:stream-nonce-mode-test #h"0000000080000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9ace05ee9d1a6793d3fd02710232ef865fedd42a8fe81583040e8806741ab32a60aa9b4cdf4ddef80f603b6ff907ff5ecb6698948435aa311568c017b10a01003c532515106114ce7bec5929076f81fb0bcf07ec5a8a545d19cc74ab93f3c19fa9b39ef161a93a0959c5d2e2f6f460df04e6606d63c8707b635f98296cfd9fd1518a64676a7e44") (:stream-nonce-mode-test #h"0000000001000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"75aac0ab48296d7b067c9c19d369d7850b2641ca830e86b759f1dfbfac545d2f59dc53f9290223c23fcb1f5b5196a3753bcaf34e9481e96769c52bd8328f349f90f4331131ce3407812c75b3df3bc8a03f73869f516125125f7ffd57c3aad4c85e175b8023f824904169c6ec5e80dd04b978fcf466040787ce3991b590b9fe87c34b50d9766bac") (:stream-nonce-mode-test #h"0000000000400000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cd99611264ddcb292089ed3b4d22d5750de700d3f5ec0424b72cf31ef6acf196b171a900c812fc6797d09d2cf4a1d3bdfff07ec2a906230b7088ac4e5324d3206e0599fd1d695542f8b4cae95939a3ddbc8d5fb953ab069270dc8c4e00597e033ecf45744b859cd174ee68b7bab8e0ff3f4f1e9eebbf384b177710aba8ce6e6b17ac4bcb825927") (:stream-nonce-mode-test #h"0000000000020000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0c14df3b3cea13f6548b99078c2fa1920935fe9201fbf82c668d67fa0726191fc30ebc5da1f7d717dacd790f81d487e4c179f26826cfd61cb6de6cfdfaf61009b57ac44d9b208d153c5984b7baf0519ab4670bf638fd7bbc9f94e6152a76ea18d01ec45cbe3028292216f665a4cd58918b05e6facfe2c4cc400815bb9b11f084faa057d29e303b") (:stream-nonce-mode-test #h"0000000000002000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"03e79da8f3fe895d01fdf42b487285a82eb2381f56075c7ba51f607ce2471a7ead574140cf23d8488998d0b5ea5ee228d6e602b87f30a4c5f1371265e73efa85ae469dc4d474d2b16b59c30d02a822d517576848337aa00411db6f2b77f89552e3e8258d5e1939fc716a46c9f8794d1cd34f9ec60bbf088725043b3ab5082e5293f75d031e53c7") (:stream-nonce-mode-test #h"0000000000000400000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ca5ddc232c7c2e95ca642d6173322e2e81c99e8d7ec363ca2876378b8ef77ef375b5a2ca3e7886e24f2eb4cd2a3afd6929af0ce85e199d730a0353fb6d42bffc76ec5b4da36fb3e3fe4721ee5ad7dbda7f8bf3b0d6fcfc6a39f96b6f28d8277fd1ab1f230d6abfe5886b3ae900c84f4e7c63efc9f7561092e1e22395dbfccdfb8e604465b64b54") (:stream-nonce-mode-test #h"0000000000000010000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3af52d28fac3c6d35460b43ce8c6df7b5669a3fc728fa2ae27d83afb66f03c5901c57869f5d7098047f212cd9c1c298b3bd53d5b0d84c66e749914d2be4d7211bc40acb457f63c1610bd9e1306ee933033f5da29d7418fa3bd528f7588002ba4542b3ef4865968ed5e30b7dde5a1c6471432a6aa3c1ce34de56271a55932891e529465b1af489a") (:stream-nonce-mode-test #h"0000000000000008000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6bdbb3a8a2ea6788bb5b49e015a0e6e8958e734f2218ca5d18fb13bd472f6a72960d80421fb01934de479911cd02866572f32830a7b1fdb166288a1afecdc4ae0ac7719657bc4a4b6c74613cac878f24a2ada56ef2826c4dbb9198cfdffe9118558ffff60087cfd3ae75b5c94d0b90c665244faf28b7131dfe5ee8d9d0e06db9cf2ddc3d99e8f2") (:stream-nonce-mode-test #h"0000000000000000800000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c3c9956a5b83f093b58d5caa632a67d1562248af6dc04f01e8625b293fff379d737539579af6592c328c92036ea49f753aee4d0890b40ce6f38961ec336c9f7197dd46621d01e99fdd018198739e87b0aa253e3172e0d27a6aaf52a03ef85eedcff85ad899d321a2f304318707999a9d9b3d24c15067364910372821f180221330744c2e0c6311") (:stream-nonce-mode-test #h"0000000000000000010000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5fe1c89df08561834b48fcff2f67066b7664111eca60afae7ff93925d894d82215f4363455061ec5976b7e1ceb2ef2974a22b89323bd8525ffbbe0a9b116b511fff230fe92d4483531faac90ed53da38b584bb5066519779446b5d7883bad083cc46369c832d05db8a9ba9143e72c5f877b2aebd0c720a7d5247a2295eeda08c6dce8ab2ddd336") (:stream-nonce-mode-test #h"0000000000000000004000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c3a645d5cc7285747292350f997e38f9a115dbd83743222e9018ed47fdb348d9d5ed058012528edb35b7e9ab6e26274a68e891c1703ed1e67d23b8087c9b06b97f09970c0ab9f65cf27df04e9a10623e3164834b189aa1b51acd754adaaedc31eab07e4322a54813d8ac3becb1f421347a309d1c2e2d0fe46b6e15428ff1d3ed79fb1339f967af") (:stream-nonce-mode-test #h"0000000000000000000200000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a404440c5894a57f1d38bf7c8cb16596c693d5763015f4577815d1e3a7f891d48f6452a57e1434e618f39800c388fb8288fa117f00f5f71e3f9a18d59737a197546d58160da7dded4ace2e54855e52b112fb8bfd5fbdef5b580717c7b9bfcd3f69be7b6930597797de19bbe8f89caddd8307c8d0a6955d53bd30dde566f66a240a5235bb4f5713") (:stream-nonce-mode-test #h"0000000000000000000020000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5c766a9576d5828560e7f5ba53626065bfc2a107b46a0c4eff2fc9b4e8b62e0b748da6ccf0222757766ccffb1e1bfa718e17c65031c4fdff8387630ace4f44210bbee3bf18d1e41219e4312a737676d55d8aadb4cdc73b852e9ae8bb6e9e89ea5cfb08656cf5d7f1d60c940815cf0cbc1b74d9f91f70c9a78b20de426a4b7727caed8cf45ceb67") (:stream-nonce-mode-test #h"0000000000000000000004000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"da019d14d91d709f083b03f612a0f1db5fd6583e0ad26da83e3ffc18b5279f64342d111583b7c4f4f4269dcbb87b968070e37897c9d655d244471d8a76a6c3b632af28924618983133b20fc77f9f6ff053e0ff41cf52a15be8e527b7edaff5db3b82af47f10fac4451dcd99f3bc7e530c9341285dd31ad22982d711322e147de3d458f80fc02d6") (:stream-nonce-mode-test #h"0000000000000000000000100000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f3fab8664d7d9020fe57839fd4a25fc785d69c7e10c8fd6f009c606fb9544fc5b5ef827541844fc3149c6e0e9edeef66137762ed128dc894c76cdc415c0bd7acba6ea95f4130560aa6922d10c8bc1e2642e96630d192dadde9a4b7b3bc4bcb818c2d681cedbec8e1706aa38e557f2c5df0dfd5ac9aaeebc858253d22097986cddf1a7ee0c7a8b2") (:stream-nonce-mode-test #h"0000000000000000000000080000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"889851a91f36854982ace9f2af47071a47945d1d929f516911855a8d111b0eab464686c39c8468a69508b5d01878efde0684e2984ab908b7dc121d07c5826843e057895b82871de930e62516283a4b2e0909dbf4f6b087ca814e8562a742f99b9482789641feacfd09100ff784e14df503cd4e73a20a12f39ce673c0a48e83c1c8ee6e680deec5") (:stream-nonce-mode-test #h"0000000000000000000000008000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"71cc8b00ff34bae424eafdf3305050733a2b68f0098f6e2a20c9995ca20b5be1f84e57d123c47507d41463a0f42be8e7e17bd7894b3b1b0691c61a200aa5f9e60aeac62896a17d10f5bfafd3ec06077ffff6e5ab5b13bd652b90cf5bcf7e761cbbe78f1b5fecde451d4a6b81a3bc213135b28ef20e7da57d0dd8dbcf5bce4bc2f1bd17ff1062e6") (:stream-nonce-mode-test #h"0000000000000000000000000100000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"150429243fd7dd449ffc36fd4eeca94327764bc23def8d7c42d7e17be76b7ea38e194897c61df33aaf855368d3b7ed60630e80c19b7c9f3e81805e456cf00e896e79ae971e3a36825d89f40ad1e6feabf54def7768b6a24964d8ea20094568e9ce062b78cdda54dd7e9766059eb334a26e853bb9696279de141581d53ca7dcf6dcda8fb1366319") (:stream-nonce-mode-test #h"0000000000000000000000000040000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c43ab39d357434696a7b55cb0b6403164c5a3c88b0383d3f870a502eaf91287a4f592c311a10201ffa7bff2e8bb55871d240d751caaaebb68261b5c766b5d533971687c9dbc753870d2de0c5f08dc0b3d831c24e768c16c48f18a711921e01557ab22cd7b3b82bcbeb2c528094a3fc181e9c91b0c79db3ea0118c7c252ae57424dc175030122ac") (:stream-nonce-mode-test #h"0000000000000000000000000002000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"26809ff48b88828368b882e8b57643817265bf4a7503f69b1c116503c8d92e86bdc4bee76321b7d3c5d3fc08f7ac0f37fea03669f5a6c6781a8bc561154c3cc3c92d2cefb77107203ee546b1f01622924cbc8e8bed3a7f52eb5f957f195db5fe4371eca4253898cced15556bb7c40aa6bb69c3db8e54c270da23fb2ebc497d868d70affa2124b7") (:stream-nonce-mode-test #h"0000000000000000000000000000200000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5fd60580568a798d7a8f703ffde705902c96600031880edaf9bd7bc8aa17fa522132ba8dad4d019d3f8a39afd1968de80cbea9b3a686ad6a2cc3256b8b944a02be397ddb5671f2faa83aa3833ab122f35fc7c515952af2718c49732640b301c78c72a3720d24b8d09fe3159b1b6e1d79e77ab01b5829e1697e564e26c68caac7332e80a8c95dba") (:stream-nonce-mode-test #h"0000000000000000000000000000040000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f14213aae4b9009e3e186711d38d2e5f7f9e1582c3119faf35e2bd769c27af98f91b1f3be438b9c4d9e34a660c9503af1028e46991791dd5bda0f72402e918b8f813d6b9a8f1afc5bd8286e5446a3b625affc971b7249bfcb427a93f69dbb327849f82810affe4741c976c9468cb16a5209728b9bf2cfd341cf51bac1582be8832fce001bcdea2") (:stream-nonce-mode-test #h"0000000000000000000000000000001000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f2fbaf4aa2e4d48b69ec904907bda430cbcd06cc2d0ee01185e37fc51f2c777936668123d4aee32f5f706191f94f7457f2b9a219bfe2e6c40716eb70750e2ae6f4c6a9d32be20a56d89096d9b06c8109d34d65e92bce98dfd5d4db348a8ab60c4d4f453a84ccd8e65d5ed93b4874baef5a3f59a1343c4a4b34eac3b20c0e08a2092c518330dd88") (:stream-nonce-mode-test #h"0000000000000000000000000000000800000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3ea85c20cd99d8cdf441e86c90bfafaf435308232748500cd88b77489b38760cad2c72abaea433a4ac189f0c8f3a39da25e8e33f28c3512ef6358aeef833562e7f436a08f261e95a316bea3001411a168780852b7841f1db7892fe601e05f78d5e02cd1c2f7b8ae0732d7b8f4fc076aca2c06a296878a6ce9af6a499aad42d9f957bb5582ad382") (:stream-nonce-mode-test #h"0000000000000000000000000000000080000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1acb021c011b6cc590099ffb9ff4b1a4c05efe65d35698f52736d42dd1f3e380e702f1e97c75cd8cddb441a44319178833530946613b051efd4a295f422f093408d0dc3b279c0ae22df3ea7860da9a29495a8e71854cc27c020a425c8365f0830c19b0fbc6b4846c5d76654846d02905ffe328cf9b00e742902e42b28f89de8f541e19c6f6bb70") (:stream-nonce-mode-test #h"0000000000000000000000000000000001000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"351c49ee8da408d2cd177722640f1259e1d4a1a55a955e08f228669c6f5d70f9a70df66b1e6125034e7d95d9cd8178bea06c1f3261b213e6a13605f44a50347c994343b455bf0fb0a94d609ca402e1ce0ab5d3dd2ea1a1ab4d9a06045d59604c5e158a99818e1492aedede6efd18bb0a4d2b0240bdbd4c9f6fa1078238ece3a05291039c02bb6f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000400000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8e119bb0b8bde4d6fabff3199266aa733068101b85be6c3bd680d0ec4ee97f49d821696426001aa1478bfa02c64ff0334e5a79550193590b829e57f3a029d913c8e281292f450225c41d0ccc51014172a0baced6e459837f0fd012a91010362be01ae3a847ac9d369585619859f70fdae4f53d0caa8b8da41c9e53d6b3afef5d66d6aed95d5db9") (:stream-nonce-mode-test #h"0000000000000000000000000000000000020000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f30a5ef13b151a20d2e5728dc8da78eb64bf02f3326b68ede5bda414286fab2ff7c44936a74054313c497e1c599da64a2bd853919ec0a6cbd52f354577f661fe0e6625d444c593938ebb13180ef831c31f5389b2c078919c29cac1d65d00b8a1ccd41ec80a1a7f5b796623b5595fb4e257327dfcc62bf503b0112d5cb5bd7111efa8920badd169") (:stream-nonce-mode-test #h"0000000000000000000000000000000000002000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f3a25fc7983b10230ccfe8d6de2554a33611513c4f0d7e76f44eb1f96ae6940dad71d2b601c5a28e9a689594f273abc453988fe14d38bdc17a449cf8f16668fe13b75e413d611a1fdc446f0f03ef2df6d8145dd99ddc63dd7b82c2749237bf6c2fc7b401d7eba89781e6467e20162f8160592d29e64502bc54362eed4ebe127239aafa7bc4df99") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000400000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8fe5ede2de15f2d933a7840294cc4e479e25dcf21e1432c6035a07eaef2203f77de51b170d8a1681203cfe978f678f067487689b1a95dfb73740442450c0e234825fb56f8c51f51de752e64051b15407454b260afc941d411ae2cd380e6bc9fdd6edbd5026e71399ec2d73433fcdf5f067ae89a6e4ca734680c94cf48f036f776b5654aef22107") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000010000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2ed94b8914e6c0f85689758b28b9cdac66691f5eae81e523810f686a7f10b98bcb50b999f2bb42de0f1aedb38bed48d8599b868772ab0389df80fccfbb3828e8f062c1ba0218b40c7d1875767f938158a303077e68e7b0b70b5c5d4c917f0bb3927ca44e23220f4420128ddc90f2a7b7b8e42bd27370769fcc2e901bae24969c3aa102d8686bca") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000008000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6baa38f5192efa68a70a433c0354faacfe530873afebcdbeca49e42b6bc73b1bb0673a818a33a0e8e3849eac364e965ee74c189a4bd2e7987d95d93dc319c6e037a0b0f9f10273196db4c56790fc2f46a912e5d9315a0f0a6890b89f621bfc9ae7720cb9d306d801d759ae1185ae5da2b17c62a5fbba085e98e831d0c2f63399b535fca2139a58") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000800000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e8cfec23054add82143359778c886091b7fc3d9d6aa915c93996bffef825ecad185264fae45a3515f03f68c55cd4a58fd99b87643369b4982b22ef320d2784756643819c4ea3adfc685aac0564947b8806caf2c3442e32ffa481938ef4a2c73f9c9bec9d1b2b6fa5f9b66e678601cf1998162041221b9396eb7b7b158336629683b4afe230490e") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000010000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"142ac682a47ee49a5bfabd25d414739b28c8ead8b29c9bf7a36c19d15b6472b9fcb7d10da83f8a65992e51bf22f1e697bfda441b51effeb779258a93107a1391781a0f37b2a99c2df508b869821c4dd50870664ce0ebd241ec4f9f6c6f7980507ec5b4ad32176c69fcb9f7b367559fa57b666db1fc2bfb879920f6909f727c2fcb5d6588928a4f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000004000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"28602482c19c96b0d29550ffda680b4ed0a137326da872521971b3956ea349ffbd22ba49867ceb88d6049851d53c23b4baa3b8feaa7709e42270d34fe6fe851f949069125876b1a0fdebf0f753971be473c8575235462c7f9f970c54d757bf6c10ff43f4f25b326507a43b54cffb1ab536c86361979d2b29a3c0eaec655a979ccff0550f0e07d0") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000200000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"544aa4c11fbed50c7f98285dd744b4d1a78f1a35a9b0e8c2a64ad34cbdd20025232166a5b4930f298f23c9a881c658f21be94698c362b162e84739f82adc01dea59c18e2f0c21cec59ea15b812f7393ef2696cf583fdb01eb7d7e99569d09282f475b1c558cea51fab6d0daa8e4a8bd8e191a82f1020e6eedc01c7ea8643991f9421a01a5145d3") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000020000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"10949ef19c84be727dbe17e0a2a4e366d0e09197ac1c47edbea24abb8d63c98c8d40562386ac4d710c62062c37a3760d9fb7e58c247c7d920ffd4333802a323edb5b0132724cad69848d47956a407d82f71bb5bdc378218bdd193b8f4a736f90250f7abbaa40e2d69fb2cca841e64b5a1d94576fcdce5f259cfb857a43d6e56d2f92a574a5d895") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000004000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1f57ab80fea0de91d7b031bcac6706c4dbb45500e02ac3985972ab761daef925f9ad3f74cddc9c50fa264d7432cd68c0c633759255e4cf263c81b539645f2101e7ee2b188a3aac6d051f0521a39a2b238100396301b66aba4316dec639ef9949efcb61582ceac05fd480945dc3548a831c851d30ca3b9c37d01eaf55ad3d68220af5b1d326dc96") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000100000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7e1b5fc0704c15144ea168a57c37304b88b8dff91ddd4084a30591ec78d3e2a870de8e040590ff4a3d1540a646ab868e230535bf4b93572832b930ab929b0db48b8489a4cac5487f18cfd591e4bb672b6c1b350c1fd0f5cf9ff312722fc4b259e524fbf1b847038ba2496c7d944daa242ea3536a359d019002f24b08d0f363f18d522f50f6169a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000080000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0a130049832398f6b0e3b82172d1f8e9980b74b304cb0ab026dfba3b452a0018760142ef1cb55e1797ff869efc2b63660fc75a2823da26b186b4b5e1a01fa20a8a05e90b229183a10ab59ea11042f568e41b7b1e96e781d3d9cd7759e8983ca290ff6719ad47d61f84841438c35bf66b13f517d45d5d37b3cd8b8b02a8f1d3ee02179e82d2a6fc") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000008000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"28068b9d33b621fd64ce3bf9a24a874cd19aa0d29d080f979921ee9f5477d6370a84393ed33494e2c387e6398ea1517a3f65791531c43d817c34fd6c2217cfdab0b82e269e4d606486514b702a020e617d4a6bbc8656fe90d8fa3d5d043764fc0199610c42c8481c49b49f3111c58fb6d5e5b93707cec1cb10f434bc8dfd18795d31a0c5dcaa1f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000100000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0ddcdc8acadf15147f994ee05ebc2b182168c611c85cb331f23b9aabc6ad131cb0e4d9bc23b4a29f6c24186787ac712fdc33add04c63cb7cd9eb630c834ef2012fd6510a6615e151811b2d15380b695ce46e56469ad21bade6bc1f13cb02c72200dddcafde8e7a25b8a4269e10f0a128be8c251426043de5fc2faf18cc45775dbf3c061476e772") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000040000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1b81e6b2a97f0178f9a0dcb35b6bae1e2f6708330626152ef8abdf1bab7198639ddbfa90b51213ff29a5fa69f06363403f0c4a1f481a82d7fcd2ecf3733e6e69499e89070da092139bb11f26fbbdf355f72546e18796663bf9288297b2e8227d5ee40793599c3f4fd1903a1d498346d884e8b8750a87efb63d20ef03d31856f525961daafb994f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000002000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a65dbabcb5e3c043b79f8722054622fc3b18bd742501f6d6953737cb77c290784bcee66e9001c21754f062a71912690e97ce4b074499b14d76d4bb829757726714334b434b3d57fc5f3689b1a4cbf34bc02c5fca586e262b7e4a4aaa19a8b297abcee49d502afcc32730a3eaf1a50bd2866910b5e912cd4b057c0a7a4ac1d275934341f25edb28") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000200000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5379581303174d6871a1b1212e9e6e3a8361d1b0cacdae8a8f5cfbf8b1aa9d1236d22bae58fd54dda4df9f8b937db3a5e196140e646075313e8e32264d05993889df54c331b42d5409c649bd41c3dc03e6501c09f92330a13656bf8d455a6fbc34f7f4de5f4341b8a86e31a4d73b67a016b14d74feaf2e7f65e4c5e0d3e0172bc946992247ea49") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000040000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"656a372632f4ea0f7578d34c1b3ab9713f0ff393645a5b55838ef20e1898896a07e8993a78a35209e94d2398b999149b75d3d1350eb09c4578dfde9393cb835a47a6db31be046f2064b15210cd2dc346e082615c2590a0ecd6b3c6002f43a6b0b1c317acd0337c642bc10f06118d53554af310a413521fb666304be7782321c9176b1e21ab8d51") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000001000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4110e3db76e86b6da84fed0e2c84945e4fc1b74d49a583a0172104c19a4408120485a11e6d48b38b69f5b311fcb2c7350d39180908663f09d0d6d2d36cd96f17a73934962d4b0f9cf77aeb74e78adc082639b9b25f24f0a4c1f7e2f07e9257e44b7be3f527a3a2346739598ec5256189f277cce877c228c63d1124e913328979d695d78f356cf9") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000800000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1012f91cacf688dc7867a4858dfe6c0858d53361190ea6ea3b80fa1a5c9fe1a2afa667251bc7e77efa54f189c9cebeb2ea1fb2e6aaa11d24952c42e8b7fd77f93c282ebe93c0677b944e09aef8ea1ed9ed73b8340125245a6109b23e6435bd52853efe0eceab4d30070a64d5ac2b85966eeebf14c361b4fcdc27fcf61f5d62bd1a7d3f2949b966") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000080000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2b142b4642310893e7d347f01c02aaefdc9f84098dcadde99aa235daaa6072353e7db534f75ada801432a0899aefb4cdd36fd3dcb5fad5a5a56754baf9a35eaeff089d98e59b408daa9acfcf92b0b756e3870782509c8c3983f43798551b572b283413939b59b66b633c972c65a64439ace789f55e97c5f95505f6fdda50ff75c809988bc22f74") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000001000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8b3261ac7d7d487323dd6820055ce0692f22aca829bbf51f47fc2d03777fdc17134abce5dcb755b15580381bf4ef09910ac9da1eb0f9644395b911be994b5cc2df30efe1460c940b8bffb1e3649d27da00206837edf685d0ab6d163cc0ef591ee98aa082011e295761e272f4de01a8643e6d00a8a26225efa8a85aa4c7379e4f41332a09c4df10") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000400000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"477423301d5f5efaad23a6f34e1f6dfadde5cab4178f80ee9adf106150b7fcae9cca71938aa0df09182f9c8b7f9ddb9fdc0b609aaff552ded82e0cb1e81db98b041cc37eca69474eaa8050f3edb4971da9d1361b5978257b0b5482638607cdfb6c0ce1f5344c9433a77a76e710f6678857d9aec6dfb20b1a5b27560b89fd237c03563c015366e7") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000020000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9857d4a59d1c7f56c332a4b0b695beef03b3dd31f9aeeb89f3d52e0dfdfd115cfc5d60fa69da83de5c7aea2c8d818e831539aa03a9af3bffda1ab02f4daf58bc4b8fc6061325238b74565743cfd5ee92cdf352d5299e814def673e9e67716b0691288e2082271ae90e3477360f63eb2b0293d5d63aad778a2461c2839ec6ab13cd4af5f59a03d9") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000002000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cd9d281c5b0062260630fb0e577cbc6fae38684f5f5634087f6c45e2a75587f880be2b5d7ffd4a7f2918e9fe4ea134f913a94b2e0b10273adda01dddb1ecc6d44779a34deab24fd0cd49d40b7b31d426cac4abb81b4cbb2e061b430d2b8eb32298b51eadb0debfd8ccf7cd6c833a22362744574f11500f9a43157799de110258815a03962c0901") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000400" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6eee40fc23de53872bdcaf838ae2db30995d69b2d0963a40d444443bb9515e552a073ff5b73374c02b2f064149acd05c1882a743d7c273bbfb6f2fb8a2d2aff915d350f49ba55ea9777a9ba84af0797b03945f5f18cfa6de84ce733ef7eda68fd90b1b054ebb3aea9c798555c5e82fe506208427938034d09b5f89ef369b83d12e399a7e321d99") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000010" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"28081a4f5bda85ead5db706b496406b40c6843f5f5349558113cf4130fe39ebae28b6f4fc53e38d54bcb1d11d465297ea780fe445b6683c93a88b8026688c03e6ce70120fd1e641ce79d1140f3bfa8202ae73e5bb91be9d72c61773b491eb1ea49e941d6f73c3328160066ea7a514f0b2d6b80d7d83f0b5fb1eda29b539ea50e223e584629286c") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000008" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7f198d70b4b1d1634c1820de2004b3bfc5307c2498eac95f0005cde5ec9e1b6da514829eb2315b6b43de24263422b6019fcddf446ab4869209948af5d85ebc6c741c24878432628cdbc4f4e9d5196d1e2753fd69326a8d9bfd49306d8c17fa6fef85f1cd676bfed5d2cde59a60443a9b25b5d22b6b07b80d80457c4696effae9282b1505ac3b33") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"8000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0828399a6fef20da26620d2df296a6667011aea49bd5499e538a0f720618cd5c0c2d8b3f836413b73c797046f619e3f44e828ff834e60082f74bf661e115a89be6e6a1fccee183858a59b975b44c2db476ee9e4e11a26aa82dfed91a924f92943175813b94e9b035b8462907743eb91887d5e8223498a1ef30f8fc47192244c3a03a87274725d3") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0100000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"edad4db0a296eee2046c26eead8f545e746682a1c2358f0c737dab85dbaed8ce71088c825c0ce382feb9c308fee7e5cca3c90eb99458acc9eaa354223c742497e1165648a49fc798698ce0d8768c50f07ed389dd98860c2cf59e1ab9a82517e6ebb4c2d6fbd4d39ee70b2ffeac0a144cec93a88c348543e367a489c4bb6ecfe6373d78da3e4424") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0040000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fd2da0e40468588b1543ee85e09c4fcd79508b7c218e036bb7f2b318a307cce84ac24265835ca28b71e47ac8438a1b9f0e27ddf55b026e89a03f4d85d761b8cc5790924304d500928f111a7510f12795ba3a4745cfc1d3cb18d9f04e386ebdf37798585f8c293adf26749bd49dfb1662ac59b6169167860bd80d95ea5374c7430f38a4e44cddf8") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0002000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d952fa95a3c17b5c245aa19bfcb6f988b854ec5959c05a01a04b8f6a9e5f9a2bd6e29550fdc43a4ce24ddbc4fbee93167a9391736187966ed784124f2dfc3464084d751768b9dc13bd8dcce98370ba4cb6584aa4a0a604a65065eecd8906ea5e5594fd396b9604b994ab661e994284bb0db4f5c95ff90bea150ad9024d6157469e698654336f8f") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000200000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"84e40f5cf15fc05b7dcfa4f2fefb472813691c2304cf5869f0fbd4b6ac1ec4e79c586206c183dcd3f46e57df23c0d6ebf5a576ebfbfd7293191d1d0ed7fefe794981afd3f2bd0a8024ef6358bf270a1e2bfa6ffce2724737c1edde8d8d43d8eb4e79d7a2422da279606915f2f8e7ade4fe90d2710da6bdec7f173b0fc8b3fcf897c21d2b9b83ab") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000040000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b459fe9991f9293eeceb4b15a672276f0944df5fc7fc90b8f3ca7fb2731dafb6db5b29119d2106fdb6ec19af27a0883f7b816fa303695b0e799a02a0868769f0eaf94680f471763d8d772ecc4b83511e52f2a79fa6e40dbfbd2304db6a30bf178d8a0297baadcc716c778d3456f42133d29ce8f21759c76320cbfd71af294cccf7e8a3a764b4c6") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000001000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ce11522bfb447432e4050b040aa99df899d6bbfc09385cb1da154a12b999168ef911951e77cf1f13fa172bf785159e549a2811e582225a9c47b4b795bc9c989a7027c224ddd4d2788f400578bbf176b59ad429d4283b0fae77e0b459176e74de8d7121e4788448a4ec594bfa249d0351228f8365c59d24282ca1cbcd59c36a69845d867a2ef55e") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000800000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4b6affbe064af77e178570c790b8233a1024639ab7d5f04497e59344cd970f1aef237b7fb99ff1bdbefab1fbea54f4326adf4a0e49783b1475e542cc805ae79f44a833da637919785adca95bad1acd12fe5437e103dc2aaf99f75f76e52b42f735fc30d08ede4aae272e69b31a405f4cef3337c656bab8c796f0b3258269cc12b161ad216bd23e") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000080000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fb6460589bac9514819d48fd0852eee82df2fad8c8ed93b2d857abf90aa5c3a167b225a9b27f880eee8364d00ae954970d05644ecb7e264c866909aeb9a08209346d592951b35fc4dbf4b46a566ad510f357b6c52cc122455c475259afca7bd33a8da92ce898ef198add746957ae863d4f0d8f71d2fe4a715cca5770650d537378435f84d57815") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000001000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ef45df01e8a2cde0e74dda5b2daa52ea93dab8b69612b8a4e1147deb7b4722a63ee63d8622ce8e43c75dad76207aac01f42233c569e2de64470b5ca0f361c8e46d8b8e2c0ee396f37a37fa95da5a636d351d1672f2dcbe277862e64bad9ff2ff8b8a4c27dc0b69b48956d81348ac29d09b9ccfcb14f97d10857c614739290cf111b4e539efc1b3") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000400000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"24485c2a5fb9c79c7a3599faa85141a3319a547b1061788f823c778bcc355b157eebafae21636e0b136455b164f8536367e8c4854e6a1a1fb36469c8dda2aad925b16d99973fb9f635c84f6ab0f51b161351194852b7c5b1b131fe447b021295d45625def7e060e806d0e04f2311fde9da6957cdcf6ba097ea0d689129905fe1327255192bebb8") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000020000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f750719446843f494de10580e6f114597f6bc8dea596703a65fd2cab4db791061c9d961de8a285d3a6b7ac8d8f86443aab1e3753729eeb1744b1d53f904977af2a147d70f50ca58d6a6524ffdd37e2de322c150b79d589254952a3f605fa7324b12ccadbb66f69599f1c91719614fd72a184c5f68d3d30619e9547f1a442207b4521db74e15c3e") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000002000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fd3fd08857f0661cfb43804323873f7500202066e62d71b69736da66241c6306931990fa3f91257f90af3a2b68b95c892db803036a7614fe90b0054176f54da48049083ad11fe46a15fa9d0bd792b290e4991f1f5e4bd8811036d3aa7aba66f530ab401356c58ff2e54968e810deb6c4b2927b31ae4742816d8511732ac7e30d611d725ba1f56c") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000400" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b16dfadcb2971f7acfc54a2a643bc3f3d8cc351893c7249ba867749b580d3defcb67859e64508de8bc4a409807e82b74093a571fd3f5dce84a691038544d156a5e8317ba29035f4c9011fb0817e67359bc9112581b009872a0b1ea34864e9678f396aa59c4780ff3492e6e1fd2f9828a665f7fa6a8f0844a7e36d212b654afb22d36c6cea5ac94") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000010" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1a02e8c28b6ff11e6c84e2dcbf70ece7851a3a87ea588dfee015f3d75d5a6009cad57a0c32ff3990f97d574b9acde08309c1be51a88b9785a1b8b37d0181f0ab66aa76c14da99d9eabaf0853eacacd670457b9664122ccd860cbf32eb750195c8fb4e1b63e3d405a5103f0c85b1bb45530461219e649ac51dafa31473e461d7b1c1bdb8ef021e5") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000008" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cda45560e027c455af3206c62e97c24a2e7e817cc188fe4c640c3a59638e2fff23b6c8f6f0ad68f9f1c6136c055c6c71eef1cbdd62db1a925eb33ac94ce1c8158a0f51f548e928400c82a362b70bf540050dfeb3d4d4090005f9b1a2815fb0136649d234e2a235b3028b48af90b71a98c489d474348a51e63d9c66dd32d0c8207eacbc1891fe88") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"8000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"172c5192cb6e645bc527b2539a8d741267c191cc59b5ebf40be5276e4eeca9b4b31f3b434b2aaf28ecf61c58e927f7d0a021d87bf287c9c6d0754a5795c4c6b4768469085e9887f53982284eaa95fbc9989b139e18ec696833c568fe79d007279f9a6ea2077d880b72b3543055151211e754729a0b55dc670276e987d66d2cc63cd8ae1973564e") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0100000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"582da7fd3359727e7e222d1ee2503502ccd024227bcb1aff715634e26a5d9627e847fcd97bd9241d6f372901540fd2fc32ca80761ce1afafa3646a47626d7f41655a288a6a3c897f931cf7fa6e2fa1a7617cbdf50fa5e0d190dfd27cb932d54ac562f8bbb7791167b17c40e13a6fd99bdef0f5f3460e049c034503b4447d8ba5425147a96a5726") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0040000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8f63797d01a6c6b2d77c9413f5d31bca4c7cc8bb21f94d45c81760ef9d91ee7250c4e3c6a15c600f6eab0aa236d97b9fc144ac7e12caa6cd7d5838d56f98657b72f519d6b1701b5758f1f68e1111b239068fef43493142332c2c2accd8babd488fdb223391495b578b3713b97f7516eddd33d6bfeef50e5dcb08f0f54ee30aee1ea688ed2dd520") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0002000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b62fac36d7481c7d3301b77a6dcfbbf61362629f256905da3799a8cb36b29b0f7246f4cd601518c8e34a7b30e77de04976bb2d87ed40a6e61044dd5a08751447cf0eacf15668665a88daf1c75797575edd52624269efb3afad28be35e3ac1ef4cf952c3cba018e21334a8b20ddda93917293c0ababd08f5804100ef20871aff44647ba2bcda7d2") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000200000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fb7f2990d5cde4ab446b5eadedf8d8b48f729ea00c2262b16cb679472c99383e1994b8a08c8815548f739420f1c061ddbd322248e3a923627d4eea41f91ebab7cf18b9e8de27e5f452244f5be65f840e01405de2704fc472f0e53772c62e8b06c1bdb0f91ef86149cb3197a3df9d6a7a4a55f07a50a37aa8a1965645a86c4152d19acf82d99d84") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000040000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4e591825603717b8d216c7a363a43977e6d0dfc15fd027b2d5e95dc4cb217a90c4f55d4a43f4f8ad614eb95acbd1777a2ed57a05d83a024a661449b652e760a9e94358f0634ca242e5e23f38633099ed7cd713ea3554ba95769c177c1ade31c390441d4b041f506fd2f6b7b151880ba5d7d67444b0a87958e83e6ba3314bbd7341324042ae92ad") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000001000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b2fc0377eea35aa3aaf01add5efcff1cfe60265276cfcf133227c29db57a5ba01bd2bf9e89d8886ded21cb0d5596e64a4c4e56a476b8fd40659543706880a5646aef1a4254e17dac5d7592d206bd3ed4715db2772cb8d8de3e13a73c006f87552d79fdff5bd34912dcb167f60be92429ad1ce4be2c7c724d5a17644f158765ff0e1bb64688203f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000800000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e618cbf75bc2f490b204e2f0a47a0702bf4308aceac5bb781f6a8d3834c29e57f48a337241ce84e25c658c2c4c53d689d7abf42885695562a5ea36be9010bd65b7f999aaa1000f96b51350aab7749e92a843b165a3855ed32c86664294fb7c103c28b5f5668c69f82164c86468d7341381ebfc004909f610859e85791d323169687b688e8be3cd") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000080000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ddab819d4e5af351bcfe184604a6fe9ca4fada59fa4e023cf090303ee7ac572299eeca31d41c62dffae5e34437aaaf7a4cd3f66d9fd514f97d98186809e016241b5dab1ca7f318abaeab51eb39172297a045f76f91ba0d67da060c943932d08dd10196072179742ceb49b703fc7b659846dad33223fa1c81b51131be503fe1f8bd8d8cebd7c398") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000001000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"12f5f5ce33a4e85debc4884fda0063676b0debfa0d1b852b2b4dc3196f4cd0de72d31226cb881b204e525a7ac94a81001185eedcc5b44ee236802fb03eb05b44e83cf9ca320401a7ee176e3c57bb6722ea7c4aae15d40d41e544f07c462e3782059bc1c277137429baf25ab230d971361b167053e29dd5424b73daee6711bd85234c50501a480d") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000400000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6af4baf2bb6b08dd3312a00c277c6b8651a44e18ebd86bc9a020e7e3fdead4d0f585e9f0b278fad812257b0dc8a406cd8c59d9a711f02e2da115f557c814bfd3c78a6429f3ee049b5afe7f4c94dbc85038d07ce541edb9fe6399a5a8a82ad0b78041803a613a6b749826c8a2cef37ceab6fee4c2a2a99d3d13af287a15c4663fda13e746c81713") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000020000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d86566d6c3b7c0a63d56842073c00227f3e53333531b177123218039deb27c813bae5a297092e3e168e83d0090037a9f13b584a669abfe1fe710b513eaa7ffa8a2c74210a2227c06a65affeb0a80197eb8ef762e6447ac0cf015e4eb90462441c4641c4e5e994eb2965c603525acf149da1829cb8cacffa46a7603aa21424c464ef81b13a6e784") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000002000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cefe947b34c1eb37ac2cc8246e67e957e18bfd614b9540a9aeb1da86e3cf6003974f4a74f57113e408e7b0e765ea44957bde29cfb31f3321ff54a2c49d555b3216221df1fdd349c05f2ab769ce0453df8259dbb91edbb472a8d0ff2f0ef264e09ae25f8e7bac92cfd1367b06cfbbbad6b6d8913dc5a4a88c3a46478f95990e6fff819b7dbeca68") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000400" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a1fbcf2e7af81d0898c868aad18706018ce7af1dc3ca4a21fd4760b332f2aa290e19a4a91322813dff602978b7b284a5b2706e913e49760bbf6261bbd33ff89a0de9e9973480f66320bb64e6053669534d4c70a5208cc1c46524f06a37d14adf04bd284bc86c538c4624747f78fef92a00f2a0777f41eff00a773d463facf6db1093af79408534") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000010" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5779f0e9fa86d2395e62b472c996e882e342e8d62063d07f2b4644ff465aebaba856276f2a91fbddbe8f6b7e4700855176aceac036e6244d24ca1245cd89f85d8064808974806453c86a29b9e168e80883a3d117fae9c18ea7bc5a2d002252004b971d8f7578bfb3768e2eab3eab10080a7a864c4fe304715d78064fb754457d31e1484af7245f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000008" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1b178dbc7436c0c93bbf1edd7de9d32a08a6854742fe189a849c0c8ecf01ed304a1b02eaf49160f0bcdc176847d0c54c47ca546967147e6e105e4e7d124446c2d6e9eda793e0f628326c8e3946a8be5042b8276985b09f4e5376f2385a985be2009bafd42d834e0906d890e8cd3c968f24d434e79ba7f4febf3d4687b50667ce10f5c86d0f019e") (:keystream-test #h"7ba9d374544bb16efbe1c5a48814b72b6bbbb7bf42c8c08ec7e2e5516bc42cb0" #h"b0dc58e587480c7c" #h"3f8eaa755f476ca9214cb58806320e1527739024169b72f7c0726fcbe3569332baef7ef9a2797d15aec58a73ecd35824488841384b7b67a07da91f7dd96911d25230dc000a56fd089c8eeb55df16080f463c10f2204891f4153b9d4130a2bab7c133ec12af0f64f062c02ade1c65a3a428cc5dfb87488adda558ea8fcb7b7eae5f0f763e0e00ccbb121f7a8edae5baa5145ace9134c901ffdae1c0557d69ce63a7ccf79165c84a27b651ebfc982fe61713c83def356f69cd62f364e3e744f12448de887dad9f8ceef8181758baa628bac7bba7bda114d8740702f15c34b8fdacb82c44fd2baef344238ce690faf92f7266d7b6d012b348b12c2d09d95f263f05b8d28c5e24409ee4e955ba00f26f0854f811b2881c6532b0865328f26c3b92f50497f3895ac067ee134e52874b90e06b80326788b7869a6b6bb2d428bf508eb50cf3a09a0e85f1b85855d39bc13ffb8ef5a434ab4a7b70a597cb4a6dff48fbb7eb4342f5ee17ddaeb283d4f3ef08e28ecd370ba8f917a92ef2e5d3fcb40573d6ebb027eb71fc303a4dec059786d4100f6c191b4d150d3e420bb2488705fa1dfa6e59339d36ea8225ddaae43fd37ea45cbd05e55f90d96a63e5e72d46f1020e0f875009b126269bf262af439ff87dcc12d1488401003894553a0f475586beb591912f1473e65c8b88e2e7532b40bda062936644cbb63db1f90a6cbbdffa291b0dea205d410ac7c4130eca5596ca78d42d736dc335e06f4910884a6abd6df276e9de60065b5a6fa0ba9e701d44239736e98f09cbd918cb101ac4a842fc9d5529e5195cbc09fab23a39cddfbf794f6a23af4bcde8a96675898cef29fd8c0a9b5576808e72bef0d0da9204f2c3ac042ee97359e1502e78e6fd0c90dc7a283e427885074fcb5c5ae22bcbc136de0c2d3906ed4ab6279ad2090bb571235ac7508d3fbec8f15dcc294ea6b52d454169ff95b8d95a4feab47c4d7b5983283f327b85cdf03912623840bcb5435e5e1817ee5146663f0d4f4361522e315cf357686a7533e540962db15fd6761be2b474049fb4f47c38c4d9b3d8692496980a8a1381890036b85a9ef0c2d6a029762c1e9a6bd329ff5e1f1c043b3fb91cc35960ad80e65bf7f5de654c81731a3f55fc6f3c5f4d3dc8d09acd5762ed76aca68d1014b73994f0adb94ff005861bf68cd4a15eab7881027c5afd089befe1f78e84904e9b02a31cd71b8980ef36ec73537666cf4e22465cf57862e949fa8e346b45bd5a51daac1bf056c302c8671a7efbde4df887863f638f961dbbe3d4e803cf4471f7664a14b13fb45362589112e986539fa6180d8451b70d0a02b4228b600ab127c27eb337279311386442143babfc9825bc587e9c720402ca9ceaa41e2d977c8a99e71f8d29a5c0faf372654ee3") ironclad-0.57/testing/test-vectors/salsa20-8.testvec000066400000000000000000002521261420372057600224060ustar00rootroot00000000000000(:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a39d5af8fe112fafbd6eae7d4e925708ba05f9a3c2e24ba025a55c9afd468f0377692205c44ae9df37b88e30cb5526a62d8699a37cc4457793f59ac1592a5998fd2ff6077518662381268c3bcddea7ec6281d59a58c197adb065fc05239a5d7584499074acb08a45864b6e8780ff01fa931825464ca7ceddf65282304d2e124cf9a9c67d2f88c5") (:stream-nonce-mode-test #h"80000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a9c9f888ab552a2d1bbff9f36bebeb337a8b4b107c75b63bae26cb9a235bba9d784f38befc3adf4cd3e266687ea7b9f09ba650ae81eac6063ae31ff12218ddc5873e3f87d0782a56bad6ad73a12eb66078030101d0e53597fd79dbe8b2e81c8aa7dbfceb805f1eaeb25005af21fa023ad20dd7822e35baa71ba3edaf6063f28ddcfc657c31be65") (:stream-nonce-mode-test #h"01000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bdb18d7c9d50caa37116d1240dbe626b9c9eddc555bf4829e5527a8c20f0b61bce2cb709d3fe0af504ff17194f8944c1193cf450e3a6cd00947b5c188eb3f97a63a10cb753c0a14c8218cb68e8d1d3c4fc1a372b7410622aeac77bef95e3365f32b71fff7f0e247e56b348d5e5202741930b907f7b96b1d9d2c6386a8198fb61798fddb0053da0") (:stream-nonce-mode-test #h"00400000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"eeb20bfb12025d2ee2bf33356644dcef467d377176fa74b3c110377a40cff1bf37ebd52a51750fb04b80c50afd0823549230b006f5994ebaaa521c7788f5e31c720b723927e477669b53ecf258836718fffac45d89d04c6f044b2aa4307728063dd42d1a1bd9d5fb2318f5057d4f2124f3dfa986d2bbe3bc868240be1db8849cd8a032b32537e7") (:stream-nonce-mode-test #h"00020000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1e248b2816f788ca417c3eb1dc9cea54b23b9a784fc3b597203e4b119d6c634560b43232dfc2ed3a741089110df2379ac5abf284bde30a8ba701f1fc2bfa64cb1734faa2fa2678168eb93cb13820c0d4b9e9e05e7be938b4ad77f0490e8e372a012e5ed4b5a1ba94bbc4edcfa93437d2436921c44218f45dc5dadc43a258d5834c984076d0fd9d") (:stream-nonce-mode-test #h"00002000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"714da982330b4b52e88cd0ac151e77ab72eecea2023139da39fccc3abc12f83f455733edc22808318f10499ea0fceeb40f61ef121c39f62d92ca62da885bdf2116b299f37be983c9d91f9cb20f3ed14d4d15d9d156077b1fe601d59807f06e7ecb4056cf53a865aac2ea32f643f75f10ed770d4b4794a501c8ddd845bb6a510fa39fd44981fe27") (:stream-nonce-mode-test #h"00000400000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1622448c8dff22675e08898728c21389f0c8910e181d838049bc05efe97fb5f100996ad2f85252765476dcff50fbcc0cd0d53caa6ec95ece5a118c92a3b4f721679d1fca8d1a8776727abddfb2c4d640758b2f9572735f07b2e1e6531aadeb824b0770bfb42459922236cf5cd719cc5f44618a724e7e59fe4b4fb90f83a1c7c1cbfbdff0fc2abf") (:stream-nonce-mode-test #h"00000010000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"78516f569c48ce781eeadd78616488333ed99ffc70dd8ca8d386486dae2121a237fe4dbdfc1338bd603470533708a59c526e3a0466a439bb10790101da3a342f86562ce647137619af1ed80e54f2caecc97efbd9d24ab18bbbe7675d7b14b8f27eca57511a3cba78e08c0dc4feefc23906f235a9aaac867faffd50363bfd2afd0cd1404ebfe4d5") (:stream-nonce-mode-test #h"00000008000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"36b359afef4e2e2b6d4a69c1b1d1dc25f44fb23dfdec17c6824581a33dbd27f8ec9535185ca2bce81cce95fb4cc777e4cb408efcb74e18fb7c3917eb2db04b4afcca266819cc5eba5bc3dbc2c5cae4a036e8b46a1a9d288acdec72b7546958107a93b73a8b32c8d88f02cecba7e41bc3bfe0918f59b376c8b04313fb601fd8bedadd2c44d6588e") (:stream-nonce-mode-test #h"00000000800000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"94351ba832c7542961ef76dddb1c8d29b352ecdb003fe5be386ae24dcc3c89b6666fc460cfc939aa17b0757df456bf9e0184ae68c3f1ba3f7109ae26ce3269150aa0bb2684272273888ed0a3bfce9769e318548436053e9be966e3e1f179ac0a8a4dd71ef88670fabb3bb4ded86d77db5ac3b156470fc788f1cb6daa29aebd1c0b993ebe082c71") (:stream-nonce-mode-test #h"00000000010000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"858f158ae8b9f9bffb98a5a065e8d57896f4f6bbe6de7570694cf6a3ae60f8dbe1a2c59d4c161dcf0f79104fffde2e201eb9c3114f9860969adac58a42a74113136dae9b878da654e0722246c7b601f4c2922adca52651384e934db32735d1bab51910d5be205e11cb3304e0d98cd27fab13847fefaa19cbdee9d36bc027c63ea10bb15f5b3ac2") (:stream-nonce-mode-test #h"00000000004000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"187bc0e94fc07793db29c72b87e00c15efd70c84f03129630dd46871979203b412b2323ddbf36ad13b9fd9f23b792123b4abc357dc5f790656dc2bea0c3f842fdcffb5b582700fddee74a4fca86e0092d6c72ed8f4aa0c70d6021a9fd4abf11dff1eba783976ce554940993a64acd7d6c5d2115970f90825d31c2daa5be9ad9e9df03159ae178a") (:stream-nonce-mode-test #h"00000000000200000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0b50282563412e72419a106ed0df6fa42bc90254c874d3e34f8c55b3d3f0f07e7fe7eedc459c0e79327ed87649d1ae59f77d58243444733e5f2ad11c7103ee304c7dab228d6c094e3e1ed4b6ee08d41be0e0c96534f3b3763bc3b02d97281a50f4f29ca78fac45be696eed5e4e3a9fa4d74f36b75e0b1c09fdd08f488cc512942915fb1f64e02f") (:stream-nonce-mode-test #h"00000000000020000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f5d451af5d3eeef0c20a202a195f79cfae70276dd14e73f4bfddbd6f0b0c9b9a1d99bf1c494822c230bf5b085ef1a1255d34be84256e2d5d727f3c9c00b6408ae874615e46db95db915eeb2cb047d212a78088dd7780c399a34a142915258937307f0fbf39a19e7825951e91c8413dd38e1c153ee05d0fdc67f064cf2b75f3c24221e9b3ff355f") (:stream-nonce-mode-test #h"00000000000004000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c1b2d258f984479202632bc279cc7d1b20f4c12de10dc312375f297b957e6a06132ed8d45d37a1c04a8156ac6175ede25fc11e1feb9fb5d5c28c9bd0753661f4604df4b014aef39d26db6a451591c95030dd8c83a6b53e3423a4e3b7160e01d373e1a3916e3790733a7944d84503c70885e59d613d8542974130b9b12add016f5ec68f95e3b0f3") (:stream-nonce-mode-test #h"00000000000000100000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"49174cea1810f6b1e8847c365954f156db2d03a020164755d803197a0e8eb83373d3f717b0ac76387ef00f73abb6ba0125f124848a6af4623d6dc684c00c9d354840ce2aaffcc30095fa3ab2fec553893c55be4b8bfac2bc065ec4752ab95768f30c2699c80fc05d887e7ec03e2fe629982b87faa5ef26bafce9364fce15d9094de13d3c5b6152") (:stream-nonce-mode-test #h"00000000000000080000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"364ab207979c2a28df9f80c80bf7f9aa8feedb1c2cdc6fcc97cb8e480d0fd2fc3659a5713e1e2f6f436c1577cbca7aeb8d4d902261bc4285b6a695aaa8ae5ccf80f6ff9ba532f053595213ea09ad3d5d8084ab01a573a385a9a6cb6befd8cb397c190d3371d7580fb9f7de52d0a5530fdef60a02855bd3764acf7e96631164565e2faf5af61f3a") (:stream-nonce-mode-test #h"00000000000000008000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2ec8b1ad634c4226880d71e9e371b9463abd6e8eeb850b63674effeec452bcd59d83f9c1a7b91de7cf1ce9661d02de5ea863fb977b51ba75250dbae48b4748f5220415f76bc6d039437c050cf08531009307424e61a147e1777cab4688bfb39a1ff2af02fc75e55bfcba20969f8e3b6ce6a8ce34aabdb3bbbfac3b9408c96763e5592c191d8842") (:stream-nonce-mode-test #h"00000000000000000100000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3d11c34c0a8a96eedeb7ee665490fb954d38f4d658789caa3d6f221e6babc45d7178b85103e7acedc3355d4a9c021ef751aff238ccd08ebaab5e9003155614f38f3adda4bbefeb27693d21f510707881cfc91f50b083cc950ceaa4127d7f3552497eecf62d904189a79072023908aae8475856eae5ba96500f2b1bbd0eb9a515ae9d210bfcaf1a") (:stream-nonce-mode-test #h"00000000000000000040000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ebbc802295eec35cbcb755730c5dd20d75e17e112d034761955002ef2c6854a29407627797fed6d1583ae50683f0185da883319b464ea87e2ded9dbaa7e3ccb83ad63cefbcbea5ed51749c06cf24a9b298acf8fc6e45c63c2e10ce418aa403e1c7a6daac578b3112cd1399ee0a11ab76d1d0fbbd4836e7359ab79201043a4b8e86cf434f15ad73") (:stream-nonce-mode-test #h"00000000000000000002000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"72ecb8e37ccc213862152b1583c5fd05247a62b82c3c3f8b5513f65c954c082c76a51a22e803842b87b5a0662b58596cdb74c2a68919acae32bdcb918dacfa0414fe54030c1db799463534e3379f4bb86da5e0db3b876e1a23d89e2f9f8218a95191b7ee90c053e71d57398f8e25ef1ab3c2d50530a4a75d4058c94149b5d632973e2f93f75770") (:stream-nonce-mode-test #h"00000000000000000000200000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6e69d328e9f980eba0b5d1be4a9250d0b80b2d263c00773649c3d10bafe31bb09342f5b404e17ed8ea5838b9857a0b9b5c1f219e9df5512d04080593da4525e4952b9143de7c8ba71ba787e7f098dc33388cb41831520c8f4134a44569d9a4e01e5cc3ceb60c972199cfa9cff7867c9a5a35f871c738417c87a83c698f0793e2da7c224694dcc7") (:stream-nonce-mode-test #h"00000000000000000000040000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c9836253f12e59f0b3990cab89af17e4109873e4796bcb8b17b3761822bed1aec079d4cd47e2a0a2ac2095ba0f12f1e1d913c21f42d793d04079ef72cc22c3d623d5e1f398a289c6d5b3df30e29f00d6a6033c0059e18c712c0716529c976335c4bf8ea899a37c0fb6a238978d60cdffeb7e6d37889245bb8019fadbffa37449589197700467f6") (:stream-nonce-mode-test #h"00000000000000000000001000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0d3392d1ad9fbffc65b70284846e8df5131a5880b321b0e018bc446d123f32215d6b58d4cd42b94aa8b691d0297ec9c28b8a130fc49079f0a077df0de88be7c0897cd620cfa91e928f844ff22b566828c53bb16528e015b67ca2b3cf66e466243aa90bf82308fc0e99b0dce2da21c06289bd7c7fddca5321393f93485da4565cbb866c9a0f9662") (:stream-nonce-mode-test #h"00000000000000000000000800000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e81023ba54b0fc630e9b1b37185d1e6eb6c45db03b1a0066328e1b4fa7047e0ec794619cdec2590e9ff117c6a571be37ef795db70951f201da63bb62350359e7fa3c35999e891076270f30846cdc89afa327bee2b0267d21bab22e2237e148f5aaf9c19b60f90356234f0d9bb44582581300efc650369098f2ef4870dafe6f7e00bda5e9325a8f") (:stream-nonce-mode-test #h"00000000000000000000000080000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b39ea8424e0c1af81c760f05a47095c6e26a7464aa0405e8eb55a9b8503b2bd58bb10c638ee57fc55818cbaa58168a4eef5be33a92fefd753ce0205e8ca5d126f8bd0c8ffaf5221b441b9ab6c68f4047a7f11ac6c84fca0c4801dab63b1d890798e33c75d891302b4875c3041b666be5668e1dd4c2301e843240e21bd1ca5c2ff4f66d3c3dfb35") (:stream-nonce-mode-test #h"00000000000000000000000001000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"02edd6f00b996030d515bb9957bc1bd6da7c65d96fb921e4d4c459025bf7b23a7b8a1daac7bf893e2a9baf8f3113015cffe36e52cd84e62532791e7cab2bfe6e416deddb4a7a04d06eaaa42736dfcc600fa69a5ad06a4e5a092009deef53bbf070a1e595287dbbb783cf86943d9e9031dd2fe97067f179bd14a814cc64ab51f4b0e5feddfc2d51") (:stream-nonce-mode-test #h"00000000000000000000000000400000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6c27f8913202901c1e1cf2970d6aceba671f9e68b46d93d83daabab4ca34cd08183f4920609a956b5d247f73bc193c311d315ba0fe46471afb553ddf004c29ce1b2e08f5f8b63ab33b79e85f622426f96996fd83d5d29cc11359ae2068ec64c7fef41a7c352f3e352f4e8219e96b30b91e6c70741795b745769b38514b86bf1109d193c9c80ed0") (:stream-nonce-mode-test #h"00000000000000000000000000020000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9add2ff382a6543b03c0808e9d050011328d03eaa77ef3a439788fa15f48bbcaf68cc3c53bd6268ddc5dbde73b03d4b78686df9a19cca5d400451b24a5c8b882c76680d31bd99c52e0faf30b01baf3945a97c214c4409ca06ad2dfbf208a6dcff47c219d35e2eb755543f9bca7c02f4d5ea6a77a9cb7b966c5ea31731e2547ff9c932fbc47acbc") (:stream-nonce-mode-test #h"00000000000000000000000000002000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"00b8988d9ffd0678682d45fe925f2582a54eee440ba991429608af4bd7f03b05a1fe337e2cdb4555c93ca5fcadb7d0728b48927e7067aadc46e065d091f22ba6adefd99c4acb2276e300952348a53d2542017838bf5510b4bdd746a6643c0326eb7a83d6c6612ff4e02035397e41064e32e6c9b82c6bf6d95f399032833c2f852f51d7848477bf") (:stream-nonce-mode-test #h"00000000000000000000000000000400" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2dc1d28ad3537e7aece5a7bd757b0e56e75ee869bbafaa0b148e24faa89d620911c01825869209b0905d225b6a71358efd1f33011eceb81f918293e77c6cbc69949f54bf1b801b91882bf3a284ee6cc3f7e74b56fd97e55ab6b7f57cbcf47cf6040c571823bf22cb591a186a193da19c950af991618df5b768f9dd0607a7695ea75208af4352fc") (:stream-nonce-mode-test #h"00000000000000000000000000000010" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0ae2b7cf851161acd829ab43002c2aff1fa5d5eb66db5d0561c48d0e3e54b65a58f47721005ed75f9d2ff2687f0ef200b3f05449bd891e74814eb85b87429853bf9adec871ee84012b2e2172dded085c1914f4e201cdfdfb08946bb3b661d7270cf68d7f5e02a563d148438150b52268ce8d6a16f43ea01444f1718d22ad18e7672f9a1416e357") (:stream-nonce-mode-test #h"00000000000000000000000000000008" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"87faee84cb16c850c74991ef1cb155c3b6d708b887e84f81df61770075aa5d7ba2aa58b11c079eae611641a9a9949abc7e23ef7ec9632d8068571351c94fe36d0cb3248ef65e4412ff757d3aae77bea26212cd4e6d49e1e994615128c6c1920674197200fabe09f287eaf0f9267dc3d41fcf1a3f0dd3b8a666c77acd5df598e24c55f435198fe5") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9f591da5f99c235445ea91866ead681b977c4ffa036d770fbca79d41fb014178cf8ecf3164e5e77d7495dc0195081edb2f45c8a1b17d2bec8df3ef9fb7618075b2ba83d17e3e44cebb4dfe884d8274b36fb2cd8fd0b7339747f118f0ebbc190a61e600d2f68b296b17ce264fa4cac78e4bca0563efb6e7c7336c9d40727770edaada9ad06545e9") (:stream-nonce-mode-test #h"8000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b1f599e9b0d96df436ae31f5ef589565b92d245db5a1d4c7a78e5e8d0146f8a49d326c1a3bf50c052c9c8f114dc74972c4469591e31c9ed11927aa9871f38583150767f120f97365c8724d01ff69c19b595b6ec7ab21e26a45998898ddb05a066d24d896dbadcba13b6dec08daed1344ff897bcc9f7ff134b486612d1e2e7b7a5d0ca7df373a20") (:stream-nonce-mode-test #h"0100000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"16d9429c9c3be35fc5daddc7ed769dc2cdcd7e5ea3128de22fd0ebbeb15c06a39fdb5d52ad9eb30318576ba521249c6e3f5c84e39479be6de1d45342c5a8502413279a4d74c125a05017aba0ca4cbf656690feb8cd5c5da00f40c69863f6ed1eb7652621b62132fb0440b569e7557cc1f82548f9264265ac81988080b79002287a2224bef42b41") (:stream-nonce-mode-test #h"0040000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4cb569029a0127dd65804c8012699f64d65cd08465cd01913aa15609b2d35df2e6ba9d5fe91cb92bd90b8df2f0ea0fbf6aac7bd2a15113dc760177392b262bd52874197c5f2aec7c40cb8017cabd6203c5a0840bf06341972a2aee2a466b0b713c92a3c35dde3bd70dcc04fbbb73d4655dc1de3a8805c8149000ae6cd5d52b8e35bbf90f9173a1") (:stream-nonce-mode-test #h"0002000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f643b666050840dfe854ed075cf84a1936cf7151275df1a62814cf17ed802eadba49b040fd352eb8d55e41f0e0a205dcf97e9d3dadd8bfdb3bf312ef89cf963d79ef5ddf5121ff497f7a230b65c3de46f0e43786df6dadf90ff4a7b154a8cac685ae192a08a680114cbbe2a1102b3d97cb785e20cab52a31844603f47712675325ab7c464d9f5f") (:stream-nonce-mode-test #h"0000200000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c0a04790e17a7a886926abfe0e3d5e5863e56a6fbc83c0d77fa3f25a9e686427519e31d1002611c8fce04d66a28bdd1561ec451be47829ec2fa1cdf9bfa67ee8d715869226fc2224d492c89de1b2a5bcfcdae585176e40bb572efe41598ca469270c7219300ccd29d32dbc9aa1128abc2b2299c8e5148e954db6a6219b97280247a3408f2039e2") (:stream-nonce-mode-test #h"0000040000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"77d20a750d06c16ad663f52c69d3ca0ee61a8cd8e12149b2d888ab0033664e1a19871b84c9957acc6d3b5de4aae21e270571203386b213b75cbef16a8677d85f1f9745800104f2a090a2bc35aa1c86b7c86d6fafae085910bd462cc949632790b68bac66ef384c1ab8b2993c6ebe8b14eae0a3d7f3ee328e00981524722f92aef0cc6c096d15c1") (:stream-nonce-mode-test #h"0000001000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"07adba33b91f2442f4ff5ca8bd0f42c9638d1bf3fd502e32eabac76d42ed1fb73dda60e286c47702a7c1c25c5faedcffe82d3cf45b0d0067529aaeb322efaf0b5f08474f8207799c0ddae617c0aadf408e880d166a4f5f5bf5da4b82b68764ec34cfdd93bd0faed1d9d759ac4105ac82dd5d09dd3488dae1cb60bb7c88f6b76dc7fa1fbb8256d4") (:stream-nonce-mode-test #h"0000000800000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d14216994f0bf9ecc511b533bc86baa5e3692f8a9e4db3be9cb2716372a7da6d53488d00f113cef3c5dece445b32ba1dbdd89d27c4f7032f01f488e2b10d43c9fd5564fada69040384d9a91cb6ecc5915b97afcd948c33b7f77d2a8c70f8e8b56d9dc8e7fd29f1b11895357565af9e864161e5a920d2a9f1eb2c5556882d30c426f1994317664b") (:stream-nonce-mode-test #h"0000000080000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4b715b93e891e145d036be7fc588ce2579bf80b85ba7f856215a8bfcf7332e7bed018651052dc376de21ef0bf9f790b83e1327898da349e52ed67e032305854a0f09ae08728a629c704f258023d0d047031c05d76f0de8d797e2712d1a403bf5fbb33bf489b8a34ac721908d60db5fbabc531f4771ce4da03c2ea5a688151ada2c8b6306b30f1b") (:stream-nonce-mode-test #h"0000000001000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"02934258a13df757e7932a01eb9431ec7a5dd4312f82e3f59e4d965b32fe6bd3b52e7577360115db71c1adc94ef122553deaae929223ad5907a6f42171845d7918bcb073b1a89d6db45d2a6d8b0d4c3c55abc5880054ad3e81a2db8e917aad64bd3283076833eb3002f094718c9f9111f5b5712ca65714cbc80690a0d9dda3ee4c8e587cb88efb") (:stream-nonce-mode-test #h"0000000000400000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cf5d5c95a1ea7c0de9f029e3ae60ed71bf0fde19075816899fa8aad4b84947e42e7163a07171a7bd06687ed46dc368d15dde25f43a3e803b519a32d1655fae2fbe6e21c59ea981dea101e420fc45bb14454566694085141fdf640a50abf459c886630b1fe2993a148f1955cd724fb74e733d09326a1b78fa288d99f33e8884cc9fc5ddd6c775b7") (:stream-nonce-mode-test #h"0000000000020000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"acbbcf2469fad6200766829a216e23551bb6a1c9f1913d159828145fe57728794d155e51d67bd3576aba3f1f4a1651bd5b002106cfb43ce4047e7efb3bb1efedebc945be81f2426c0d6037675356b7125a7d07c1ac96879e19b5a09b0b1b968b4a0748014a7ffc617636a74a3b8ebe2a6c94731a5dfea11a795dc460672ec4bfb4a7ee12345ade") (:stream-nonce-mode-test #h"0000000000002000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"02591d4104a132102b1f9ab7fa8bb6419bb8c8968c590788a69225764e49f83524b524b4e7d930f3ee4270b6229ca2c71ed154eb890264fb179ce68110e875a5a955de6e8822d29c695aa6044a511822f22b22ff5f8832aef8e4afe015575b62495495383a99c562a7e503368193e24eda38844e5b28ac71ef92cd9021c06995bc4154bdf2f4dd") (:stream-nonce-mode-test #h"0000000000000400000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1cef4646746364f2d5d533904ce807314f561bc1e6be8dfea9e1c94cc9d544fb57321dd1d4e25f9d59ea6ca6f2d877741cb874571563d12bee2276fb2e2582cb2b94176e82dce6be1c5ba854bb45d4ebbe9f11f523ca34d13a4a3538d433700cc31992fb5754e741d45d72a3a885e497cdb35902261ff077d3ae126a1a86a2b474d44cddff6ff4") (:stream-nonce-mode-test #h"0000000000000010000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"78837aeabba4e1e05ed8f225354779102739ed6819d1de2f22e4e41e72bfc498a506f39ee4a8c6d224733cba17a28cef1597f0078b5e2343cbd5768c2c886cdbb8c734c259110dead9339229e2d5e5cbcd00bbd3ed7e7bbff4bed7175ed75f56d89c6a04976ba0c04d3bac8fd41f23faa63c18461bc9500d5d850811c73b06f986aaefae77c8ba") (:stream-nonce-mode-test #h"0000000000000008000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e2918f7f848d87abf76b53603a272da6aab539ef2e97fb0838e991b42545334aa779a8feebcfa80676941542f5aefa7c39588f1e0a4d92f6a8348ec6a76f75dfc616fa14f79117790a5febd9ecdcf0cde9db8bb8901438a4f364d8072f5127006f763edcb6ab04face8d28e996dbc46f730beef6bf365d4903d60ee3d38db235786f4126778375") (:stream-nonce-mode-test #h"0000000000000000800000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b14afa708ea9fbf995d72a5fa694615afddf9887d8bb787d53ed7d45123aefa51b6ba015d2a2ab4df3a3d4dbf4f70ce04f5598ef35d1cff3f2c0523535707b972f98bfbd8ffa51078e7baf03bed9d13d6ebd78ef2b3439506923b40b0ef06b9deab0a0e42c5118be33880086721d0cdde0012d7145491c4c698faa9bfe03285b181a6db9f16fed") (:stream-nonce-mode-test #h"0000000000000000010000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1809178dc254faf363aa75d3eab0d7a3df78aa1f6e6650ad12b35f1f2137fb09ac2a0a7943b24c1378edcc8b17232bcc3d2d6ee2c38a8aace29aea82952d88f6c8a3912d2c8c2e7c0acee9d5e4805cedf298d19fdba4971fb467236e2bdaca2101d2236cc4f040e16d00af93db4ce9be9c7d438c4fab0f9517d5d20e1863eec1cebaf7085cb81b") (:stream-nonce-mode-test #h"0000000000000000004000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7be573107e3d6ddca99c5dab4d6ff35aa296211b5eee2ceb07af24481bef2bc3f0e3e1a008064b77cbd6e3a4d5240e7460e6a93026e9750430d027b05a222468046084e0c8442b22dbaf79658bebac59dd2241b0c5eb6d90e994cb87c51adc8bfcec77e1f27677df7e2db4dd494ccf522038b6aeb405bdac265997e13e0105191c96620156f6bb") (:stream-nonce-mode-test #h"0000000000000000000200000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b5f4f6d2082598aed309819ee9cf0b60f8109916e898d3e8029e89bab646a7e8a109421291e569e9e7be23777359f19d77da97eeeeb54a09904cde59cfb71a48f1e0041e3ca4cbddc1e7049066a9079655e78296475d6c4643d4a45f0396d7d055da827229164cc41ad26e09e39cee5a6cb7bc5b375dd2ada6e68abf97446104e0c1255691fcfb") (:stream-nonce-mode-test #h"0000000000000000000020000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a18075dc33ac352e1a427f0c4a304f0b27b02843c3bd604d71b557e20b0d005eb0f2425340bf87ca65b5455a2f2da4f43654bbfdc2384afdb1d50331f363b735e1b2d1be3ceca98873433ec27dbd0231d09506c2b09c2f42e65021fa93b7882f981f065f8476d063b5d0b652e92c231fca8e193a1509bbed37d451985bbeeac2d090b3fd01bd36") (:stream-nonce-mode-test #h"0000000000000000000004000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fd5f31939ce210c9896c510e12844b3107a4a474830c086787a39a3dba6e2b5cd9df49f4b4b03a495370d394500c49991cf1539e7745d5ba663f9062729ec5c3103cac9ce0fb6712c6a91f80e12606fd3a83fe78d0bf27e8ba01ebe0b04aa7d0a2551d1a8c40aeb429c13b4c26abf365b3022d5f6f0e34a29125db9a8323c2b2d0b4e2e342a643") (:stream-nonce-mode-test #h"0000000000000000000000100000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8a898600194d32bd7e98310cc789393f7d6ca125619df3e2e6158f3420e1a5e8a5bfbade00d07a4d14ce1cd823711badf1be192726760138f04c0b8d41c0e31837401607ec88cfefbe0e499a43300bc74b99cb06371de2f0daae9b2c8ac78bd2dddaaad81b276eebd11592e039373776e36880d7ce3051b50c07bbcb1f86f3b9cb0369143b82e6") (:stream-nonce-mode-test #h"0000000000000000000000080000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3ae02e103ca8b1b02da5c8906d8b57dd09ef270bf4428d4d1cfb1eefab285be4d3ac59069a2aa26cb2fd8faf08c1312b6fea7ed55896743fe22f97cbea66af750397132228683123fe5afb0d156b3dd51a98005c2b28798ad32e696492f8769cee0a97748fef440d48bedfccfa6f9eb2483c5b652723c7b4f28ff301ae820d1d7128ef97fafb75") (:stream-nonce-mode-test #h"0000000000000000000000008000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"429208ab25c90ce3c88f47562d33c1297078541e791e6ff1d1a0d014141bb64861511298578b2a40e9954ea0a5f17e95aa8f7f02daaa59673427d54884ff6e427ddb8295bf3b96f8b375deef0d535559446083f6f2cc340189f9374605315eea224d1c4ee2ca52cb3a63ce436985118c8202b522aed653591f5845fa047a073573179600082a0e") (:stream-nonce-mode-test #h"0000000000000000000000000100000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f38fd468ffbe057e8721e587c25eb85e4f9a714e6541e4eec59e7ab07b364fa9a516b9e48a7ea7029e5695c04f074da2fa0ce855fb72f4b4a7b62bab5fec3b14f4c5916ad04bdef8002ae10f4fc99d62dffea9ea48251d6309ac1aca3693d04363185e876222ebad110d19efdfad632c8b7f768b3ebfaedbc5139fa63945efffb1a5e808b6e49e") (:stream-nonce-mode-test #h"0000000000000000000000000040000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"36e180eed55077fcd1bf4ca05feee741130f080944e520ef7956a2db571f5db2564e04247b483031104223e4ad39ddcb7d6ce31decf1e99e6a69c1a2d568f3d196ba5d29708bcc980d6d4d1d0b0b64608443e52189af75b63179e06aa5a29fc6166140c07275c16c487a52a36c00095ca99b5cf6a988f89649b05be4139f639ceabcf8428b9be8") (:stream-nonce-mode-test #h"0000000000000000000000000002000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1fe49ae6c0572ff3e4febd8ff35e3e6b3cec62b5c4edad1ac77aa2b72d53a368d15a1b1f29848c67cdf3b8d6a7534380cbe4ca23904631ad5cef8b2440852441b4dd5dd1f3a0be023981b7ae1cec529e03b2047c278b3ab8a3150077ca6a7205703216a20fa62906d10e346aefa5d8a2b432ba904f4218f6ca99b6bb46107d2e36bba440b4e78c") (:stream-nonce-mode-test #h"0000000000000000000000000000200000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"18723430f7a27a67c635bd11ab939b7c8de8ee772b0115251b97684a656a1a4866eb9087bd52a43d9493356340d529f1ee3988a16da4ddf70b8f8bdb1e41f99b44736d70c3faa5da109376cfb07b026215e5a40f15db48559fa39264492edb35acfa9bf788eed2927b91fdb82226e6b46146b89b82a9df9eebbf31446c34ee97ec622a40424216") (:stream-nonce-mode-test #h"0000000000000000000000000000040000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"10a84b30d0aef7dc7a03915bb4eaad377f43f8a1d5fba4c8c86a0e2003ac7e5347da3690cf9f67b614343e8329db664ef5214c17a8c80c81342f838d53323c928d73a2da855ce9a132e4d6470301c5720a49c52c5758ca0b41023eed39a9a3b58b0984229b9a723e05253bc3aa76cea589b9cc315fed93f293f0c168163defb59cf6a958ea8318") (:stream-nonce-mode-test #h"0000000000000000000000000000001000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c05599478d44ef413665348804f655240d30bf320a5f7a586692c11a7557d00c86d4f80ea2b0bfeae127394f7bdf36c61f52542a572c00b5ebc21efc79bd5063d9934f771c6136f8d62993efa3c210c66b43fd6f1c03c9bf776b88e5d451b6aa0d34234ef2c5d7bf2eef0f4560be4c8acf40ed74cdf7828ae8e1d0deea59d6688fdc0853e87c08") (:stream-nonce-mode-test #h"0000000000000000000000000000000800000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e32efb0a6e44bc99f6d6b24ecd63a7a15e6517304179156af4b43438df006d4099e5d8f0a7c7af9d8dbbaffc26c88684df0f284649412ae2a5f8d0ba2efe967b89cb22ac2477a786da7b0b1b9fbaa43ce41c36eb47e21248da7824d5782714b4ef4668eacfe5315d59ab6282114c4b2642a784ca0d3319df217169d8bf3d4917e67bf9777d8177") (:stream-nonce-mode-test #h"0000000000000000000000000000000080000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b414e0b704a007afd03e9166ee934b15be82180ff2c5df0f67aa6892e1891ce6ff86affdae0c79378e09c990d52276c06f2e9e512fbf0e49e3cca601d65ad01eaa6e194e370cb2f53d145ec4a1ef4584aa72ab4421b58b08324e0b1e6fc030ce1d14c032d2ac85d98da068b3aed9cd4d60c9d2b1c4bfe1ccce69846a2c330352b3566a19f1fc70") (:stream-nonce-mode-test #h"0000000000000000000000000000000001000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"93b9b64f1cf33e32ab793b6c011d9d55f30ed3468ed2804aad47dbf37dadcf7e835ee714df2eb7f735ee0b6f7977a4c0c12efade37ddb779302387a4c2bbde9921b13546ab5eb4587b254d14221a7a2e0e5d947d0602155c79ba1f417fed6a4d3aa4398268bf3e589d0be0b390842801cfe172efd645b00ed91a1506481ff230adea08b6712962") (:stream-nonce-mode-test #h"0000000000000000000000000000000000400000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f2bd235886d244406a159b41b4c0a2a1020a0887916de130c27c0b5962c0d9dc186cf3829ae946f022db3f37600aeeb02010d3db1b33ccf970ecf29999492a3679b67066bf70a0be71d01fffd4e0ab5de1b3ff92b6a4680f4e4ebb77cf12c44bc26e34b2eee9cc8c2931fc29acd4a78aa5075bc00cedc6ccf64e8c290c481bad0839f2a55f8939") (:stream-nonce-mode-test #h"0000000000000000000000000000000000020000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b3cbc6e2fc1fcb0f6b681ba3d716779becd4d86379008b7f59b408013ab7cdf14da8b4a4f58e6e8aea6329356c32b4c770624b175eb415927c1566d4c29ee93ff314069544dd42462d7402b1842fffb97d28904046a72d1d850dbeffdd7fe80b1230143911090c9fea2f71cc0f68b8cd6ca7161cdf640ef16d320f6c24c0c38a7fbb85d1f1483d") (:stream-nonce-mode-test #h"0000000000000000000000000000000000002000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9f1e45d9dc058592f1dc52dafc9db815833180fb68e7584f2199fe52e96c69f0e8f875bd1e24c6cc78777264fa5a99caf22b0f6c3626200aaa653895fe66254b12d5b274f944af0795b998cdb96a14c2421b7df9f93bf1ef9d59ae078ee2d1da9754e7e228409fbf22bd731a3f98c05f8c4ec914918c652dd2eb5f940e7bd6b31dc9ccf9f5f1d1") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000400000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"58e3e792d47174e14ed75de036fad005a255f69eecb35f088017a904b436308a201d6dbe6b85423282dffbc491041581f9bff36477596cf3a9cbae6e6e23b903199e9f13986797a75d5cd25ee7d299f599dde4f12e65d1853c510027f2413434ad9f294db459290dcd7775281a1e0e7e4779604fe3bb84ce48435e82220aa87af861d4d76cf32b") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000010000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bec67142acba3a7548fd965edb1a6d62d361dc181c955bdcbdce8da8ed85eeb0eb026f87d788882719a9fc64edd63bb1edc5f91c95a2b42016ce5d70b1126506952618961be0acfb5a5b4be1a5283d6c251031abb6bcb81f0e23d61e3dc90445111516bd8795864a5c43096ff7b70e70e0155c2d6ed3f6b3069440d9dcc63b9f0e6474a3c2c5d1") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000008000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0b54bc5a7f78e85614e8f15aa040fee048fd961755e9c95c807521c6f16a085046872d1b2f4a84697a665e7571d6d5888f7e854414db64c52f03916cecc7fecf5dbc78bc65bac61bdd059dc1595b5059365e9c78e995221f9186bf5c158930c1f0369971feb1b6fc63b8c2512f1f2bb04420be70d15dca144517693ffa1fd3ef18aa9c6bb8cd1e") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000800000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"df2a1cd920c387349eecc683a5a12271453c66150fb4e0c14e764672a93b361220f2f99634603cc4e3e4253ffc226f534256b7c2fc72ce9655e885c7b0fcb199bfa706dffda5b1e88b5a358347cc80007269635a230fe55d2142e3f70f5541aaeb42a152db03b89598e966a0f228d99d8ee0eae7bc27660ba47db1685ae831c01da024e6bc3a3a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000010000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8f46ce157824234856f419f3e93f69ed3c6dd5641474acb0031ad2e4859a77a1081cfc311275d62a2e19921bc55e677966beca2aacc0fd0fa2feafc6902d2f5b4ae2b84034782a5ba8f20f4f389563a8b1fea05db17f82ce5de1a156709df559ff696b6cb95ffdfe5b2e682eca309eaf3cae2208491d2ea77b4a204a81f8624ca8ab2213a1b99a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000004000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c51cc1da64161d17bad1515d3ff256bf40a09a160401f73eb8b5dea94e9471a918f219896784f68193bff3f624533b99a33302bce1135f3156e408f6e387990309014d6d58715415c2ee6d54d04948d197a868209e15deffbe710080e26d83d1e6cc22eeb025c4da31ce949982c5e9209b95ff8169e17427f5e4019bfeea91c4ff51a76ec4c88d") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000200000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f88ec429b0da918a0be7d8af139438772118e97db4467406130823652d349a6cb4c052d3054f580cc77d42c626a7ce96441173e3d7f373fd379bcdaad224188b23ea417b269f0871ee772b3c67a893f3d0c0f785a62c69edaa3395048eee92f12c4503d45584671392e41c38e3ee27809968612c3b12cfd57ad543bc18f08fdce7366cc64c09f9") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000020000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"dc321d0ea3682600ddd0b851a9638bc8020dc3eea4b8f79293561101eb384d725c499a2d4b5819a812f2bbc4692821ada26798a42ff730458b8838f8ccaf29f586c037390adf8b1cfb9b94f935bcadc85dd7c980d0d7ed17bc1e6a3a682d172a73c40b6e4a3f06d83f6d4e2870c97158b905a13cec6ceae7c58eaa01cbead0a12ac87d0cf8e84f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000004000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"12f86ce9e9afa6af2263fd0e76fb46dd7d822baa3a5082b0a48ba1e643af6c59e93acca528d7cdfa46179715de78c4e6720cf5a9f9b475c81eefe09bf12c34d210b534ea2223990c275a535b8e545d1ee4fb39ef9381660ccfa6f0982a52962195afaedfd1022d6487f5499b75b20f2fc443763e7d6a67bbe0f1ffa4b7fdb6b89406736041bd95") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000100000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d7dc98e71cd65e3952f5ae27155e6e94645fe031530fbdc20c2d080e2dc9a37cbcf0c60f1aba601537ab95f9fd3b805613f0dcbde37a52ff8aa887b62fbd16c4c2ba6d0d906e67793185f2a6efc535b1d726a7c915ec2cb5efd68de6cb151a9121ae3c176ed8c150e80ce9b077b1372f22428f2917896c5b99994acfb5b67eb2313b6d7eb88e8f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000080000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9637a03cce57413e17265af5a1d627063f2a99d039ddd108aeff47f2927b48122fdb7a928e8e969e9283f2fa2aafe04f573aeddaf23b893eff265cbb488f193b06183dc41526957e2d38664f19454758aad7229c0e3605c158d9f8b99b115e9d7302d55c2d0c91c2640fb715b77a1b14fb167441e54dff0354de2f07f35730a53ff08915f378ca") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000008000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9ec434a4f74ffaa67bb03c0a6d3e4bacc41c5fa2df2e79b94d78f7b2bef4eb89e9b508645b96e55f71c11bbd87cd841c380a7280c40fa77a7293d01e0d871f07b89f43452f4c8941a91eb0e77d92a7b142a2c4698fa46d424bf0fdf2a6660aa5c7e69e178af8eb9c6ed6506ad5c2d59ed0dd8c0a78db36bbf88c888473227aea05b201e8978416") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000100000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1a2d747aa75ae3a2b8442b00d2eb899dfaf741ea043ecd307b992747f240a4d67ff6803ab5e923e691df50437ef57a031fdbf898acdf3243ed87ff480b7921a04088e9697756be80b251d05aacc790756ae34fddd1c2811de6abef7c77024950d08e002c2559a42d5e90d871373716fb337a1a7bb377fbd7de095792e23a0076ae79b328b3bb8b") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000040000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"067201c43e0e2a0cde624b5df19aed14b65998055792979b87c140e8f3e444b85963a16a8d92c4c5e79bd1e9e3a4d7374b175b890f8b42e6f91d91b23ef0bc5a5f1f863babcd022e12223e7f2e80142cd8766014c0e7f60215ebdef5a0c7741afaed709e67d0fecef3ac0b1175589ba23319767397e007aec31a54088ed7dacc6365e2a3cb7bb8") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000002000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9842b4425800876d996a8562a5d9d3c5f19fdd17bdace941cc91c48175a93f84b7fd42d6591b35bd0fbb084f4d9194156c2c10818efeb2f1c9f984a9cfda2a8e026c584f74e04fc1a0b9b061aedf448fdc487f3e0e40eb634e4808dc355aa12dd9e5d2139ae7233e3bd8e86544ebca611c4ae92797b829f4354a355c5eedc2dc4491c74d46356b") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000200000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"53120417a8ff085d2a910a64ce38b5fc6dcb6e9dd03b787dc6785faa826868146daf9b5b3f439f3bca94091ec2395e2b7cc66d4456ab8b8f220e2671675f70ec042c01e70619d74ab774329f0cba48e9805f0c5b21e044efdf8eeafd57f713bb94c4cdbd1095431c76e560fbdcf59654a6cfe93c20b62a1a6960e74d5f0603e5ebd8082088d0c6") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000040000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4c639316eafd27253132e22a09dd424ec0ef11ad2275786876d32ce4fabaa2e379dd41dd805f316b31fd98c20d444b6bf000e778dc90682015bc8549d1530ac11424b597b0adbef90093895a79bf4e4ae786b447a09ea64a24b2fea38eb72134012f0e2afb19e96a1368c8cfa8052df0a1b458bd90dd2c8e7f353f62b9b2dea625df37091bd3c2") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000001000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"628de0d8a44e07c181ba2a2e83f405c69e89c125e8f63da226bacfc1f4ea1d1c93bff8d2fcbd16e7a1106b783639cde8cc3b50d6ce7474ebc3031d9e1414d57d98d8f51c16618ed2fcfedf5807f829da2b691c95177ecd08d32acedcc3d573ca23be8f50970dd47b982480c4991eabfdeb23b88c55bff7d1edadc5cfe8cb6e17cb2b8b3080a6e8") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000800000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"958255b3f1b1fd9c7f75cb59be2b51a49755db789367227fc5d05050c955971809a0a2f4dc94dad9aa7f8503c4fbbd184a87f7653d1624d9989c32406f6a5da14e5c651fa5b4928f8f669c2620e8249d0f818cda58732ad830e64dc5ce5db854f45bbd9610e019c0080f746fc46848e46fb13949a0b848b53c26a900d729933a96a704d82aa95a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000080000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bf0683a85b512cf9383fff11273453f2146e853ba85ac87fb6c4d8b151dcf8897e868a8cc1a7bd16e01b5839b13be6966ce7496e88e7694d2c8075ecb48d7bef1680bd0d011808f85324cee4152db7864f7d1eead2a922031fc544f80ba0a0d44eda5a5d631044a1dacb013518e7d91bbcd41ec56c5e5027883c2bb48580e4e558e50b9e9f3f96") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000001000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"41a0bb88a1a2b14a94e4301aef36e31b28b995f564f9804c26ef70e34b7ecb2c91eac1fca2c116b9f892d7e196adfea0c7e3723144af4157af3b28bfee4efa532990da4ec3a229ceb68a012a3f5cb6e3e17a9479f0133ea3eb55d8894f8e5b30c08205df5d1bc25fdd252fc78b851e714b4f1c4051b0cd6372c17b0d770fd733f18e55170e1784") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000400000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"70514dc14903dc077d3426f625aa83aeb4e69c47d3fb2a93602f60d62fd6c2ad34bff7f206e6b2be375984939752ff3591dcf136359636c909618a9ab93807fe3697b06979847dd5cae34d2be01e9fb93cd7f2ae4308c7eaf33d8c5094dbe0d32421c043d4e075b13fef9b5c18227a631727bbe817219c6e1b6eaaa1772d068bfb5aa0e5238e0a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000020000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ca585f5b6f5694a1adf0b79cdd95b24a9957256ad7b51c1d8f2891b608e86ea05c18a97646e6f5675b0bd8d9220c9fb7b06548b025107891f1996125b50caaf97e2878afb28916100e5d6020eb4bf6590cc3c98228590bb2bbee3ff021a3bc54887e42a4772da1b05f7cff600dc66ac7199b68f5a59f743829212ea267132fff272df001676ec4") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000002000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"83cf85bcd626c09652bcaa41dfb088a29e902e9081f35b986a98c673cb5afff885fdc78d82d159cbdfac6ebd39f130e24455e50b33b6901e46a41b8079e04aaf8b57d112a286d06a84863ba975a4c8f58f979ad3c79f28f5c5d1098529b9cac45a07fa56aed43265a5ac69ce77656bf9d7bccec994bcd59384ec3eeb619a8a42093b372e82e2f0") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000400" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"46935eedb677fc75034ddf0579a6f622d19b1a293f6b3981687b0a8e5432c1f134ac24dabe2dc030ab28a9d61922922fd59eb2222c5acdd60121f201e8983a842770550dde8f9e5060557e04e9cf0af41e1b261a6d67c240eab3b3f97175ba2875a8b2a3e9f4f55648a95ac21c65aebcf7b1dedc3db860417e8448a0060617ee5e71f4518171db") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000010" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"61fb24efec27da9a173d11f472ff8d57f2a18b826972f7b7a03f0f6ea879695c052b095bd7cf3258325c813c797040c18199185f2ddff4a056c1e529675df3aacde0e88792535a5f161c5520bffc6438b8cdd72534f9e4746b53503d53fe2ce7ec10ec8a1aae9a8b0e02de5fa266f781c06faf838f32a933b315317e27a8ab679f8ed755c90b7d") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000008" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0ab8fd02b07d9fe49b557b1c474c812b6b46a16d2bb8000710f67dc2613c51f9b29e6f4eb5c92df84ef2c7e8662f4008eef15e133af72e0ace417975fe15f9ff1eb1d98dde0d1702d1665ee6a884cb7098afae2c959fcda5435c783504f7d9de2b6d47934ae7e6c37b3971a1d01d2f199c24ef5a3dcf95c0abbef0b50491a0921ebcf75dbd8d2d") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"8000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"472251678e82f653a05ab5e7240365ac3141ecdaa952da2b5ddfe52dc6f7e8c4703e48c7ec5a7a48a51e4235602e1d2c214c9ad181bad0038e22650ff6f5c8f63b1d66b85109ec7160e2012e931832799de338506c2c25067caa3188b4ce7bb4bcd7930daf6b792d3eb91c94819cc96090a4b51f95cae423a93ccc5d981e14617cd4f36a5ef1cd") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0100000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"182cc6b98732a698004f9964c7035d64ed0ca69f9230abf5cf0fed2d58510ea413ce7ee94d9a0c665332f7009d3b46279e143163ef54f3ee7e4938864bf8a2adf01ce2522b9de20418e45fc2f632dd92b286f8a5318adb9ade737eee673a91be6c70b415590464291b9f6e2e7129033a36dc75972ce4f57b0d65665604677834022c5cb171a545") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0040000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"dca9f0c7328c0d00896f3a8af0ae9039c68cd8e0b4f8641032c8c46531e7945ed9c76756f9b208db476e6cafbe32ed69f2671e0ff9edf1b1d00ac5541e58b0d19ee81a58f0a0ea8c2ce5e45e97c9bf3782ddba8866f18eba1aa6e2106b6504a8cd769c8dd2eeb8cbcc0cb0b9d423ec3ebd09aeb188603af02f03e9b9dc0d3ca51602c37e3b60ad") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0002000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e5052ca5f20de7b5051870468e82918f7e94850c50bd8943c9de56b76a1bdc94c293a18d0d3e4878c5a79d7d426091317afc633e5025efc048792baf03f6d7b6e5a67daef77d570413ec0fcb49a610aea9b4352f6197abc822c31141e85df8350314101491d2f01398998bb7a5399743f752f85badb129ec8b24a40a0474800cd863a42f69fe59") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000200000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8eb7774e5ec6869056565767b351fc16a7cbce69ff44c44341cbebfaa36ab1b6990038f7ad25d286d2c0d70a70f4d0bf760d0d825363eb397f5a796ce0f6679d22e1d93cc41b3fa0643af13c278487206d9f3523046b7ca6b154cbf5359742cfad69925ab196331a20a94d1ab8b2b19a04d608e2cbbd4bc20e4523e5c0cab8f9c6dcf4b9f85adf") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000040000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ad6bdfd1130c8529f066262d7a4ca06cb9927596655eed4b2284ea0c5589b484283656491c753a54bb2de8b9076bf25d92f2a90a865ee62853c224062d9074a4caf532b037f2620f7b593d3fd4e6798efb98153dce7ca5992a4a1861a10ba4a9f7aaaa84e75cdd3456a6324758ebc5235c72821669626c3d3ba4fd5c0b2b3c181bb7b9f5de3708") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000001000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ee94037b1aa04c6947469ffc96b5be2f3407679bfcbab69b0a3b63d0d1d37cf29aa443b236ce7e8505b60c6020a9893626600a22213633daf818d2cd8aaac3a1fdf31610ac9c937f9c495d37a0d923211dc1e41e48b160f39ac04bd13518e546c69566f2584026e72d5bb3cb4b80e55ace8cd55265d346a7a8f6917ab7b9132f426de4093889d4") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000800000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0fb642b20895d7cc5282225ab9a2420a19b0d78607512daf55bed6d5ec86b47dc1d93dde05692c7220a71aaf50237f4e251619d8248c9cb63982f4d46ab113d8824a7d698d7fb94863b731a6556ca11f32b609baeaea721583a09d607a2357649d2b322069a94a4a184d4d0d998f084e512f628021d60510d7e4c527da536eedca53da7c44a0ba") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000080000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"696dcd3ed41b223a325162d7717d5c4f28090412cb733fa8d1ecadfcfd88f6b62152d5950cc49e566a5645f511247bd91b361814e838917f7071cd45ce1a67edd6306cf524d9a9987ff9d5b7b54fa25498e6f477ca9a98e859e38bb675b259d47189202a3169a365e836a0afb566b1ebc6c9ffc9ac2940d324e166d60094650fb0b76f2db01a24") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000001000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"abd8166de66084d88e71c0f197f225258dc59976b473dec6b94f32507031e7cda64275ece6b81ed4f4dff5c854c0c800144098248cdcedc35544fe5d7de668ddba39b9ad470b038f0fb0a371d5940467a5679558aab91b0b4f89979d95b18bd9305c0fa37f3396bfc62ba9e04602be67580a5b9fd9747e8d788af1c8c91e7f085d3bc25a7ecbbe") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000400000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"91fa16499fd62cd3d693b7263b0167f4e8694ac86ccfa7b0630ac08622cc462d812a4e67402114996dc61047f3f461df6b47331d2f37fcc53751d303c7e268c729315ca4d0b69238bf9647d054a5fd1f33d33f82e90a2e70d946366c235ea30d06fd614c33e49943ed6218b07629043c9cb82d295dc679c4c088c9a1558b9a7c9409db074e3627") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000020000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d10a854ceb8809ed5662e541c3b6a4125e8b094bd6c57f1beef992c1119f04bb3184f47308da7c4ac59fd05a23fa36acbe8ec362171b257d835fbdc9cd588418e36ab879e190a7a126dade9d73809cc78c7fdb66faf435c197a49c685c235ab99515466f5203331ebb90e25d316ef7fc1fab4cf0e3f919704785e87a2265cf32c7ac7f2017f902") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000002000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7610fa0f75d9df28e7fcf233ed20480b0fcbb56af381f7ec36068d35e07628e121fef8ad79de82025238d6480e69700a513191ef9dd56b8fbb0019873c0a107cae6a4638b1d1232e939552441a8d619b92d34254bbc02505a6daaad7ff20d991ecb83d8f03d1210399bcb144673d58fd2fdcd51b7e0af37993b6f32cb48a143c92d8129d222cec") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000400" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a89f9974985d63bbbe561bad624712abe963af5c468b1c6c9e87ed9170bb933bf198d61ef608d1ef46d0d9bbac62bd6a0dbc562aa5e80578de62fe155a82e61e7ea9fc73f0b367b36bdd519e86e752d8b09b7d1bf4516c05db3c2e71503de4a351a48192f8f6fd2728623bb9d723fdaf8ab7428eaf61ed0bdcf731fac273d29846f2ce56bc3fb5") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000010" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8a1cf31257ce802bfd52f06c7f0ab9ab90191df3dcab95c350f0a286bc9e39b518674c1f48b0629842e580803d1074e38172cf5d23460ced0cc79e8b17950095ae57aea66878cde50e2347358361e8bd6ebaac2d7039bebf3b4de3acd6ae9c5eb223bc73c0c8a90180264272de6aa71fdf993dc7bdcc4ea22e55696482952c266e6ac05da2090e") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000008" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ae11b972f708f2430fda6848239da6fd0635f94ce152fe8c07f8647ec67e35a2d6840068f308d57d770a356cf5c83528cd9edf94622d71f204205c1e3cbc29a100c4d7b49a88fac5bf51eb8bd30b377fc17a79df50ac9b101ca798e27acdb97778abd29abe99c9c236d549d86a8557668bb27162f067aa169f5406e13336419c48e97baccc3cac") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"8000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"675e88b4ebb7c9e13b48b8391bb4dd6a112c7f688f623fcc3025212158267d59078c39226dfa40a6efe5b8476c66d9e201ea921c0bbac2a06e478578eab2e141b1bd5d1308aec425e09d87ad30de6b9ac0ea38b5ed1add735043f60ebe13a9f4da0abc2c3777b199a97f137fcf5debef6ead685b3e195e6c233e55b153e07765b66620949d475a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0100000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f3f1d5f1e9a6d524408dceb15013c8806ff638516c24e7db342aac74906c161cb8c1c422aafe459e3d7116ee89ecc48c28c3287408eb4df096b9c7c825001af3142bc6ed3f35ba56651a4acef8e58bc246f2bcfefeae4bb52b42fbd8e7dd671d4afe13ab039427af7f1ef0ab9190ac902f0508fc10b28c2bf7697562dd3ffd485f6ddc0a870760") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0040000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ec23882036e96bc32349c38cf9af39e6be54597d5751e2f4e8462f94ab50cf4ae84c593e79bbb1c516e5d94c1c20dfe7852874fd8a27f16b0c8214ab746b8378dd7efd59328a845734088dfbd5b7aab9b8d0f9c9c219905ada722e8a613d8b7bd58aa0060b553e5e4234dbd6b4526075dd4ed4646d8affd332139f0f5559dd1747b1aa22f5a753") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0002000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"08367d6ef1761e7a85505317d61d18070849618add02ef043730b396a7f144cdbfd66f5d690c849ac3546146b2dc5c60443456a4a760dff07c94a4fe217d68a6ba69f8342b17be7690d8b52727b9861a937c50b498ea641952f0da0038007deb391c446d6aea4590393f615136953326bd28082ab201f7bb178830a8630c01cef818363b566a98") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000200000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"adea4c486447ed9b1753752ef188ea2ce2abb0f1e4138db089a77ba4b9792fe305c9a14a652c51434968fe71dffff1b273af1e54a10fdc6be6eb4dea633063653aab75604813e08a0fd08f98314aeba5e266f0660cba28207cf8d01fdc11ef338ea2ab340c77ec3fbdfb741628b7e048acaa8c8af7c3d0cb3efb88c97cb1cf29d6f3cec5e99f67") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000040000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0ad51d0dc8ff1f2bd9169bdf03b7d5cbaf7b0247da5ed045fab35f9bd7da211c00983d17e38a1e075e9eaa6f833179acf74167eb835018078a02e7033cc061c9e5f4639c2d86e13f79c962da170a219586c0edde2c013bfea71dd2b49e3c12d9878369f9996fe1958abbfa43c8ab163fa718f45332e060e819b5b6ee56460c68841fe691bbd398") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000001000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7f08734392894c728c2f04d5afac53b13ee75c2e64c10ce7288048f169a1ed4246918c4d0dfe1d4598d493508ca21204abdf934e992b2519f5d5141aa4bfe070fa7e22e99b046154df54c7c1492e83f0977304f5704e85389731e8408f8ae7f10adde9c18a7a75062ede51269c479c0bc585f108e77a645dcf9ecff658d5fe44bfe73a91dfa8e2") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000800000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"fe8458fd30eb5f75a41d4884b8bd23d2755b5321fa6dc849ff28ed3c727d21bc992b9f33466ab0798d6ba41f27ca7e2e477e0a180d5234aa7e6c136cbd3d7a446f52c702bf3a7c108a4832ecfa69968a361d8bf5817eacad5d4eecfc2acba3932208ad2ef04547290e4091411bf4c05e0457ffdf118dba9f6b2a5a3ab0ebc29c38caff1251e072") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000080000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a1fa3cf16ad34de987c250eac12330d1c99ac60e57ac6e2bbe10a3fc177b11e3e19a1952ece90a331cad75b4c13a6aee87fa8143e0e714e49423b659f977716a116efd66bc8526684acf94c91af2bbcd8a060c9b73b3d1d1ad4e046b3115aa295400261fed9e947da348012353314253fb339d21c07eed911e6ea5f24b932e61a32446fedb32d3") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000001000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ec417d93572bd5381b0a68438c91b629ef2842195e0929621d71008711dd02502c9fb19845b596c318f05cef5ef99533d436088472fd52258c939f90cd3df22a2d9e94a1dadd08b89953b0d52260de00ae791770c1a97927da34eef93e341d7069c8ed0004c1546fb4b9cd11cb81370ca207dc7d4090e2d962dec08e39160c5b3acf0375c5bc3b") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000400000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3ff1d6b964d063e1adf5ea5ef39cd6626af6cd8db24c92ed2b73173814b302626b553d8d7a7f5bffd6a32c83568285f75e372734ced398a8f96437f43f7cc50d92ba573a6dc843702a8e7bef0e5ec5b823c3c31bd794b3168024dec92467fc640553913595cb2a8555d3d23aa27b10dc5c78bae7ac95ff9dec63b18e3e41933b798ff9f8e5318a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000020000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b8cf4b7824c3e4f0b34082b265970ae979ea25c28f7cc7c8e14e4bd92fc05846e4cef20cd9f16bf3690422eb13ea63c5390cacdb72007bc30ef1cfd37f5c007814a93086e2defadf4725872679e9c714481717f795a83fbde82df9854db292dc4a6d2cc8e9725e4f066ba8bcab10fede1d9c9d40e6ad49dd2227cd271ac83cd5b0ce1088289edf") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000002000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"520f357900495620f995f7b94323e8a04ff5662ae6d335ce56dd647b33b31c43e555c508235541ff6bd4d6b2a96c1a814f6b409f1e74b110911522cfa6994f51bb87516b7d914c22c98a71ef0d64a3c9cf8f3e428eab0dc609fcbc969f55d11dd1d2e22cf99e09a8c946ba59828682e4d8fe26cc3ab577f85b1a7fe409f0538e6e9fea7897d9df") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000400" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ee7a85229578e58aeff028545485eaf3a7df34d55012d421b7eaa4448f07e428be104b49d8d60d99fdb6e954fd780a3107b85a6092c38b3f8c931ac8fad7af1503391b4d727de7fe70d407db24b3ef9ca83c19506c9d2ab14fb8d10728a4b588116c0b0aaf3b5b1dbb0f38830eea35a2f0894a83114ce5bfa2f7f7be38d06d6c600b9a0290a988") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000010" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"94b6faa299b773fb67f87ad0d52a121ba9333d5f94be36d9f4b50909101f1e2a8e23dd60c3dbf4d631a7fa674ef114bbaaaf594de912b905ae5f609bb5c78d0acfed9f1c8b396cf2d5ef6f91aa5b05989af3026849d78c18177c38d1b0e4cef968c337633ae7483828df05dd1e9f81f77b81ce6971bd084f95de1143626376090177e6c4b7f768") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000008" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cd51b9e4198b555ef2f1b445208c8b0dc95262c603ab232cc6be030f824a15b3748cf67819646710b3806a7dfd0c073bf63fcafbdb9edb6a29edd12329625e31ed8253ac4c191ec34b0529a6ca3c4f8fd3e635f7f8a3b719be9ba3d1f55050d37c8959d7f8114acb313101efbcd414e382c36625f54211e1d8290ff266161791d95b90245c3869") (:keystream-test #h"a876e637c2183448f993fb2ba96e810f9aeeb7e8942f605b8abe027249933e75" #h"cd018eb46c08c4a0" #h"5ed2a0d649f07310dbaf9af776dcff9ec6b7f06fc7fa9c0c8430d0b363ba29a6eb25f7195d369f0c965911f134bee6af28c44473478392b69f2de7c23808c78c9110ab1518919478477a10cdf5c6736f243d462c52d955bb1f0d22ba31b067d08dd722443f7e53dde010804ce516de9a755d8ea83d7bbdd22390a0dc76df4db9c9ba38078b2384b51ea652d585222f60bc9e0f1afca7078eae8b04880857a646d2cd0d8fde3484dcb9830040936afec1db5f96baa6f5b8a2b48b5668d96a40b9b7bd1ef3a9e2ac2674d2470bd65823974d35119bdeaf0755b2ca5be92b685052a1a672566bbf1a10ab1b5b4f32a2a10ee421055d998c9d7febabfe6e3044ffc5d3315b312b396f20cb4505fafc50da47aef97e7a4e1587bbe2411218b9394d580c0a629adcb1a22a4e005cf0446d38540f1e7b7f2706aab3d3229787b1427597873fe2a90e58d3c4aee7df004f5530d19784b0adc513e9227da2d584aa144e2568a3a1262c94f72b9ae84ac2780dac3e980b74caee58f7d92ec69fbef7a5f0fb152643cdb5ee3759baac381b7bc830ea910e2c76100547bdd23dbbdacef483836ad370916dbfdb6da3143c94473ec52782c7366854342a2d7c3b54fce69282819566a59120b811cc3bde91f1212ec306e4bb2a3575b876a9aeb89d920ad1a2bc05ac339aea7ccaee11828372b4b225cac91fd1d412e70da32cc283cc1c3eabd444aab7c4671db13685bb0d798af40f196bf9b6827519188f9415d659050a60677b6b3836d73e1832b134408c541b7282a928519be40b6b7a2334181391ba0332f8f4a6f58abe0f149830ce0857c5877125709f832dcf87ce17c59a48eca4d7e321ac907aac9d41ce0f2f009739d666efd69c5ce73276c6bc975183a66aec10208a18da92e206d0b1a63c05036ba561f96db73d2c8fd97870eb92e604c38da69538c3809ac4525e3b75813a5146587ae53f24552c396769c908316f1544df9865de2fdb2f10948ef023c8ba8102c822d2ec9676dab36541f8a8bf758f52708ea56894e4a55dcf588d22c3a9060fa0dbba0586defd64d84a60015ee8100cb2c2dd816417f03c493cd308f58d1df1c69b1d0e71e38c99a336e14bfde046dd75ae0b7297c1a4a9b1c438020bc8806f53cfd986230ec872e05ca5d6138a8705956afe738a046f36b932d2a4e7aae68ff7a2aecf40ec5c8208988a3c7262ebaf8ff101cd8b6da8c62a712535991bed84c4ba4ea7ecfda772576d724ed6000d8d9b000a9f25b735f325c3ead13ec7bd9aaf2b54716470fae4cb9da16344ac991ff2cc626e6a15e12bfe06328c259b7b0683e1d3186618e7eaf6b3c3eda722188cd1eaf76991637fe75eea3c767e32851e311ac3619194526d4954e7cbbaf21f2482ef818f8f2554ed545382") ironclad-0.57/testing/test-vectors/salsa20.testvec000066400000000000000000002521261420372057600222410ustar00rootroot00000000000000(:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"6513adaecfeb124c1cbe6bdaef690b4ffb00b0fcace33ce806792bb41480199834bfb1cfdd095802c6e95e251002989ac22ae588d32ae79320d9bd7732e00338d06acbb08e5ff8fe3392e71e210f120448e3b81487e96ae91146d78af3b9ac90544614abe2f11598fb4d3ca691b198483ce9e9ffd442f2d032bf0160af424cd1d1d4ea788fc220") (:stream-nonce-mode-test #h"80000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4dfa5e481da23ea09a31022050859936da52fcee218005164f267cb65f5cfd7f2b4f97e0ff16924a52df269515110a07f9e460bc65ef95da58f740b7d1dbb0aad64cec189c7eb8c6bbf3d7376c80a481d43e628701f6a27afb9fe23919f241148db44f70d7063efcc3dd55a0893a613c3c6fe1c127bd6f59910589293bb6ef9ee24819066dee1a") (:stream-nonce-mode-test #h"01000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c6c628bcc0a41875eed7f7d9fdaee0e414dfd61fcab561e70a3933516d7e956aaca8ceb9516acd68103f7cc36510b50e02b70198dff5fe8a6b28997b1128c4d75d8a690dc6ac50c30211f46f2dd3aee00e3fdb29baa7af7db55b706309fa77ccb959cea20d38a60d55e901cbd5eee9c331d80005ae037788f740fe8e4e44223a83d06a643b9a0f") (:stream-nonce-mode-test #h"00400000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0471076057830fb99202291177fbfe5d38c888944df8917cab82788b91b53d1cfb06d07a304b18bb763f888a61bb6b755cd58bec9c4cfb7569cb91862e79c45951f2bd323dfb37bb430385842ce448344e6e6e4a1bd31e9386c24e342dd86d73ea3caf55bc7d01dfa943981ca927f87adc8fc5b4858f5b935b17ddfbcf4de73e4a370e5d44bc3b") (:stream-nonce-mode-test #h"00020000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2face6630a19841bea1918b036081117dfb2c346ea1d338f4ee912dc3497aa9c4f01b254ebb8e6c779417a55b7ec7532d78a85d11008e83d4740e62dece2ce9a04fa2d478142ad77118e3e1e00053113191abd882b194fcc74fea131bd53e906ebf9c2bf56e3bed078a0cf704acb9dedf9c731709134dced4869eb18d81780bd60dddc765b4768") (:stream-nonce-mode-test #h"00002000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bacfe4145e6d4182ea4a0f59d4076c7e83ffd17e7540e5b7de70eeddf9552006b291b214a43e127eed1da1540f33716d83c3ad7d711cd03251b78b2568f2c844521a59209c1a32e18a0a020bfd20d9ba2031b17ac99987ca958d55328b19d2eb0d1eb41b18a5a5cad63e54e7266e7374415635eaf4ef8365638c08cb8adc90c9be597500dd3028") (:stream-nonce-mode-test #h"00000400000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0c78dfb870e8eb917fadf71c406653790ea106cd0d7d9e62a04a6f6061e75e7a8ed3cc63aa86be53d87cc9302cdf1f37f2655db5957c6b7d40c713adb05d88baf8c188ec24e9bda422741accaeb4f8e3b6c91c690c2ffdb05a1d14e2caf7fa50bb45b88ebaaf2aacf7469de6fb7e5722de4f4277d97bc6482daefea1faf0df28cec680f00569fa") (:stream-nonce-mode-test #h"00000010000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"24f4e317b675336e68a8e2a3a04ca967ab96512acba2f832015e9be03f08830fcf32e93d14ffbd2c901e982831ed806221d7dc8c32bbc8e056f21bf9bddc8020c9906aa0442cb586673471d1de18a12abed6f8f36856680e1bf10b4f2c38d18beaf1432c971fce9666b0a5baaafa10428d5b4e51f5209e3ec50c7ffaad4ca3586695260338dcab") (:stream-nonce-mode-test #h"00000008000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"adea7b3b2fcffc1ea139a2e71446e4d0469418ca2f592b2ee293369fedb9cf2e90e06f2615f39d3b06261b9ebfef4334aecb3b31d7ded653d15fe56897c0770ce06235022f9278653b03836e8feaf71e492359cae27ab08633237ea4da2460bb5b835cac67b2bdb8205228a49a45e526403ad3802844f74627980950e34f8acf7cb43f27827a62") (:stream-nonce-mode-test #h"00000000800000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0a602a8170373f59a58cc0fec473861bbaed944522128fbf51c7451e2ca4706531bb71d1c05388071a5682fd652854f15488afc88f3abd625ea1b532590b9bf1ffe7d804cc957e56dcd63195ab53c9eecaae917eb661cf54322d7f19720b7670a8aeb71e4847f46cb73547fb9369b6c2fbda1605134cc1ac632be6c6443227f2d8b308d83da987") (:stream-nonce-mode-test #h"00000000010000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a02227917cfb23954d264862cabc97279a56cedd5623e02ce8387cf92c6cb2d7da0c0c246cdac7fc90a1a0c63f69e764272034f45967cc05ae5a3db66a569e5d9bcb5072b7114b73c4b722d4ec5cacbcc0f8b2ec88cddaceac2e186d410203b2e205c71435b4fe3c462fe481e7c5c45f855fe8265ad27abf5b09da906ee795b25a8ccb2fd0233f") (:stream-nonce-mode-test #h"00000000004000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4dcbd3857d88bf9c29043331d77dc79b9aca77be1ff320ad2ba99990e5a2e3bd1ec14b06e13962138b1b1423ad1ba658e7c22404765358b7cf1574fbdc94bf30294de643703aa06e36f3c23bc349b58ca0e9d9cb1c7119a57d01c3cc03eaaeaf3ed78c47402cbeb6eed7d8200a5956148f8275d815bac3f9b9b65956886ccf2c6970a98d01bb93") (:stream-nonce-mode-test #h"00000000000200000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a0c0c1d4dc2fca5d9ca0bd41f3ee1fda714d202518f4d9b5bff074120de1c09a152d34dceef89ab06cb8199d441cf2464ed0698f561dd751b185acbd66084fd35d4315412a22a8097242aaaba25421e040808a031c302bbd4ff55ce0291dcc007bb2bce75885bede29d3e8fe74457387c69bdd261565aebc304780f39f9991d4692afa207e27eb") (:stream-nonce-mode-test #h"00000000000020000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b0fccf2a49f44ff1a2b64f0512f0ea5ff56b0a506f57f03383e73f1c8ec0f31d0a04655d9024df31f4d285c18d52d13ac89244510ef999f61d12f1cd0638a8a7863b5405a4b00f594ac17f41bd0ead4125316d2133fc147cd35ddcf241816796cb803a25ca359b257caec297bbd2ee1ce57c6aa0cd79ad5325595c0229c500798efc151f926fc6") (:stream-nonce-mode-test #h"00000000000004000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"82312d198486a1d21ff344766c237c1fac64f00024995c63e3d69e357c70d58ad5e17dcc47cff898ad202d26bc2511a189d8cc90524e3ac6467b36a9123cdc9daf67d85b5e5619c50792981c90d142596b53efb8937ab4954b8ea972c2782e4d620a1397e55f2580441979dd78e00bc2e6aba24529af665ef79b7873b7c61259a0fc2354070c75") (:stream-nonce-mode-test #h"00000000000000100000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e534eebf62c68db133e504befa51a9bfcf3f010e08c2f9609a76bfc7edf69cc460386c6a84269a5638ec488044344d952a5c796465247d8db17ba0a68ac1dca466c2b13375699e8f1e5b0cd8c81ee7aa4d2c5c961a7bbf5df6ec34eb3e8fc24ce318dfcfe3619fd57d0782b28c54d5233c78c51df82863dcc0c13bda1619ee3762494e4a23c933") (:stream-nonce-mode-test #h"00000000000000080000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"184c66766652751716eb7d4f9abe1b91c3a58c2d96a922b4fa998ebf0055f01a3253abd3996ba6effc0c51cb225367fdf31bafccdfb18adfaac849971e2ea078dddca277e638db49ee8e56dab09e2a51711ea0315b7b3d99236209a50dcc552876ae8f38f16d17ce2208a784414c6e16b785bdfc1dd503e875d64288bc1b68b797f6db3171aa76") (:stream-nonce-mode-test #h"00000000000000008000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d801ccce9e76001f02bf02174974d17e80de7f367852bb99f2a947fdf708e2ab568c735c71c8a2de476949366e7100c8ac845b63941406f152257764dd4efddc92addee8ec8c884f5e06db4ce02b5bb01ac4cbd4a5e194170f442ded502ac73ab0fd233942231140056ae31694904d784230fd888457cd46351e513cb7f61187e71413817b3d33") (:stream-nonce-mode-test #h"00000000000000000100000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bae1c89dc775071419ba935f640a058a236fbe68ac2050a04016b5409a6af9d8ce72e128c245dc887af568ac452aac268ad7833188e956d82f9bb0ed0517aa3e75edb8ca1fcfdf5d4647c133a982adc89a11d9d14e7df3f1954d3cf1187496c9d38d381581824ad20c09104b2d9b7cdc896ba353543d5f7753a8b3fea7e8e7b67c6fa8b820a714") (:stream-nonce-mode-test #h"00000000000000000040000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e3cf8804b2724e0bac95c761afc33427d4027a1778ad7bb7cd4a050b059b6b8a391cb8c980fcebb458c707f5d00aa67c2737cb1a93d519170eec2d5408ca66a1316a8cfed15a724c620e7c8e53b1285b178e925ba6e144a85750cf7b9a47547c25a436bd328f0f0ff5a9c2ec35df1438801dd641e7506cc955ca10b769c6a46ea95443643ea035") (:stream-nonce-mode-test #h"00000000000000000002000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"22d0930c31520d4a4bc8a4051eb0c8106bbded1487d33f4d67120f2f62d921674e5ef0bedae9dd0f1095ed56478af2526a8ea6451f9daed566445ee991fa0ec1cf65b20a45b9e4b37639228c45dc05c894a62ad77224af6183fb52b10a77ecf964a81994e423843eca08fd9f695a093cfbe4673a49d3a4b0f448cae34f6384a7927823ae62509b") (:stream-nonce-mode-test #h"00000000000000000000200000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e69f6249d4ca0d07234cbaaae3f558285b4d2e8cc411acdbbbbad822350345794f3894c07279f044df14974e229c4533b1ecb1f26e0f15d8f3a9fefe5ac664e07ede7449127ff020afe9cd80463705e0f53c3aef3b173498a5e26f90da0c34296f795e7bcf4e410bbe6a9506bbb8c178fe9b897b703fae37c42073928a96eef8fc4a474ff07d51") (:stream-nonce-mode-test #h"00000000000000000000040000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"89e7ec87585409d4c293d05e812f97e82c5e382c06a46945c735f489e940779b4a3cf2bd9ad2e3f0880f70059347a558b692f172bf684d322be25c694efcf0174ef071b65ca441f0af9d97350596a1c53e62330d587bbcea938cad160ea3be5ad1117b07823e2c9658455d9d0bfbee7668d0434fcb2831579e1b7df4e5ef37f173cd0d62a7201b") (:stream-nonce-mode-test #h"00000000000000000000001000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"188f63ff53c9c33fd38b40c6c01b4c0dbacf5e129ea6c06849a3f130d9a9b7563b9cfb5a29a165eefab7134426be28bd51579b2cd3c9e3fdf41fe52fd33d3d2c4e2a30785453c44bfac4da7d125b740710a25b7fe3f64cc9a1d1d31130cb0289467c0a1d870928d2325ea5f13c1c00945a21412f7f1608272c77796b1397cf2eb68b82e31c1d94") (:stream-nonce-mode-test #h"00000000000000000000000800000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"daeece4a147f2785c3bca8ba3b51de9667854dcf32688e7ebe09ca0725d0eb2a7a8ba742284718bc2d4f6e35348caf5a246347306d9b7945f0657ff0f8fa5c74d5189b74668b14792d55aaea54b4dc5a9b4fb9b3418736eb5acf4a0a6b6ca16e11f5dcf4bc50b29a83eb6aca05988de7ad2cb9654db2e5deae9f81ec6462bafcfadbb1daac09bc") (:stream-nonce-mode-test #h"00000000000000000000000080000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"01b78cff7225c0515172f720f25e826b3d35402ab188b3db675f2adbf779f79ab6362a193d446d2c02017add29aa77ea3888ec54556f4c3dcd249aa643493df8138e492aae89546716650a0073fbca8bbd7d41d164390db1e574a5d3c741a99fbe93c7e72b028c2951d0c4e517bf43113c3e64b036008d5cd9ebecdbbd9b355823db16b55eb9de") (:stream-nonce-mode-test #h"00000000000000000000000001000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"24dc2eb1f5f1bcc7ba86f7ff6f1112becceae518d1263f436e0e7fa6398e4953b60547e234a67bcde9bfdc640224ef9bff404f4593e08226980d08911e6e16d56e2d3dd1fd4e4abd9fc9fee2df4fb393b808520e77860f999a557957b5b0020653260c6da3841ec34ff134d732c768676fb4f27ba397b373ca3f7b669832e219b162beb3fbe159") (:stream-nonce-mode-test #h"00000000000000000000000000400000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"22691aad3b5b09a0656bf0f646ee6c3b7185d2b3504bcfeb3e37c7491753096bc4a0859d5b380a961158c378818597cd9ece5cf79a54d2b2f182b62848c93a4466cdb2335143861e589a61426a8675c2641a33e953eab55fe4f632f7e9f593fa7cdda2545884a6b023b835e8e486b7e4757e5b1ec4d40eb1f2f5025a3ea4181ed325689e976fc9") (:stream-nonce-mode-test #h"00000000000000000000000000020000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2c04a6c6820e31119eadade4aee1ec30265ab1c9df86ecc617f0509965114a0fb3dd560ca27ca82a5059977b3ea98c829aff8368ee68c1af4ec084a0e260f42478013cd8b0241e4223f6302538b0e305c298c243a44eb2795c82da9f706cf5a3a20ebc5af729bce278d2446eed809f13374f51a7f66be87f8e78d82ef15e74651687e2b9e2327f") (:stream-nonce-mode-test #h"00000000000000000000000000002000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"95d9a81eacbdb203db606ecc8307056c10ce243d5666e02984a9d0ba3a6cfbe56f9671c7a85c377b8a481830326428bc26316639c48594bac207e6c001a20ba560c2e71c464418f362570271c2f838ca1af15f5291beeaa283bc0213b17f3fb57e2973e872ce80ebc9626c1d0b7f547f05e487c18b43be7d8ba4c0ef1af16346f96234bef6c553") (:stream-nonce-mode-test #h"00000000000000000000000000000400" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"44a74d35e73a7e7c37b009ae712783ac86ace0c02cb175656af79023d91c909ed2cb2f5c94bf8593ddc5e054d7eb726e0e867572af954f88e05a4dafd00ccf0a9580cd60cbbd34a12713ad263e3ab30fb9aa538342206dd075714df75c9386d38bf91910d6077838054d8938064ee383623db80bedd7aea0cb9e606e3afa7f47e1d028facebe6a") (:stream-nonce-mode-test #h"00000000000000000000000000000010" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d87bdd6cbb53e84c36ce13f1680ae66fd365ebf65161fb807dbf47359fe0d9ca4ee24a9712461fede45fb1a85347c47fdac2d4ff3fd6cac9879524a93514d8c6da06f48eb107c31d772d00c08e848c8fa89b0642af73581d9379d5fbe367a4c99726fa6f70dacff113b215e2df5fbf7660d82d0b237341bfe0d7fc95fb1756678bcf7832db3c21") (:stream-nonce-mode-test #h"00000000000000000000000000000008" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"10a77d86da3250cc9029f7a9cbd875fd7b98e49d3b44b30704db499377b2c81ec1b630a01c99732a8886cabfc53f7932798c39fdd88dc91f3227fb82254d93931fbfd6e52f6658f78f388eab44cd6789d79ff5ff5858715376d02b621c6c5960a7cef206369aec97d64d928dbd24f2ee9d485fb270dac86e268ed03401806b81b12fc63490a406") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9a97f65b9b4c721b960a672145fca8d4e32e67f9111ea979ce9c4826806aeee63de9c0da2bd7f91ebcb2639bf989c6251b29bf38d39a9bdce7c55f4b2ac12a39abea8a17646d1a7782f4f2ae5e9f2bdeac1241460ba80bd5beefbf8794988834c4d94bb6c9134d512664c90dd0ecbb218d5a24fffb69ceb42f5efab584be6e100ba7d194437521") (:stream-nonce-mode-test #h"8000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e3be8fdd8beca2e3ea8ef9475b29a6e7003951e1097a5c38d23b7a5fad9f6844b22c97559e2723c7cbbd3fe4fc8d9a0744652a83e72a9c461876af4d7ef1a1178da2b74eef1b6283e7e20166abcae538e9716e4669e2816b6b20c5c356802001cc1403a9a117d12a2669f456366d6ebb0f1246f1265150f793cdb4b253e348ae203d89bc025e80") (:stream-nonce-mode-test #h"0100000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4758634c7f6f698426d7af6de18a969ed64814e95cf324f0b3916f017e5621ae2f9b6f3916847c98be755e3542889e94a61c2a557d1e79b406a3a02bc4d7de8f95775a9eb4ec4e1072eae0eb3d90aca1468ca5dc012a812a84b5bc8a71a4518bc7f99f11d0d122a01fd9e6950d33e3efea409ff19970e157a79b1e43e0ebb04ffa5126b117ff94") (:stream-nonce-mode-test #h"0040000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"01f191c3a1f2cc6ebed78095a05e062e1228154af6bae80a0e1a61df2ae15fbcc37286440f66780761413f23b0c2c9e4678c628c5e7fb48c6ec1d82d47117d9f27907e707ac826ea2718940e7d6cffff75b55ff21436119f9a69f6b9e54116601df58a012a06725ef5325a30975d8d8746a50c7e44ac468795593935264a154b633bf0883fd528") (:stream-nonce-mode-test #h"0002000000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"cfbb693b22156b797ff75fb8c39a3bf86282ac141596ba3bde028b37a26b0c147f75682dad0b6c96182095ed8f760244df956aa5b944ec87339181deac923e5fb65c371dd0da2d3933991a216de774d22c88336118835f24cb28a602217c6d68077353bbf74acc6674f237d2597530aa24bdf99438b487b3aeaa0800922ffbb1b0db07b11e8727") (:stream-nonce-mode-test #h"0000200000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c29ba0da9ebebfacdebbdd1d16e5f5987e1cb12e9083d437eaaaa4ba0cdc909e53d052ac387d86acda8d956ba9e6f6543065f6912a7df710b4b57f27809bafe39d5b1687fc2ee3a851cc58e4340d4ef7127b9c42871a5b04f5f11167658fdc2be485f30a4e21a2a8639ea2f2621523c9c9e542cf5dd6f442cb3e04b4f9d3c37a673d7c2a4209a2") (:stream-nonce-mode-test #h"0000040000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8e65365b2aed59da1f30c8d39ca1a4711f7406c35077e8a0e7e26d721646436c5f88faa36c12556d815213a9e17f9e1d6f13815cee5132c82affa7aef1b4ae541bce90352cb6e8b49a515ba28e185bd3ab51d95454ce2a603c494c7201f299663b614f22d93c5a349caada5ea43287cf4d968cacf64e7f63d53f85f7c406e6354affe4d9e48839") (:stream-nonce-mode-test #h"0000001000000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ff852567eb72687dc56c122d61b2fb2a4fb9e8e8da62313b618d10f8e0da521b176e879cd78e641043f0fa4a22211566429b7c68ec645ff5e44b2505d61a2d7167a831cfc21335b3a8d7ffd30a68e2ac392d7353464c9a09ced54481426cb3e4282ae83e47a36ad6d18488667b37fb3945fe25172dd2d5d6b7366edd2b7a2b2cc11ce6317946fc") (:stream-nonce-mode-test #h"0000000800000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1a19b2f70ff50bbf3e1db010a64106788e36cdf2dacb0e3cb3d046f18d3d6d0ef27e5fc1bdfb7849f0e75e59addcfa17d629a565d58d5875bd0a3f6c617d446c56f29be80b5b04eb51ff3f36613bb56ce05fd3d7a0c98f409698608033a57cd4962251f82e89fe64c0e9a9e711bcf158f4bdbf62a9d1abbbdee6ae6d50224049a1f7b77dea8473") (:stream-nonce-mode-test #h"0000000080000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"03cabb8f5c632706fcd1afecebcebc5f222b33427477c18d5682f2df2ca5a059ce3593f669be764fdd94d025af2f6a7c8916c06a1728424ae8e1d664234efe1c2e3ba628ca43c963da8e750b8d8b7620521d3c33a37a44eae300915425f1aa503d0b18948c078dc6736c81273c7a76c2554137513472b2bc222f51774315f4964312f81f13aee8") (:stream-nonce-mode-test #h"0000000001000000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"5fb37d0c435c5f6a932b9c368a396fd109241a11575056c317e9632fa7beb39f040cba097f0c5bb3119a781523b980cbbbb0a1c78f085e0f34a6ad6259f1955b324f2ae5e052e6f5d637e73f46cc2a949d38e37ab8e0952e326fc496bddb4f1c122bd2e21363a64884a2c7da194998318ed4492eb78411859a9c2efc1f3d259fa47275ce07d32b") (:stream-nonce-mode-test #h"0000000000400000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"eebcc82bd97ce194bb556064acf2aac063fd956db43dff6bdd01928447fe89b85d660de091883c84d0df0f3d48e63675bab2850172bb018496c40ab186795eb7a8e63672d7f3876af535d2475eb09b0407e8d0c26686781fbe8366e06b077602ed2efd38094217e4534c4dd72cdba1776f6b056460b2035f21e4ab5344c10eabb747e26574d2ad") (:stream-nonce-mode-test #h"0000000000020000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0947ec9d1780f97dbe98e1e4c6030c8d882a117d95d0bb5a7845bf0fa17d1912db0786a6ff807fe5d15efa53e73d68e10df8979c0023dd00256cdb01bc36c81bf18948919f36c3cb72a5ddffd323699179a92d4c2563cf3145bcd7d45d8fc08caca9ce7e0a8bbb10d2a81fd8b0f7448a4f07d4286d1c0a638deb4a667fcccf21ff9dd457a6e1a9") (:stream-nonce-mode-test #h"0000000000002000000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"7229f9da8030c037a68cf8bf4c26711d7a462a05a4dcbdb1df9007c9fccaa102f939e30fb25b451e25e42e0aface25f0b29dedf564c7122eb0694586ad38024f0869abd87350055c60ce2ad7a861191ef9336bf4617754ed784f15eb87fb2b1914a8776a4101ac6e3863eef07630e3b00ccab704afee6d95fad7ebb4861128c479e9cd47a0a875") (:stream-nonce-mode-test #h"0000000000000400000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"231ce097ec25c62f6f88f3aeac2161d623f49bda15deee488999fe6e03fe90831630186daefabce08b5f99dea9b410f15bd922d40bc35c844208f77655cb36e7c2be87f5eb85fe9c5a9bd89e6ce5d7621ac4ac866d85946665b894db59a1a6f238e6c9365ff52ce51b6121ff0efacc8c49bf48e9dc54dc06b32fde8eb8c68fb11bfd2fa0cbbe6d") (:stream-nonce-mode-test #h"0000000000000010000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"63a69de8bf56a6ab1b87d5cc06b9e9e10735f8fd3ddf294bcdd8be822bed1788699c63a960260af7cddd8d765236751e7d309f44bd41605047835b62102547c533c45fc78612561e743f8a613817815c28772fda25a8cdc7d20812963a0fded2c7267839a4859e3219bb2181cbf528c90a761bb9e61f85a7847dc2eb6c8515c9f112336f50fa54") (:stream-nonce-mode-test #h"0000000000000008000000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4e297b1d7d88b6fc06fb8a4edfb6cdc3c454c77089f44b4633e91e94e7d78fb0bf8b82ba22421d83c2461996af38ecfcc5b91f0a4c4ebe8147da668cc422af1bbf6acee60765e1481bfe31ec649adabb992ed7e3f78ff404a813429cbf97a5d9746abda2a3475e6edab911b1baa07ee620f68ea286a0f2585f7f311485966838b6edb70a7c5b55") (:stream-nonce-mode-test #h"0000000000000000800000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a2073e7395e244aca2c1ffb7fd5b028edb5fb14ab9aae440baa32a7e86f80f85a9b92252e06d58368baf9afbbce889bbbfad6da50e0c6a42b5b04172ae5ae6ad3bc69bc8c8492956cb3d6a24991576a2fa23936ee6de4742004eac7241d4fd1f8571473620edaa8c75d68dbd7785c3e1f30e6cc56972f1b022ddbafa219e2aed18f3904349de4a") (:stream-nonce-mode-test #h"0000000000000000010000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"28aab59ded8c589fb915488126e4e02eb74f395b42f06be7c8ae55ffb2539c2969562450891bee78c7cb534162321abdb300aaa8c2d9ceffedcf474df8ff6f5f233e81fb0f686a2171bd792448733e327ef6e74a69ace59ac28dd0edd2f8cda4714eae60d52a8237f9bdba0bcb1d1d7c214104aad3b33ef9d9841f44fb02b528ca2521ce999871") (:stream-nonce-mode-test #h"0000000000000000004000000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"045ba0cc50a54ee8f15a397b8b5fe0beda6e72bbe75f783137bbfb638e607cb73a08a7543c4187736e284383fa4709634d29c707ae2e95d7de178714fe00dc2bdca62c92899ddd5d718ae8d46af9427cdf0e83c4951d95c8ab1946162dfa0cc7b49a39fab429ea47903edb44914b927fa01eb38ff92e2a318b32d105087470523664bc25249aea") (:stream-nonce-mode-test #h"0000000000000000000200000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"110316c65c7ec67cd64f3eb3cb9ff90f70ca61a7caca27caa97e6f5a729075bbd7ca3e2d718d5d6e6785af6d834c6009130a41403cfc3afa0e06d9ad04b962fa5ce950698352c6d4d51f00a68feea38eee6c0500cc1e93db5e44e46ed8f0e145784342d4b8534552e13f16e33b8f999d1af8423aa74e51efc4161a27b8a696c890c13900765c96") (:stream-nonce-mode-test #h"0000000000000000000020000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"dce9544b7f0cfcde2a7938b53508d2532287e19b64b129248865efc03d6b822d1a29e8705bfae01672a03dcad2f1d1b691d88381871753d838294dd150b626c47800c5ca9177f8bfbcd5de4e5c708389fc02657dd90ca781646de2f358a6f22535136d02da620cbce03a85adccab6c987008c83ee9a8862ff2c42442b984d0f8bfeac64233a952") (:stream-nonce-mode-test #h"0000000000000000000004000000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b7d7771a42c21f1f72b8d9d0c06f5ae6fe5eba82f69e0dda651541f14aeea547b55826c28f21ba63c5a00cefbff2459cd58ab7f6f0f6adc50be3661397185e9215516c746991b8c87b7c63b2712bd1a3baa82355f84a6553f43c68100bbc1be1a6efed88e89079070359deabb7bb41a4fe4e4c3230813b206b0c041db8405225979e86d55ae73b") (:stream-nonce-mode-test #h"0000000000000000000000100000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c520a61c7b14ce02cc1ed0f5474280f1cc7e7b113960aae7ff48225f76b3cfe4cdfb92f9ee512a52bb7b9d34cf08921ab5e671167f8bd8466942c54af190cc3f5f94b27311f575b7046260efba1ce4844f101ecc6128609d5d3be58774eafb1948a1e8284ad44ff52c7ed2a2b465c970dd615ed67bbc36b5e40d49ff4f84a73a71ce7a87b177a7") (:stream-nonce-mode-test #h"0000000000000000000000080000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9f21b2e5a06876df47ab0a010deb60831be735353ee6fbd7b81c9b8523046cc800b349fbdde8aea4e716f6868c6a0ef1ae2335ee9ad81e7e63d70b38421142f3f5aa621c03127b009d2274439117a305b2288fa7e8c7e0a893fce60b91541ba1d780cd00a030b555a8055b67ddfdfc5f24eb796d0e0218c868d9a610381f9de46fdb8c833b2703") (:stream-nonce-mode-test #h"0000000000000000000000008000000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"05f90c7cfd4d79e5029daf2736a7cd293a6379e8836c0b6d85154e090345801931cb88c0d6a89add50f0b7d6e71fa316f02eee833ae5ba650f54628a8fda3d6f7f57e96b3aece4e02159f4b1bcb72f29fc062158326ec02fe605aca4609593ececfe1707f3eb5ba2668510a3b65a4e753352f0e53b06eb667f8247824ab8d473214759b325bc08") (:stream-nonce-mode-test #h"0000000000000000000000000100000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d2653e3b01964f08fa5d2bb82a841fdc3f1b531e9394c91e4947a311b76529eeba9d3574883f5a86301ea0f055f2ebf5793299a267726e1717f33cb8314f6b44e17c540ec3f6bfcdbbe000685f1c723c4f93a8a78804d2e6b4b292499a129e46315182092d0826a28a219f3fa61ff7d5a4e9fd20ced13d79a33a18ae3731b3e35dd2bc0d7635d9") (:stream-nonce-mode-test #h"0000000000000000000000000040000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"48fa1ca3848ab72cc254665823d4f0eaeac794010c05ad6149f4c7b25c09f4bbccffc1ef9b7c23421f728fe61ffa1e5b978b4581a73a81cd51203714a4319e4d5493f11497dcec8b4f409082ac64e2e276dcaaf327361518d409cbea92f69524b41d493947fe9f0c4cb8672a12f852cdcc6c214f5ca5d69c319bcccca59211dd27026eca3b9ab5") (:stream-nonce-mode-test #h"0000000000000000000000000002000000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3d025a4d1f4fa041165eb1e21aeb3a20e35c96e815978138e57bc20712ea18e7d5a0feb24f472e581ea7ac6fd31a0a5a1ed4323603f57eb1bc50754bf46227dd7e0aba194ab3108936217ce78427e91fae519311bccf27fa11e97223484f21f5f06f76ecc3870671ca4da6815cef6cec5aa4464dc249afe5475fd21403bbd115261c2feeed3d65") (:stream-nonce-mode-test #h"0000000000000000000000000000200000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"18dd36ae9cc764ab8e0ca3121b8351fa62ffca6228bc20400c92d31e10b663959bd1b075e8fbbbf02d2940b6ce2eaefa9e1875ade7b2ac9d90bf6bec2760d4129b5db0f98ff72304bf1ec9a0272643bebfc6201d0169fd0924bcf8cc14b54b16c54d05fec41e1925689dbca47dca52056e065535982ac9f45fd3410f3cbab1892ea969663026a8") (:stream-nonce-mode-test #h"0000000000000000000000000000040000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a374c1f86586b0d5a121e1f734ee70cc7072284b322bf61f88336ebe84b53219f4d1fee2c5eecc4a421ba8aea9d108e721a7a82dd979f2559bb0e45cc88c8780e69e73ed75d055d12646c1a2a04d5c1b01e5c5f4fa67c5a27f6735ab8aa989df6100adf9e7ccc89d50757019d3ed840b5b307299dedb41e39f8fd47282d5ceb99d940ee28cb69a") (:stream-nonce-mode-test #h"0000000000000000000000000000001000000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"721dfde792cafb9d6951eac5ee3c8d2a5b8fa88fcc4eec75aa3859dca0700fddc1c4bd1c2ace9770b652a2f69295d14161ffaf2461f808f5a36896c97533341d1ee2986819609e5d4be6de519f6f654dee7e4307d8a670360086b1de6dbd4e675234b1614fc6635dd9d0fae0cd0d0e408f0d47b451b49cf4879b7e88b7b67c58901950dfb3b6a0") (:stream-nonce-mode-test #h"0000000000000000000000000000000800000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bce0e4eaffc5938f48acd80a9422912cfd6809cca6b261ad51a785334b91e33113a529063861404d4812883e90438576f78d6c3b94f316bd9e28bad74df57a1843c0b2929775fb58d76ff995681b394ad0147bb9ccf1973e000ddce68b8bb53c8a8808319b9c0b85d5db5da4d4fb201aa08bf1c2dd7a3c0242d5cc45aede0689ab3288deabfa90") (:stream-nonce-mode-test #h"0000000000000000000000000000000080000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"317d791ffc3244d546d67610c5ed433513edd736097c4ae8632d86db9ed12c72c8ee40b11ca832c144035d56a52f1379d796f552e9a1de775e64268e5558f042d27787d412c3c06c137a33fac1b525775247b14f502d09c0d6bb34088f1d96a3e1fb713f8e484579767c31231e922fb737be05c43600c81a8374b9a06a60dbb088c4ef03b62b82") (:stream-nonce-mode-test #h"0000000000000000000000000000000001000000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b18cfba23f81884fbfea037648b1715cefaef1d8cd5c98957353e82b838fe332672b3d7c2905979698f6f6d98eaae8f98da16ef393cb150228fe6438440c57592fd7d21e0fdd37af01026fdc08ad1ade0d29ca157f2cbc958759169ef79076c893e4294a86a165e001a4e1172acff52f50f86c5cb5c9a6fd053a61ccf93fdbce01ec361d9971c5") (:stream-nonce-mode-test #h"0000000000000000000000000000000000400000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3da3ff98ebb6054d93052181b58a377a66fee8ffb6510253f817e7088f54d6f7f59d5a2d42c5495cf20be539bc55247a3118858876ae15718bda3378361f9ae34b6d378df343650b4cc3355a0355e50dd9b5d3fa36df9507a913218182199467f9500bd2bc52f6c2acf25aacd62015354bebea3d2db74c0e056b7258eda9fb237f7ce671d70366") (:stream-nonce-mode-test #h"0000000000000000000000000000000000020000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1931dee53a4bb873ca7bff1b10d55249541e087c3f9b5028dda83d273665aecceaf37bfaff6c49c839ee18da721a536956e05d61f4c977647f2391c571268b5de36fe9716d45a019a24d8de42038d8745999d6804a6a8527604396929930a203a2205d6ee010e36fc454ed176cf7fb95916dafda87a853aff41ef5fae792f89d0660397290e8d5") (:stream-nonce-mode-test #h"0000000000000000000000000000000000002000000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ee7f56813e8f606501a50b845ec5d2ec72590785656c2a56101846cc1e60741c2efcd51611172f1fb80b1d02f836b93817f631bb3d3e5198db83fb008b228cee57a065fd2ffc1b29d658d20f80df740fb665cf024f318582b08ac4398f49ac67d182d40b1d52f9597a87d5c7a1bddff161bad7383e80a0aa570b1864b6f62867188090cfebeec0") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000400000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8fb79eda0cbb10644a1703f0876ecec7453049569e6877f2271b6df27b39193b7b85e55325cecd66102fa16c8fb17eb28842b7c2f4f3cf480f11b3d4e0595b4ed37253a2560249b9e496a46387833f397f85ad9d2b60d5300996cad520fa7202a22ac53e48433b14918740a2a207ad0dbb111f81eb15d8a27ce124ee4cf03034a7c3d5b67f49e1") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000010000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f9975f708a8ee2a671093806629a6afbf1bde5b282f05d7ada9ace82cc16724a3b6c067d51ff9a40f5ff6fa4cced81341fe552f51d54e3290b6a85aba1622d6dd5f84556cfd8ac6ced9d7b4735ed8e4b2456ee57935c5d10cf04d68011a143c0ca9db7133f0dacb81d12455887ea363b39b5b24c79b7ca8cf0ea70bb1dfbf81812b1f4c79c7bda") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000008000000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9367fda2a9531fe50e7411b885ca223e5157a6890dd72803bc1b64dca450c5ebb9876e8d92dd50dcc087eb57d9e05549e5b46bcd8f0d75edc6af1d32db89481a3d6ffda15a757f88cc0eeca026961463628acab3ad447605ba5009c90aa096f2156bd831bb642e2fdb4e08abb93dd398c5ae42db72e7862137978d70e1aa4277353391d389268c") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000800000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"dd24388d80b80d3bf6a8027a56ee0d613c7af75796e3639213317752fd0572923beccd2046a4f5c86a6535380c08128c90ebf12e7a2c8a7de6b044602cac31698b09eee510c838ed15e154ac1ac4a6dd446678a9a10e9ec3d36579d8cb4ec7e7cd8aa3abda2902150a3fc1b03639c8cda76d1246a7e6002f1798723d57df2df662c06f32337594") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000010000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2591af4d4b7e4d6227959b7d146ba286b617a69169a62534e45ec197b010b36c50ed53357ae2100bcc5a1b99742059f9b54a22fc82a1e72df282b8b85e41b6829530acbf31da663087ec12cfc29bef7f6021ecb4c5e5eb7bdd998f75b277085c7264ac262e44d97ae85e7ea9d770581ab35b577a73f0147c311e7040b4a528217ff983398922bf") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000004000000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b0a39bfcb11c10beecd1adcc09c568bddda221d74b09c0da290428850c46d6116e86bbd5dc577cd87bf78637a470d266ce67dabdb18b182f88f82d7527b36120b7cc6ea5b23a44e9efe663ab9dbc11c63818192d59ca5eb0fa26f1ec11805bf471d2e7d9b41934fb3a5ff2ccbfa4bc2752c845ef7a905ed099f28fdd25257ab411d3357d4f7168") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000200000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"78dee08e6c1c517f6e7efd36f84c8b0484ba5c972af3b8ea54cbd405ba6f4ddd09c15966df67246b4ec0ffa082080634ac78c925b11b3caab877332d251e4244211b829384ed079ecb712a0c15dadcaa8def5763dc7f9780049eccc5fa6f297d07deb9d6f2ee9d9a0b88f318f2c6946024a2c002bb2c2b41d07e13039395fe4512772b083697a2") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000020000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"20ac7b62c412eb92c3d412667cd1d593c4fafe9b5bb31e2c4996b1be01acd41f923c691018752311295c970fcb0823603504b7471551c69fdea361d1501ce0cd43ba508cbc18d1b8cb29c0862119051a2ec3947e205e9792c0d09e707079c293831b1596462f9389354773dee3c5c87c762bc857ecab9b105ca32595e222e5763014fb31bb973c") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000004000000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"858839ef2e43cb1924da19f8c6e933a474b2b44ba0711bd592ab2d16b0dba220e560ae3ebe699d3f8fb8ea8def9926741f72f58a6d5a723b27fc134763c2742fb114d8e296b7e92e1d7490ed3f07a24d94c19dd757d99e7939505c6cebcf0dd6b981155bbed2a90c3180f6c4cbc6a92bc9b04fa94d8611cbf6e42c2c4cebc6e134bcfe04cdec10") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000100000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"577d157d8c2901b6e68ce4335f4e113fa2acd5a8a01aaff49beece94317457b12fdb517fceef0d440c6911cfc2df4de05f7a7a2d8d2a2788b8bbf963d6677936cf4c75fe17e4792aaae11877c581735f1a544e1d775d69c4091f11be406033bbc04b95923ab4dc58dacbeb7c30d59eb2dc466f1b66466486004a91f454ad0de24b652344f61d6e") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000080000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"18f49ca069a34134ed3aa06f24b6856854c20b407d274ec817c4ca35722fc765e532fc1202f2371bbfc397a4de90e291361d0ee3bcbd5140aa08e65c521d8f23b908b8bf53473861adeab3e26c834871ec1cf0ddfd4a53b6795d3bc6dd51f9e2860b38a04f57adfef923c0eabb9e4b4ba0c68bcdaf9dad29c24857354cc308fb6c7d2aac7b8d4c") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000008000000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"91a6930a7d6395f780d8ba2cec570615ee9ba9b3804dd692c3985c1292e62ba939a30fda2ac876d169ee1565be2a74b08900c5dd434802ceb055ff9d0cfbfc2ead150da8e841f076e359e21807f50ed1d074a870d3a7012382806c53e37aa7a14ee852f700770d3371bcebac2826e624cf0eb04207467837d96d7b2ed78b3bdf90ee7007f7cc9c") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000100000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"68d63a2ed9f7996915b3e1693bc82a19962d125b150065e55caa711582556c7a08e3bd0639ee609627816fd5ed2b29702fb0321912660d475edf48b648793423ef40536415c36a82777aa7604884082e7ddbc54c1fba717940a2b5232611160857511a94659204a6a0b68de29c19ab70b614c8b4bb7bb8198bdc70f0840c1f8fef37a98d27b186") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000040000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"546ca200717e23724b9d8057de79115de9ce292bc8fe96feb309a9ba3a84f2381550681c225638b7859ddb3b6dc74bcb8f5bc65c297cd7c508529640085c87b8f8b0a6e2acdaca8a2fc4004a8848c19e5b382723960e2202f53105c802d5bea1f37af610f288fc30acf8069c44235a3501744a8cb0228434a29fc7d9f948caa217a3ae7083549e") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000002000000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f290a9592d12c8ff2c5e6a5b697844846e10591ff1bb3dfd6e33a389168ef1070e205d01e2f16aebc5b2acbca353e78cf8851a50558dd296ebf7d92c5f8957e4608020d5f6582c28b5ec968b377bee9c31daee7c7f7eccf4e473bfa982230e850be4c28cb57290f517bae7afe8e1b42619e12a65ed62f785c5502c8729fbcb5503ba90bb7b91fd") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000200000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"df6457bd040def99301b0b2d45a20674b9fbffc3ec22c867de1ec685a470072dab2bec461e73384a4756f22ed113a31dc6c3e823f032accc209e98c058f95fce75225a34fbcb8131c3768cee68c0cc45ca0696d63fbdfe7f69a084487fb2febd872d0507f929d22c155b12f69d4c2b9a4e8ecd9f49de5e8d889288a32e0ffd936d200dcd5a31fc") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000040000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"066ddc44a21a9585ae3b882c4835bc6a9876bf8c9f0027e4f776bed9a6d03cf46b43c9b30c7203c0a028803c50e7925f69825060ff0fcbc71b2762c27c026e6ee8a33bdd532572a4cf2cc29f031d527d9e04f5adb6dc2870a4f742499cbdbf374a54a8d2323ab44bff8fa33889be8b365fe52ec9b55291194a324b3a85d3ebc20f70786dc575ce") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000001000000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1b79759543ac0af68a72f469659b15c14f8dfa3dea8ec58a6d22c720e339b7c9c18a9110ae89ee0e9f882653ce1b71d64382aeb651dcaabee9a64e2f1a87f5a07c16dee436085b663dd4411c2d2af710cd7f77e3aca5bcfde36b22447760786ca0346fb509563c99290276694c0ac766d232004789a28f1b6d3cf50b3ad3ac07a9bb17e175be74") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000800000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9712d090441f8accd55cce9277b1ec8e963c9b77e2e1b8850f33db844a6730d134acba7f227f076166d7adf4502b8c92c410fbaeac5d7fd9f182ac6073107c1d7bc32e3c8dbd0e54f2aa6d29f0093d36faa040927ed2d863c2a47abecb9797def0ff8cf3813c7c00effb9c8f695651cf6cb327f2fcfa2fe3d37d7862d1b9260ceb88ea4e5fc99a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000080000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"23fb3608e11360461db4b755abb550bbe86285bcef33bd3b90a83f1f1b5b55050b922218851e475045c012361f68d2fe2ec4f2a63d9dbbc2f0ce48d7194e58135dda359e74dbfc367b98f8b75ceba4f78ebf3785b10ed66f9750ce5dd1a6d483a08ab4db27970340fd3620ae8e36a90baa5a2f63aa9eb57959112dbba5d5dc1d6d12913807f578") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000001000000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"899f5de6ae015cfef1ed6f7e56cf92032d6deec61e911048ef670b36ce4d2c0b2b27529202acd1fbf4885898a75e57d4b3305c37068ff55abe3ed6375f7da7251b0266075f5d62ced18dc4f91fd1cacad24831f3ec2a5bf11753d9afd66790a6a30417aa59256f3c80c543425c540c9a7b265aa7f6ad5aaf71360d0f7ca8d5f7f971e43ea5771a") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000400000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ee14a77396bc82248519af9b0cb3aa77f99fe37083b2c01a60632317313875a2cfb72c6e862f8898858d1bc40c228e6b81d16b30e885b3bcdeaacfcc781558bf697f4d4e1dc9203d6f8dd2078f54d810ae80df9005630bdac47adce66d50dde46508cf7bb394910e3e4da8cd8abf3a5059d284b4757e597c7764757ef966056512e02244f37a94") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000020000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8bb3d52970b9cbe559359da16e0a160e5e408246f6e84c11cd48970f932c4d6ee7b6131ee42331fd67abc9aad40936607ccbb2ff90aeae63efa7a3970a29d6ad3330f593ad81326ad2ab250745a82ed7ac831190730daa53c493791e63ae0b54924b2c37e6d4e7b3aa13d45839c018d12ff7098f182d09d092565a80e2a39820867bea92036cff") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000002000" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3b96da6d09dab960107cca06b6455a0d057eb54193c51c71b3c57493633d8a28c0d9db96772fef6aabe33bd88e59836aff29115950a3f55c8cc0d31a4c0729c98a7af425a854471fd87f0560ce7bfab117b0b493c997b88f625350f4f8e5400ee892b1529a7a4d27619d9f9537bca14524500f1bae771347820212fa4118a5bf43b797be47db9e") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000400" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c0784e70beccb536e93029b3d719eff45821fbfed10ecbba219c9ac374806c984128f10e6340d20e181938d96fd08e04574ca727a15dc545a1b39a4b4306271f713c18d08db173ab5035e311a6eacba501f5aea71973a655fb6e25542aa0074fedf0945fa358aacfaedde7586ad7ebf64757ae58223d45e890c6e238477de48ef26042b29431ac") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000010" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c70190dadb38119bb2845ffa1afc300cb64be0ae662e3541dd199b29470fa238f8c7ebd469b2bb7792fd8ca9966bffc5a001715d7c43eed385eb2a1e466595b2a0b9d46cbc65ac0c58ca17d8c7c8eb5de6c0e097c727f38b47537cac7c1b20aae53fd16c22693fd0982b46ba0be462d591895887898ce7b8f35ef50edf622fab80fbe341515ccf") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000008" #h"0000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e48c2f264bf9e8374b78fb652baff1e33ecb4b1c635d76a64ecfc4bde00ee5c877e1094d6480ca382815cccd5cc3677046e801c29a860eb032420dcaeebc36f431295417b5869382a50b9b18f003025d8cf7e3f7416689e8e603c7f455e5c70bb706af71642cd1ebb682118539c79f15dd67fe6b1b454018b8c9ac972810e1276f20d1ae10fb37") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"8000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b66c1e4446dd9557e578e223b0b768017b23b267bb0234ae4626bf443f219776436fb19fd0e8866fcd0de9a9538f4a09ca9ac0732e30bcf98e4f13e4b9e201d9a7d9208c0a870e7b67af0204a7c885048c32147e4099198ac05347d9dbf53ee1dcac7311863cb4e316f8b5f29380a92c5aa8b2131851d14d69d7ee4abf9c4f56d7da4f9f5470fd") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0100000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"4888247e70e038617bee66c3e0e29d5866229ed482dcae97194625e7cd5c3f3dec143d5a0c7b454d3a009a16ea7a7e6570fb47c0e2c85a2dc0938ff793cc1ce1f38e38a9c60dcaa3a2464bff44d9a85e498e26e673c1e8116f9bd56c215e2622c1ae427708c9b39a24615ac968b7b45ae394d6d570fd9d74d62a0701f1a4230d2762b094c63045") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0040000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1a643637b9a9d868f66237163e2c7d976cedc2ed0e18c98916614c6c0d435b448105b355ae1937a3f718733ce15262316fa3243a27c9e93d29745c1b4de6c17bf882c528c0e85ea5d1868f557565c543e18cb9080300bc98b407254ae64236d14fd7c75c83f485f694b2b4a9fcaa0f4b093d2d548626d33252ef1b3ce6fcfa25f27c3b7da053e5") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0002000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c77e800c6e0a0915eea59b3a220e1bfd5cea221af7530c146d6923cc06e43adf4f1db23281cad37ca4b8cbb48a87d60a22be974d4944b8b0cdc06bece3667cd65209debd70bc3b85ed88ec38191700d340a14219a1d64f29aca9d48ef84e5062933f71026037aa8abf92c231d44039047e00cf306c6c4396cf9945c54ea329f9e1cc2479218f6a") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000200000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"94b7b07e184bc24a0904290b2601fc3ac70bead7b1fc3294360ed4ef168134530b4d1f3f28a3c3b248b2e914a8dcbd5326a240c9bb361a8a93d023725bdcd4e3eb52497c325250937436a33ac56aad83f7d47f204bc4eed8dc102168eea3a36154077a2652b4da0b39b186488a134b3901e45c65970e9f9fc6e48d7e0409867dadba297cc16a85") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000040000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d8f8cf2d54c73980c6525696ca1461a72488d5344a5dc88e7b7b4e9be340eb90865d7836104e6423886d84eae17dcb00a05c4265216964715b0e565d3116e6bad4a4bd17ce6e106eb37b9bf340ce109a7baf50e832a583f2bf3497ec21f265ebc8b83228aae17bd9df304099fbcead6882e8252127596db178daca31be8d0fed47ec0b330063ba") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000001000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2e6c8be7dd335292ee9152641b0e4efb43d27434e4be70eac4cafae5c38b2e5b06e70b9966f4edd9b4c4589e18e61f05b78e7849b6496f33e2fca3fc8360824c42684e67de3571ef2bc5755949eb42b133331014f7d1383ec32ed54400ba8a34c664036064e364ffcaacfabe5666e33e44624964493549a70a35659642652c6c9bf171a2fa8733") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000800000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"61e82d85af20e65dc82518fc37eb30b3bd7ce293d5dd367dcc2e078d3ceff4ab1a2582ad89016e56028cdebcc42e9f7e99eb6d29d7954b04b60e1f9511375ff8a52fffae879937bafbb583d02e211f6b6064408078cde7896512ada6593238e366b37f4b3b3ef448cfada7d805a5cec2322cb3572aaa5bf7f75520594c934bd61961e129f66cef") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000080000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"e7b91d58c4e691b918376c1eac982aa2630aa06d7671900057e75319dc7bad22aaba883d74df344b5e68357d8552afa7fd054605579ba92ef1317e03e4fe77e35829c714ddc3fd93317debe5169fede1ff8873828a8e6cd00157d781e7803dfaaba914c77dd782a0e3959a14352c885ea854a0b058b2a90846c3fb37e82084243c70de2d5e2cab") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000001000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b197e91bae534cc168abe570495216211924653326e712e39ff11107d70ad362c97cd7b1aa64ba07345737a56419561e877049f1cc51733a26a0293a09df3115b97c2abaf7bf9330834ee1758286ef1efcdf2d4e41d5ac2c3e842521adf74c24f4b0d1ddcc7e3b4005bad172bd057362bd70c4c1458407434f378b55308ae30f56706efd5614e7") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000400000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c479970ea6535cf907890e328d955f508ea530fe1d1406ccc67eec8793bab5010d5f1038227967f15dddc1afc210ae2811fde28e995b039914202a828254770bcddff17e129ec2f1925d66b1df2cb71b72f6b792eb6a4a6facc906c6b7d2605a53fb3bcba6183bbad1513c4a8869fc7dcf0fc3d20dc1aff75a575261f68069bd2674ac909c3579") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000020000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3f4b4ecfcee736695e166f55d056ee8208a56d973b97ce8a43756a7c0583e924bc80ab16e96ebc705aa22d7747e38de14c02e89e27e41a106a87ddfe63252de98246ce785e83b479ab212c2573c45145b03069a0480806737ed912430209de205d21fe99f5b1bf8b7203af4c90a5f3e2a1885a45a4b3080a59967a306b6730cb413dfee86836eb") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000002000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3b93e4db6075df2315c36fd40b34ebbcbda3f50dc3322705c5da6a9e90cf99def990202814fa48ad0c72febba546d0874bdc4e87a7418417ec2eea48147b6664fd1331f6b0ca488ca0f4e172de72568a607344b42ceca00fcae4b213d1daeef1e2feaaaf7d89104a5febbb77315e3bffb7e4f27645019f5f37d5b1b00d5600908505f8b1f68d58") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000400" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c0f37deca63bcc066a6ce18c5f100e1f4f5ab560bccaaca2df1f5a295bd4783f7372a5dbcdaec3cbada6451565da9636d25b1b59783158a7d11ea7c3260ce73dfe182f79994b2aa42a72582fab13559a2e3262dc1fb4f2becc4fc2eb67bfa612bc88dcc8d21fb6963c78963b27943cfeea802209dd257f415760723b9c80413d90801b1fda9686") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000010" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8a3a7019ce1e45b028f50718852133e272351eca59caa9d5d6856550281a9b170ace298ddfd89fc19959e60a883bb20bead49ff15acec0542491c7746b8ae520e9d65cf491c1a7dce512766cae92e425ef0f715e4a39a6801062914060f04512e9d60daacac41f2a57380a1f095e301d6a06c5487e24945c1d6da44a3e8f463e69e92b282db82c") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"0000000000000008" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"a4d22a65e376e91f8e078b3b03891120bf63f93df6b305214cd746271d2d6d724d18c0c6cff75428e048ee1d7fe484d8237f9910d9dff0be39d3ab7a05c8298de0cc945578f9ba4b67497e0f55a0f30b5abe4f4d81da023337a728bda2f762633dcecf1562bdd43d37501753647d67c36dc57319de959a96374bb52cec1663da85b1ce37fba841") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"8000000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2aba3dc45b4947007b14c851cd694456b303ad59a465662803006705673d6c3e29f1d3510dfc0405463c03414e0e07e359f1f1816c68b2434a19d3eee0464873a67d139ca0645f425e3b1f82d6eb994a60c803f5d69bbd73a64557f767e592a35df54e8446cd3d7f37da921e0af8d11ab855c2afb07a1db87e3858d9b4303b1ff57a341b62aa8f") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0100000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"c8a37b5d0a5cc2b51e8b4c510f5ca0838c8419bc2734ab88c2654290bcb154173531f314af57f3be3b5006da371ece272afa1b5dbdd1100a1007cd7cf67be39c181fb1433c10d6c710a6a103c7582747eff153a10b1b57746f75d9af33bfb54cf9561662ff7c25be7505f2c5161037997f93d8db251f39c1bca99a900cc64e808a23cceb78cbb5") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0040000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f28343bcf4c946fc95dcaaed9da10b277e573fc8ebc8cee246fddc533d29c2ea05451ed9a821c4161ee0afa32ec0fca0dad124b702da9248b3d2aa64489c9d26f0b0b13e2728db4218195cf404f23ea0f42f9ce083c8937e91cce6d3f3cfc787fac1012ce7a8e07dad4c8c510a373fe16b693875e43041261f5dab747af20626401e6245099a44") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0002000000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"df539c50f729ffded1620c385c08be9577b2f8447035e725a2356d75d35a749f07c7b1101d4a2ebd0ae9d3cee05019e2cef1f8ae30fd050e4d7ba5be928e39ac0e41dae9248d0d82867d8f7c565244a0a81fe7a12f8b98b1b87ccb1d1245d406c5eb62960e0daeb8afe48314cc6a243783021b56678e8f4eb22e2c4db91731e213a3a213c9bddb") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000200000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"621f3014e0adc8022868c3d9070bc49e48bc6b504aff11cb17957f0ebfb7612f7fcb67c60a2fbd7a4bd7c312e8f50af3ca7520821d73db47189dad557c436ddc1c67bf399d735eb4649597d33d48f0f675b29b1d52e4d8aaf85a17e917cba49879082cb4e7bf01d12826b5ce4b992b153ef5461ea9887a96a884b3f279be7165e236c2afd50d22") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000040000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"37696cf82c6ae5f6f7c7229ce3a7e2b782e93ce3a6f625468e2ff2c2abb899a3d0b0ca34ef2d279d6590a3ecf381710acd2779993ee6bf00603b8622643080b3d56f6edaa89cd65c0931d146d1bf3876cc08951315d4e6c6d0b42640633bf7cd0a5764e742c687547b7be85d616148c4c19785a9c4c97699a9b64406ada18ee1337bd895883c3e") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000001000000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"d2db1a5cf1c1acdbe81a7a4340ef53435e7f4b1a50523f8d283dcf851d696e60f2de7456181b8410d462ba6050f061f21c787fc12434af58bf2c59ca9077f3b05b4adf89ce2c2ffc67f0e345e8b3b375a09571a1293994ca452fbdcb10b6be9f8ef9b2010a5a0ab76b9d708e4bd62fcd2e404875e9e221450bc9b6b566bc9a595a7f6a0ad90ac5") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000800000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"88308806e37cee12745bf2b2660d2a602ea7c719253ef76b937fd6b921ab5083fd74043310582a48c536acc11caa8e98e48d8d1a1062615fbfb5e95951be57251ad6e1e958edcf7235c38dc686346abd186c00fe8d3d7185d362c2b7569127db51dcbdccf9f5098a60afd2bfbe9b7caf31ff90cf4fbe94aa5498aaa5c0b4f1b5ad7238e2872fb0") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000080000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"11493cf7e037bd62977304317057912fb88ce29f416cd218e92d8ac9e22067464daf8f10f4f3fc1d869f4962b67accace7204c0cf39d82400577e733923c59e94cfa5cd2809345cede091d0d271ba72f3d12b9f9121580d21e10efaf4b5f968296ac738972face766a823c627420e417c17614b37bd7ab235a9e5870b32dd49bc4d79b396d47d6") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000001000000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b55d0fb3907cd0aa7cd297d8a87023c9e6cdf4b17e081c5df26fef23c537fd9d1eb72d5e0e06e82a9441cf24eddc5151f5755ff430084207a35c89a48bbe9f5e1f88872690fd05edfda6eff590d247e5793c1f649f007b2692d5295f1accbb7409eff43ff79159adacfa3deaab872c0445e3fb26946a8e6955236a59b6d83892032c7fa4668a91") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000400000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"f0e381d61de6eac34d3b83774381b2c3e2355916978bc32fbf3c18d16164516d88beb4f40b5ec55d371f5a4373ffe088b941e3ab5c6fcaa17f4ef89c7103dde9936be9b1291e04188b60afc76361e9d94bfdffe3738233d76ccca7abf134bd1aff4504ece88717ca51bbb5de1c4fb3a7bf68cf86cf7faed839b40cc102cce69838fdf12fd0d855") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000020000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"eeb4004d405f15162759f9448d51c32f7afb13a0e08216a60b31b98ff335710a9099f9edc1ba283a58dfd47204c3e35e604e8a4fb69e53d6e8d49881174eacdfa8e717bc3314858213c278dcd2862d020c0ea1087cdc7b199fb176d73730d1eaf1263b6119d55c21e5d42173929a30dd31b8994c3ce5fdb7042b6fa1129f4727f3bff9ae325a3d") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000002000" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"98313a9a6ada90a82bcd4ac37dd75a64755d214d7dcedfe59efad73b2bf0c9c0beb1ff8ce03a5d2e8a64b411fc24ad9cefa2b8c7c5cda4ca6e425e350d53d1913d72071aac827fa49dc21fae13d0b7ef0bc6e6c5a7623c6e5643ccb3a42f304c1ebc2e3ae13b5fec469424eefe8aa6f7e11c63c1d22036242fc05a2558bc5bfbb88fcc8adef398") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000400" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"3b6c7a3611e15f78cdc5fccf2e235af2aa351087f033321d4dca262ee14bcebeb00d7e7d0c70ed474fd366a602a14bcb2f7c402c09f3a922badd3e2ee59f3e500547927fd436858b61e0f147b05f126283d388fc70fcad61d56c555228c916daf628ee9a0e101f8da889af286a6fb89015d7d07caa17b3a330129f9d51ef31b098d2e5ac07cb5c") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000010" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9e2e4d806bd940849441b1a78d56d2a70d618f2f74ff10b4d3a6dd3627050d74ae046998151694c4cf0e250016e7de916a4a2d7ce1107a752f2eb8d9cbb3cd8fb94fe7b9890c908de7351ba1f3a0339757b7d4c00572797d870aa770e6c01964f43ba3b0adfe8b9aaca11a3c23a52d727bd86c49261cde64ed9623c55ac94ba726d79e9d444064") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"0000000000000008" #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9a183a89c07dd5caa46d63c7b39f0c4fb0772c0b6d3d609cb468f49ba48200d5c0c0f12e8ffdef51de17a6d3ffe6715614bfc66519f3fa9a68ad58071dcf8acf76bd4d43799b2801316a59f7c961eb29c36bc8f7f70161c8f8cf3f3481a345f9dc7a1377e9ae16f12bdaf6ae13ec1d4f1acee48e7ca918e00304998f3869b8399d78f3f3184634") (:keystream-test #h"b189c87eec2e12951ef822f7d9aada6b8bd02049e6951fcd52548c96778e08ec" #h"1f95833e2c41acc4" #h"cd04866c4ebcbb8650e4993ab08970fed4d25dc57f5af3b0ee586163c95f60cca650ecc4bd5ab1225e3393027d2457c98e4bac08bb700e147207814c2a85fda9b69387093cd408002342917f8253db887c4a93bd00e410199e9249aea36f390d731bfb26f12f5322216432f27edfdd3ec6b79d41be9b68e2135f2a60a4378a497cb136483feddc9c3a76a1ce4777b1e22e4157209864c67781e56e92320be201c1cad150a7a3c9bb8eeeef8ba74422af8f80c0fbba085825132ae1217cf74c69b3c1055de36bf903a58f6fea6f5cafdf81b9e99e715a00b55c99c79d31598783045c071afa800502b5708458d9fafddded29ff311d115de546d22d2cb69db75225e85e0870bad855b9ba1f26f876be093554897bf1a1e1a80ce4d0fdcfae60dd26eee5543d4452dd412622c179ad053249ca42d28f28c271df826b29b176aab02e3e009addaeae2eaa78cea3f1e2593dfa12d46ad06c208d22b026e02b02f9386b4854ec75ee390a70bf99202951f0715b2fadbe92d9fa1fd8f9226b5dc388bf65921fded2c0814966bc524542c72a52067098214fb1a475c98a28eaaa614ebf21f2c0b7db370658a482769ac31703440452abfd93388fc043025c6fa12f673464e58d004311b19540626f7ff7672bf8fa6e48e40e0e30eeb60d74ee0d8534680486c28aae7c1801fef943edd70dd462c9077a9a66c7985df7229d96a9177131cee6ff9b3fee34e880aacbf23554395eba9d0024078cad3b1d817ab8b7be631c93b4a6b4cce2fea974c7216ccd9253c7b0ceb808b39924fd56d20e4e56f261c08bec257dd2ec1b682ab2cc145b4a61c9a12a28f900874cac0c951af4f478de1af6ff088d5578b3bd936ecc9d0cc1b3b8dd512eeb8841112ae2fa5ae7048426687ca25a2d1933bb37006072918354f6f62e3585dccb35ae378bfda18a659d8b1508b191c948d0449fe585366cd8bf0f2f1adb1bf8565d2a8b027f9e84fe7992b00439eab20e049236d3f0a7271512930b0b2db8a9d037b6e91e04caf8bef923150264abb179a04460002cdef87e4c499d7fe59f3ccb88524ac8ae123a42abe70516d46a84bc17a99afc866174f205572d380a861b5b4c782688a309098dcfeae63997b3608706390c0e1953b681eeb9dcab1a4fd111f697949b7edb8ad45eee113a763da975abcd37285d713666c1e78bf042e23927c99bc4b69ba22136d6ccc063b5d5c39b80c16a964c585980f04161617019dd61522bb9254fa2df281c38da9890717692ac40756d9c7fba199bd5b0c2d467bee309082f824863a682068d147a1f17b2caa57cfc24abcd781042253644a635ba878c362011fb501c540b2fe3d4f6686f607d11394f4794267e1d2e4ee65e973325428e3a782a3d6a5100b4dbc68bac83169f5c1e") ironclad-0.57/testing/test-vectors/scrypt.lisp000066400000000000000000000045221420372057600216050ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto-tests) ;;; Test vectors based on calling crypto_scrypt library function in ;;; the original scrypt utility. (defvar *scrypt1-password* (coerce #(112 97 115 115 119 111 114 100) '(vector (unsigned-byte 8)))) (defvar *scrypt1-salt* (coerce #(115 97 108 116) '(vector (unsigned-byte 8)))) (defvar *scrypt1-key* (coerce #(116 87 49 175 68 132 243 35 150 137 105 237 162 137 174 238 0 91 89 3 172 86 30 100 165 172 161 33 121 123 247 115) '(vector (unsigned-byte 8)))) ;; The parameters for this test can easily cause an attempt to allocate ;; a vector of length greater than ARRAY-DIMENSION-LIMIT. Try to avoid ;; such a scenario. This is not exhaustive; if other implementations ;; run into problems, we can try expanding this conditional and/or ;; adjusting the scrypt implementation. #+x86-64 (rtest:deftest scryptkdf1 (run-kdf-test (crypto:make-kdf 'crypto:scrypt-kdf :n 16384 :r 8 :p 1) *scrypt1-password* *scrypt1-salt* 1000 (length *scrypt1-key*) *scrypt1-key*) t) (defvar *scrypt2-password* (coerce #(112 97 115 115 119 111 114 100) '(vector (unsigned-byte 8)))) (defvar *scrypt2-salt* (coerce #(115 97 108 116) '(vector (unsigned-byte 8)))) (defvar *scrypt2-key* (coerce #(243 198 84 124 73 207 248 197 175 189 52 186 30 224 136 138 229 99 59 58 111 136 95 54 139 227 241 159 14 126 231 215) '(vector (unsigned-byte 8)))) ;; Avoid issues around ARRAY-DIMENSION-LIMIT. #+x86-64 (rtest:deftest scryptkdf2 (run-kdf-test (crypto:make-kdf 'crypto:scrypt-kdf :n 16384 :r 8 :p 2) *scrypt2-password* *scrypt2-salt* 1000 (length *scrypt2-key*) *scrypt2-key*) t) (defvar *scrypt3-password* (coerce #(112 97 115 115 119 111 114 100) '(vector (unsigned-byte 8)))) (defvar *scrypt3-salt* (coerce #(115 97 108 116) '(vector (unsigned-byte 8)))) (defvar *scrypt3-key* (coerce #(136 189 94 219 82 209 221 0 24 135 114 173 54 23 18 144 34 78 116 130 149 37 177 141 115 35 165 127 145 150 60 55) '(vector (unsigned-byte 8)))) (rtest:deftest scryptkdf3 (run-kdf-test (crypto:make-kdf 'crypto:scrypt-kdf :n 16 :r 100 :p 100) *scrypt3-password* *scrypt3-salt* 1000 (length *scrypt3-key*) *scrypt3-key*) t) ironclad-0.57/testing/test-vectors/secp256k1-dh.testvec000066400000000000000000000020601420372057600227760ustar00rootroot00000000000000;;;; secp256k1 test vectors (:secp256k1-dh-test #h"0000000000000000000000000000000000000000000000000000000000000002" #h"04c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee51ae168fea63dc339a3c58419466ceaeef7f632653266d0e1236431a950cfe52a" #h"0000000000000000000000000000000000000000000000000000000000000003" #h"04f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672" #h"04fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556ae12777aacfbb620f3be96017f45c560de80f0f6518fe4a03c870c36b075f297") ;; Same test vector with compressed points (:secp256k1-dh-test #h"0000000000000000000000000000000000000000000000000000000000000002" #h"02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5" #h"0000000000000000000000000000000000000000000000000000000000000003" #h"02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9" #h"04fff97bd5755eeea420453a14355235d382f6472f8568a18b2f057a1460297556ae12777aacfbb620f3be96017f45c560de80f0f6518fe4a03c870c36b075f297") ironclad-0.57/testing/test-vectors/secp256k1-sig.testvec000066400000000000000000000020071420372057600231660ustar00rootroot00000000000000;;;; secp256k1 test vectors (:secp256k1-signature-test #h"d30519bcae8d180dbfcc94fe0b8383dc310185b0be97b4365083ebceccd75759" #h"043af1e1efa4d1e1ad5cb9e3967e98e901dafcd37c44cf0bfb6c216997f5ee51dfe4acac3e6f139e0c7db2bd736824f51392bda176965a1c59eb9c3c5ff9e85d7a" #h"3f891fda3704f0368dab65fa81ebe616f4aa2a0854995da4dc0b59d2cadbd64f" #xdc87789c4c1a09c97ff4de72c0d0351f261f10a2b9009c80aee70ddec77201a0 #h"a5c7b7756d34d8aaf6aa68f0b71644f0bef90d8bfd126ce951b6060498345089bc9644f1625af13841e589fd00653ae8c763309184ea0de481e8f06709e5d1cb") (:secp256k1-signature-test #h"ebb2c082fd7727890a28ac82f6bdf97bad8de9f5d7c9028692de1a255cad3e0f" #h"04779dd197a5df977ed2cf6cb31d82d43328b790dc6b3b7d4437a427bd5847dfcde94b724a555b6d017bb7607c3e3281daf5b1699d6ef4124975c9237b917d426f" #h"4b688df40bcedbe641ddb16ff0a1842d9c67ea1c3bf63f3e0471baa664531d1a" #x49a0d7b786ec9cde0d0721d72804befd06571c974b191efb42ecf322ba9ddd9a #h"241097efbf8b63bf145c8961dbdf10c310efbb3b2676bbc0f8b08505c9e2f795021006b7838609339e8b415a7f9acb1b661828131aef1ecbc7955dfb01f3ca0e") ironclad-0.57/testing/test-vectors/secp256r1-dh.testvec000066400000000000000000000021171420372057600230100ustar00rootroot00000000000000;;;; secp256r1 test vectors ;;; Test vector from RFC 5903 (:secp256r1-dh-test #h"c88f01f510d9ac3f70a292daa2316de544e9aab8afe84049c62a9c57862d1433" #h"04dad0b65394221cf9b051e1feca5787d098dfe637fc90b9ef945d0c37725811805271a0461cdb8252d61f1c456fa3e59ab1f45b33accf5f58389e0577b8990bb3" #h"c6ef9c5d78ae012a011164acb397ce2088685d8f06bf9be0b283ab46476bee53" #h"04d12dfb5289c8d4f81208b70270398c342296970a0bccb74c736fc7554494bf6356fbf3ca366cc23e8157854c13c58d6aac23f046ada30f8353e74f33039872ab" #h"04d6840f6b42f6edafd13116e0e12565202fef8e9ece7dce03812464d04b9442de522bde0af0d8585b8def9c183b5ae38f50235206a8674ecb5d98edb20eb153a2") ;; Same test vector with compressed points (:secp256r1-dh-test #h"c88f01f510d9ac3f70a292daa2316de544e9aab8afe84049c62a9c57862d1433" #h"03dad0b65394221cf9b051e1feca5787d098dfe637fc90b9ef945d0c3772581180" #h"c6ef9c5d78ae012a011164acb397ce2088685d8f06bf9be0b283ab46476bee53" #h"03d12dfb5289c8d4f81208b70270398c342296970a0bccb74c736fc7554494bf63" #h"04d6840f6b42f6edafd13116e0e12565202fef8e9ece7dce03812464d04b9442de522bde0af0d8585b8def9c183b5ae38f50235206a8674ecb5d98edb20eb153a2") ironclad-0.57/testing/test-vectors/secp256r1-sig.testvec000066400000000000000000000622341420372057600232050ustar00rootroot00000000000000;;;; secp256r1 test vectors ;;; Test vectors from NIST CAPV (:secp256r1-signature-test #h"be34baa8d040a3b991f9075b56ba292f755b90e4b6dc10dad36715c33cfdac25" #h"04fa2737fb93488d19caef11ae7faf6b7f4bcd67b286e3fc54e8a65c2b74aeccb0d4ccd6dae698208aa8c3a6f39e45510d03be09b2f124bfc067856c324f9b4d09" #h"a3f91ae21ba6b3039864472f184144c6af62cd0e" #x18731ef637fe84872cf89a879567946a50f327f3af3aaeb6074a86f117e332b0 #h"2b826f5d44e2d0b6de531ad96b51e8f0c56fdfead3c236892e4d84eacfc3b75ca2248b62c03db35a7cd63e8a120a3521a89d3d2f61ff99035a2148ae32e3a248") (:secp256r1-signature-test #h"1fe33950c5f461124ae992c2bdfdf1c73b1615f571bd567e60d19aa1f48cdf42" #h"047c110c66dcfda807f6e69e45ddb3c74f69a1484d203e8dc5ada8e9a9dd7cb3c70df448986e51bde5d1576f99901f9c2c6a806a47fd907643a72b835597efc8c6" #h"98de785daacf01567362273f54b1a1044259a9e9" #xce45eac259171cf25ddbd621195515111c7b933de3d415f2a269648fa8b803d1 #h"e4337061373d22d10f8b96888ebba55036096a4d39ba1566127ed894a914bf9177792301bfaadc72334312a3fcaaea3bc2af5ec3065a526d04d467d07dce9851") (:secp256r1-signature-test #h"65dee450c43c222ca453b46375e63169b389b208e9c091974f258af09b8ab000" #h"048b91da916dc268e5b7018f578fa3cefb03721a6427a918a3b754390adac76ecf6d5da492a8aea36df8418c941e0339e52d15595ad5ca52e93896697b9dc87870" #h"88cd3a7be8bcd49982c44ff4e04c0d033ab82e81" #x43f990dd44e86744d6e5d3107100e98a34289afd80777a18b92a40ec49b93d28 #h"e6aff59f9185dcb84ab2cf481388c31c5101d678370bc34e2c3adb63a7d3b8997aa151701e8479bd787171f6c0c0b070a50d03447f27745bc3a28ac3b82820da") (:secp256r1-signature-test #h"e93ec1b3a4c69ebe0843b731625bbc020336593fb86ded4782cdfa447e49ebb3" #h"04739253334af6ddf935e4a07ac9a115eb2b978c93a687d438f221c54474697dbaa1eeba7ab8985bc5e43a8ff886c32018b431723c2b84d8c30d284f546d675c44" #h"d856d257f6161c3236357b174560bcf21a00bdfb" #xc2650705469748344ad9e08e290cab107581ffb17402e57514d362a5b0890235 #h"e53cad8cf4deb3ab44b603a185f4eecd50bb19cbc3bc1e394382775ad5857aee6663df18f6c50100983c2d1b2b0b4574ff83dd5b87a7747789402a1a6ac5cb2f") (:secp256r1-signature-test #h"1cfc39b35ef4afb8e0182f6aa5da8cef0925dd829d1e43f18caabacf3e5466fa" #h"04db02762c3ffb91fdf9ef87d4488acaf5aa0c7e898004b5621ef0d3b20e7fec54d0ff019ace9b7c058f20f01355f82ad886f83aeb87770e54135572a2818fcc31" #h"dcf2a8d0b1b68f8eb1f45986b531a38c40cdc439" #xf35c0742dff5d901326a42ca50ac50b7c32794c7d85f48a7450da772b967b8ba #h"e4f877e86b6da25cfdadcd1967b98954c7c4545178769c78269975ba54734ccca8676a0bdf9fbe47f16a92bbaf75821906c74f68ffca2fdf602d7f48b4ef9e6a") (:secp256r1-signature-test #h"533e7ec63dddc22071a5614409a68b3f99355de629abf2fb9dea696dd6bab1b2" #h"04ca641448dc12b7fc154d9bb129affaab4f03ed5d28cc8ef47d318404b427e9c5668c5930638802ca8dbc468f2b69176036da375ca16308130a683cf610e3f260" #h"99616a1cdbf320f0a1496f4067911198155f4bc6" #x21ab69b8ff8eee106d6698cddaa58052bc23564cf8ac28570f4164470f3f9739 #h"63eda6e6a7888fc4bd54242227b60520dbec520b5538e14eec2ea5ef1ce1c298f6fabd495f7191d2df06a24d53748c32e014b0e456b4406769500399ed93f881") (:secp256r1-signature-test #h"9134c53bdf5a0fb7bd1d0afab6edeb0ad7270c5efc083f3256f0cb251fca3a7d" #h"04760abf17b9abdebfb8a7807d8a96e69b68caa9e5c883be8fa8a3c6140c22e217817a35e830b254508ae9d04cc9ef58f06254e6711174e3f9fcde6560b8c3a75e" #h"951c8c14a29ad1e56b0bcf9825bf657e81d8bf33" #xd2cfd5d47c6a3b125557d86509618859027703197bea96a483af6de4f0fbd0b2 #h"23131427fa930631f1dad2c8f2c96222245a0f14b2704fc87986adeaa4a25dd4769745372812d2a2b7d59bafa1d1276fd63c1ccfc06cbf44f3e93015191f690e") (:secp256r1-signature-test #h"2c678b91bc8c8f2610439bd586b69c0549847c32ef41b2d31bab4d90362cb76a" #h"04392470b95de6502a2ee121d4798fec9fca025d7f49b7f5134c2c8faba1879887ec293c22cea46db8fd6a90ab3d3b1e763f6f1de09e79408725007ac4edee31d3" #h"f67c4e3e9408ece73f8d3a9084dfb8b13ff714dd" #x285493df1f126a153d9cd79eef19e31eab3d2ece9a8898b463175680e7372d8f #h"a12aad3339e291c0103974af9e77713bba63413e85f05aa3230a9c2487348f698dfaf41f619807b085453a14df195d686d3d80c97602a0770da853de155da630") (:secp256r1-signature-test #h"1545750a9cf39b189e0fed21118c95aae771de4664552a2b36ba2cdafa072496" #h"0491c50e3505cb18127a1cfab0a543df407e3189f300c03145c801f6fb3c06be561c80d1585e045dc028c543aaff97f9dcbdc14701e6113ab2d983c703587592d3" #h"39ae872a437a1b0a8884eeef0ce2e5ed97530cc5" #xd74686019626b6733960263474938404c855928a0e2b3251a1fbf6e63df00c4b #h"ebf0cb5e43e28aa9c209ecd1b9f95528e5820305b85c73558cc4ebb43e4cb20ff75770a7cb17ff659dd241ddde8dc2a79cc6a8d89203c67cd5b8243c40877d2c") (:secp256r1-signature-test #h"b24cbf1f527b4f178fccab71f5397cfac08448b9466a94ea61dfa1fcd117bafc" #h"044140dbefc6a025aa38d89fcbf493d9c9cf935285cbf6e6d46439b8b4b2b212d339a3c27cc0ca04eb822da9bbb543d1550a00bb61b8ad6d928d03282b0a315c25" #h"9f39d18b504903b101042310a4f0d6aae0d33944" #x7a4f0c2190ae1e04dc3ef9bab93a3683e9f2fddec48d93f3ca8775fc4d8943f1 #h"7a896ba95a27aac2f10046f07538dbfa023b7fe6164dde5fc8d4bc7e981ad2917698349f95ddab79c9de2ff97acff63da555cd7025ebdd0a3fe8ac37bed4c77e") (:secp256r1-signature-test #h"708309a7449e156b0db70e5b52e606c7e094ed676ce8953bf6c14757c826f590" #h"0429578c7ab6ce0d11493c95d5ea05d299d536801ca9cbd50e9924e43b733b83ab08c8049879c6278b2273348474158515accaa38344106ef96803c5a05adc4800" #h"5e53611194b517b0ef4f704684850dfa387f99997d586d43c9e41530" #x58f741771620bdc428e91a32d86d230873e9140336fcfb1e122892ee1d501bdc #h"4a19274429e40522234b8785dc25fc524f179dcc95ff09b3c9770fc71f54ca0d58982b79a65b7320f5b92d13bdaecdd1259e760f0f718ba933fd098f6f75d4b7") (:secp256r1-signature-test #h"90c5386100b137a75b0bb495002b28697a451add2f1f22cb65f735e8aaeace98" #h"044a92396ff7930b1da9a873a479a28a9896af6cc3d39345b949b726dc3cd978b5475abb18eaed948879b9c1453e3ef2755dd90f77519ec7b6a30297aad08e4931" #h"50be7b4f0e1fa36f06eb430ad4afe8f0cea2b97e060230f91ed1922b" #x36f853b5c54b1ec61588c9c6137eb56e7a708f09c57513093e4ecf6d739900e5 #h"38b29558511061cfabdc8e5bb65ac2976d1aa2ba9a5deab8074097b2172bb9ad0de2cde610502b6e03c0b23602eafbcd3faf886c81d111d156b7aa550f5bcd51") (:secp256r1-signature-test #h"a3a43cece9c1abeff81099fb344d01f7d8df66447b95a667ee368f924bccf870" #h"045775174deb0248112e069cb86f1546ac7a78bc2127d0cb953bad46384dd6be5ba27020952971cc0b0c3abd06e9ca3e141a4943f560564eba31e5288928bc7ce7" #h"f51177ab6c34bf80ea72d687a670e4102987d1378bd9a4d973af4dad" #xa0d9a7a245bd9b9aa86cecb89341c9de2e4f9b5d095a8150826c7ba7fb3e7df7 #h"b02a440add66a9ff9c3c0e9acf1be678f6bd48a10cbdec2ad6d186ffe05f3f2aa98bea42aec56a1fcecec00a1cc69b01fcbcf5de7ac1b2f2dcc09b6db064f92b") (:secp256r1-signature-test #h"7bbc8ff13f6f921f21e949b224c16b7176c5984d312b671cf6c2e4841135fc7f" #h"04f888e913ec6f3cd8b31eb89e4f8aaa8887d30ae5348ed7118696949d5b8cc7c108895d09620500d244e5035e262dea3f2867cd8967b226324d5c05220d8b410c" #h"03bf686dab49196f887f3a8083f1a39e26085127a9d9e6a78f22f652" #x21c942f3b487accbf7fadc1c4b7a6c7567ce876c195022459fa1ebf6d04ffbaa #h"2e6cc883b8acc904ee9691ef4a9f1f5a9e5fbfde847cda3be833f949fb9c71822ac48f7a930912131a8b4e3ab495307817c465d638c2a9ea5ae9e2808806e20a") (:secp256r1-signature-test #h"daf5ec7a4eebc20d9485796c355b4a65ad254fe19b998d0507e91ea24135f45d" #h"04137c465085c1b1b8cccbe9fccbe9d0295a331aaf332f3ed2e285d16e574b943bd3e8d5a24cd218c19760b0e85b35a8569945aa857cbf0fd6a3ce127581b217b6" #h"40a7ece19f7f6a6473b209a7ac9441d59b00fc94ae0ded3423427c12" #x343251dffa56e6a612fec7b078f9c3819eab402a72686b894a47a08fd97e6c23 #h"775e25a296bd259510ae9375f548997bec8a744900022945281dc8c4d94f2b5bd87592ceab773ae103daebbb56a04144aaccb1e14efc1024dc36c0e382df1f70") (:secp256r1-signature-test #h"8729a8396f262dabd991aa404cc1753581cea405f0d19222a0b3f210de8ee3c5" #h"0482b1f1a7af9b48ca8452613d7032beb0e4f28fe710306aeccc959e4d03662a355e39f33574097b8d32b471a591972496f5d44db344c037d13f06fafc75f016fd" #h"f6c083325d6316e337c102b16bb96faa478a43b2dc0d56d51a4affed" #x6de9e21f0b2cacc1762b3558fd44d3cf156b85dbef430dd28d59713bfb9cfa0b #h"a754b42720e71925d51fcef76151405a3696cc8f9fc9ca7b46d0b16edd7fb699603924780439cc16ac4cf97c2c3065bc95353aa9179d0ab5f0322ca82f851cf2") (:secp256r1-signature-test #h"f1b62413935fc589ad2280f6892599ad994dae8ca3655ed4f7318cc89b61aa96" #h"04e0bbfe4016eea93e6f509518cbffc25d492de6ebbf80465a461caa5bdc0181593231ee7a119d84fa56e3034d50fea85929aec2eb437abc7646821e1bf805fb50" #h"6890736262386d60424be27b3f95996ab696e1ddffdc4a03c256a7c0" #x7a33eeb9f469afd55de2fb786847a1d3e7797929305c0f90d953b6f143bb8fc6 #h"96d1c9399948254ea381631fc0f43ea808110506db8aacf081df5535ac5eb8ad73bf3691260dddd9997c97313f2a70783eacf8d15bdfb34bb13025cdfae72f70") (:secp256r1-signature-test #h"4caaa26f93f009682bbba6db6b265aec17b7ec1542bda458e8550b9e68eed18d" #h"04e3c58c1c254d11c7e781ad133e4c36dd1b5de362120d336a58e7b68813f3fbee59760db66120afe0d962c81a8e5586588fd19de2f40556371611c73af22c8a68" #h"e8ed2e73fe9e3c6bb087c5179bb357be4cd147bc66e70dc1fecc10fd" #xc0d37142dc8b0d614fad20c4d35af6eb819e259e513ddeac1e1c273e7e1dc1bb #h"25dd8e4086c62a40d2a310e2f90f6af5cb7e677b4dfdb4dc4e99e23ea2f0e6dc90ad62c179b0c9d61f521dde1cd762bfd224b5525c39c3706f2549313ddb4f39") (:secp256r1-signature-test #h"7af4b150bb7167cb68037f280d0823ce5320c01a92b1b56ee1b88547481b1de9" #h"04cb3634ec4f0cbb99986be788f889e586026d5a851e80d15382f1bdb1bda2bc7551e4e43bc16fb114896b18198a1aebe6054ba20ed0c0317c1b8776158c0e6bfb" #h"ca7e8c8c873346c85db9ac648509c8ccc9ab5651d91e35a248b951fb" #x98edd59fafbcaee5f64e84eb5ed59fff45d14aabada47cee2fa674377173627a #h"261a1cdb0fd93c0fb06ea6068b6b03c330a12f621a7eba76682a1d152c0e8d087ca049bad54feee101d6db807635ffb8bdb05a38e445c8c3d65d60df143514c5") (:secp256r1-signature-test #h"52ad53e849e30bec0e6345c3e9d98ebc808b19496c1ef16d72ab4a00bbb8c634" #h"047cca1334bfc2a78728c50b370399be3f9690d445aa03c701da643eeb0b0f7fa83f7522238668e615405e49b2f63faee58286000a30cdb4b564ac0df99bc8950f" #h"3367c395a9ad7b8214c48658f2a4b377b6b0288ba272a4fbfeaa48df" #x8650c30712fc253610884fbba4a332a4574d4b7822f7776cab1df8f5fa05442a #h"a18194c7ac5829afc408d78dde19542837e7be82706c3941b2d9c5e036bb51e0188ead1cdf7c1d21114ff56d0421ffd501ab978ef58337462c0fa736d86299af") (:secp256r1-signature-test #h"519b423d715f8b581f4fa8ee59f4771a5b44c8130b4e3eacca54a56dda72b464" #h"041ccbe91c075fc7f4f033bfa248db8fccd3565de94bbfb12f3c59ff46c271bf83ce4014c68811f9a21a1fdb2c0e6113e06db7ca93b7404e78dc7ccd5ca89a4ca9" #h"44acf6b7e36c1342c2c5897204fe09504e1e2efb1a900377dbc4e7a6a133ec56" #x94a1bbb14b906a61a280f245f9e93c7f3b4a6247824f5d33b9670787642a68de #h"f3ac8061b514795b8843e3d6629527ed2afd6b1f6a555a7acabb5e6f79c8c2ac8bf77819ca05a6b2786c76262bf7371cef97b218e96f175a3ccdda2acc058903") (:secp256r1-signature-test #h"0f56db78ca460b055c500064824bed999a25aaf48ebb519ac201537b85479813" #h"04e266ddfdc12668db30d4ca3e8f7749432c416044f2d2b8c10bf3d4012aeffa8abfa86404a2e9ffe67d47c587ef7a97a7f456b863b4d02cfc6928973ab5b1cb39" #h"9b2db89cb0e8fa3cc7608b4d6cc1dec0114e0b9ff4080bea12b134f489ab2bbc" #x6d3e71882c3b83b156bb14e0ab184aa9fb728068d3ae9fac421187ae0b2f34c6 #h"976d3a4e9d23326dc0baa9fa560b7c4e53f42864f508483a6473b6a11079b2db1b766e9ceb71ba6c01dcd46e0af462cd4cfa652ae5017d4555b8eeefe36e1932") (:secp256r1-signature-test #h"e283871239837e13b95f789e6e1af63bf61c918c992e62bca040d64cad1fc2ef" #h"0474ccd8a62fba0e667c50929a53f78c21b8ff0c3c737b0b40b1750b2302b0bde829074e21f3a0ef88b9efdf10d06aa4c295cc1671f758ca0e4cd108803d0f2614" #h"b804cf88af0c2eff8bbbfb3660ebb3294138e9d3ebd458884e19818061dacff0" #xad5e887eb2b380b8d8280ad6e5ff8a60f4d26243e0124c2f31a297b5d0835de2 #h"35fb60f5ca0f3ca08542fb3cc641c8263a2cab7a90ee6a5e1583fac2bb6f6bd1ee59d81bc9db1055cc0ed97b159d8784af04e98511d0a9a407b99bb292572e96") (:secp256r1-signature-test #h"a3d2d3b7596f6592ce98b4bfe10d41837f10027a90d7bb75349490018cf72d07" #h"04322f80371bf6e044bc49391d97c1714ab87f990b949bc178cb7c43b7c22d89e13c15d54a5cc6b9f09de8457e873eb3deb1fceb54b0b295da6050294fae7fd999" #h"85b957d92766235e7c880ac5447cfbe97f3cb499f486d1e43bcb5c2ff9608a1a" #x24fc90e1da13f17ef9fe84cc96b9471ed1aaac17e3a4bae33a115df4e5834f18 #h"d7c562370af617b581c84a2468cc8bd50bb1cbf322de41b7887ce07c0e5884cab46d9f2d8c4bf83546ff178f1d78937c008d64e8ecc5cbb825cb21d94d670d89") (:secp256r1-signature-test #h"53a0e8a8fe93db01e7ae94e1a9882a102ebd079b3a535827d583626c272d280d" #h"041bcec4570e1ec2436596b8ded58f60c3b1ebc6a403bc5543040ba829630572448af62a4c683f096b28558320737bf83b9959a46ad2521004ef74cf85e67494e1" #h"3360d699222f21840827cf698d7cb635bee57dc80cd7733b682d41b55b666e22" #x5d833e8d24cc7a402d7ee7ec852a3587cddeb48358cea71b0bedb8fabe84e0c4 #h"18caaf7b663507a8bcd992b836dec9dc5703c080af5e51dfa3a9a7c38718260477c68928ac3b88d985fb43fb615fb7ff45c18ba5c81af796c613dfa98352d29c") (:secp256r1-signature-test #h"4af107e8e2194c830ffb712a65511bc9186a133007855b49ab4b3833aefc4a1d" #h"04a32e50be3dae2c8ba3f5e4bdae14cf7645420d425ead94036c22dd6c4fc59e00d623bf641160c289d6742c6257ae6ba574446dd1d0e74db3aaa80900b78d4ae9" #h"c413c4908cd0bc6d8e32001aa103043b2cf5be7fcbd61a5cec9488c3a577ca57" #xe18f96f84dfa2fd3cdfaec9159d4c338cd54ad314134f0b31e20591fc238d0ab #h"8524c5024e2d9a73bde8c72d9129f57873bbad0ed05215a372a84fdbc78f2e68d18c2caf3b1072f87064ec5e8953f51301cada03469c640244760328eb5a05cb") (:secp256r1-signature-test #h"78dfaa09f1076850b3e206e477494cddcfb822aaa0128475053592c48ebaf4ab" #h"048bcfe2a721ca6d753968f564ec4315be4857e28bef1908f61a366b1f03c974790f67576a30b8e20d4232d8530b52fb4c89cbc589ede291e499ddd15fe870ab96" #h"88fc1e7d849794fc51b135fa135deec0db02b86c3cd8cebdaa79e8689e5b2898" #x295544dbb2da3da170741c9b2c6551d40af7ed4e891445f11a02b66a5c258a77 #h"c5a186d72df452015480f7f338970bfe825087f05c0088d95305f87aacc9b25484a58f9e9d9e735344b316b1aa1ab5185665b85147dc82d92e969d7bee31ca30") (:secp256r1-signature-test #h"80e692e3eb9fcd8c7d44e7de9f7a5952686407f90025a1d87e52c7096a62618a" #h"04a88bc8430279c8c0400a77d751f26c0abc93e5de4ad9a4166357952fe041e7672d365a1eef25ead579cc9a069b6abc1b16b81c35f18785ce26a10ba6d1381185" #h"41fa8d8b4cd0a5fdf021f4e4829d6d1e996bab6b4a19dcb85585fe76c582d2bc" #x7c80fd66d62cc076cef2d030c17c0a69c99611549cb32c4ff662475adbe84b22 #h"9d0c6afb6df3bced455b459cc21387e14929392664bb8741a3693a1795ca6902d7f9ddd191f1f412869429209ee3814c75c72fa46a9cccf804a2f5cc0b7e739f") (:secp256r1-signature-test #h"5e666c0db0214c3b627a8e48541cc84a8b6fd15f300da4dff5d18aec6c55b881" #h"041bc487570f040dc94196c9befe8ab2b6de77208b1f38bdaae28f9645c4d2bc3aec81602abd8345e71867c8210313737865b8aa186851e1b48eaca140320f5d8f" #h"2d72947c1731543b3d62490866a893952736757746d9bae13e719079299ae192" #x2e7625a48874d86c9e467f890aaa7cd6ebdf71c0102bfdcfa24565d6af3fdce9 #h"2f9e2b4e9f747c657f705bffd124ee178bbc5391c86d056717b140c153570fd9f5413bfd85949da8d83de83ab0d19b2986613e224d1901d76919de23ccd03199") (:secp256r1-signature-test #h"f73f455271c877c4d5334627e37c278f68d143014b0a05aa62f308b2101c5308" #h"04b8188bd68701fc396dab53125d4d28ea33a91daf6d21485f4770f6ea8c565dde423f058810f277f8fe076f6db56e9285a1bf2c2a1dae145095edd9c04970bc4a" #h"e138bd577c3729d0e24a98a82478bcc7482499c4cdf734a874f7208ddbc3c116" #x62f8665fd6e26b3fa069e85281777a9b1f0dfd2c0b9f54a086d0c109ff9fd615 #h"1cc628533d0004b2b20e7f4baad0b8bb5e0673db159bbccf92491aef61fc9620880e0bbf82a8cf818ed46ba03cf0fc6c898e36fca36cc7fdb1d2db7503634430") (:secp256r1-signature-test #h"b6faf2c8922235c589c27368a3b3e6e2f42eb6073bf9507f19eed0746c79dced" #h"04e0e7b99bc62d8dd67883e39ed9fa0657789c5ff556cc1fd8dd1e2a55e9e3f24363fbfd0232b95578075c903a4dbf85ad58f8350516e1ec89b0ee1f5e1362da69" #h"d9c83b92fa0979f4a5ddbd8dd22ab9377801c3c31bf50f932ace0d2146e2574da0d5552dbed4b18836280e9f94558ea6" #x9980b9cdfcef3ab8e219b9827ed6afdd4dbf20bd927e9cd01f15762703487007 #h"f5087878e212b703578f5c66f434883f3ef414dc23e2e8d8ab6a8d159ed5ad83306b4c6c20213707982dffbb30fba99b96e792163dd59dbe606e734328dd7c8a") (:secp256r1-signature-test #h"118958fd0ff0f0b0ed11d3cf8fa664bc17cdb5fed1f4a8fc52d0b1ae30412181" #h"04afda82260c9f42122a3f11c6058839488f6d7977f6f2a263c67d06e27ea2c3550ae2bbdd2207c590332c5bfeb4c8b5b16622134bd4dc55382ae806435468058b" #h"76c8df4563375d34656f2d1dd3445c9d9f0c8da59dc015fa6122237e1a02039998c16b3935e281160923c6e21115d0a9" #x23129a99eeda3d99a44a5778a46e8e7568b91c31fb7a8628c5d9820d4bed4a6b #h"e446600cab1286ebc3bb332012a2f5cc33b0a5ef7291d5a62a84de5969d77946cf89b12793ee1792eb26283b48fa0bdcb45ae6f6ad4b02564bf786bb97057d5a") (:secp256r1-signature-test #h"3e647357cd5b754fad0fdb876eaf9b1abd7b60536f383c81ce5745ec80826431" #h"04702b2c94d039e590dd5c8f9736e753cf5824aacf33ee3de74fe1f5f7c858d5ed0c28894e907af99fb0d18c9e98f19ac80dd77abfa4bebe45055c0857b82a0f4d" #h"bad1b2c4c35c54eede5d9dee6f6821bb0254395ae6a689ae7289790448ff787ea4e495ea418c0759c51144a74eba3ac9" #x9beab7722f0bcb468e5f234e074170a60225255de494108459abdf603c6e8b35 #h"c4021fb7185a07096547af1fb06932e37cf8bd90cf593dea48d48614fa237e5e7fb45d09e2172bec8d3e330aa06c43fbb5f625525485234e7714b7f6e92ba8f1") (:secp256r1-signature-test #h"76c17c2efc99891f3697ba4d71850e5816a1b65562cc39a13da4b6da9051b0fd" #h"04d12512e934c367e4c4384dbd010e93416840288a0ba00b299b4e7c0d91578b57ebf8835661d9b578f18d14ae4acf9c357c0dc8b7112fc32824a685ed72754e23" #h"c248cc5eb23ed0f6f03de308fffed1e5fdd918aef379946d7b66b8924dc38306feb28e85cc5ab5d7a3a0e55087ddecde" #x77cffa6f9a73904306f9fcd3f6bbb37f52d71e39931bb4aec28f9b076e436ccf #h"4d5a9d95b0f09ce8704b0f457b39059ee606092310df65d3f8ae7a2a424cf2327d3c014ca470a73cef1d1da86f2a541148ad542fbccaf9149d1b0b030441a7eb") (:secp256r1-signature-test #h"67b9dea6a575b5103999efffce29cca688c781782a41129fdecbce76608174de" #h"04b4238b029fc0b7d9a5286d8c29b6f3d5a569e9108d44d889cd795c4a385905be8cb3fff8f6cca7187c6a9ad0a2b1d9f40ae01b32a7e8f8c4ca75d71a1fffb309" #h"b05d944f6752bfe003526499bb4d8721c0d25a7901999f67519b17665e907cd148b2ff1b451248d292866bcc81b506d9" #xd02617f26ede3584f0afcfc89554cdfb2ae188c192092fdde3436335fafe43f1 #h"26fd9147d0c86440689ff2d75569795650140506970791c90ace0924b44f158600a34b00c20a8099df4b0a757cbef8fea1cb3ea7ced5fbf7e987f70b25ee6d4f") (:secp256r1-signature-test #h"ecf644ea9b6c3a04fdfe2de4fdcb55fdcdfcf738c0b3176575fa91515194b566" #h"04c3bdc7c795ec94620a2cfff614c13a3390a5e86c892e53a24d3ed22228bc85bf70480fc5cf4aacd73e24618b61b5c56c1ced8c4f1b869580ea538e68c7a61ca3" #h"847325a13b72de5a15cd899ced0920b8543ab26f9d3877fde99c5018efc78ddf14c00f88b06af7971181923aa46624d4" #x53291d51f68d9a12d1dcdc58892b2f786cc15f631f16997d2a49bace513557d4 #h"a860c8b286edf973ce4ce4cf6e70dc9bbf3818c36c023a845677a9963705df8b5630f986b1c45e36e127dd7932221c4272a8cc6e255e89f0f0ca4ec3a9f76494") (:secp256r1-signature-test #h"4961485cbc978f8456ec5ac7cfc9f7d9298f99415ecae69c8491b258c029bfee" #h"048d40bf2299e05d758d421972e81cfb0cce68b949240dc30f315836acc70bef035674e6f77f8b46f46cca937d83b128dffbe9bd7e0d3d08aa2cbbfdfb16f72c9a" #h"fd30608cf408dac5886ca156bdce7f75067e18172af79ca84f8d60d011b8a6b5ea33a92554d1ea34b105d5bd09062d47" #x373a825b5a74b7b9e02f8d4d876b577b4c3984168d704ba9f95b19c05ed590af #h"ef6fb386ad044b63feb7445fa16b10319018e9cea9ef42bca83bdad01992234aac1f42f652eb1786e57be01d847c81f7efa072ba566d4583af4f1551a3f76c65") (:secp256r1-signature-test #h"587907e7f215cf0d2cb2c9e6963d45b6e535ed426c828a6ea2fb637cca4c5cbd" #h"04660da45c413cc9c9526202c16b402af602d30daaa7c342f1e722f15199407f31e6f8cbb06913cc718f2d69ba2fb3137f04a41c27c676d1a80fbf30ea3ca46439" #h"9d21e70e88c43cbab056c5fdeb63baa2660ebc44e0d1ef781f8f6bf58b28e3a2c9d5db051c8da3ba34796d8bcc7ba5cb" #x6b8eb7c0d8af9456b95dd70561a0e902863e6dfa1c28d0fd4a0509f1c2a647b2 #h"08fabf9b57de81875bfa7a4118e3e44cfb38ec6a9b2014940207ba3b1c583038a58d199b1deba7350616230d867b2747a3459421811c291836abee715b8f67b4") (:secp256r1-signature-test #h"24b1e5676d1a9d6b645a984141a157c124531feeb92d915110aef474b1e27666" #h"04b4909a5bdf25f7659f4ef35e4b811429fb2c59126e3dad09100b46aea6ebe7a6760ae015fa6af5c9749c4030fdb5de6e58c6b5b1944829105cf7edf7d3a22cfb" #h"0bc6a254fa0016a5aa608309f9a97cf0c879370bae0b7b460da17c2694e8414db39ec8b5f943167372610fc146dd8b28" #x88794923d8943b5dbcc7a7a76503880ff7da632b0883aaa60a9fcc71bf880fd6 #h"6ec9a340b77fae3c7827fa96d997e92722ff2a928217b6dd3c628f3d49ae4ce6637b54bbcfb7e7d8a41ea317fcfca8ad74eb3bb6b778bc7ef9dec009281976f7") (:secp256r1-signature-test #h"bce49c7b03dcdc72393b0a67cf5aa5df870f5aaa6137ada1edc7862e0981ec67" #h"04c786d9421d67b72b922cf3def2a25eeb5e73f34543eb50b152e738a98afb0ca56796271e79e2496f9e74b126b1123a3d067de56b5605d6f51c8f6e1d5bb93aba" #h"12520a7ef4f05f91b9f9a0fba73eddc813413c4d4764dc1c4b773c4afd5cd77b0e7f09d56e5931aec2958407c02774c0" #x89e690d78a5e0d2b8ce9f7fcbf34e2605fd9584760fa7729043397612dd21f94 #h"07e5054c384839584624e8d730454dc27e673c4a90cbf129d88b91250341854df7e665b88614d0c5cbb3007cafe713763d81831525971f1747d92e4d1ca263a7") (:secp256r1-signature-test #h"9dd0d3a3d514c2a8adb162b81e3adfba3299309f7d2018f607bdb15b1a25f499" #h"046b738de3398b6ac57b9591f9d7985dd4f32137ad3460dcf8970c1390cb9eaf8d83bc61e26d2bbbd3cf2d2ab445a2bc4ab5dde41f4a13078fd1d3cc36ab596d57" #h"a59ca4dd2b0347f4f2702a8962878a206775fd91047040be60463119f02aa829b7360b940b2785395406c280375c5d90ee655e51d4120df256b9a6287161c7fc" #x9106192170ccb3c64684d48287bb81bbed51b40d503462c900e5c7aae43e380a #h"275fa760878b4dc05e9d157fedfd8e9b1c9c861222a712748cb4b7754c043fb1699d906bb8435a05345af3b37e3b357786939e94caae257852f0503adb1e0f7e") (:secp256r1-signature-test #h"f9bf909b7973bf0e3dad0e43dcb2d7fa8bda49dbe6e5357f8f0e2bd119be30e6" #h"04f2a6674d4e86152a527199bed293fa63acde1b4d8a92b62e552210ba45c38792c72565c24f0eee6a094af341ddd8579747b865f91c8ed5b44cda8a19cc93776f" #h"9e359350e87e7573ad9894cd4aad6c6202a58e9938d098dbf65650fc6f04fce3664b9adb234bfa0821788223a306daaa3e62bd46b19d7eb7a725bc5bce8998f3" #xe547791f7185850f03d0c58419648f65b9d29cdc22ed1de2a64280220cfcafba #h"4782903d2aaf8b190dab5cae2223388d2d8bd845b3875d37485c54e1ded1d3d8dfb40e406bfa074f0bf832771b2b9f186e2211f0bca279644a0ca8559acf39da") (:secp256r1-signature-test #h"724567d21ef682dfc6dc4d46853880cfa86fe6fea0efd51fac456f03c3d36ead" #h"0470b877b5e365fcf08140b1eca119baba662879f38e059d074a2cb60b03ea5d395f56f94d591df40b9f3b8763ac4b3dbe622c956d5bd0c55658b6f46fa3deb201" #h"ff5e80ccbb51b75742a1f0e632b4c6cd119692f2aca337378f7eb2f3b17fc3d912828b7e1655d2263d8757715eea31493aa89dfe1db143a8fa13f89a00379938" #x79d6c967ed23c763ece9ca4b026218004c84dc2d4ccc86cf05c5d0f791f6279b #h"2ba2ea2d316f8937f184ad3028e364574d20a202e4e7513d7af57ac2456804d164fe94968d18c5967c799e0349041b9e40e6c6c92ebb475e80dd82f51cf07320") (:secp256r1-signature-test #h"29c5d54d7d1f099d50f949bfce8d6073dae059c5a19cc70834722f18a7199edd" #h"043088d4f45d274cc5f418c8ecc4cbcf96be87491f420250f8cbc01cdf2503ec47634db48198129237ed068c88ff5809f6211921a6258f548f4b64dd125921b78b" #h"e9518ad1c62d686b9df1f5ae1f6797d8c5944a65fcf2244b763f47b9bc5db8ec360cbd17180e6d24678bc36a1535276733bab7817610399ef6257ca43361dfa0" #x0508ad7774908b5705895fda5c3b7a3032bf85dab7232bf981177019f3d76460 #h"acd9f3b63626c5f32103e90e1dd1695907b1904aa9b14f2132caef331321971b15c04a8bd6c13ed5e9961814b2f406f064670153e4d5465dcef63c1d9dd52a87") (:secp256r1-signature-test #h"0d8095da1abba06b0d349c226511f642dabbf1043ad41baa4e14297afe8a3117" #h"0475a45758ced45ecf55f755cb56ca2601d794ebeaeb2e6107fe2fc443f580e23c5303d47d5a75ec821d51a2ee7548448208c699eca0cd89810ffc1aa4faf81ead" #h"9fd9a5f9b73f6d01894ceaf8a1e0327a0cac0dbc30153201bcccf09b6756e2f89198781e80a7ff5119cc2bb4402c731379f5ab5eda9264e3fe88b4b528e16598" #x5165c54def4026ab648f7768c4f1488bcb183f6db7ffe02c7022a529a116482a #h"ebc85fc4176b446b3384ccc62fc2526b45665561a0e7e9404ac376c90e450b598b2c09428e62c5109d17ed0cf8f9fd7c370d018a2a73f701effc9b17d04852c6") (:secp256r1-signature-test #h"52fe57da3427b1a75cb816f61c4e8e0e0551b94c01382b1a80837940ed579e61" #h"042177e20a2092a46667debdcc21e7e45d6da72f124adecbc5ada6a7bcc7b401d5550e468f2626070a080afeeb98edd75a721eb773c8e62149f3e903cf9c4d7b61" #h"bfc07b9a8a8941b99ac47d607356e5b68d7534fb3faccfbe97751397af359d31fe239179a1d856ffac49a9738e888f599123ee96ae202fb93b897e26bc83202e" #x0464fe9674b01ff5bd8be21af3399fad66f90ad30f4e8ee6e2eb9bcccfd5185c #h"f8250f073f34034c1cde58f69a85e2f5a030703ebdd4dbfb98d3b3690db7d114a9e83e05f1d6e0fef782f186bedf43684c825ac480174d48b0e4d31505e27498") (:secp256r1-signature-test #h"003d91611445919f59bfe3ca71fe0bfdeb0e39a7195e83ac03a37c7eceef0df2" #h"047b9c592f61aae0555855d0b9ebb6fd00fb6746e8842e2523565c858630b9ba00d35b2e168b1875bbc563bea5e8d63c4e38957c774a65e762959a349eaf263ba0" #h"a051dcee66f456d9786785444cee2a3a342a8e27a5ebdf0e91553a0d257eea11af3a7df7e9310b46d95021a1880cd3f064c73447d92a31bacdb889f1e1390f49" #xef9df291ea27a4b45708f7608723c27d7d56b7df0599a54bc2c2fabbff373b40 #h"66d057fd39958b0e4932bacd70a1769bbadcb62e4470937b45497a3d4500fabb6c853b889e18b5a49ee54b54dd1aaedfdd642e30eba171c5cab677f0df9e7318") (:secp256r1-signature-test #h"48f13d393899cd835c4193670ec62f28e4c4903e0bbe5817bf0996831a720bb7" #h"0482a1a96f4648393c5e42633ecdeb1d8245c78c5ea236b5bab460dedcc8924bc0e8cbf03c34b5154f876de19f3bb6fd43cd2eabf6e7c95467bcfa8c8fc42d76fd" #h"e1a00e6e38599d7eba1f1a8a6c7337e4dcbdd4f436f47c57d17ef85829f7e266b6bff67a001598db6b9ac032ad160d6f928f8724d2f10928cf953bc76c3fd2fb" #xefed736e627899fea944007eea39a4a63c0c2e26491cd12adb546be3e5c68f7d #h"cf7fc24bdaa09ac0cca8497e13298b961380668613c7493954048c06385a7044f38b1c8306cf82ab76ee3a772b14416b49993fe11f986e9b0f0593c52ec91525") (:secp256r1-signature-test #h"95c99cf9ec26480275f23de419e41bb779590f0eab5cf9095d37dd70cb75e870" #h"0442c292b0fbcc9f457ae361d940a9d45ad9427431a105a6e5cd90a345fe3507f7313b08fd2fa351908b3178051ee782cc62b9954ad95d4119aa564900f8ade70c" #h"bdcf1926e90c980373954c67d3c3c06ccb1a5076957673f12ddf23fa0cce7b3dc3ec2aec143a1ba58094e3da45e2b160092e1d943cf8f22fad35f8348575a0cf" #x4c08dd0f8b72ae9c674e1e448d4e2afe3a1ee69927fa23bbff3716f0b99553b7 #h"f2bc35eb1b8488b9e8d4a1dbb200e1abcb855458e1557dc1bf988278a174eb3bed9a2ec043a1d578e8eba6f57217976310e8674385ad2da08d6146c629de1cd9") (:secp256r1-signature-test #h"e15e835d0e2217bc7c6f05a498f20af1cd56f2f165c23d225eb3360aa2c5cbcf" #h"0489dd22052ec3ab4840206a62f2270c21e7836d1a9109a3407dd0974c7802b9aee91609ba35c7008b080c77a9068d97a14ca77b97299e74945217672b2fd5faf0" #h"da606bb1d0d25dd18a9c29096042e65e6b73086b30509962ea1aa75f25b74653c03a66620cba446f442765f28d7c55a5ff4f9693a6c7ce18e1196c25c12da48d" #xc9f621441c235fc47ec34eef4c08625df1ec74918e1f86075b753f2589f4c60b #h"a70d1a2d555d599bfb8c9b1f0d43725341151d17a8d0845fa56f3563703528a74e05c45adf41783e394a5312f86e66871c4be4896948c85966879d5c66d54b37") ironclad-0.57/testing/test-vectors/secp384r1-dh.testvec000066400000000000000000000030171420372057600230120ustar00rootroot00000000000000;;;; secp384r1 test vectors ;;; Test vector from RFC 5903 (:secp384r1-dh-test #h"099f3c7034d4a2c699884d73a375a67f7624ef7c6b3c0f160647b67414dce655e35b538041e649ee3faef896783ab194" #h"04667842d7d180ac2cde6f74f37551f55755c7645c20ef73e31634fe72b4c55ee6de3ac808acb4bdb4c88732aee95f41aa9482ed1fc0eeb9cafc4984625ccfc23f65032149e0e144ada024181535a0f38eeb9fcff3c2c947dae69b4c634573a81c" #h"41cb0779b4bdb85d47846725fbec3c9430fab46cc8dc5060855cc9bda0aa2942e0308312916b8ed2960e4bd55a7448fc" #h"04e558dbef53eecde3d3fccfc1aea08a89a987475d12fd950d83cfa41732bc509d0d1ac43a0336def96fda41d0774a3571dcfbec7aacf3196472169e838430367f66eebe3c6e70c416dd5f0c68759dd1fff83fa40142209dff5eaad96db9e6386c" #h"0411187331c279962d93d604243fd592cb9d0a926f422e47187521287e7156c5c4d603135569b9e9d09cf5d4a270f59746a2a9f38ef5cafbe2347cf7ec24bdd5e624bc93bfa82771f40d1b65d06256a852c983135d4669f8792f2c1d55718afbb4") ;; Same test vector with compressed points (:secp384r1-dh-test #h"099f3c7034d4a2c699884d73a375a67f7624ef7c6b3c0f160647b67414dce655e35b538041e649ee3faef896783ab194" #h"02667842d7d180ac2cde6f74f37551f55755c7645c20ef73e31634fe72b4c55ee6de3ac808acb4bdb4c88732aee95f41aa" #h"41cb0779b4bdb85d47846725fbec3c9430fab46cc8dc5060855cc9bda0aa2942e0308312916b8ed2960e4bd55a7448fc" #h"02e558dbef53eecde3d3fccfc1aea08a89a987475d12fd950d83cfa41732bc509d0d1ac43a0336def96fda41d0774a3571" #h"0411187331c279962d93d604243fd592cb9d0a926f422e47187521287e7156c5c4d603135569b9e9d09cf5d4a270f59746a2a9f38ef5cafbe2347cf7ec24bdd5e624bc93bfa82771f40d1b65d06256a852c983135d4669f8792f2c1d55718afbb4") ironclad-0.57/testing/test-vectors/secp384r1-sig.testvec000066400000000000000000001050341420372057600232030ustar00rootroot00000000000000;;;; secp384r1 test vectors ;;; Test vectors from NIST CAPV (:secp384r1-signature-test #h"a492ce8fa90084c227e1a32f7974d39e9ff67a7e8705ec3419b35fb607582bebd461e0b1520ac76ec2dd4e9b63ebae71" #h"04e55fee6c49d8d523f5ce7bf9c0425ce4ff650708b7de5cfb095901523979a7f042602db30854735369813b5c3f5ef86828f59cc5dc509892a988d38a8e2519de3d0c4fd0fbdb0993e38f18506c17606c5e24249246f1ce94983a5361c5be983e" #h"9b9f8c9535a5ca26605db7f2fa573bdfc32eab8b" #xba25756f1a4a9853bbf60cb2c789569fd551abf3a9cceb889ff71ab5ef7758a3e302166bf2a01a29af18ffbd329cd781 #h"6820b8585204648aed63bdff47f6d9acebdea62944774a7d14f0e14aa0b9a5b99545b2daee6b3c74ebf606667a3f39b7491af1d0cccd56ddd520b233775d0bc6b40a6255cc55207d8e9356741f23c96c14714221078dbd5c17f4fdd89b32a907") (:secp384r1-signature-test #h"f058ab8da69bb97e830d94a0e062b547404a667627a81840fdaafcce1e84473d873e2ace6a8d2a1888948063a3b32056" #h"04762baf5164a5b1b9f7773808ddc1a4fe5ba692b33a9dec84a7b647c265153f0684fc1d4e2c1fde0567feaab5f0436dced3677aeedb149527581f0473521e0d78140cd32a96e1d9e1ca4b64f8cef970212c8e3d9043de251f8b8b337f54e8cfa4" #h"0e6cfcd22a2b5e2a2cbe46892b086fe03a830538" #x1bf4fa2025cd522e630e36dde7805f9df1cb9729105e4e751004d2997017fbd14a2dd36c8b5d24f16704da442770c381 #h"70f6087c96d29d9ca44ec14773c85eb23708cdff30dd0858da741d0d7687f0e6b9c04620cc757cf106f8d7ea04504442a07783086ec45c2be737001fa90fe91412731d59364bddde22525fb5bff00718a5ec0fa0ff6f5ad71ada41db7af32395") (:secp384r1-signature-test #h"3d2a59c2b324339f298eeab2a67fd8977f0ab5ccfedebbe7520216e4d194d0232206cc2ede6f7e6d34a383090f105c47" #h"0474c83ada1218cb5f6b303b1e9ce72973a574216b451543d09920854925dc12f01594d81d405885136d0e68328f7270a234d1ea91b3cf5c34abfece7b778c90f18d62a7b34562e74a340e164b9a7872d3f8cc0703fbcd86093b8ee1c6f6ecc1c3" #h"474522424088b6720eaa9822ef6591184fcba82d" #x0c8b1775b01b6a98adc2edd136851713bffb41eaaf8da779f18b9d4e46dc25a9ea69788951bcbdb2b3414bffa94c1a8c #h"99664f7a18c378e89499ac5013c9549f66b9536d534e37f9035b6d579e1d1c6308f24330f3c6919b22892c613b296808749554953a6dcc2e75552eaeae5608d4065358e3bf1c54c80b3a2942c61487aea88b651fb06f5ac6173b8428eb9cd4c2") (:secp384r1-signature-test #h"4f9312adcfad6ffdd0c4cc4f1367e52ebc37dd8f0b11c685f846771b8d45c70ba420e6567387948800d6cc9201bfe60e" #h"048c08e4f67ea47522582bf2ebb8b06961b10892500f05c5aac66ff5b757518285b460bb152525e671a6dfda2b6e678e147961721a35d8319700ebc3adabb9f686f44d1674bd9f542e8295b2ffe8b48d69e71ddeec38612abcbce296d059d03be9" #h"33ec4ab882bc4eecba0e2521c93d4824b5f4c498" #xc1fe6ac7761cfe487ff24e4f87889524febf50db850608b4f7655e5b4d9715ca5f17a5deab5b9717548069e96e799df6 #h"9128a790c7be3008d0fa79b6cebe2fde800045b5fd99df7e8f964439a82d1cd1d0264bee844b20eb7bf2dc490ce9e94dc9214132dd8fe8f08c5d95e35e49dc912c9fdf9d5b2d359855f5373b659962b2c988fb050b14688b51fcf98094bf4ca1") (:secp384r1-signature-test #h"8713954a6fdc62eb278f8f2bc11c6aa6aa96341f87df303103751e4fdde4b7da554de5e568e8d4ef7c5e2520ebd90156" #h"04a770c1dcc22f8fdab4158d798c3bd95cab9c19cb670e789a18e0fb6b474297e5c45fb2e867c28b8c2f077597881d30b87cc9c857d0079c5a187b2a2cd0932d6fe0ec2d8b161d349dd3122d8425513e39df248af04dd3e05ceabad8dc1cec14a3" #h"2b9934670bd6fcc5f943af873be4664ee5cf51ff" #x9c04b46e5443683f8a6a77788e0d7204592cf12a17a1cdb785239e46bb3c3d8c61a99c8e2b71ef6a042025144c073521 #h"7803606f6e60ed987fe7bae5f97b2c5ce4befc3e1ecf9ffb053abc61e30fa07bb04056d15fafaf8ce53bf6003e875773fd1d3ecc1b8273d22a5659744494deba9bbddc49530487c2ab983cba82522dc99ae68bda00261f6514233a5936435c62") (:secp384r1-signature-test #h"9a7c829838b6212aa543c5acece0ab7d4502838a474e25a0d664c1807c787a1706d365942efa6576c8738ad6753048ef" #h"04173182d5e68e8148ec365ae7a2d8a8983e81488d644cf703375b64e8cfe1110d969b8daea8326f4bb62b2f1c26ecdb6ab9c8ce3ad95449c6263b4b76d2b5bc1298c6ce0f86545ea893f95e26fc578624ae9cbe4776eabcb16e07cf49f9da7462" #h"5aaf57a66f15d1552b0995f66bbdc78c6ae19dd5" #xa5ef3548af0406758bb6714fb7d576f147059482624cfacff4002afc5b71ff034125d5f9b696ab826219d6c240a81296 #h"624d9d3b1ac954828fba1fb180882ecfe041bacde373275e68c5096937aaba2c4891430f22bfec7b23f66820d2f9d10cc3245e068837e2e180c57d77f9bb0cce1e14ab8491797ca042e43662d51fca15b52a40f2ec3de80655fe09c33c675ac6") (:secp384r1-signature-test #h"e6136ec60221b53c019866e0c8afa087893339c4b8ccb587083321b4cdae2bc354325c9eb06464958a49fa2de4bc030a" #h"0430603f54d41740151c4f0177540ff12add6e2ad7be5fce0af9cc39c2527c949b2ee66ae723be1380ea71e94e29799fd12445cbd5e8510fe387a433b50d2c60cc70ad11d1af921f7c65d5a2f1ebded3ddb667a9a8985dbef3d3e08161b398f32e" #h"d40f980d269fc602f48247c8b48b2f9e1f299331" #xd6ed0b3ab1b70984abc67fea5dba4f448fcae34d3b77a1f5301b17d1dfd4e191ab70aeb88d195e2b07df0549287a8c4f #h"350640057ea4c2a02ded8e053e4d5566acf9eb3ee20e76457b1e423109922802b957fea42baeaad9aaa0b101fa67cde183ce730d9f606eacbd8f1dcae3eb6ce68f559100586577ff11481a706aa632a7abfb1051be086d78cbee27a0b7ad66d0") (:secp384r1-signature-test #h"8f1fc47321b1708a0f3f320e3b8e6bb71b57eb334c2cc20553fe2d1cf00ed00c40ee8dbc4704862bc68cb39fcd8dc03e" #h"04c03696284c3c843d28f54591dc813b11da2bb8a83a8ab20e0b54a1b0435d6cefe99fdb5812e87a3bdf8bb600aadc5f8d5e32ab64b65c3bafd77fecb64eda186a871684fdcd1c97860d21303e63bc453b3abac338e1f3bcf12a3fa6fe981a2e31" #h"04769215f6b7e809974cb91d9304c2101be6b1ac" #x32ca5f506bb5f7c95eae80fe849388f76bbd2b855c6e1bb766f9a7d5f4cf6337112f9523039f962e5dc40529fcc331bd #h"a162bb54548941e63cd87753ce77d917cc9f64a6040bbd6c48fae587b2829037bdec9e3a7e09d93ffa5d797be201bcce3798c49f1d2c9507aeaedab09ef22d8bd13353c87fe4685fdc531c04f93fcb95388f1ce1fba9f5090c03b0f3bd9a57bf") (:secp384r1-signature-test #h"88f54804b66345889537229e0a3ebb01901745bb0c2e58259795ef805bfd449e3e28c88e63f80412855dddf2bfbf16c4" #h"042dbba355935388d99a59bf1ca24e8f915186a5012325cbaf8b44a77e60986bbd13ade4f5af8d5baeb7f927697d28d35f50d67264b86fcef65553455403936d47acdc3b0f0104e4259d62fb838584086f76ab08a98942b9179e4f30b2561fb2b4" #h"d2a1b02e71044faee0def8ade3cbf42f1f49b529" #xf426c920e96667343c6d4d6b79e5e1ab97ee7da40d526d3a9f0a992de01795a73c3150d940e0c41311cc120898b8895b #h"948e376bd2f3ef488ef75fd39fd42140dab1a838be08b35f44b898f23e6959ac2bbab05840a42ea70443555677712028a815053ce1a0a65686056331eb952a6098438078a081daa749071fa4d9206692f1f7fe0930fc5aa32ed5034134fe6885") (:secp384r1-signature-test #h"a95cbc7a261e932417b2cc01a0934c1633a5728e876394d27772febbd57e2e6fe3620df15a61813ec00fe0d41b760131" #h"0437873d4ea00a594976d5acf65db8634dd2399b4fb4fabf4a1e3b41fc14d3229a70c41fa164c555d1e617aeeabdf742ee7b2d2c9ea694c4ea71ad7ca473be982f2ca25d2ca3f1ac37c23003c665cb9c726dedaa9b913e023b8df52ad3f80523f1" #h"63a8a66da9225a8575ecabed7a2c649dbab1e6ba" #x7a159b8a33e4319b99ebd523f5a993546d3f27f4a9749cd370dc44fbe49cd323f9ff03b8d5bf548f0ad6acb87207e534 #h"9e3db7869dd52ea7eca61eb45831df81763974d8df9bf3a077fea35f9a098a158c91fbd6ea7e6db0d26039a21dedcb01f05e65320b48f1dc92c1eea928aca3aacc768e9570f91b5a60d367c50d178609f685ec8c1584afebd0264a9b770a0786") (:secp384r1-signature-test #h"0af857beff08046f23b03c4299eda86490393bde88e4f74348886b200555276b93b37d4f6fdec17c0ea581a30c59c727" #h"0400ea9d109dbaa3900461a9236453952b1f1c2a5aa12f6d500ac774acdff84ab7cb71a0f91bcd55aaa57cb8b4fbb3087d0fc0e3116c9e94be583b02b21b1eb168d8facf3955279360cbcd86e04ee50751054cfaebcf542538ac113d56ccc38b3e" #h"5e3b235f5a8037f7556331ed6e9b503fd9f4d6e7d5851d8716780e00" #xe2f0ce83c5bbef3a6eccd1744f893bb52952475d2531a2854a88ff0aa9b12c65961e2e517fb334ef40e0c0d7a31ed5f5 #h"c36e5f0d3de71411e6e519f63e0f56cff432330a04fefef2993fdb56343e49f2f7db5fcab7728acc1e33d4692553c02e0d4064399d58cd771ab9420d438757f5936c3808e97081e457bc862a0c905295dca60ee94f4537591c6c7d217453909b") (:secp384r1-signature-test #h"047dd5baab23f439ec23b58b7e6ff4cc37813cccb4ea73bb2308e6b82b3170edfe0e131eca50841bf1b686e651c57246" #h"04de92ff09af2950854a70f2178d2ed50cc7042a7188301a1ea81d9629ad3c29795cb7f0d56630a401e4d6e5bed0068d1e6135adbd8624130735e64e65ecbd43770dcc12b28e737b5ed033666f34c918eb5589508e4a13b9243374a118a628dd0b" #h"871afe65a30654d09a9bd33767cb4c581a8c5a534c9cdc5801821e89" #xf3922351d14f1e5af84faab12fe57ded30f185afe5547aeb3061104740ecc42a8df0c27f3877b4d855642b78938c4e05 #h"38e181870cb797c1f4e6598cfd032add1cb60447d33473038d06df73919f844eddd16f40f911075f8a4bacc0d924e684a58dd1ca18aa31277de66c30c3bb7a14b53705ce6c547ed2cb0e336f63c42809422efffcc722d1155f2254330a02b278") (:secp384r1-signature-test #h"54ba9c740535574cebc41ca5dc950629674ee94730353ac521aafd1c342d3f8ac52046ed804264e1440d7fe409c45c83" #h"043db95ded500b2506b627270bac75688dd7d44f47029adeff99397ab4b6329a38dbb278a0fc58fe4914e6ae31721a6875049288341553a9ac3dc2d9e18e7a92c43dd3c25ca866f0cb4c68127bef6b0e4ba85713d27d45c7d0dc57e5782a6bf733" #h"31113fbe2375b059be766f538b09bf18ca8ec6c38442847e809fe25a" #x04324bd078807f6b18507a93ee60da02031717217ee5ce569750737be912be72da087ac00f50e13fdf7249a6ae33f73e #h"b2752aa7abc1e5a29421c9c76620bcc3049ecc97e6bc39fcca126f505a9a1bfae3bde89fb751a1aa7b66fa8db3891ef0f1c69e6d818ca7ae3a477049b46420cebd910c0a9a477fd1a67a38d628d6edaac123aebfca67c53a5c80fe454dba7a9d") (:secp384r1-signature-test #h"dabe87bbe95499bac23bc83c8b7307fe04be198f00059e2bf67c9611feaffb2c8f274f6aa50eb99c3074186d8067d659" #h"04c2aa0a695125279705917e02a4f258cade4c3ff9140a071414babf87764f426f7f36ffda9d5f3394375d24864235476f8f9808da0ce0227cf453f9e456f557db9752e23b45cce4baad5fee3844ddd7e1112bcec01ea9d67c7a76f3535bd0cb58" #h"279d65e738a347fd9aa6890e497077ad9e90043868bdcb5ab09e90cd" #x65a0305854033cbc6fe3ca139c40ca354d45801ecb59f4a923c251dc6b25d12d452d99b5d6711fdb5efac812aa464cc4 #h"c7fc32997d17ac79baf5789e4503f5f1a8863872bc350a91f12dd3ef8cf78c254e829217809e8e00b6b8d4d85be3f1fd1422e1838a22496df93486bce1142961dbd8478ae844b8dda54e210afdae0d9e930d587c91bb600b0bde7237186d94e6") (:secp384r1-signature-test #h"df43107a1deb24d02e31d479087bd669e2bc3e50f1f44b7db9484a7143cdca6a3391bddfea72dc940dbce8ec5efbd718" #h"0476bd4be5d520471162cb5c36f80038301b325f845d9642204a84d78b3e721098932827bf872bde0a9f86383953667d29415116b8b878f896a5aa4dbbdc21076f27135d8bbcaaca02489ef639d742bd63f377da0c8e8ab36ff19b4a7cc5d4ceb4" #h"21cd3764d8b28d8c70eea318bba06a8cc2b359e59a0782d7f1c659a2" #x798abad5a30d1805794540057388ee05e2422901c6335f985b9d4447b3ef75524751abfeab6409ad6bf77d4ae3014558 #h"98744e5c6742fa5118a74a70db4957647a3cc12add4e876b45974a6a8707809f871daadbfc0b865e01624f706b65f10c9e256e8da8eff5a0c83baaa1ef4f7be798eba9543bf97adb0fff8719f5406ea1207a0cf703d99aa8f02169724b492273") (:secp384r1-signature-test #h"ea7a563ba2a7f5ab69973dca1f1a0d1572f0c59817cd3b62ad356c2099e2cdca1c553323563f9dfbb333b126d84abc7f" #h"04cf4717c5f5de668b785f06bdc9845df5a09e4edd83f4669756407cbb60807305c632bc49f818f4a84b194369aa07736f7391e4982af8a2218f704f627d01f0508bfc8304992a2d598a420bf2eb519f33bd7caf79380793733b3dba0cc5e2b9d8" #h"dae4b61e1cbc5c2846b3b698656ca1acbd262a0fbe492f810fac6b39" #x7b9606b3df7b2a340dbc68d9754de0734e1faeb5a0135578a97628d948702235c60b20c8002c8fcf906783e1b389e754 #h"0d680010bed373287f9767955b5d2850e150b6713b49e453eb280148e45230c853d99ea2d2f8fcbd3ddcba19aeec0af164329763a930ab5452afdb0557fef16ff71810d6343dfc9c6ae18905c3d274db6554cdc69d6078a1ca03284474a94f30") (:secp384r1-signature-test #h"4cc70cb35b3ddeb0df53a6bd7bd05f8ff4392a2db7344f2d443761484b3a468a4ee3d1a8b27113d57283fd18b05f7829" #h"0440e1fe21df34bb85a642a0abe819ebd128f7e39b84d8dcc4a9a599b372fb9588da1484600ec28b1297bb685f9ae77831f3aa69ada57879fdcbe8df19cefabc308add7d03b17b1fac2f7783fece6a8dfe20bc36f518692677d96e3f730a67a671" #h"1e7ca1523ce2b48143a9665843b602d617441d1b43142631de2088cf" #x8eda401d98f5688c34d8dbebcd3991c87c0442b0379154eaa2e5287dabe9a9e34cfc1305d11ff68781df25d5611b331d #h"ff2d772786e159448bba26afd8c3281941a4cb0c56fec6f5cccb4c292c4ee0f7af9bd39bbe2d88148732585e104fdb3007a1d890770daa949a17797dca7af3e8163da981ec330c03d63d1a8312c152be6a718163205ffa08da7dcc163ba261f4") (:secp384r1-signature-test #h"366d15e4cd7605c71560a418bd0f382fd7cd7ad3090ff1b2dfbed74336166a905e1b760cf0bccee7a0e66c5ebfb831f1" #h"04a143f277ab36a10b645ff6c58241ea67ffdc8acf12d60973068390f06b4d8f4d773b10c1ebf6889b1cfa73ebb90f6ca17a17cad29bb507b309021f6f92cb5c10ba535f4a3e317fcc68cfd02d3ccd269f465169c73d30ff308f5350d881b08aec" #h"505dff744fd26f08990ef6c68e80b5c1f1bfb328203a8a6efd444e02" #xdbe545f920bc3d704c43d834bab21e40df12ec9e16a619a3e6b3f08760c26aae6e4fd91fad00f745194794b74bb1baee #h"cdc39b12bba30da66fe9554713c05880ddc27afa4d2d151440f124c351fb9496dc95046516b0921083347d64369846ac797d0344e49f9ba87a187c50f664e5015d449e346b1a7bd9427c5be559fc58173651880d5aadf053f81899d3368d6181") (:secp384r1-signature-test #h"e357d869857a52a06e1ece5593d16407022354780eb9a7cb8575cef327f877d22322c006b3c8c11e3d7d296a708bdb6d" #h"04ce9a2185a68d6094aa5849a6efe78b349946f7380f0c79aa9664246cfcc71a879e90ad78a0474f58644c6a208168150e8354fa47673cb3e07d446521345706c5515584b2602f921c3b9c44dded9e2c3f90ce47adb36d7e5f9f95a8c5ad8af397" #h"b972526301f2c5d689205193c9fc73fb0cddc24ed6ff32e7b5fd6f6e" #x1e77367ac4e10924854d135ad2f2507f39e2bafdbce33ff256bcbe9a7329b8d27185218bcc3550aafbe3390e84c77292 #h"df3182d49ad70959fb0c95bc7312750ce70fc87f1a328d39d9b29ac05d31305ce7209d6c24d13225d9567b489f7a187bd812b05abab0e96de13291e1f0da6479444ed5cd9d959b76f6cb43d394769035364f7c831a104dc7b5bd9b4a8e64df64") (:secp384r1-signature-test #h"745a18db47324a3710b993d115b2834339315e84e7006eafd889fb49bd3cc5a8b50c90526e65e6c53bddd2916d14bead" #h"04f692578c6f77531210aef55c9e004ce3b66cf268c6900dde31a8bbb76e7562e3fb76242de34ca330d2501030aa11946640965833b28de926c46de060aa25beaeda98f8415a6b1e3564aa77870cf4c89bd4fde92c8f5d9bf0eb41721586859d8e" #h"0659e2e64a794837b070ce3a664836d0157880e496f1e9b8c51fc7e0" #x11b9b36720abcac084efdb44c9f5b7d039e3250cb1e9c47850189ba3cfc1489d858b2a44df357772b61d919c7e729c0f #h"02b252c99820cf50e6ce060ab55bd4f682276e29b4ae4197417432e6a7bfb8cf0bac89dfe105456af805d822cee776968e248bbf7d7028d63177e565c9d1666ee5be4d1ffbfffc9c7814b0cd38f74b98f3f2cd59be42b9f132bfe5ee789cd96c") (:secp384r1-signature-test #h"c602bc74a34592c311a6569661e0832c84f7207274676cc42a89f058162630184b52f0d99b855a7783c987476d7f9e6b" #h"040400193b21f07cd059826e9453d3e96dd145041c97d49ff6b7047f86bb0b0439e909274cb9c282bfab88674c0765bc75f70d89c52acbc70468d2c5ae75c76d7f69b76af62dcf95e99eba5dd11adf8f42ec9a425b0c5ec98e2f234a926b82a147" #h"bbbd0a5f645d3fda10e288d172b299455f9dff00e0fbc2833e18cd017d7f3ed1" #xc10b5c25c4683d0b7827d0d88697cdc0932496b5299b798c0dd1e7af6cc757ccb30fcd3d36ead4a804877e24f3a32443 #h"b11db00cdaf53286d4483f38cd02785948477ed7ebc2ad609054551da0ab0359978c61851788aa2ec3267946d440e87816007873c5b0604ce68112a8fee973e8e2b6e3319c683a762ff5065a076512d7c98b27e74b7887671048ac027df8cbf2") (:secp384r1-signature-test #h"0287f62a5aa8432ff5e95618ec8f9ccaa870dde99c30b51b7673378efe4ccac598f4bbebbfd8993f9abb747b6ad638b9" #h"04b36418a3014074ec9bbcc6a4b2367a4fb464cca7ec0a324cb68670d5c5e03e7a7eb07da117c5ea50b665ab62bd02a4914ea299c30e7d76e2c5905babada2d3bb4ee5eb35a5a23605cdb0d5133471a53eb9e6758e49105a4eaf29d2267ba84ef2" #h"e4cb4f2f94793f4a471a1e1de49b2c6ceb5825c5d02c69a7fe122eebda7b28b9" #x935eeab3edeb281fbd4eead0d9c0babd4b10ff18a31663ee9de3bfa9ae8f9d266441158ea31c889ded9b3c592da77fd7 #h"738f9cb28f3b991335ef17b62559255faf75cad370a222464a492e27bb173c7f16b22100ada6b695875c7e4b1a28f158bc998c30e1491cd5d60dc7d1c38333165efe036b2a78db9b8f0e85ee68619cfba654e11ae5ca5ee5a87099c27cf22442") (:secp384r1-signature-test #h"d44d3108873977036c9b97e03f914cba2f5775b68c425d550995574081191da764acc50196f6d2508082a150af5cd41f" #h"04c703835d723c85c643260379d8445b0c816fe9534351921e14a8e147fe140ec7b0c4d704f8dc66a232b2333b28f03deec5d0bb054053fd86c26f147c4966757aa04b00513a02d427b8d06c16055c607955efdc518d338abfe7927c195dc28588" #h"a22a3d3da784a68d37ae5aaca8ef28dc1ceefc8e530431e455dd2bb2ed969684" #xc80f63e080650c8a21e4f63a62ec909adfb7d877f365d11ee1cb260baf112eb4730c161c1d99dba98fc0d5bbd00dc97d #h"81de2810cde421997013513951a3d537c51a013110d6dbb29251410bcb5ba001a9686b8490f1e581e282fd2ed0974b229cab0bbaffe91c7677ec3dd1f17060211a3cc0be574cbca064aa8c4b66ba6e64f3d80e83da895042ca32d311c388d950") (:secp384r1-signature-test #h"d5b72cbb6ec68aca46b9c27ad992afd8ffa02cb3067b234fcfa6e272e3b31be760695ff7df988b57663057ab19dd65e3" #h"04135a6542612f1468d8a4d01ff1914e532b1dd64d3627db9d403dc325651d3f82b0f6f0fd1dbdeca2be967c4fb3793b5fcbbd40f6d3a38d0dfb64582ff4789d7b268241bc0c36de2884bccfaeeff3b7b2b46a30bb35719804e0d11124b4e7f480" #h"1241e0219c19b1fe70919f4f5738edf7cdf4bd51905273b030c2f522abf11823" #x9da6de7c87c101b68db64fea40d97f8ad974ceb88224c6796c690cbf61b8bd8eede8470b3caf6e6106b66cf3f0eebd55 #h"17840911ecdf6ae0428b2634f442163c2c11b8dbf0cc7a5596fbe4d33e3e52f9d99e99ad169867b1f39e89c9180cedc2dd7ed67e480866d0474379ea4afff72870746f4feef2153be42f13bf472b1613d7faa5c0abb7f7464070f94d7cf3f234") (:secp384r1-signature-test #h"218ee54a71ef2ccf012aca231fee28a2c665fc395ff5cd20bde9b8df598c282664abf9159c5b3923132983f945056d93" #h"0401989ff07a7a452d8084937448be946bfedac4049cea34b3db6f7c91d07d69e926cce0af3d6e88855a28120cf3dba8dfeb064e029d7539d4b301aabafe8de8870162deffe6383bc63cc005add6ee1d5ced4a5761219c60cd58ad5b2a7c74aaa9" #h"e2e52fe49dd358e95fdaf1fc6f7f4bdc638ee8f65a410890eb290342ca53f6de" #xc5d39b436d851d94691f5f4aa9ef447f7989d984f279ae8b091aef5449ac062bcc0567740f914624ad5b99fc32f9af0b #h"07d5b1b12877e8cb5e0aa5e71eeeb17bf0aa203064c7e98b3a1798a74dc9717252dc47c7f06aaf1d5fe15b868323bbb969428cf101a7af5d08161a9fd7af212e02e33b6062aebdce4c96bf3a0684b5394cb902ca7c2dec6e2f01f40c4576009d") (:secp384r1-signature-test #h"e6ab171f6937c000e144950801ad91023ae8e8476856c2592d9f7d5bb7180fd729211803d39a412ead6c0be761cfa5d1" #h"0438bc42b8c9d8866d09b214398d584b1b24a488dfacc3420d1e9506aa825b19fdf1ba74e7b8f547f47b571467fe8c4d1f5179d62668d3f6a7ab5c8e3761a685e12008fb87d0529a97645f65cfb5364376c1b6682e0ffcddd0bcd995c41d013ad3" #h"57f030024cde572f1e3368cf23aaa686e59d645455ef5f01e3b9c14067dd0eb3" #x05e9718aea9669c9e434f73866da5f252dec6d24c47a1c4ee3233450b6ec626de9746ebe095b285558dfc89fc1b622fe #h"df9bab9dd1f22ec6f27116f38831cb2089aa78aa8c073024a0faddd9a48e810a5e8e2cadd80fbf8dbd6088c71fe30b5b1e0e8718567d12d18558c57f9e87a755c309e4ffb497335a3adfc8d7475ce8fd882d5dc33a8f5a16274b7ad74bb7862a") (:secp384r1-signature-test #h"14acd516c7198798fd42ab0684d18df1cd1c99e304312752b3035bed6535a8975dff8acfc2ba1675787c817b5bff6960" #h"0429909d143cf7ee9c74b11d52f1a8f3ebd4a720c135612ca5618d3f432f03a95602ee75a2057e1d7aab51d0648ac0b334404b6c5adffbadfa1b0380ae89fed96ec1ca16cc28661e623d0f1c8b130fbaa96dd7257eae2bf03c2d3dcbc3dbc82c58" #h"b3533ac348a241e255a62e7bc787a44394fd80328621f62f39df170298cc6a1b" #x7f623c103eaa9099a0462e55f80519c565adaeffcb57a29993f3a8a92e63a560be8f0fb9d23dc80bff1064bb41abad79 #h"932ab291950c16b2b19a8036cd2e905714c6229cb190a73b3ea49c48dd8e76063a453c7c3267a57597d2973678216296d17d4c5ddbb9c27beebf526f113b416c8abfad53d11c4224813c7f351ba41a77dd4e77d6e4a65bef2c9f62cc37a469a5") (:secp384r1-signature-test #h"2e780550984f3a00cb1e412429b33493c6eb6cd86d12f9d80588c247dcf567bd04296d2d4b24b889d9c54954b7f38f57" #h"0437dac42ef04663238443ef33e8addee2e78c40d50a1751913a7f5c37d1f23a26c7f86e16055c788b8ca9554f06b2f2efbbed1549652904e3d00c39b01cc0460dbaf3185e6190c2705677a9701de1fe56dff4f4d8418ee15059ff8fc36800982d" #h"8f8009afc17d98d009d1bc84afb81d07e128c941e3312cf807223fc4f33ebb53" #xb788ca82811b0d4e4841765c71eafaa1e575378beedcd3860d8b92db3d070ac5aef7c425067860fbee6c50cf0c642bbb #h"7292b3851870daeb2555a8a2fb198ead78739fcfb75327e5c32a82c6b77d58983e5ad548ccb75dcf9411039c9576d9b9a378c61802d9f1dd062b6e18f16416a954018f77df4df95ad1b983570377d5cfce4cc7861759e802c52f81abc4f49aac") (:secp384r1-signature-test #h"a24d0fe90808aecc5d90626d7e6da7c9be5dfd4e1233c7f0f71f1b7c1c6fd318fafe18559c94718f044cf02ed5107cb1" #h"04ec8ae1fb9bb88589d27d6f27d790392853396f37bc0c381631d85800fc668eea0886bf1c6cff801147df19778d5b16041e1a8336c1e2506f8ee388b55cc648ae73b9295ea78467979d2affb364536fad28120f51ec62a67cbb6ce7784780389f" #h"9611180f5a8b0d8320759910bf653e92accbf1f968d40dec5d8e0350a989b09b" #x755d025509b73cf1ea8817beb772ad150b4c17a52378be187daffe3db0158921e5e552d1ca3c85df28519939f3cb794d #h"23ff2ffa62bbd427d49995d9c9950116e0d5a06ef076a4553448bc109e6482c5e87d4c833bc88de0bc722bc98cae2e619aea13d487c3ea6917e16374caafcf0321c12a80d28902dd8cd81909bb04b8c439e2491e504756742d0d0bfb15a9c34c") (:secp384r1-signature-test #h"1c172e25732555afee7ded67a496f3f11babc0875898619f4519c29321e201e8ba1149f2c20b48e5efba235d58fea7c3" #h"0413e9e2c8bbcfe26e8f5f43c86268c5980ee693236a6b8777f3a7323718baa21005b482d08aafc6fa6e3667d91353544c9ba181b3ee505be030f87ecd249b00670a791489b42af04976013483ff95b630c91c01e95757e906129f2f9b4ce719a8" #h"45607fd85aa1a246e8910dd3164b7c62c23ae515a3b464128a69c78f172138cc" #x08aec9a9e58bdc028805eb5dc86073d05fff1f5fb3fd17f510fc08f9272d84ba7aa66b6f77d84fe6360bd538192bf01a #h"2b4337c3dfbc886ffad7858ae2480cb62227e12205a70361c42f1a5ca9e658ee30fc3cf4030d85bd065edad83b99821f2550cef8574bf17fb3d6b0c9d04ab266962bac3621bac233ff2e4989712d2a4a07171c0aebd3040cd6a32c3bd3efb8b5") (:secp384r1-signature-test #h"201b432d8df14324182d6261db3e4b3f46a8284482d52e370da41e6cbdf45ec2952f5db7ccbce3bc29449f4fb080ac97" #h"04c2b47944fb5de342d03285880177ca5f7d0f2fcad7678cce4229d6e1932fcac11bfc3c3e97d942a3c56bf34123013dbf37257906a8223866eda0743c519616a76a758ae58aee81c5fd35fbf3a855b7754a36d4a0672df95d6c44a81cf7620c2d" #h"31a452d6164d904bb5724c878280231eae705c29ce9d4bc7d58e020e1085f17eebcc1a38f0ed0bf2b344d81fbd896825" #xdcedabf85978e090f733c6e16646fa34df9ded6e5ce28c6676a00f58a25283db8885e16ce5bf97f917c81e1f25c9c771 #h"50835a9251bad008106177ef004b091a1e4235cd0da84fff54542b0ed755c1d6f251609d14ecf18f9e1ddfe69b946e320475f3d30c6463b646e8d3bf2455830314611cbde404be518b14464fdb195fdcc92eb222e61f426a4a592c00a6a89721") (:secp384r1-signature-test #h"23d9f4ea6d87b7d6163d64256e3449255db14786401a51daa7847161bf56d494325ad2ac8ba928394e01061d882c3528" #h"045d42d6301c54a438f65970bae2a098cbc567e98840006e356221966c86d82e8eca515bca850eaa3cd41f175f03a0cbfd4aef5a0ceece95d382bd70ab5ce1cb77408bae42b51a08816d5e5e1d3da8c18fcc95564a752730b0aabea983ccea4e2e" #h"a92784916a40feaebfeab16ea28c0c65e45c5e81eb634052944865708072e20110bd669a9838d7e722e94ac75245cdd3" #x67ba379366049008593eac124f59ab017358892ee0c063d38f3758bb849fd25d867c3561563cac1532a323b228dc0890 #h"fb318f4cb1276282bb43f733a7fb7c567ce94f4d02924fc758635ab2d1107108bf159b85db080cdc3b30fbb5400016f3588e3d7af5da03eae255ecb1813100d95edc243476b724b22db8e85377660d7645ddc1c2c2ee4eaea8b683dbe22f86ca") (:secp384r1-signature-test #h"b5f670e98d8befc46f6f51fb2997069550c2a52ebfb4e5e25dd905352d9ef89eed5c2ecd16521853aadb1b52b8c42ae6" #h"0444ffb2a3a95e12d87c72b5ea0a8a7cb89f56b3bd46342b2303608d7216301c21b5d2921d80b6628dc512ccb84e2fc278e4c1002f1828abaec768cadcb7cf42fbf93b1709ccae6df5b134c41fae2b9a188bfbe1eccff0bd348517d7227f2071a6" #h"b2acf6b4ae1ba9985c1e657313d59157939c21868302f6f5c5dbf037867035ae7c2009bad9fce472579923f7b4b87795" #x229e67638f712f57bea4c2b02279d5ccad1e7c9e201c77f6f01aeb81ea90e62b44b2d2107fd66d35e56608fff65e28e4 #h"b11db592e4ebc75b6472b879b1d8ce57452c615aef20f67a280f8bca9b11a30ad4ac9d69541258c7dd5d0b4ab8dd7d494eb51db8004e46d438359abf060a9444616cb46b4f99c9a05b53ba6df02e914c9c0b6cc3a9791d804d2e4c0984dab1cc") (:secp384r1-signature-test #h"de5975d8932533f092e76295ed6b23f10fc5fba48bfb82c6cc714826baf0126813247f8bd51d5738503654ab22459976" #h"04f1fabafc01fec7e96d982528d9ef3a2a18b7fe8ae0fa0673977341c7ae4ae8d8d3d67420343d013a984f5f61da29ae381a31cf902c46343d01b2ebb614bc789c313b5f91f9302ad9418e9c797563e2fa3d44500f47b4e26ad8fdec1a816d1dcf" #h"ec21c9d03a7270ea9ce7e9ff83211bac2fb104d078217c370248a3aba81f6c586852f19ced56dc71f83f5251d7381c8a" #xfc5940e661542436f9265c34bce407eff6364bd471aa79b90c906d923e15c9ed96eea4e86f3238ea86161d13b7d9359d #h"c2fbdd6a56789024082173725d797ef9fd6accb6ae664b7260f9e83cb8ab2490428c8b9c52e153612295432fec4d59cd8056c5bb57f41f73082888b234fcda320a33250b5da012ba1fdb4924355ae679012d81d2c08fc0f8634c708a4833232f") (:secp384r1-signature-test #h"11e0d470dc31fab0f5722f87b74a6c8d7414115e58ceb38bfcdced367beac3adbf1fe9ba5a04f72e978b1eb54597eabc" #h"041950166989164cbfd97968c7e8adb6fbca1873ebef811ea259eb48b7d584627f0e6d6c64defe23cbc95236505a252aa141ef424b5cb076d4e32accd9250ea75fcf4ffd81814040c050d58c0a29b06be11edf67c911b403e418b7277417e52906" #h"f0272d0a51ee61f86d0875ca7800e12744ef6ffbac72bdda7c54ba24e5a5a6bd69ebe6f429cc20ac12b926d392efc4ce" #xe56904028226eb04f8d071e3f9cefec91075a81ca0fa87b44cae148fe1ce9827b5d1910db2336d0eb9813ddba3e4d7b5 #h"c38ef30f55624e8935680c29f8c24824877cf48ffc0ef015e62de1068893353030d1193bf9d34237d7ce6ba92c98b0fe651b8c3d5c9d5b936d300802a06d82ad54f7b1ba4327b2f031c0c5b0cb215ad4354edc7f932d934e877dfa1cf51b13fe") (:secp384r1-signature-test #h"5c6bbf9fbcbb7b97c9535f57b431ed1ccae1945b7e8a4f1b032016b07810bd24a9e20055c0e9306650df59ef7e2cd8c2" #h"042e01c5b59e619e00b79060a1e8ef695472e23bf9a511fc3d5ed77a334a242557098e40972713732c5291c97adf9cf2cf563e3fe4ad807e803b9e961b08da4dde4cea8925649da0d93221ce4cdceabc6a1db7612180a8c6bef3579c65539b97e9" #h"e114c6204bee5bf0bbdf9ffc139bb99f09e7ea2186da3ee1e011dd059185d57c4953a130d34ff0df3fc6782dda199ee8" #x03d23f1277b949cb6380211ad9d338e6f76c3eedac95989b91d0243cfb734a54b19bca45a5d13d6a4b9f815d919eea77 #h"abab65308f0b79c4f3a9ff28dd490acb0c320434094cef93e75adfe17e5820dc1f77544cfaaacdc8cf9ac8b38e174bef11b783d879a6de054b316af7d56e526c3dce96c85289122e3ad927cfa77bfc50b4a96c97f85b1b8221be2df083ff58fb") (:secp384r1-signature-test #h"ffc7dedeff8343721f72046bc3c126626c177b0e48e247f44fd61f8469d4d5f0a74147fabaa334495cc1f986ebc5f0b1" #h"0451c78c979452edd53b563f63eb3e854a5b23e87f1b2103942b65f77d024471f75c8ce1cc0dfef83292b368112aa5126e313e6aaf09caa3ba30f13072b2134878f14a4a01ee86326cccbff3d079b4df097dc57985e8c8c834a10cb9d766169366" #h"f11e38f4037ae3ffd0fde97c08e2e5acbc26e3ac5828a86c182232be90ef6fc0f5d21a9b1a7b93472d78c103b4136019" #xc3de91dbe4f777698773da70dd610ef1a7efe4dc00d734399c7dd100728006a502822a5a7ff9129ffd8adf6c1fc1211a #h"f4f477855819ad8b1763f53691b76afbc4a31a638b1e08c293f9bcd55decf797f9913ca128d4b45b2e2ea3e82c6cf5657c26be29569ef95480a6d0c1af49dc10a51a0a8931345e48c0c39498bfb94d62962980b56143a7b41a2fddc8794c1b7f") (:secp384r1-signature-test #h"adca364ef144a21df64b163615e8349cf74ee9dbf728104215c532073a7f74e2f67385779f7f74ab344cc3c7da061cf6" #h"04ef948daae68242330a7358ef73f23b56c07e37126266db3fa6eea233a04a9b3e4915233dd6754427cd4b71b75854077d009453ef1828eaff9e17c856d4fc1895ab60051312c3e1db1e3766566438b2990cbf9945c2545619e3e0145bc6a79004" #h"f8d0170479b2d1a8f50c80556e67ff345592c8b7dcda4e4f6099f993c1a71bff6d3b60190715ae1215a8a759a8eb13df" #xa2da3fae2e6da3cf11b49861afb34fba357fea89f54b35ce5ed7434ae09103fe53e2be75b93fc579fedf919f6d5e407e #h"dda994b9c428b57e9f8bbaebba0d682e3aac6ed828e3a1e99a7fc4c804bff8df151137f539c7389d80e23d9f3ee497bfa0d6b10ceffd0e1b29cf784476f9173ba6ecd2cfc7929725f2d6e24e0db5a4721683640eaa2bbe151fb57560f9ce594b") (:secp384r1-signature-test #h"39bea008ec8a217866dcbdb1b93da34d1d3e851d011df9ef44b7828b3453a54aa70f1df9932170804eacd207e4f7e91d" #h"045709ec4305a9c3271c304face6c148142490b827a73a4c17affcfd01fffd7eaa65d2fdedfa2419fc64ed910823513fafb083cda1cf3be6371b6c06e729ea6299213428db57119347247ec1fcd44204386cc0bca3f452d9d864b39efbfc89d6b2" #h"86bc7536faf2de20028159ce93e293d0a7f5721fb6680b5b070c3f70aba845de2eaed9245144babc38c49cce59f3eac7" #x3c90cc7b6984056f570542a51cbe497ce4c11aeae8fc35e8fd6a0d9adeb650e8644f9d1d5e4341b5adc81e27f284c08f #h"d13646895afb1bfd1953551bb922809c95ad65d6abe94eb3719c899aa1f6dba6b01222c7f283900fe98628b7597b6ea64a9a38afda04c0a6b0058943b679bd02205b14d0f3d49b8f31aac289129780cdb1c555def8c3f9106b478729e0c7efaa") (:secp384r1-signature-test #h"e849cf948b241362e3e20c458b52df044f2a72deb0f41c1bb0673e7c04cdd70811215059032b5ca3cc69c345dcce4cf7" #h"0406c037a0cbf43fdf335dff33de06d34348405353f9fdf2ce1361efba30fb204aea9dbd2e30da0a10fd2d876188371be6360d38f3940e34679204b98fbf70b8a4d97f25443e46d0807ab634ed5891ad864dd7703557aa933cd380e26eea662a43" #h"1128c8b09573a993adaa0a68f3ca965db30870db46de70d29e3b9a7d110ba0cd57633f1713173c62331b36fb925fa874" #x32386b2593c85e877b70e5e5495936f65dc49553caef1aa6cc14d9cd370c442a0ccfab4c0da9ec311b67913b1b575a9d #h"5886078d3495767e330c7507b7ca0fa07a50e59912a416d89f0ab1aa4e88153d6eaf00882d1b4aa64153153352d853b52cc10023bf1bf8ccfd14b06b82cc2114449a352389c8ff9f6f78cdc4e32bde69f3869da0e17f691b329682ae7a36e1aa") (:secp384r1-signature-test #h"217afba406d8ab32ee07b0f27eef789fc201d121ffab76c8fbe3c2d352c594909abe591c6f86233992362c9d631baf7c" #h"04fb937e4a303617b71b6c1a25f2ac786087328a3e26bdef55e52d46ab5e69e5411bf9fc55f5df9994d2bf82e8f39a153ea97d9075e92fa5bfe67e6ec18e21cc4d11fde59a68aef72c0e46a28f31a9d60385f41f39da468f4e6c3d3fbac9046765" #h"f863cf3749ae5256da0ceb2e6d391fcce939b1490b024527687b1a2908da35c48b44255d82956c76d70672c41c6456d78c57342e932490083f73016b560a0245" #x90338a7f6ffce541366ca2987c3b3ca527992d1efcf1dd2723fbd241a24cff19990f2af5fd6419ed2104b4a59b5ae631 #h"c269d9c4619aafdf5f4b3100211dddb14693abe25551e04f9499c91152a296d7449c08b36f87d1e16e8e15fee4a7f5c877ffed5c61665152d52161dc13ac3fbae5786928a3d736f42d34a9e4d6d4a70a02d5af90fa37a23a318902ae2656c071") (:secp384r1-signature-test #h"0a3f45a28a355381a919372f60320d6610cfb69c3e318eb1607db3cadfc42b728b77a6a9e9e333de9183c58933daf60f" #h"04832cbb7061a719a316e73dbad348fa67cd17c33f40b9000a3d3b691a2a2cd821052566717c3ead01089b56086af1366f1e15a048d1dce642d9ebcbfac7f92b1bcee90fd0240cc79abd29e32e0e655c4ee1fd34fb88178bba92aca100e7794ed0" #h"68944ca920620e1d42184d264c4ffe295882f00079f9daaaa0efc305fe10cc7bbc667985c148eacb51ee1c05a6d8a861e98371a045e11e18e200ad52d5b4cb13" #x2a78e651623ba604c42cf094fc7d046629306f508853427ba091448800d1092c041bb2323035fc9d19a8d44950f7dcc3 #h"0db0cc9a2bda8dd7e565ad36f91b1c5756d78164dc8a72a5bee4b6bc45ea38c7a16b01d05b1893d4e06b62db24c30385abd383edaeda7d0b8de1b54fcd3c28874fed62ab266f1f84c8ba796a7b54e5e0695fdb43ce7fe90ed00fa468d87bca64") (:secp384r1-signature-test #h"2e408c57921939f0e0fe2e80ce74a4fa4a1b4fa7ab070206298fe894d655be50e2583af9e45544b5d69c73dce8a2c8e7" #h"04a2b24a5ad4a2e91f12199ed7699e3f297e27bf8b8ea8fbe7ed28366f3544cd8e680c238450f8a6422b40829d6647b25c2732be0075536e6519f6a099b975a40f8e0de337fa4d48bd0762b43f41cab8deafdef9cfbb9973e457801e3bf9c93304" #h"8876ecd423fd0e903364fac777897b80b31c03f0f1ef1678372a6cb240ab701e49b51b798fd8e588ab39db7d3c77879901916babdd0ef0632cc16d5ccb9d1535" #xb10b6258afdde81f9c971cc1526d942e20cafac02f59fee10f98e99b8674636bff1d84a6eaa49c0de8d8cfdc90d8ce84 #h"be428a8de89a364a134719141ee8d776a3a8338f1132b07e01b28573d8eaf3b9008b63304c48821e53638b6141f9660b866181dbef5c147d391bed6adcee408c339982c307adc718c2b9ab9e5642d8dedc36dd6402559a3ab614c99c1e56b529") (:secp384r1-signature-test #h"1c285da72a8eb1c3c38faab8d3bb4e68dc95c797082b9a3991a21c1de54759071ecf2265fb1eff504ab24174bc6710cf" #h"0411acb1b5cc59a4f1df1913a8d6e91cbdafb8206dc44aff7d9da45906b664fc33194d9935a82aa4d62f39618897c86025832ed0b9575fff52a3603bfe89f312751b4c396da98324117a61b3f525d27b2266f6cfb22be07e50b6874435e380ed62" #h"2a1a866fe1596c484c38ef78bdda2e9783dd9f8df86e93e56f86cfb467e9f457d27e02d36e0c23d63401d82765e5e1a8065ad8f3a67bb0db356a6a1c5a63df27" #x2513075e02cc7fb3cff7b7adde46da31c5493749b5cf02758bd5b098a838bfd4d5e4c7fb8268bdc37e219c30efebe878 #h"b3d638b3be45f14f170da5bdc22d2114deac93ab340a25b3af2b5c18584bb9147e00dc6c67a2274f79aa4838793eb63f876112bdca2c725eb2f6dbd76d07710a31f0c16d38430cb0817f320a25a9ecfec8a66137d0304612ae29a6a484fd3319") (:secp384r1-signature-test #h"9da37e104938019fbdcf247e3df879a282c45f8fb57e6655e36b47723af42bec3b820f660436deb3de123a21de0ca37b" #h"04722d0ea6891d509b18b85ca56f74deb5c3030d2a30433824123d430d03c99279572c3b28ecf01e747b9db8acc55d0ba37e2605ea7092214f366f3639037bffd89fe103c646e990839d3a1ced8d78edb5b9bc60d834fd8e2a3c17e920bdae023a" #h"96768f5d5edae35aaabf1e32158525b0cfb28a74059a48e053208e4a655f51a8fabb63e3a7e7c70be9945b1954f9bc48247d9f19c98328b8d65030d37a71b84b" #xc8c18e53a9aa5915288c33132bd09323638f7995cd89162073984ed84e72e07a37e18c4c023933eace92c35d10e6b1b6 #h"6512a8a2be731e301dcf4803764297862bbfa0ac8daed64d8e98b34618ecb20520fc5d3cf890b7783edf86e7ea4075414ff10301f7b4168fae066361376007c1d7aa89a75c87719d0b54711ffef5ef3726f3eef84f7ebc025c110bde511b17f6") (:secp384r1-signature-test #h"0661ab3bf9f7bef51bec7dff758de289154557beb9ce18cc4b8cc09a871e8322af259cf188b593dc62f03a19e75f7f69" #h"04b4f100558043858efa728082d9b99ad5192b59b0947434f5ba7ff2514508a6d71ba54e7221c31cb0712103272b3f6fa434f6df4eeb2da11498044635067c2715ed15ae251c78ffb9030d87909ea8539b66394e93109ca54c0406cf99960c3e93" #h"c2a0f9cd8fe7d7a951f19d373ad97dc7f95219cd2b8498552a3352f1a4b0e4ee25c7a7a51b1e47b66640c320e503a53dc76af6c08141c8936ec8cbdc038cb7a8" #x84a87137edb6894f96c5a8e94a3765162034feb84dfea94e1c71411170c285a80321ec7999e25861844143209804882c #h"4dc9d1b949b36e3c3847ac1c7ed114e1bc9cbe76119cf6fcd3f1b69ee6ee54e3255f1bb288fe2f8bd6d4049a21793c2756a561d647b62ccae1e6df818b1a6fbde66c82ef0ff69ee415f183e7daf76be22630c7e02cd3fd729dfa490f26824584") (:secp384r1-signature-test #h"66e7cfdeb7f264cf786e35210f458c32223c3a12a3bc4b63d53a5776bc9b069928452484f6241caa3781fd1a4109d4db" #h"043c7682de540ab231daf21bf9fc80bda6abf7e17dcc79d476c7b7c3bd4d42d386877fd8ba495c1b0333e04fb5fd2a15050a1582e4f4d72abea9d3476aff8369c41261f0c5dddf2ca82e10f7a163f73df09473d9e5e2552187104e4cc7c6d83611" #h"cc04e32af9b8c178039eb9b1cece8bd89079ea400e35bb912e5efec06eeb02f9a12905383acbb5551b949f225998169818e3e9e6bd2cb0c08e10895f022f3be8" #x2fa266f5cce190eb77614933ca6a55121ad8bae168ff7a9043d96d13b5ca2fe70101ff9fe1e2b2cd7413e6aa8f49abde #h"e7ecda9da0c52d0474a9f70094dc8f061d7d6a22210d3b69a7be8f389aa666f256322099b87d16ad35357ea856574dbaba348eb40a2830ec5a1130264ac0a8675420b1ae243e808a778135809ece21f42c0c881166321102b4f02df4c5c7ed9d") (:secp384r1-signature-test #h"92c2f7ee64af86d003ab484e12b82fcf245fc330761057fec5b7af8f7e0a2d85b468c21d171460fcb829cae7b986316d" #h"04ca43a306479bf8fb537d4b9ff9d635bbb2a0d60d9e854d5b7e269d09d91f78c6b90b616e4c931629453645a2bb371e14356c4d7f10e690614eaf7f82ba0f9dc1aad98130c0ad9fe353deec565cc04bef789a0a4242322e0058b46cd02f2de77d" #h"cf638b5ae7d04e6edc97be83aa2598afce555f9f85893208b7a5192ea84b08cbd10b54d0f5ee6e11e86a31252d766dfd927f724f276a52eb43c98fc16c4f7333" #x6ec81fb74f8725ba225f317264460ee300cfd2f02092000989acbdad4799cf55c244a65c557113328fe20282e6badb55 #h"cd7a4309bcebc25a8e10899fe2eda5f8b2dbcf329cd2f3d65befd67393e83fba2f8a67a15c01a6ac8314f9f5e87a9dca6dcfc0426bc148e67e91d4784e3d7e9bc3b7ce3676be62daa7f3f55dfdff6d9dc735b5e3e0bbd0785db1f76f7ac065f3") (:secp384r1-signature-test #h"15347caaad1067f1848a676bd0a8c52021ae604b79d02775a0459226e0391a3acd26653c916fcfe86149fb0ee0904476" #h"04e5a0463163964d984f5bad0072d45bc2059939e60a826ccca36c151460ae360f5d6679f60fe43e999b6da5841c96e48a30f2dd425a3fa2c95d34124217250b39e3b4a14f3e6e415ae8e5b0409eb72f43f78b64d0ce6f2d49980d6f04cd1391db" #h"4f381df1ba39833f9f10e4b88314290ed04b56a8cdc4eab26d7b8b2bb03b5add622d8323b9fce5c794027b91578fdbd17208cb238cb1c8bfab7485c81bf45a90" #x1a2d224db4bb9c241ca5cab18920fad615fa25c1db0de0f024cb3ace0d11ef72b056885446659f67650fdff692517b1c #h"87b4de0fb21df38dfc9a4b1e350da67547e307f55b5b9dd6615e408afe7c3553a6e02722847367439e636074faa2182b375d965753b9ed6c6c08576726f8308c2f8dbd2737824464e71265d47907e26f615bbeb8203ec617520d4ecd1851dc44") (:secp384r1-signature-test #h"ac1cb5e59bda2eff3413a3bab80308f9fb32c595283c795de4c17fdae8d4647b5f108fd0801aee22adb7db129283b5aa" #h"04bc6b1a718284803553c173089c397870aaaecca579bb8e81a8cfa12473cd2057567fa8726a19ed427cc035baeec2c55114f82997d1129b669f0015350e47ad561b1b13441af4fb44656f15ed0c5706984d66655accc52f2e943eef39cb1cdc21" #h"d1a787cdf3c1c6c807731083e28a75a1df39f43d19a16ff121ca10b33111b5c71c561542cb61c2cca85a1632ab5535596c659d8b257df95be175843d246e6232" #x8053a46e875f446056b06d4318fa3e8977622de7207cbf0996bf35b0e9b19aaa507f642bcf0be9f048f1af09806f6946 #h"a994eb15b64114ce8a9342d18b5edda96a6d76314a5ac03da723699177d352a4a9f3b7121b11a91e43a6af4025da51d68183ae33a888e99aa76882da0a6705ad102f2bbd9572fad0d2e4d6d70151970469e00c5220e59c14724d771c1384b302") ironclad-0.57/testing/test-vectors/secp521r1-dh.testvec000066400000000000000000000040071420372057600230030ustar00rootroot00000000000000;;;; secp521r1 test vectors ;;; Test vector from RFC 5903 (:secp521r1-dh-test #h"0037ade9319a89f4dabdb3ef411aaccca5123c61acab57b5393dce47608172a095aa85a30fe1c2952c6771d937ba9777f5957b2639bab072462f68c27a57382d4a52" #h"040015417e84dbf28c0ad3c278713349dc7df153c897a1891bd98bab4357c9ecbee1e3bf42e00b8e380aeae57c2d107564941885942af5a7f4601723c4195d176ced3e017cae20b6641d2eeb695786d8c946146239d099e18e1d5a514c739d7cb4a10ad8a788015ac405d7799dc75e7b7d5b6cf2261a6a7f1507438bf01beb6ca3926f9582" #h"0145ba99a847af43793fdd0e872e7cdfa16be30fdc780f97bccc3f078380201e9c677d600b343757a3bdbf2a3163e4c2f869cca7458aa4a4effc311f5cb151685eb9" #h"0400d0b3975ac4b799f5bea16d5e13e9af971d5e9b984c9f39728b5e5739735a219b97c356436adc6e95bb0352f6be64a6c2912d4ef2d0433ced2b6171640012d9460f015c68226383956e3bd066e797b623c27ce0eac2f551a10c2c724d9852077b87220b6536c5c408a1d2aebb8e86d678ae49cb57091f4732296579ab44fcd17f0fc56a" #h"0401144c7d79ae6956bc8edb8e7c787c4521cb086fa64407f97894e5e6b2d79b04d1427e73ca4baa240a34786859810c06b3c715a3a8cc3151f2bee417996d19f3ddea01b901e6b17db2947ac017d853ef1c1674e5cfe59cda18d078e05d1b5242adaa9ffc3c63ea05edb1e13ce5b3a8e50c3eb622e8da1b38e0bdd1f88569d6c99baffa43") ;; Same test vector with compressed points (:secp521r1-dh-test #h"0037ade9319a89f4dabdb3ef411aaccca5123c61acab57b5393dce47608172a095aa85a30fe1c2952c6771d937ba9777f5957b2639bab072462f68c27a57382d4a52" #h"020015417e84dbf28c0ad3c278713349dc7df153c897a1891bd98bab4357c9ecbee1e3bf42e00b8e380aeae57c2d107564941885942af5a7f4601723c4195d176ced3e" #h"0145ba99a847af43793fdd0e872e7cdfa16be30fdc780f97bccc3f078380201e9c677d600b343757a3bdbf2a3163e4c2f869cca7458aa4a4effc311f5cb151685eb9" #h"0200d0b3975ac4b799f5bea16d5e13e9af971d5e9b984c9f39728b5e5739735a219b97c356436adc6e95bb0352f6be64a6c2912d4ef2d0433ced2b6171640012d9460f" #h"0401144c7d79ae6956bc8edb8e7c787c4521cb086fa64407f97894e5e6b2d79b04d1427e73ca4baa240a34786859810c06b3c715a3a8cc3151f2bee417996d19f3ddea01b901e6b17db2947ac017d853ef1c1674e5cfe59cda18d078e05d1b5242adaa9ffc3c63ea05edb1e13ce5b3a8e50c3eb622e8da1b38e0bdd1f88569d6c99baffa43") ironclad-0.57/testing/test-vectors/secp521r1-sig.testvec000066400000000000000000001320321420372057600231720ustar00rootroot00000000000000;;;; secp521r1 test vectors ;;; Test vectors from NIST CAPV (:secp521r1-signature-test #h"01bd56bd106118eda246155bd43b42b8e13f0a6e25dd3bb376026fab4dc92b6157bc6dfec2d15dd3d0cf2a39aa68494042af48ba9601118da82c6f2108a3a203ad74" #h"04012fbcaeffa6a51f3ee4d3d2b51c5dec6d7c726ca353fc014ea2bf7cfbb9b910d32cbfa6a00fe39b6cdb8946f22775398b2e233c0cf144d78c8a7742b5c7a3bb5d23009cdef823dd7bf9a79e8cceacd2e4527c231d0ae5967af0958e931d7ddccf2805a3e618dc3039fec9febbd33052fe4c0fee98f033106064982d88f4e03549d4a64d" #h"1bf7039cca2394273f11a1d48dccb4466f3161df" #x06fdfbd1af79c6c91da3eb00e494e18107d8431d5bf90f4b3db33114207a5add73114b50f97bee07443b9f14ff43155899476be2e91f27aef31a781aacb5e6225bf #h"00bd117b4807710898f9dd7778056485777668f0e78e6ddf5b000356121eb7a220e9493c7f9a57c077947f89ac45d5acb6661bbcd17abb3faea149ba0aa3bb1521be0019cd2c5c3f9870ecdeb9b323abdf3a98cd5e231d85c6ddc5b71ab190739f7f226e6b134ba1d5889ddeb2751dabd97911dff90c34684cdbe7bb669b6c3d22f2480c") (:secp521r1-signature-test #h"002d1b3b6e623bd4da81433a1f879e439ed0703c2ef318189a6e063fb41e667b22cfdf0114b2454a8f1c97907b6d2c4b2e930faab26dfa8136ac8ff9734463300590" #h"04006c723f4d9b93a179f7aedf617150f3154c8a260c457e138e1c5d41eea2f64d94b3ffb59d756435b6445d4e2f2bb4eb30b6de352d3d035cc033ed8ff5492e2c8a97004e392a39ad8e787f6cf507fffe55d5ae9d0c3f080debdcdc391fb00b84e7c3f9558fb67a3f923b4b06e0c2f94797344ba6bcd1766f7460dff2e99e2c348fa2b3cf" #h"532b3b9caab0a999157445da77dbddf666d5379c" #x037239dd949da0d2c4cac089ba80b6b3044520d9685191fd56f86535e94a7313f5da68b6ae7975427cf150fe448cc4ab4773815df1d4a7f8a0027923b3b0fd537c3 #h"0058b408af21dbaec528125c8a6507fa7a1770e3505c8461b25fe3cf020693b3e5fd5f184c5ebbc5bf3bfa66a1b43290ce52677e42957d8765df9d59525aaceaac3d00a7303625b965ca567211f03ca915bd5101afad687081f2bb38a98e970da0e1dbe5997bafc0113e69e84bf77d30085f22e77db6e0bb7fe90fb3ee1d571bcf11ecd4") (:secp521r1-signature-test #h"00d033879f6a89517fcf1578483bd4b73ec5ee1f5374fdd2217e21ed85afbc62b2e5e08a6f9c3b840241d4b12ea6888396e1047b0a9262b377daee113fd0b557eacf" #h"0401b026f9d1e25e16c7562e73d808ba852cf3642d6b4126fd2b63ec4439465ec4434e4b604d0a75c468868b631e5cdba5e00cd928a4f7314a264264011c6cfba0d4dd00fb3b429985a1323cdf7fbd9db89c58a4586c3aa37d4000ec87a15eb29be4b05f43c7d16ec4ce7779ea527446bcd8211deb8e73bbd3dfcc57ffc120a71b25edce2a" #h"13a71c788716dd9323bc647518e66d48939795e9" #x0b6674ea73861ca2527f90fd2e569dd22b9c9a5b86409ee2c3bb881e16e60b2ccc5ceabd8e05d0d67622c67929f2c3ae63dafe9868949854a48361b2d61524d46f3 #h"0149d319216de2e5333faa15a1c13549421834d4eda6795b0c77267399959307d5129a1f91f9f132f468f9273f98ceb19bc5432f0329965dd28b98a94767045f14af01acee37434fdc62ce3302181c540f397ed039529bc1b5de5bc4ad49b2dbfac070653e3d4393dada59c1e980f5de232db2ade0dea0d9b21dcf2c6df138aa0a5888c5") (:secp521r1-signature-test #h"009e26a1f92eed3a6bb92dc69203d30a9aa4fdf31f5e88f50df52fde253bc7a6d7158060f65212f04a81b3317dc2597eafffdab2ee909f43458d91a52215f20610e6" #h"0401febce6692598637c582bc370cdfdc9e3ec0936599109d5e1e44168163f676f722df00f9aaac853b207e32d8b9a2f2ad6c48ca9d70d876f9c4f5b8cb9f299180fed01461f762807c7286818aa905554f10fe9975b9b1bb7f5dc5ab6d5a468e027736e92fcc5f683ddf3cd8b9ebd08a3bbf8dd5b26b0714d676840ac8576e28f09aa879d" #h"ad5da3aa7c7a67d84e03aad3cb848b7c656d85db" #x0e6da1f25f890582284fa5650e975505cf64eef2227e522b8e3d42008c1a423b4c57f9e5ff913483754f238a6f9fa2b260fb3de94fb7c4a15f62b93a1cd2f805f67 #h"01a0540eb9653485aad3bb671edda4373235bb584441881bf7a0d85c9f39d20c9eebf73015f1edd718ec558a46e0958f108eb70357ec3d0bd94399139b5249921f26011dd71b173e8e50290f8649c363d6e74d2341a81fb7e1960b00e7b944cf0985547a73a48c7220627646770f28219833ed1cbc5f8601f9966f6d6c32715704aa4edb") (:secp521r1-signature-test #h"007d273e0d5835950b41f31200817f05e3391ece80b499fddbda7c081e10f1db5dac6bfa2607d21f821cef7bafec95c457f35856f06b2c56320033bc6352c207bb7d" #h"0401ce9ce8fcfc613f4667ded6b56e0eb8afa5eb83ef124e7e3bbbc5d33d2d80094cb38dc31e678e27c3193000fb8c4b84af9c331ea6b77d300efef31b20954b1571eb012f374aa12e3c127caf052c713a44e0ef52849d0fa0521ecc750441b5ccb051263998404d1927fd2a991705c5b64c7d942a46e156d178fb49612d8aa51883f6bbd4" #h"10ac7fd71b799d45c3ab7837b83723048dbac11a" #x032e33c75c4c038afaa14574aa17c4351e81f351cc6b0a22f9c58910c0808fb1b50a568d33c73fef4b77bf788ef4d29d644c609ed2869f0b47b71273117f9b3851e #h"015440668a7ab64171d3f12225119d4b91f7b734b1eff9abc64a38727e54e664ae65d198d7923c2bcd9e77976e562408362fc6576493e33c7a9ffa45cfa54b593a0101db168f3832705ca233f141224445420b4a84f6e45f02c27a87dbf64217ac9c464cdc5c65ac06b8cd7012c4090b7a4117496dedf88229c3b6570df51c787c2f2069") (:secp521r1-signature-test #h"0051d8c084706396e3441c9ac94db577e91b6d232220e109008b32a770233f0929a4636b1ec7c8edeb28918ff0f58e0589844b8c96785e06bb40250026f742751f03" #h"04002cd83921dd9338cbd288a97df29fbe295e7bd650ef201ea7ee2b58cf0e02ba97d67416d968a0a1c419bd80c125dcb096135e2fa9916eb103e1456ec67cee60681501d5831b764b4a252f3549484c4c7fd626d59cd388ac0669c5a5dbf6aa5f8315dce3f988e00cc11b4eb29f4aa8265c9d961b3f7ba2025d277a290479848106806d3f" #h"2295b31d5d75622ff62b906d0243b8c81dd264a2" #x07e4907956a25e5d86fddbc1d7b863c75746fb051c721a031866f58ef316e33231486fc556c6ce442bad99dacb70cf2588d2c2402c1d754623b891116ba43b14282 #h"017b795f02dc1ca6dba828702c7860579a5aed9a13cf2f83509d4ba8c0effb611ba198c6eea38a3037e9d0354eaeb07055962dd7d82916dd7652fca8594ffcae17d30184f86ae4f8d1dc97014a754e2aea5edcc9a8755626e2cbeb493b8cf3ebe97953feb8087b252c88523b1e283f9e83db6595266c22f21c4d0d82802577f99814bbd9") (:secp521r1-signature-test #h"013d8de8d8762dc54a6f53bb44cbbd2fed36b48b91dc072fa8f1f0152f36438424522a1037a60948b7323d7575aabce68113c1d0c6a1d91351ebe694a8d14fd6d09b" #h"0400ea3a0c7c21f700181737588ad68a33a55c46838ec79b1b657c33b19224645ebbeb469d80cc9e7c6f5592fe8b128257d49ab202777d800aaa2d749fd2acb8a1bfa2005df631eff2d082a6b111c2c8a448c6f70d2f77bf9822de04f5b95e1cc75d973354dbd9d87c0cb5d42839025cfb2bff9ac3b96626f3e3844985982c630ce0c1de09" #h"1ec45d6751f34b7fe50d40fdadc8991cf5171d68" #x118b782b87b98cd5c05d7993ebac9617f883471b4b5b9fc1dade182e399e962b0e75153b7d64e0e4fd7de4cd460aee188592dbfa8a88f391d28538cdffdbffc93ff #h"00af163167a3d73de5714e108f0d04379ccf60fb3983ddca76fef077c0d093cb68bf600251d7f47e32ea348f73c637bda0b3d4ae68b9eef512ea01ed5f64f38b0d240133af4bc060b00b05a2df982e059949cdefc2f38a5208546620ae0c2efcff40acb68973c4889708037135db6120c2022a2dabb4429bff9a452422d74ae612e4c241") (:secp521r1-signature-test #h"0088cb094e5667f3c0aeffce6718c8147108a78c50b8e8500f25dbbae3a604903b19c6d82927a745ba2e3ec97c7e57d6b5030768f7e01064e11af1db1b6b0bb1a621" #h"0400ea442ef42c1dd34fb4c65501e9bda6073d37aa993ec353e7d731e423dfb577206847685fec3d0ef2c0ec33d31bf6464bccdab9549b900d77800531dfc48464172600d05aac36017c71ee856fef9cefbe1859b7b6e92d69e1a38f792ca90c51e270eb0ec1a9e304b26e5589c6fe2ebe7c7637885a0f108f87a9ebf67c7e1c2a7bf288e7" #h"2bf581b8a009a740207d8a7cab129b351df907db" #x17cef489985944e18d4a75dcc7fbd6669d593dbc00a96e38857056784349431d5ee662210ca37377d027d436bc86f3af6ab1cf863b432f346153f27f349e41d3a28 #h"01c68969ba75f63ba76a66c90d48315e532f7747e50719d23515339c79ba5bc24115793af7a68f1956ac85d3c46b23199134c9f310a8d6c4a2954664c61f4b7224290198d12602acc4794e02c2cc6d00e62552be24b1cdd6cf883aec83aa457389fbd21f8fa72957485e74b69b7cfa07097f404ea8d2bfb801e9adb74b9ad80fde36dfa8") (:secp521r1-signature-test #h"011d67e954684cb1c60b6103dcded3e7ea2b0b5bfcdc09f10fe24c4c26e9c23b7ba69314a6615f30378e524f4d4bdd94e75aa4370b355d4fbfbcc0f548382fc0edcd" #h"04015270a6e3348effcc678b2865c871e44ffb1733445e58a084dd0ac221a6b64ec25675092ff219ae178e063e80b74be85d47401512bcb3c3b13329883f216b3180c501c2b0296a765d707dbd4f75dc64d10ef35ac5015c670db2e4215f85587ae7d6934c64cd11c3a8c55030aced791852048913cab0db9b983f589001fd2acf9176fcde" #h"82fd980d55dc2e669001e52583c97f886a7f0759" #x04ded3f651f55738cf034d1ca129c13e7eb0594f050b3e44cf17ee3685878e8a41cf309002d9358b063a5010a9552ee30af36f93f136a06c1fdbdef5b59c30f8c49 #h"001ba80beb9367210c963fd7791c332c76f448e8a315e98d4c2c61a2ee9bd6e7433fa80dcd0ef4a96df6105f1aae768c82676a8ac180ab153487d9adcaedd404f0800126fc7e5a4136e1b2ca8e4001dc148f4e612d8902cb79b1dfc927cf60667d823a90b6872b16b95f7cb00813b5ba5bc59dd2ca9694293ffbe403b6c46e42a5b6e98d") (:secp521r1-signature-test #h"004a72502386c16bb07cb050474458792aba0d4201e7cf80a0aed5326e40700bc7be90276ea0eaa74878d232a4142c7d5b937fa8616d3b16c887f89cfa6c21f99774" #h"0400de92e6c832b0b970ba4052fc182aebcd0c23eef8825720857d02487c1dfc6ba4a3ccbec20e314a3d531b811762b6946c0020bbdbdc59c7a8c3466646753b8616240056e3adfc41bae352eb57c3592b3c7c2c360722f8bcd7a910963817e2ad82f82d880225c785c96ee33799bfdb44d1e50cc1b10b230a767478d11f019df9598bae7d" #h"97d2a3a674c5996678d7ab5c82fb581d135f700b" #x0b5f1b5270855ca83ae71b08a9f9ce839329d6b000fd85a5e4a42436cfefa0661230e7ab0aff8982d1a1ce3263832d311f7600179b34f37a49026f536366b8c49a5 #h"010c5a575b1871851b589c76ccc625c2189b2f14b001552364f4b17d8fcae95b5f259ebe71063459ab336183a4a8b1438987349ff5ab15bc6d11db1115f1c74496bd0066364550fd07fae74ce722dfbe92986642dc27e36521a31bf74ab126ba8f55062ddb83cc245c9d985d5b8c0be3418348758ae0f631a2f8f377ef553cc5fcad623e") (:secp521r1-signature-test #h"01d7bb864c5b5ecae019296cf9b5c63a166f5f1113942819b1933d889a96d12245777a99428f93de4fc9a18d709bf91889d7f8dddd522b4c364aeae13c983e9fae46" #h"0401a7596d38aac7868327ddc1ef5e8178cf052b7ebc512828e8a45955d85bef49494d15278198bbcc5454358c12a2af9a3874e7002e1a2f02fcb36ff3e3b4bc0c69e70184902e515982bb225b8c84f245e61b327c08e94d41c07d0b4101a963e02fe52f6a9f33e8b1de2394e0cb74c40790b4e489b5500e6804cabed0fe8c192443d4027b" #h"84358f87f45970a080efcb8b1d9284c8e61e06edbf5209b1a9db9cbc" #x141f679033b27ec29219afd8aa123d5e535c227badbe2c86ff6eafa5116e9778000f538579a80ca4739b1675b8ff8b6245347852aa524fe9aad781f9b672e0bb3ff #h"006b973a638bde22d8c1c0d804d94e40538526093705f92c0c4dac2c72e7db013a9c89ffc5b12a396886305ddf0cbaa7f10cdd4cd8866334c8abfc800e5cca36539100b0a01eca07a3964dd27d9ba6f3750615ea36434979dc73e153cd8ed1dbcde2885ead5757ebcabba117a64fcff9b5085d848f107f0c9ecc83dfa2fa09ada3503028") (:secp521r1-signature-test #h"017e49b8ea8f9d1b7c0378e378a7a42e68e12cf78779ed41dcd29a090ae7e0f883b0d0f2cbc8f0473c0ad6732bea40d371a7f363bc6537d075bd1a4c23e558b0bc73" #h"0400156cd2c485012ea5d5aadad724fb87558637de37b34485c4cf7c8cbc3e4f106cb1efd3e64f0adf99ddb51e3ac991bdd90785172386cdaf2c582cc46d6c99b0fed101edeeda717554252b9f1e13553d4af028ec9e158dbe12332684fc1676dc731f39138a5d301376505a9ab04d562cc1659b0be9cb2b5e03bad8b412f2699c245b0ba2" #h"962bade1e8227c9f2a069177fb89dab45c4f7e8e2f81fdd206b0b99e" #x1dc3e60a788caa5f62cb079f332d7e5c918974643dca3ab3566a599642cd84964fbef43ce94290041fe3d2c8c26104d9c73a57a7d4724613242531083b49e255f33 #h"012592c0be6cce18efb2b972cd193d036dcb850f2390fa8b9b86b2f876548bc424fb3bc13c1e5c415fa09d0ecfcae5bf76fb23e8322d7eecb264a2ae6d20ef50d405011bc9713be88e3b9912a3e5f5d7b56f20573e979b1a75d04ce339f724bddffa4665d25995fe24d32507d8a07c5e10169f5338ef2827737f7b0291752b21237217e3") (:secp521r1-signature-test #h"0135ea346852f837d10c1b2dfb8012ae8215801a7e85d4446dadd993c68d1e9206e1d8651b7ed763b95f707a52410eeef4f21ae9429828289eaea1fd9caadf826ace" #h"04018d40cc4573892b3e467d314c39c95615ee0510e3e4dbc9fa28f6cd1f73e7acde15ad7c8c5339df9a7774f8155130e7d1f8de9139ddd6dfe1841c1e64c38ea98243017021782d33dc513716c83afe7ba5e7abef9cb25b31f483661115b8d6b5ae469aaf6f3d54baa3b658a9af9b6249fd4d5ea7a07cb8b600f1df72b81dac614cfc384a" #h"3ab194db447f5dc738e1452bf7958b346c071b84d6ca2edd9ea3b870" #x0c24acc1edb3777212e5b0bac744eadf4eda11fa150753b355bf96b189e6f57fc02284bb22d8b3cd8bba7a09aae9f4ea955b382063425a6f8da2f99b9647b147172 #h"0183da7b8a9f9d5f08903359c1a2435b085fcf26a2ed09ab71357bb7634054acc569535e6fe81d28233e4703005fc4bf83ce794d9463d575795aa0f03398e854cefd00b3621145b9866ab7809139795cc30cd0404127a7f0fafa793660491009f6c53724fdb0b1ffbf0fd51c131180b8a957fe66e76d2970247c024261c768dee9abbfb9") (:secp521r1-signature-test #h"01393cb1ee9bfd7f7b9c057ecc66b43e807e12515f66ed7e9c9210ba1514693965988e567fbad7c3f17231aacee0e9b9a4b1940504b1cd4fd5edfaa62ba4e3e476fc" #h"0401e855c935139c8092092cfa733db1292530506eeb2bbb1687f9602c36d97a6714e998892d5d3b842d1896a6ece9d549e9792881a256256137b3dff180c96cc5d07b018d83b6e93cd287311f7bf7c1d7f9eeabcf0b69c12f2d8f40e333e81e956d968532a37a4c04d761874df293b484cd7053b03fdbc2fdcd3b4c412d6f272fb7c93fe6" #h"7c72d5606cbc1610e101aa50d4793f96339eab9eba88342e87ff2642" #x1d98619bdc04735d30c222fc67da82c069aea5f449af5e8c4db10c1786c0cb9e6f2cc0bb66fa6be18c485570d648dafcd0a973c43d5c94e9a9dacbd3170e53fa2a0 #h"00bf47fabe107ce0ec03e2ad60a79b058e1bebb18568b6a8cdbe86032e71aa30c15766105b2ea952cfa79bcab046df601159f96e179bbcf252dc68ac73d31481fdae01f918fec69cd07d90f9d892b7117e7519c3224947f4262f1fd97077dd5386a6c78aeddff3ee97e59ea353f06029f1336f0d6ef5c0f4b17ca59343a55319b7bfc3db") (:secp521r1-signature-test #h"0179fa164e051c5851e8a37d82c181e809a05fea9a3f083299b22684f59aa27e40dc5a33b3f7949338764d46bfe1f355134750518b856d98d9167ef07aac3092c549" #h"0401857cc7bbed20e87b3fd9a104956aa20c6502192910e0e7598410526ebfe1c99397b85189612a60c51fb8f4dd5cb08a8cd2e702563062dcb043410715c5323a004601fce8d135284310d2f38c216030634b32cd223222f0d9d8d2b7c55477c4b8b74fc6c96a6092f34b05ca44d3633a5037c2166c479a032bb4f949f89fc1ba5236d07d" #h"b2d36a3bfc82c960eb05f4993b9bd596a25920145d4267f74481a070" #x16d9704c0cee791f2938bb2a8a595752a3635c2f557efeecefd719414b5f2aaf846080f582c76eae7a8fddf81859b49d0131c212524d55defa67dca1a9a28ca400f #h"01c9a4e51774384e8362876a87c572e6463a54413c7c6252c552ebb182f83e45ace436ade4ca373d8a7216e83efb62c8b41c4d5132a0afa65078f16d189baca3918701e92a7dd5fea29a666398e1df5775cbb5664fe6943fe4c1d2bba516b7543c84df584458e53919c4ffab579a26fb3c892a5d1a77b0a07428c89350f8b559e627b014") (:secp521r1-signature-test #h"013dabca37130ba278eae2b3d106b5407711b0d3b437fbf1c952f0773571570764d2c7cb8896a8815f3f1975b21adc6697898e5c0a4242092fc1b80db819a4702df4" #h"0400bc2aebf40cd435bc37d73c09d05f2fd71321111a767c2b0d446f90dd4a186839c694ceb734e027e7ee948f0f63e4d3f1656d3d543df23c342a599306909b34710901f4c98ac03f0718e58d5d1762c920445b11dbdd60ec7f60095809204e14965a4ecb0be6fea06adbac8ba431d6f144c75c199225df2a619a34be99897125b3a10af8" #h"06d4fd20efb2a725626550c8097bd7b38dcadf64ee36350ce8e47a24" #x0401187c8b89945a1e48cda9ee52167789f4121e67482a7ac797899f5d3d2e623aed31e4adae08a8d43e69028fa074d2650317cbc765f6ed191cf0317b4bae57881 #h"01e572afed754016fba43fc33e352932c4db65efcb84e2bd159b40fc5925893b161effc40240be28d8c07154d2615f605c6f0451b976522d95afd37f46602df7a12a0030370c1c5352c2b663ac1858b42f69545b2f58ed5b2c007f303726977d3c756b5d644ec6788f94c886f78269aa190a3d8d1ae10e4fd24d937c4556fb9e1953fd6d") (:secp521r1-signature-test #h"0198681adbde7840d7ccd9cf1fb82056433fb4dd26bddf909af7b3b99da1ca2c05c8d4560ecd80ba68f376f8b487897e374e99a9288ed7e3645cc0d00a478aae8d16" #h"040057ce3777af7032f1f82308682e71fe09f88bf29dacd5018a725e1caa4b1e2bfdd894fe618f9266f31ba089856dc9c1b70e4a2faa08b4b744d1aafcd5ae99e2c7360199bcfef2021bc5890d7d39ec5dc0c26956801e84cae742cf6c50386eb289b6e97754dd25a94abf81f1cb1b36935b5eb29f4b32a6516d2ff6a7d23064a0daec94b3" #h"8c7db2e1a2ba5f8bd0a4f7e7f67a20918a87bc6c6462c326406e6c4e" #x19d2d74ad8ee2d85048f386998a71899ef6c960b4ab324e5fd1c0a076c5a632fd0009500076522e052c5c9806eef7056da48df6b16eb71cdf0f1838b0e21715fce0 #h"018ecacbcffd5414bbb96728e5f2d4c90178e27733d13617e134ec788022db124374bbaa11e2c77fe3f38d1af6e998e1b0266b77380984c423e80ffa6ff2bcafd57a01c727f34b6a378f3087721a54e9796499b597ecf6666b8f18312d67e1190a8a66e878efc2367b551267494e0245979ef4deed6d2cbf2c3711af6d82ccfeb101a377") (:secp521r1-signature-test #h"008c4c0fd9696d86e99a6c1c32349a89a0b0c8384f2829d1281730d4e9af1df1ad5a0bcfccc6a03a703b210defd5d49a6fb82536f88b885776f0f7861c6fc010ef37" #h"040164ac88ed9afe137f648dd89cdd9956682830cac5f7c1a06d19a1b19f82bb1d22dfeefea30d35c11202fed93fd5ce64835d27c6564d6e181287fa04a2d20994986b005cb83669265f5380ccefe6b4f85fdf0049e6703f6f378a0b2e52ed0fbbcf300afebb722f4ed48e3819cb976c1d60e2ba05646b478f6dfecfbae730e9644c297f00" #h"4ff99d232c8fef39fecfe8af79d274e03beb4502fb833d8af4181d7b" #x189801432cba9bf8c0763d43b6ec3b8636e62324587a4e27905b09a58e4aa66d07d096dbce87824e837be1c243dd741f983c535a5dd2f077aac8beee9918258d3cb #h"00917723f7241e8dc7cd746b699ab621d068dd3a90e906aaf0a4862744b96fd4e5ccdb9c7796c27f7196e693d06ec209464c3ea60ad6313e9b77cceaa14767e6651c00957b0ecdc3668f6efa5d0957615bcfffd6419c5e57579b74f960f65ae3fb9e8284322ff710b066f7e0959ac926d3cf9a594bdb70bbec756c96910b26a2486dee9e") (:secp521r1-signature-test #h"01466d14f8fbe25544b209c5e6a000b771ef107867e28ed489a42015119d1aa64bff51d6b7a0ac88673bbc3618c917561cff4a41cdb7c2833dab5ebb9d0ddf2ca256" #h"0401dc8b71d55700573a26af6698b92b66180cf43e153edadb720780321dbb4e71d28e0a488e4201d207fc4848fe9dd10dcabec44492656a3ff7a665fe932445c82d0b01920b16331b7abeb3db883a31288ef66f80b7728b008b3cc33e03a68f68d9e653a86e3177bbc00014fa5ea4c1608c0d455c2e2ac7bd8ab8519ebf19955edf1baf8d" #h"c1120fe21c2c40b47a97c9815c619a223c2f11fb2ebb5e87cb175280" #x160d04420e0d31b0df476f83393b1f9aff68389cc3299e42ef348d97646f7531a722b66ddfb9501bbb5c4a41d84c78be7233b11489bceb817d23060e6017433fab8 #h"008077aabd0a342f03f912007c586cfedfc63f93d1118f720d5b62b3ce141a60f86f111dfd8fc2e31a6778981f1a5e28f29a7369bd7897bb41240c8d3a9c170e0ee0000abc75fc154b93840579457820957e89d1260fee0a4b9bb1946f61ca1e71afd76bb5e1077b3e38ceb39d1fac5ef8b217c4110617b3ad118e02b3fcc2a39ef38613") (:secp521r1-signature-test #h"001a99fcf54c9b85010f20dc4e48199266c70767e18b2c618044542cd0e23733817776a1a45dbd74a8e8244a313d96c779f723013cd88886cb7a08ef7ee8fdd862e7" #h"0401912d33b01d51e2f777bdbd1ada23f2b1a9faf2be2f2a3b152547db9b149b697dd71824ca96547462e347bc4ef9530e7466318c25338c7e04323b1ba5fd25ea716200bbe9b1e3a84accd69b76b253f556c63e3f374e3de0d1f5e3600fc19215533b2e40d6b32c3af33314d223ea2366a51d1a337af858f69326389276f91be5c466e649" #h"08a10ee8d56db0cbc4bd68611f39f23d2ef379fe730eae170d84b388" #x14fafd60cb026f50c23481867772411bb426ec6b97054e025b35db74fe8ea8f74faa2d36e7d40b4652d1f61794878510b49b7b4fe4349afccd24fc45fec2fd9e9e7 #h"018b1df1b6d7030a23a154cacce4a2e3761cc6251ff8bf6c9f6c89d0a15123baef9b338ada59728349ce685c03109fcde512ed01a40afd2ca34e1bc02ecf2871d45c00a399f9b9e21aeddf450429fec2dc5749e4a4c7e4f94cee736004dcc089c47635da22845992cd076a4f0a01d2cc1b0af6e17b81a802361699b862157ad6cad8bd1d") (:secp521r1-signature-test #h"01e8c05996b85e6f3f875712a09c1b40672b5e7a78d5852de01585c5fb990bf3812c3245534a714389ae9014d677a449efd658254e610da8e6cad33414b9d33e0d7a" #h"04007d042ca19408524e68b981f1419351e3b84736c77fe58fee7d11317df2e850d960c7dd10d10ba714c8a609d163502b79d682e8bbecd4f52591d2748533e45a867a0197ac6416111ccf987d290459ebc8ad9ec56e49059c992155539a36a626631f4a2d89164b985154f2dddc0281ee5b5178271f3a76a0914c3fcd1f97be8e8376efb3" #h"53e6537cb6ea68ae47a81611c22756d770d7a37e336c3af0b0814b04fa39434b" #x0dc8daaacddb8fd2ff5c34a5ce183a42261ad3c64dbfc095e58924364dc47ea1c05e2599aae917c2c95f47d6bb37da008af9f55730ddbe4d8ded24f9e8daa46db6a #h"009dd1f2a716843eedec7a6645ac834d4336e7b18e35701f06cae9d6b290d41491424735f3b57e829ad5de055eaeef1778f051c1ee152bf2131a081e53df2a567a8a002148e8428d70a72bc9fa986c38c2c97deda0420f222f9dc99d32c0acba699dc7ba0a2b79ce5999ff61bd0b233c744a893bc105bca5c235423e531612da65d72e62") (:secp521r1-signature-test #h"00b65bf33b2f27d52cbfabcadce741e691bf4762089afd37964de1a0deda98331bf8c74020a14b52d44d26e2f6fa7bcddbe83be7db17a0c8a1b376469cf92c6da27c" #h"04010038bb9a7aea626de68c14c64243150e72c69e2f8a1ab922bfbdaa6f33d24fb4542c0324357b0dd640bbcd07632ecd253f64ca2bfbfbf3de9b24fffd0568ab82da00faf867d95308cc36d6f46844a0f535dc70f9768eed011a2464d2f308fa1d8e72c3616aec7e70516908183ffce7fdd36984a15f73efaa3858c2edf16a784d40e6c2" #h"40aef13bb7192a564d72ba58f7efad15635248eca49619b4182bf6f979842d6f" #x14aeb96c57d99677a1f5e4588064215e7e9af4027bfb8f31ff6126dbf341b8e6f719465e4273e91ba32670feca802549808322b7ee108bb20653cf20f93284d365f #h"0075ead62edf7d86c5d1bc2443d1aeb5dc034fd999e6ea012cef7499d9d050cd97d262095884e9fc89a42e15bd3dee80fe3c1ba10f4caabc4aabb86347023028b6630129a992a6ff66d41948d11fa680f732b1a74315b804c982805190ed9d2fae223f2b149980b9241998cdea0c5672595a8a49d5186a0ef7a46c0a376f925bdda81726") (:secp521r1-signature-test #h"002c4e660609e99becd61c14d043e8b419a663010cc1d8f9469897d7d0a4f076a619a7214a2a9d07957b028f7d8539ba7430d0b9a7de08beeeae8452d7bb0eac669d" #h"0400fb3868238ca840dbb36ecc6cf04f5f773ea0ab8e8b0fdcf779dc4039a8d7146a417504e953c0cb5e7f4e599cc2c168deda8b7f16084b5582f89f2ece4cae5167f701f90b5c15eeda48e747cf3ee8183166a49dbfac6161cbd09d29d40a6854f4c495e88a435892a920cdaad20d41985890b648badd4f0a858ffcbd9afdfc23134ede18" #h"6fd829bd5fc68d7a36436284c1282e3fae76ba44c5babcee423142c1cf2b52c4" #x1f875bbf882cd6dd034a87916c7b3ba54b41b2ea2ce84ebaf4e393fcf7291fee09dec2b5bb8b6490997c9e62f077c34f0947fe14cec99b906dd6bf0b5d301e75ca1 #h"007aa70425697736b298233249f5d0cf25c99e640c9ff88035ef1804820e1bfe7d043755f02d7a079494f7fa6dc26740c4e6b7b430c63f29c67bbd3a5c88d2f0e8d100e0d42e4ff11cf5be37a9fda348514d5097a662f214687cbfb28ff42d635b13029871ca4f464bb1fbce02d5da4d5fb61b2a071844259fc863d136197bec3a61e7c7") (:secp521r1-signature-test #h"017c3522007a90357ff0bda7d3a36e66df88ca9721fb80e8f63f50255d47ee819068d018f14c6dd7c6ad176f69a4500e6f63caf5cf780531004f85009c69b9c1230c" #h"04013a4bea0eed80c66ea973a9d3d4a90b6abbb5dee57d8affaf93390a8783a20982eba644d2e2809f66530adeeee7f9a1da7515447e9ba118999f76f170c375f621f7012f9dfaee40a75d8442b39b37a5c19ea124b464236e9b9a31bae6780cfd50f7ea4a700154b5ea0feeb64e9b35a1b0e33e46900cca1f34d13bb17e5017769841af27" #h"902b55b79c29c0de27386e4fadb3469fc124f1225ad0fac06bd4a3a1e351c09e" #x18388a49caeda35859ef02702c1fd45ff26991998bd9d5e189c12c36cdae3f642ddd4a79561bd1d3e1cd9359de8f5c9e1604a312d207a27b08a6033f2741794ced5 #h"015c6264795837dfea19f91876455f564f073c5c84a3c9d76e67872ae0447ba0d4850d8721302b25bec7ebfedd2721de140b2f3dead547042b24b0876117e7093cc10060eb74236c189a28ed20bd0822eb22d75f7d97c9043a3c8e3f6d4c90bc8ca02ac4d37c1171c799a1c7dfd2fcbf83406b5e48c051e0fbf0fd937bfe6c3db4e18154") (:secp521r1-signature-test #h"00c4dad55871d3bd65b016d143ddd7a195cc868b3048c8bbcb1435622036bdb5e0dec7178ca0138c610238e0365968f6ddd191bbfacc91948088044d9966f652ff25" #h"040014858a3b9bd426b678fdcf93fc53d17e7a9e8fe022442aaaba65399d12fd3a6a381958fb0f07ac6088f4e490506ec0f1ab4d0dbd461126f7eb46ff69cfa8bd88af018c18ce29ecc6d79d26a2de0cd31c4b32e84b5e90f6ba748f86c5afbd89618aceb9079460cbd1a8261ed5476973e61bf1d17ea78b022387443800c9247d21dde550" #h"99a83d5d6471963d9e18b105e51662dce360f34f23b8d64be47d50e9f8afa4d9" #x05577108f4187a173e5c29e927a8fc8f5ffd37e184254a6e381ff1018955aec91a35f30085e8cee6a7555c10f9efdce26d62f2b4b52dfdbaeafc3a30983e2d50d5b #h"00344375ae7c804cbe32ced7a20976efae5d9c19eb88b6e24514d1d0cfb728b0f4601098b18b2e98f42b5222dd5237d4d87767007bf5acb185c5526d72047e2cb1a1002de4cfa908c73c1102d6fb7062baf54a056a9517701e036c9c51e09899d60051612d59348945f845dffebec5aa395b2fac7229929033615788777306ccad96d0a3") (:secp521r1-signature-test #h"003d4749fadcc2008f098de70545a669133c548ce0e32eec1276ff531bcff53533144555728ad8906d17f091cc0514571691107350b6561858e90dbe19633aaf31bf" #h"04010fe5986b65f6e65d13c88c4d2aed781a91026904f82129d46779bdadaf6b733c845a934e941ab4a285efdea9c96ecc9dc784d87e4d937b42c337b3a9cb111a96000077853768a2a4d6f596f57414e57ec60b76d3cd5ece8351cd1f335ebcb8801a3d91fb82c65caaeb5c31eea9918367bb5906863ff3ccaf7a6cee415e0d75c15ac2e0" #h"2c92465f323f6355ff408e42196e2de9a47807877ec02c9a7686917d3aa166a4" #x1fbb4de337b09e935a6dc6215ffcfcb85d236cc490585e73251a8b8bac37cfa36c5d1df5f4536d33659be1e7a442529a783452f7efda74a4f661b6a127f9248aaf7 #h"009d8f10eeff6178594c89d6e8184f9502117384813243ddf9ccf3c8eac5dc6502c472dfc1487a5caffc569f7dedd14a8ebcb310e9bacdb79fb6655aba026cdf87f200f74236c7915d638708d17c9f10e39dda358faf9bbb821d8dcda0d151aac143bfb165ad0a23a65cd3de532e32cad928728f5ae1c16f58fc16577f3ca8e36f9e708b") (:secp521r1-signature-test #h"0096a77b591bba65023ba92f8a51029725b555caf6eff129879d28f6400e760439d6e69ce662f6f1aecf3869f7b6057b530a3c6ff8ed9e86d5944f583ee0b3fbb570" #h"0400fdf6aed933dba73913142ef8bdcd4b760db8500831cd11d7707ab852a6372c05d112a1e7fbc7b514c42142c7370d9f4129493cd75cc6f2daf83747078f15229db600ef91dffb3c43080a59534b95ca585ee87f6145f6a0199b2b82c89f456d8bd8e6ac71c78039c08177184484eb2ebd372f189db3a58fab961a75a18afec1ee32764a" #h"17baaa5a7f97f2d17545c4baa468f36ef22b1945ea889b63b027806f5b1b7f90" #x13aa7b0471317a2a139c2f90df1c40d75e5a8a830fbaf87030fffdb2ef6f2c93d1310c9ed7fe9d7bcd4fe46537ff2495bc9c4f0aaff11461f5e4bebbfbce9a8740a #h"01c7a21800962c91d4651553633b18612d931bb88bff8b743ed595b4e869437e50f8e84fbf334c99061db123a1c40b73b07e203790561a37df65a660355ba2017d7801301e1782559a38f1ca0eebe9bed0f5c7c33103d506a24f8a688f500ee1fe37f97b6685319279e82e6fe43cfd823ccbc123309974cffa76c4f8d41ec02a3cbc45f1") (:secp521r1-signature-test #h"0015152382bfd4f7932a8668026e705e9e73daa8bade21e80ea62cf91bd2448ebc4487b508ca2bdaaf072e3706ba87252d64761c6885a65dcafa64c5573c224ae9e6" #h"04000b8c7c0186a77dc6e9addd2018188a6a40c3e2ba396f30bbd9293dba2841d57d60866b37f587432719b544d8bf7eb06d90a8c0dc9c93b0c53d53b2f667077228ca01dd2e5c73ab908ae34f701689f1cd3cf5186d3a2bc941e208bf3ef970e5e429ee9b154d73286b2e5da423e75b7c7b78c7bdf915da92279db43265a0cdefca51f86a" #h"b8f56952078ffcf04cd9815c6b06b63812eee9d682495d7172fd3677abe1c2db" #x0d03506999f5cc9ec3304072984a20a9c64a22ad9b418495ca904f4bbddc96e76d34672cb52763339d3f3bc5b1701c00a675b972797e3a086314da1a8d338436566 #h"0085406c0ff5ec91f598bb579ad8714ad718c3e133d5dcc2e67c5d2339c146b69919cac07f3bc2bda218f4c7c8be04855e2ca6fff7fbdc4fc0fda87c8c3081cad4f501b45f2066e583636215ae135afc202b8bf3f301eccff2e1c0198b9aeddf695fa8179488e7b622fc307f601e2f6551815117cc836bb09ef888f8e64a45d9c84ad30c") (:secp521r1-signature-test #h"01750ff0ca0c166560b2034bc5760fe0b3915340bc43216e9de0c1d4a76550e8b2036e8b874230f8d29354aed43e183610f24fd4abd4b0be2f111dae942bd7a121f7" #h"0401b4b8947192a7c0166c0e0b2791e217370836283e805f3ee11cfb78445aba3c5bc39fe594e01916617ad59e7c8e740d8f2d07d88905d3f33bd5e51aafd4943c5dc601175d117232836c28e717ce2a55e59f4ec550effde30d18e3d99e42c6aa2283c7b3e7f2f6ff1fca605dde78c3a5bffa689347b4c93f51ba59a1787bb7d5e43861dc" #h"9477d884384f80b528aa4c3408b7f7d0dc59bd3f678466b122d48a42c01fc3bd" #x023645023d6bdf20652cdce1185c4ef225c66d54f18632d99ccf743bf554d04c214c88ce52a4f71ec75c899ad1b3c07c34112ca20b55c217ff1d72c9528e2774ce8 #h"01e933f68ce0f8403cb16822b8e0564b1d39a35f27b53e4ae0bcdff3e051759464afbc34998ba7c8a7ee34ef6c1aaa722cffe48356fd0b738058358d4c768b3186c100a67368a305508ce6d25d29c84f552a4a513998990fef4936244f891a2909c30d5fdc9e8a267ecbf3c597138f4a08f7e92bee57d5420eadd700fee864bf78b2614b") (:secp521r1-signature-test #h"0023048bc16e00e58c4a4c7cc62ee80ea57f745bda35715510ed0fc29f62359ff60b0cf85b673383b87a6e1a792d93ab8549281515850fa24d6a2d93a20a2fff3d6e" #h"0400ba3dc98326a15999351a2ec6c59e221d7d9e7ee7152a6f71686c9797f3f330d3150123620d547813ba9d7cc6c6d35cc9a087d07dff780e4821e74ad05f3762efd6018b051af9824b5f614d23ecadd591e38edbfe910ad6cbebc3e8a6bec11ea90691c17deb3bc5f34a4a3acd90b7b10f521f6ee7b3cfbfdc03b72d5a8783a4a77c3e4c" #h"e995003b47e16fcdc7487e2fe3b715b707e5c8d1246de04172a3002b140dddac" #x06099d2667f06c58798757632d07d8b3efbe9c1323efb0c244be6b12b3b163ba1b7cf5246c98dcc0771665a66696d687af5f28ed664fd87d5093df6427523d4db84 #h"010dc80ea853064a2ba5a781f108aca3785c5ec0aa45aa05ba31d4de671170797589e863d54a3a986aadf6f670277f50355713dfb27d4ec7e348f787910b3cd668cd0018572bfad4f62e3694d1f2e6ffd432faed2e2b9d7e3611a07138212f1e79e6c394839f7cfae96bc368422630016fb9346681eadc5f9699e7331c3b5fde6d65e4c6") (:secp521r1-signature-test #h"0095976d387d814e68aeb09abecdbf4228db7232cd3229569ade537f33e07ed0da0abdee84ab057c9a00049f45250e2719d1ecaccf91c0e6fcdd4016b75bdd98a950" #h"04013b4ab7bc1ddf7fd74ca6f75ac560c94169f435361e74eba1f8e759ac70ab3af138d8807aca3d8e73b5c2eb787f6dcca2718122bd94f08943a686b115d869d3f40600f293c1d627b44e7954d0546270665888144a94d437679d074787959d0d944d8223b9d4b5d068b4fbbd1176a004b476810475cd2a200b83eccd226d08b444a71e71" #h"9832832c49754bdeba2d3799cbf6437af28ad9f942d3f313abd320fad0897be6b446aa24f1b23a86ea54aef12b1f5c0b" #x0a8d90686bd1104627836afe698effe22c51aa3b651737a940f2b0f9cd72c594575e550adb142e467a3f631f4429514df8296d8f5144df86faa9e3a8f13939ad5b3 #h"002128f77df66d16a604ffcd1a515e039d49bf6b91a215b814b2a1c88d32039521fbd142f717817b838450229025670d99c1fd5ab18bd965f093cae7accff0675aae0008dc65a243700a84619dce14e44ea8557e36631db1a55de15865497dbfd66e76a7471f78e510c04e613ced332aa563432a1017da8b81c146059ccc7930153103a6") (:secp521r1-signature-test #h"004ceb9896da32f2df630580de979515d698fbf1dd96bea889b98fc0efd0751ed35e6bcf75bc5d99172b0960ffd3d8b683fbffd4174b379fbdecd7b138bb9025574b" #h"0400e7a3d30d5bd443549d50e9b297aaa87bc80b5c9e94169602d9d43d6d0c490c0bed8cc2170288b106bdbf4c9f1ce53fd699af0b4c64b494b08520e57dc01ab9a8b001d81056d37aec8a75d588f6d05977416e6f24ad0117a7f4450036d695612e7bc2771caed80e580314eebc88c8fc51c453f066e752481f212b57165d67f8a44f375a" #h"cca0c216abf3baaff0b0d8597bcfc7183835b4e3d025749a741a0e75d00845a341fe094214b1c39e13e8932a062c1ecf" #x046639c5a3ec15afae5e4a7a418ac760846512d880c359bc2c751b199ce43b10887e861b14127809754dbea47f6cc0140d2817e3f5b9a80ce01abd81f81b748433a #h"00f913de91e19bd8f943d542ae357bacc942a0967abc9be6c06239a379db8cc733fa50013e0b0f088bce9d630262feaa33b30d84f91bcf5ce9976e4e740fcb112f84008a73a5c9c24235e0d9cecaac653f68ce5a6fb186ce67fa058d6ddbbd4d0a8c4d194e571148e8ad6c8882b4e33d2f60fb23dd7d07a1ae60864e8277918f592b3dc6") (:secp521r1-signature-test #h"000a8db566bd771a9689ea5188c63d586b9c8b576dbe74c06d618576f61365e90b843d00347fdd084fec4ba229fe671ccdd5d9a3afee821a84af9560cd455ed72e8f" #h"04004f5b790cbe2984b71d41af5efed6c6893d15e13f31816d55a9c2926a104eee66f1ada83115d1388551218773b8b9d1138e3e3f027bb4392c90c14fd232580b4a1100660eb160e9bfc8c5619e70e948e238c6fd37739bc1bb657b8e8436e63628f91992be7e63d9a7359623a1340642777b22026feb51116a6c50c54c3589b9bd39b6cb" #h"0af6f685cb6c1219cb1627dd2b9099b70b1622d32b2342cbef6c0b9604d3f22360d595198af65579062dddccb66a56ce" #x1e7b5e53571a24bd102dd7ad44a4b8d8a4e60e5957bc3c4e5d3c73109f55233f072e572c7892f425ba5e64d3cb7966096bb34a47e26cd5b3e3b44108b310d9f681b #h"01a88bcd7e2bdff6e497d943dde432fb3f855a7177c466319cb53b701230c299db030276269685857d1e3f28110e690f2f529c8d18115eb381f313bc891d92ad278e0146f1984ea879274dfd5e86ad92e564a4de081523ddbb1c397b8f9595911ef2e6501bc081584d5340f7aa47e1af036234ac6f27a5ac31f78dd3b0ff1a62693c630d") (:secp521r1-signature-test #h"01a300b8bf028449344d0e736145d9dd7c4075a783cb749e1ec7988d60440a07021a25a3de74ea5e3d7bd4ab774d8ad6163adae31877ef0b2bd50e26e9e4be8a7b66" #h"04005055b9ad726ba8a48219b0ecbfffb89f8428de895b231f676705b7de9f2022d9ff4e0114ebb52dea342f9bf76b2fb060c020e29d92074ebb1fbfe5290a58c8bc1000415af7f20a6e945315adbf757316bb486c80780a0a3a15b4b9609f126d7341053a2b726ab63cb46feee527b0bf532b32b477e5671aea23d9b3c3e604b9029954b5" #h"b5008011397235faff9eda7ac9838dd1199eb52b2921d28407e5c356dcca7611184d29d268c16bfb489481a294bd7a43" #x05a2e92717bb4dab3ee76724d4d9c2d58a32b873e491e36127985f0c9960c610962ca1c4510dba75c98d83beebdc58b1d8678e054640951d11db1bd2d8a4ab8476b #h"0104a78ce94f878822daaf00ee527fbdbf6cceb3cbb23a2caa485e4109466de8910252f92379ab292cac8d1eda164f880c0067696e733fc8588a27703a3e1f5b8f1f01ffe23e8ab5a31668a81161a234ea14879771fe9866f8872eb6edb672e0fe91d2bb75c9767a2dfbac7c15c802211236b22ea41ecd055a0b8b311ffc4255f86d5c67") (:secp521r1-signature-test #h"006a253acd79912a74270fc0703ed6507ab20a970f2bc2277f782062092cf0e60ae1ca1bb44dec003169bc25ef6e7123dd04692f77b181a6d7e692e66b09d35a540c" #h"0401f15c6b1df156fdd8381cd7446e039435e445f8f36f0247475058da0e371bf72753f6e39f98066bc79370b038c39687ba18e16cb118fe6538b7568c5403c251f6b7012d2b4f46b854eeae75f1c63f55b76bf0c604d47f870c28a50ecdeb52bba1dd9a0ff12e680804ff864111207652da7dd10b49edf66bb86be00bc06672de91982457" #h"64c05e43191b0313abd6514eb5a44dbf25befb232b8e928f92801f75a968d9a96801facc86b2174e0a5f247d9b5e7587" #x165faf3727e42fd61345cfa7b93e55fb4bf583b24bdc14ce635b6c99dbd788012f14da9a210b677c44acdd851e672f1a48188d6b8946c0efeebfe8a597ba0090a2c #h"01ad9463d2759abd568626548578deefdcd8b2d050ce6d9c7ed05feca20167484b86e89bdcc936fd647e0f8aedd7b6add2b8cf13ff6ff013c2b5540c6c56fda97a0c01645a7d0e11015256cfb034adca198695eea6aedd44d9fbf496850ccfed950f43fffd8dbf41e113f2d3837d8a5dd62b2ed580112ff05800b1f73196e5576810e15b") (:secp521r1-signature-test #h"00d5a5d3ddfd2170f9d2653b91967efc8a5157f8720d740dd974e272aab000cc1a4e6c630348754ab923cafb5056fc584b3706628051c557fce67744ee58ba7a56d0" #h"040128a4da5fc995678e457ceb3929adee93c280f851abe900fa21f4f809dafad4e33b381e0cd49ce8dd50e2e281cea162bfd60a1d6a1c0ee2228e6a011e171b559ab8006eb0917cd72256992c49ea527f6bb0315f13d8047794a0f1da1e93737703b1c2a74a00441ef3b47b6a2ff789c49ae32d91cabe7b29247aeec44f6c40a76597a2ca" #h"9e4bf8293245611cb31caf0b0125117a4ef286ca3730f1519f3c95e65a5db326ead01b08e6b219281a26f2a41bda1e98" #x03269983a5c2bcc98e9476f5abf82424566b1f08b17204d29e310ece88f99eb677a537f86fe2529e409cfef2c12929644100099e0de2f27c0f0ac11105a4dca935b #h"01a5257ae1e8187ba954f535b86ff9b8d6a181a3b95c250d090cb4e9c3bfbd03aa64696a76c569728ef67780d6338d70ce46da40b87a3e49bfe154b93930890dfa93005b6ccdfd5c63c7db76d3a0478064a2a376e0e050cb093be795a72a549247c2e4adba9183145c63d46479dbbdcf09986a6f64c09c7e16abc4853f6376c9558b014a") (:secp521r1-signature-test #h"01bcedf920fa148361671b43c64e3186e1937eb1bd4b28cbd84c421472394552889bc05509aa732ef69d732b21b750523fdfd811f36467690fe94e01e64c9d5cbbe9" #h"0400d33c151d202a5d4d831348e940b027ee32e4b0b9b48d823a05c67ff3bdaee0189fc6680565f352c062e99968afc643208b4f9c7af185b861658a88c4ad0fcc8ba200e4441ddb546468ad8ffa6074f137edfbb81e82e0e7d8f05c4c54598aa996a9cde54cb371f642bfdd4ae7eca5b769696030027129a4183da93567ad142a2dff5183" #h"417e8611fe90382b134add3b3df5a963d95c4de28a5a5b215b7f96731db9350d4646c1efe7455d48a1a2de6b4fcbd9c3" #x046e619b83aac868b26d0b3cbfab55e630e0b55c461985b5d00f94ff3a5ce90ff412cebf46bbd84550d2031d573ca27d924624428360708c8d8491c29eb01d30f2e #h"008427c0f0ac0263472cd423c0fb554bf3c851b9c775c566ab0f6878717bd57665830767b05b7789c5c0b078195bd943dc737325552d32877ecb04a7c41bd07cd80c010bb6652d6a624c40a7dd06828f15774130d02369ceb1a7d03b553e16e17b7fa5b5401f15885d5e4fc2e55c0c7a1b97871ab02f76386b93a16aa6e7eb65debac6dd") (:secp521r1-signature-test #h"003789e04b3a2a0254ade3380172c150d2fad033885e02ea8bea5b92db3f4adbab190ae423080a1154dfedec694c25eab46ce638be3db4e4cba67bc39f62d6e7db2d" #h"0401dbc2cf19627bdccf02432b1761f296275230c150cdde823ce3141ec315d7d05e16b2c29e2a67491078d5316883e933d85b4b10d4f64c477d3c4e0442dc928983a2007562e720807dd118d3d8b265b3abc61a71fce43e3dce0e7b5ae18b7a4cb01ecc00d39c1f22e150a9a8728997e502144f5b3f6fa9b4cb8a4136212b082ca394e3f6" #h"297eed020ddcd03aeeafc77469caa105469205595ef22f64860126135e2596ae99ccaeb679d073cd9364b1e4ee2c4b60" #x0fbccd8d7804bdd1d1d721b5ec74d4ba37603bc306f9fce2ec241853d8e07334e6b4b12c4ecca0c54bd71193dd7146507933a20737c5f3e15085830fab9b30ca57b #h"0181915a3998d8fa214f9715f4ca928d09c36de168dc15c6970a8a062b5cea2dc969b2437ca17b684f78a1fd583aad8e6c762c8f4ab0c91b86a497145e3ca440d307015a6c18c5c77f5470b27d061eafdc26b78561941a3b2ab0f5c81d40899fc053c3d9ed12d7d61e298abbae470009c7b2157731c58d7b16a66fa5abaf5e8a1b8ed394") (:secp521r1-signature-test #h"0124700aa9186353e298edefc57bec0c7d0201cca10c1d80dd408d5d71040592b0ac59facdadfa8712445f5977ef8d4854022720c3f02d60e0732dbb2f171fcf1490" #h"0400c80fc4cecae5d53348524ddba6a160b735c75b22fdb39af17e2a613d09246e3bb0fd3f2978577f6db5d2118e05c7898024808f8eb8e021d7969cdcf7fc981200bb01a880c93943fd446d4b3923b574d2221c1bb7b645fb5534dda60e827b497666ff586b77921f7e7f605147947194cffd2fef0678880b89cc0bc7fb74fa96d4b112d7" #h"39884fd5e7c8b6cb67836e257957cc11f6bd342f540bde745e0e4e55d3ead2ea080d8b2b2e96664056c50de0d7822f25" #x01a05238d595ded5c61d3bf6fde257dbf13095af8a5cb3a2e579e8e4c550fe31d12b71cc2dbcb295e6c4fd0fb8c22d1b741c097cc59d826ced1a8771f09983143c4 #h"0132762bc81e9922a8d642e3a9d0218affa21fa2331cfcb9e452545c5981c64a8f7e4cc8e68056023b2aa78bead59061d19c7f646c931163a91e544b106b3be8de9e00c3a1b0b000c3169984132add51d611e2cb7069a262a6983d2ae72b459c36e6469509bdb0f473600b8686700b08910779dee9ba83f82e755d4a4ef5f124eb09397f") (:secp521r1-signature-test #h"01f532d01af885cb4ad5c329ca5d421c5c021883bd5404c798d617679bb8b094cbb7e15c832fb436325c5302313ce5e496f9513455e7021ffad75777a19b226acfa1" #h"0400c0bd76b0027b85bdd879052220da1494d503f6a4bb972105a48ae98e7dda8c2d9fd9336f5646385b961ef68e8464e3a95b00f96614b1a408ceaa2c87b077b6a8fb017eb7eb5c78db7819af92e8537d110d9f05a5e24f954f4dde21c224d4040f059ec99e051702f390413d2708d18f84d82998c61847475250fb844b20082cbe651a6b" #h"ac6b375afaad4c5c1b8e8aa5ac94e2aa1553e8f8603d16a86d573d53a4e6c5731f6d6c18ac732cfd3ae8aed75046c1f1" #x14e66853e0f7cd3300ebcae06048532e19cbb95bee140edc1c867ce7310637651445b6dfeb1d99d2e32f2ffb787ebe3fe35032277f185d3dad84f95806924550abe #h"00c5b3a57161098e2e8e16e0a5ae8ecf4a14df14927eea18ed4925d11dc429dda145159323ba970174b194b9b4608a8fa2373b7a825c5e8bd80574e49698285c2c8201a0c038a51796158b42eb5b0dac37aff9ab93b903a47e06ebbdd15946e4bcc9a3b3875b18cf6294c33fc6c3693cef04ed1a43d08951e664c760e2cf3fb4e47490d2") (:secp521r1-signature-test #h"00f749d32704bc533ca82cef0acf103d8f4fba67f08d2678e515ed7db886267ffaf02fab0080dca2359b72f574ccc29a0f218c8655c0cccf9fee6c5e567aa14cb926" #h"040061387fd6b95914e885f912edfbb5fb274655027f216c4091ca83e19336740fd81aedfe047f51b42bdf68161121013e0d55b117a14e4303f926c8debb77a7fdaad100e7d0c75c38626e895ca21526b9f9fdf84dcecb93f2b233390550d2b1463b7ee3f58df7346435ff0434199583c97c665a97f12f706f2357da4b40288def888e59e6" #h"65f83408092261bda599389df03382c5be01a81fe00a36f3f4bb6541263f801627c440e50809712b0cace7c217e6e5051af81de9bfec3204dcd63c4f9a741047" #x03af5ab6caa29a6de86a5bab9aa83c3b16a17ffcd52b5c60c769be3053cdddeac60812d12fecf46cfe1f3db9ac9dcf881fcec3f0aa733d4ecbb83c7593e864c6df1 #h"004de826ea704ad10bc0f7538af8a3843f284f55c8b946af9235af5af74f2b76e099e4bc72fd79d28a380f8d4b4c919ac290d248c37983ba05aea42e2dd79fdd33e80087488c859a96fea266ea13bf6d114c429b163be97a57559086edb64aed4a18594b46fb9efc7fd25d8b2de8f09ca0587f54bd287299f47b2ff124aac566e8ee3b43") (:secp521r1-signature-test #h"01a4d2623a7d59c55f408331ba8d1523b94d6bf8ac83375ceb57a2b395a5bcf977cfc16234d4a97d6f6ee25a99aa5bff15ff535891bcb7ae849a583e01ac49e0e9b6" #h"04004d5c8afee038984d2ea96681ec0dccb6b52dfa4ee2e2a77a23c8cf43ef19905a34d6f5d8c5cf0981ed804d89d175b17d1a63522ceb1e785c0f5a1d2f3d15e513520014368b8e746807b2b68f3615cd78d761a464ddd7918fc8df51d225962fdf1e3dc243e265100ff0ec133359e332e44dd49afd8e5f38fe86133573432d33c02fa0a3" #h"a6200971c6a289e2fcb80f78ec08a5079ea2675efd68bcab479552aa5bcb8edf3c993c79d7cebcc23c20e5af41723052b871134cc71d5c57206182a7068cc39b" #x0bc2c0f37155859303de6fa539a39714e195c37c6ea826e224c8218584ae09cd0d1cc14d94d93f2d83c96e4ef68517fdb3f383da5404e5a426bfc5d424e253c181b #h"01a3c4a6386c4fb614fba2cb9e74201e1aaa0001aa931a2a939c92e04b8344535a20f53c6e3c69c75c2e5d2fe3549ed27e6713cb0f4a9a94f6189eb33bff7d453fce016a997f81aa0bea2e1469c8c1dab7df02a8b2086ba482c43af04f2174831f2b1761658795adfbdd44190a9b06fe10e578987369f3a2eced147cff89d8c2818f7471") (:secp521r1-signature-test #h"014787f95fb1057a2f3867b8407e54abb91740c097dac5024be92d5d65666bb16e4879f3d3904d6eab269cf5e7b632ab3c5f342108d1d4230c30165fba3a1bf1c66f" #h"0400c2d540a7557f4530de35bbd94da8a6defbff783f54a65292f8f76341c996cea38795805a1b97174a9147a8644282e0d7040a6f83423ef2a0453248156393a1782e0119f746c5df8cec24e4849ac1870d0d8594c799d2ceb6c3bdf891dfbd2242e7ea24d6aec3166214734acc4cbf4da8f71e2429c5c187b2b3a048527c861f58a9b97f" #h"46ff533622cc90321a3aeb077ec4db4fbf372c7a9db48b59de7c5d59e6314110676ba5491bd20d0f02774eef96fc2e88ca99857d21ef255184c93fb1ff4f01d3" #x186cd803e6e0c9925022e41cb68671adba3ead5548c2b1cd09348ab19612b7af3820fd14da5fe1d7b550ed1a3c8d2f30592cd7745a3c09ee7b5dcfa9ed31bdd0f1f #h"010ed3ab6d07a15dc3376494501c27ce5f78c8a2b30cc809d3f9c3bf1aef437e590ef66abae4e49065ead1af5f752ec145acfa98329f17bca9991a199579c41f9229008c3457fe1f93d635bb52df9218bf3b49a7a345b8a8a988ac0a254340546752cddf02e6ce47eee58ea398fdc9130e55a4c09f5ae548c715f5bcd539f07a34034d78") (:secp521r1-signature-test #h"015807c101099c8d1d3f24b212af2c0ce525432d7779262eed0709275de9a1d8a8eeeadf2f909cf08b4720815bc1205a23ad1f825618cb78bde747acad8049ca9742" #h"040160d7ea2e128ab3fabd1a3ad5455cb45e2f977c2354a1345d4ae0c7ce4e492fb9ff958eddc2aa61735e5c1971fa6c99beda0f424a20c3ce969380aaa52ef5f5daa8014e4c83f90d196945fb4fe1e41913488aa53e24c1d2142d35a1eed69fed784c0ef44d71bc21afe0a0065b3b87069217a5abab4355cf8f4ceae5657cd4b9c8008f1f" #h"6b514f8d85145e30ced23b4b22c85d79ed2bfcfed5b6b2b03f7c730f1981d46d4dadd6699c28627d41c8684bac305b59eb1d9c966de184ae3d7470a801c99fd4" #x096731f8c52e72ffcc095dd2ee4eec3da13c628f570dba169b4a7460ab471149abdede0b63e4f96faf57eab809c7d2f203fd5ab406c7bd79869b7fae9c62f97c794 #h"01e2bf98d1186d7bd3509f517c220de51c9200981e9b344b9fb0d36f34d969026c80311e7e73bb13789a99e0d59e82ebe0e9595d9747204c5f5550c30d934aa30c05012fed45cc874dc3ed3a11dd70f7d5c61451fbea497dd63e226e10364e0718d3722c27c7b4e5027051d54b8f2a57fc58bc070a55b1a5877b0f388d768837ef2e9cec") (:secp521r1-signature-test #h"018692def0b516edcdd362f42669999cf27a65482f9358fcab312c6869e22ac469b82ca9036fe123935b8b9ed064acb347227a6e377fb156ec833dab9f170c2ac697" #h"0401ceee0be3293d8c0fc3e38a78df55e85e6b4bbce0b9995251f0ac55234140f82ae0a434b2bb41dc0aa5ecf950d4628f82c7f4f67651b804d55d844a02c1da6606f701f775eb6b3c5e43fc754052d1f7fc5b99137afc15d231a0199a702fc065c917e628a54e038cbfebe05c90988b65183b368a2061e5b5c1b025bbf2b748fae00ba297" #h"53c86e0b08b28e22131324f6bfad52984879ab09363d6b6c051aac78bf3568be3faeade6a2dda57dece4527abaa148326d3adbd2d725374bdac9ccb8ac39e51e" #x161cf5d37953e09e12dc0091dc35d5fb3754c5c874e474d2b4a4f1a90b870dff6d99fb156498516e25b9a6a0763170702bb8507fdba4a6131c7258f6ffc3add81fd #h"014dfa43046302b81fd9a34a454dea25ccb594ace8df4f9d98556ca5076bcd44b2a9775dfaca50282b2c8988868e5a31d9eb08e794016996942088d43ad3379eb9a10120be63bd97691f6258b5e78817f2dd6bf5a7bf79d01b8b1c3382860c4b00f89894c72f93a69f3119cb74c90b03e9ede27bd298b357b9616a7282d176f3899aaa24") (:secp521r1-signature-test #h"00a63f9cdefbccdd0d5c9630b309027fa139c31e39ca26686d76c22d4093a2a5e5ec4e2308ce43eb8e563187b5bd811cc6b626eace4063047ac0420c3fdcff5bdc04" #h"04014cab9759d4487987b8a00afd16d7199585b730fb0bfe63796272dde9135e7cb9e27cec51207c876d9214214b8c76f82e7363f5086902a577e1c50b4fbf35ce996601a83f0caa01ca2166e1206292342f47f358009e8b891d3cb817aec290e0cf2f47e7fc637e39dca03949391839684f76b94d34e5abc7bb750cb44486cce525eb0093" #h"a9e9a9cb1febc380a22c03bacd18f8c46761180badd2e58b94703bd82d5987c52baec418388bc3f1e6831a130c400b3c865c51b73514f5b0a9026d9e8da2e342" #x01e51fd877dbbcd2ab138fd215d508879298d10c7fcbdcc918802407088eb6ca0f18976a13f2c0a57867b0298512fc85515b209c4435e9ef30ab01ba649838bc7a0 #h"011a1323f6132d85482d9b0f73be838d8f9e78647934f2570fededca7c234cc46aa1b97da5ac1b27b714f7a171dc4209cbb0d90e4f793c4c192dc039c31310d6d99b00386a5a0fc55d36ca7231a9537fee6b9e51c2255363d9c9e7cb7185669b302660e23133eb21eb56d305d36e69a79f5b6fa25b46ec61b7f699e1e9e927fb0bceca06") (:secp521r1-signature-test #h"0024f7d67dfc0d43a26cc7c19cb511d30a097a1e27e5efe29e9e76e43849af170fd9ad57d5b22b1c8840b59ebf562371871e12d2c1baefc1abaedc872ed5d2666ad6" #h"04009da1536154b46e3169265ccba2b4da9b4b06a7462a067c6909f6c0dd8e19a7bc2ac1a47763ec4be06c1bec57d28c55ee936cb19588cc1398fe4ea3bd07e6676b7f014150cdf25da0925926422e1fd4dcfcffb05bdf8682c54d67a9bd438d21de5af43a15d979b320a847683b6d12ac1383a7183095e9da491c3b4a7c28874625e70f87" #h"7e324819033de8f2bffded5472853c3e68f4872ed25db79636249aecc24242cc3ca229ce7bd6d74eac8ba32f779e7002095f5d452d0bf24b30e1ce2eb56bb413" #x1c1308f31716d85294b3b5f1dc87d616093b7654907f55289499b419f38ceeb906d2c9fe4cc3d80c5a38c53f9739311b0b198111fede72ebde3b0d2bc4c2ef090d2 #h"000dbf787ce07c453c6c6a67b0bf6850c8d6ca693a3e9818d7453487844c9048a7a2e48ff982b64eb9712461b26b5127c4dc57f9a6ad1e15d8cd56d4fd6da718642900c6f1c7774caf198fc189beb7e21ca92ceccc3f9875f0e2d07dc1d15bcc8f210b6dd376bf65bb6a454bf563d7f563c1041d62d6078828a57538b25ba54723170665") (:secp521r1-signature-test #h"00349471460c205d836aa37dcd6c7322809e4e8ef81501e5da87284b267d843897746b33016f50a7b702964910361ed51d0afd9d8559a47f0b7c25b2bc952ce8ed9e" #h"04000bbd4e8a016b0c254e754f68f0f4ed081320d529ecdc7899cfb5a67dd04bc85b3aa6891a3ed2c9861ae76c3847d81780c23ad84153ea2042d7fd5d517a26ff3ce400645953afc3c1b3b74fdf503e7d3f982d7ee17611d60f8eb42a4bddbec2b67db1f09b54440c30b44e8071d404658285cb571462001218fc8c5e5b98b9fae28272e6" #h"4541f9a04b289cd3b13d31d2f513d9243b7e8c3a0cbd3e0c790892235a4d4569ef8aef62444ecc64608509e6ad082bf7cd060d172550faa158b2fd396aa1e37b" #x00eb2bd8bb56b9d2e97c51247baf734cc655c39e0bfda35375f0ac2fe82fad699bf1989577e24afb33c3868f91111e24fefe7dec802f3323ac013bec6c048fe5568 #h"014bf63bdbc014aa352544bd1e83ede484807ed760619fa6bc38c4f8640840195e1f2f149b29903ca4b6934404fb1f7de5e39b1ea04dba42819c75dbef6a93ebe269005d1bcf2295240ce4415042306abd494b4bda7cf36f2ee2931518d2454faa01c606be120b057062f2f3a174cb09c14f57ab6ef41cb3802140da22074d0e46f908d4") (:secp521r1-signature-test #h"007788d34758b20efc330c67483be3999d1d1a16fd0da81ed28895ebb35ee21093d37ea1ac808946c275c44454a216195eb3eb3aea1b53a329eca4eb82dd48c784f5" #h"0400157d80bd426f6c3cee903c24b73faa02e758607c3e102d6e643b7269c299684fdaba1acddb83ee686a60acca53cddb2fe976149205c8b8ab6ad1458bc00993cc43016e33cbed05721b284dacc8c8fbe2d118c347fc2e2670e691d5d53daf6ef2dfec464a5fbf46f8efce81ac226915e11d43c11c8229fca2327815e1f8da5fe95021fc" #h"7ec0906f9fbe0e001460852c0b6111b1cd01c9306c0c57a5e746d43f48f50ebb111551d04a90255b22690d79ea60e58bed88220d485daaf9b6431740bb499e39" #x0a73477264a9cc69d359464abb1ac098a18c0fb3ea35e4f2e6e1b060dab05bef1255d9f9c9b9fbb89712e5afe13745ae6fd5917a9aedb0f2860d03a0d8f113ea10c #h"007e315d8d958b8ce27eaf4f3782294341d2a46fb1457a60eb9fe93a9ae86f3764716c4f5f124bd6b114781ed59c3f24e18aa35c903211b2f2039d85862932987d6801bcc1d211ebc120a97d465b603a1bb1e470109e0a55d2f1b5c597803931bd6d7718f010d7d289b31533e9fcef3d141974e5955bc7f0ee342b9cad05e29a3dded30e") (:secp521r1-signature-test #h"01f98696772221e6cccd5569ed8aed3c435ee86a04689c7a64d20c30f6fe1c59cc10c6d2910261d30c3b96117a669e19cfe5b696b68feeacf61f6a3dea55e6e5837a" #h"04007002872c200e16d57e8e53f7bce6e9a7832c387f6f9c29c6b75526262c57bc2b56d63e9558c5761c1d62708357f586d3aab41c6a7ca3bf6c32d9c3ca40f9a2796a01fe3e52472ef224fb38d5a0a14875b52c2f50b82b99eea98d826c77e6a9ccf798de5ffa92a0d65965f740c702a3027be66b9c844f1b2e96c134eb3fdf3edddcf11c" #h"7230642b79eed2fd50f19f79f943d67d6ef609ec06c9adbb4b0a62126926080ecd474922d1af6c01f4c354affde016b284b13dbb3122555dea2a2e6ca2a357dc" #x1a277cf0414c6adb621d1cc0311ec908401ce040c6687ed45a0cdf2910c42c9f1954a4572d8e659733d5e26cbd35e3260be40017b2f5d38ec42315f5c0b056c596d #h"00d732ba8b3e9c9e0a495249e152e5bee69d94e9ff012d001b140d4b5d082aa9df77e10b65f115a594a50114722db42fa5fbe457c5bd05e7ac7ee510aa68fe7b1e7f0134ac5e1ee339727df80c35ff5b2891596dd14d6cfd137bafd50ab98e2c1ab4008a0bd03552618d217912a9ec502a902f2353e757c3b5776309f7f2cfebf913e9cd") ironclad-0.57/testing/test-vectors/seed.testvec000066400000000000000000000051121420372057600217030ustar00rootroot00000000000000;;;; SEED test vectors (:ecb-mode-test #h"00000000000000000000000000000000" #h"000102030405060708090A0B0C0D0E0F" #h"5EBAC6E0054E166819AFF1CC6D346CDB") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F" #h"00000000000000000000000000000000" #h"C11F22F20140505084483597E4370F43") (:ecb-mode-test #h"4706480851E61BE85D74BFB3FD956185" #h"83A2F8A288641FB9A4E9A5CC2F131C7D" #h"EE54D13EBCAE706D226BC3142CD40D4A") (:ecb-mode-test #h"28DBC3BC49FFD87DCFA509B11D422BE7" #h"B41E6BE2EBA84A148E2EED84593C5EC7" #h"9B9B7BFCD1813CB95D0B3618F40F5122") (:keystream-test #h"5da8543413ebf016d7865a6f92528d61" #h"c61a2e38417755cb031fda3f8eceea82" #h"73b26236b89fa42d119caea1e9b058c0e9df07d4f343e01a7ac1d803f305574d07be62e83fa3c4b53b5a4b5922368fe2bfa98c1feb5c9c83485c62afe36811e96eb3498ac79407bf2b848d9fee79b47ffc1f421b7fe0cc6be52ae993abea667864c98cabbd9781ea5d0770aeead0e6512f5ae9fd926f828e16eef91ea5fa62cff38caffa66dfe5dd7eb6c72d8dd3bbb87c498e20fe03a097207f15f590a10f1c92aad227a5abb604e7a0cea1fa8422d5d25655b5d323a7ace52ae16e32594858f11797d5fa65e01a3b6055792df541d273e61ec0f3e49fa88d795eafc1718ef834719b5a8adb44d0e512a30cda9ea672a7d8391af8fd0882d7cf1d909a76bd3d21a9249b8eafef35fa78703a2865a7ddbac8bc2e7e3fa7a69f2c2965c4b53dedb7af07e65d738870bdb0f717835e4709e7b46d02675e0959022629f88b251ef4b7e1df69f9ca11f9d21246ac74f3b0ccefb2a36f2bea908a5b8a2570da33860d47be20423b3e59fa93a95648ff3de39cd61fcd1db8b70a447ba91bc29c3c314861b3df3aa1a7033d775e9479d3ca5527ed145fb0e6486d247c5b3ab4d266d0965bebac551cb6d5191170753bab447e94e9ea025680ba036460c183994348a0af65e9edbe873f5440663637b501199e044800578be09e733ddfbeb94e649c89f5d8176302e6f7bd074b1b87898f12b483b546d749d93d81dba6d00bfceed74a319286bc9b9cbd1e4e1ae266c03bcae4dfd9ef988b3dcc8a6bac3ab22faa5a1ed46df89783eb955f820798f34c835c39b42f871f1a5d753c4fa2d5cc61a7013ba100392618b98717cf4e2b87b4f3622b242a55abe0e73182f63e75c5b589e0e68dd775b56c3922d9998e803205263b5a78dd73e562d5c08e812590f3f928fbf9bbc74f57ea1452f23a6b83ea99a3795933ec14444c3a6fb49e68ef97343533576e004afd3a8ec7954c80b564c5afcf11370a0c98c157543523cf782c35fa252e8208bf4e65f66e6b8ba30f9cae89cdf3e5b72405f47a6c490a2fab2e056df1cf06d4c3f149d936a8a2a0c865a6d0b27ff0753f97330ea0a4216a16050798926bf85a432ba9940a9a604b619f0d1b86a5998118e7a41ecc8c466edfcae7bfa8f335de7157cbf015bc89f1f29ac07ec0beb0d8bafab6f08cf9d749ffe4f8c313ff708e5828cd0731a2884999666062f6ab47d894aef509d01538fa4ce82d9ac9fb401197686411997312729f621c641eab167f1dd82fe23bf1b96eeb2e50914779f8604d0cd06f81befb4db2461fe251635f8603b496e7db0ae850affe3a3220a88250abe01e18c5abc73f5a66459ba58c13f08c6491d6a8e99367de5d2b20d323e8c30877887065f3382c8c0f23680874835219833a4c7a65c30f3e86a3fe468ce23541be5ee75c47a4") ironclad-0.57/testing/test-vectors/serpent.testvec000066400000000000000000000172601420372057600224520ustar00rootroot00000000000000;;;; Serpent test vectors ;;; Some tests from NESSIE ;;; 128-bit key (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000000" #h"3620B17AE6A993D09618B8768266BAE9") (:ecb-mode-test #h"80000000000000000000000000000000" #h"00000000000000000000000000000000" #h"264E5481EFF42A4606ABDA06C0BFDA3D") (:ecb-mode-test #h"40000000000000000000000000000000" #h"00000000000000000000000000000000" #h"4A231B3BC727993407AC6EC8350E8524") (:ecb-mode-test #h"08000000000000000000000000000000" #h"00000000000000000000000000000000" #h"34B355520DF861F3F5C66A2379FBDA15") (:ecb-mode-test #h"01010101010101010101010101010101" #h"01010101010101010101010101010101" #h"5107E36DBE81D9996D1EF7F3656FFC63") (:ecb-mode-test #h"02020202020202020202020202020202" #h"02020202020202020202020202020202" #h"1AE5355487F88F824B6462B45C4C6AA5") (:ecb-mode-test #h"10101010101010101010101010101010" #h"10101010101010101010101010101010" #h"185EFBCD1AC2EFF75CF764F05CFAFD33") (:ecb-mode-test #h"11111111111111111111111111111111" #h"11111111111111111111111111111111" #h"F84F5C8EEEA4D3527F734428F4B3AED6") (:ecb-mode-test #h"12121212121212121212121212121212" #h"12121212121212121212121212121212" #h"933E63A78E6AA1216A1B1CE2559D42BF") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"BD2DBD2EB4193A2773CDB9906A34376D") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"2DEE675B6B7401367DA2A80FB44B8065") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F" #h"00112233445566778899AABBCCDDEEFF" #h"563E2CF8740A27C164804560391E9B27") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF48" #h"EA024714AD5C4D84EA024714AD5C4D84" #h"92D7F8EF2C36C53409F275902F06539F") ;;; 192-bit key (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"A583EF976A292B406BBD5DC8256B0442") (:ecb-mode-test #h"800000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"9E274EAD9B737BB21EFCFCA548602689") (:ecb-mode-test #h"400000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"92FC8E510399E46A041BF365E7B3AE82") (:ecb-mode-test #h"080000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"257A79F891BB8D0C13FEEF1ACC264214") (:ecb-mode-test #h"010101010101010101010101010101010101010101010101" #h"01010101010101010101010101010101" #h"3C30CC53B1408BF333B85DD1C6632A29") (:ecb-mode-test #h"020202020202020202020202020202020202020202020202" #h"02020202020202020202020202020202" #h"9CCCE11543D31C4527860F2411FC6435") (:ecb-mode-test #h"101010101010101010101010101010101010101010101010" #h"10101010101010101010101010101010" #h"8FF90E91ECA31C767C88B5FBA1AC885A") (:ecb-mode-test #h"111111111111111111111111111111111111111111111111" #h"11111111111111111111111111111111" #h"5A591008778D540E22648F7146360682") (:ecb-mode-test #h"121212121212121212121212121212121212121212121212" #h"12121212121212121212121212121212" #h"7CC04EDE1EC605160B5F23265B5A074C") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"9B89376FB4EE9D5AFBDA22D1F67E7155") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"08FC09BD2580A3FFBC8453FAF21417C0") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F1011121314151617" #h"00112233445566778899AABBCCDDEEFF" #h"6AB816C82DE53B93005008AFA2246A02") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF482BD6459F82C5B300" #h"EA024714AD5C4D84EA024714AD5C4D84" #h"827B18C2678A239DFC5512842000E204") ;;; 256-bit key (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"49672BA898D98DF95019180445491089") (:ecb-mode-test #h"8000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"A223AA1288463C0E2BE38EBD825616C0") (:ecb-mode-test #h"4000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"EAE1D405570174DF7DF2F9966D509159") (:ecb-mode-test #h"0800000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"EC9D6557EED58E6CF89A746BBDB6C9B7") (:ecb-mode-test #h"0101010101010101010101010101010101010101010101010101010101010101" #h"01010101010101010101010101010101" #h"EC9723B15B2A6489F84C4524FFFC2748") (:ecb-mode-test #h"0202020202020202020202020202020202020202020202020202020202020202" #h"02020202020202020202020202020202" #h"1187F485538514476184E567DA0421C7") (:ecb-mode-test #h"1010101010101010101010101010101010101010101010101010101010101010" #h"10101010101010101010101010101010" #h"0058F8E377AA222F712C2479F4A562AF") (:ecb-mode-test #h"1111111111111111111111111111111111111111111111111111111111111111" #h"11111111111111111111111111111111" #h"A482EAA5D5771F2FDB2EA1A5F141B9E2") (:ecb-mode-test #h"1212121212121212121212121212121212121212121212121212121212121212" #h"12121212121212121212121212121212" #h"34C9A82AFA5AF48071F5F7BC90C1BC85") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"052C775722AFEF0010C5795C521B9D25") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"6AC7579D9377845A816CA6D758F3FEFF") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F" #h"00112233445566778899AABBCCDDEEFF" #h"2868B7A2D28ECD5E4FDEFAC3C4330074") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF482BD6459F82C5B300952C49104881FF48" #h"EA024714AD5C4D84EA024714AD5C4D84" #h"3E507730776B93FDEA661235E1DD99F0") (:keystream-test #h"6f76f34d02d9f9621f01ab71b5341bd824e4a686b308e634fa6978df3831e2d0" #h"f5fe5917f0409e40934a093e466effc5" #h"7a163d17a763ad8a65fdaacd969965bab9d9a73a23eaed7cccb4da6d0db9f87a58665c34cd1194bb47230861336f5cafad8172ac29be91f52b3413aa440542d4b0266ab104d7ae1f8d5f7bf66a07188495d6b0f22c7a6df304b5f71d0416aeb3c4bd4f053691093833838791cb2afd8cfb93fc4f97a2da244bb10ceb7fde59349294622e1e8a020124b710e99f3334dd46035eb9e397be69c75ecd963c24726c3bae0bcc752540985257b1b2efa0b669219aad57d85c0e01f8d07f208dd08bbe917c750ce3ae9894805a83b5af7ed4bc40c1ec68c70037588629b8cabdbbeb50eae1b81f2a6f501d5dd7ed4bfc0d237bad5681f82cf73fab3ab1ac47eff5f6d128f90e80dcc33eebdefde368294caecf66061c6e5deec5f96f2e54df0254f7341fce53c16e6dffff072d8e6875bc8fc4eba1065ecacaa8c6659d47fc947004dee5d73f1f527b4d5c02d4431bdc07c98ec6fa42ed6717e41c67c40e63123170c03a9e63e629e85b9dadaa003f47db1214b94de338f7f6e0fbf77ef3df2d617422f40e78c68060126892844432bcf74d49d786f7a07a00a1b5d6800ac446afc6c11b53f2c964cc350ee05cc2155223db41195314f07c5fe387296935b42ad51cf63eb4405cb2ad5ebb8bcc3f650a0940045fc94596fa68cd5a42a8da2584d96ece32f6cdcee4156c771e579e873070fec76fdaa386ef3b5e0cb3dbb931829188ef780f469579f9ed3a6e09140dc32c78aaf1620edea42bd4559dfd33b13ed8700f9ed15260061e4dd0073bf938ed0994c7acfd97812303518437b0492c799ffd1b16499ded2d88ac0007bed24c74f8623c173e8af0484f3fd498b7893fba6c2d8dfc443565a8fdef3b1d90118c79c07ba0852a2e35920a77f1ddd5be0f0cd917e80ab5687a73f6f252c161c3db95902e0ecbeaacdaa014326b9f48ac5b3ecb40e79839be6c2cb0011bf9b50d780bbed5a6d9081d02fe5f7d7c69b87918c4b656215ec42a0fbf46fd8e991acd943045645e8d2dd0a4dbef7e8e34abcd0dcf09680bc419e1e0eb4d07c1fb2724a3e82fc8cc8b35e77a7bfce740c54a256d9dc592c9d18fa45bfa28fbe3da20b186020272e6ec1df4995b3389e6d4f49c834141b993bb57a3aa4c388e0acf0ccc1e585a56c7d921a5e33ef9517923310afe61ce1855082449983183dd70629793b6815f010ef33dd82ff6c557425ffa1901acd1a839ffcb42f04314a654f8baa36f67948d9f7b0480dba30b58aa32fa435d5beacd9af59d152e1f34c88555eea3135d68faeadf5ed1bf155bea7bbf057b44c48756f7fbd53adc56b2f1dfb38a5d37dcf3f00ca5f9589c607da7c10db6d07561748f743e0ec9ab45e96446613efd69dd3c90427fd17e9c4411e6bb914ea7bee74865a8e20057e062fd22bd") ironclad-0.57/testing/test-vectors/sha1.testvec000066400000000000000000001346631420372057600216350ustar00rootroot00000000000000;;; standard tests (:digest-test #a"" #h"DA39A3EE5E6B4B0D3255BFEF95601890AFD80709") (:digest-test #a"a" #h"86F7E437FAA5A7FCE15D1DDCB9EAEAEA377667B8") (:digest-test #a"abc" #h"A9993E364706816ABA3E25717850C26C9CD0D89D") (:digest-test #a"message digest" #h"C12252CEDA8BE8994D5FA0290A47231C1D16AAE3") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"32D10C7B8CF96570CA04CE37F2A19D84240D3A89") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"84983E441C3BD26EBAAE4AA1F95129E5E54670F1") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"761C457BF73B14D27E9E9265C46F4B4DDA11F940") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"50ABF5706A150990A08B2C5EA40FA0E585554732") ;;; bit-level tests from NESSIE (http://www.cryptonessie.org/) (:digest-bit-test 0 #x80 63 #h"C80B973C1157A7FE4F4150AD4C2A932494BF7BC7") (:digest-bit-test 0 #x40 63 #h"56B60A86C48BF35C2688B2B4E44E906C22221CF6") (:digest-bit-test 0 #x20 63 #h"F07DC15D139E20B569D018C517EA697434CB35AE") (:digest-bit-test 0 #x10 63 #h"CF3E842C69F06D3BC769367BC4B4F6E57B5496E5") (:digest-bit-test 0 #x08 63 #h"96429B7BAA941F24306C1F9103FE2B454D1323B2") (:digest-bit-test 0 #x04 63 #h"F8A7C819FA7A7CC6C08376001F6F7C30DC52837D") (:digest-bit-test 0 #x02 63 #h"78ADA92E4FEFC60B100EE2AF775B05520823B020") (:digest-bit-test 0 #x01 63 #h"9C8D8E5A31C9802B093C4116DFB0A23A311B8029") (:digest-bit-test 1 #x80 62 #h"7D43DAA11204FC356565AA3C6D05ACA04D9870C7") (:digest-bit-test 1 #x40 62 #h"E6B75E72075112399E5BF80A9A9CFBF6049EB5D2") (:digest-bit-test 1 #x20 62 #h"B445E64D88F2633490FA0EEB349D7FAC9747C8F4") (:digest-bit-test 1 #x10 62 #h"038C8FD9D653E91399EEBB87DFA2DD801B2B34A5") (:digest-bit-test 1 #x08 62 #h"DDA4821E8441BC1CA66D18A2EAAE4A6D0A495228") (:digest-bit-test 1 #x04 62 #h"499E5250D504F77DAE8196D52B399EDE52B19BC5") (:digest-bit-test 1 #x02 62 #h"CFEE25E054425F4989F1E6EFD3E1F3633FFD2D5E") (:digest-bit-test 1 #x01 62 #h"01F033F733AD52897A5F85743631D2C5A24DF29D") (:digest-bit-test 2 #x80 61 #h"8F16CF5C70AB51ED9CDB44312EAEAD39C3EC2E52") (:digest-bit-test 2 #x40 61 #h"740B98B60EF34F120E38818427D72187CD5DF4DA") (:digest-bit-test 2 #x20 61 #h"D0723C0AFF5876687A7B8CB6D0C45E6CDFE398C0") (:digest-bit-test 2 #x10 61 #h"BF2AA88116C9BBA41E76C4835A8DDD0C2822A5FE") (:digest-bit-test 2 #x08 61 #h"6EBF3F3419C3CCC586344CF24E07050A8D5E5AAA") (:digest-bit-test 2 #x04 61 #h"1DED9734A2A6497F545537F50E162B707EBBECEE") (:digest-bit-test 2 #x02 61 #h"E0150DD6726DCEC7EECF0675A7FC998A98D43852") (:digest-bit-test 2 #x01 61 #h"C85602D666EC3B89FFBC8D496447113D15B15910") (:digest-bit-test 3 #x80 60 #h"11945DDD1210E9720335BAA588911F0DD22A75F8") (:digest-bit-test 3 #x40 60 #h"3F085871E93D27CA79BA3CF549F4F14E925B47EB") (:digest-bit-test 3 #x20 60 #h"1EAF14B33C7CCA699DAD92C8514BDF68B01CCB40") (:digest-bit-test 3 #x10 60 #h"09444FABB51E6FE7D4452E79D1063B4A8E3E4D82") (:digest-bit-test 3 #x08 60 #h"87D02B5C01451B2E71917D51C078C522CECF3E0B") (:digest-bit-test 3 #x04 60 #h"2168E7CE44E725A2723542EF9BD06FDA7A7E7C8F") (:digest-bit-test 3 #x02 60 #h"2E9C528E8E7F79FF214EB169D8A4C9762125373A") (:digest-bit-test 3 #x01 60 #h"80762AC3A2C6589B32FBD1B5EDF9CF04B1B2215C") (:digest-bit-test 4 #x80 59 #h"AC293B9701FEF4DDDAC98EA2B6024719642D26BB") (:digest-bit-test 4 #x40 59 #h"6C7DBCCA072D9FB9096F0CB316F519DA899173E0") (:digest-bit-test 4 #x20 59 #h"5B5E8B8FD142866535F68E59D4FE77CB05FD9CE1") (:digest-bit-test 4 #x10 59 #h"42875F6AF7B7651D0C8385B425DB3FFD99550102") (:digest-bit-test 4 #x08 59 #h"694D8BC576F66ADE600CB6984EA7A7260CC44F14") (:digest-bit-test 4 #x04 59 #h"FE26D65A5424E8A8B3D3F5F1C34B9B5062BAF56E") (:digest-bit-test 4 #x02 59 #h"3371E839A02AADAD47C7CCA1B2E2533F2767F422") (:digest-bit-test 4 #x01 59 #h"4168FA28936F4B1033A4E19D0A12DA2DDD47C244") (:digest-bit-test 5 #x80 58 #h"24FFD42C1B342AA89E041B37755B337879ED7CA7") (:digest-bit-test 5 #x40 58 #h"1C0913FFD921BEF41BD7462358E086227294B183") (:digest-bit-test 5 #x20 58 #h"48C97D9F0E0C7B29130646BE6A56D4B2646EDB88") (:digest-bit-test 5 #x10 58 #h"D6777E499284128D7F6E37D730D0E3FEA173E438") (:digest-bit-test 5 #x08 58 #h"D032E3F7EF5669B263F474E3CCAC671CDBBAF8AB") (:digest-bit-test 5 #x04 58 #h"97C80A4D5A89B79294C35CD6763B2E9C757545C7") (:digest-bit-test 5 #x02 58 #h"15595DE8404B06AEB0AC4F5460741C5EC4618A6A") (:digest-bit-test 5 #x01 58 #h"E35EAC18F548B2213043E2071E8A3328073E3B0D") (:digest-bit-test 6 #x80 57 #h"D9CFDC0AFF96B9553CF7E3043D9276A434615E96") (:digest-bit-test 6 #x40 57 #h"0A99C997839E36B53BC61E11978D44052527891E") (:digest-bit-test 6 #x20 57 #h"F6D409B550C2EF3271D07D50ECF0AD2D88700619") (:digest-bit-test 6 #x10 57 #h"DEED66BF0A4E4043D3811EA8BA0326704C334B0F") (:digest-bit-test 6 #x08 57 #h"2567B864FD878473495FD335AECEA89FCCDF2673") (:digest-bit-test 6 #x04 57 #h"EB8BFF11ACD9A2E62CBEF9CD5A61697E5D5316D9") (:digest-bit-test 6 #x02 57 #h"C7F2D49AAA96200A373890516DC9320819416808") (:digest-bit-test 6 #x01 57 #h"B529D29A35A660A26B1D940EB48B3F29983F12C2") (:digest-bit-test 7 #x80 56 #h"55BB9C4F4175807789AB8C7E23CACFE2F8CF7031") (:digest-bit-test 7 #x40 56 #h"0E4FE8A0F3E5D3E415B93E85924FF96684EDD04B") (:digest-bit-test 7 #x20 56 #h"0CC5775BEF98969EAA8B1DF3BEDD1E305825D076") (:digest-bit-test 7 #x10 56 #h"1A455AD4ED941623B6A3FE01B16C1AB10C0AF1A4") (:digest-bit-test 7 #x08 56 #h"BC112941C3736D8608572454BC3B9B81E4F00ECD") (:digest-bit-test 7 #x04 56 #h"38846E9960050E14E883B55D84DB7F01215355AF") (:digest-bit-test 7 #x02 56 #h"087894D777079923A1F335B5CFF64EEB020B9831") (:digest-bit-test 7 #x01 56 #h"455BBDE02D1E9648A3C5D6B2B0BBE09B1167AB9B") (:digest-bit-test 8 #x80 55 #h"E09044703F1C8F36B359CB4F88D9183E2626795B") (:digest-bit-test 8 #x40 55 #h"A7B4E0ED99C4FF63BF6008E07AC09C0C812BAE1B") (:digest-bit-test 8 #x20 55 #h"3A11D6DDA00DB4C776E3FC7B6464679283E85F9A") (:digest-bit-test 8 #x10 55 #h"631C575338C15E3F7938F30619E17BD3F93B3C89") (:digest-bit-test 8 #x08 55 #h"EE5C5EA82DE03CC13772A1D41520F5771A2D54BA") (:digest-bit-test 8 #x04 55 #h"6C9A8F934DB6F888D6F9BD47DE8D18E97AEF836E") (:digest-bit-test 8 #x02 55 #h"A1332E2DD7913BD57AF24F0F9179D73D72480809") (:digest-bit-test 8 #x01 55 #h"0DBCC21D171566F731595798084806D37E301461") (:digest-bit-test 9 #x80 54 #h"E6C51116961912F5314CFFA544A6DE2B24AB90D5") (:digest-bit-test 9 #x40 54 #h"E6250ADF0AEC03FA20EA071B0FBD35B069E706C5") (:digest-bit-test 9 #x20 54 #h"325B2FA3C59CE312460897453FF74318877C6B72") (:digest-bit-test 9 #x10 54 #h"DEE1C0C3387D7D8C31867F1BA6AF34026D49E1D7") (:digest-bit-test 9 #x08 54 #h"BF533F21E4E65065AF6B3EE144683A80BF925D4B") (:digest-bit-test 9 #x04 54 #h"B9E4A4E179F9198A2ABFEFAB564C27EA3C6D5F52") (:digest-bit-test 9 #x02 54 #h"9D892745D3179215EE1D2EA9898A3AB758DD63E9") (:digest-bit-test 9 #x01 54 #h"3506520468939295101A6EA95E427F762720DFE9") (:digest-bit-test 10 #x80 53 #h"4C8D7DC1DBF470B879ABFC6DB168899AE10F70BC") (:digest-bit-test 10 #x40 53 #h"C426EBAA58B03228871719AA5FCB30B05BF740C9") (:digest-bit-test 10 #x20 53 #h"5AA07142574F0AA5AE4FD7B5A51EB9AA63C1EB42") (:digest-bit-test 10 #x10 53 #h"56280BC7492BC80A2AD438E42C5C3956DC30E097") (:digest-bit-test 10 #x08 53 #h"967580251AC2A105E964C97DA71A1FEBA94A68AF") (:digest-bit-test 10 #x04 53 #h"158B4D9BA108126FC615A75C18228120D7D1969E") (:digest-bit-test 10 #x02 53 #h"119DAB5498C9D2E0240C21B9EEFF2D384F350855") (:digest-bit-test 10 #x01 53 #h"59C36C62CA45E8C5CB3E20747B19EE899E3DFB00") (:digest-bit-test 11 #x80 52 #h"A2D8594658B47709E739AFDA17E32174FC22D293") (:digest-bit-test 11 #x40 52 #h"C7646820D8315F820EE5DAAF48A32E10CD942617") (:digest-bit-test 11 #x20 52 #h"46EBF4A676804A632551E82BE4B57BD5CA435058") (:digest-bit-test 11 #x10 52 #h"941FEE8AFFDCE92C7B0C0C9F53935250D1606D2F") (:digest-bit-test 11 #x08 52 #h"4E79BF4BC6F098285196C9F624113476C002FC50") (:digest-bit-test 11 #x04 52 #h"1EF86E0EEA541C8C374817BF6BF07278D3EFFEFC") (:digest-bit-test 11 #x02 52 #h"C24BE886919E9FEC48294C5E2C7F7BBD5332565D") (:digest-bit-test 11 #x01 52 #h"6C99FCD7E1F6855EED92C2A7D1F3D3D9F6E8AD87") (:digest-bit-test 12 #x80 51 #h"E756DA506BFC4A04465D5D7DD4C205E946485B22") (:digest-bit-test 12 #x40 51 #h"FD4E900DE3342EE985823CBE347D7ABFF0085087") (:digest-bit-test 12 #x20 51 #h"CDB5CFE636C4F385E133D9422E38AE177DDF607E") (:digest-bit-test 12 #x10 51 #h"F40B90D9CFD60CD39C1CF1C5ED6A6BE9B4C81EC5") (:digest-bit-test 12 #x08 51 #h"F82DB7F598A7A746B90E7F0FAFB95B69C98D9C39") (:digest-bit-test 12 #x04 51 #h"B9BED915E0015F533E4C47A65264BF7DDDB2C7DD") (:digest-bit-test 12 #x02 51 #h"77B7CD2112666C5C49C9326BA18EA9B7E01912CE") (:digest-bit-test 12 #x01 51 #h"4C0CAC3DE798E7667519CBD8313562D32CB3F666") (:digest-bit-test 13 #x80 50 #h"32419E5FC2008472AC4F46B03E905DFBD8357B60") (:digest-bit-test 13 #x40 50 #h"D6B3831658FDD1185971EA835D071FA672220080") (:digest-bit-test 13 #x20 50 #h"71DB19334F8216306F414D16ABB810D5F887EEC6") (:digest-bit-test 13 #x10 50 #h"4EF16FC64A42E04BA42070BD52C7B331A8D7B33C") (:digest-bit-test 13 #x08 50 #h"2773F7D0174EDA2BABC2E658D4112E1ECEED7C4D") (:digest-bit-test 13 #x04 50 #h"3C9EC7C855FC076D4E93446B0B97881614AE69C4") (:digest-bit-test 13 #x02 50 #h"C05B6BCCD76C842939C824BB7062837D606DC774") (:digest-bit-test 13 #x01 50 #h"7FC1463FC5E883A8783E83BA2AED9477140CEFC7") (:digest-bit-test 14 #x80 49 #h"23CA389ADC702949AFDC8CE40B6CE7CB88A1DA02") (:digest-bit-test 14 #x40 49 #h"25D9C3078E383115720D33841E04590E03FDDB85") (:digest-bit-test 14 #x20 49 #h"5749378C96E41C974AB6EB82720F795CE2822FF4") (:digest-bit-test 14 #x10 49 #h"24F8E36845E10A853528181AD6EB1649657123B7") (:digest-bit-test 14 #x08 49 #h"45CB9C18DA6F7ED31007F7F7AE1AE49CE685BE67") (:digest-bit-test 14 #x04 49 #h"B26C1E83F82D92ADC5787069EA64A97EAEB05449") (:digest-bit-test 14 #x02 49 #h"9ADEF89F604BCEE1A318F0F9AB93460D3F03DD3B") (:digest-bit-test 14 #x01 49 #h"CA02BF109DD63BAD6210E37DD0436F91BA94F33B") (:digest-bit-test 15 #x80 48 #h"B4DA276DDFA7179F9E1557343D30FC553F61C485") (:digest-bit-test 15 #x40 48 #h"3E003A83B8694BCC857A628447DD83D4B1B4B255") (:digest-bit-test 15 #x20 48 #h"CFAA4C7F76DCEA939513C08DFAC97C7D350EBA04") (:digest-bit-test 15 #x10 48 #h"004C40DD366F88F9FDDD83771C05B48B66DCD70C") (:digest-bit-test 15 #x08 48 #h"BEC1E4B13505FC884DE92454B178481ABC2BFA59") (:digest-bit-test 15 #x04 48 #h"E7CCBEF62B98CB5597DF9B14B8AC8F8B0C97F518") (:digest-bit-test 15 #x02 48 #h"7B0215FAF7F0443BE069C9278286165E26CBCF73") (:digest-bit-test 15 #x01 48 #h"108CE1122EB0C82633F976CA2EFA026BBA959308") (:digest-bit-test 16 #x80 47 #h"975C113EC6E5A2C1D6D79478A109040E2751D43F") (:digest-bit-test 16 #x40 47 #h"B61659219A809E80C7ED3D7846F6F3F3BEE7089A") (:digest-bit-test 16 #x20 47 #h"B8278481A63BF09E1418081155AE7E5261E1A241") (:digest-bit-test 16 #x10 47 #h"AC46AEABE0A215D11130DFBB031A1222C055EC7E") (:digest-bit-test 16 #x08 47 #h"6531C0A7931C275B4F632EF8093919DF9313C4F5") (:digest-bit-test 16 #x04 47 #h"C74538BD718108640DB915639119F04D72C3F096") (:digest-bit-test 16 #x02 47 #h"F3144CC8D9A20E480E4E58DA30ACFEE56D591CFD") (:digest-bit-test 16 #x01 47 #h"98556435801AA5697D810F8473630343A1B31A61") (:digest-bit-test 17 #x80 46 #h"DA48390CD34E4B6128B0164BD47120E098CCC32E") (:digest-bit-test 17 #x40 46 #h"0E5758502FAB4FAC56076ECBC3E3434184CD81D1") (:digest-bit-test 17 #x20 46 #h"C6AD9BDFC1A609434A034987B95DF0A95F16AA09") (:digest-bit-test 17 #x10 46 #h"6B7EDE476CEFDCFD23C99A2507C7289C703CC52A") (:digest-bit-test 17 #x08 46 #h"8EBED867CA66DF27A46CFD0DF20C836EF5A46C2A") (:digest-bit-test 17 #x04 46 #h"0D1A9561D0E873FEDE31413352A8C6877431662B") (:digest-bit-test 17 #x02 46 #h"71DC3FD33E02157B10FCBA37BE9424783098890E") (:digest-bit-test 17 #x01 46 #h"700BB77FF59F2F0EA7770106EA4ED5D45A86E2CD") (:digest-bit-test 18 #x80 45 #h"F657B3ED77505CDAFFCA43B21549A5D9426306C9") (:digest-bit-test 18 #x40 45 #h"661C99496AED852B153656EC8B26EF26366395AC") (:digest-bit-test 18 #x20 45 #h"5B95A6DA71F704BF5A432D1987EBF996996043CC") (:digest-bit-test 18 #x10 45 #h"A97DD84F3159897B8369F7D7CCC0C1B32D2C397B") (:digest-bit-test 18 #x08 45 #h"891799A91B5D53171B3FC831B0AEB08969206365") (:digest-bit-test 18 #x04 45 #h"C9109757AA36E1856C660A2B52183EA5CF50F0D8") (:digest-bit-test 18 #x02 45 #h"4FCD24B654212348D52FDCF0C0942737F997E6FA") (:digest-bit-test 18 #x01 45 #h"D1397B8A4066E2168FD8AADE3EE10CA203CF17CF") (:digest-bit-test 19 #x80 44 #h"349FBC1CCBF6069A09A8FC7995C069E32DE61F0B") (:digest-bit-test 19 #x40 44 #h"A2CDC16FE423A24901918C97398D1B961CFC316C") (:digest-bit-test 19 #x20 44 #h"317843ABBDC2B0953E4FA0904733F4242D7947E0") (:digest-bit-test 19 #x10 44 #h"0D7FFF1FF47D64E3E48D7282B34BF6747284B415") (:digest-bit-test 19 #x08 44 #h"78F1BE3F2CE991B8DA39691A5604B9E635611DA4") (:digest-bit-test 19 #x04 44 #h"F9ABB648ADB9141E575B8EB55D19A7C3D668E77E") (:digest-bit-test 19 #x02 44 #h"E4F6C06F5EE755AF403815180F77B928E4825517") (:digest-bit-test 19 #x01 44 #h"7E012352BA1CC23980832C211BBE905B20500589") (:digest-bit-test 20 #x80 43 #h"BC8B0C78E3881EB468080BA61399C19A57E37722") (:digest-bit-test 20 #x40 43 #h"129B6F6CCD15EA61F479D5BAB6D3AF9A6ECBE8F8") (:digest-bit-test 20 #x20 43 #h"274CBEEA6E5437DE4E1C509A2D7898192D1190C9") (:digest-bit-test 20 #x10 43 #h"7D2E8445D5AF45B4234C662D7365DE0FDE3F137A") (:digest-bit-test 20 #x08 43 #h"09778AE85FB61B38629ADA752E43968CFDEA9735") (:digest-bit-test 20 #x04 43 #h"FFAC48B01BDDD251E36EC2117FE4D7FB3E2DAE88") (:digest-bit-test 20 #x02 43 #h"BF7F915990E45208E2115494C3C84B54E3F94D1A") (:digest-bit-test 20 #x01 43 #h"BCEBAE614742D8B4EA82342D41081B9477AF1298") (:digest-bit-test 21 #x80 42 #h"38ADB2132156AD53D301331100DC40E1A8B5061A") (:digest-bit-test 21 #x40 42 #h"EA743C69E66472733131F459195BEC8AF9226306") (:digest-bit-test 21 #x20 42 #h"847E47943D04B434A66BF9BD9B0703A1E480F9F5") (:digest-bit-test 21 #x10 42 #h"BB62CE0B4DDC49A425C9020C558EA08613C304ED") (:digest-bit-test 21 #x08 42 #h"2183FBE664BEECDADC7A01EEBBFB5948AAB60A6E") (:digest-bit-test 21 #x04 42 #h"0B80D23DF470BB06F2519E17C03002CC0AD4F2CC") (:digest-bit-test 21 #x02 42 #h"FDDD3E02E14360F5DB82D9791E42087B4FC86AF2") (:digest-bit-test 21 #x01 42 #h"49BB25180763123AC51C3BC43C7DDBC32D778FE4") (:digest-bit-test 22 #x80 41 #h"4D34E126B4F06392A6648DAA3DBA9F48C128B9B1") (:digest-bit-test 22 #x40 41 #h"7D90EBA93DF3A8E8AAF26F42AA3B87246A4C2086") (:digest-bit-test 22 #x20 41 #h"B6919E57AABDD131F4B01A8CA3CD5DEE4EC0ED85") (:digest-bit-test 22 #x10 41 #h"AB4CF9C77E130A221852FC35623DD8B056FA7A00") (:digest-bit-test 22 #x08 41 #h"9C2F76C3FB5ED565DE41FD703227B420E9BBDA64") (:digest-bit-test 22 #x04 41 #h"3BA8BC25929043F59402ACE9C9E57758C2A1037D") (:digest-bit-test 22 #x02 41 #h"722073DD703E1E9AC88AD3D0F1E267479BCBFAB3") (:digest-bit-test 22 #x01 41 #h"94D62AD63B4DFA23208CE1EA8F95F114F023C58A") (:digest-bit-test 23 #x80 40 #h"F9DF96D378B1992100EED2DF0D4D349A17F6EB93") (:digest-bit-test 23 #x40 40 #h"CD83248D90959C86D383C0E9A7A722AA8C9D4688") (:digest-bit-test 23 #x20 40 #h"BC548A565154A6694995B5BFA59423D65F3A8981") (:digest-bit-test 23 #x10 40 #h"E8A080EE63161372523FB08370F525FEF7535C43") (:digest-bit-test 23 #x08 40 #h"203B3667F5227B2ED4EE398A9078E840B25289F4") (:digest-bit-test 23 #x04 40 #h"9196A67C90584CC300100BBCFF5DDC6FD71A2405") (:digest-bit-test 23 #x02 40 #h"7D540DC309A2597BFD5B5AE0C4DCD926E49F4920") (:digest-bit-test 23 #x01 40 #h"3060E082B61E4C6EC0D4030C17817453D69D9285") (:digest-bit-test 24 #x80 39 #h"E1BF28EA2645C40BF120B26D7AB4FC5A1EC254A8") (:digest-bit-test 24 #x40 39 #h"9BAA92BCA186E8C5948CAE54F88D09F2AEC14D7F") (:digest-bit-test 24 #x20 39 #h"18BA5CA9513B130CE92453FF36A5A0D2FAA9A476") (:digest-bit-test 24 #x10 39 #h"DBED362F2B76BBF6FA58E18D29397A95F0FA0112") (:digest-bit-test 24 #x08 39 #h"E2E1A4BBDED9D5FA2DA200B233E2186630396F57") (:digest-bit-test 24 #x04 39 #h"4211DC41833E093510D395A5B14BB96D64C38D92") (:digest-bit-test 24 #x02 39 #h"E726FCCE510DF503CE82640AC1F7AB28C19D7C46") (:digest-bit-test 24 #x01 39 #h"D702CBE5864F3B07AFFC43367136D69A1F2B8D42") (:digest-bit-test 25 #x80 38 #h"54B17EE781A17EDC3B4C420D78F83C7C978F3CAB") (:digest-bit-test 25 #x40 38 #h"49C732AF40F4A74D780D4250267706F7FB1A6C47") (:digest-bit-test 25 #x20 38 #h"17DDCE095E7D0CFD5F795AB462EDFCC116B7E532") (:digest-bit-test 25 #x10 38 #h"D0C2B1BF2F99F8D107800A78C414701FC1A842F6") (:digest-bit-test 25 #x08 38 #h"43027A3615D6C7A83D14581535FBACAA36572ADD") (:digest-bit-test 25 #x04 38 #h"DD40216A698A881B04541E2405CF43D38BD62D61") (:digest-bit-test 25 #x02 38 #h"A14ED13406E4751DF32F0C6F1BD82F03B0D335DD") (:digest-bit-test 25 #x01 38 #h"30600629A515EA95FADAA13E33CC4F1C6D2E7EE5") (:digest-bit-test 26 #x80 37 #h"D8003007E44D39E16CBF0A0B7BB72E523705FF35") (:digest-bit-test 26 #x40 37 #h"090919153F6F2B0B7414013B00F29BA16C3F6ED4") (:digest-bit-test 26 #x20 37 #h"A9F90B4F50C93EC61148D8A0AC41B10CBBD42C51") (:digest-bit-test 26 #x10 37 #h"56F121A340DE79356F95BE7E371C4214643A92FD") (:digest-bit-test 26 #x08 37 #h"CCFA24CFD91E151AA67B88120B6E3E6F252F41BE") (:digest-bit-test 26 #x04 37 #h"DF66AF08C35C0DDD6FAA088CEF132466022F1CAD") (:digest-bit-test 26 #x02 37 #h"E081C6CC8E45EB60EC5EF41F56255BAC13546D06") (:digest-bit-test 26 #x01 37 #h"AEC50B2FEFD190011516392B43B61E86C9F4F779") (:digest-bit-test 27 #x80 36 #h"D9D04DCDF5855C520BF87ACCF7C86AD48E648935") (:digest-bit-test 27 #x40 36 #h"21A6A0044B5F5BFFA8245672EB0C0AC70CAF9757") (:digest-bit-test 27 #x20 36 #h"EB9B20C75D2DE45B58049D0A7B7AC42A21E14161") (:digest-bit-test 27 #x10 36 #h"84569C7E024FDA33562804ED1F1959CD60C1537E") (:digest-bit-test 27 #x08 36 #h"D6A143BBE76833DDBA3B2F2BD8481C1F0FEFA59F") (:digest-bit-test 27 #x04 36 #h"26D802656E0E29EAA263CD58FF39CD8D08567A1C") (:digest-bit-test 27 #x02 36 #h"A8A2791D33CC80A935F07744012667E989E19805") (:digest-bit-test 27 #x01 36 #h"1B2AC35A2425E935D1B4398D72313306586E77DB") (:digest-bit-test 28 #x80 35 #h"A89C88DD8D3057BB49344BA9D7D274986BDAC954") (:digest-bit-test 28 #x40 35 #h"48D0F840967AF3F7F67162B04467996F7E0248AD") (:digest-bit-test 28 #x20 35 #h"1E2355A26E6E96391A6CBB14F41790743EB65D3D") (:digest-bit-test 28 #x10 35 #h"6580E48E6E1F51CC4FA2B65D74C8183B59F69A6A") (:digest-bit-test 28 #x08 35 #h"0C4E898BB1CD11C1FBE41A434A2A73697E2A39EF") (:digest-bit-test 28 #x04 35 #h"F4261C323CEFAEE5CDA5F20275BFB4B62D8206B8") (:digest-bit-test 28 #x02 35 #h"1A4788A361CECCED29EFEAC51FF8F6BB68DFDED4") (:digest-bit-test 28 #x01 35 #h"2C414B96A80B2BE5D1A6E1A29DD24E68FB7EF776") (:digest-bit-test 29 #x80 34 #h"5B8C03EF6CCBF12DF96F9D46DEF25C497EB8E4EF") (:digest-bit-test 29 #x40 34 #h"509A557F6D594B365626EC8A836468DEF7BA1970") (:digest-bit-test 29 #x20 34 #h"4A5BB3D4B6336D2BC02E60BDA63195F07A767B62") (:digest-bit-test 29 #x10 34 #h"4B52399A9FE907CDBE8370F1F7F28F8884DB5B70") (:digest-bit-test 29 #x08 34 #h"310775D674A5A05F9F6FB70CDDD3C9EF68A6ED8D") (:digest-bit-test 29 #x04 34 #h"10F543F139A0F6BC2B8051974222D4870C79A050") (:digest-bit-test 29 #x02 34 #h"890E02391B11FAB9602F0EE18B0CA0A34AF425F5") (:digest-bit-test 29 #x01 34 #h"9DEA28EC04E1A9BDDE165FB81B9E123256CBB876") (:digest-bit-test 30 #x80 33 #h"4972106BA1ECEFD0C55068120585EF2D94239CBE") (:digest-bit-test 30 #x40 33 #h"787F7049BB78E3712E5B9B4F447DB38D2A42DA67") (:digest-bit-test 30 #x20 33 #h"3E8E2C84DE92183C61419BE04FF01A26ACEF9EA9") (:digest-bit-test 30 #x10 33 #h"DCF8E1EDB48F42331F5DD50C06269F51A1C7B2D5") (:digest-bit-test 30 #x08 33 #h"BDEAEDC13E7010849D258AA7C9BE0206F95C853A") (:digest-bit-test 30 #x04 33 #h"36AA3434BAD394718B21ACDF6EC2526F51627948") (:digest-bit-test 30 #x02 33 #h"E6EE7041303A55D95BA3093507F58F5DA10B8254") (:digest-bit-test 30 #x01 33 #h"380CC98BD9C83AA09DC30DB59C3029A3ECBA5C1C") (:digest-bit-test 31 #x80 32 #h"9B928D8148F4114F158E46824E766FF2A7A62B34") (:digest-bit-test 31 #x40 32 #h"F33FAC77F2A2036C6116D19EFBCF07B1C0F38FAD") (:digest-bit-test 31 #x20 32 #h"1CA9B7E149C031EE02C254182A90B62547DB6AA4") (:digest-bit-test 31 #x10 32 #h"B1DB2B2305B65A1421B7084A78F97FF2D227865B") (:digest-bit-test 31 #x08 32 #h"BAC51FAAADF6127971F210E8EDDBE17E99E17993") (:digest-bit-test 31 #x04 32 #h"D26C92EAD620313A4B21CDACF0F32287BFD21F74") (:digest-bit-test 31 #x02 32 #h"D7A7B4D4D0CA22EEC9D2E7CB1D8FDE422225483C") (:digest-bit-test 31 #x01 32 #h"F936AF09029B1E14CDDB9387E8362EB29A436A0B") (:digest-bit-test 32 #x80 31 #h"C335854A19D6B6B099AA4145E1CD9658DAC4B60F") (:digest-bit-test 32 #x40 31 #h"B8EA6301BA799CAEDF54DED2F4E04253E1831D8F") (:digest-bit-test 32 #x20 31 #h"6BEA287617579A5B351CDDC18D14E1CF0E695250") (:digest-bit-test 32 #x10 31 #h"AD6C45B1CD47B6C705D3B75CCF90AC0D1915686C") (:digest-bit-test 32 #x08 31 #h"6EB575E8412D916DF0AC6FFDBB5CC79EBA83DCE5") (:digest-bit-test 32 #x04 31 #h"226D1AC28AB39B62D24E2B80BAF4D9DBA0B1C755") (:digest-bit-test 32 #x02 31 #h"A109D1D9CFD7800D310BCBA64E2F1300C7367734") (:digest-bit-test 32 #x01 31 #h"37B7DCF21E0E183A9A86170997DF242A84A85FF7") (:digest-bit-test 33 #x80 30 #h"C3E28649F4C02F21C4CD5D8E27D4E3D67016C2AC") (:digest-bit-test 33 #x40 30 #h"79889011EDC1EE59541FD593B24B4AA905BD17C4") (:digest-bit-test 33 #x20 30 #h"4E1D04704B703757389B3C91FB05D2AA7E2D9043") (:digest-bit-test 33 #x10 30 #h"A86CB3BFB25AE2F28C063E6B88CFFD8C37850CF6") (:digest-bit-test 33 #x08 30 #h"093FFB88A184EA1E0F81E244E40A13449CEC646E") (:digest-bit-test 33 #x04 30 #h"EC7D66DA9C3FA2CCA0365E2AD3E2A78BD59DB1BB") (:digest-bit-test 33 #x02 30 #h"F8EFA4B89684A900E6A7DFBD8E76834074D3C653") (:digest-bit-test 33 #x01 30 #h"2B95691BE17BFEAC4911ED9C629B47DFA8729E1E") (:digest-bit-test 34 #x80 29 #h"93A743FC2BE88424D24B459475CF7579B6FE82D9") (:digest-bit-test 34 #x40 29 #h"C68E51DA0171770DFA3FA96234AEF2F53BC493BF") (:digest-bit-test 34 #x20 29 #h"3B74CC5D74226619E37F01EE83D2B48540CD734F") (:digest-bit-test 34 #x10 29 #h"AA08CCB4A80FA396B4E8D60F679EEC506B7B9A65") (:digest-bit-test 34 #x08 29 #h"A11E372982163EBFC67412B34B63D86FC3E83067") (:digest-bit-test 34 #x04 29 #h"605312FB9DCAFE0794773C6016E428EFA6F762D7") (:digest-bit-test 34 #x02 29 #h"112984BB5F7E77D2838A44D9166A01EB339E3C11") (:digest-bit-test 34 #x01 29 #h"2338180643FC2A6F60A8CB718DAC7E1639F57351") (:digest-bit-test 35 #x80 28 #h"F14B90992F4D5A1243BFC5A63C94C49590C46B68") (:digest-bit-test 35 #x40 28 #h"FFB6AD250782AE8C16F9A610973C77DFEF095F1C") (:digest-bit-test 35 #x20 28 #h"D1B731D084179C8D12E5365EFF7100BBECA13427") (:digest-bit-test 35 #x10 28 #h"96730C09F3AB3E06BBD64A4A42850877E7AE4293") (:digest-bit-test 35 #x08 28 #h"58F5585F58985EB95C7A3EF8561D5FFBBB60A6A9") (:digest-bit-test 35 #x04 28 #h"89DE54F734D3A6A3A2E05D9C58C630A9C25D4981") (:digest-bit-test 35 #x02 28 #h"5AB0D562986A32A334ECA6CC5B21433C18B7819A") (:digest-bit-test 35 #x01 28 #h"7E3D6DFE5A25FCC4A340D9CC5A998F0614688176") (:digest-bit-test 36 #x80 27 #h"18977350D746C049A89B49814682FBC8DAC9E28C") (:digest-bit-test 36 #x40 27 #h"93F5DEE808872B1ACB23F7CF21B5C7CB5EC7FC52") (:digest-bit-test 36 #x20 27 #h"015100CAE85185F42A48B70EB95AB0DE9AE118A4") (:digest-bit-test 36 #x10 27 #h"D12E261473BF1C68A961F34334DF31E164CD73A8") (:digest-bit-test 36 #x08 27 #h"D74FDFB0D814771E7B4B955C268D15B5AA99D72F") (:digest-bit-test 36 #x04 27 #h"CED846E7527C74653CD30D80E8097BBD8C29BCA6") (:digest-bit-test 36 #x02 27 #h"77A55E00E669E34FD0F9A16F2D16DEFC900EA466") (:digest-bit-test 36 #x01 27 #h"281F0F08687150F51218B5F9119CA082D4F3423E") (:digest-bit-test 37 #x80 26 #h"404BA3E3275F06E9FAC48C8D92F51E9AF4DF55D3") (:digest-bit-test 37 #x40 26 #h"97EB1BC7B8D1DFA3549B8A2E07595676163D09D3") (:digest-bit-test 37 #x20 26 #h"C099C6B7A8352BEB1262ECD02782BF4428FF69C4") (:digest-bit-test 37 #x10 26 #h"9D77E37FF377A4C222E7C81003051CD4DA9FE9EB") (:digest-bit-test 37 #x08 26 #h"C59DA8793931E9E4B930E100CDBB4C36EBF3ECA6") (:digest-bit-test 37 #x04 26 #h"BB6C8B6F3896DD85F33740404A834920E8AEA444") (:digest-bit-test 37 #x02 26 #h"DD366C91DE61D6B1581472C950C6D1223BC67CBC") (:digest-bit-test 37 #x01 26 #h"66071311DB52813C4F7F6538B28ED8EA38002555") (:digest-bit-test 38 #x80 25 #h"7FCB5E982D0475D029869F3947C25B1A55755589") (:digest-bit-test 38 #x40 25 #h"DE0ED84A276AA030B8EA70DC3C9CF295ADCCF007") (:digest-bit-test 38 #x20 25 #h"E6BED540761C6FDA38AC6DB6661D676DF7AFC71E") (:digest-bit-test 38 #x10 25 #h"829EADE04C28286AB3C589069D58B7226EBD15A3") (:digest-bit-test 38 #x08 25 #h"794F0FF33702723E8E6981F006632062CCC05D15") (:digest-bit-test 38 #x04 25 #h"8AFA385DBBDEE2BFA4FDCF01D047F3A131E08A67") (:digest-bit-test 38 #x02 25 #h"1E86C19A1A91270275C3E6E41CED9B7D4FF81133") (:digest-bit-test 38 #x01 25 #h"3ABBD0AD167CEE74D94CA4593B3C2EA74B9246C7") (:digest-bit-test 39 #x80 24 #h"6ED914AE39347E3A9A96080AAFBD497E33701866") (:digest-bit-test 39 #x40 24 #h"05CE2DD4AB125A0E913DFD514D9DD935B8DD3D62") (:digest-bit-test 39 #x20 24 #h"7C577206C0F66B2DF7ADB657B6AD528144913B26") (:digest-bit-test 39 #x10 24 #h"1D43ABCFCAE5E92A06796E7A751C8F569D88F7FC") (:digest-bit-test 39 #x08 24 #h"7B4CCFFD7E64AB1D7816CA43886EFE58CDE89B7B") (:digest-bit-test 39 #x04 24 #h"0F3D83BF05E509F3939B23C71D8E518E38A6C3C1") (:digest-bit-test 39 #x02 24 #h"223CB390EBBE15C117225A39DD45D7A9FC5B1D7B") (:digest-bit-test 39 #x01 24 #h"96AAC2F7DFA3FF387C3E12A53D8C51F93D362A44") (:digest-bit-test 40 #x80 23 #h"946F7992EF21D07B55B8CCCCB4840834CFC52492") (:digest-bit-test 40 #x40 23 #h"1254CEDA60C0DD56A06395D4B78A07A9A623CF8D") (:digest-bit-test 40 #x20 23 #h"4548994E655B8B63EC7761015C46BDAD46BBCA94") (:digest-bit-test 40 #x10 23 #h"A4DA64E02BB6FC6783254CCE92F4C28D79753F25") (:digest-bit-test 40 #x08 23 #h"8A213BDC144A8B6A4C518C1C22A425D3F21FEC85") (:digest-bit-test 40 #x04 23 #h"768B6B9397CE32864C5EE1A90EAF42D0489CDBE6") (:digest-bit-test 40 #x02 23 #h"F9313FB67EE62D61CB35B58A67F2668E8996A77F") (:digest-bit-test 40 #x01 23 #h"56F8DBF4CCF51AD0BFA042B7B2410346BC138E36") (:digest-bit-test 41 #x80 22 #h"DCCB6932C8AAE2EFA72EFAF9AAFB4804FA28AEDA") (:digest-bit-test 41 #x40 22 #h"2061CDBFE1D8A55C9F9D8DD49A8366139327ECD6") (:digest-bit-test 41 #x20 22 #h"956C4CD7F0E47501F07FD6694ADEE481A0A706D7") (:digest-bit-test 41 #x10 22 #h"B0A22915B6D5990EAE90AD3E550F9294D18F6E90") (:digest-bit-test 41 #x08 22 #h"21286BA23811271A072A75A3A7ECF33F186533B6") (:digest-bit-test 41 #x04 22 #h"BA591B8FBD5C8DFAE091AD997AF7D58D56656356") (:digest-bit-test 41 #x02 22 #h"34522D926DC21F0997400B42927EBF1CB291B961") (:digest-bit-test 41 #x01 22 #h"A0AA85260B30DA9D658413214918F7BEA7E3BC15") (:digest-bit-test 42 #x80 21 #h"696E36B391191DBA094532F9F61C9432AC42BB36") (:digest-bit-test 42 #x40 21 #h"032498A6EC908F466125E7A8A0BDC928199B5111") (:digest-bit-test 42 #x20 21 #h"2CE9D0CA449332DD88531128A549AC5AB50C38C5") (:digest-bit-test 42 #x10 21 #h"4970CDDB596A876A39F9D273CF718961603D2190") (:digest-bit-test 42 #x08 21 #h"A09DAB62BC9FD4A646B346398CE8665A0BB8108F") (:digest-bit-test 42 #x04 21 #h"9AE7485721299A29977998D5480505CA77BCDC40") (:digest-bit-test 42 #x02 21 #h"61BDD16D7695CDBC7E09C8ACC87C2EB64851CB39") (:digest-bit-test 42 #x01 21 #h"1DF7548A0CAD64526A030BC9BFC5626D17479831") (:digest-bit-test 43 #x80 20 #h"E6D75B4731632B08A9EC48332E3CC9C9E5F9994D") (:digest-bit-test 43 #x40 20 #h"29DE6BD404BF0FE6C284C578B017A6E713F59ECB") (:digest-bit-test 43 #x20 20 #h"55895E9A39F68680BA67F2CBB4EEA698496CB950") (:digest-bit-test 43 #x10 20 #h"85FCBA107C2156453C42CFFC30C63B40C9CAFDAF") (:digest-bit-test 43 #x08 20 #h"A9BB529EC301805AA8ACBE8389AD48E0385162BF") (:digest-bit-test 43 #x04 20 #h"154F31BEAFD8730A343C80051A2F9C149A3DD4D5") (:digest-bit-test 43 #x02 20 #h"F303E5E88C37C0EFF29180B372E00B9A8DC7DDB7") (:digest-bit-test 43 #x01 20 #h"A3B287D882127B00F7A723DB405298A460C73796") (:digest-bit-test 44 #x80 19 #h"4C8100F4E5629FB2CC6324D77737569522E5C775") (:digest-bit-test 44 #x40 19 #h"C1B6D177E1D224B3FB8B7719263CF6F2FA211323") (:digest-bit-test 44 #x20 19 #h"7EAF07E00BB7FD8F18E06BE05A137E314BA34BF2") (:digest-bit-test 44 #x10 19 #h"0C2AAE56115BE62930C4AE04B4FD152F64ED409C") (:digest-bit-test 44 #x08 19 #h"D676E0F5DE53FDAC16B35D06BB777599E838A1E0") (:digest-bit-test 44 #x04 19 #h"C500095E6F880659EEC666FF7F5BC37E39FABC2C") (:digest-bit-test 44 #x02 19 #h"D7E6EBA584DA5CD273D2E154330229B417F34361") (:digest-bit-test 44 #x01 19 #h"66BC10E7F84332A968D2E9E0CB79C68643ECECF9") (:digest-bit-test 45 #x80 18 #h"8EF22381D402646D3E102FB413703A8277D2B565") (:digest-bit-test 45 #x40 18 #h"B449114BD723E547DCAC5CA2D88BCEC690254F98") (:digest-bit-test 45 #x20 18 #h"2647472C0C4875CDA5E266ACBE6B2836539AB432") (:digest-bit-test 45 #x10 18 #h"29D6E52268ABDF244FE662DBA33AB9435EE66D1C") (:digest-bit-test 45 #x08 18 #h"4F0E93F97BBFC3395210D426F08D88D0C2BFD599") (:digest-bit-test 45 #x04 18 #h"6D76EB4C96F011E859EA81B136870784C70722F3") (:digest-bit-test 45 #x02 18 #h"4182D12C128BD5EE2EC8851C943B21720A6ECC32") (:digest-bit-test 45 #x01 18 #h"0DB22B512839C314A0235B245B66ECCC4FB29176") (:digest-bit-test 46 #x80 17 #h"9F9F449FEF08DE2A3F202B481C5B9B9690938B82") (:digest-bit-test 46 #x40 17 #h"6FD1EE49A36F67407F36B193DF20FB0EE9EBB3BF") (:digest-bit-test 46 #x20 17 #h"178C4E21E76A1718A4263E1DC9197D76345C1756") (:digest-bit-test 46 #x10 17 #h"C6519DC7593847544FDC38D2F024ED55A66BAED5") (:digest-bit-test 46 #x08 17 #h"BDF4A387201CA0D1D2FFDEE174F913ADEA999CC7") (:digest-bit-test 46 #x04 17 #h"549C43613AC1743E5B4E7A9A506F665B11CAE4CF") (:digest-bit-test 46 #x02 17 #h"0E59307C457A57EB30D5A9E9D797CA6B64D5F191") (:digest-bit-test 46 #x01 17 #h"9D15C38B6220C7F41EFA2C8B6A2DD1C17A19C109") (:digest-bit-test 47 #x80 16 #h"CBA55F53BBCB90E739B2344C8E8508D631CA429E") (:digest-bit-test 47 #x40 16 #h"86CF8C99F8996DC0DB12E004721A781533B33F68") (:digest-bit-test 47 #x20 16 #h"5E735505672A66959BCAD565F6DD9B4D311923BA") (:digest-bit-test 47 #x10 16 #h"E15C395B45066D50F2F25B8F85DEC3791281BA0A") (:digest-bit-test 47 #x08 16 #h"CDD485F608FA7BF001F59BA9DAAF266C50FCFA98") (:digest-bit-test 47 #x04 16 #h"94BEEAC05F3E5A6FB2CF1CB1229B230542451864") (:digest-bit-test 47 #x02 16 #h"D5481F60FCEF55D8C101FBBA7C054D88E37637F9") (:digest-bit-test 47 #x01 16 #h"4843CA5C5A803061D2FFCCD73FAEEE578AB13DBD") (:digest-bit-test 48 #x80 15 #h"D479FC21C0A351DDEDE3E79541B4E1B5F9542FD6") (:digest-bit-test 48 #x40 15 #h"E5F1EE88DF160FE503195104AC809E78F1697049") (:digest-bit-test 48 #x20 15 #h"1D37721790245F4182292F058930C37B4A9CE7EE") (:digest-bit-test 48 #x10 15 #h"44D614ADA253C44BC5FDEF6FA7DFF5792E621698") (:digest-bit-test 48 #x08 15 #h"745F03BFB20EF8CBD663767E3326AD6B1B4FC679") (:digest-bit-test 48 #x04 15 #h"9A88A295DCE2B8E8E48FBF7BE3CE55B33635A97F") (:digest-bit-test 48 #x02 15 #h"09909637CE971B7015281B85210B30C12F76E09E") (:digest-bit-test 48 #x01 15 #h"F0E9EE70866ABF4F2AAEB307663032214B976F27") (:digest-bit-test 49 #x80 14 #h"C19991C30080994CF78DD0B8CBB59DCE2C64079A") (:digest-bit-test 49 #x40 14 #h"29FE5880518565977D40DD45AEC19BAE84515E81") (:digest-bit-test 49 #x20 14 #h"0FBA86225438A82DB0F2DD6D655D1D85A5AD3B14") (:digest-bit-test 49 #x10 14 #h"AE8E67D9F7A3CD1D5B883EB4988BD751EDA4F6A4") (:digest-bit-test 49 #x08 14 #h"DFB8DA261C6CF4E55156F9CC6C760FC236479614") (:digest-bit-test 49 #x04 14 #h"DA9E82445FAB469B724230008E70C96CADD60239") (:digest-bit-test 49 #x02 14 #h"3820C5054068282169D937A1B01C2C5206012BEE") (:digest-bit-test 49 #x01 14 #h"C733A544F82A013C0F1A26D4A040357D2EAA4C52") (:digest-bit-test 50 #x80 13 #h"5F3CD7855C356B7587E8DEDAF9ED0262AABEE7C4") (:digest-bit-test 50 #x40 13 #h"E740EAEECA9A5E5C59578E6D89674EF1A56970E1") (:digest-bit-test 50 #x20 13 #h"A51B76E73BFBDBF980BF6FEA495A3CFB7D25809A") (:digest-bit-test 50 #x10 13 #h"A6E554F7E2D4FF1CA71395BA093BDD19A3661639") (:digest-bit-test 50 #x08 13 #h"5BD9F14F7985CB09638FEAF2CD5389A9A18BE557") (:digest-bit-test 50 #x04 13 #h"F65ADF18A93A5B67DEC169D2A73F4AE1673FC773") (:digest-bit-test 50 #x02 13 #h"73F8B85993F0D3CB12ABA034FDBA2F4D6E3E168B") (:digest-bit-test 50 #x01 13 #h"5055E365875B5E91C91B87619E3FC079ADD4DEEB") (:digest-bit-test 51 #x80 12 #h"C8FCB6653D648A5162C53D624DC0E85745769BB4") (:digest-bit-test 51 #x40 12 #h"3D7C3EA505167F9FBD99D18A5B615ECFD9C26D15") (:digest-bit-test 51 #x20 12 #h"061BD5CF62919A1B2E1163520436E2AA552BE242") (:digest-bit-test 51 #x10 12 #h"6A0FE1B5F651E7CA327D0083BA65E6F8FC42337B") (:digest-bit-test 51 #x08 12 #h"338BC5B38BBA52B80A2BFE88FCF95E925A9702D8") (:digest-bit-test 51 #x04 12 #h"F510D70693808ED495B06D86A784627DE4D87672") (:digest-bit-test 51 #x02 12 #h"AD0D2471322D2C27DB1F0BABC3C292CD3AB3239C") (:digest-bit-test 51 #x01 12 #h"93FF72C5D4A53FE0823F4F392D5407B298C5ADBB") (:digest-bit-test 52 #x80 11 #h"EF17405E6D26269F503EEEA3504FC9280D2603B9") (:digest-bit-test 52 #x40 11 #h"E5036DD48A55451D8212A27A85FE5779C30964FE") (:digest-bit-test 52 #x20 11 #h"10B74A030D16992F2DF906256858186D882554A6") (:digest-bit-test 52 #x10 11 #h"7181DC401250F84AAE4AA1FFB94A89ACD98E5FAC") (:digest-bit-test 52 #x08 11 #h"441C9327F5DC2907FD3C85C01D094FB2727AA6AF") (:digest-bit-test 52 #x04 11 #h"068A13FD27DCE7B9BDE20EBF9C28C1227EDA5F6F") (:digest-bit-test 52 #x02 11 #h"37273BD0E062B21349798C89B95A6E74BF58821A") (:digest-bit-test 52 #x01 11 #h"0A5A8FDBAF2101414D23860287A37C0582641646") (:digest-bit-test 53 #x80 10 #h"05B6211A7398032D2CC58C9BC3FA1A66D70C1E83") (:digest-bit-test 53 #x40 10 #h"0FFC3B8756C5D5765FD64B2EB9F065B2CAF06C5A") (:digest-bit-test 53 #x20 10 #h"992E5DD62BF677CC7439C10C73FBBA5B61A6C8E5") (:digest-bit-test 53 #x10 10 #h"385CE73875A2150C12D1558B3B89A53BA780A9BA") (:digest-bit-test 53 #x08 10 #h"C5DC05F37C48D5A299806C2AB3D3E992D9994A09") (:digest-bit-test 53 #x04 10 #h"D53B026111BCAF9C8FF3255709850E153EC7F149") (:digest-bit-test 53 #x02 10 #h"40CEF784A88C9DA3355C80C9B220B12B578F8430") (:digest-bit-test 53 #x01 10 #h"9E83DBD01B91EE6A3615334D3530EB52FC6D79AF") (:digest-bit-test 54 #x80 9 #h"BD2A8E4A91DF23662428C4FDDB93D665AAE02BEF") (:digest-bit-test 54 #x40 9 #h"06EA50EEE8EE904D4BCAB484C7A0D57F1E686D3C") (:digest-bit-test 54 #x20 9 #h"BEC01BB7F8BDBF144DFE0B3DD05427666F1DAA00") (:digest-bit-test 54 #x10 9 #h"3F281D9F9288C3284D6D614606ACE0288FA46FDE") (:digest-bit-test 54 #x08 9 #h"8B3B8B96A5AF2FEA5DED2EED9DBF87AC28872287") (:digest-bit-test 54 #x04 9 #h"FE60132B70DD243B661E7851828C79708CADFCF9") (:digest-bit-test 54 #x02 9 #h"B5ED866E9BCCA4E703FBB30A1E4924D72FAF4D50") (:digest-bit-test 54 #x01 9 #h"A0A55EC19E35FD0870BBC90A7CF333ADE724DE25") (:digest-bit-test 55 #x80 8 #h"0CBC0062C25F233616DE607A0A54B6D16B5A016F") (:digest-bit-test 55 #x40 8 #h"7FB304F334DA910FBBB412ED6A41CBEE66A0093A") (:digest-bit-test 55 #x20 8 #h"22032F4E752E7D5D26DB09991EF731E87E118680") (:digest-bit-test 55 #x10 8 #h"E2E5204F0258896446F8F943ECCB94688EDA05CA") (:digest-bit-test 55 #x08 8 #h"BCE31D00762D3D3699CAF25BAC4BBE27C4853530") (:digest-bit-test 55 #x04 8 #h"296B3124D4AA6C9E37A08720D6A7697CC075340F") (:digest-bit-test 55 #x02 8 #h"D14EB2BB8EC810A4CBFF2189095F99EC54CA0BAB") (:digest-bit-test 55 #x01 8 #h"A02059C3AC82077C2081C90C869257C530AB43C2") (:digest-bit-test 56 #x80 7 #h"73C80B1D08CBFD229CAD79F4F613A1D2A5E442EA") (:digest-bit-test 56 #x40 7 #h"1DA62F48EBB2D50EC062DD98C85FE8345B1129EC") (:digest-bit-test 56 #x20 7 #h"2FDFA42088BE5E2EF6AFA13890635ADB64BF59A7") (:digest-bit-test 56 #x10 7 #h"29F98848CC4E358FE51512739FD2985A3D9C5592") (:digest-bit-test 56 #x08 7 #h"AED5C356ED2DAA62BF20174834062B66F728C39C") (:digest-bit-test 56 #x04 7 #h"26C420F37DD3C7CDFFEF3EDD8E2F1842AFEFECBD") (:digest-bit-test 56 #x02 7 #h"CC70839427BC048BB08BB44E67758D1124B643BE") (:digest-bit-test 56 #x01 7 #h"DC393101E9B13892DC97EA811DD6D33421E672AC") (:digest-bit-test 57 #x80 6 #h"D01E8D33C9EAFBD8BE5369E3B6A857074BE5F78B") (:digest-bit-test 57 #x40 6 #h"13DB83187325B05980E84AAEE5C632D028109B17") (:digest-bit-test 57 #x20 6 #h"3D6E9C628537656EB88DC5F76E18E2A2DCEB38A7") (:digest-bit-test 57 #x10 6 #h"DEB2662AC60DA809BB5D94E2A5B9B38A7696D383") (:digest-bit-test 57 #x08 6 #h"BD9E94D831BF1235DCCC7D361AA374C97501E87B") (:digest-bit-test 57 #x04 6 #h"6D9052727FC9912CBBCB67120D2FD27C3C6E9A28") (:digest-bit-test 57 #x02 6 #h"E8640E2A840DE60356471F4B44220A9E15266A73") (:digest-bit-test 57 #x01 6 #h"C09A06651D0E3599ED42FAC3726575EFC3404C66") (:digest-bit-test 58 #x80 5 #h"F42C449EC2D162E5A7CB1688133BF9A290A9C3B3") (:digest-bit-test 58 #x40 5 #h"D399A7B5077BCB4527194109E04EF89CC71277EA") (:digest-bit-test 58 #x20 5 #h"866BB6B24E81487390F6A36545379421ADE02B6F") (:digest-bit-test 58 #x10 5 #h"7CBB546D49007E94D064D4F905245D19B9060EAB") (:digest-bit-test 58 #x08 5 #h"4D58003B6F36A7352F3ECF258FA4509D79E7D2CE") (:digest-bit-test 58 #x04 5 #h"C80BA62BE5DA26073C287AA03BEEDB4E916BB0FE") (:digest-bit-test 58 #x02 5 #h"06AB61CB329F3423AE513B49551191D6FA515FB1") (:digest-bit-test 58 #x01 5 #h"2FF9AF0FAF9A3B0AB42DE6B02E77FDC5B297CE28") (:digest-bit-test 59 #x80 4 #h"B2A39AAA8924F3D8059734794597889477F27E6F") (:digest-bit-test 59 #x40 4 #h"8D06BC2C793D856974AE5459AA669169E07EAC62") (:digest-bit-test 59 #x20 4 #h"0833ABD972DD3228DA4F024F5662DBE2117282D7") (:digest-bit-test 59 #x10 4 #h"A4ECE25FBFD97E44832F6B89A0648E248E2FD49F") (:digest-bit-test 59 #x08 4 #h"616310FDB4E72B3B985281C3EBD1C176A1273CFD") (:digest-bit-test 59 #x04 4 #h"9D19F19B80897024806F8CB2325960E375727ED7") (:digest-bit-test 59 #x02 4 #h"9E14014EE80E7614091F2AA5A0A9CAF27909F313") (:digest-bit-test 59 #x01 4 #h"5D119D7F6858CD7495DE1E9A645D2F80F8291DF5") (:digest-bit-test 60 #x80 3 #h"EBB2F360AB47F053A8BC736F45F33158C6EA878C") (:digest-bit-test 60 #x40 3 #h"5FE1A052AA885D1B4AD99D9F196DBE92CF65885D") (:digest-bit-test 60 #x20 3 #h"F552BEE8D59BF0654AC344F1A0CC3AE5597A7A71") (:digest-bit-test 60 #x10 3 #h"DC7825AC0CD824F74AB7A47B899300C3096D8667") (:digest-bit-test 60 #x08 3 #h"FA5D5599C5660ED0665A79EC395C722997BC5AC2") (:digest-bit-test 60 #x04 3 #h"EF8916D8A9EFCF4D6E02FE72DE8CAB90A3992262") (:digest-bit-test 60 #x02 3 #h"9F4ED685D398A752BC4EE8C0891D724258121D25") (:digest-bit-test 60 #x01 3 #h"5D36B7997B600229D9421D81A9EA1CB1DA1BED2D") (:digest-bit-test 61 #x80 2 #h"B1DA174937C24516A28C7F4770B98F8DF059ED1B") (:digest-bit-test 61 #x40 2 #h"890E8D2C34E060193AB21DE16B1C1929616D6EDA") (:digest-bit-test 61 #x20 2 #h"AB44A81DDB33C2439E2DF6EB42B3DA5ADB4460A6") (:digest-bit-test 61 #x10 2 #h"4796DEFE552974795285841588C9D0B0C2B39E21") (:digest-bit-test 61 #x08 2 #h"C42CCE86691B2B0A0A7297D3FC3077DE7B875457") (:digest-bit-test 61 #x04 2 #h"8969BBAF55EC689588998ADAC8A0CEEBDBA06DC3") (:digest-bit-test 61 #x02 2 #h"05F6A29AE91B66CDBC0D7F3D349DF5AA6519366D") (:digest-bit-test 61 #x01 2 #h"554E489049A20D8BD47FB1234EA397E21D8CAE77") (:digest-bit-test 62 #x80 1 #h"293CADC30C0CD9CF55ED269D42FB1758E5C71667") (:digest-bit-test 62 #x40 1 #h"AA0D67F4E35B04373C2A73A139A8FE8A9F1D0680") (:digest-bit-test 62 #x20 1 #h"9F10E6DFF017BC8553CC93C9255E3A1441C55DF5") (:digest-bit-test 62 #x10 1 #h"3A459F9EE9CA8ECBCF864769A0D30B2A9A0AA9FB") (:digest-bit-test 62 #x08 1 #h"C5A5F5833988BB1B920B7C7A7324890B7E681761") (:digest-bit-test 62 #x04 1 #h"DD81B919473C77D804DF031EE569571657195F9C") (:digest-bit-test 62 #x02 1 #h"E156B150616E25C4CC689A5A10849B2CB9C4C8C7") (:digest-bit-test 62 #x01 1 #h"83698FCBBA5CBE3B4E67B35466425B28C4E5162B") (:digest-bit-test 63 #x80 0 #h"ECAFA6F24326F8CEC555731834168EC7A75AA577") (:digest-bit-test 63 #x40 0 #h"CBC2CF467401231717CE7339BCD8591665823F46") (:digest-bit-test 63 #x20 0 #h"06DAA528DFD015E666C579F6AA997E50ECEF2451") (:digest-bit-test 63 #x10 0 #h"D84B71FDFD8E9F0A76AA1EB174CD253789D6408B") (:digest-bit-test 63 #x08 0 #h"74D9106CC9C67F307425CF940CC588B278F84AE2") (:digest-bit-test 63 #x04 0 #h"68B9EB81C30694D4A3EE926C53A08F8B76B099E5") (:digest-bit-test 63 #x02 0 #h"D229D9D61E24B80CB32373BB3362A3BDC7DCCE73") (:digest-bit-test 63 #x01 0 #h"AAE81062811EDFD2AF3081941D667FB7033DCE80") ;;; byte-level tests from NIST's Cryptographic Algorithm Validation Program (http://csrc.nist.gov/groups/STM/cavp/index.html) (:digest-test #h"36" #h"c1dfd96eea8cc2b62785275bca38ac261256e278") (:digest-test #h"195a" #h"0a1c2d555bbe431ad6288af5a54f93e0449c9232") (:digest-test #h"df4bd2" #h"bf36ed5d74727dfd5d7854ec6b1d49468d8ee8aa") (:digest-test #h"549e959e" #h"b78bae6d14338ffccfd5d5b5674a275f6ef9c717") (:digest-test #h"f7fb1be205" #h"60b7d5bb560a1acf6fa45721bd0abb419a841a89") (:digest-test #h"c0e5abeaea63" #h"a6d338459780c08363090fd8fc7d28dc80e8e01f") (:digest-test #h"63bfc1ed7f78ab" #h"860328d80509500c1783169ebf0ba0c4b94da5e5") (:digest-test #h"7e3d7b3eada98866" #h"24a2c34b976305277ce58c2f42d5092031572520") (:digest-test #h"9e61e55d9ed37b1c20" #h"411ccee1f6e3677df12698411eb09d3ff580af97") (:digest-test #h"9777cf90dd7c7e863506" #h"05c915b5ed4e4c4afffc202961f3174371e90b5c") (:digest-test #h"4eb08c9e683c94bea00dfa" #h"af320b42d7785ca6c8dd220463be23a2d2cb5afc") (:digest-test #h"0938f2e2ebb64f8af8bbfc91" #h"9f4e66b6ceea40dcf4b9166c28f1c88474141da9") (:digest-test #h"74c9996d14e87d3e6cbea7029d" #h"e6c4363c0852951991057f40de27ec0890466f01") (:digest-test #h"51dca5c0f8e5d49596f32d3eb874" #h"046a7b396c01379a684a894558779b07d8c7da20") (:digest-test #h"3a36ea49684820a2adc7fc4175ba78" #h"d58a262ee7b6577c07228e71ae9b3e04c8abcda9") (:digest-test #h"3552694cdf663fd94b224747ac406aaf" #h"a150de927454202d94e656de4c7c0ca691de955d") (:digest-test #h"f216a1cbde2446b1edf41e93481d33e2ed" #h"35a4b39fef560e7ea61246676e1b7e13d587be30") (:digest-test #h"a3cf714bf112647e727e8cfd46499acd35a6" #h"7ce69b1acdce52ea7dbd382531fa1a83df13cae7") (:digest-test #h"148de640f3c11591a6f8c5c48632c5fb79d3b7" #h"b47be2c64124fa9a124a887af9551a74354ca411") (:digest-test #h"63a3cc83fd1ec1b6680e9974a0514e1a9ecebb6a" #h"8bb8c0d815a9c68a1d2910f39d942603d807fbcc") (:digest-test #h"875a90909a8afc92fb7070047e9d081ec92f3d08b8" #h"b486f87fb833ebf0328393128646a6f6e660fcb1") (:digest-test #h"444b25f9c9259dc217772cc4478c44b6feff62353673" #h"76159368f99dece30aadcfb9b7b41dab33688858") (:digest-test #h"487351c8a5f440e4d03386483d5fe7bb669d41adcbfdb7" #h"dbc1cb575ce6aeb9dc4ebf0f843ba8aeb1451e89") (:digest-test #h"46b061ef132b87f6d3b0ee2462f67d910977da20aed13705" #h"d7a98289679005eb930ab75efd8f650f991ee952") (:digest-test #h"3842b6137bb9d27f3ca5bafe5bbb62858344fe4ba5c41589a5" #h"fda26fa9b4874ab701ed0bb64d134f89b9c4cc50") (:digest-test #h"44d91d3d465a4111462ba0c7ec223da6735f4f5200453cf132c3" #h"c2ff7ccde143c8f0601f6974b1903eb8d5741b6e") (:digest-test #h"cce73f2eabcb52f785d5a6df63c0a105f34a91ca237fe534ee399d" #h"643c9dc20a929608f6caa9709d843ca6fa7a76f4") (:digest-test #h"664e6e7946839203037a65a12174b244de8cbc6ec3f578967a84f9ce" #h"509ef787343d5b5a269229b961b96241864a3d74") (:digest-test #h"9597f714b2e45e3399a7f02aec44921bd78be0fefee0c5e9b499488f6e" #h"b61ce538f1a1e6c90432b233d7af5b6524ebfbe3") (:digest-test #h"75c5ad1f3cbd22e8a95fc3b089526788fb4ebceed3e7d4443da6e081a35e" #h"5b7b94076b2fc20d6adb82479e6b28d07c902b75") (:digest-test #h"dd245bffe6a638806667768360a95d0574e1a0bd0d18329fdb915ca484ac0d" #h"6066db99fc358952cf7fb0ec4d89cb0158ed91d7") (:digest-test #h"0321794b739418c24e7c2e565274791c4be749752ad234ed56cb0a6347430c6b" #h"b89962c94d60f6a332fd60f6f07d4f032a586b76") (:digest-test #h"4c3dcf95c2f0b5258c651fcd1d51bd10425d6203067d0748d37d1340d9ddda7db3" #h"17bda899c13d35413d2546212bcd8a93ceb0657b") (:digest-test #h"b8d12582d25b45290a6e1bb95da429befcfdbf5b4dd41cdf3311d6988fa17cec0723" #h"badcdd53fdc144b8bf2cc1e64d10f676eebe66ed") (:digest-test #h"6fda97527a662552be15efaeba32a3aea4ed449abb5c1ed8d9bfff544708a425d69b72" #h"01b4646180f1f6d2e06bbe22c20e50030322673a") (:digest-test #h"09fa2792acbb2417e8ed269041cc03c77006466e6e7ae002cf3f1af551e8ce0bb506d705" #h"10016dc3a2719f9034ffcc689426d28292c42fc9") (:digest-test #h"5efa2987da0baf0a54d8d728792bcfa707a15798dc66743754406914d1cfe3709b1374eaeb" #h"9f42fa2bce6ef021d93c6b2d902273797e426535") (:digest-test #h"2836de99c0f641cd55e89f5af76638947b8227377ef88bfba662e5682babc1ec96c6992bc9a0" #h"cdf48bacbff6f6152515323f9b43a286e0cb8113") (:digest-test #h"42143a2b9e1d0b354df3264d08f7b602f54aad922a3d63006d097f683dc11b90178423bff2f7fe" #h"b88fb75274b9b0fd57c0045988cfcef6c3ce6554") (:digest-test #h"eb60c28ad8aeda807d69ebc87552024ad8aca68204f1bcd29dc5a81dd228b591e2efb7c4df75ef03" #h"c06d3a6a12d9e8db62e8cff40ca23820d61d8aa7") (:digest-test #h"7de4ba85ec54747cdc42b1f23546b7e490e31280f066e52fac117fd3b0792e4de62d5843ee98c72015" #h"6e40f9e83a4be93874bc97cdebb8da6889ae2c7a") (:digest-test #h"e70653637bc5e388ccd8dc44e5eace36f7398f2bac993042b9bc2f4fb3b0ee7e23a96439dc01134b8c7d" #h"3efc940c312ef0dfd4e1143812248db89542f6a5") (:digest-test #h"dd37bc9f0b3a4788f9b54966f252174c8ce487cbe59c53c22b81bf77621a7ce7616dcb5b1e2ee63c2c309b" #h"a0cf03f7badd0c3c3c4ea3717f5a4fb7e67b2e56") (:digest-test #h"5f485c637ae30b1e30497f0fb7ec364e13c906e2813daa34161b7ac4a4fd7a1bddd79601bbd22cef1f57cbc7" #h"a544e06f1a07ceb175a51d6d9c0111b3e15e9859") (:digest-test #h"f6c237fb3cfe95ec8414cc16d203b4874e644cc9a543465cad2dc563488a659e8a2e7c981e2a9f22e5e868ffe1" #h"199d986ed991b99a071f450c6b1121a727e8c735") (:digest-test #h"da7ab3291553c659873c95913768953c6e526d3a26590898c0ade89ff56fbd110f1436af590b17fed49f8c4b2b1e" #h"33bac6104b0ad6128d091b5d5e2999099c9f05de") (:digest-test #h"8cfa5fd56ee239ca47737591cba103e41a18acf8e8d257b0dbe8851134a81ff6b2e97104b39b76e19da256a17ce52d" #h"76d7db6e18c1f4ae225ce8ccc93c8f9a0dfeb969") (:digest-test #h"57e89659d878f360af6de45a9a5e372ef40c384988e82640a3d5e4b76d2ef181780b9a099ac06ef0f8a7f3f764209720" #h"f652f3b1549f16710c7402895911e2b86a9b2aee") (:digest-test #h"b91e64235dbd234eea2ae14a92a173ebe835347239cff8b02074416f55c6b60dc6ced06ae9f8d705505f0d617e4b29aef9" #h"63faebb807f32be708cf00fc35519991dc4e7f68") (:digest-test #h"e42a67362a581e8cf3d847502215755d7ad425ca030c4360b0f7ef513e6980265f61c9fa18dd9ce668f38dbc2a1ef8f83cd6" #h"0e6730bc4a0e9322ea205f4edfff1fffda26af0a") (:digest-test #h"634db92c22010e1cbf1e1623923180406c515272209a8acc42de05cc2e96a1e94c1f9f6b93234b7f4c55de8b1961a3bf352259" #h"b61a3a6f42e8e6604b93196c43c9e84d5359e6fe") (:digest-test #h"cc6ca3a8cb391cd8a5aff1faa7b3ffbdd21a5a3ce66cfaddbfe8b179e4c860be5ec66bd2c6de6a39a25622f9f2fcb3fc05af12b5" #h"32d979ca1b3ed0ed8c890d99ec6dd85e6c16abf4") (:digest-test #h"7c0e6a0d35f8ac854c7245ebc73693731bbbc3e6fab644466de27bb522fcb99307126ae718fe8f00742e6e5cb7a687c88447cbc961" #h"6f18190bd2d02fc93bce64756575cea36d08b1c3") (:digest-test #h"c5581d40b331e24003901bd6bf244aca9e9601b9d81252bb38048642731f1146b8a4c69f88e148b2c8f8c14f15e1d6da57b2daa9991e" #h"68f525feea1d8dbe0117e417ca46708d18d7629a") (:digest-test #h"ec6b4a88713df27c0f2d02e738b69db43abda3921317259c864c1c386e9a5a3f533dc05f3beeb2bec2aac8e06db4c6cb3cddcf697e03d5" #h"a7272e2308622ff7a339460adc61efd0ea8dabdc") (:digest-test #h"0321736beba578e90abc1a90aa56157d871618f6de0d764cc8c91e06c68ecd3b9de3824064503384db67beb7fe012232dacaef93a000fba7" #h"aef843b86916c16f66c84d83a6005d23fd005c9e") (:digest-test #h"d0a249a97b5f1486721a50d4c4ab3f5d674a0e29925d5bf2678ef6d8d521e456bd84aa755328c83fc890837726a8e7877b570dba39579aabdd" #h"be2cd6f380969be59cde2dff5e848a44e7880bd6") (:digest-test #h"c32138531118f08c7dcc292428ad20b45ab27d9517a18445f38b8f0c2795bcdfe3ffe384e65ecbf74d2c9d0da88398575326074904c1709ba072" #h"e5eb4543deee8f6a5287845af8b593a95a9749a1") (:digest-test #h"b0f4cfb939ea785eabb7e7ca7c476cdd9b227f015d905368ba00ae96b9aaf720297491b3921267576b72c8f58d577617e844f9f0759b399c6b064c" #h"534c850448dd486787b62bdec2d4a0b140a1b170") (:digest-test #h"bd02e51b0cf2c2b8d204a026b41a66fbfc2ac37ee9411fc449c8d1194a0792a28ee731407dfc89b6dfc2b10faa27723a184afef8fd83def858a32d3f" #h"6fbfa6e4edce4cc85a845bf0d228dc39acefc2fa") (:digest-test #h"e33146b83e4bb671392218da9a77f8d9f5974147182fb95ba662cb66011989c16d9af104735d6f79841aa4d1df276615b50108df8a29dbc9de31f4260d" #h"018872691d9b04e8220e09187df5bc5fa6257cd9") (:digest-test #h"411c13c75073c1e2d4b1ecf13139ba9656cd35c14201f1c7c6f0eeb58d2dbfe35bfdeccc92c3961cfabb590bc1eb77eac15732fb0275798680e0c7292e50" #h"d98d512a35572f8bd20de62e9510cc21145c5bf4") (:digest-test #h"f2c76ef617fa2bfc8a4d6bcbb15fe88436fdc2165d3074629579079d4d5b86f5081ab177b4c3f530376c9c924cbd421a8daf8830d0940c4fb7589865830699" #h"9f3ea255f6af95c5454e55d7354cabb45352ea0b") (:digest-test #h"45927e32ddf801caf35e18e7b5078b7f5435278212ec6bb99df884f49b327c6486feae46ba187dc1cc9145121e1492e6b06e9007394dc33b7748f86ac3207cfe" #h"a70cfbfe7563dd0e665c7c6715a96a8d756950c0") ironclad-0.57/testing/test-vectors/sha224.testvec000066400000000000000000000234461420372057600220000ustar00rootroot00000000000000;;; tests from RFC 3874 and around the web (:digest-test #a"" #h"d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f") (:digest-test #a"abc" #h"23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7") (:digest-test #a"message digest" #h"2cb21c83ae2f004de7e81c3c7019cbcb65b71ab656b22d6d0c39b8eb") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"45a5f72c39c5cff2522eb3429799e49e5f44b356ef926bcf390dccc2") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525") ;;; byte-level tests from NIST's Cryptographic Algorithm Validation Program (http://csrc.nist.gov/groups/STM/cavp/index.html) (:digest-test #h"84" #h"3cd36921df5d6963e73739cf4d20211e2d8877c19cff087ade9d0e3a") (:digest-test #h"5c7b" #h"daff9bce685eb831f97fc1225b03c275a6c112e2d6e76f5faf7a36e6") (:digest-test #h"51ca3d" #h"2c8959023515476e38388abb43599a29876b4b33d56adc06032de3a2") (:digest-test #h"6084347e" #h"ae57c0a6d49739ba338adfa53bdae063e5c09122b77604780a8eeaa3") (:digest-test #h"493e14623c" #h"7f631f295e024e74552083245ca8f988a3fb65680ae97c3040d2e65c") (:digest-test #h"d729d8cd1631" #h"342e8e6b23c1c6a54910631f098e08e836259c57e49c1b1d023d166d") (:digest-test #h"cbf2061e10faa5" #h"3aa702b1b66dc57d7aec3ccdbdfbd88592d7520f843ba5d0fa481168") (:digest-test #h"5f77b3664823c33e" #h"bdf21ff325f754157ccf417f4855360a72e8fd117d28c8fe7da3ea38") (:digest-test #h"10713b894de4a734c0" #h"03842600c86f5cd60c3a2147a067cb962a05303c3488b05cb45327bd") (:digest-test #h"006470d57dad9893dc03" #h"c90026cda5ad24115059c62ae9add57793ade445d4742273288bbce7") (:digest-test #h"6f29ca274190400720bba2" #h"ac53157947aa4b2a19089182382a4363d182dd8e4ca79cd8571390be") (:digest-test #h"17e8556176fcca2addbdde29" #h"cc6ad0488db0222066f740557b5758a19b30372b302332295d8c3aff") (:digest-test #h"dbf163601db9a122a4026824de" #h"9849845f4e47e1ece9a1c1e01a0d896ffea61c6c8894a75a11ce5f49") (:digest-test #h"5e1ef2ad86ceaf5439fe87d2ec9b" #h"223c5d5d4a0116b32cea044f9af0fe44babea1c5ab201502591bcd5f") (:digest-test #h"65f3b9866fb8002b53cfaf806f702f" #h"b1e0806a218d593821fde8e9eacc44ab5287c32209a94f011ab66b75") (:digest-test #h"b776708ffb91b3515ac46598ab9fa796" #h"427311b1d7ab2488791c4deeb4251d783fe5f9806bfdfb5188c5443d") (:digest-test #h"a4bc10b1a62c96d459fbaf3a5aa3face73" #h"d7e6634723ac25cb1879bdb1508da05313530419013fe255967a39e1") (:digest-test #h"9e8f3c6645c1749b55c50d2018ce40dc2427" #h"2f5a583bf588c8988a572d128a95bea5ef1b66780a7d4be9c29efc31") (:digest-test #h"2db6d207c0b7d9117f24d78ee59abf2f316978" #h"35681fce28307cae19522c23cbd4a77969347f7d8ee4a3088ba90ada") (:digest-test #h"3df5e7f399f6dd61a12a9d4e9464fc4997c1f37b" #h"a3e68076e30751085a843a6cbfbf0f3dee63d9c4219c914372e50b28") (:digest-test #h"65781d018f27ca0c72a9fa9ab4648ed369646dd3ce" #h"d15ef0d872d02da6427b8d0349dea2f204e67133b7365b4b150efc3c") (:digest-test #h"af48eeddd93fee69d1bd7de428a63986011d10945eaf" #h"b89d428ee42e397cf11029ecbb27baddd036c8938f51c8ab56b875ac") (:digest-test #h"df2bf0d5f9c994ac69d78baa0d512eceb74d8a047531c1" #h"db8e1ce68c8c6b84d6db755c2b8bf54f3c4b081a881efcddaf303294") (:digest-test #h"48d2f20955ea2d13433c20bc0404eb2e6ad79ed28f7cb4c0" #h"3617cc3179f8b59adce181eebeed5e2763f62650949224a67e53694b") (:digest-test #h"218f74a42d3a47ef3b806601fba024b078cbff4e4b85772e0e" #h"b5f40b95dcc363b97e9d00b67c5d7c37f17ab563297d2d67a4df20c9") (:digest-test #h"ef55b1e797000b04fcdb9b3021b09327e3b4e269d20cabdf418f" #h"827b223d51240c2e3271c534c19c5637b6fe10083e85bcf06761ef21") (:digest-test #h"96df4387dc2c40297043bea36483f65e4eb1e07e93359cb7e68610" #h"98e430a63fcdedafc9419010f7f59a4d816a45b4f973beb62530ff8c") (:digest-test #h"3ec0aa8d30d5ed825b77dc7095f421b1e608158797a377ff8bed641b" #h"3108321eb7ff857f6aae69101b937f32a51ea279a6c14ba5232ac8c1") (:digest-test #h"8b0239712039f077ce323b35f4e306787b9b35270096e57735cff45d84" #h"a5c740d3ce46bb2e0a048488f2b0605c6d0ca0ea2f382d043d13db97") (:digest-test #h"044be30167a9758c46c727921dc4eb4e0dcb965623423e6fdd44e7a4ea52" #h"6eb78313c743ea8769d8340f284dda6ded64a1db64392f21abb82c5c") (:digest-test #h"57f6118bacce47ecc31ce8b0c083d3c9219e0dbe9e4fbea154537c41231acc" #h"0dbb53c866d63af44c222c76c825df0e379dcedfb958db03b6fd29a5") (:digest-test #h"fe1f0fb02c9011f4c8c5905934ed15136771737ce31c5859e67f235fe594f5f6" #h"bbeaacc632c2a3db2a9b47f157ab54aa27776c6e74cf0bcaa91b06d5") (:digest-test #h"14fb01ae9d6015ecb3e56d6ecdfa4bc0533186adf8457f5e4a5c57c687895f3db3" #h"178272c7d7cc71b15074c27e3b7997d4a3ba99626986a1a16cf30030") (:digest-test #h"ff6c49712f044f4063c14125c0cdfba18ed8b7138453768a45dfa2d82a05f1e84227" #h"403284c888a7280bc8bfc25f0c34182cd378306a21a1404d4e1c40cf") (:digest-test #h"f900bd7e0117247f97c8fc7a665c76a35f571c3366571d6c4a3ee5d7fb93f1d1f726e2" #h"48235b9820d66d8885faabf6a9ede63ba2a21b6177e987a33242373e") (:digest-test #h"42d38188ac49440cfefb77db975e083e6b22348c4c67f0f8692e88ad140d861dc828d595" #h"615344f890e5bcf71b5efe39de1fc942ba1fe30dd9e9146adb6a41bf") (:digest-test #h"74fdd7d958b8ae7c2c3c5cff4266dfb2b3b842c9f59ecbbcaff575edcbcda08ccd6e08b764" #h"66d7d6c54fc7775a0ba845ba3e11719fa535b9289f20b098c5f7a342") (:digest-test #h"934416dd0581e22f2bfbece7bb64afe820451fa21342df7e6f9fb37c4103381a1f7cd379bcc4" #h"fae8f1aa22def4dbaa814c5b0babdec43394951792c937050d2963a6") (:digest-test #h"102401c84a716ae72579c6ae79c359ea309ffd95abffae4c61884c03c9e99df77b6c92e492cacb" #h"8f34812d57a16ef8a51ad987660c5f8623e0fa9d89846e28d46d14d9") (:digest-test #h"79bc8fb60f85d15a2386566e3e7314df284533085add1c7bb6ead3ff760c86d5633a66404761b544" #h"65c54014cfa30f0bc27d1c6efa96ae8481f4c2505bff272956eab0df") (:digest-test #h"db3121ea71294983b185207a9d8de3e484a66c0431bf07c962eb82977c4f834b7c3f1e7931a4a7f7a9" #h"9316d2f021c2913d63a7e66924c87c161c3cfde0ea7ba07f54772862") (:digest-test #h"0dd51aa660c5cb4b7f78c46852c1db8707ab451c1367b6187388c8bb3873a1aa4210d0414cc6792a29a7" #h"31989e7a62a5132a5070d77250d8904bb82d457dc63469d06b50185e") (:digest-test #h"487fd2e5b694b7071d3789a258a51e8604dc0d3e8f5d62f39131968e602abe1ddf6b0278962a512408b553" #h"e798683438284626d710877d9eea3a0e02f349fc43acb7f9f8f9e81c") (:digest-test #h"11183bdebfef58e4da5b1cb73be0d30b20da304d8659d921da2e270fd14626799537e4d12119e809ee97004a" #h"96870657d6cb668be3995aa8bd31df77840d1d1915d72482e83b6b2c") (:digest-test #h"a239de5c8e2644e8f030d94d98f1a30664e6fd961dc2977a9c08be5c31d8de89450945a53d79299ea2a1edde7f" #h"e99743d4fd26c8800c36a67b6762247c29da6b62794123c59de06dc0") (:digest-test #h"917c4577aa6b0f9df49999fc1c958cb09b7fd5fc80be949670f03545eb27dcaed052076b24f96f5e0f2e2f4527c0" #h"7ecd693d4d9cf43929464698efa0bac33c2e1424f816edc769260978") (:digest-test #h"c3f1e735a6741aa481ad577a98dbac1f03cc80ea0dae1b94db2369ed4e93facd29c64e4e77b25038279120bdfa3715" #h"86f0d89d8e14fd8b6606412d71a7a54a347b304ea5d49c208f2266ab") (:digest-test #h"de4fbfd553cdf37019f25afa82dc6b9970f4bb1ebbc37f80d3084c88a70722cdc523a9e3c2afbad0dc0221bfdec9a2f9" #h"4c5262acb4a2a44eaa9bc6757024fb202ef4d5a7a16fa37252a422b5") (:digest-test #h"db2e2eb636610cf42e9b33433acce1b3b925949f297dd83199f45d2861d64cd910c2db74a60b2089045e22cba0a536137d" #h"16bf4e45bcdc60447c68dcb30e6b08f55ce9f4124a29cf1f9a9d065d") (:digest-test #h"a8e729d336d5d6ac50e1e22f0b193b66e26042fc6459214129875e740ab2b142918c138aaf941863ad3b7e6065450613b273" #h"452bf2e5ebfc4e451cc434bc09e2a10032eed0b7627cf55e7e5ed0e2") (:digest-test #h"d05317d4b535f9d10f739d0c2dedf3ffb090c1ad9d205089b1346693f58273c4925c0face57ba45ad6fc687c66a88fc78878be" #h"4f03c439e097b51b00e314f675937c4d911505859fb7ab16adc65e44") (:digest-test #h"26bb4ed4f0424c60fe4212ff8c955e89e2f553a7d7701be59416d2089af59fa1074724e214e919b1e30f33fb78374b4b055bbc9b" #h"e7c899e27009d4dc77c2d300f191b757e52c9e7eac4b023bfab2b52a") (:digest-test #h"f015ec83944f03292463c4345fdb1c26d1ea07645facbc9520ae244b6eb191e53dabadb4ac0fb15cda4ed77dfb9e1193abfafb1b81" #h"459e40b3fbd612912f0217c60099379ce077cd02505871b0c9c14e7a") (:digest-test #h"0786706f680c27b792d054faa63f499a8e6b5ddb90502946235bf74c022d772c809cb4171bfa4791539aca1abd91900e53ba93ca0efd" #h"fadebab7c3d0fb8e97e429b79083087735e4ab385a789521260ef3ad") (:digest-test #h"445e8698eeb8accbaac4ffa7d934fffd16014a430ef70f3a9174c6cfe96d1e3f6ab1377f4a7212dbb30146dd17d9f470c4dffc45b8e871" #h"4c7ae028c0fe61f2a9cada61fae30685b77f04c6442576e912af9fa6") (:digest-test #h"52839f2f0853a30df14ec897a1914c685c1ac21470d00654c8c37663bfb65fa732dbb694d9dd09ced723b48d8f545846ba168988b61cc724" #h"2f755a57674b49d5c25cb37348f35b6fd2de2552c749f2645ba63d20") (:digest-test #h"5fe8c2072d8900287ccaf07f3f66b0c22acd3e0bb91d9573754e19e373ac35271d8b43443436ac0c162850ef3d7f281409ad29a9bf716c77d1" #h"42909757f6e229f69f04cc7a863c4e70e48c7c3575057b455c959775") (:digest-test #h"e8064d83f3d643af8718c87e3ccd6a9733685eac61d572a22ab943f232fcb04f70858e8984449db14a76bb7eaf2458efc3ed2a32100622c52b7f" #h"1a1d8ed54cb45c97bc970754b43eb93d9eabde4c7b07f76ad82d8ede") (:digest-test #h"87c9a517e28d1bb54ad20fca76460efd894d7786e68ee8d746b2f68208682157c8ad06cc324ad7a3189e09c6c39d4c768719c0a49a41669f2767d5" #h"605977cf87b9b309bbddaaa64e528ace66b04df9f72c0e7ec88be1da") (:digest-test #h"59fdac3b6b32039291801c7d6f46ede8d26dc5b7a192e007116739b617569f2523680b3c0b6631af453e55805aa760c6970833ac06963bbc9dbd455e" #h"e9f0cb1dc8337e906385892f2348a8ba4412318ecad9b96e3711531f") (:digest-test #h"30350a4df0b58ff49c0fa09e426fcd7007b290c760c825c1855d9b0023b82caa51e3cab4c60cfa61492be50568e5ac0f6db0fd468e39e4536403e3809f" #h"776cc6636c02408fbf65ace73ae80017108b917c16c5a912fd860241") (:digest-test #h"ef797a0d43c30b4fe1014bdb9420879c2ff845d27e73d55a7df22930c8ece73253d8bb265b4ef2ff9c69455cc56ff25229b4126bb7bb26ee2c9ff36187b1" #h"f5b9ffb102affac352a4a535a00f89b06c268cf4881d712668906025") (:digest-test #h"716944de41710c29b659be10480bb25a351a39e577ee30e8f422d57cf62ad95bda39b6e70c61426e33fd84aca84cc7912d5eee45dc34076a5d2323a15c7964" #h"61645ac748db567ac862796b8d06a47afebfa2e1783d5c5f3bcd81e2") (:digest-test #h"a3310ba064be2e14ad32276e18cd0310c933a6e650c3c754d0243c6c61207865b4b65248f66a08edf6e0832689a9dc3a2e5d2095eeea50bd862bac88c8bd318d" #h"b2a5586d9cbf0baa999157b4af06d88ae08d7c9faab4bc1a96829d65") ironclad-0.57/testing/test-vectors/sha256.testvec000066400000000000000000001701631420372057600220040ustar00rootroot00000000000000;;; standard tests (:digest-test #a"" #h"E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855") (:digest-test #a"a" #h"CA978112CA1BBDCAFAC231B39A23DC4DA786EFF8147C4E72B9807785AFEE48BB") (:digest-test #a"abc" #h"BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD") (:digest-test #a"message digest" #h"F7846F55CF23E14EEBEAB5B4E1550CAD5B509E3348FBC4EFA3A1413D393CB650") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"71C480DF93D6AE2F1EFAD1447C66C9525E316218CF51FC8D9ED832F2DAF18B73") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"248D6A61D20638B8E5C026930C3E6039A33CE45964FF2167F6ECEDD419DB06C1") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"DB4BFCBD4DA0CD85A60C3C37D3FBD8805C77F15FC6B1FDFE614EE0A7C8FDB4C0") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"F371BC4A311F2B009EEF952DD83CA80E2B60026C8E935592D0F9C308453C813E") ;;; bit-level tests from NESSIE (http://www.cryptonessie.org/) (:digest-bit-test 0 #x80 63 #h"A9E8913B13864096B9EA592F9548C87654AAF8DF24E3437645FAC174D1036E1C") (:digest-bit-test 0 #x40 63 #h"F315F3F6D33215F8777A7D5A4B809F433729D13A86FE6ADF3DA5C11137E18273") (:digest-bit-test 0 #x20 63 #h"AE1F446791358EEB17DEBD264614CAEB7F72558C085C73BE0DDE284B4C63A957") (:digest-bit-test 0 #x10 63 #h"94C41AF484FFF7964969E0BDD922F82DFF0F4BE87A60D0664CC9D1FFD3ACD650") (:digest-bit-test 0 #x08 63 #h"2763D88A93549AF57C701D5187E8B477D9AA99EBEFE6D1E41A3CE07BF1A1AA50") (:digest-bit-test 0 #x04 63 #h"D6E497B816C27A31ACD5D9F3ED670639FEF7842FEE51F044DFBFB6319C760A5F") (:digest-bit-test 0 #x02 63 #h"8A023A9E4AFFBB255A6B48AE85CC4A7D1A1B9E8E6809FE9E48535C01C1FC071A") (:digest-bit-test 0 #x01 63 #h"16ABAB341FB7F370E27E4DADCF81766DD0DFD0AE64469477BB2CF6614938B2AF") (:digest-bit-test 1 #x80 62 #h"5A42062C0EF5A54ECCF7B0B155C90BBF408AB2480EE939342ACBEBC24E265401") (:digest-bit-test 1 #x40 62 #h"B5B17E5DFF8C9A4AE35D22DE243821159C400060F0F32D8FD87914DA904AE459") (:digest-bit-test 1 #x20 62 #h"5CD77BAB00B0CDF152F3B0B42287F061E5DAF3AC7806B484572DB8E0A64BEE77") (:digest-bit-test 1 #x10 62 #h"ED5F4ED0D6617D50ABD49D4C84281E175B48A7E1EDF550A89BF2C9B5C4CE01F0") (:digest-bit-test 1 #x08 62 #h"D5755A80F47671E9C3E10C007865D7868432D9942CA2CE7D60510039A281CC5C") (:digest-bit-test 1 #x04 62 #h"335D953107E146619C0BF52F8D650C2CDBB5DAF1E1278F51437D96215AC74DB9") (:digest-bit-test 1 #x02 62 #h"1A2A07EA5731313C488CD126D0C118542516CF35A507F9E8AE4A81EA92E3F267") (:digest-bit-test 1 #x01 62 #h"4286DA436D65E3A216846042CA5E0F51AC7A192E9DA271A72A9C4097BEECD52F") (:digest-bit-test 2 #x80 61 #h"FE882C6CF31C7A4A93A4F5A2BC5499E443731A87F6074EB32CEFAFA3E3B8B864") (:digest-bit-test 2 #x40 61 #h"5B9CD7FE975B5F7894DF930EB23518029068F9BA7D2DAD3D8DA29B40E1AA2EF0") (:digest-bit-test 2 #x20 61 #h"36558C5A404A9748423F31D60FAD2373E643A9B5B2F145C4390AD8C80345DC14") (:digest-bit-test 2 #x10 61 #h"887BBFD20CB15B19D2483B1D56DFCF5BCD74B8D05ED44CC912ABE80E92D1064F") (:digest-bit-test 2 #x08 61 #h"5D434409283CDC8E500C72DE5591F50BD858C8377A7F5F979E5F1B446E091EC0") (:digest-bit-test 2 #x04 61 #h"68062FA9A8B16191F44B782CBC5C35E434965C23E7922001447B2005F5EAB033") (:digest-bit-test 2 #x02 61 #h"CFA4AAF2F726AD6D9726B59E8D850BA58B688490E5214187B1766963E0DC1408") (:digest-bit-test 2 #x01 61 #h"2F59C313EECC21D0CAE49D92EF60246E0498BCB84FF30925F2E9BC045578B1AA") (:digest-bit-test 3 #x80 60 #h"2E7963AF3EC7FF5CE6A4C23FF2C3D9BFA765C1A7CCF843E03E0BE147D852E91D") (:digest-bit-test 3 #x40 60 #h"2FF775793E4DCBAD7D20D2428BC09CEEC908628797AEFD57A958B50F3485FEA3") (:digest-bit-test 3 #x20 60 #h"3DAE0491CDE03D6C7FAEA715170ED25139A0F7B77F601FA20F2A6FBAF8076610") (:digest-bit-test 3 #x10 60 #h"63635B0197FC6C31478B85C92748372B03C4356718B5D600B677C2F7A2A45DF9") (:digest-bit-test 3 #x08 60 #h"C4F689A854EFE7254FE0683DFC3ED392BB5F98656B2B906437819416F43D190C") (:digest-bit-test 3 #x04 60 #h"F0E43B2C47EE3CF4865CAFA6C2406CADEF4C7AE461AA7FD23C9F294F88AC3E23") (:digest-bit-test 3 #x02 60 #h"C4A8240D8711FF7C881B00324B9FB0A8BE9D90D99E7F95525EA69EAF9F7658CB") (:digest-bit-test 3 #x01 60 #h"18AE4CCBDA9538839D79BB18CA09E23E24AE8C1550F56CBB3D84B05331FFF401") (:digest-bit-test 4 #x80 59 #h"1B19FF19DB12ED9ACC13FA3A0AF2359D7F247946306E2B4BB9C33CDAFF3AF619") (:digest-bit-test 4 #x40 59 #h"9FC1D2FDDC3BF79EF1CD260C4DC38F9049FE9008A30361E939FB7D3484B78913") (:digest-bit-test 4 #x20 59 #h"73EC741E9AAB162395254AAA253960753D7B2270648C47BCF88D6B56B4B21B6D") (:digest-bit-test 4 #x10 59 #h"2E65812BD89BD1145EFEB3907772D220902C3D29DDA4DCBD5C56D956DFB3798A") (:digest-bit-test 4 #x08 59 #h"96CBBE51E1657CEA98D8A528B326F9E12B4EC3E96DF44248472E314378E63289") (:digest-bit-test 4 #x04 59 #h"0AB3F00B996C2E9B364C0180CBE26663D0270E7FBD54C6B1161A0E5AECF2730B") (:digest-bit-test 4 #x02 59 #h"78554A3A0C8F62E32DB9906F946B2BB3AC03B88618170E9E67C011EE4F7096D1") (:digest-bit-test 4 #x01 59 #h"D6DAAFE3DFBC6F26CEBBFEF13DBA8216F3CE07972F0755B0A39C92ABF6858E70") (:digest-bit-test 5 #x80 58 #h"55FFE1A582E6C6EC8EB546943833E4B746B122597B0937E265A7E2151F8EC5F1") (:digest-bit-test 5 #x40 58 #h"EC44B4A96BB31BE6E90B95FFAEF0FCB1650DCA2AC3687837FE0454EBCC3CF6E2") (:digest-bit-test 5 #x20 58 #h"E233BA3685C62E92EAE8A6A5E876426D8C384A4F0A41DD769A2EE19156127C2B") (:digest-bit-test 5 #x10 58 #h"C48910BEEC85E2C9E5DD94E15FB8F93FAE049199776832E7001CDC70139B24F5") (:digest-bit-test 5 #x08 58 #h"E810A131AB2FE5C1B224E06FB74237C52CFC290F8BB5E7CA67704ACF26A6A8F4") (:digest-bit-test 5 #x04 58 #h"EB3B3D88EC46D915AF459E38EEBCFE26ECD7FF2D966E99A5760A71001D4DB287") (:digest-bit-test 5 #x02 58 #h"A6444DCE5DEED90C057E9BF7126BF2A7DDA65FEFD19C0C835BB6228D24319EB5") (:digest-bit-test 5 #x01 58 #h"384A41704D44FC9FA013A0EE0A967AC55B303D92782D0DC1B002CE1163422B5B") (:digest-bit-test 6 #x80 57 #h"51655DFDD09BCBB89161EE7D934CB63F65E7F0C9BE8AF2DEAD06C909165EFAC0") (:digest-bit-test 6 #x40 57 #h"465B47DF86D8D6601383540EDE75E40AF1C482BBED28A2FA6415256AECA035C6") (:digest-bit-test 6 #x20 57 #h"FAE00DD8A3EFE9AEA394489EE52871975DEA0B517BD7DD464D16DD63101CFFDF") (:digest-bit-test 6 #x10 57 #h"069AD6583EEF4D8D1595D8F9BCD5E56F84658BDE7399737588D3AD3E4C35BD83") (:digest-bit-test 6 #x08 57 #h"848E1411238E592C06A260F0EC88654BE43716670A0F2CEBF795D200EB6BD2B6") (:digest-bit-test 6 #x04 57 #h"B6DDE25E006907CACDBB977307FFE3ECB5C1FAABD72350D19FE635A1F68A6C63") (:digest-bit-test 6 #x02 57 #h"45D1133AC05424A2D9B87030B58444F494CF37AF30C0A1F3C347537A43EC909C") (:digest-bit-test 6 #x01 57 #h"99390D8450F4498771E12A6E19F5511A67E1FDE8034154D1CE0C6D6D1C9FA6CC") (:digest-bit-test 7 #x80 56 #h"FA5FF9C30BF0762E0919831B82ADB7B0F817C53F97E16E23295A6AE410A30F45") (:digest-bit-test 7 #x40 56 #h"101664E54D067297DEB010BFA4B349DFD0F8BB29CFB9D164D8497CA7D4B364DC") (:digest-bit-test 7 #x20 56 #h"8A4EE959DB604A645DC87D6059B5BD2BE618F9630BCFD0802472EFEAFE161DBF") (:digest-bit-test 7 #x10 56 #h"16A4790BEB5E658DB1EB41B0BE81E67905C4FB250DDA9586290DA8170A1F2C3B") (:digest-bit-test 7 #x08 56 #h"238366DB6F519D123C0368F079F5022CA613B098716521C63DBA487382DFD706") (:digest-bit-test 7 #x04 56 #h"63F9E0E3EB02BC1E5D9B9914A85CA67D15379D2770018FFDD922CBF8C8499218") (:digest-bit-test 7 #x02 56 #h"98D66C738C93E5FCB805317BF1933E9FB6785D755947F7BC295378825D3022D3") (:digest-bit-test 7 #x01 56 #h"27B0F56C18180D06A1EA825A813E7EE7F68909AB503B66ED1D30FE35DE3ED5FB") (:digest-bit-test 8 #x80 55 #h"87FE0A8DCC23EB80FC1DB6724320543E4E55F983D5ADA1C422587E7D0F3A0376") (:digest-bit-test 8 #x40 55 #h"750C89EE48ADE5764BB543E267E04C32DFA5365F8188F4383BDC9BF7DFF9E862") (:digest-bit-test 8 #x20 55 #h"71CEC1690D152A93F13D0C4A1A2B3CDC0460ABE8AF1800EF94CD649662627B28") (:digest-bit-test 8 #x10 55 #h"D1C43A7FDA45CA32D2514DBD8F50F743EAA24E5F150B083650A454DCBC3B87ED") (:digest-bit-test 8 #x08 55 #h"04452E812B76E6BC0FA033984651AD9EFEF0DB4D56D8886C24FF24B06981FEBB") (:digest-bit-test 8 #x04 55 #h"54CE27BA2B8D5643E2915B5089157AEAFD4FF4E81306452671E06D6C26BEB856") (:digest-bit-test 8 #x02 55 #h"D7E5AD6B662F02F8B634949B2A90B654FA9357E6095798F721C4A26D42EFF4CC") (:digest-bit-test 8 #x01 55 #h"6E384B20006C687FE6183A443D7F15691A4D81BE5FE39D8ACB8D9EF7A8238117") (:digest-bit-test 9 #x80 54 #h"9E8C093CC770B108AD5D2C028CF48D3B4652548583D83389A3CFFD8F857821A2") (:digest-bit-test 9 #x40 54 #h"1D867F890D163C3094B6E2BA6FE16B19D8CDE95049F5CAE0095003576CF359DC") (:digest-bit-test 9 #x20 54 #h"5C82EA174F7C99F20FA78E4FFCD74BE8372AD83D4DDD9CE3E0D53B99A813A93F") (:digest-bit-test 9 #x10 54 #h"C54CE44900EDE8FE1434A667CFDBFB998180ACD3DCCA0CD73132E32F0F0056DE") (:digest-bit-test 9 #x08 54 #h"D04D6AB514083027C4FA071FF0ECF988F49ED5A9496E07842944FC496CF7C685") (:digest-bit-test 9 #x04 54 #h"961CD2C98BB68515DA22EC681520E912C7A1E9C0F01D749715FA229648ED02D8") (:digest-bit-test 9 #x02 54 #h"28E0FC7EFF7AB3F7A2F800B75BF819E2424B14ADB3DE8E35BFE500AFDB2A857D") (:digest-bit-test 9 #x01 54 #h"68ACC3396AAABA9F0DB2CE1D7B8327FA4B3BCC8A881F8BD16C3EE9EDEDC2E088") (:digest-bit-test 10 #x80 53 #h"5D987E43F6368F9B33F3AA812E785006210FF192670906C2E4A3C9DAB8096B01") (:digest-bit-test 10 #x40 53 #h"8DAE1338F0E9A06141FFF2E76953E0FDAE888113A5950EA5D0AF728D3744D3CF") (:digest-bit-test 10 #x20 53 #h"385EEC3C348B1AED84CBE8015D75EB79E3F3B354CCCDE381ABBE8F5C2ADDA330") (:digest-bit-test 10 #x10 53 #h"8DDBDBBF787F139A25C1D40D8A9108B9CF8C008FD10379B3EBEA8FB27A3B7A4C") (:digest-bit-test 10 #x08 53 #h"1E633B490B9369213ED26FD9B920B79FC6EC5E6B8FF3DED091C95CD5EFF6580D") (:digest-bit-test 10 #x04 53 #h"C5A580DEC9773743AAA8DD054B9E0A2556F96100FB7618E761BAACB5666689D5") (:digest-bit-test 10 #x02 53 #h"7AF26FB0A4158771ED17824C894F872E3D9BE453EF1A60FE075BC3609731819B") (:digest-bit-test 10 #x01 53 #h"4BA4FC0C8C329114035A8026CEB7088F302639D1D4D4727222BD1E67C448535E") (:digest-bit-test 11 #x80 52 #h"1A2ACF4E303865B9E92EA408A9278510A6A6D8B2003589652EF1901691123EEF") (:digest-bit-test 11 #x40 52 #h"0054216AC82168CF4389850D921F3297C0EB3191FF4B59D092BEC5AFCC144B3D") (:digest-bit-test 11 #x20 52 #h"2ACABFC631E3E54ADCA91DFF5CC7317C993926A56A986760184D7CEEA5D99B4A") (:digest-bit-test 11 #x10 52 #h"4CE4CB88C6364B3B2C7FBA1496693D32DCDA14141D38EDEF6B89ADB59D592364") (:digest-bit-test 11 #x08 52 #h"D995A4726D4117E0C270EDF2C90A86CC92E707D58F829D550390A33EF332229F") (:digest-bit-test 11 #x04 52 #h"5B0932A24469CE654D4B6F9336DD2C704E76C47BCBD246769D7A11DA87226F2E") (:digest-bit-test 11 #x02 52 #h"22EBC262ADFC355F74DCABA5049413F91DD6DF368256400C694DF9F9387C9170") (:digest-bit-test 11 #x01 52 #h"8204174FEC9661937F10FDCDC0F21D22C715CEA75E8A65EA48AA5F2656ACE73C") (:digest-bit-test 12 #x80 51 #h"793526200C8789845B8EBF1576D81EB58968CBA1E21DC569B77CFDD44B319724") (:digest-bit-test 12 #x40 51 #h"9394D8EF9CB5F34520A2D915E44134243F37763AA62457562FB08F833DC15EA4") (:digest-bit-test 12 #x20 51 #h"1E3D1BC3E1E151B53C020F2753A310241071A8635EBE7D73B7B403FC5249549B") (:digest-bit-test 12 #x10 51 #h"A06F37224118DFF3AADA5F800B73E868D894A9C137ED70B1E8B11EAD10CB1025") (:digest-bit-test 12 #x08 51 #h"EBAB76D8BD268E025ACFFB4C3BA37838F9D31980112F9477D96EE20F6D05F9E8") (:digest-bit-test 12 #x04 51 #h"8171056C199703D480DA637C5172F0C57636EDBD3019AF2638434022F11E68E6") (:digest-bit-test 12 #x02 51 #h"07CC0BD8CEFF88F280DCF9E8DBCD5A180C6A3C56C654896E6F9D533F56E5F12D") (:digest-bit-test 12 #x01 51 #h"A1591A87F66ECED286A026BE194EC87BE0FE1E9479BAF3B85CAEBA29AAA5FF98") (:digest-bit-test 13 #x80 50 #h"E709390882728CECA49604B51FF3A5B90773E499DDE9825F9953F166B50D2171") (:digest-bit-test 13 #x40 50 #h"0CA4D2B8860E35EA0A6113EFDD91C75718D6722AD6DB319E1ED05F7477592E62") (:digest-bit-test 13 #x20 50 #h"D18C38719F01277CCF0E394AFBA357352116D2BFA238A0C8389E8B4CB6053F13") (:digest-bit-test 13 #x10 50 #h"0B89A41A456BD73B36B66291604F4B2700FFC121BC5E6303D523EE9EF1A5769F") (:digest-bit-test 13 #x08 50 #h"F7109D2565DB442291E915E10622EBFFCFF00B7EB811B35C49356B828CFF3D09") (:digest-bit-test 13 #x04 50 #h"6E59F3D6E44866A80A9F83F47F6551188529341B6DC3B28DC97066183E4F62EB") (:digest-bit-test 13 #x02 50 #h"A96C072C03E4892DEE7C06A0E53327BC0F5A2E434DA82D44510484C158576C28") (:digest-bit-test 13 #x01 50 #h"CF196D6069AB8CD56FB148363BC793D8FA4F82571E46C6F4C47D6CDE34D08E09") (:digest-bit-test 14 #x80 49 #h"FD6402909175BE39A851E90C8A9679AC28175DC1D1FEC3ED8B5D5633BA0FB29D") (:digest-bit-test 14 #x40 49 #h"C1D6BB03D087AC72DFA0F60BC321EED88C453DA67047E077E254A4AE42C5DCA6") (:digest-bit-test 14 #x20 49 #h"15C7F345247CB2C74D53BFA08A41098816C3EDCABBE35226B8FBD532F37A5B3E") (:digest-bit-test 14 #x10 49 #h"CDC2F7D71B79384BBDEB4C1BB523D0EAFB54D8B6534BA0BFD3EA509CAB6D5263") (:digest-bit-test 14 #x08 49 #h"9F7B018C867EF344141DC43286533AC255C92F52D898547400BFEC008371B739") (:digest-bit-test 14 #x04 49 #h"041CB84FA14B83E44998E02443D22630873EECA3235B5B6B99757241758DF4CA") (:digest-bit-test 14 #x02 49 #h"5048583E74D84DB87F14455B3C3BC6DF30026A70606F0211564ED13C3681E8EE") (:digest-bit-test 14 #x01 49 #h"6D739D8A74C3DF91A97199A7E0F5B411F90634C4390BDE23D71F72EE1DAA386E") (:digest-bit-test 15 #x80 48 #h"C6D5A6F68BB7D53CB7304DECD22E4E831A465DC337F077CF9207BE07A788A470") (:digest-bit-test 15 #x40 48 #h"928E386EA548B1922B4D284003689D5C04A26A9BCD7D876B294FFEB18062F68E") (:digest-bit-test 15 #x20 48 #h"28B6290B52D13B0A0D6B967B98B1921E04C55FA98D45E7E1373D093C92950CE5") (:digest-bit-test 15 #x10 48 #h"EAB497B1F7E1FA12E3457F9C542C7B2AA47418C4BA15E7E1F2FAFD95E9B24080") (:digest-bit-test 15 #x08 48 #h"8A9BA0B1B781511F4FE2B9CB9E1B779B454D13F6771F0E5C088604DF18020B13") (:digest-bit-test 15 #x04 48 #h"151B522B45309B70B7A740D2102A9D1AFA00EB5309985A270E72477384BD5A2A") (:digest-bit-test 15 #x02 48 #h"413A2D719B9ECD7DAEE9B5782EA0DC4BC7DA68A36578D52F462F07C5C7CC3EBB") (:digest-bit-test 15 #x01 48 #h"0BFBAA977CDBEC98D5208E6A39ED8084C49E9B3812AA08456105B591B639E500") (:digest-bit-test 16 #x80 47 #h"11F95D879EB9E20338049F04186D8D3BD6B84AD6D168B5CB94A81F0928F76123") (:digest-bit-test 16 #x40 47 #h"83E869669EF1EB86AF473C27131BC1043EE2AA098171F0CB10396838B80E2852") (:digest-bit-test 16 #x20 47 #h"AD3923410D65B22EBE52D9241B064AEA2E9C6B1FCC1F3B87CF4FE24B6D279C81") (:digest-bit-test 16 #x10 47 #h"F34D63713B41A46AB57E3D58ACC1E2FB551B1ACB1464B84844495DDF3CA31C53") (:digest-bit-test 16 #x08 47 #h"37C4014E1190109F6AB94757573D42969CEF35C62DB81163BCBE344F6D35952E") (:digest-bit-test 16 #x04 47 #h"622327209A67F4F716E21992B1AA2C2EFE291502C973B84DF66CCC594D8951B3") (:digest-bit-test 16 #x02 47 #h"EE022A8C4A651ADAE0C94A710342C3E34A7EB8A144C7C68DD9E28AF6F857E8AB") (:digest-bit-test 16 #x01 47 #h"752C03CE3316BA05CA4C9256A56F20287FFA5CA9DE120C54083422FF0AA39484") (:digest-bit-test 17 #x80 46 #h"62B6821AC06AE513EBD4BB6E71905C2BE2D23D7F6F91585D25FFB4F4A7EADC82") (:digest-bit-test 17 #x40 46 #h"4D636023B89838862F6C5E13323B7126D9992EB9DC116EA0FD49C07E55077AEF") (:digest-bit-test 17 #x20 46 #h"186B0115921105FDC79642B22B975D73E8BAEF39F3DFA54D899BAB19742CD08E") (:digest-bit-test 17 #x10 46 #h"00437FA812270E235B565E4380108CDFCE3965B7EAB947F885AC38625BCC05E6") (:digest-bit-test 17 #x08 46 #h"C4A82A95E933A1002A4D0F428E692775AF3DA97F26B4859DB4411851039E278E") (:digest-bit-test 17 #x04 46 #h"433344AD40912C81654FBB4EE5B9DFDB40EFAE5E04701902DC2CFBD61E46406C") (:digest-bit-test 17 #x02 46 #h"A025F9FAB4920B6E075BB27B2EDFA590CB7AAF4FBF79D6244992745C2E4CCDA7") (:digest-bit-test 17 #x01 46 #h"100374AB429378172246C68FCBB03FD2F0C248CA5661D22BC57C5E11089EE0B9") (:digest-bit-test 18 #x80 45 #h"BD61FE93A4AFC5FC18826B72E9170D0F5A90673A4DCA6029933C1E7EE9F8A994") (:digest-bit-test 18 #x40 45 #h"E600FAF8F2A3ECCA343E9B2C0750C1B555C70C48233E5FE1843319E14DB4CCA6") (:digest-bit-test 18 #x20 45 #h"74ABD7E3B63DA0C50C60285ED214D5EB5685B041C04F2A5760E16CDA326E5A26") (:digest-bit-test 18 #x10 45 #h"CEE269F6ED2306C50A51E8652CB16EC3F5244422E74716E7B2B496210FEC8691") (:digest-bit-test 18 #x08 45 #h"E111CE36766C35A4FFB51B92EC020751478FB953CFE45E4EC8F0533DE6B0E389") (:digest-bit-test 18 #x04 45 #h"8A9B737C2505074E365B4E93AFAE34FB5750DE584F4EA6DB410DCA4EB4A4A4B9") (:digest-bit-test 18 #x02 45 #h"85368C816EFFDB2AABB46BCA1A68E6BE939763A007E5D8E0C300F010E4A20950") (:digest-bit-test 18 #x01 45 #h"F73860746259527888883C4A156C166B1E437D9F901B20A53C9AD38CA1A79F0F") (:digest-bit-test 19 #x80 44 #h"1214272B5CA64919D4A5E414BE111EBAC89E38A3E7012D266FA37059E7661A56") (:digest-bit-test 19 #x40 44 #h"F436C8090922DC9C9125F7946DBAD989D0F30C6937797F201B4EF6D50978762D") (:digest-bit-test 19 #x20 44 #h"83E1655FFECBFF4B6E9ADED0A2D1312FF900036CAEAB5C8761D7CE3CA893B688") (:digest-bit-test 19 #x10 44 #h"D139857DD62ED86DB019D9BC802288021B718C7ACC4175E33B660E2D0A397020") (:digest-bit-test 19 #x08 44 #h"0843449A3FE35677DFB3816FE4CFA489A8EE1AE3E5F84AE79042B26F79B58062") (:digest-bit-test 19 #x04 44 #h"323B852EBB3286D88AAD0139783166B82A2BBA338B400C6D6B87E1E8D3F2EC46") (:digest-bit-test 19 #x02 44 #h"F54441B6A5C993833062D5F66F230FBE7C81B7BF66E7C9279F91AAD94056DB82") (:digest-bit-test 19 #x01 44 #h"E4FB21E08A3DDDAE736792FE342E9AEAC7DDD42BB2BDAE7E650D80B0C29095F3") (:digest-bit-test 20 #x80 43 #h"0091715550D08BDC74C02EF3C679EF7008FCE665F24C13CD5DED432307E1B25F") (:digest-bit-test 20 #x40 43 #h"E2D01443022CFF8771825D02812C3909E13642691422CCDF4197DAFE8E7A53ED") (:digest-bit-test 20 #x20 43 #h"831A8C1A5EC3793DD2FEBD46B2EA989653F26984B2DF508E94C913C5D8209B27") (:digest-bit-test 20 #x10 43 #h"5BD023733D2742D9DAFB53CB1E949B3F5EBB89DD0063E5C8B937E95C3B0378D0") (:digest-bit-test 20 #x08 43 #h"406AE8A0DA1864B419B7196570A3B358F5E92D49FA0F2916543428D72AF6705F") (:digest-bit-test 20 #x04 43 #h"5966231A1F9016C946FC89CD163D28939C28B2FA8E85FBB3071FACDD7D793B33") (:digest-bit-test 20 #x02 43 #h"0ADA1081AD3E0CBF690BC16623C584D5A01E5F287842D9C3A54FA05D53F57B5C") (:digest-bit-test 20 #x01 43 #h"20FC7056C693A040CDDA479FE23832945C771265A86A81EBB46756A0E35C8E41") (:digest-bit-test 21 #x80 42 #h"92B814A7A3C35BA18DF50A8D61BDA5B920872C8761E5127DA5FA5417979710FB") (:digest-bit-test 21 #x40 42 #h"1C0CE1582DEA18877BDA514F5EA714B5E1EFE47FC56F636661AD627ECA3A88C6") (:digest-bit-test 21 #x20 42 #h"63CED81AAAE244EDBE9F3061EB04880081B760151102D4E3EF96CEE066A702A4") (:digest-bit-test 21 #x10 42 #h"7F1B4A9181213108A725E8688E1A0C89A42D669A040E642E7C50DF293C6EB286") (:digest-bit-test 21 #x08 42 #h"B61A30279CB9685D26F0633B942FB92D1EDCF10125155C95CCC3E4F324127F46") (:digest-bit-test 21 #x04 42 #h"DA0063B8AA47894FC7C2B192DF6286A7AA8AB189A75166ABA3910523F4C7343C") (:digest-bit-test 21 #x02 42 #h"CF0BE9C1E8E5536A0063714709F3CE9B6C64870583273D152E1AF2E9E8826437") (:digest-bit-test 21 #x01 42 #h"A40F4791838B9E90624E6048BD74B355222D74123F2BE4DF87C5C53E6528EDF1") (:digest-bit-test 22 #x80 41 #h"47FD4A2160999C3438801AE2741044C30BFB09FA28E588339B40EB4147A0088E") (:digest-bit-test 22 #x40 41 #h"1633C6F7CF7DFAFC06AA6566FCF5BDBA663987DE2118BD80B90DDDC24B3E6B47") (:digest-bit-test 22 #x20 41 #h"48A6C26EECFE1257C905F42AD27C5AEA3E247A12D8E37168B87EC23C5A3782E7") (:digest-bit-test 22 #x10 41 #h"69904A58FFB51D5A523B3F7CD89B1537B9464142FC6A558165D94C4306B36486") (:digest-bit-test 22 #x08 41 #h"4234E0D401967DC48B8F8E7065F21061827D4D3E164F212D49E9D3E4F8D08203") (:digest-bit-test 22 #x04 41 #h"0D35CFC713B51EECF0C7CD174AC057598E321E59CF8BC8F66701093451CB263D") (:digest-bit-test 22 #x02 41 #h"8252A0DE60A97430BED19227D2601829C1A4186EF0D9EE83081B681DC62833D0") (:digest-bit-test 22 #x01 41 #h"12B01C4ADB167F43D5C82C5D36C20433A1999D7B697296067325150F6B42E723") (:digest-bit-test 23 #x80 40 #h"FE92431BD6235C3A8E6CCD5BFF3C426A384805E20957B7709805D8B250199B0D") (:digest-bit-test 23 #x40 40 #h"257416F289917F3747A70BA80B0F2FA456938C5EDFD8235CFE57D241489B5A36") (:digest-bit-test 23 #x20 40 #h"2884586F209E50323451F32AE31A622202847696CE159E7DA03F9CE652244567") (:digest-bit-test 23 #x10 40 #h"A7F896978FDA16AEE6A05FE0E0E0A0053C05FF8EEEB94ADC2C2D80CAA5B78EF9") (:digest-bit-test 23 #x08 40 #h"E671DE62E823AC67D41803B68AA2E0FF74DE70C3F9C7894C69DADEEE6B102D8B") (:digest-bit-test 23 #x04 40 #h"AFB4ABE7C93F3B90BB6A3CF07700A413EC4FFF9354F1B54FC8198DF227FEE29E") (:digest-bit-test 23 #x02 40 #h"447FF32829FAE9ACA889CB164D52DD4A92CA6A56E303926CD9760A9B7A511062") (:digest-bit-test 23 #x01 40 #h"19DE25609DC348DB36FC8668F42B78131E981774DE9AB5D68B7FF38FAD1855BF") (:digest-bit-test 24 #x80 39 #h"998E932CCE059900512CF7C87965D3CB55B8F6F57B026CBCC170EBD2FA685039") (:digest-bit-test 24 #x40 39 #h"6AA754752F5885684231557BD9A696281ACAAB81202E3CF242B74C4C9974E95B") (:digest-bit-test 24 #x20 39 #h"1660EC3919278CF063BC16C4DA6C0493B7C95187F4B1E3BE91007FCA9B258FD9") (:digest-bit-test 24 #x10 39 #h"D5439F4CD69F0249C5F4B669863EF07AB67059FF9F6EDF5AB8569CC5AFBD707A") (:digest-bit-test 24 #x08 39 #h"C4B882FEBB7E9297980D45D05E7D77FDDA4FC320D39138C389B80E3EE1F5FE93") (:digest-bit-test 24 #x04 39 #h"BA29EC0E1056626D9D503BE8A4180D82694BBF9E7C6F9BA84F768337F836CEA6") (:digest-bit-test 24 #x02 39 #h"44FFEF2CAAC31AA58C323E8D54C4969E805140A8068E54C6948106FDFCF39FFB") (:digest-bit-test 24 #x01 39 #h"250575D2C5AA729F3A7A67696E93CFECBB0C74F610F7DF30483FA77D6156EBBB") (:digest-bit-test 25 #x80 38 #h"8463946014AF993FC53521E151DD0A5FE62DC9E4BE44B25951CE5108506E81FC") (:digest-bit-test 25 #x40 38 #h"4210C9B91A7903E1BEDF52F002CF07E9C940101F6A2A706FA5F5C46370B69BED") (:digest-bit-test 25 #x20 38 #h"35BCC9DDBA586ED7741840B1CC50318CBADB7D21033D49A9E13A365BDD8CF7B2") (:digest-bit-test 25 #x10 38 #h"1C4E0AA5721CB3FBA9619E7D3187289FE3B73FED4976C57C6B96B3FCC787E7A8") (:digest-bit-test 25 #x08 38 #h"D66C48F9805CA3A23C492763E7CB0CAD4F39C2906960F70782F03D982DE658DB") (:digest-bit-test 25 #x04 38 #h"86E32F041164B61EA3CEA4B08CC4DE1F0B372DF8DE0C70CA8912E74416C3C56B") (:digest-bit-test 25 #x02 38 #h"FC980464CADC70834ED870A8805297A9A134A17CE774577929883D37986E575B") (:digest-bit-test 25 #x01 38 #h"A960F4A548A5082B0C7A6E81CFC267EC551FF0590E7E481DBBB49D1320DB2993") (:digest-bit-test 26 #x80 37 #h"EB3D05BA0DBF1E4639B508A5071E048EA9537F5061D97635C278E1A42085FC4D") (:digest-bit-test 26 #x40 37 #h"4721C0512921E73F152434D3758BEE3850FD781D1615C216C9B9548215971D60") (:digest-bit-test 26 #x20 37 #h"75D3942826ADEADB234C13620EAE3387AC3712A0011E73D4B43CDDC1D8A19A3B") (:digest-bit-test 26 #x10 37 #h"B1C964DC8EF1DD6C7776F80513D20E907D151CF85B9288C211C43B11622ADE9C") (:digest-bit-test 26 #x08 37 #h"D131B7F26B81998EC103602D4519D8CE666AB16B28DFC0BE3AC8905F89F5FCD8") (:digest-bit-test 26 #x04 37 #h"992D98B251D8434F949203946F08DC58B8E5DC8E9B1A2683EF6C147D02FF4AE1") (:digest-bit-test 26 #x02 37 #h"796F69162354BAB8808A8A5995366974B63EF0FC918F742E96669825D3C4B7B3") (:digest-bit-test 26 #x01 37 #h"E853183FE5C256B343660C585EE24EAF3D08E7EFB03FE37153E3EFD10139210F") (:digest-bit-test 27 #x80 36 #h"596E7B035AF0AE5DE70BCD5676201A2AF82A5F2FA4C9B6C816179682D26C5512") (:digest-bit-test 27 #x40 36 #h"1AD5B174B748974B910D09AD8C69DE4BB9048616D946E7E68EA5E7633C97E6E5") (:digest-bit-test 27 #x20 36 #h"467F92DB569C7931096F19DE0E29D17010CA82C3B50E85FED08CB2D85B0B8F97") (:digest-bit-test 27 #x10 36 #h"9E7F02E099917E00619ED5BB9F9C7EEC2811F57ED0DAD85D2C95ED8DD0E4C08E") (:digest-bit-test 27 #x08 36 #h"3104DDF4257DEDC2010A4705CAF03B7D504B4FCF2ED1EEC59ADCA70BCA9310D5") (:digest-bit-test 27 #x04 36 #h"933883E24E576162D81D93298D58D922A8329795081D7597D4CF8010D94FA8D2") (:digest-bit-test 27 #x02 36 #h"D739D01F7E09356921DD36B319A81E6E5DFFE1F3A4B4835763B0E0BC7AF7D54C") (:digest-bit-test 27 #x01 36 #h"6F9FC1387DF177C8834F70EE0935668EBADE05884B7A613354F95ECA31071D95") (:digest-bit-test 28 #x80 35 #h"08FDA821CDCECD8B02CDEEF208BA74581883AB871564E283A497007619F05FF8") (:digest-bit-test 28 #x40 35 #h"8B486B4DFF4E698B634905033D54646C1506D5E99FDE44ECD842629B5AEDFFDF") (:digest-bit-test 28 #x20 35 #h"046B626BF4B91DF0948C5B424EFCC4998D399ED924514B111BF3DA6CB804A044") (:digest-bit-test 28 #x10 35 #h"49F8604A06257AF4E62B76EB9BAA153C00F6205529661240440236E8596C18E4") (:digest-bit-test 28 #x08 35 #h"4876639F3A19CD4BAD75A47E729E99C9D431F3ACD8E0C675FCFACCC7268CDE9A") (:digest-bit-test 28 #x04 35 #h"47B47983332873578EDE4F3C872005FA65B88B723A8D63B68266187FFF24C7BC") (:digest-bit-test 28 #x02 35 #h"6A3B715A9D621F009D0420B210B6628E0810A9B0FC5C230F5B6CB2A1CCB32521") (:digest-bit-test 28 #x01 35 #h"80AA5123B8E959A78F92DD0DF9C086E7CFF95CCAE81F11EE95A9178BC97DA5C3") (:digest-bit-test 29 #x80 34 #h"EB2495DD75C3983B972EE86E0C44A7DCCB58BDE45AAD011868FC1A4BA174B284") (:digest-bit-test 29 #x40 34 #h"52E5B0C1691841DDBFDB16B15ED91D4FD0AF5A5BAFBF803948CC692AD15001A6") (:digest-bit-test 29 #x20 34 #h"B8DEA824DDCFAE01942B3ECED0925C56D8E8D713484C0198F133FD6876CC7E88") (:digest-bit-test 29 #x10 34 #h"F854548650BD2EE462A221DF3F618A507CE737946BB6111BD10DF72AA519668B") (:digest-bit-test 29 #x08 34 #h"CE7A1418551803A588EBF7AB1874E803918461518052667CB3E827A2C331A1B1") (:digest-bit-test 29 #x04 34 #h"1AAF9C4E2210C62DDF85B8A17DE97A11A8FDA73F50EF3EB091905F4725C01890") (:digest-bit-test 29 #x02 34 #h"8C2BC5F4A7F1A04838B8CECA0FE1B2138298CB3E9EE8E9F3D398B9386C0EA0DC") (:digest-bit-test 29 #x01 34 #h"883F6A2B2F5F3CE3D0719327C32BD7FDC3678F30B7C0E6C9B646E8F255B24C6F") (:digest-bit-test 30 #x80 33 #h"97240AF3BB1ED0F4C40909902B619CEB345EBEC32FCE1A76778582F769DE5F08") (:digest-bit-test 30 #x40 33 #h"2E71DCDD0C32DB17D1B1A8E6CC4DA8C09069AD7FBCE3660C038A629A54CB9E33") (:digest-bit-test 30 #x20 33 #h"D73D0C259438C01E5C623B1AB558AFE7E158950A3FFF48028E9054B6A294C879") (:digest-bit-test 30 #x10 33 #h"9F44A53FB13DE79E4F851DE224A20905A471E4D5495BCE832BE55A72A3A9859F") (:digest-bit-test 30 #x08 33 #h"80577CB7D412273020AEA6986F7E7B82096C2C191D4F3A2641C1AAF854E35A40") (:digest-bit-test 30 #x04 33 #h"DB93C3458D36F2800D2FB03957237190EE0FE64D35978EE7A822B272BA1DF978") (:digest-bit-test 30 #x02 33 #h"E548EFC34D2F70A0C730679057A4CD9A0DE2FC57E804F970B5919F946A61FCF0") (:digest-bit-test 30 #x01 33 #h"060FD02BCB60AE26536EB1A50A25571E9712C6106AD966452FE5C40602BD9186") (:digest-bit-test 31 #x80 32 #h"D3321F207A723107AEA06879AF488D83AB99EFC7DD6AD75D2356857CBFE4D718") (:digest-bit-test 31 #x40 32 #h"1E8A162B8929F27D4EE0BC6DE76C4D186EE5B7500A658EE13BFB4429F596FFE6") (:digest-bit-test 31 #x20 32 #h"1CCA23F135D6A051C5BCEAB95D8BBC3983A92021783FFE3540C209F682C5C93B") (:digest-bit-test 31 #x10 32 #h"E7125019709757B38FD5429EB0608C03E8D939FC721345643C5085822A3FF424") (:digest-bit-test 31 #x08 32 #h"2E65FAFD44BB10B41DA06D445673A68F2441D68DAE0CBF1BA7C62C75E9FCDD5D") (:digest-bit-test 31 #x04 32 #h"342B4F26D63BD11D5AA83A658B40191D6701CEF38D0F4001116B4358FACF2B58") (:digest-bit-test 31 #x02 32 #h"60066741365E8D416FF884AF7E3EC36CC209B6CD6CEDCE891A0B4CB88DCD1C7F") (:digest-bit-test 31 #x01 32 #h"58E8F2A1F78F0A591FEB75AEBECAAA81076E4290894B1C445CC32953604DB089") (:digest-bit-test 32 #x80 31 #h"8F6DAB338DE16AB12E496BF52B51D00EE1358741033FA19A8B6E3736A9E55357") (:digest-bit-test 32 #x40 31 #h"E7AE17EEBECD2650630473FAB6F5716D80DB238BE1F09FA93DC004942255C08B") (:digest-bit-test 32 #x20 31 #h"0B41C730A71A17718B3E8EFBF741918BE3637A981F4838835F76289C00E424B9") (:digest-bit-test 32 #x10 31 #h"A44A029E04493B8D2FE7893391C2B3CEEFEC1603C585AAD6203F2D14E07BFEAD") (:digest-bit-test 32 #x08 31 #h"5AC78D953211AA822C3AE6E9B0058E42394DD32E5992F29F9C12DA3681985130") (:digest-bit-test 32 #x04 31 #h"D647EB2598D33D7216256356596D29CECD31C1BA7A7FF25CCB5BE4A453410B9D") (:digest-bit-test 32 #x02 31 #h"1205F4789155711E2542DBA1A64D226626FE3EB43BAA854752D0B59077E010FC") (:digest-bit-test 32 #x01 31 #h"CB592844121D926F1CA3AD4E1D6FB9D8E260ED6E3216361F7732E975A0E8BBF6") (:digest-bit-test 33 #x80 30 #h"DA8358584A629196115D53EB6EE0BD6F821F5E7D8297753C5EA59767B5888EB4") (:digest-bit-test 33 #x40 30 #h"E16FD8C842F53FCF9167ED4153CD33194F93BC52416883CBC70107F5A5B542F5") (:digest-bit-test 33 #x20 30 #h"3C4FE9CBE1ECF2651A542854BFE633C83322A884B715322F0046F6A1FA4A6364") (:digest-bit-test 33 #x10 30 #h"9697FABFB4CFAD42B06912B49C656B820455F42B0E1A99D050857A565BB0719E") (:digest-bit-test 33 #x08 30 #h"7C1726D8B205E09F946FC3E7A314D07C179F99F6825846635BC166C47E00AF1E") (:digest-bit-test 33 #x04 30 #h"33333D249B819A6B651045B45B87793EEBFCC3EAD2C2CBD8559F8F636942D390") (:digest-bit-test 33 #x02 30 #h"0D75EF205E037BEDC1D5462A17F2DCDBB408250A2273B9A8987963D76067CAD9") (:digest-bit-test 33 #x01 30 #h"92A91D56CB5A0D8329C902C2A61D455DC11C2ACE741443069985D8A8761F0892") (:digest-bit-test 34 #x80 29 #h"9AF21D56439B23C2C133142C9D861AF93E56A9F5066050E84D015DB3BC9DEFBA") (:digest-bit-test 34 #x40 29 #h"D8EC24EC81F44E472050EC178E2B029F8E71D965F4B30D4B6BC0CE1CFBAAFA43") (:digest-bit-test 34 #x20 29 #h"C601F7F144E0E91FE0D81004C2CB6D12003A4D28357ED171AE2695C10EAF4367") (:digest-bit-test 34 #x10 29 #h"1E474F64386EB2728D754ED431DEEE8FC28634B60369187CC67069C9BAB50856") (:digest-bit-test 34 #x08 29 #h"CD26546D8F54998BDF990406D2DC61541D271278847D6CF7C0129B27E18821F7") (:digest-bit-test 34 #x04 29 #h"589F68DCFA53A2400B5BACE56DE6B945B657D42799CE5DE97535B956A9A7E434") (:digest-bit-test 34 #x02 29 #h"7DED0DE807F13086380A18D8AFC6F91D8B27C106A3192D1A63E5EE95999D11A5") (:digest-bit-test 34 #x01 29 #h"494CF88F702C3B6E60755D34D21B752F1B2DBDBAACDDCC39981EEBAE1A8445F9") (:digest-bit-test 35 #x80 28 #h"6A98BDF7ADDEF8AEB8C318585BFC9D0DBE218ECF02B6A58FD02F05F8B09FB865") (:digest-bit-test 35 #x40 28 #h"3CBF295A61FCF0DBE7DF7D672662CBDE5EAD4D1797BDD145075D0075BF8E8C27") (:digest-bit-test 35 #x20 28 #h"1440225FDE337167D85AE4B4799CCF5D3D2DCF9F5200F5368491B76A987A424D") (:digest-bit-test 35 #x10 28 #h"97FEBBCF075BA9235E9DFB80FED98C4D208FDF1E99F6DA6427343A549FA281D0") (:digest-bit-test 35 #x08 28 #h"35F9358538FC9370A59EA87EC7C267F574E67006C099828AC510C19C2ED39B31") (:digest-bit-test 35 #x04 28 #h"81F6394551E870E956AB91C8FD6D50A84CDC53809925DC78CEE6362959B7F6E8") (:digest-bit-test 35 #x02 28 #h"7CC54262D86AFF027845EE4758DAFA40B7809FBF46960041F6AB252403A9B603") (:digest-bit-test 35 #x01 28 #h"8860B1848E82659A8F8DD96561A670004B51648B517AADC8FCC4A6823C802799") (:digest-bit-test 36 #x80 27 #h"C648B6AF1B5F45B8A3A63EE029DC9F631B0A0A196C8F6C8F99E87310FBC271A3") (:digest-bit-test 36 #x40 27 #h"28F186B361C89BE6A1A5365667D49291B4F393D0900864BA55B94A3741A48C8C") (:digest-bit-test 36 #x20 27 #h"F6435CE4D01839ECB6673D8F2E8A194A8A42CD9E925982971104ABFA00C668CB") (:digest-bit-test 36 #x10 27 #h"1F53BCB0275B1C5743DD0DF57F6ADC628F154823331CF7305889ACB2EFCC1964") (:digest-bit-test 36 #x08 27 #h"AA90D0333AE3D6B268BB37339E2B3C9EB488819494136F9BB34B55CD5A499418") (:digest-bit-test 36 #x04 27 #h"A8A9CD859CD274995D1D63A8A074486D7EF03D1F2D46C90512E10D7BCE19876B") (:digest-bit-test 36 #x02 27 #h"4F66715E94649152F5A5FE48766BAAED641E04D18099F95078207DCB9BBB247E") (:digest-bit-test 36 #x01 27 #h"0FA87652EFD33C81D12AFCD1ECEC26570B5095EA17830B3A86287151D952BA1F") (:digest-bit-test 37 #x80 26 #h"B78517D559679DD4EDE0706F7FF6DD111E73A764809D6642BADBE2DBE0879F80") (:digest-bit-test 37 #x40 26 #h"A1DB1738D7FE28AF0639A2D08D788DBA39BAFFAD8A6F99EEA4CDB395C5D97BF0") (:digest-bit-test 37 #x20 26 #h"4CF0061C7F2059A2225AFEB31397D54FA6038CAEB09C484F998A29CA6B9D6F71") (:digest-bit-test 37 #x10 26 #h"50C15DE2269A9DE0BE4B4CC549D71D28C8E62ED2889B2997C959EB7320ADB02D") (:digest-bit-test 37 #x08 26 #h"94494316271E05F1E9BD2663E53D5F424725FCBCF661D8C280C10BA948C44E57") (:digest-bit-test 37 #x04 26 #h"D02CEF06B23C7C5E2D6696488CE3C389C8D671873FE25684553B6629F0F16072") (:digest-bit-test 37 #x02 26 #h"8010AFB151BA35E1F5C0B5EA1F0A202C017332B225F47A5872E87B1E7106AFD9") (:digest-bit-test 37 #x01 26 #h"7C7E1E7D7A3C48160E90DF669E05CD638046097ECF515646EC726180476F6FDD") (:digest-bit-test 38 #x80 25 #h"F3A7AAC9F3257C72EB287BC300F31388CBC670DD756E6121F4FAA148E5E3C283") (:digest-bit-test 38 #x40 25 #h"08FDAAE9628BB9AFFC502F3A3752548338C9CB644061CDF32434FB5F129BF824") (:digest-bit-test 38 #x20 25 #h"65913DA1B10BED73812FCF578DCBAF3E7B269F42A3E17781906C09CFD3392984") (:digest-bit-test 38 #x10 25 #h"A465333C4427242A63D08044D70294AD3EDA1A9C257940F2138844C54225CA4E") (:digest-bit-test 38 #x08 25 #h"A603EC80BD955208466738CAEDBB4025506C22616D4F2CD44F575073A1B0D821") (:digest-bit-test 38 #x04 25 #h"B5BBE2C5E1A5672D4C6209FE64DD62D914711C63F383FFBFAE72DC028E57B7C1") (:digest-bit-test 38 #x02 25 #h"90FB5D3B763D607DBD27F1C9A1031C77904FFE48F7A8262C1334C5A731BF567C") (:digest-bit-test 38 #x01 25 #h"D4B41E7CE54C93E9C672635478360026E43160A1CEB97C6917DEB630A541C307") (:digest-bit-test 39 #x80 24 #h"C1E2D0385C7067249C5B9C41ECF0426A599F362CA10190FC7223A0B144F493C6") (:digest-bit-test 39 #x40 24 #h"0B45FA27060C1213323C6654D9663EF4D5402D3B99403415C15D9B8D5D0567F9") (:digest-bit-test 39 #x20 24 #h"4C0DB82FF0359478B5C97C871B14E947F62D548F16B7AF8B9EEE76A27C1B06D6") (:digest-bit-test 39 #x10 24 #h"3D9A7039B8EB82E9A264C318F3CA7C8DC7DEFF95E90BE79C40323B9472711AC8") (:digest-bit-test 39 #x08 24 #h"B73D29485284C78F56EAF2E6F72FA354556DBF473B2AB25B1A7B842C2B662692") (:digest-bit-test 39 #x04 24 #h"4F9E4F76899721A86406E6B4574EB59613751CABBEE8E2928B2FA9D3341B3981") (:digest-bit-test 39 #x02 24 #h"5994BC49A92091DCEAF14F434F7E7F66F9DBF77BDB85615E9A6D93D6858B92C5") (:digest-bit-test 39 #x01 24 #h"D7272D936F77A9BF69EA39529E9A44C2C9FF052C3E495FB085B9E4AB4B917056") (:digest-bit-test 40 #x80 23 #h"812CFCA1E2D5C0D13E2C48B589FC64401F6B85F00F03E005D486AEEDE95079AE") (:digest-bit-test 40 #x40 23 #h"126A3867926080B92F0EC0F62A8AF4F8247C5DEC4B46E152C14486F66BEBF7B0") (:digest-bit-test 40 #x20 23 #h"24ABE02E6D5255A33125BF5FDCFF2632D671C7F009A0B85B3DAB499AF735EFEE") (:digest-bit-test 40 #x10 23 #h"E8DDF8BCE2F4FAB674BA59532E88E53396ADFAE195420771FE83BD97D09EEBA6") (:digest-bit-test 40 #x08 23 #h"722278F46850DE762138E2F2C56BF60C07827F46E0AF48C7D6E7925327799B9F") (:digest-bit-test 40 #x04 23 #h"28A226B83CB5316DE65E0E4CF318A836BA0620D7B35F6AB58D18EA44FF2C52A2") (:digest-bit-test 40 #x02 23 #h"BA4426A74EAFA3EE62AC4F45923548B9C8D4C6CE956C8FBE264EEE1FA3442C34") (:digest-bit-test 40 #x01 23 #h"1919C892CF10178DDE4A38102271B31BD490EC4B40F35EDB9FD80E8E1671B0F1") (:digest-bit-test 41 #x80 22 #h"5254CFDFD49C0F6B02B0B55D92079A3609D7430BA70DC0DD816B3784D0427910") (:digest-bit-test 41 #x40 22 #h"A9236785D72393A24EF215A461FF938B2D9F3B8CB27E1A6FF63805D5B138AA24") (:digest-bit-test 41 #x20 22 #h"D78D7D639249C7CD98FD3AD882C0F98C77976824DC4D8A590D80A26148AEE507") (:digest-bit-test 41 #x10 22 #h"5B632F5763688227B5DF59059F3D891F00C63D23E5A895E929DE75D8AA83D05D") (:digest-bit-test 41 #x08 22 #h"ED269E2FF14E828DD77F018700B0A460C15CC2D4AFBF001100BE8F38D8ADAFF3") (:digest-bit-test 41 #x04 22 #h"62134F47786E53679ABEBB061CF4BE743A3AAD9108B723B8ED4BEF93CCE7D253") (:digest-bit-test 41 #x02 22 #h"C31609F406FEB281E563F0D3BF817875D11F818CB1E38D02603DB390BF66E9BE") (:digest-bit-test 41 #x01 22 #h"0C242E5FD9FA0F2F5FA576955E056419F9AD77E3EB3E03C5F151256C9B4146AB") (:digest-bit-test 42 #x80 21 #h"213DA75407E6473CFE0EB8656ED03D6DCA533ACA4FF6D3F2F97127A0ED321C73") (:digest-bit-test 42 #x40 21 #h"AD111379642FFEE68C7E03C4B4BD71D73D84DAC086C961CD22BF115FF7A0E4E8") (:digest-bit-test 42 #x20 21 #h"06DB78D12149C22D8014A669F49192B07D011A225B874BEE0125876F1DEC3374") (:digest-bit-test 42 #x10 21 #h"79B5CCAC28B1D1BBD038C6EE73057471657776F147727FB3669CB4E769C683B7") (:digest-bit-test 42 #x08 21 #h"8AC5DA288A81F71B7531F8824DCC409AFFCB7E88215EAA398D9B4EE0A2A3FAFE") (:digest-bit-test 42 #x04 21 #h"2F2D4540708C98DA1CA6F1A05DC23FE66F5C3AECDF7265F76816E2337C37D3F2") (:digest-bit-test 42 #x02 21 #h"EC035986496596EB220AE5B82F1A2AD5BB9139F80D12259D3E19D5623AAF8487") (:digest-bit-test 42 #x01 21 #h"67AF511E83F23FFAE30853CEF535AEB5CFBF8EDFC0F4C7E07EA32A921DAF1269") (:digest-bit-test 43 #x80 20 #h"7C396CBFBD27929ED330F5ACDDF20DAD26EB6DF9D56A7066CEFFC790682B0DC5") (:digest-bit-test 43 #x40 20 #h"A27224D6E741AA47A7CCED9C4586658DAF47728120D00ED04EBD719B1A5B1E71") (:digest-bit-test 43 #x20 20 #h"784B9E6816D4558A109828B534CD41C3B464B3C3265C93D79E45F1E486780079") (:digest-bit-test 43 #x10 20 #h"D77673ADFAD62C3DCB3C38A2C2EB12B7FBB69FBC721B7E1F16FCFE38BA687912") (:digest-bit-test 43 #x08 20 #h"A48E2627C92ED81CCAE51F9DCBA5B8BB7A318A2CD41A62887BF2630AB439B2D7") (:digest-bit-test 43 #x04 20 #h"475B05FC929E6726C09ED9CD9B445C4DC22BFAA7D79606F72F82133D9F527215") (:digest-bit-test 43 #x02 20 #h"4FFC835D8AACF34C1AE717151522EAFC519E31F413A969A4D58492B73E706AC8") (:digest-bit-test 43 #x01 20 #h"4DD7A0B31BC12558B65CF95432F8FC74A857DB1B0B388E4A86147E5FE0708FFF") (:digest-bit-test 44 #x80 19 #h"A911B98D9D7C6E46639356CCAA0823B6C606F2809E6B2CAEFA55297EFAF78678") (:digest-bit-test 44 #x40 19 #h"5E6D6133DF09E9367F607F9469292FF688250261E8D7BED7DB369AC7BF8E5664") (:digest-bit-test 44 #x20 19 #h"FB10D55C127E43A07528FBDB9C0F0ED0A1AA6820AEDC869C8859D2AECF366220") (:digest-bit-test 44 #x10 19 #h"DC67039743BC2554E64327EB0CCC7B3FA77E7C9896E4423D54C851699E3CB121") (:digest-bit-test 44 #x08 19 #h"1F1644FCD09BB5E4BD2B818BAF01F4D4A38AD41524EC3A5729FFDD44929AD1E9") (:digest-bit-test 44 #x04 19 #h"7D42FEE879C24591600C9EA01795C34C7AFDEABD64733F1A5A0A093286370519") (:digest-bit-test 44 #x02 19 #h"943801FBC4B5C4BD79E8D39E4097AF6F258A6BB23657E0EBFFCD07BF2C434CDD") (:digest-bit-test 44 #x01 19 #h"4E05F0C58901316E1A11CED54910AA357C0F12109F23E6D1102AA1AC249EE34A") (:digest-bit-test 45 #x80 18 #h"A4D7A763848B6FEBDD5CC4D0EEC1E969DA0C140F2EB33AE88019F4A09D6DD1FB") (:digest-bit-test 45 #x40 18 #h"F6148643902CC9E2AECA25F4885256E46AD598FFBF8E0D0E8FA2DC4D5C8FE5BF") (:digest-bit-test 45 #x20 18 #h"CFEE5E3D7955BB67BD3E80F33FB41743020EB0BD8A86F8F47662F86A0A820ED2") (:digest-bit-test 45 #x10 18 #h"1F1FCDD5C3D1E625FEB61F7EBCEDE5A93DB10D1560149025830E35F0B21FCF96") (:digest-bit-test 45 #x08 18 #h"0EB66674FB59D6C623D8604215773FF78F888A9BF456A060D24E70F748B20FD9") (:digest-bit-test 45 #x04 18 #h"A8FEEC51995C47671873A600D6ECEBC756583FA2AA08FB434D0183063B9620DB") (:digest-bit-test 45 #x02 18 #h"ED45C4E0EF73A84A36C1B0CDCC31B739F98B3BA5ECF1306AB1C59FEFD6B02CF5") (:digest-bit-test 45 #x01 18 #h"C17A382B566D1665B65F6305F34AFFB956D1C076E19694301C97F561DF9F3DEA") (:digest-bit-test 46 #x80 17 #h"1D377A06F742A950E4063095ADD6635D4FF1177A448FE9697348A8A526B858AE") (:digest-bit-test 46 #x40 17 #h"71DC2BF5E3FAEA688971561A2E55B4C33CD7F63C053136BF85BBB87252622A33") (:digest-bit-test 46 #x20 17 #h"4786FF7DE50873721127AB8BFA27D806CE281F6C3C7751B2BDF4EDFD4890731D") (:digest-bit-test 46 #x10 17 #h"F28E22B8ECCBDD26D017E78ACAE4C6965793F13ADB7B27F88DD0310C1206A0F0") (:digest-bit-test 46 #x08 17 #h"BCAC98BA4FEDFC238B064FCF828EEBACE51492F58FD3E4E199B85EDE0D001491") (:digest-bit-test 46 #x04 17 #h"229192E93F7FD0D8A2521F86DC3157D2620ED8B97F0318330B884E998BEE064D") (:digest-bit-test 46 #x02 17 #h"C6ABF4C99CF38E7ACD75C212014B7EFEE61649609B7E513263EF110B9248B177") (:digest-bit-test 46 #x01 17 #h"2FFAE8AFB20273084E0539E70735D2014D1F2DB20249A713548566761308DDA0") (:digest-bit-test 47 #x80 16 #h"AB7DF8EA59C3590468346BC31A91ACF118B36C4A40186A3D7573A39B18C63B18") (:digest-bit-test 47 #x40 16 #h"3238A57E63BECA63A8A3B7C0CE1E5B44B6360D9FD4515975B7A5E4F311A9D895") (:digest-bit-test 47 #x20 16 #h"D75AD243CED8727D6477CE620589DD14916C8362E452874F6D9AF0E04071B614") (:digest-bit-test 47 #x10 16 #h"92A8041693260B1215BDD88CE79553B59CB8154859FA6A180A560056DA3F657E") (:digest-bit-test 47 #x08 16 #h"E4513878BE62ED738445AE3C4EF5D425F2CD623333553606F32F4AE634FE35E6") (:digest-bit-test 47 #x04 16 #h"D55567F34047852F30E1AC975F46947A4FB29D4FC24047CF425FC6752335DD88") (:digest-bit-test 47 #x02 16 #h"F278DBABBA0EEB584EF3F89C5607FA7FE10EC8C7A6E2CFE600D14E456ACD6096") (:digest-bit-test 47 #x01 16 #h"DE7630EFB0AEC1EFD89DDDD9E64A7A34FF13E4B800DEEB0E3C484E87BCD603DB") (:digest-bit-test 48 #x80 15 #h"22BB5096E785BAF84A5BE874F3D2D8B145391EED10F97BCF072B17D86FE9F826") (:digest-bit-test 48 #x40 15 #h"E15A3246FD61CDE5D29F964B7814AB43CFD26715C8D5BDDE9F0812522402C6B4") (:digest-bit-test 48 #x20 15 #h"118AA5245FE682EE6BF41D7F315312AF813E52FEFBBA752672688DC079298826") (:digest-bit-test 48 #x10 15 #h"FA349B2AA4A31E8B110EE18FD7B0A09816B86FD60ED1CD51FD201195D3DB2082") (:digest-bit-test 48 #x08 15 #h"E7DA8100F1ECFF9CB0C6E5D8859D341A621B246AD4AB6E73A6F772DAEE6105B9") (:digest-bit-test 48 #x04 15 #h"00CB8E080067507DE84E2155F89AAED4D65811DEA96E1B5C3CC3B220825BBA67") (:digest-bit-test 48 #x02 15 #h"C7369912A28787EAA421384E7526E59514244343797B53382EC3666AA8890D44") (:digest-bit-test 48 #x01 15 #h"A64EE51FEE0176641631EFAFDA9B15E216AF520E34864D3D56DE61484B1B2622") (:digest-bit-test 49 #x80 14 #h"92F95054F54A680DB4F9BF202D1594F3D13E8A765D8E325D1CF617F26F52E7F3") (:digest-bit-test 49 #x40 14 #h"8FFFA25B6CFB95912CEA1A1B3A279FC1BA2E6EF3CBE306931C724317CFE857C0") (:digest-bit-test 49 #x20 14 #h"9846ECD9BFFEA6595D453973869FE2DBAABF781D36A469C5D406DD0FE4234627") (:digest-bit-test 49 #x10 14 #h"4E6410AAC382596D41DB9EA85575D5BEF3627E9FE72FCD4116FCCCFCF3F960B4") (:digest-bit-test 49 #x08 14 #h"4BDF4C2B9E79E328A356E02DCACF42C8F76FEB61952B00F7610F065F01A7F902") (:digest-bit-test 49 #x04 14 #h"046A9807CF2825F157705E8344F9537633D79231DDBEE7F6026679D852F29A9F") (:digest-bit-test 49 #x02 14 #h"1620F6DA7BF96CDF28479D1A068331996A080AC81A957BB9BC129A61658E3A53") (:digest-bit-test 49 #x01 14 #h"DE7349763400FD3875C31C6B4821ED5A7C8EA4E3F9E2849B9BBE9ABD30E8DEDD") (:digest-bit-test 50 #x80 13 #h"24E2FF048DEDF95BE439D47BDAA89130F102378404DC2D2FDD02ECE754CF3B52") (:digest-bit-test 50 #x40 13 #h"47EAE793E6E32E05F8828F48DC539EB223C70630C9F8E52144DE3F951CB0A22C") (:digest-bit-test 50 #x20 13 #h"A5387811B871DB52E76CB69D5EFF524CD42BEDDC82711729D93F4594D7C5C4A0") (:digest-bit-test 50 #x10 13 #h"3C98724C667A7AC927F286F5FFE85DC351B7FD932260D6D9CA30DB690A86CD2E") (:digest-bit-test 50 #x08 13 #h"31E44F403C68BB77EA34FD30FB91083024CDD96CD468473D729370C0994EADEF") (:digest-bit-test 50 #x04 13 #h"3C9A94B82CC7275C4608D689640EFBE5EBCB1B15238B85CFF27503C0B9CD39F3") (:digest-bit-test 50 #x02 13 #h"9FAE95E5E0609E9B4C3B925A6BEDDE8C87A9881C59550E7223A85F1E95408033") (:digest-bit-test 50 #x01 13 #h"CDA993D45935655695061A1CC07D54FC65286457D08BFAF85D0CA926D7625C7E") (:digest-bit-test 51 #x80 12 #h"5130D53891A418323E485083E56D4A7B378EF832DB3642F762BC07BB34F836C0") (:digest-bit-test 51 #x40 12 #h"537F6FD91A596BE7D2EC3C702358382986EA0B05335AA53D0CCC017571A6A30F") (:digest-bit-test 51 #x20 12 #h"FA06E97F589D953982462FB433DB100B4040A95FCE8AA76F95DDED432EFF85D6") (:digest-bit-test 51 #x10 12 #h"2EC1D1A22B088C0DEEDA7195124509ADCE973FEBFA6C71A2F0B7232CFAA9AC05") (:digest-bit-test 51 #x08 12 #h"439E9948212A4445CA75DB98E16A2AEB0A172B725B827F039426996DB514EFA9") (:digest-bit-test 51 #x04 12 #h"54AF89824EBB943E84D59FBBF2A85B027201FE70FDE45894B1290A933705EB83") (:digest-bit-test 51 #x02 12 #h"2407BEF2180CFDEF90E12343A987E51DEBDF2C3CD0C32EB2808CCDC4B9E20F42") (:digest-bit-test 51 #x01 12 #h"6CA12E85BE251EEEAECBF45547E44B19132E011441B79853166D0CFA7CF7F7E0") (:digest-bit-test 52 #x80 11 #h"508CD52057F05CE892BD3A15802ED0FA5D99A4253E573B8D617A531DF991EB5F") (:digest-bit-test 52 #x40 11 #h"FD23E6436C2398DC876CD6F46B613B0C7F0D5F7CA0E6ACF30655EAF08E9060FB") (:digest-bit-test 52 #x20 11 #h"C207FEE5574A63EC63194FF22584D7E23106065832FBCD59D449C8A20F268C55") (:digest-bit-test 52 #x10 11 #h"27ECA978EB2EF8D12D6ACBD41DFAD9D4B8E1E7F853D0649D957C178D0598E15D") (:digest-bit-test 52 #x08 11 #h"328456E7CB682226F01A3B9F3D41DB7B8CF8676EB90F9864C2047EA7FB2832E7") (:digest-bit-test 52 #x04 11 #h"B1CCDAEF68845A4729D9EF7A227AF267102C99BE23F92DA1CDA8FBCF339B2DCD") (:digest-bit-test 52 #x02 11 #h"18BFEE62ACD1D325A51FF4FC3AE60AC8777B90A7ABA99B1AE2DA250E08E949CD") (:digest-bit-test 52 #x01 11 #h"88E443D409725A1CF6EFA8C464F32B1EEEB0B947C6F49B1DE41D60EBAA543BF0") (:digest-bit-test 53 #x80 10 #h"219FFE9FD558083698B35F6720D0B23B7A0B115ABC4339DEF7EECDB1F7D97A7F") (:digest-bit-test 53 #x40 10 #h"FAA5C13273BD9DAF3CF6BBAD62D86BE9B84705AF6BA677891E6049980FAA08CE") (:digest-bit-test 53 #x20 10 #h"D387434F43051B9423F308A48AB676BC5290BC5FA95E17C3010155139FD750C6") (:digest-bit-test 53 #x10 10 #h"E0B6B8F5BC740A55386609AF476150593646820D95C71B2706BF054A9B7D3C63") (:digest-bit-test 53 #x08 10 #h"0422011DEED253417DA288C5095FDE62C96948F62E07F13B5857A358252F4BAD") (:digest-bit-test 53 #x04 10 #h"232B4C03C1635E6408BA417DC91948D82409B207F26E25A0A519600EDC7E2ADB") (:digest-bit-test 53 #x02 10 #h"C65E004EB04929F47B1E2FA7103D2F1E230C7162192054386B02DD77182E57C6") (:digest-bit-test 53 #x01 10 #h"F597DFD2EFA07D8EF7588E9DD504CEF4F898EFAD18A85619C4C04163E9D1EB0D") (:digest-bit-test 54 #x80 9 #h"D7C0E8260510ECA4A1ECBFF9DC7A1AF7ECAF59808A1210C3B3E8F2584026FDA2") (:digest-bit-test 54 #x40 9 #h"70F6D9037AAEDEF997E9B66A0490F2ABC39B8BEE5A3144E6072303CA9BB187BD") (:digest-bit-test 54 #x20 9 #h"C4A05B60568B567234EA6F20E693C6209BD7C9FBB306A39F524622B8D7F395FE") (:digest-bit-test 54 #x10 9 #h"D8EF13F300E5FA1E0E22767AE7173B0153EE135EC079E04BE4809B2432FAACCE") (:digest-bit-test 54 #x08 9 #h"55E180F827E5F06C676E484F5F2F63DFB93435878A76323C4D0C34FD88358E3F") (:digest-bit-test 54 #x04 9 #h"E40DB410675118A5EBDC75A1B14CF8F0C797128C41C2166842653A4FDC29915A") (:digest-bit-test 54 #x02 9 #h"92DD5EC0B5EE9E18FC95EA4782DC915D14DCD14FC642332CEB5762745DD8A51E") (:digest-bit-test 54 #x01 9 #h"14E1C7A1DA58A7AEE509426BA26CE7C09389E2ED9823AF5B038FD1C30E8F5CDB") (:digest-bit-test 55 #x80 8 #h"342ABA7EE53C69E50361136EE1AEF59475C96B8ED7FAEB28A17248E5714C0C5A") (:digest-bit-test 55 #x40 8 #h"BBDF07F2860D530A4B76B5AC74BCCF468382530863D6948981561F7DABA4802A") (:digest-bit-test 55 #x20 8 #h"83E7562819609C2462DDEF13D4E8F74D8F42D4B1024E17B98309FF042A65681D") (:digest-bit-test 55 #x10 8 #h"B68D6416FAEBE43D60F0FAB60783EDDF0A31FE5546E007146C38E17580C998D6") (:digest-bit-test 55 #x08 8 #h"E7345EF688EDF71B70EAC26A766A8446CD580E38B755F9C1E041505C8EEE77A9") (:digest-bit-test 55 #x04 8 #h"5C5AEF56EED653B6EE2E0D6C58A8E2A231FFD07AA6DA82EFDE73B2394F299105") (:digest-bit-test 55 #x02 8 #h"731764E8F75664B3F84347FF7EB6CFDA709CE0F265FAFB81A3BA23F9437F737C") (:digest-bit-test 55 #x01 8 #h"ECDD9540F7B23A82A2CD80445660AAD39433383BF04EA8E0BDB50B4BFCABABB5") (:digest-bit-test 56 #x80 7 #h"AFF9039F2556751264116FB612088FB3E66640FAC1F0BC71E22BCC4F64626AC5") (:digest-bit-test 56 #x40 7 #h"B1858BA85A0B5DDE048EB5E258A87682BED3C112A9C6347D288F3288845DD117") (:digest-bit-test 56 #x20 7 #h"672D871CFFAD4A59EB5069951CEB3292E19A1EC9C5D566B0A5B98C92180C4E0A") (:digest-bit-test 56 #x10 7 #h"DFBFFE8649ACE8126F08EFBB7F9FCC09584EC2A2A0E75D58327F2959492F7A09") (:digest-bit-test 56 #x08 7 #h"F48907D7DA1A4E6F47237E9EFB9BD08E4DE0CE0A73A1377ACB6069E2770FE00E") (:digest-bit-test 56 #x04 7 #h"455E6801F3BE98F5277EBD80999063C5BC804401295C8241565FB328A39536D8") (:digest-bit-test 56 #x02 7 #h"BB50CD7276C60819B494898F3B63EA5EE44EAACD43B007A98991339A93727DB1") (:digest-bit-test 56 #x01 7 #h"4BEBA5E9BB868F0BDE0B9F79D3C64F482D8FD5C320DC08565768EC0480A25593") (:digest-bit-test 57 #x80 6 #h"1FB97BD48FABDDD8E31719FF7C09DDB2353A97327A719A76B223FF33FBBC1A70") (:digest-bit-test 57 #x40 6 #h"28E5FB6347D650C09F235C9DCEE735645CD41D3B3CDD81CE7E20DB1AF66C7904") (:digest-bit-test 57 #x20 6 #h"C524EE312054C3A68B870EC7BB9407BDDA56117DA591B4E4D97E1F53D525AF6F") (:digest-bit-test 57 #x10 6 #h"6805383B4845FFA3E610AD3C01D37A2FFEE55D36C134D65225F5897DB73B902E") (:digest-bit-test 57 #x08 6 #h"333F64A1FA700F2F471A991A8314FF0E8DE994CAFCDEA0A85A42B9180D15018E") (:digest-bit-test 57 #x04 6 #h"5E432F656AF89DF2E0EB02329E5470F8BCDEBFD21B629E7816CAA2CDD396CD67") (:digest-bit-test 57 #x02 6 #h"3FE7057CF28379E226F63C28DCF99F36BB219E2E94CB2246ECF193F6B12D676A") (:digest-bit-test 57 #x01 6 #h"A9094A4844DCE0EC574C6C12361375E9F2CE70FE6316D035EFDB36B3A84B8FA6") (:digest-bit-test 58 #x80 5 #h"2C8D11CBEEFA2CB2C51DF0D952A71933634F029BA08F42F503260122B6B3A942") (:digest-bit-test 58 #x40 5 #h"3E3E3873C86CF3B12459F31ABA192E825D47716EAC4063F599FC9CDDB0D5757C") (:digest-bit-test 58 #x20 5 #h"88F2145A165655CC7A41B2FF1E736DDA4A790ED77C1948642B1A6E1053F47697") (:digest-bit-test 58 #x10 5 #h"CCCC292262D66B7B90B122ECADFFA066C9101BD19AF6E361330A831F2C3C723A") (:digest-bit-test 58 #x08 5 #h"1895A190C644D7EC155568BBA539725711ADB9F9A17941CAC6BDC78C6440FA89") (:digest-bit-test 58 #x04 5 #h"293C690603FC720BBF011E5FEBFA602974585C41FCA59B009A090A348037795A") (:digest-bit-test 58 #x02 5 #h"B8A8839CDAC5B33F4A02FFD8F39F6EBA95BDC61B349F7E096980145F969D5DFD") (:digest-bit-test 58 #x01 5 #h"FCF0D9A814A86D06F64BBDA9913851C94FF6C20270256D9EEAA2C0EEF99C3BFC") (:digest-bit-test 59 #x80 4 #h"1ECC6DDEDFC81718E0646A86E2191E614A2CC7A54E90C38B893C61DE03016C92") (:digest-bit-test 59 #x40 4 #h"C9D9359E24690864B889B99B42B81DD598F4B849DBE8FF4E63FC3BF15C9F66FE") (:digest-bit-test 59 #x20 4 #h"9184476FEB6AE7D6B199D5C8EA8CE9C8B912CB4F24E15BF881F599335C9D306E") (:digest-bit-test 59 #x10 4 #h"E5AD5363B0FC4C49A93D8B3CFC90DE19D501645108A99BC90C6EA577C5E3BA3F") (:digest-bit-test 59 #x08 4 #h"6B605BF3FBB081A3AA39019EA4A8F72558E3E747B68080AC7ABB70DEB48EAD49") (:digest-bit-test 59 #x04 4 #h"1C107AE5077037B98E56F87E51461DFA8DB7808BC32FA870F85146616DD98E2F") (:digest-bit-test 59 #x02 4 #h"3FDD8713A8C9501E3CFDEB84F9F78F2E2030A7D0A34E98F22BC6F6A1E53934DB") (:digest-bit-test 59 #x01 4 #h"A054CAF60CDB866EB03A3AA45FADFE096E2E0A0C6FAC782258FF9EFE9DFBF359") (:digest-bit-test 60 #x80 3 #h"58D962AFA1A71EBEA20D8B5521569B9D3DDE771D269AF172AC2CC08D2FC3D9F5") (:digest-bit-test 60 #x40 3 #h"82C146EDD011B9E9C5B1E2EAFB88EF586249E51FF0F58DBAEAAC7C660057B352") (:digest-bit-test 60 #x20 3 #h"30C0A2843400EA5AC96803D99ED578959440E3385877A325D5603FBE9C12EAA5") (:digest-bit-test 60 #x10 3 #h"EE7B7F22E7CFFA37AB1E12C8493A95A6F287BED0430C4C1C0910C59989BC708B") (:digest-bit-test 60 #x08 3 #h"A085B98CEF63C444EB74B4560C0F9DBB5645CF1E31451A227FDF8E72D25EEF16") (:digest-bit-test 60 #x04 3 #h"41ED994FD3222CFD5648FE9068875836C10F04B34DA1B8D2053EB4EC7E5B38AE") (:digest-bit-test 60 #x02 3 #h"F366F82B0177478C240783195F72602E8B14B8F4F683508EF88B05682D8ED539") (:digest-bit-test 60 #x01 3 #h"957329CB69DD4616DA9B2483FC83AFEA169C0B95939A930E68E913B98DE4B392") (:digest-bit-test 61 #x80 2 #h"D6D3A64A06ABAEF3A42FD53EDCABF7B48C5B32C6D71BCEC9B2655583E03E2C98") (:digest-bit-test 61 #x40 2 #h"B90E5EAEBCE454B9B709B272BE8678ED28209B984092B32CE6CAF37F2496B19D") (:digest-bit-test 61 #x20 2 #h"B75CF8AC5F8ACBC504DCA1308B12424E149CABF654765B2C0FF1658D2F8F0810") (:digest-bit-test 61 #x10 2 #h"3E9397294BAF56317BA92FEC1ECA9B30BF17FA7FB63E13A47DAEB4C1AA6977D7") (:digest-bit-test 61 #x08 2 #h"AA968B00E653CC673E3632610627D2BD84D2334E6ACB10DC45C1CDAAA110D7A8") (:digest-bit-test 61 #x04 2 #h"6E15538FDE8C96C17311F4086739E5C252B9A2ED0DC9727BEAC4D6AD2DFFD81A") (:digest-bit-test 61 #x02 2 #h"8EE86705EA4EF1129FFD437017AAE253A4A5954CD96840C03BDC52D1DB58880A") (:digest-bit-test 61 #x01 2 #h"E3D77831072D9A49EBA90285BD68C35139A51DF1F63842DD0F890EC909DEDBF2") (:digest-bit-test 62 #x80 1 #h"C288D3BF4EC0D17C05697A8677D9D796F7173987D2F982C5F72D0E602A2C1C4C") (:digest-bit-test 62 #x40 1 #h"243E5739CC3C847AFD65CB07964C2AE60033905F00C7D0E9317B256C52A327AA") (:digest-bit-test 62 #x20 1 #h"154F8FFA5A8E603549964501A51C9697B8B87BF7F38053893CC1C1F3C4817069") (:digest-bit-test 62 #x10 1 #h"CF9983A26C657C3899A6BEA4E2D4D3786AFCC99E303D40124ACE80478003B9EA") (:digest-bit-test 62 #x08 1 #h"876ABF7FF3A779AA651BE6BB6EB634E4F1A008AD167B1C6EBE416232BE5292CF") (:digest-bit-test 62 #x04 1 #h"4AEAADDD52558BB08EF7DD6C2EFDCF6FE7E2A1AD932508CC7C739E3D87F3AF3E") (:digest-bit-test 62 #x02 1 #h"C448E03A131A247C6907735D0090F118FE56D43E645B9C24ABD2592B5D758DDA") (:digest-bit-test 62 #x01 1 #h"D3817E5A0D06258B73CF6D4952C64485B004B6B0F9ADCF1A6D63E6D8AD968DBA") (:digest-bit-test 63 #x80 0 #h"ABD41900B8BB0389958B0F05B3A97D21D626EF93015E02B66272EF55BAA4FD1B") (:digest-bit-test 63 #x40 0 #h"A86652085375A2978F419118AA9DD3CC3174F469921E5C2A2E2F236F16F99560") (:digest-bit-test 63 #x20 0 #h"4D38C43A7F2AFD6F005B5E73AC44C12F96E4279BFC627DF441B3CD0FB81E041D") (:digest-bit-test 63 #x10 0 #h"9B10B02AAA22E1640B1D8938C669F8EA9CA4B55D1F0A7C484E1AFE46FA0BCBFE") (:digest-bit-test 63 #x08 0 #h"37F4EBBB6F63191FC34003C2EE3CD27476FD40BDC50C642A55F47A578BAA2B12") (:digest-bit-test 63 #x04 0 #h"517B7AF2368FE450DB775DB95CC0745D9FFA7CB26CE7D5922BA01EC50A2C7000") (:digest-bit-test 63 #x02 0 #h"BDC9BD36AC7F258351C81A3155A19EA5837B6EF164074F0189D876A5EC17F920") (:digest-bit-test 63 #x01 0 #h"90F4B39548DF55AD6187A1D20D731ECEE78C545B94AFD16F42EF7592D99CD365") ;;; byte-level tests from NIST's Cryptographic Algorithm Validation Program (http://csrc.nist.gov/groups/STM/cavp/index.html) (:digest-test #h"d3" #h"28969cdfa74a12c82f3bad960b0b000aca2ac329deea5c2328ebc6f2ba9802c1") (:digest-test #h"11af" #h"5ca7133fa735326081558ac312c620eeca9970d1e70a4b95533d956f072d1f98") (:digest-test #h"b4190e" #h"dff2e73091f6c05e528896c4c831b9448653dc2ff043528f6769437bc7b975c2") (:digest-test #h"74ba2521" #h"b16aa56be3880d18cd41e68384cf1ec8c17680c45a02b1575dc1518923ae8b0e") (:digest-test #h"c299209682" #h"f0887fe961c9cd3beab957e8222494abb969b1ce4c6557976df8b0f6d20e9166") (:digest-test #h"e1dc724d5621" #h"eca0a060b489636225b4fa64d267dabbe44273067ac679f20820bddc6b6a90ac") (:digest-test #h"06e076f5a442d5" #h"3fd877e27450e6bbd5d74bb82f9870c64c66e109418baa8e6bbcff355e287926") (:digest-test #h"5738c929c4f4ccb6" #h"963bb88f27f512777aab6c8b1a02c70ec0ad651d428f870036e1917120fb48bf") (:digest-test #h"3334c58075d3f4139e" #h"078da3d77ed43bd3037a433fd0341855023793f9afd08b4b08ea1e5597ceef20") (:digest-test #h"74cb9381d89f5aa73368" #h"73d6fad1caaa75b43b21733561fd3958bdc555194a037c2addec19dc2d7a52bd") (:digest-test #h"76ed24a0f40a41221ebfcf" #h"044cef802901932e46dc46b2545e6c99c0fc323a0ed99b081bda4216857f38ac") (:digest-test #h"9baf69cba317f422fe26a9a0" #h"fe56287cd657e4afc50dba7a3a54c2a6324b886becdcd1fae473b769e551a09b") (:digest-test #h"68511cdb2dbbf3530d7fb61cbc" #h"af53430466715e99a602fc9f5945719b04dd24267e6a98471f7a7869bd3b4313") (:digest-test #h"af397a8b8dd73ab702ce8e53aa9f" #h"d189498a3463b18e846b8ab1b41583b0b7efc789dad8a7fb885bbf8fb5b45c5c") (:digest-test #h"294af4802e5e925eb1c6cc9c724f09" #h"dcbaf335360de853b9cddfdafb90fa75567d0d3d58af8db9d764113aef570125") (:digest-test #h"0a27847cdc98bd6f62220b046edd762b" #h"80c25ec1600587e7f28b18b1b18e3cdc89928e39cab3bc25e4d4a4c139bcedc4") (:digest-test #h"1b503fb9a73b16ada3fcf1042623ae7610" #h"d5c30315f72ed05fe519a1bf75ab5fd0ffec5ac1acb0daf66b6b769598594509") (:digest-test #h"59eb45bbbeb054b0b97334d53580ce03f699" #h"32c38c54189f2357e96bd77eb00c2b9c341ebebacc2945f97804f59a93238288") (:digest-test #h"58e5a3259cb0b6d12c83f723379e35fd298b60" #h"9b5b37816de8fcdf3ec10b745428708df8f391c550ea6746b2cafe019c2b6ace") (:digest-test #h"c1ef39cee58e78f6fcdc12e058b7f902acd1a93b" #h"6dd52b0d8b48cc8146cebd0216fbf5f6ef7eeafc0ff2ff9d1422d6345555a142") (:digest-test #h"9cab7d7dcaec98cb3ac6c64dd5d4470d0b103a810c" #h"44d34809fc60d1fcafa7f37b794d1d3a765dd0d23194ebbe340f013f0c39b613") (:digest-test #h"ea157c02ebaf1b22de221b53f2353936d2359d1e1c97" #h"9df5c16a3f580406f07d96149303d8c408869b32053b726cf3defd241e484957") (:digest-test #h"da999bc1f9c7acff32828a73e672d0a492f6ee895c6867" #h"672b54e43f41ee77584bdf8bf854d97b6252c918f7ea2d26bc4097ea53a88f10") (:digest-test #h"47991301156d1d977c0338efbcad41004133aefbca6bcf7e" #h"feeb4b2b59fec8fdb1e55194a493d8c871757b5723675e93d3ac034b380b7fc9") (:digest-test #h"2e7ea84da4bc4d7cfb463e3f2c8647057afff3fbececa1d200" #h"76e3acbc718836f2df8ad2d0d2d76f0cfa5fea0986be918f10bcee730df441b9") (:digest-test #h"47c770eb4549b6eff6381d62e9beb464cd98d341cc1c09981a7a" #h"6733809c73e53666c735b3bd3daf87ebc77c72756150a616a194108d71231272") (:digest-test #h"ac4c26d8b43b8579d8f61c9807026e83e9b586e1159bd43b851937" #h"0e6e3c143c3a5f7f38505ed6adc9b48c18edf6dedf11635f6e8f9ac73c39fe9e") (:digest-test #h"0777fc1e1ca47304c2e265692838109e26aab9e5c4ae4e8600df4b1f" #h"ffb4fc03e054f8ecbc31470fc023bedcd4a406b9dd56c71da1b660dcc4842c65") (:digest-test #h"1a57251c431d4e6c2e06d65246a296915071a531425ecf255989422a66" #h"c644612cd326b38b1c6813b1daded34448805aef317c35f548dfb4a0d74b8106") (:digest-test #h"9b245fdad9baeb890d9c0d0eff816efb4ca138610bc7d78cb1a801ed3273" #h"c0e29eeeb0d3a7707947e623cdc7d1899adc70dd7861205ea5e5813954fb7957") (:digest-test #h"95a765809caf30ada90ad6d61c2b4b30250df0a7ce23b7753c9187f4319ce2" #h"a4139b74b102cf1e2fce229a6cd84c87501f50afa4c80feacf7d8cf5ed94f042") (:digest-test #h"09fc1accc230a205e4a208e64a8f204291f581a12756392da4b8c0cf5ef02b95" #h"4f44c1c7fbebb6f9601829f3897bfd650c56fa07844be76489076356ac1886a4") (:digest-test #h"0546f7b8682b5b95fd32385faf25854cb3f7b40cc8fa229fbd52b16934aab388a7" #h"b31ad3cd02b10db282b3576c059b746fb24ca6f09fef69402dc90ece7421cbb7") (:digest-test #h"b12db4a1025529b3b7b1e45c6dbc7baa8897a0576e66f64bf3f8236113a6276ee77d" #h"1c38bf6bbfd32292d67d1d651fd9d5b623b6ec1e854406223f51d0df46968712") (:digest-test #h"e68cb6d8c1866c0a71e7313f83dc11a5809cf5cfbeed1a587ce9c2c92e022abc1644bb" #h"c2684c0dbb85c232b6da4fb5147dd0624429ec7e657991edd95eda37a587269e") (:digest-test #h"4e3d8ac36d61d9e51480831155b253b37969fe7ef49db3b39926f3a00b69a36774366000" #h"bf9d5e5b5393053f055b380baed7e792ae85ad37c0ada5fd4519542ccc461cf3") (:digest-test #h"03b264be51e4b941864f9b70b4c958f5355aac294b4b87cb037f11f85f07eb57b3f0b89550" #h"d1f8bd684001ac5a4b67bbf79f87de524d2da99ac014dec3e4187728f4557471") (:digest-test #h"d0fefd96787c65ffa7f910d6d0ada63d64d5c4679960e7f06aeb8c70dfef954f8e39efdb629b" #h"49ba38db85c2796f85ffd57dd5ec337007414528ae33935b102d16a6b91ba6c1") (:digest-test #h"b7c79d7e5f1eeccdfedf0e7bf43e730d447e607d8d1489823d09e11201a0b1258039e7bd4875b1" #h"725e6f8d888ebaf908b7692259ab8839c3248edd22ca115bb13e025808654700") (:digest-test #h"64cd363ecce05fdfda2486d011a3db95b5206a19d3054046819dd0d36783955d7e5bf8ba18bf738a" #h"32caef024f84e97c30b4a7b9d04b678b3d8a6eb2259dff5b7f7c011f090845f8") (:digest-test #h"6ac6c63d618eaf00d91c5e2807e83c093912b8e202f78e139703498a79c6067f54497c6127a23910a6" #h"4bb33e7c6916e08a9b3ed6bcef790aaaee0dcf2e7a01afb056182dea2dad7d63") (:digest-test #h"d26826db9baeaa892691b68900b96163208e806a1da077429e454fa011840951a031327e605ab82ecce2" #h"3ac7ac6bed82fdc8cd15b746f0ee7489158192c238f371c1883c9fe90b3e2831") (:digest-test #h"3f7a059b65d6cb0249204aac10b9f1a4ac9e5868adebbe935a9eb5b9019e1c938bfc4e5c5378997a3947f2" #h"bfce809534eefe871273964d32f091fe756c71a7f512ef5f2300bcd57f699e74") (:digest-test #h"60ffcb23d6b88e485b920af81d1083f6291d06ac8ca3a965b85914bc2add40544a027fca936bbde8f359051c" #h"1d26f3e04f89b4eaa9dbed9231bb051eef2e8311ad26fe53d0bf0b821eaf7567") (:digest-test #h"9ecd07b684bb9e0e6692e320cec4510ca79fcdb3a2212c26d90df65db33e692d073cc174840db797504e482eef" #h"0ffeb644a49e787ccc6970fe29705a4f4c2bfcfe7d19741c158333ff6982cc9c") (:digest-test #h"9d64de7161895884e7fa3d6e9eb996e7ebe511b01fe19cd4a6b3322e80aaf52bf6447ed1854e71001f4d54f8931d" #h"d048ee1524014adf9a56e60a388277de194c694cc787fc5a1b554ea9f07abfdf") (:digest-test #h"c4ad3c5e78d917ecb0cbbcd1c481fc2aaf232f7e289779f40e504cc309662ee96fecbd20647ef00e46199fbc482f46" #h"50dbf40066f8d270484ee2ef6632282dfa300a85a8530eceeb0e04275e1c1efd") (:digest-test #h"4eef5107459bddf8f24fc7656fd4896da8711db50400c0164847f692b886ce8d7f4d67395090b3534efd7b0d298da34b" #h"7c5d14ed83dab875ac25ce7feed6ef837d58e79dc601fb3c1fca48d4464e8b83") (:digest-test #h"047d2758e7c2c9623f9bdb93b6597c5e84a0cd34e610014bcb25b49ed05c7e356e98c7a672c3dddcaeb84317ef614d342f" #h"7d53eccd03da37bf58c1962a8f0f708a5c5c447f6a7e9e26137c169d5bdd82e4") (:digest-test #h"3d83df37172c81afd0de115139fbf4390c22e098c5af4c5ab4852406510bc0e6cf741769f44430c5270fdae0cb849d71cbab" #h"99dc772e91ea02d9e421d552d61901016b9fd4ad2df4a8212c1ec5ba13893ab2") (:digest-test #h"33fd9bc17e2b271fa04c6b93c0bdeae98654a7682d31d9b4dab7e6f32cd58f2f148a68fbe7a88c5ab1d88edccddeb30ab21e5e" #h"cefdae1a3d75e792e8698d5e71f177cc761314e9ad5df9602c6e60ae65c4c267") (:digest-test #h"77a879cfa11d7fcac7a8282cc38a43dcf37643cc909837213bd6fd95d956b219a1406cbe73c52cd56c600e55b75bc37ea69641bc" #h"c99d64fa4dadd4bc8a389531c68b4590c6df0b9099c4d583bc00889fb7b98008") (:digest-test #h"45a3e6b86527f20b4537f5af96cfc5ad8777a2dde6cf7511886c5590ece24fc61b226739d207dabfe32ba6efd9ff4cd5db1bd5ead3" #h"4d12a849047c6acd4b2eee6be35fa9051b02d21d50d419543008c1d82c427072") (:digest-test #h"25362a4b9d74bde6128c4fdc672305900947bc3ada9d9d316ebcf1667ad4363189937251f149c72e064a48608d940b7574b17fefc0df" #h"f8e4ccab6c979229f6066cc0cb0cfa81bb21447c16c68773be7e558e9f9d798d") (:digest-test #h"3ebfb06db8c38d5ba037f1363e118550aad94606e26835a01af05078533cc25f2f39573c04b632f62f68c294ab31f2a3e2a1a0d8c2be51" #h"6595a2ef537a69ba8583dfbf7f5bec0ab1f93ce4c8ee1916eff44a93af5749c4") (:digest-test #h"2d52447d1244d2ebc28650e7b05654bad35b3a68eedc7f8515306b496d75f3e73385dd1b002625024b81a02f2fd6dffb6e6d561cb7d0bd7a" #h"cfb88d6faf2de3a69d36195acec2e255e2af2b7d933997f348e09f6ce5758360") (:digest-test #h"4cace422e4a015a75492b3b3bbfbdf3758eaff4fe504b46a26c90dacc119fa9050f603d2b58b398cad6d6d9fa922a154d9e0bc4389968274b0" #h"4d54b2d284a6794581224e08f675541c8feab6eefa3ac1cfe5da4e03e62f72e4") (:digest-test #h"8620b86fbcaace4ff3c2921b8466ddd7bacae07eefef693cf17762dcabb89a84010fc9a0fb76ce1c26593ad637a61253f224d1b14a05addccabe" #h"dba490256c9720c54c612a5bd1ef573cd51dc12b3e7bd8c6db2eabe0aacb846b") (:digest-test #h"d1be3f13febafefc14414d9fb7f693db16dc1ae270c5b647d80da8583587c1ad8cb8cb01824324411ca5ace3ca22e179a4ff4986f3f21190f3d7f3" #h"02804978eba6e1de65afdbc6a6091ed6b1ecee51e8bff40646a251de6678b7ef") (:digest-test #h"f499cc3f6e3cf7c312ffdfba61b1260c37129c1afb391047193367b7b2edeb579253e51d62ba6d911e7b818ccae1553f6146ea780f78e2219f629309" #h"0b66c8b4fefebc8dc7da0bbedc1114f228aa63c37d5c30e91ab500f3eadfcec5") (:digest-test #h"6dd6efd6f6caa63b729aa8186e308bc1bda06307c05a2c0ae5a3684e6e460811748690dc2b58775967cfcc645fd82064b1279fdca771803db9dca0ff53" #h"c464a7bf6d180de4f744bb2fe5dc27a3f681334ffd54a9814650e60260a478e3") (:digest-test #h"6511a2242ddb273178e19a82c57c85cb05a6887ff2014cf1a31cb9ba5df1695aadb25c22b3c5ed51c10d047d256b8e3442842ae4e6c525f8d7a5a944af2a" #h"d6859c0b5a0b66376a24f56b2ab104286ed0078634ba19112ace0d6d60a9c1ae") (:digest-test #h"e2f76e97606a872e317439f1a03fcd92e632e5bd4e7cbc4e97f1afc19a16fde92d77cbe546416b51640cddb92af996534dfd81edb17c4424cf1ac4d75aceeb" #h"18041bd4665083001fba8c5411d2d748e8abbfdcdfd9218cb02b68a78e7d4c23") (:digest-test #h"5a86b737eaea8ee976a0a24da63e7ed7eefad18a101c1211e2b3650c5187c2a8a650547208251f6d4237e661c7bf4c77f335390394c37fa1a9f9be836ac28509" #h"42e61e174fbb3897d6dd6cef3dd2802fe67b331953b06114a65c772859dfc1aa") ironclad-0.57/testing/test-vectors/sha3-224.testvec000066400000000000000000001146551420372057600221430ustar00rootroot00000000000000;;; tests vectors from http://www.di-mgt.com.au/sha_testvectors.html (:digest-test #a"" #h"6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7") (:digest-test #a"abc" #h"e642824c3f8cf24ad09234ee7d3c766fc9a3a5168d0c94ad73b46fdf") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"8a24108b154ada21c9fd5574494479ba5c7e7ab76ef264ead0fcce33") (:digest-test #a"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" #h"543e6868e1666c1a643630df77367ae5a62a85070a51c14cbf665cbc") ;;; tests vectors from CAVS 19.0 (:digest-test #h"01" #h"488286d9d32716e5881ea1ee51f36d3660d70f0db03b3f612ce9eda4") (:digest-test #h"69cb" #h"94bd25c4cf6ca889126df37ddd9c36e6a9b28a4fe15cc3da6debcdd7") (:digest-test #h"bf5831" #h"1bb36bebde5f3cb6d8e4672acf6eec8728f31a54dacc2560da2a00cc") (:digest-test #h"d148ce6d" #h"0b521dac1efe292e20dfb585c8bff481899df72d59983315958391ba") (:digest-test #h"91c71068f8" #h"989f017709f50bd0230623c417f3daf194507f7b90a11127ba1638fa") (:digest-test #h"e7183e4d89c9" #h"650618f3b945c07de85b8478d69609647d5e2a432c6b15fbb3db91e4") (:digest-test #h"d85e470a7c6988" #h"8a134c33c7abd673cd3d0c33956700760de980c5aee74c96e6ba08b2") (:digest-test #h"e4ea2c16366b80d6" #h"7dd1a8e3ffe8c99cc547a69af14bd63b15ac26bd3d36b8a99513e89e") (:digest-test #h"b29373f6f8839bd498" #h"e02a13fa4770f824bcd69799284878f19bfdc833ac6d865f28b757d0") (:digest-test #h"49ec72c29b63036dbecd" #h"47cab44618f62dd431ccb13b3b9cd985d816c5d6026afc38a281aa00") (:digest-test #h"502f4e28a6feb4c6a1cc47" #h"bbe61d85b4cae716329e2bcc4038e282b4d7836eb846228835f65308") (:digest-test #h"e723c64b2258b5124f88405f" #h"d09da094cfefaad46b7b335830a9305570f4f4afe79f8629ff9d0c3d") (:digest-test #h"0d512eceb74d8a047531c1f716" #h"29ae0744051e55167176317eb17850a22939d8d94ebb0a90b6d98fde") (:digest-test #h"3b9ab76a23ae56340b5f4b80e1f3" #h"c0903be96f38051cfc2a5ad256aa0b8332217f450eab904ee84b6541") (:digest-test #h"e9fef751a20297ad1938662d131e7a" #h"48eba36dfe0575597d13ca26133267199dae76d63d1b9e9612720d08") (:digest-test #h"2bbb42b920b7feb4e3962a1552cc390f" #h"0dfa61f6b439bf8e3a6f378fe30a4134e8b2dfb652997a2a76c2789f") (:digest-test #h"2254e100bde9295093565a94877c21d05a" #h"6965256463276dbb26ad34a378c4bacaeae79d700283b188d44d73eb") (:digest-test #h"784ef7adecbb9a4cb5ac1df8513d87ae9772" #h"e918a5d52a0d42ab8ba2ea386eb6ad83cb8dd9a6bd461506be356ead") (:digest-test #h"f4e68964f784fe5c4d0e00bb4622042fa7048e" #h"765f050c95ae3347cf3f4f5032b428faeab13694e8c7798eafb82475") (:digest-test #h"a9ca7ec7aaf89db352fecba646ff73efe8e4a7e8" #h"65d6a49739c0e287584ff9d1f3463ce2e555ae9678147e21b5889e98") (:digest-test #h"b2f7018581a4e459cf9b9d9816fc17903ba8033f13" #h"c6837f12227bfbd86ccfe794053ce3a54052c8ca8430f526fd64b5f2") (:digest-test #h"f50086b4dc7bca0baec0076a878dd89571d52e47855b" #h"e39aa96fad581961bda032ed33dce36defde958baf9bae5dc558cf89") (:digest-test #h"6e6ef963f5000d0b91b0ad537ddc9697f8db8f10a3d5ee" #h"66dcb292b4d6bb4cdd4099b8e7bfea9658680c92c51562c091577056") (:digest-test #h"12a7b1a73b0b26a66362ec2a91ea5ff11af49a7a148a8cc5" #h"6fc91ec8ad448173f591b865ed3eb89115a278003376523c00e22f2a") (:digest-test #h"8a4768add4a9bd7b3f27461220ceae0218cf3322f4d2a980d1" #h"9a88bc64e743f2acaa1670cca7e201a299e1cce6df7015b0d2535213") (:digest-test #h"5c5b8c1902c8608c204e72a813e2b625021b3182c48b00f7fe4f" #h"31802a0fa9ae7ae88626604ad9ae41381d6f7c3c90effcfcf70efcf7") (:digest-test #h"e89e5cf07afb4a58ebeee17ff596d90b3274ba348f14f284fff025" #h"3bc9b7973f55735b612ddee8cc7907a3f1429b06df7cb1293b989802") (:digest-test #h"eb9e1143782a0f9fa815261c2adc2758fb1d88ffe40a0ae144189a48" #h"9d70d22520094a113297a192ead33e316924fdc7a2a9f8ea7098b84b") (:digest-test #h"c4ba3bff885fb78357221a9a903bc7ebd11c771faf5789e5aabc993a5f" #h"7b0212b4ee0b14dba62c2db7a765ac56db46e0b06eb744ee35726ddd") (:digest-test #h"07810e6b785177e52d0feac0394f3ecc41f35aa08ff1ed8162575f85888c" #h"b413d6f0cce14b7a1044a14bb2803d53bef907093769a5aa63a8e316") (:digest-test #h"01c742dc9ab0b05df925d4a351e38bea7ca7ad783594e22487d5b8198583f3" #h"c42c707ddc7b630939544adbdbe567a333ac88c3b5e738dee8f862be") (:digest-test #h"dd0f85b55fdf56ba254e06f8c2b650cc6b86bf28a14d714011141a86b8f14bd9" #h"0fe92469297c2c34911eae424710db6d312047898b9756edc5c2deb2") (:digest-test #h"ddf48f4cdc856c448326092dcf6bfc4ebcf4b36fc2e516eba0956807588b6e827b" #h"6cd83ba70e1bd387d603ab14c9fdcbf9862d2ebf0987215f011abee8") (:digest-test #h"c34d1f8729663569569f87b1fd6e0b954ae2e3b723d6c9fcae6ab09b13b4a87483b2" #h"e57e1d24dbd9a30ab311291f5d6a95530caa029c421dde0b487a577e") (:digest-test #h"808de7cbf8d831ad4f17eb58031daed38bdab82f467f87c6b2e3a7c5de25c8e8229413" #h"b3c13f11227f4386afdcf7663a120990f27da205ffb9bf83676f86dc") (:digest-test #h"5204a0a63707bd1cab67a8797994a052ee73884b325fdf37d86ef280b3f550c9eb4e7fd3" #h"6aa1060f84127bf2c988230a907242e7d6972a01c6772ba0f7b8bc86") (:digest-test #h"da9439bd090dfc2eccc1203a7a82c5d6467fec4e5b0a2b2c2b9ea65b03203a8ce365fbd98e" #h"e8f0929f1f6209d41185292d35ebbf5a3bfe5492713b06d56579458d") (:digest-test #h"668bbd38c0ad0881a7f095157d00f29b576b01ba54a8f1392e586c640ecb12b2a5c627a67884" #h"75dd056962c5bb5d6f616a9f57892992946d048df57c0a36a40a365a") (:digest-test #h"d63ac3bcfee3a5bc503cf20fe8ff496bf7a8064769870c8fc514c29b55825b6288975beb94ba56" #h"c694da941a7a506cef471fdffb5230bb6c3cd2715341033ab7268e9b") (:digest-test #h"985f06121aed603171020badc2075fd33256d67d40430839575ddaa7a3f1f22325d06ea40252d5e4" #h"29f8846aaf234281b515ea1d45674535a6126c38bd959c1995cad7c9") (:digest-test #h"8783849552be4540cb24d67996a10d16444b2d936d2fa5fcff51fb0dd5ee03998c0454289215fce47f" #h"84502256e3f4291ef4d15e8705e579951fc0e39a2d58fda74852551f") (:digest-test #h"dab31c7b3f40825aac13f6772771b7e7fbc09fedf6eff778d51190ecfd4b0f256cf189baeeec507e945f" #h"97168a9c3b07ec4987a4cf1f2478731fc674f56a2caeef074590ed6b") (:digest-test #h"1119b962bed5815734af7827ec536701a494ac5d4ab83eea1b16ecc80ce4e5f8694a7d11bcba2e34f084dd" #h"205d89e032f03c8519cf43b720478389b1788f3522c3d347febd2c70") (:digest-test #h"d2c45e2c1fa0c44efc84e6c0654cc0d867a3e33733c725aa718d974ed6a4b7f8f91de7d3622b1e4be428de2a" #h"d483e39b7add050eb4a793e54c85b250746e382399c74736f33da890") (:digest-test #h"a873b148fe1807b89cbed930a7802abad6ca0442340e62ed21b84ead9a634713bb4de5648208c0eed6738d9cc8" #h"c86bcc12a6ab792c149aa83a6783ca8bb52b0ca4b2c12661c0a25d22") (:digest-test #h"b3008f6f567d1eed9ab5b3bbce824d290e66f66bcfcff7f9b8994835b4d54a4e45c9b8651b37dbefe5e3fe5b674f" #h"23929753ad07e8476e7bdac8a0ca39e9aac158132653be10ebeeb50c") (:digest-test #h"78d073b4e13f6850dc1ca36683abac72336465d790eb3575c942667d1e3ecc849f37a8d73604cb0fe726ffe55744a2" #h"6229233fc655ea48bb5b48b73a081897d855f6cf10478228fc305842") (:digest-test #h"45325b80e043c0cdce3ec421ecda529481910c09730128b4bb927dda1659ddd8fd3ca667d857941e6f9fd939a1c57098" #h"776aa1f54e038f390491a5d69bde7a2dbcba97c35574ebe60c9a772f") (:digest-test #h"3bdd6821d938fac52101fbee5d6ba191fb3b6cb634dbf42cebaae57bd897481ae5ee04e2d871a4c333ab5ab6588144f2f1" #h"62f8f3baea6dcf5af25d53ddfdac0bdcde88e3895df567c6c416a541") (:digest-test #h"86fc66f2618c98fe9efa1e3ac04e340385dc2b746cbc0f7c757b88342810fe70d81200952928e7aad0c0b6b19a044537b009" #h"20a21eb1d3130a4519ce6abd5ab6817081ae1bef3603056476a00e41") (:digest-test #h"f2a6168e7f92d313fc30f9e6f825a480916216f02e0308db70773ec165e25e81ffbf0220c5ca0cc6c91d3a09da99fa6efa877f" #h"5d6e5c82574f5e5c0339d3af1f9c28e17bcddc306a15187aff5d3dd7") (:digest-test #h"5e3b6b75b54f21b8016effb39276f5e7f493117ac4c0f2dec38a80ae2917dad83c68900120db1325f1f4697e0f5c25a8b92a9702" #h"5dc2147f1cf655dabb5ca4b2970b4564eb19ec456e6f966bbae19762") (:digest-test #h"e7f17c131950c06311f47799a0f5a6b4996f4cc890334450e1bd6cc6f5670771c0dc607f8eceb15300ec4220510ed5b7deb3429de6" #h"4ce80dab9f933112a3fd78c1f76434b197806eddfe35cb0bdd845c15") (:digest-test #h"c9aa3d0f6d878db11235e7b028f8d67e2ce26eee718f308e21132e377e3170e26ece95bd37a4bd7f873ba7f8b71517ec50297b21cf94" #h"5963b41b13925a90c9e8fbcded9a82ade8aae36dee920199f6d6ac7f") (:digest-test #h"0f170afafcefdfa8b0de328dab30b4e44d98d6aea2bc39557ff4658fce4fbf8526d8b5359f173c14e4da7cf88935c9369fc7d607863f25" #h"fe7e59028c7855c37ae3dc5ee324864cfee6b8bccc2c3b5a410b65d9") (:digest-test #h"6b2b92584146a433bee8b947cc1f35b617b73f5b1e0376ac8bdadfe5bfdf2263b205f74dfa53db7a29e5078f5c34a268119736ba390961f6" #h"132cfa7e71fe0991abbd88ef588ac95ac9289b1d775b42033567dd33") (:digest-test #h"39f7a94312bea1b4fa989f5a6775df538f01704120838c4a3104256478b5c0cfbe8b86e2912c980b390ea412edddb69d461e50f9f313bc17af" #h"fcc59655b8fec1a3d878345df9108bd99f4dd0e5218a55fc335e57f7") (:digest-test #h"ac582b5a4bb0c5e9c40d8f277bda9de3d07fff01e820a1cdaf88708f1d60be60b9a5e83b5c593657387802b4182d1df4e9466e6d7ae6dc7c8079" #h"5c2e10fae8f4304cd9361690e5d2c4cd15f10a7b14ea60208739579b") (:digest-test #h"072753981998453438a520d9de2d5704292910148b8f794ec3765b240c7af1b79462fa9a2f000dd94d592d3a2a069dc244daf57b12c57675f3f89b" #h"b0d290a6ebdd950811a2715f354b0d8935cb610a471cfc5dff5e0660") (:digest-test #h"66a9a6d0a322ed2852378af82c0a2c027b1082098ab750925a4dc2e8961d0062c9db02e8cf42a6b48afb0056d6c1f1fbbec3fbeef049535f6e9b3864" #h"d683488c8420eb2d61e528ab0a7b73aa780a085b9c7982293b2ac6ad") (:digest-test #h"18419a8498d4e9bfaa911748186c5753d5da5aa033371ffc56650d0ae9b73f430f0d1f3c9d40362786c0429d977b899b64016eca82e64203f6685c12ee" #h"51d0cd33fd6579b05c366c6fcc653638b7b13b62798b99b36792cdc4") (:digest-test #h"4fc52009d58a0fc2573e83fa335b5c1df8c14b2e6daaf05bd6e13fd5722f28de4816772424c2f94ddc3de0d3d7e26812d014bb9fd83012dc9abf1ec9e3f1" #h"630ee2beaf1c1592eaa6263fc562a260b6054e9eab1aa19536fda170") (:digest-test #h"acdaa28692f334732088f5efab2c7951fe0f845b9e2c6f1253c3cdcde30a4e8d2120e38c26422219df41eda2c8334e13f669a65f5ba2075b467eded32936d5" #h"7d4991d54c78af5809cd17024cadae783c6f5a1f0feb365b532580c2") (:digest-test #h"d1593cd338b7a25bb5413f112a639fe31c981e505c81a820e638c25209e2ce56c8838a7c8117dbadccdec959a6f7cab0cf304315701d4ccf0167b4026a6744de" #h"84e18330723e4f90520d0b051a9bf9bd7b5c7ec0177803f15cf740e5") (:digest-test #h"8cf8ea25310126ae1fdce3c9195395a9d45051a2a3f08ce154d8265b54cca7031a7ec840c3a3359efa4c91c41b74baa698d54ffb9b0170f2edadc5201650c2bdc6" #h"75de14169d16a9902f6e8a3359d94594a889c4aed9246caa6cf5612c") (:digest-test #h"e0320fee19af5bfd511a23cabba75acb0815525a3734305aafa49c1d8bdfbd853579646a36a7873c4cfff2eabd7e3902eccff1192aca1f6dce3cf1c988e6aca9f2c8" #h"d7f2018c303ee045de4b8cdefcfb5395674e3a8770d65f0757b4cd5e") (:digest-test #h"1a424ecce1a82c47742171a701ad6e0ff1a762ce26f8e332818a7fa1a800a4e506a4bdc813a09ee1d57222ada79a12e2399549ffd80f1628ef55e231ce0913f9ab1930" #h"277f96fca5d9ab055fae5d4dd10cc49c2237bd38d95bd8dbd168ec21") (:digest-test #h"af172809570cc306333c25523f863c6d0e0154c55e404722f0d4ed419713dabf8e18493a0e0b53b220a36535b1e8f0bbe43e624fac9f566f992807b6f2d70bb805933e2e" #h"9581170093600cb67063a314d8decf109ff9368ffbc90ea2d3250577") (:digest-test #h"a62f4b43250cdf3f43c1da439bc5e4224b15185b60d615e38e3c512425aab145401b57ac3fc0bcc178eafef52a2b7b04b2b89e760212f96c4ee694990831858f0fa7c13c24" #h"a0f5775a2d001a66f0882ce1415261994021988690840c6b4a3470c8") (:digest-test #h"fcf81c93f917bb06f278f48826ef9ca8ba99ac8f00129fd9f8e81ca31750d5e54818af0331dd239eb77ee4b0c4d0c2d84794cef27da6bfeb707794d3bdbc7b349968f2a316d8" #h"a97a74fb01fec5caf3477220eef6e7c36d0ba4199ddc755f7ccf94ee") (:digest-test #h"e61d24b500581734c29902ade4c5035c090868df9f24bb330609fcdff4a72d6f18001424fd813cea32923d8aa86c3d215b2ab7d134237bb62e78f61cb9e9b4ef5ced23729d019a" #h"40758314f1abbd43e0bc9c73a1c7e24719d56eebcd967b39d355e978") (:digest-test #h"37b14f04233dfb4da5e5bd1852f77c41e25c4926936fe414c8108200f6f3cd78c03e2dd9615446c14bebc2c70d65506a7a5dec4808806291769e0dbab200e576f9fdb9e240c8b8ff" #h"2d36af0dd95619a96c5664d8987bbb82d183466ff44151034fed687b") (:digest-test #h"45efb0a3d8fb7bb683913459727e8756d67959cfdd4f5b80e13ddf45e09debdc2cc68ceb632d6d45a2d0a869f6d4dc4c136c805849fe77b4b381e4c6b22a3ff69947a9b5aa6b7cbe42" #h"125e983229f65bf01b59a9b619810a88f1c53b4c3b1960b52a205d99") (:digest-test #h"9b6c3c77746219dd88976966c68ead59eb62aa3cf6647798dc06d4fc7ef8bd44d8903f1b7b6f8bbf3d6249052f862e9ccfb0d1957f0bba233603bca0766286d17eb9746bc002abd69583" #h"762629518833ba68333fc3e3b4d482c60b4e0e828872826b68313315") (:digest-test #h"9f452f900219017199edfc5d7d86a162d9750bba4cec77428ed1032e5711b6fb7c37c1a65b3d041c7aa1d4f16bbcfc54f35001436b60abfb6544c0b393fc1389e5c5bdbdf2eaab1d99dd59" #h"19b432f5c38f665441d36c472d386008a5bbd82aa4eabeaabe3d28cc") (:digest-test #h"cbfd186592fa68dc3a21d62db1ba55121f58fecb11695859d70bd7ed2a21a2a013a699640842973b571bf4a7c8ee4f617d5e8a4d1e8c15ae33e77097d146eba27934b1e33d8a041f2444ca3a" #h"b32ad13ba4a0b9fc1aa9a1a57bdbfbebdfab71cf5a16e06040f75787") (:digest-test #h"173225324c6c350ddba227b89a651e576d1ab6a96895453c33ea61ddb37fa253e666a84d0fea609814688495246161eb9cccdd792cb1b88f36f3125d766e2eabe84175cbe66dbecc91a0ccf173" #h"fc8feecaefffdaa966e9536b91dfc85ea5113a01d6b320677d727a7d") (:digest-test #h"6999f398407480cd43bafdaedb8624d9ba0972aa5a2f3504a67fe54ef744b7bb41ea70cf8faa771fac6a2f5823de83826af4c3865b6faeeee3d1d0edfe7f0e9fe3207f917b467d841850fc6e648f" #h"e7abcb4c0f218814ecf45fbf28a3f286d90c5e740aafd1647437c1e1") (:digest-test #h"2727eeb1d51098c69fd8141d78f21275b2bb949e7115fd3860526bbda25547c20cf31b79919fa37bfd4726c4e77906ffe0ca9705f1782da0454e799422c815e01e785d418fa881f84341d8cd71ec77" #h"2be332c873ed4fb70bc1916c76bef2cd3385e674b83aa1ee8ad28a01") (:digest-test #h"1f48a5b401d88e6cbe37f3f634d55462865f7cde7990052a1e4a1e4cb2e58c84c2c7ef82923447d7c068b6aa25e388acfc05704e46da14316d37ccdd2706a7b79ddeb02dcdd76f342c9cb2f490c18dc1" #h"448b70f575a8a1eb74030a985e9c504d4eaf6b1814e1146f782c9af5") (:digest-test #h"6dce9a9ecb48b9da8aef51a89e7f7fc1a6a78966b7bac0ac5ba7ab18d92b616bb74537bf7eeb9bd3bdfb40a450747c3de2e6eecfb12763049148fa9134c7870ba80636fb21fc7134f92b0364f5d27deaca" #h"df855d544e17f01125022bc18e9ffced12f3cd39674e68184657ec7e") (:digest-test #h"d498b6901345afddc5aa50cac77f7f794d7929eed571d95b59c289a0c9f3b812b896bc7b566f5a639ed9948ed066c2c622c6e4dbb2ea37e7c06806d61a22c326d72356ec48c9b5182c29b5f923af20046605" #h"5b225c29e4547777a2c6a1a2bbe9da2dc6a8c6d0d01d8d8022988be2") (:digest-test #h"e958b80489aa6a38526244da165dc4464e7961e457f763abdb23f7e48d368331197b37cd5ab1e515ceb1124848504d8be587bf3041d10437ebd53915164556b59106bebdf99115122d99529e02ee155138a13a" #h"364a988400424557a9c60e4e1f32f0855a3383c90b007d30ee3ec333") (:digest-test #h"f33ba982bc2c3308f948a1b64c7fb68fb891bc05fa18781b1dc95dc749f7009adc58cca2bb0cf790ebdbb4165bbfab9304a2a6f234688dcf273094dcd8d7b38416be57cedace5783d8b92993548256b5373f2b4e" #h"ca37e52f2843a0f65692c5aeed0169601da3275dfb3ee6d81b467f60") (:digest-test #h"8b5d77a906c7ec7563af7551a796e5d5dcf02c42121d7b13a49aa9d4bc79d637190e4e6510ecaf92d1104fd4ec5bd8351446350722d1b2775dbc5e65f8fab473dc637b5ca8a9eb88f68d11dde15275d7c472f9db43" #h"9337537de482f0cf88cad6b86e195a1e422e59cc60d41d0eca8b0091") (:digest-test #h"3a564a84c2b48ee26da138ce2d1ae3c7933bcd65e40288406e56f30d1c48690a4998389dd27b55376f9b4e7f43607fadb16e8933726f00a3e41264cda553532761fefc73e86ed79b849b94e0895451332dc80fe39a4b" #h"88eab3e16ca8da5716542bae3c7c736b541c896199b2cb941213767b") (:digest-test #h"618a53989ffbbf54a76f01f9b87772491d87c8f25c58eb11b18a04f5ba8ed62574c351a466df64731c911458d765cbde83e7f29de90bc1bb26cc56b35c140555a7dcf00f5394d76a4cc531d7d5f57bac7dcbd06a4f73ba" #h"4a727cc6b4bd93d5ff2ecb81ab5057dfdcbe3e0c49436a58b9ff3ef2") (:digest-test #h"31857bb4e82497b526e426de6920a6063d02264d5249feffd14abdbbf03563d4c59ad1f7572c7d0efbc46a65dea9580bde0e387c9edce27cd9b20a46f62a70e6dd5f58e40aac3a22dfb6ba073facdadd58cd6f78c02bd219" #h"9e614fc139645e158cd1b216e2623e586242af64f8483e6fca20ed4b") (:digest-test #h"14859008c83f2831be4d6e54b781b9fb61dadc40c459a93ede11b4c78a7e5a55a71701427526a03b42d883f247904813cd812e7a947c8fa37406aa6145aea6d3fd9ed494186f35333d423ce31e0cd473a031a5803c5593e9a4" #h"545fafa43afcaf38063d8a312c3a27e0d74bff957f8ef4d51cb29698") (:digest-test #h"267a14bad702ef0a8468b31c72715f0533f6b97e6e943839dea420719d6defc5a399f84689e64ecf931ee395ee49f1fe362199b73cc6cb0105b3654b16f19f06ee8aa6b5d5418743d4804f9a059270710d126765e6a49c4ce2e3" #h"9b9360a5c747e6e1288f6f9d971051ffd84641f6d64e0a4b5142e4ec") (:digest-test #h"6c98a8eb3ea4451401e0424c10cb722683b23f75ae254d62eba75abb9aa9698e65ba1ff7c9f86d36d1ca6f0425d19428441b00450e9a2ef685d5da1cd4de1e779184db743fc95a461797333808ae6e42fce1e9da5d82f90cd71b54" #h"0c6f33f9534fc52f3700f37b9ee678b4c5c8a90b1a2eb1574002e377") (:digest-test #h"4bae62a008d9fdba351a1903c66d58e587361990f7c9eea05a2f51f90a2892f60e6c14c4ed36b908c4039bc89797fd88e54281b37f619b3d9a274587229ef48351e8cb1881cb0fc83e6ddc90a05b160fd7d0a1eb0835d57158e42c7b" #h"989c156ba1fd1f70deb378e46ffcbf6f2cf9cf977a92ac51643c97b4") (:digest-test #h"83ca6d4ebdf1c04062ca1abb977670ef9bcc889906935fd64ff4c739912e541b8f8c7932f595ef66e18256dfa1f51f63bfe7a9df3ae2aa431771d19318d6aa3bccfac1a4c8aa0a0433ff807a881e0d5a9722aac6cd57c77eb6a9edf8c0" #h"fb831f2456595fabee9d458625283a80bb4f8f031e9abdbf48b7b51e") (:digest-test #h"f4c7ad8d24ed5a682c473463e85391050c026fef0b0e6dca388e1a7e2bc872a46746a63f3a2c1ca6e4c8b7c5fb6b58850d77a58988ba091bd7fafb66ced184e548bcfb1b0e6e1485fb6a19cd5ed07640a0777b82273d5e80799b7fa7a57d" #h"13bee617474b3fc3447025f2a488dba8825d46a4e128b9a8bdeb1b85") (:digest-test #h"5f81c5aec92385bfdc55ebd600f23cb04ac9d5c7a1396f801ffea1a6b94aa617231761bdeebc9ec0f4bf9bfaf5ebc7ac82a2c96f1a74c46d94f0dad0bcb9ef7b41ddaff8cf63d2b278239e6558dbaed2797ef3b7f4cff8fe592f6a3551b3d7" #h"143a6f0a20d5b4dbc5df64a7e50f9985631453eb09ded71667709083") (:digest-test #h"0735cecaedef99bf4c53242f0552f49f56bbe589a2f611af75f4f3aec366cdd6702d46391512580202b869097fceb8a45889fbbf9852472f94bc2f432bb8309c4d0c4d3fba01f6e90c5c2ea3f890ed95d132c31f4dadbf268c378fac5604e8a4" #h"9f5e9f7429e5488a843c52ffb46ae2e84228919d32330a9193af3b21") (:digest-test #h"9b4e4df92e5152fe1ec56a9fc865f30bac7e949fc4f62f0b158d10b083636b4de9bb05db69fe31b50103fefc5f8daf3af7156b4552ca3667a9d720bbb2e4bcdabadfd4b7f4fc5bc811faa36710a9d17758a98d4a0474fec27e9ef5b74f5c689935" #h"487a6f2f875cb253de4cef18ecb4f2a54388ebaffbfc4259bdd97f09") (:digest-test #h"a61bef838867710ff4341b26b13b8d7af7e461ccd317b160cc4fdaaec7f1805a28ddd3663a4210a7d1b64a752e866aa7224a75bf77bd0d618bcc3b0a3eed6bfe0eb2b882819e6a4cc437bd38915ce53c55d94e9e9339286483dc230d0049777ea1c4" #h"e257bc45b62d0853ba4b0f8578698f4262c31a778cb6a6317b6e6d60") (:digest-test #h"c0bd79e0c5f72fcb1de6c234bdb67bd0d3f481b962a3a01f2d8c483bd7d5d98548d51d27532716b195fdfb0ea0b77db759b54e269e69e48e2cb07bc9c06259927d2755f48e8d9a020c58a9c9221a9d836f03b30eabf9099c8eeba6abed63bb38275b28" #h"92df7f848ada8a9698ddc2e7452ac8fc43cf83d2ca2cadd712c595f2") (:digest-test #h"77823af9b8796c63baebe7ba9dcde12c626b840ea04f42d878646970ca5bf7aba94eaf110da36ce0c834b654bcac93264a349f520e505f1ec903d3589e3a4adf82687a65ee6dd072d6bc05acdfbdf257cd70a5183a54b4fe8e87d1c22b2e9f4ee817c57d" #h"819a4340938497cd8b1def8444bb03f8429b9e87bad8000002d60b83") (:digest-test #h"ada5651b4e240335600940f207b98371f7e743988957bffe0de8ef0862d1ba52c52b6950e7b05c3542c2fb13acaff0442d33940a0e3ea67232f8437eaa02128283ffc0cfe254ac8f542be3f05fbe4e855dd22ae98a81b9a55b3d3753111210048f2b50e068" #h"b6177d179cf17eddcd8988c9108b42af9c41adcc5942c4d33b0f1be2") (:digest-test #h"ff4704bbbd719b011244ebedf2f2355338fcc7d64844c3a0f36a21569b55f74a9710f8f3d8d83b9bcd733f5885c32b3d149a5ad137d016c03b93a4d11aff8218e8eeec6d6d12a41d1441f3df040feb098ca2f003c4c277fc71300cdd2a399a7bb98ae711c446" #h"a1072b28f3453422e611421309aa49aaebba0273c72b835fdeea1132") (:digest-test #h"eae4b62f697cf0bf40a1c2c109143c1dde18e24f1c289aba67e5c83eef52b70cf1433bb98013949285969630054e074ca2e249d465cb383dba51561cbcb626f0b3b1d542db1e1ff168f371c7c6764b4f25ade9eb351622212e99903614bbf1fe3914cdf203035a" #h"f5273e4d0bf9779a0975fee23c447b3abb1cd17c34c723d62f3a2fd1") (:digest-test #h"0e39e0e6933c6104984fffe115dd8cde77edfee495480aa5e5def424f066a5770345fecb28b16caa5416bc79e2b83145409bd4bfe9a00c8493f06ea2a99dd658fb87b71eb57dafe58da55fa0411e790341e31a8ba8f35bbe71af23b4e8833fd65ec8b4e621e95340" #h"62fb7d6b3810d0fd7d96b4ff5efe7bd283ddbbeda4a21a62f985a3dc") (:digest-test #h"e32bea9ab02de7d893ecb7857ba66df2c35ed258123065ca80e2a067fabb7dd4e79839ea0b3c58abace8e97bf42b0b8d97fcb09bb606a1da0243c32d24cc98985df008f8698362f2aa789e2a82b3e5b5011853d0c0e8fbd20c4d2b5f4733f2df8c5ae02e92a90d95d3" #h"278e06fd12a3e314f60d59a323673ba0a22003e42ac48e1cd04a70d0") (:digest-test #h"4157752d3d175a4bc1334fd42c204111728e7059659dcedf334ea7ce30378798d67c598a0afacca5a1c5fba923d54c72cffc9887df1b8df10d96514955056815fd2dd855d32e8b58b6fdf4d45715f636416a0137179f7eb01d786daffa924ccabd523bb31d1b5f0d05c4" #h"1cab43635d501e43ac42beee263755b9a29827e2a18b21d7be42e447") (:digest-test #h"2df12d8c256cd1a127e525ac3763e30c895982eee67ab7c150ce3deae906d2b9110d829ccfdf2793729e31e478e3a310ae525e059971a29515bad2273cee77ad89ad88d63d44e98402c63180cf5eb06d0be3b1faf5adfc5c43a79ffc09a6ee6cddf9c9a039421d5b2184ad" #h"ee60f0d01008cface49af2ee5780ccdee37404c37642008a55fafaf2") (:digest-test #h"03be6940e859f9b072660dff28a187551c2425481dd0555d2dee4acc36164f84f8505b6f467ae6f772eafcc9065490d9b4ed12a690d044bf7da14986e571fe34aee28e1d698c4136cc9f95d462c990b6815a54467da6f41c1baa86c448f37ac10bbc2ad1b957b17368ce01a7" #h"a8aa80d4c925889b58eff41b89682b92bea60c1c3995043dac312d2d") (:digest-test #h"0baf1ac243c1f34ca5e00aed4d867f967bc2b963e93956c35b6b68da7737de23d7a1405a5dd4a099c663cdc182d4c91bc35f7d3fd5f3ac35ad7a26dbc45e3e86264c7decc538984214a1a0a1d11679ae22f98d7ae483c1a74008a9cd7f7cf71b1f373a4226f5c58eb621ec56e2" #h"f12f7a1c5c1c383a2a5fff8932e2ae9dc342b37652d47356ffc1cb37") (:digest-test #h"3c29a8c83e48194a7b87b69e376a06063de2449bd171fa91e58ed2bc904ba853bb35e3f51e7c06e96b5482aac89acfa383bbba3701d20104f8101d69de615f45a24c3e02991bf0d3bb3d37390fe87ecc64032438424218862093a69dd7b99008573661f9996ffe8ed50b7e54f49c" #h"5c6b29c3cbfd1d2eadf7c791513b27f21c934de6378ef748b779b71d") (:digest-test #h"68a3c06e0740b569c72ea6a90d8b45e83c7c350d2bcf1cf6d6dffa7553b8b998087c052e1c065d862bcc6a7a3e0a90acfa1dc410172c9dab140ead9a296811557e1647359acd40341efeb6f5b3fdc0044162a45e62b0ec341634bcecb830626930392f8c6bde85fa088a322054acfc" #h"58a691524398a5746df28ac083f15861750e0cdd1fd5e5f57c982c18") (:digest-test #h"d4f757d1c33b9c0b38b4e93e8e2483ec51b4861299f1d650961457496d86614d42a36e3696bf168fd4663efc26e88cd58d151e1531467b73f69dc9ce4f8d41ce579ce1c91e6760e340e7677abdf4fec1040745aa5144640a39b8c4f884df80753a691653003d634fa5bfce81f94ec3f6" #h"be11259377f09821d9dc358592b6565d8ef2b414dfaa7db5609fb751") (:digest-test #h"ecd9e95f7c5efc8336f80fe67e113657b31482bafc22dc5b45073482846cdc48414d2ea855ae75d9f28a0bdbe30dbe511503788e578f20f25e20bb770ca1d787f2f02911139275dbeaa5ae1aaf155f40d7134915dac34d0938358dc8be97cf1005a922bf3d71c331282f41c86993e0ccff" #h"6950ad0f91398b39965b1859ea918c531212face1e51d4d390f094e1") (:digest-test #h"834ddd8fc7ea0c3385ef8280d3a7b22d59ad17d710a51a544a293544f30659e816a98d38a2d4d92f6f96626a7c79d6f17bfd0a558f45e2fb541172b720ec629c88a7971326050f2b9ab80d30cf8c777f80e37c98fa61797523e81e1bbbc7cd6ee22e4249dae679ce0f3eccfb54495d7e7046" #h"ef21ee8d568c009eaa8d1ea770968cb718c4d56e7b2d966bfcbbf398") (:digest-test #h"6ff611208395d81500505dae050ff0c29c0afde2a8e89c96192863ea62c17e292d0502e94dcb7f47f4cdd574264f48716d02d616cf27c759fdf787cdcd43b169ea586c8bca25fa3ce1a08eb615655e2471a0faa81d2edca28eff4030fabf36f10fb5f50fe4eb727c308f317bba995b6310ae12" #h"8a29f2c0d564935b8d31b7d007f58138489d140917a28ee85d43b6f2") (:digest-test #h"f977ea38076328bb0ee2297cbe3b2a9755fe8bb95ae726298e04df05201a7ccf2046b82836e092da94a4eb1c291450121718159468e8a330fc2b1272c661fb62397e874ffcd7cccbe5425af725791001c0c035ea41c8c48dabd206ddb217666e2b688237c2127e96eb049d941b34126b373e1345" #h"15180df5554387337f04de2f37a16b28125adbd02b6fa6cfdb24195d") (:digest-test #h"22a8fb43d54fff82749cdce98abe8adafcd443ffe16bf0e99341e1f7064fc07a5907c816abdb326c30fef0f5846e9e313f32b602c9e00352706358fcb7fb81eaf1857a7b0ffddf27b741a465961806ccf672c17993f284b2aaa9a2c854250a4212aa7937a9bfeefc30ec5f0067c3aaf34a1dce2ee6" #h"d11fcbbb2fa03109f952a56e16867c70904552eb580a6659314bd5fe") (:digest-test #h"68727636ff38c0ba8999dde3cbd9503900d5ccb01d3c9b7959fb411eedf95cce1805cef6670d1e1133901cc06b55c41d945e654c0d18035498d4f92d167ae21b927cba3a810a41594885a00bff354ffc753e368274d01374469f1b3f7793e436ddc0822ad698f13bd15fb3ed10e0b97fac5f8778d9ce" #h"21c71bd09ebf5d09155347c4f476b8f9c5aed4579573211887ab6084") (:digest-test #h"167cb772f096b2e3b1599cce3440d1af57c5b7df5d2f460b91acc7e52c9fdb19793bc0833751d09f3f664a4167095586a564420a7810125b832e38ae7bb3a0d14403ef6157c20d3d67e6e13a44115b19ff1fb8b64ffa018133b6d532d9da69b9bffbcd74189071a57101e7239401ea50ad1ea04aab961c" #h"c46cb2dfeb8b961e6e84d72e05111e04d62e3f93a055164b135b9072") (:digest-test #h"b88ff728c8f829841a14e56194bbf278d69f88317a81b4749aa5fdbc9383486e09bff96a2c5b5bdf392c4263438aef43334c33170ef4d89a76263cb9745f3fea74e35fbf91f722bb1351b56436cdd2992e61e6266753749611a9b449dce281c600e37251813446c1b16c858cf6ea6424cdc6e9860f07510f" #h"8891cdfe486a582e8340bd8b893996d7a4e547e3bf50551902e722f2") (:digest-test #h"520f27a4d096d4193d2bc0983cf83bbb5084845b41844800c1f5669b4f67f5785c9c886eac51b059005cc3caf2f7dcfc205c230a8c924f604386696f3d5dd2a68509879d991aa49314d7271a8a8ef711b42825d3cd0071ae3bf6109772bfac1b167fad995f99b7afc2c573f2ce6493e25411101dca79b6d2f1" #h"216ea50997596f71edc94ed96e2b686628640f94a3c64adef05c2b63") (:digest-test #h"75c23e556178f00440533bcd25257934d0c6f5e68a64f1aa511bee9435c5277b02145fae1fdedce3b6b7b47015c547be55d00dfa3999920d586dbecf7ff95a775160d057308b32c661c17e5d6a772166bf69b9919ee91fe93877a50711939c85a9cf1ab65c28fa94879623faece20e1458b8821383fda2253762" #h"d1631028a8e0ec4adc689cabba8bf681d11e2e2a5059f293f7ef5be3") (:digest-test #h"d23373b9405024d0c4b17aa503f7e2ff7d308083124ed2cbc4d990b9bee0d70b9635872fcfdaea58a2b696d1fd8c9492cd2ec11179ee755aae5663626219c0981348a8be50c9bdf77b061121cde246649af1f30bd7e84a93d952f8025f854d7bd3d59d0ecd07e6d4d909b23c7ae03fa06fe1de1c3424999fcc3618" #h"726f6584ff9ea998ff326c9f73291ace8726d8697e7aa94f1ed42f7e") (:digest-test #h"6f057f91480fecee8a7e3879dbf8c52040f96f5929c6b8b6aea223b91843ddeba387a2288264df3d241d14b5b6bc7defe9bcf174f5060a88de1f86fff59fed52a3e574f2620922dc0c12316e5869b779a18e8697ea0a50bf20a50f169ed8a308f785bd98efe6fdf4cac4574dcae9bbe5f3d7f56a11bad282fc9c84a7" #h"6b40e5c86db3d9c384c22a46cbef5f8e8c427bb6bf43268edd918aeb") (:digest-test #h"6f77874dcad9479f5bcac3763662cc30cb99823c5ff469dcbd64c028286b0e579580fd3a17b56b099b97bf62d555798f7a250e08b0e4f238c3fcf684198bd48a68c208a6268be2bb416eda3011b523388bce8357b7f26122640420461abcabcb5004519adfa2d43db718bce7d0c8f1b4645c89315c65df1f0842e57412" #h"0228626c63c20465d5139d1af0b9ce17e334ebe10a5eee2cafe96cb1") (:digest-test #h"ea841bd41b22e4c98b223332918eb791f51d1978540785f9c617675dbd02721831f7e7fdfa7714af7d671b588a64f49d8556b5d1c448116839771faf51a85dbb1bbff59fad8e3fe3c4eb8631aa050f505df85757ed9e9d1a26a8a0e96feeaa7af204cd23fd0e6d4ca8d5ff25b91a0f94c42a887297b230f6d5d57271e07c" #h"ff33c64231dedfc247e11e35aaf82d283a9ad62034102ee2bb5d4609") (:digest-test #h"7216a825029da1c9a9328d499b3ff98f6e18b8af368e2b19efc1c0121b35b965ab282f55232356d7fad002fe3f0b6ab7833b2cb6f2e392b0c37414cbd3661e538c8613ae0c9291928303f775dd2a2445a27e825a1a3544a9b411eb3aa87d0fdcdcd85c170511db620e747296bdc3afa39489c181f5abc76a8a404e47e4a214" #h"9440d3710b43e79899e116987366b2dd36b44b2f39e377fa2d4fe143") (:digest-test #h"44a8508a3c3976d563e933705be4dbeebc726304b511203df7c7d1efceb6e06e91f1e57f3d8e6c105dfdf8262d984816fe7ad8f8dc95ab596fff48301f8d03137ba37dabdc4a6e664583a26b8edc42d3c2405516c51386c33a7f2875a3087702ca6721f56195053fe5263a29c8d8538dce6ce146b8b43ae520ee79a5a450c6a2" #h"a2743d341023ff5f775d90185d3139a7756b0a65c19ee876ebeb92ae") (:digest-test #h"a8ef4107f41ebbc5799a716b6b50e87c19e976042afca7702682e0a2398b42453430d15ed5c9d62448608212ed65d33a5ca2bcdca7728037df2e5f9fd9e974d0315dde8290241e3e2b2cc06f8c653ebc95bc2195c24d690caed42fe7d96589f3a85eae9bad995ab829e674abcfb8efaacb1eee5703f52b979d5d99a1c1694855a0" #h"b411a28ff46513d0c3d63cf78a9b6353466cba3b926a8d895ee14fdd") (:digest-test #h"f649d801b4040b7b5152f58a01e7852f565efc77b5dafe4607eee953b0ba6774c5573f1c79767121d94381c3ba9013ebef2fb8b0bf9f081f96ecf13cfad04e44c11ebb358160a89049bfad5e8e241d71689ddeecff0278063fd86b0ad475c6a25265f556b30ddb50078e216267edcd4a2b7016345d4b76806d7b02c625f3f717e0f6" #h"b94debadc833d5706cd4736bb1dc75039827832ae408859e2e6a6941") (:digest-test #h"eb71b45a494e76462edf41a9fdcbb3f46fb863b9e259d0c8f4a79898516eebe8c90c3ea5a675440f3c7b1a18c14dc20c5f3dd27788c66d448acd73226327f52cd65cecc8beaa2acfa34d90ef8bfe824e12ba9870bdc4965b8ced9ff9ce13a5bd39e824893af410d08ade0cf802e7dc02b0b71d6c2a5c3356229084e53b3ae4e51b384f" #h"fbbec05ee1fb5f5cd1106ed7384850059cdcda474ba7cec0407a272b") (:digest-test #h"4eca0c51d30829b9a1d2712da1fac31f52942d77c9f20c2bf6d3751028d7d4f0d336d3dc92b27ec368caa4444b3180c1e37e98b58f25e647a9a6361f0b04cf78d17955766168eebaa993a435a88e0b39307423d6ead87f639afea75ba44bbc6bd0fb5ac84a12c2c6ed9539a7c0f9abb0c1dc9483e2f321a85244926dfd95e2f05624aa7a" #h"fe313eb74f955c0cbb1c446dd4ff853f32b3232d93faba7db6d1fab8") (:digest-test #h"97784d14db62a7f98f5ac3df742e013489ec0b8777b05ef82bba06edc5c3a807b191c65513ca3fc7690615e56c2773c036edef29aac50c2211e20392018fc33d83c436f274f7c6062c3420025e7037993f1b8cddebf4aeb20421fc829c7fb23255372455c69244a0210e6a9e13b155a5ec9d6d0900e54a8f4d9f7a255e3a7fd06f1218e5d1" #h"5504f39131773550b6f459f33a5b57a2ce60ce8bb78c574fef83dcf7") (:digest-test #h"1ee9047351e2a13e4a2d5a826e304fef82241fbab5100835e1f850a20e51e34938b93dc852e58aab8adb0c3ccf61be9c90b53713c77ed0a5370309e6f19b290f1d642550f738c36818ddff74f77cae04af55617403b08c7a9f17e8fba0c21523575384b44ac4949e7c9dfbd1ef6a684f666c67856f8f84dba19cb38a23b0efad6eed229c536f" #h"b8f253512dabf9d89d2080830f23da5893b0f87edc0bd624ea767f14") (:digest-test #h"1f363d2f7aa89e2b6c5e172f530d1a35531d0083a5acfcd232d64db06134b8232da2368f7a46ead9a9ce55cd6af8cdbdd1582b6bad56c52a15769c3f43dcd68da60f6e7232fd2aecfb3fcd00029f8e5c4ed7ca3b3f9cf68920dbd747fb43f532b1034d9f49d546aa893be68fc3084658f22343b9068877387b8f68903071fe5877083be068d626" #h"e59a19686df36bf5fe798a9565722b8e0bdd9f8eedbbb4a34a9ca7ab") (:digest-test #h"ecf5d9e29c1c04c11a9503cc223d0cee4866fa26df2b4f7c1a017939718f545746c0f137c9169692194105b2acf001e2f0e70f2332517a20c05899644af454cb8e00e5363593dc83f78d66bd0670ce8faa7244ff28d0de59e964dc68d87a30ec0ce03e49a73ce07dfea2ad54fa667bdfbe2f2222894d830dde4dc9aee3caefa4088683d7e8b9a966" #h"a886eb94f15df208be122912d4edf02561482278a9f847ddc91c9bd2") (:digest-test #h"9f44357664b5e3a958780641cca52049f3b49f07484b5f762a5571f7c9541b4346f81fa416f04065a80003864754b3b54114a77a4938c8b21a9e4d3e5d59c9fccd4d68f699f975da099320ab655a7fb51328d2c6ff460b9b40858e99f88a35be7b6a97d6b4778af2c559e616ee608c32b018a753321e321be333bb6f618f666f9a7734ab3112859323" #h"8839f755eee84e15c586b52e29a41ddc640ac432cf31370680987a44") (:digest-test #h"c1aa1266f223c148bfa3d0ab29f278334d8fcbfbf0f4ebef5c1b7a766b415155e1ea75d0fe2546115411faced7a04a27339b6bcd62e740697d06ce3cd2e0f00238c44c1d9faa85efebbbb3880313108124c5f3277c1f03ddf430a4bb4d88b67b6e3f7f96fc39e5aa2ca7e11fd5d1300aca144c5166269a1168a2e53c01c00b872c63f6833e5ace09bedf" #h"439e3c7a0d655a30a9749afdefb7e048814335849df76d526c287727") (:digest-test #h"0a367d3789827ccd4bef5fe8eb78c20503241f07fb8c41d81e97fb53f3891962ca3c976395ac11d1f9ba7b20a52912e8e3ed92466ca5aa808166ade737ba8a0213e8fee8d67608ee9aed9e821edc9e575f1f07c3686169656ae09a0a0f70abd10cc31a8ef6e7496d56102fd8ff984e9a9f44e54495c966cf028f2a8423b46419de54541d9a08bd9654ac98" #h"40318036a595630e4135f10703be1d759a6c7e5146e0fc82abeba184") (:digest-test #h"8a05b00ae2d5f652f02f98a1b035003f8fa7ba1b17fc3778cdb1cae35ae1f768ea16ed05d25f515f75a23db468348911d4a749c51ce39615c07892318233a667c7f00e973fae98e7c8e9a8b7902480d87ac5bef8c4252661e6e8a2e4bd8a870fe83b1aa773ed5352b2abe193702c6dfb4aa8239e55ea6fc507a704e2540e23c917a01a1cb4420b07fb90ee2e" #h"9a26f054e57aea14242d7801f3d61ddca1523b738fc26fecfa5d9a6a") (:digest-test #h"ba6442c6d2139201dfef32c1ffb0ce92dd64091bd507c250595395e993d9a5124b5199640c2fe51482774b6a27d1a1751fe0d4fe5fd02dba152ed3c344fd9249af06da85f96f0bef0a8fefb1b501885b97f70dd842d12fa19befa03080c3d6b8ae2a0d13e2fc8bfc3fe1277ef0670cac0e52bb93c4344f6db13d05188d53fbc6106538f50ffdeda2e915fab921" #h"58470da58476bcb89450c521fc396c6dc51b9fb6465c979aba5f8eb4") (:digest-test #h"96fdb76f83bf12b3f4f322bf613fc38b2c8e0678856230418b6b062fb358488d6eed7c5c0656ec48c9bbf2da6a1473eea43faa68204f27239928172a3e49c52b58e861282c4401702337e5ce280aff00528eb26ac368db0cd0ad0eb262af226a9b16ef3bbd325614488f820363ca6ea77da4a7e8345554e57623732ee6326534819eadfe81c7f51d81ec51e1e3fc" #h"be92d4a6946de0e93d5bbe420651a8befb97cbdb5d63b22aaecf453d") (:digest-test #h"0eef947f1e4f01cdb5481ca6eaa25f2caca4c401612888fecef52e283748c8dfc7b47259322c1f4f985f98f6ad44c13117f51e0517c0974d6c7b78af7419bcce957b8bc1db8801c5e280312ef78d6aa47a9cb98b866aaec3d5e26392dda6bbde3fece8a0628b30955b55f03711a8e1eb9e409a7cf84f56c8d0d0f8b9ba184c778fae90dc0f5c3329cb86dcf743bbae" #h"98ec52c21cb988b1434b1653dd4ac806d118de6af1bb471c16577c34") (:digest-test #h"e65de91fdcb7606f14dbcfc94c9c94a57240a6b2c31ed410346c4dc011526559e44296fc988cc589de2dc713d0e82492d4991bd8c4c5e6c74c753fc09345225e1db8d565f0ce26f5f5d9f404a28cf00bd655a5fe04edb682942d675b86235f235965ad422ba5081a21865b8209ae81763e1c4c0cccbccdaad539cf773413a50f5ff1267b9238f5602adc06764f775d3c" #h"26ec9df54d9afe11710772bfbeccc83d9d0439d3530777c81b8ae6a3") (:digest-test #h"31c82d71785b7ca6b651cb6c8c9ad5e2aceb0b0633c088d33aa247ada7a594ff4936c023251319820a9b19fc6c48de8a6f7ada214176ccdaadaeef51ed43714ac0c8269bbd497e46e78bb5e58196494b2471b1680e2d4c6dbd249831bd83a4d3be06c8a2e903933974aa05ee748bfe6ef359f7a143edf0d4918da916bd6f15e26a790cff514b40a5da7f72e1ed2fe63a05b8149587bea05653718cc8980eadbfeca85b7c9c286dd040936585938be7f98219700c83a9443c2856a80ff46852b26d1b1edf72a30203cf6c44a10fa6eaf1920173cedfb5c4cf3ac665b37a86ed02155bbbf17dc2e786af9478fe0889d86c5bfa85a242eb0854b1482b7bd16f67f80bef9c7a628f05a107936a64273a97b0088b0e515451f916b5656230a12ba6dc78" #h"aab23c9e7fb9d7dacefdfd0b1ae85ab1374abff7c4e3f7556ecae412") (:digest-test #h"ab4f9d765085ccb474be6e2369568292532f6fa4dd9c50d02a7d8fab0fabb56a7f9680a2462c3753fafd3a252f9dddf1eb4a76835acfb59fc2a83441b8674f2995573697245e40549d2883f1d781a153b903e470f2f28e53e9646a66f7a5a7f0d5d9e6dd50e392be44867010c7ca77c1a5a2e1f00dcb82f589f759a1332b65c62766b9fa3483d399d7602a0969400642976e948d13243a8b89aa287ad5c230b47344d7783606aced3dfed86424abf7de77b026ce6cc35d20d1c500794332b0c1a1bc67dfc033c4c360a8a3aa5fd2f19d2db1bf3b807094b949900827e6438ef5991692b539d3c42227a6b362847e9d88a1b6855db7f58760d953690b26bd7258439a7f8409ae53137a3f2f14fa77a2a6bc0aa3bb7a19dd1c69554aae6c6703f3879057d3978c1a9d41bd3f492985aa0064f43fde2fa33ff6e1dfd4961e0aeacd4e3f412b4d35c0c864660d8779705a9c82bb824c405c54f429392e4da66ecfee7ef066139270ee9ccc83be5952ff5c84ffa8938f130cc52129ab825b6a5b585f01ebed13ce074c225f5b7d441cfc58c0c1039a2f127b3982ca7df546d4993027bd78ffb36ac08161063870d23f2df556b214" #h"d61f04985026eee29d0f9700f8c5aea32ec2c23b1a9357edeb2be20c") (:digest-test #h"1050e9023d6cef2477171a5af4875e12763dc68568ce1d9629e9eefda896b0a431bc3a5186e67d86324671a61afb5058558f03303dc4d98dc6907fbd0f662d6837b71d2b72b941835c6735ed8dc9734b6d75c68a49560182a7acf01dd7548fbccb4a7ad6296ca5e29d804d7874792eb367f6f7d9b40cfb3e7445296528e83e69957b399bd2870f6d9f9ba18ff893eb57ea1a7e66a66e3089d46412dd29aba2373c5442c29592e9ea07bf197941a011009fea43794605082a6f0f93cd032423ed69dd7d939b169a2280f59d80762808762d6d2e5abc58ecebee51947cdddc2a55c31dd3560c9b8addb04415eabfb137813eac285031ef4292f92ffd33e0591d35f31c2a5210a721e33fb4690045c508e977ad17a4cd5373e837b3b63a34256656a0e26cd0cdc4c7fbd64d810a30ebe275827ae59fb70be8b551e4a7d900c86b8073787f186e79e4ef1d184550a8ac2def071b7886189f08c1eecab9586cc8967a13e54d72194ee085bb1c9e19d48e521dad96baa417983ad3b76ed2fea2af4e0e2a31bc26f7cc2386596172afdc1bb7c71df59140dd7de8b554d7db14c704fa025d65b67b2f7a15b99ef0ab58e9dbc5b7ff40e7a191d6792d6c0dbde20650041f568722bae9e11fe833d02f5d2355e4b4fa7da3105c2c5504a7195eb0851ad32dbda2e72c4f87a7d9bf09e806b1117d85b6b6add56605e402af02a8c66ceacff439bbef1686f61755eba4bc9abb97f6f3dcf2ed38d6ec8dee29d0826be448603b73dc21c3b9b6d5245fa895636b70b9c6143a4b81d466bb91c08cd3e915bdeecc130c65" #h"5c029633dfd4cd9b6ce97e1d20783a41cd2235b03c38832b90f759ee") (:digest-test #h"a63ebf8f97c6529298e4d4b573ca01d65d6758837bdec40fa4367ce56953281d5225454d6b1fcaa2ffeb0c2fa45cdf8477a4fe83a9c7ad6f3b4f9c4605420f51fd513cf9b652f4dc27f08620aea1e10755d9f8c4537e6b8ed69b63f2ff58bd6d2e2a6c3a81471869975d0b319a834e877c700fef80ea4693fd8299925f7f7c9a6e189cb9d3e67e70d798630a6fe9702b76cf0bac39f588a6386c05cd2b9e92004483961eb4176e1a700b565235ba8d1cc960b4a2858677f110c1704c6d9c48c638d320102cc22f8fe91cacb1f4e0ee820089d27a6c865d990ce9a2b72c63e615d270033744cf0af6ca352cd1b542db84a0b42cdcf6db80c9b54d63b571dab4149bc2073c032647779cbda0577fc89b4a33488b6e2c6e29a791537bee43e9faec1a32f3c772af2e3ce61cceee5b5a78fd41adb7db15279f5b2a64b10baa78ffc4d726917f9753066a30b97e3c50e0b8c5504a78c9b9ee2c0e08e9ceb4ae6f0cc55b07a70d7cf8192c03fe7ae96642a4c9ea8996e121ac16e8b1489b9058b669162d3efe182987ada8e552899ea568843296d1d8ca5447a610afebdd48af365ee1d6315e49a4e90b06611d7203163ba027dd8b072c5aa924af8a385f83bbd5334bdc4a8e48f7047b6ffcc8febfc0a13fd1451debb13cb8d8ecc899e8ea857c2f7ec9f058bc2ac2440b40b9f57bac83ab5858f04cff015e09f0f3753f2514149ba2248a824e430ab001b4591fdee0ca2ae39e6cf2beb18201e292332ddb7183bfde7682d5a54cc3057ae0104391665c059a9ef9a597550c06eb2e3d7ab4a2b3e35b463f196a4cd78c9d4d472b3b462384a6e0002c31f4e361334efaee5ab18a4f411c2916444c2d8d9382649d858606ee2fece7503696f15ae17ad25072a5f24ab780a893dc53ad508307d1621630ec8d5c4b18d94b431d381e3b2d6aa787d21ee5fb245ad9693f1c9665f442984bbfa75684f98f1a044f45111773029e5e1111f4140531e496cb3bf3233704b0e06685451ff4394b" #h"c09d926eaef34cfacc701434da80c340337ba48e8b044b1a60da9cda") (:digest-test #h"0f625082eaee9f064f2501022e4d7df85310de128b17fd5a08db3e2d06b85dedaf446bf73cde13d55e8a22b4dcfc47187df216ce28c753234a456e5378bc4a4456504274b7976e3005642208e4ddb87f12d490079154542c0979810f68852316cb31e0e2a14137810d5b0ae58d195a95da5d53a30fe588de0c1f7f481d3e70cbd78d4a274303f72f3f18e13520d8b5c39c36678ce8a276a11dde71e8e00dbacb420d8a2de50635a26143afdfe5414f6f2206d4a864b4a6de025e5ed6f91a877dd458a6dacf7279423b847dcb247db2033276a2e1cd43a0fb84484efab08e624b5417a918486e4c77978152e125b366e5952eda1d6976ed626b44493c4c91d09c8cf198ce992234a93be536092f0cf17f13d58446827614797ff95884174a5bd9428f7de40bb7bb40f056312b8cb0dd377313a6435e6b9daa881082ba57e28a683f985f41e45569a47e7c4c2f82c6b2777f924afc457c115c4d30d0c65581e5b24bb547cf6c23c53dad018efd5a77f6a6fdf7775981d1f6f697024890594df51f2d8e3c75ed4a5774458a007d5cea332bb6ed36425993d7e22e2ef501ab714118afca461badf2a7af0dc2a898cf48f070721a8e9f14ea3987da5bdcff9213520397116da9f5413e57ce4e9034fdb8b6dcf8268758fbfda64d63310773585cae49ae0dba080d62a3d550d9c03a2c630cd712ba295556f5a59c905a7d464373df53bc64341e3d7b5e8f5b093e93a5707ac9867e7d7f6df9bfdc2a7b465e9c806d8889bee4d4cdb5f8efb7861425b008881a1d198abc87327a75f93f6ba5aaadde4fdcc4d0130437f85c2bf94ada9453bf339f3458f5edc861d0c54bf302b720bc127f1d02c12c2ae63e810ae6999b78a67ad476f013e8e2f953564ae65c09018e38387282c78bb54bfc7f60f2490ba0c658848859fcbea8cc6774e24c9de979dd29d06b560e6901ad00eea475d42df2a53676119b9ab7436175e6bb2eac9fb0304c0faf887d103597b1957d78214997cd7a73babfd31ddb40e3757e937173cd0f0bbce720fbc77a8e773e940218a7b6c68e432bcc913697f21ae9d384d4adf802cda1ba2472d5f81cbaaf901ba18e7816d8ae0bcabb4ca0fe830a6108bd945b92fb84d19ec983d6c8e2b11bcba4480547c27c02c239a51eec859fd12714711b46fb2ed395e8193d1a570cda1b091b84e1b274babbf38938458772cae9c18c63a736676912b7df" #h"f62851d28512913aff9f697fc17bf46fe4a2548899f29af5d0c412f6") ironclad-0.57/testing/test-vectors/sha3-256.testvec000066400000000000000000001106451420372057600221430ustar00rootroot00000000000000;;; tests vectors from http://www.di-mgt.com.au/sha_testvectors.html (:digest-test #a"" #h"a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a") (:digest-test #a"abc" #h"3a985da74fe225b2045c172d6bd390bd855f086e3e9d525b46bfe24511431532") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"41c0dba2a9d6240849100376a8235e2c82e1b9998a999e21db32dd97496d3376") (:digest-test #a"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" #h"916f6061fe879741ca6469b43971dfdb28b1a32dc36cb3254e812be27aad1d18") ;;; tests vectors from CAVS 19.0 (:digest-test #h"e9" #h"f0d04dd1e6cfc29a4460d521796852f25d9ef8d28b44ee91ff5b759d72c1e6d6") (:digest-test #h"d477" #h"94279e8f5ccdf6e17f292b59698ab4e614dfe696a46c46da78305fc6a3146ab7") (:digest-test #h"b053fa" #h"9d0ff086cd0ec06a682c51c094dc73abdc492004292344bd41b82a60498ccfdb") (:digest-test #h"e7372105" #h"3a42b68ab079f28c4ca3c752296f279006c4fe78b1eb79d989777f051e4046ae") (:digest-test #h"0296f2c40a" #h"53a018937221081d09ed0497377e32a1fa724025dfdc1871fa503d545df4b40d") (:digest-test #h"e6fd42037f80" #h"2294f8d3834f24aa9037c431f8c233a66a57b23fa3de10530bbb6911f6e1850f") (:digest-test #h"37b442385e0538" #h"cfa55031e716bbd7a83f2157513099e229a88891bb899d9ccd317191819998f8") (:digest-test #h"8bca931c8a132d2f" #h"dbb8be5dec1d715bd117b24566dc3f24f2cc0c799795d0638d9537481ef1e03e") (:digest-test #h"fb8dfa3a132f9813ac" #h"fd09b3501888445ffc8c3bb95d106440ceee469415fce1474743273094306e2e") (:digest-test #h"71fbacdbf8541779c24a" #h"cc4e5a216b01f987f24ab9cad5eb196e89d32ed4aac85acb727e18e40ceef00e") (:digest-test #h"7e8f1fd1882e4a7c49e674" #h"79bef78c78aa71e11a3375394c2562037cd0f82a033b48a6cc932cc43358fd9e") (:digest-test #h"5c56a6b18c39e66e1b7a993a" #h"b697556cb30d6df448ee38b973cb6942559de4c2567b1556240188c55ec0841c") (:digest-test #h"9c76ca5b6f8d1212d8e6896ad8" #h"69dfc3a25865f3535f18b4a7bd9c0c69d78455f1fc1f4bf4e29fc82bf32818ec") (:digest-test #h"687ff7485b7eb51fe208f6ff9a1b" #h"fe7e68ae3e1a91944e4d1d2146d9360e5333c099a256f3711edc372bc6eeb226") (:digest-test #h"4149f41be1d265e668c536b85dde41" #h"229a7702448c640f55dafed08a52aa0b1139657ba9fc4c5eb8587e174ecd9b92") (:digest-test #h"d83c721ee51b060c5a41438a8221e040" #h"b87d9e4722edd3918729ded9a6d03af8256998ee088a1ae662ef4bcaff142a96") (:digest-test #h"266e8cbd3e73d80df2a49cfdaf0dc39cd1" #h"6c2de3c95900a1bcec6bd4ca780056af4acf3aa36ee640474b6e870187f59361") (:digest-test #h"a1d7ce5104eb25d6131bb8f66e1fb13f3523" #h"ee9062f39720b821b88be5e64621d7e0ca026a9fe7248d78150b14bdbaa40bed") (:digest-test #h"d751ccd2cd65f27db539176920a70057a08a6b" #h"7aaca80dbeb8dc3677d18b84795985463650d72f2543e0ec709c9e70b8cd7b79") (:digest-test #h"b32dec58865ab74614ea982efb93c08d9acb1bb0" #h"6a12e535dbfddab6d374058d92338e760b1a211451a6c09be9b61ee22f3bb467") (:digest-test #h"4e0cc4f5c6dcf0e2efca1f9f129372e2dcbca57ea6" #h"d2b7717864e9438dd02a4f8bb0203b77e2d3cd8f8ffcf9dc684e63de5ef39f0d") (:digest-test #h"d16d978dfbaecf2c8a04090f6eebdb421a5a711137a6" #h"7f497913318defdc60c924b3704b65ada7ca3ba203f23fb918c6fb03d4b0c0da") (:digest-test #h"47249c7cb85d8f0242ab240efd164b9c8b0bd3104bba3b" #h"435e276f06ae73aa5d5d6018f58e0f009be351eada47b677c2f7c06455f384e7") (:digest-test #h"cf549a383c0ac31eae870c40867eeb94fa1b6f3cac4473f2" #h"cdfd1afa793e48fd0ee5b34dfc53fbcee43e9d2ac21515e4746475453ab3831f") (:digest-test #h"9b3fdf8d448680840d6284f2997d3af55ffd85f6f4b33d7f8d" #h"25005d10e84ff97c74a589013be42fb37f68db64bdfc7626efc0dd628077493a") (:digest-test #h"6b22fe94be2d0b2528d9847e127eb6c7d6967e7ec8b9660e77cc" #h"157a52b0477639b3bc179667b35c1cdfbb3eef845e4486f0f84a526e940b518c") (:digest-test #h"d8decafdad377904a2789551135e782e302aed8450a42cfb89600c" #h"3ddecf5bba51643cd77ebde2141c8545f862067b209990d4cb65bfa65f4fa0c0") (:digest-test #h"938fe6afdbf14d1229e03576e532f078898769e20620ae2164f5abfa" #h"9511abd13c756772b852114578ef9b96f9dc7d0f2b8dcde6ea7d1bd14c518890") (:digest-test #h"66eb5e7396f5b451a02f39699da4dbc50538fb10678ec39a5e28baa3c0" #h"540acf81810a199996a612e885781308802fe460e9c638cc022e17076be8597a") (:digest-test #h"de98968c8bd9408bd562ac6efbca2b10f5769aacaa01365763e1b2ce8048" #h"6b2f2547781449d4fa158180a178ef68d7056121bf8a2f2f49891afc24978521") (:digest-test #h"94464e8fafd82f630e6aab9aa339d981db0a372dc5c1efb177305995ae2dc0" #h"ea7952ad759653cd47a18004ac2dbb9cf4a1e7bba8a530cf070570c711a634ea") (:digest-test #h"c178ce0f720a6d73c6cf1caa905ee724d5ba941c2e2628136e3aad7d853733ba" #h"64537b87892835ff0963ef9ad5145ab4cfce5d303a0cb0415b3b03f9d16e7d6b") (:digest-test #h"6ef70a3a21f9f7dc41c553c9b7ef70db82ca6994ac89b3627da4f521f07e1ae263" #h"0afe03b175a1c9489663d8a6f66d1b24aba5139b996400b8bd3d0e1a79580e4d") (:digest-test #h"0c4a931ff7eace5ea7cd8d2a6761940838f30e43c5d1253299abd1bd903fed1e8b36" #h"dc5bebe05c499496a7ebfe04309cae515e3ea57c5d2a5fe2e6801243dd52c93b") (:digest-test #h"210f7b00bf8b4337b42450c721c3f781256359d208733846b97c0a4b7b044c38dbb219" #h"3305c9d28e05288a2d13994d64c88d3506399cd62b2b544213cf3539a8e92e2e") (:digest-test #h"3cb8992759e2dc60ebb022bd8ee27f0f98039e6a9fe360373b48c7850ce113a0ff7b2ae5" #h"3c00bf3e12ade9d2de2756506f809f147c8d6adc22e7bb666e0b1d26469e65a5") (:digest-test #h"22634f6ba7b4fccaa3ba4040b664dbe5a72bf394fb534e49c76ec4cdc223f4969e2d37e899" #h"a87e5c78837d7be0060d8f5eda975489ec961b28d7088f42a70f92414ae17793") (:digest-test #h"6e1dcd796b2015ee6760f98fdb40e668b2cf38b05c91f6a91e83bcc8ac59f816f90a59d64e8e" #h"746bf845c08aa186b5fe1ca35528232c4a491a3a2a32cd23e990bc603f3268ae") (:digest-test #h"ee0be20320f9d44073281265a6e9fa6b9d252495624b8d016b8ef57e1b4e859d8ad3b50b89416d" #h"a3257baf14ca16e1137dc5158703f3b02ebc74fc7677165fe86d4be1f38e2f7c") (:digest-test #h"8ae2da242635b6568289bf6bec8a438dbac1f5b4d50a90bb7449bdb92a59378e23452dbcabbbe879" #h"e25c44802c5cf2e9f633e683d37aa8c8db8a0e21c367808121d14d96c8a400b5") (:digest-test #h"bdd0252dec5b798ef20e51791a18e8ca234d9bfde632a9e5395337a112dd97cdf068c9f57615424f59" #h"e02c1b197979c44a5a50d05ea4882c16d8205c2e3344265f8fe0e80aed06c065") (:digest-test #h"c4c7b6315cb60b0e6cd01ef0b65f6486fdae4b94c6be21465c3a31c416ad2f06dcf3d6eae8eecf84ca7a" #h"2da21867cd6b5402d3caff92a05fddfca90199fd51a94a066af164ce3d36c949") (:digest-test #h"b17977aced3a1184b14b0e41a04dd8b513c925ca19211e1abdc6c1b987ac845545fb3b820a083b4f7883c0" #h"f91b016d013ede8d6a2e1efd4c0dd99417da8b0222d787867ca02b0ea2e80e45") (:digest-test #h"f65c3aa1d9981a84e49fc86d938f3f756f60e3858d5e1f6957dd4d268e28d68e90ba9a11d7b192d6c37fb30b" #h"3acbebf8eda9d3c99a6b6b666366c391e8200d55fd33ad8680734def1dc7ae85") (:digest-test #h"49abba1fa98f3c4470d5dd4ed36924af4a7ad62f4c2dd13e599238883ed7d0cb95bbaae58b460332e6b7681446" #h"02bcd9ea4f1aa5276f38e30351a14a072bc5d53a52d04d559a65ca46f1bcb56e") (:digest-test #h"275645b5a2514fe65a82efac57e406f224e0259677674f1d133f00a5ee9a6d1a8fed0eadbbff5a825041d2a9715d" #h"c70a874d786cd0f3f09fa4dc1bb8f551d45f26d77ad63de1a9fdfb3b7c09c041") (:digest-test #h"cd02b32107b9a640fc1bf439ac81a5c27d037c6076e1cfe6ad229638037ac1550e71cf9557c29c2fc6017afd5a8184" #h"36c73d11d450784eb99af068cd4e1cbc5768c8a2118010aceec6d852dda80d95") (:digest-test #h"5a72e0e1aec82a6541f04883bb463b0c39c22b59431cfb8bfd332117a1afb5832ce5c76a58fcf6c6cb4e3e6f8e1112de" #h"90fc3193552ec71d3315ebbb807913afd4cd2f0833a65e40d011d64de5e66513") (:digest-test #h"43402165911890719f9179f883bbbc2a3be77682e60dd24b356a22621c6d2e3dcdd4cb2ce613b0dfe9f58629ee853e0394" #h"5c4b6ceac9441defa99b10b805a725d4018b74b3e1f24ad8934fc89b41b8fd9e") (:digest-test #h"fc56ca9a93982a4669ccaba6e3d184a19de4ce800bb643a360c14572aedb22974f0c966b859d91ad5d713b7ad99935794d22" #h"e21806ce766bbce8b8d1b99bcf162fd154f54692351aec8e6914e1a694bda9ee") (:digest-test #h"ace6297e50d50a11388118efc88ef97209b11e9dfcb7ad482fc9bf7d8deecc237ad163d920c51f250306d6cedc411386a457c7" #h"f5581403a082bbf5ad7e09bdfccc43bf9683ebc88291d71d9ce885a37e952bd6") (:digest-test #h"3bad18046e9424de24e12944cd992cfba4556f0b2ae88b7bd342be5cff9586092bb66fac69c529040d10dd66aa35c1023d87eb68" #h"faed76ff5a1cd99183b311e502c54e516d70a87050cf8961c8cd46f65c1358cd") (:digest-test #h"e564c9a1f1aaf8545a259f52c3fd1821ed03c22fd7424a0b2ad629d5d3026ef4f27cbe06f30b991dfa54de2885f192af4dc4ddc46d" #h"811529c600c9d780f796a29a6b3e89f8a12b3f29c36f72b06cca7edc36f48dc0") (:digest-test #h"6043fa6465d69cab45520af5f0fd46c81dbf677531799802629863681cea30ffa3b00836fbf49f87051d92aaeac0ed09bcb9f0755b7b" #h"b0fceecdaef6c76d5fc3835b523ce2416f4a9b9bd1f90234445df0f2b689f2f5") (:digest-test #h"2040c538c79237e6f2b8188c6375ec2f610ac2301607b9c23660c3a1e1c3a902cb2950c59aac3af28f984f6369c4debe8623dfa74c967b" #h"e33dbdc0acc23fcfad3c759c4333410bd3a40efb1366ade157d2c81d65a0a6c7") (:digest-test #h"00ff6c96b7aa3cf27d036cf20af7031434113252574bda9cf9244d85aef2593d3a7a83bff6be904b75164a1766828042bc3f4f090d98a03d" #h"d000eafca34815783bed9b050c6901c97f2e77d4771a0ed724dd8f6ff1448791") (:digest-test #h"e8df14936cce118139e690f1662f88cfbc9c333b6dea658c02cb1d959644592842542fd9d8d61a04d4a892128f0ddff7b6502efffbabe5cb0a" #h"3479a9617a3adca35854c08fe987c2fe7ff2b01b04f2d952c107b3f066420551") (:digest-test #h"4ed981a31f70dd6b70c161be1f01fc1bba54d06d9494e7eb194e213d5e0e71e0fddd49cb1f075353da22624cbe4ba871aab32906e45b6fbb691b" #h"9c824a00e068d2fda73f9c2e7798e8d9394f57f94df0edeb132e78e8a379a0cf") (:digest-test #h"7802b70c6158bc26d5f157671c3f3d81ab399db552b9f851b72333770348eb1fdb8a085f924095eb9d5ccfd8474b7ba5a61c7d7bcde5a7b44362cf" #h"fa9726ccb068c0adb5d20079c35a318b3d951eb43b196c509ab790b7e9202207") (:digest-test #h"ff83dcd7c1a488e5a128d5b746284552f1f2c091615d9519f459bc9010ca5e0ac19796c4a3fd7a15032a55a1410737d07855b07f61fbd8f5759e9218" #h"8bd8d494a41acda4b7cd2994badaecff0f46ba2743458f6c3fdc0226f9492ede") (:digest-test #h"afd4764cc7d5de16a3cf80c51d0c0d919f18700c7dc9bc4e887d634fe0a3aa94097d590e4123b73f11ccb59e23496a3d53d2bfa908056c11c52c23abfb" #h"e9e3b3da648cf230f1973f3814eb81316d2a496826ea39adf4674576f97e1167") (:digest-test #h"6fa6de509719ffbf17759f051453c0ac3cbe13346546bbc17050541074b034af197af06e41142211ee906a476039b3e07d6cb83a76aac6fca8eac307c034" #h"766630993fbb651fd8d3603e3eebc81931fb1302a46791df259a6e13ca2cba9f") (:digest-test #h"93cbb7e47c8859bef939155bea488090283ecf5023d99767c960d86baa333af05aa696fc170fb8bbac1e6473956d96b964580ee6640f0cc57be9598e55fc86" #h"d3212abca1100eb7658c0f916daf2692c57a47b772ee031c4ec6ad28a4a46de9") (:digest-test #h"67e384d209f1bc449fa67da6ce5fbbe84f4610129f2f0b40f7c0caea7ed5cb69be22ffb7541b2077ec1045356d9db4ee7141f7d3f84d324a5d00b33689f0cb78" #h"9c9160268608ef09fe0bd3927d3dffa0c73499c528943e837be467b50e5c1f1e") (:digest-test #h"4bef1a43faacc3e38412c875360606a8115d9197d59f61a85e0b48b433db27695dc962ed75d191c4013979f401cf3a67c472c99000d3a152227db61de313ab5a1c" #h"8703a1f7424c3535f1d4f88c9b03d194893499478969fbb0a5dc2808a069ab8f") (:digest-test #h"f0be5e961bb55b3a9452a536504f612a3e66aec8160a882e5156eb7278433b7ea21de31e39383d57fcdfb2fb4a8d227a9d6085fb55cad3abb78a225535da0e34efea" #h"2fa180209bf6b4ad13c357d917fabb3e52c101a0cdb3f2299fa0f7f81dfb848e") (:digest-test #h"206f1c36ba25aea73398fffc9b65c4637cc1f05a6bbee014dccbd61e3b7aa9423887bbac62152a4bf73a4b7afabe54e08720589464da7985d8e6591ac081d115df2fe6" #h"558ea7c800b687380cce7e06006e1ebe0b89973f788c4caac5780f22dbf382e8") (:digest-test #h"8cd71434c00663f3bda0205508a4a266548dc69e00ca91fde06d165b40279af92674f75bd8133e5a9eb9a075c9068f68f4b820008a1fb42d89d1d759859e68f8efc6fb60" #h"085b343b08516f320a9b90fe50440a8bc51ae0850fa38d88724a4d6bd3df1ad4") (:digest-test #h"4cf5bbd91cac61c21102052634e99faedd6cdddcd4426b42b6a372f29a5a5f35f51ce580bb1845a3c7cfcd447d269e8caeb9b320bb731f53fe5c969a65b12f40603a685afe" #h"f9dbb88c5bb4415e17dee9222174538eeab371b12d8d572cfdf55b806e3158e4") (:digest-test #h"e00e46c96dec5cb36cf4732048376657bcd1eff08ccc05df734168ae5cc07a0ad5f25081c07d098a4b285ec623407b85e53a0d8cd6999d16d3131c188befbfc9ebb10d62daf9" #h"3571326a1577c400b967ac1c26df2a0dcf5db7070eac262a8071da16afa7c419") (:digest-test #h"981f41a83d8f17f71fc03f915a30cd8ac91d99aa1b49ef5c29fb88c68646b93a588debcd67474b457400c339cca028731df0b599875ab80df6f18b11b0b1c62f2a07b3d8209402" #h"62aea8760759a996f4d855e99bcd79e9a57ea362522d9b42fd82c12c9294a217") (:digest-test #h"5c589fc54fefc4d6e2249a36583e1992fc6b8a9c070e8e00c45a639af22063e66ae5cdb80238c82db043a5e1f39f65626e6d7be5d6a2d3380fa212f89211200412e5e4315fc04e40" #h"18deba74e9d93ae7df93c6c316ef201bf5e3a661e68868e14d4f56264f5d858c") (:digest-test #h"7c8691e7b2560fe87fcc5e2877f7e3c84d9101eca4818f6322a58986c6cf05627c0d6919ef2edc859f81fa1f33e0cc1f10edf7e52a9c33981af2ff0d720c94ea4d62170b2a4d1224fa" #h"5a5a438b57c1b3ce8756094252362afeaa9fc91cd45b385d16994ec8af49aa6b") (:digest-test #h"97359b564b2bc20800ed1e5151b4d2581a0427ce9539d324c3637cfb0e5378dc2cf6d72946e2a3535a2f664ede88ed42a6814c84072b22c43de71e880a77c2d9a05b673bc15a82e3255f" #h"be54f2e435f760d5b77c0ae61ef0aa7f5f3366f47819f350dc8a39aff8c73a8f") (:digest-test #h"a0dfaecd3e307c5ddf9a93603f7e19725a779218734904525b14586ff0ce0425e4efe7e1c06e745c28ed136f6031c4280fd4061d433ef700b6d1bc745064231fecf387015f94f504b6ad8c" #h"60d80f1c703dad5da93db222fb45fb7fa768c8aa2787f4b81f1e00365b8f49e2") (:digest-test #h"568d66d061306c3419a1928ce7edc8e3400c30998f09bdac6f63ff351eb23d362e8dc5927eac805d694ac9563dcd7fb2efa9591c0d827af9f39146f0424873aa8e3963d65734b1713baf0a44" #h"7a4fe37f296991121792dd7c2c30390725a1eebbf20b766a5a1c3c6c3646d996") (:digest-test #h"d65b9f881d1fc7f17d6dd429faca8404e6ce60fba7d89b7fba003c8ef84d8083182979327611fc341291ba80dc70ad3b2f28b6d29b988445e7fdb7c6561f45822ac81dbf677a0b27d961dc6358" #h"51cc71b6934afcf28fa49942b76323f36cd6a0aecc5a0e49c10994ddcabdbb80") (:digest-test #h"711c88adf13e7a0e694652f2b9a397543f4937fafb4ccca7f1ad1d93cf74e818d0fedfaee099f019014ec9e1edfe9c03fdb11fe6492ad89011bf971a5c674461de15daff1f44b47adad308baa314" #h"1780e52e306858478290c46b04d8068f078a7f6ad8e3790a68fc40dccfbdadc9") (:digest-test #h"f714a27cd2d1bc754f5e4972ab940d366a754e029b6536655d977956a2c53880332424ddf597e6866a22bfca7aa26b7d74bc4c925014c4ed37bfe37245fa42628d1c2ee75dc909edc469ee3452d894" #h"f4afa72f3e489ad473dc247aae353da99fb005b490e2c4e1f5bd16a99732b100") (:digest-test #h"fe0c3280422c4ef6c82116e947da89f344d6ff997bf1aec6807e7379a695d0ba20ae31d2666f73bbdbc3a6d6ac2c12dcfb5a79173dfc9cd2e0d6000e3114f2767edec995772c6b47dadc136d500251e5" #h"89198e2363efd4e0ba7a8a45f690f02712e6f856668517bae118d11e9a9dc7cc") (:digest-test #h"02e238461d0a99d49c4cd16f442edf682c39b93114fc3d79f8546a99e5ead02f0cfc45081561da44b5c70eb48340418707fd6b2614580d5c581868ba32f1ee3ac34bf6224845b32ba7f867e34700d45025" #h"abef81b33591eedcac0cf32fb5a91c931f2d719c37801409133552170ce50dbf") (:digest-test #h"fb7c8cd4031007f8159d5c4c6120dee6777a3ace0a245b56f31e8aae7828dab3cf35c308de1d0d684592ef3a9e55796603a92f68d109f7a3ac1635f7c4d334955614c812753431bb0a0743291a0fc41547f3" #h"5a67284d39e4f37caa64ca1a54593c35f6d8f3a3ec20d460393a39f6f57c4486") (:digest-test #h"6b2e868c7d0ee1c240d3a67e2fdf36e8e23817c02644a54453d10454da5859d41e833a5285ec63e8ce28aa64a50435a7740eea4b7d5827892678b35993d3f5da7a1c64f533173f3d0fa37e1aebf70827052c26" #h"aecf5dab6fea9ffd1bce2cdfeec0bee9d214a669e8306d5b6688afa8957fc91f") (:digest-test #h"e5f3ba000c43bb6aca4e0a711a75912a48241cffa5b4b0b17f901f9e5097d94036c205f7a307d008567d05e58ac0dfaf6d971bf9d3d450cf2c7c83f6b328f676e9ab425642f5a5a71e389dc4fa49b6d7e848a09f" #h"182d6e4316f4bc18d7163b1b21462d99f99c6f34d2c00ee771ce54fd6c5018b9") (:digest-test #h"939c61e68af5e2fdb75a2eebb159a85b0c87a126ce22701622f5c5ef517c3ab0ed492b1650a6c862457c685c04732198645b95f84ccb0e726a07ce132827a044dc76b34d3f19a81721f1ea365bc23e2604949bd5e8" #h"121057b0b9a627be07dc54e7d1b719f0a3df9d20d29a03a38b5df0a51503df93") (:digest-test #h"9eadaf4811a604c65eaa7b1c6e89f2c0ab96bebec25a950ba78aac16d9371ca1e7458acf331e077ef6a735d68474ab22d2389bdf357fb2136c9f40e1e1eb99592c2bbb95d94931016b4d37faa08b1e9bf71bf2d3708a" #h"c237194b902e48dca5bd096cb51562079d0cdccb2af8088197676c17b0896be2") (:digest-test #h"71dcca239dced2ac5cc49a9bf9ea69a99be22ba62216716b524db80f337dee5eb7e032869e4adc1497babd1fa82fa8c3cfbd30d2eadfb4c5d40f99f9d194d7182c9cb7d41e8adbdcf2917e086782fdd756e2961c944070" #h"377d1cffb626735810b613fd31ef9bbb4577cd752521abe3a41afa921e623da0") (:digest-test #h"ea130d3236bca7dffb4b9e50e805309a503e7347227aeb9f1bd15c263a98dd65753d2eedaa734b9ad88f41158f32419ca529f3062b910c019f3f239f635fc1116e5ab7b242feb4471ed9168474e501d39d6bae52cc21061a" #h"85c7a52d53f7b41162ea9f1ef0d07c3fb8f0ec621617f88cb3828ebe5388ab3d") (:digest-test #h"28f1be1156792af95c6f72e971bf1b64e0127b7653ff1e8c527f698907a27d1544815e38c7745529bc859260832416f2b41cd01e60c506239a7bf7553650bf70d1fe7a2c1220ac122ea1e18db27490447d8545a70bf0ffc8fa" #h"b2eb3762a743d252567796692863b55636cb088e75527efd7306a2f6e3a48a85") (:digest-test #h"c8400ef09c13e8acc8a72258f5d1d20302c6e43b53250c2f6c38ff15be77e3cac04d04b8421fc8fdff8be5ca71edd108e9287b42dea338bf859100eea376da08a0e695f0dc90b95e467cbd3c2a917a504a5ae01c310ae802c4bd" #h"69966e89b7bc7f39cd85791b92180ff3fed658d8240e393e1e6d7c24b8d0ac95") (:digest-test #h"a48950c961438e09f4d054ac66a498e5f1a4f6eabfde9b4bf5776182f0e43bcbce5dd436318f73fa3f92220cee1a0ff07ef132d047a530cbb47e808f90b2cc2a80dc9a1dd1ab2bb274d7a390475a6b8d97dcd4c3e26ffde6e17cf6" #h"44c00cf622beca0fad08539ea466dcbe4476aef6b277c450ce8282fbc9a49111") (:digest-test #h"e543edcff8c094c0b329c8190b31c03fa86f06ace957918728692d783fa824ba4a4e1772afbe2d3f5cba701250d673405d2c38d52c52522c818947bcc0373835b198c4cc80b029d20884ac8c50893c3f565d528a0cb51bf8a197d9d6" #h"6d5260384f3cefd3758fb900dcba3730d2b23cee03d197abeff01369dc73c180") (:digest-test #h"4e10ab631718aa5f6e69ee2c7e17908ec82cb81667e508f6981f3814790cfd5d112a305c91762c0bd9dd78e93ef3a64c8be77af945b74ff234a0b78f1ed962d0d68041f276d5ea40e8a63f2cab0a4a9ed3526c8c523db7cb776b9825b4" #h"d88e5f3b2d0a698fd943233760a3000a3360d9040e7374b22e39ea58d868102d") (:digest-test #h"604d8842855354811cd736d95c7f46d043a194048b64bf6cda22c3e0391113dcc723e881ae2ad8dc5740aa6bda6669ddb96bb71acd10648380693f7b3d862c262553777004bd6852831618519fbb824759f4dd65af1b2a79cc01096d7c8d" #h"8a8ab6cf5c02b9ae8f4c170740eff1592f3eda11d3420ac8b421d93cfbb35db8") (:digest-test #h"628180e14f41ebdfde3b4439de55ee9cd743d41040f3457ef2280370dd659619fa0ce69580c709725b275a6eda8bcb82a8447c20fdf68cba15412f83e2a10079fe9399a3e3fa61975ec0a64041c0ecde59e4844e9f8a608cb22d2576854182" #h"8d154bf6f9cb72efc0d8b3927a8f690060d1d48bbe5cc72094d2c8b149a75132") (:digest-test #h"fc150b1619d5c344d615e86fca1a723f4eeb24fbe21b12facde3615a04744ef54d8a7191a4454357de35df878cb305692278648759681919d1af73c1fb0ff9783678aec838da933db0376e1629fcca3f32913f84bc2ff3ffc3f261d2312f591c" #h"3f626c8bb20a132495bd3022b3fcd0ce0604b91a9d70132dab4099f73dde23d5") (:digest-test #h"6dadbecdd15e5646e3f37a6fe5b328e06113cce3c8cf07285939afba44d117321017902b3a9d2ff51f60d18e1b585dcdf34e49e170ee60fa4d1dc246548d2c1fc38e7983f42769c43d65a28016f3f4d479ebe1cd8fec5d1f886dd21aca5067d94f" #h"9098ea34c40b541b153e80a8bd92da19432b18b7d329760b302f8a54c395dd06") (:digest-test #h"9cc5fd3035b72dc63b8c3c326fd013081e6b8716f526d3fe176b45256d4c37cc3dc8417dff49ada96c702b8fd715c65fc08a17a0a720b9cf1eedfd4922ccde6baba437f782ee33b95371056b0350dad743470c3b663299f16fcfd34f6fc459cd0ee4" #h"b0c04f24bb6d3d4fcbfdf9222d0e886f1eb60a0566a478085f7623a025a5b981") (:digest-test #h"f3f063fbcf2d74aa5a02d240c962ed7bb119b3a212bdb41594e28428108e613152ed16e01e451fcf702b0e5a08f82eb12677652b93e05fdee00ae86cf2dc9a1fbf05b93952ec5b8515eacc324fb830e1ec236afd7d073d4b7f7ab1c2e048b99cbfa012" #h"f930d79360b581b1bbfdeac57133a339444f5c44538c921631eabaf058277d32") (:digest-test #h"840739a3d6992c13ec63e6dbf46f9d6875b2bd87d8878a7b265c074e13ab17643c2de356ad4a7bfda6d3c0cc9ff381638963e46257de087bbdd5e8cc3763836b4e833a421781791dfcae9901be5805c0bbf99cca6daf574634ec2c61556f32e642730510" #h"19795657e08cfbb247a17cf209a4905f46e4ddf58eea47feee0be9bb9f5c460f") (:digest-test #h"4a51b49393ab4d1b44fb6dc6628855a34e7c94d13b8b2142e5d5a7bf810e202cefdca50e3780844a33b9942f89e5c5b7dd6afb0a44541d44fb40687859780af5025fecc85e10cf8249429a3b0c6ff2d68c350c87c2fcbf936bd9de5701b2c48ce9a330c9ee" #h"128fb4114e43eefd19277c708be9e6873e66d7fd59c58a1485b7b015facfa795") (:digest-test #h"afc309e6b7b74dfb0d368e3894266fc4a706c3325e21f5550d07a6560e3d9703c134ca6ad078e4a7b82ad6fa85b0bc1ddcab05d43f29d5c58d1da78ac80c37051b089ff31ce2c0c44e9ce3abea1da0f1df28008e178fdefafca493413bf1d256c729d0a9225e" #h"03e782b01a4ba10f640470bb3cae487eb9cbbaab8c9941978b194f6a312cf79e") (:digest-test #h"c5ae750f2230642092397b84ad5526c46ae9480ada16892816e0f2db7690b751035653ea2f33da3cc4168b591b46a5548eff7d012f60ccfdbb854deec9f0880c472de8e127b5144c56147cccee4732fbac68fc59a48da74b33ed9e643644bbe279795c7c737eba" #h"f64b7ab243ce6e6c04b483888ba8a655465c21d95eb60c7b8d6e566a3811bae2") (:digest-test #h"603e13f61499e12ec6b33b68847a281d314f54dc705c0f3fc428981ff5689c04b519fadf83cbc9fcd0409c326035045df480570e265bb080940037ce4076a36437aafdb371c1a62af9ad9b614dfef89708fbbb5ebef2cb9528cc399781e4c5b22f1aa4dba623809f" #h"5f76962fd3d373e5db2953c0823a51fe81f874450bedf7e46876394b04d3ef66") (:digest-test #h"e03115cfa19efcd796da389063c4be6acce684d983f8edfb3da6887b0b94fbb5e89e3a1a8e64fdd68f0670b1a02c2c33384a660c5a2266b3ae8a3b4cd76faecf011a7467b9b2a818020278a5a57d1eb1c87f1224c2d67dd02e81f1553eb75841532c2b7cca8fe5e418" #h"d107ee6ee4a58871a33c49657faa2573e475f11918c4a4e3801d0e17fb93c6e3") (:digest-test #h"0e6c1d58b1b9d3a2d399aafd60529e07d483a2755bb7e44c373b5355632d5fca76d6ff56c93af93ddcec5ed6f62753420c1b1758e48542df7b824b00a3a54dfaf0470b18d51e31e10b12dd8e324b5dc1bb8f3b7305cb762ec6ef137dadffd4a2466748861d9004f626b0" #h"02ab2dbb02944354799051247b1a25c19f3696e1afcb502b859e83798b33fd77") (:digest-test #h"6db2a43a229b10c3629249fc5136468b4d84df7b89ec90ebf7aa7a036c53aa2dffae9e81b2c60580543dc706a5e3457abc87e248a60ec29150c2d221a6ec08a1fda4ec0daee8576904ec7ab059b1230e7bd93c4e55ba9496cbb1e352e5b8086e303b94c861288ce53c466b" #h"8cc4d39b2f5ba0bc9d2ee2a8777cf08533e60cc69b65a7b31c5c2121193aa31e") (:digest-test #h"31d995f7ff8b6de70829a8336c610f10df2c866107a4922b25151849f8566861df5a79163d02767f21357ad82733997899261f03dafb1ce1056f20efd16d4374b89768565823c38e19e899d910b847b023f1867b6e4fed02e604b8243c0bc7cb05b9ea1f17955bfa36698c9c" #h"c99c7191b34c9ad3f941d4ad442cc865205cbb4c2a6927c592e831cbc4d36fcf") (:digest-test #h"cb0b8cb7de621c8e0a0fc6be2fc18d0e8818a2c2dd0b3219fa87831a61583f903c4d105495976ccac973b3ae3a09771145931a9e74c19f22f45cba4c492b29b1401347122581dfe2370d3e0359578cd10a355c619711810a8f8c232578671312c0a45c7cf7e81bdd3b249044f3" #h"6d2f57a7e42b35369cf2cd60caf9e65aca7d9aa019e6824bb806348f1acf3c7c") (:digest-test #h"48dff78aed5f6e823054924a78dc1b8e51a117f1610181529f6d164ebf0f6406f0b02422cad8c916823759a361437ca17423d3fd84cc8afe486a31ccda01c732685418a32c064a7b9effb288e811ecc99adb2a759feecc3f702f31d9877dcdb717937c15fa2f163bea744400f58c" #h"14b631f0f00a3024ad1810dabf02711e28449668abe27f69380942268968d4f6") (:digest-test #h"06cc9fa542ceb35c88fb6ab82c29d5dcd530f807d3f1c3bcb3974421101d1aa6ac112de6bf979cd28eb0f70c40bcaf91ed3eca9bf9e0dbc6a0b73271d1c7506740ca9ebfb72d5e00ac5ce189193ffa308804b42a6d20402bb99031cdac65ec36eb7f59f5d299df2e0b8690f760b9a0" #h"574fd82a9fceb8f7bbbf244d16e0412cbda8153b720846c32b8f10fe5779a881") (:digest-test #h"8d93627c0b7cbf61a7fe70e78c2c8ed23b1344b4cfed31bd85980dd37b4690e5b8758f7d6d2269957a39a1ac3451cc196696ae9e9606a04089e13456095a1ce1e593481b3ac84f53f1cb10f789b099f316c948398ad52fa13474bdf486de9b431bd5d57ef9d83a42139a05f112b2bd08" #h"344ec86642eabb206b2fd930e4c5dde78aa878577d6c271cb0069d4999495652") (:digest-test #h"d0af484b8be6b41c1971ae9d90650a1e894356c9191d6be303fa424f2b7c09544ec076a0f1865c8c97927ca137529d5bedc0df2ef08a4cc7c470b094b1eeaa86731c041633d24086b60f7369d59c57652dec9b3817477df9db289ba020e306c9a78a99b539128992deb23cfc508c5fc3af" #h"b7ba998726477c32792e9c3eddc1cb6feb7c3933e49f2e7590d8ce7a2113e6f8") (:digest-test #h"b212f7ef04ffcdcf72c39a6309486c0eeb390ff8f218d6bd978b976612f7f898c350e90bd130723e1126af69295019b4f52c06a629ab74e03887020b75d73f0f78e12785c42feb70a7e5f12761511c9688c44da6aaa02afa35b31edc94c3a0779b6ab9462525c0ccfba76986f873fe1e6ba9" #h"2f26b96c1fa3f3dee728f17584e733b4189821c659b8885a5fb1d12d60d2aaa9") (:digest-test #h"86591ada83fba8175a0fe91d264e7f9b2df97ee4c32570e76b579d6140508951932abdadd6a4ca53b8bb8c42927aac0a02126881d52d97b82b80e72dd59f6a42021651ee1bb5f7b3eb2b21d003d784b75dda87c13f714b216282e8175474fa661b445d071bd5341f3a88302f410d0f8a857962" #h"e3edbc8c42ce5d2384dfb24fb1de5d4798b1bc3cc78c97033894040dfa6feb6c") (:digest-test #h"92b5a8e84b6a2ac4d5b1e61d63804abd641dd630058ec6d5f752f135724ef1947a0a84c6611d32448de6307f7b7d857404e96b81df94f87768fcfdf09faa2fe37468847542afe012995ff1bd40b257a47a7309f8896bf4fb711de55bfeb3a8be0837729ef6067c578182f17ebb080a754f22773c" #h"80ed0a702812297c2aa1b6b4b530c2b5ed17ecfba6d51791cf152d4303ced2e6") (:digest-test #h"d284a0a9a4de5d4c68cc23884c95ad7619aa39b20a2cf401deaeb3362c3ce356f79cc3fa82d3d1f565ec8137e1f435f171496afaa1152f722315dca5209f0031cce39b6c3d718e007dfb4fd8de5ce1408dda04476aa8a96817afa86a4f8fb5857ae091c67ebd7db5d783f434ead699aa96e56f610d" #h"654eccefd0a4fdb2ac0ab56288c64399b37bc4d57ff4a9f1cce94362fc491bda") (:digest-test #h"f57f0f8795385b805246a0a2573afc274346a9eccf50c626b0455a50bfb09668578b5a5afe54fbbd486444bdf97dba586aa224ce2e2b4b52f418ff06afa65a26f5204983a5f84734cd166c88cb70a73fb2db48f9ef20c1ee2c53ade07460114e98e7e2ebd24ac84ea90422eb143c4a42e2991a565959" #h"135ec8b144a667dceae8fadd287df81c10ef3ebef87ff2fb56e60ae708a88f3b") (:digest-test #h"2a41a52e6578873588a57f11f1be7c7eb398d01f3bfdec2c33fe6b65a68a534a6540978daa82e0c8fccb8c6c5242f7f97b8ffa75bdedb217bd8083439eea5cbb6d193c13bd62f5658ed4304774c6b1faf5b3dce432487840cabab415fb5d67640a739ca6e5414e760869708a9d7331e7e7ad7d55e035c7" #h"a6a1b8a26f6f440f19f16dce1d3001477d73ee7f6c374bce2922167b81970d6a") (:digest-test #h"4d11aa5d3c6b6900f49ff90dd815744572be5648b64bde638b9db7a9877dd745fa8ea80e2f7f655cee85c71a4509e21d899e49b4973579815f947587a404ad83fd4a248020d9d2a65f46485373fc926d793161f63a196ae0af590923c5be2a0e5d2f69da97e0788550c9c1dee9574ddc4a61e533275d7729" #h"fc5159f0ddd6d765c85fcc3fc3ac1dc0d317d8ea0b110e96ac9f7a398dc386c5") (:digest-test #h"05cd99bfe031d123ca7061d3de0956f4bbf164bad792db881713d6599ddab55ee24fcee804e360896152c8766424f8309f7a24641a07be0feb5da5e5076a9af45842f385101f93433ca5199f9c6b5872b2b808e4198aba8e18dd12db772930b4912d6f5cabeb529884f4bb142de55e021b3276047b22b64cc5" #h"8aa07742e6f1f47ad020ed6684edc8dba4af36b782955f0f972be3ae980aea0e") (:digest-test #h"529684398d68bdc19e7a00ce32cc1a8c1315b97f07137474f61f0cb84a04f2879b1109c78c6dacf7f0abf362329e3298f36fc31ef4ec06653723a5f961301dfb63537ad15946611cb2cd54ea928e322e7423fd6d146ee0b98c2c71e3bdcd33edf0845fbebd9ae4192d07acd01b432135e05af0d22f3f0c5a3d62" #h"a07049b6ebd7b355479a3d802fda436b83ae6747d741cf9626f7c62f47cbd563") (:digest-test #h"982fb5f4af498a4a75e33a033235ea3ddb70d9d236519f883ff5b388cbef30126b98d96e93a65a26fb00d17246d18cf4e2db14a52f0f6b10e35a93beadc14ff118b02e95b38fc4736f973ba848e40b5527cb0599076d96bc578c4aada09e8faf6820bc4f562d5199974f808b7f95edca74e6b3940894a7f66534e0" #h"09c60fec5a089a23f5da3ed2492aa21fcf7aa36183850fafc15ae8c63f596db0") (:digest-test #h"ca88614828f8acdb5fcffab6bb2fb62d932b7808e4d9cc3139a835b0cef471d9f4d8ffc4b744dffebf4f997e74ce80db662538bceb5d768f0a77077e9700149ea0e6a46a088a62717216a14b60119dd19c31038ed870b4709161c6c339c5cc60945a582263f3be9a40cd1a04c921947900f6e266f2390f3c970f7b69" #h"fe2d4183ccdaa816b4446a9b6c07d0ba4b42ac743599db5dc482b1941f443c71") (:digest-test #h"ab6b92daf83275cb9c1b76cfb59fbcc8ac53188e0b6980918e7ac0c07c836ca9372d19e11251cca664bbb3c3db2e13b412a9820b65e95612042f5db24643cf9340b9808597735a1f92670ba573a2fb2f088d81087d70565574344af7576d35b2ed98318e2ca0067d4fa8e63f28045b83b6887d4ffa0668a10712ed5759" #h"744538e1ae1cd7357710b56c3bc6f1bd7a8564118a1e0f9acc30fcf0b5396eef") (:digest-test #h"bfd4c7c8e90858ccf9c8834abefd9c1846ca4a11966fdd139d6de24a6bebf4b19f58d5d51e52bddd0bc6f1c7f35998f44707cae7100aeb4adefe373101429da3fca1d15737329dbbf47c783a84de59bfbb2fcd75a1a148d26aebb8d3a9a76089c0f8e4d49b71a06f9e323e2cdb54888189887a44b1fa9cb32b7c8fb7c9e0" #h"58b17843bc851a721c5a258eef57b3854d02190e732d9b8e7a9f926ac409c173") (:digest-test #h"c5019433c285da2bb93f119e58b4f36cd1e4d99dda35dbf4f8ae39c7fe65fa0ed03bd2b96dc649472d8f1a94477ed9f29592d97c9cd54da7c790ad1af3bb5cc030b7871bc64050db779d2caf0419895bf3b7b50b8e22fbe62fe30fe7bbd6ace86ddf7b00d5d9370f20cf0f97996f4bce70bb33f1ba022cdaba0f25d55fa031" #h"f7c92a3fb7f180370d628be78de874d693f74ccc7a54c741634258d8c512fd7f") (:digest-test #h"84b60cb3720bf29748483cf7abd0d1f1d9380459dfa968460c86e5d1a54f0b19dac6a78bf9509460e29dd466bb8bdf04e5483b782eb74d6448166f897add43d295e946942ad9a814fab95b4aaede6ae4c8108c8edaeff971f58f7cf96566c9dc9b6812586b70d5bc78e2f829ec8e179a6cd81d224b161175fd3a33aacfb1483f" #h"8814630a39dcb99792cc4e08cae5dd078973d15cd19f17bacf04deda9e62c45f") (:digest-test #h"14365d3301150d7c5ba6bb8c1fc26e9dab218fc5d01c9ed528b72482aadee9c27bef667907797d55514468f68791f053daa2df598d7db7d54beea493bdcbb0c75c7b36ad84b9996dca96354190bd96d9d7fbe8ff54ffaf77c55eb92985da50825ee3b4179f5ec88b6fa60bb361d0caf9493494fe4d28ef843f0f498a2a9331b82a" #h"9b690531dee948a9c559a2e0efab2ec824151a9175f2730a030b748d07cbaa7f") (:digest-test #h"4a757db93f6d4c6529211d70d5f8491799c0f73ae7f24bbd2138db2eaf2c63a85063b9f7adaa03fc348f275323248334e3ffdf9798859f9cf6693d29566ff7d50976c505ecb58e543c459b39acdf4ce4b5e80a682eaa7c1f1ce5fe4acb864ff91eb6892b23165735ea49626898b40ceeb78161f5d0ea4a103cb404d937f9d1dc362b" #h"1ac7cc7e2e8ea14fb1b90096f41265100712c5dd41519d78b2786cfb6355af72") (:digest-test #h"da11c39c77250f6264dda4b096341ff9c4cc2c900633b20ea1664bf32193f790a923112488f882450cf334819bbaca46ffb88eff0265aa803bc79ca42739e4347c6bff0bb9aa99780261ffe42be0d3b5135d03723338fb2776841a0b4bc26360f9ef769b34c2bec5ed2feb216e2fa30fa5c37430c0360ecbfba3af6fb6b8dedacbb95c" #h"c163cd43de224ac5c262ae39db746cfcad66074ebaec4a6da23d86b310520f21") (:digest-test #h"3341ca020d4835838b0d6c8f93aaaebb7af60730d208c85283f6369f1ee27fd96d38f2674f316ef9c29c1b6b42dd59ec5236f65f5845a401adceaa4cf5bbd91cac61c21102052634e99faedd6cdddcd4426b42b6a372f29a5a5f35f51ce580bb1845a3c7cfcd447d269e8caeb9b320bb731f53fe5c969a65b12f40603a685afed86bfe53" #h"6c3e93f2b49f493344cc3eb1e9454f79363032beee2f7ea65b3d994b5cae438f") (:digest-test #h"989fc49594afc73405bacee4dbbe7135804f800368de39e2ea3bbec04e59c6c52752927ee3aa233ba0d8aab5410240f4c109d770c8c570777c928fce9a0bec9bc5156c821e204f0f14a9ab547e0319d3e758ae9e28eb2dbc3d9f7acf51bd52f41bf23aeb6d97b5780a35ba08b94965989744edd3b1d6d67ad26c68099af85f98d0f0e4fff9" #h"b10adeb6a9395a48788931d45a7b4e4f69300a76d8b716c40c614c3113a0f051") (:digest-test #h"e5022f4c7dfe2dbd207105e2f27aaedd5a765c27c0bc60de958b49609440501848ccf398cf66dfe8dd7d131e04f1432f32827a057b8904d218e68ba3b0398038d755bd13d5f168cfa8a11ab34c0540873940c2a62eace3552dcd6953c683fdb29983d4e417078f1988c560c9521e6f8c78997c32618fc510db282a985f868f2d973f82351d11" #h"3293a4b9aeb8a65e1014d3847500ffc8241594e9c4564cbd7ce978bfa50767fe") (:digest-test #h"b1f6076509938432145bb15dbe1a7b2e007934be5f753908b50fd24333455970a7429f2ffbd28bd6fe1804c4688311f318fe3fcd9f6744410243e115bcb00d7e039a4fee4c326c2d119c42abd2e8f4155a44472643704cc0bc72403b8a8ab0fd4d68e04a059d6e5ed45033b906326abb4eb4147052779bad6a03b55ca5bd8b140e131bed2dfada" #h"f82d9602b231d332d902cb6436b15aef89acc591cb8626233ced20c0a6e80d7a") (:digest-test #h"56ea14d7fcb0db748ff649aaa5d0afdc2357528a9aad6076d73b2805b53d89e73681abfad26bee6c0f3d20215295f354f538ae80990d2281be6de0f6919aa9eb048c26b524f4d91ca87b54c0c54aa9b54ad02171e8bf31e8d158a9f586e92ffce994ecce9a5185cc80364d50a6f7b94849a914242fcb73f33a86ecc83c3403630d20650ddb8cd9c4" #h"4beae3515ba35ec8cbd1d94567e22b0d7809c466abfbafe9610349597ba15b45") (:digest-test #h"b1caa396771a09a1db9bc20543e988e359d47c2a616417bbca1b62cb02796a888fc6eeff5c0b5c3d5062fcb4256f6ae1782f492c1cf03610b4a1fb7b814c057878e1190b9835425c7a4a0e182ad1f91535ed2a35033a5d8c670e21c575ff43c194a58a82d4a1a44881dd61f9f8161fc6b998860cbe4975780be93b6f87980bad0a99aa2cb7556b478ca35d1f3746c33e2bb7c47af426641cc7bbb3425e2144820345e1d0ea5b7da2c3236a52906acdc3b4d34e474dd714c0c40bf006a3a1d889a632983814bbc4a14fe5f159aa89249e7c738b3b73666bac2a615a83fd21ae0a1ce7352ade7b278b587158fd2fabb217aa1fe31d0bda53272045598015a8ae4d8cec226fefa58daa05500906c4d85e7567" #h"cb5648a1d61c6c5bdacd96f81c9591debc3950dcf658145b8d996570ba881a05") (:digest-test #h"712b03d9ebe78d3a032a612939c518a6166ca9a161183a7596aa35b294d19d1f962da3ff64b57494cb5656e24adcf3b50e16f4e52135d2d9de76e94aa801cf49db10e384035329c54c9455bb3a9725fd9a44f44cb9078d18d3783d46ce372c31281aecef2f8b53d5702b863d71bc5786a33dd15d9256103b5ff7572f703d5cde6695e6c84f239acd1d6512ef581330590f4ab2a114ea064a693d5f8df5d908587bc7f998cde4a8b43d8821595566597dc8b3bf9ea78b154bd8907ee6c5d4d8a851f94be510962292b7ddda04d17b79fab4c022deb400e5489639dbc448f573d5cf72073a8001b36f73ac6677351b39d9bdb900e9a1121f488a7fa0aee60682e7dc7c531c85ec0154593ded3ae70e4121cae58445d8896b549cacf22d07cdace7625d57158721b44851d796d6511c38dac28dd37cbf2d7073b407fbc813149adc485e3dacee66755443c389d2d90dc70d8ff91816c0c5d7adbad7e30772a1f3ce76c72a6a2284ec7f174aefb6e9a895c118717999421b470a9665d2728c3c60c6d3e048d58b43c0d1b5b2f00be8b64bfe453d1e8fadf5699331f9" #h"095dcd0bc55206d2e1e715fb7173fc16a81979f278495dfc69a6d8f3174eba5a") (:digest-test #h"2a459282195123ebc6cf5782ab611a11b9487706f7795e236df3a476404f4b8c1e9904e2dc5ef29c5e06b179b8649707928c3913d1e53164747f1fa9bba6eeaf8fb759d71e32adc8c611d061345882f1cdeee3ab4cab3554adb2e43f4b01c37b4546994b25f4dcd6c497bc206865643930157cb5b2f4f25be235fa223688535907efcc253bcd083021407ea09cb1c34684aa0c1849e7efe2d9af6938c46525af9e5afb4da6e5b83da4b61dc718672a8090549cbe5aadb44f5bc93a6b3fbdc2e6d32e2eaaae637465179ea17f23ad1e4f1ebc328e2c6dc90c302b74a1edbbb0676c136b269d70c41040a313af06ab291bf489d9700950b77f207c1fc41884799931b3bca8b93331a6e96b7a3f0a8bd24cdb64964c377e0512f36444bb0643a4e3ecb328194cd5428fd89ede167472a14a9bf5730aff1e3b2c708de96eff1ebaaf63beb75f9c7d8034d6e5471e8f8a1f7efce37793a958e134619c19c54d3d42645f7a7263f25471fbaae8be3ea2fbd34ec6d7aacd7d5680948c3cd9a837c9c469a88f600d95829f4d1e4e4a5ef4ed4623c07815a1c33d9fb3b91333ff04eac92806a68a46cf2e9293f8bff466ce87fe66b46fbff7c238c7f9b2c92eb2fdc7d8084167f6f4e680d03301e5c33f78f1857d6863b1b8c36c7fce3e07d2a96a8979712079ae0023a1e3970165bfcf3a5463d2a4fdf1ca0e044f9a247528cd935734cb6d85ba53ceb95325c0eaf0ff5cd81ecb32e58917eb26bfc52dba3704bf5a927fee3220" #h"cb1c691c87244c0caf733aacd427f83412cd48820b358c1b15dd9fadee54e5af") (:digest-test #h"32659902674c94473a283be00835eb86339d394a189a87da41dad500db27da6b6a4753b2bb219c961a227d88c6df466ba2fc1e9a2d4c982db4398778c76714d5e9940da48bc3808f3c9989131a07683b8c29d6af336e9aee1dfa57d83c48a86f17146edec07869bb06550689ebf4788159ed0a921048b4a6e3e3ec272413bec15d8e1f6a40897fa0e11d9df223ef9fc270106249ae220fdc6ebdef6d6611805421ccc850f53ee9c836baf657a94005883b5a85def344d218264f07b2ea8714afcc941096c6ded0bb6bf5b8bf652fd15a21931c58c9f526e27363ddff98c0a25bc7af9f469ab35bffea948b333f042cc18a82cec0177f33c3bdbf185b580353de79e51e675b03b31e195f19ba1f063d44def0441dc52820426c2c61cf12974ec249fd3502f017ffa06220075ced7e2d6b86a52677ba3916e8e8726062aec5bc8ea1c18b1e4137680b2c9d002191b423bee8691bd7e0f93c3b9959bc1c14d5c5cbe8f7c9c336aa16e9de9faa12f3f048c66d04cb441eb2bbc5e8a91e052c0f9000856896f9b7ba30c1e2eead36fc7ac30a7d3ddfc65caaba0e3b292d26dfba46b5e2dc9bc9acadde1c9f52b2969299bd1281ddff65822b629cfba2928613200e73661b803afdcc4a817d9361389e975e67dfadd22a797bdaf991ddf42db18711c079ecec55925f9978e478612609bacd900172011c27e24bad639ffc24a23877278318872153aef6893ccb5b68b94b33154df7334375aadd3edbb35272cc7b672dec68faa62900873ded52f6049891b77f2d0311a84b19b73660e09d1f1998095c1da1edecfa9f741b5fd6db048dd68255085d43529279021d59ed853470d6863b7c8e07fcb0d1e6acfb1eb16f7f60bb1f46ce70493010e57930a3b4b8b87e065272f6f1dd31df057627f4214e58798b664e1e40960f2789d44ccacfb3dbd8b02a68a053976711f8034c1ed3a8" #h"5ac9275e02543410359a3f364b2ae3b85763321fd6d374d13fe54314e5561b01") (:digest-test #h"a65da8277a3b3738432bca9822d43b3d810cdad3b0ed2468d02bd269f1a416cd77392190c2dde8630eeb28a297bda786017abe9cf82f14751422ac9fff6322d5d9a33173db49792d3bc37fff501af667f7ca3dd335d028551e04039ef5a9d42a9443e1b80ea872fd945ad8999514ae4a29a35f60b0f7e971b67ae04d1ba1b53470c03847a3225c3ddf593a57aed3599661ae2d2bb1cddd2fa62c4a94b8704c5c35c33e08e2debe54e567ae21e27e7eb36593ae1c807a8ef8b5c1495b15412108aaf3fce4130520aa6e2d3bdf7b3ea609fdf9ea1c64258435aae2e58a7b3abda198f979c17dbe0aa74253e979bf3a5800f388ea11a7f7454c4e36270a3083a790c77cbe89693205b32880c0d8f79b1c000ee9b5e58f175ba7696616c17c45673cff25d1221f899836e95cc9e26a887a7115c4537e65ad4eacc319ba98a9a8860c089cbc76e7ea4c984d900b80622afbbbd1c0cdc670e3a4c523f81c77fed38b6aa988876b097da8411cc48e9b25a826460a862aa3fadfe75952aa4347c2effebdac9138ebcc6c34991e9f5b19fc2b847a87be72ff49c99ecf19d837ee3e23686cd760d9dd7adc78091bca79e42fdb9bc0120faec1a6ca52913e2a0156ba9850e1f39d712859f7fdf7daedf0e206dff67e7121e5d1590a8a068947a8657d753e83c7f009b6b2e54acc24afc9fdc9601a1d6d9d1f17aab0ce96c4d83405d1e3baba1dffa86ecccee7f1c1b80b1bbf859106ce2b647ae1e4a6a9b584ae1dfc0a4deebb755638f1d95dcc79b1be263177e2a05c72bde545d09ba726f41d9547117e876af81bfc672e33c71442eb05675d9552df1b313d1f9934f9ddd08955fa21d6edf23000a277f6f149591299a0a96032861ecdc96bb76afa05a2bffb445d61dc891bc70c13695920b911cad0df3fa842a3e2318c57556974343f69794cb8fa18c1ad624835857e4781041198aa705c4d11f3ef82e941be2aee7a770e54521312fe6facbaf1138eee08fa90fae986a5d93719aeb30ac292a49c1d91bf4574d553a92a4a6c305ab09db6bbeffd84c7aa707f1c1628a0220d6ba4ee5e960566686228a6e766d8a30dddf30ed5aa637c949950c3d0e894a7560670b6879a7d70f3c7e5ab29aed236cc3527bdea076fec8add12d784fbcf9a" #h"68f62c418a6b97026cc70f6abf8419b671ee373709fa13074e37bd39f0a50fcb") ironclad-0.57/testing/test-vectors/sha3-384.testvec000066400000000000000000000706051420372057600221460ustar00rootroot00000000000000;;; tests vectors from http://www.di-mgt.com.au/sha_testvectors.html (:digest-test #a"" #h"0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004") (:digest-test #a"abc" #h"ec01498288516fc926459f58e2c6ad8df9b473cb0fc08c2596da7cf0e49be4b298d88cea927ac7f539f1edf228376d25") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"991c665755eb3a4b6bbdfb75c78a492e8c56a22c5c4d7e429bfdbc32b9d4ad5aa04a1f076e62fea19eef51acd0657c22") (:digest-test #a"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" #h"79407d3b5916b59c3e30b09822974791c313fb9ecc849e406f23592d04f625dc8c709b98b43b3852b337216179aa7fc7") ;;; tests vectors from CAVS 19.0 (:digest-test #h"80" #h"7541384852e10ff10d5fb6a7213a4a6c15ccc86d8bc1068ac04f69277142944f4ee50d91fdc56553db06b2f5039c8ab7") (:digest-test #h"fb52" #h"d73a9d0e7f1802352ea54f3e062d3910577bf87edda48101de92a3de957e698b836085f5f10cab1de19fd0c906e48385") (:digest-test #h"6ab7d6" #h"ea12d6d32d69ad2154a57e0e1be481a45add739ee7dd6e2a27e544b6c8b5ad122654bbf95134d567987156295d5e57db") (:digest-test #h"11587dcb" #h"cb6e6ce4a266d438ddd52867f2e183021be50223c7d57f8fdcaa18093a9d0126607df026c025bff40bc314af43fd8a08") (:digest-test #h"4d7fc6cae6" #h"e570d463a010c71b78acd7f9790c78ce946e00cc54dae82bfc3833a10f0d8d35b03cbb4aa2f9ba4b27498807a397cd47") (:digest-test #h"5a6659e9f0e7" #h"21b1f3f63b907f968821185a7fe30b16d47e1d6ee5b9c80be68947854de7a8ef4a03a6b2e4ec96abdd4fa29ab9796f28") (:digest-test #h"17510eca2fe11b" #h"35fba6958b6c68eae8f2b5f5bdf5ebcc565252bc70f983548c2dfd5406f111a0a95b1bb9a639988c8d65da912d2c3ea2") (:digest-test #h"c44a2c58c84c393a" #h"60ad40f964d0edcf19281e415f7389968275ff613199a069c916a0ff7ef65503b740683162a622b913d43a46559e913c") (:digest-test #h"a36e5a59043b6333d7" #h"bd045661663436d07720ff3c8b6f922066dfe244456a56ca46dfb3f7e271116d932107c7b04cc7c60173e08d0c2e107c") (:digest-test #h"c0920f2bd1e2d302259b" #h"3d1584220409f88d38409a29ecaebb490ef884b5acba2c7eaf23914bab7f5f0fc97ee1e6336f88dfd4d0a06e902ccd25") (:digest-test #h"70ae731af5e0d92d264ec9" #h"563359fd93fe09f3fe49fcf5f17e7f92aab589cdec3e55e4c3715e7775814bbbfb8c4c732e28d3b6e6404860812dc6e9") (:digest-test #h"69c74a9b0db538eeff64d93d" #h"88c66389ca2c320a39022aa441fa884fbc6ed2d3cc9ac475372d947d4960579a64e061a297d1831d3524f98d8094404b") (:digest-test #h"a4a9327be21b9277e08c40abc7" #h"751f5da5ff9e2460c99348070d5068d8a3d7ffcec7fd0e6f68f6cd4a2ef4226df8d9b4613c3b0d10a168eaf54eabe01a") (:digest-test #h"cc4764d3e295097298f2af8882f6" #h"10f287f256643ad0dfb5955dd34587882e445cd5ae8da337e7c170fc0c1e48a03fb7a54ec71335113dbdccccc944da41") (:digest-test #h"5a23ad0ce89e0fb1df4a95bb2488f0" #h"23840671e7570a248cf3579c7c8810b5fcc35b975a3a43b506cc67faefa6dbe1c945abc09a903e199f759dcbc7f2c4d0") (:digest-test #h"65b27f6c5578a4d5d9f6519c554c3097" #h"dd734f4987fe1a71455cf9fb1ee8986882c82448827a7880fc90d2043c33b5cbc0ed58b8529e4c6bc3a7288829e0a40d") (:digest-test #h"a74847930a03abeea473e1f3dc30b88815" #h"dba6f929fe55f9d66c5f67c0af3b82f17bcf58b36752f3165c16083fea8fd478ee6903f27f820ad2dd9950afb48c6700") (:digest-test #h"6efaf78ed4d293927eef2c3a71930e6e887a" #h"8218498ab01b63041c2ba0709e3309496124ddf0904543a9e0d9d096a750dda97f7a02208af3d8c618d4be7c2bb2a288") (:digest-test #h"fd039eb6e4657388b947ec01e737efbbad47da" #h"c5b3130ef8dbc580e1103fecae69c9a882d9ebf5a3def5938b07f843452a09c9f72f0dbca91d33b021cf6aa6fe60d2ed") (:digest-test #h"9c694943389bdc4e05ad7c2f63ceac2820e1d2d7" #h"f692c025c5c5f3d1275213c1df9bf9eb6d2188eda90ab5bffe631f1dbf70ebd628caee88b7d149e1ac4e262873979afe") (:digest-test #h"0fb18357b018b9bbb2cbb4cac50bc85609c92b8e7f" #h"d164306c99e3798790f0923fe92dbf2f96c3907127dacaa467c766ac75788062589272cb7690b8af2030dd8bd61a3df2") (:digest-test #h"26cb40a460e2e727aeb867e0140d0f34790110deb5d7" #h"af2a42a4c67c3226c55b89605b0dee27e796c2792115f6097203db5aed89e35f563a8246d399fde00c2a5b97ed5a5e17") (:digest-test #h"6690a3a0373c829facc56f824382f4feed6eb184642b4f" #h"84e1b68bc9e2daefc19b567dec911ef46f5f37a74fdbbb6155e7e646f2735df2ac44e239689eb5b536465dc571e55cb2") (:digest-test #h"7d80b160c4b536a3beb79980599344047c5f82a1dfc3eed4" #h"041cc5861ba334563c61d4ef9710d4896c311c92edbe0d7cd53e803bf2f4eb6057235570770ce87c5520d7ec14198722") (:digest-test #h"02128283ffc0cfe254ac8f542be3f05fbe4e855dd22ae98a81" #h"3840981a766d725f83d334e8982965033a5fbb5107d94ffef33b1f700cd46348091a49f6620c37ae3ef5b20513494826") (:digest-test #h"27911dd0a6843ccae965d876aa1916f1dcd71e518f7f2197152e" #h"f59f8428555984d1526cded8129c649fb1b683d35cec7c5e1209441a6a9e7c17f0784151b5ab8a8c492b402a3acb98c4") (:digest-test #h"d9378bb66e8c8dee556d691cbc9fdddd6333ca5d50668862c3c57d" #h"994532d1a557e990b1cc9e0395a2ad8b05619ca322db9da3c4ed2ee194c051d04582fde72dd2b8f674cf6ec958db75da") (:digest-test #h"ae1828047c5f82a7b9712f3399832124b892f2f7aea51c8fe3536cd6" #h"d51111f8bffb44d81ad19683198f29d2033144d3cd856c749cac5b9cae0e712f500f8d0ef813f38e305ce175a7d6162c") (:digest-test #h"7dd2d76fa054cf461e132e9ef914acdc53080a508cdc5368ab8c6224ff" #h"6c0b3395e4c86518ab0a06267320ee9ec95e50385b7a2527ddaa1bd0ead262c56122d4f4eb08b0ae22b3ee7e6f44dd18") (:digest-test #h"6fd72888a021f36e550967cb5605b55b78657c9272d93c3ded340d67da6f" #h"0551583a5b4007401c77ef4382fd8e245c9cf12e976c9766af6b7ae3c7e07a82b3079f903b083d5ec85cb94e46a85ac0") (:digest-test #h"d500eb9546553619cdc31e0848c502db92d547efef3ae5eeaa22258afcf0a9" #h"5edde2f94f8695f277ec05efcc00761fafd272200aed0e63d221c2b6c65b4972a6526f9a1f2e6ace0e81938f043fe877") (:digest-test #h"6189597e0198a18c65fa0bdd0797f13037c75c4058b7d3454c0f71bd2dd13b6c" #h"110630ca7631b7620e6bee6ed6e929098965571936c34829484983eba9532b8175528c228c57439453f027a4f7c83ca3") (:digest-test #h"243b941d748541af303f8e9d2c371cd03e437d62a9df485ddc176dc65da8c7da00" #h"5884201f7a555ea3c5deeb019fd9e8c161e1b89756045e475b141ec5135ce5a41c93e5e1f79534d36fd8345ba434da43") (:digest-test #h"2dc3d789582c1a806c3b491d5972ef8f1733f1f5e02866dc9de2a8029ec0ab608d13" #h"05a3903b519cdf679120c7ccb4ef178b58e4502fcd461360988fa06669294851e629d9dd3e77ffb73d24599d5d3edd36") (:digest-test #h"e5b3f6962fe57230780b3d55b29effe0dfebde2c81ba97d4512ecdbd33eca1576a7f82" #h"7ac2776afb74f55bbc4f6eccf825ee13ac7445fb54974e6c24ebc0f03fdcd8530199a61106a31b4279e02201ee0f54fd") (:digest-test #h"da03486aa3cebbd6502e9f5a6f0f835e973a581befcc1aadefe7b3696ba71c70cd58c584" #h"02c44ceec0bb7dc0f664ebe44230192b5b0bb646bb944d23fa1ff3586dc0523fa9d7f0dd6df5449ab9edd9a1096b07dc") (:digest-test #h"3c686d321ba66185cdca83ba9f41984fa61b826ef56b136e13f1239dadf6e03d877866ccb8" #h"ad624edd9f2c3a32b56c53d9e813c01d66bcfe424c4a96907d52ac1ddd68370ec86dac67504a90e8a8e75502e01081d2") (:digest-test #h"4dcff99fac33840f6532547fb69b456902d6718fd5d4538e23462db6d00da61975f2b8e26298" #h"cf37dd27997c1bb7e6dc405170066e74c6ce517c029ed8dce126d025da74e0b8e86da567e8d7d8d5b5d3e2a546df7489") (:digest-test #h"2799f672328834d7eaef9439795d35ce93c9094f58ded9f17c968a97a50a9e461489fed988e7f6" #h"85cfc23c97cb13910b808e7033809a45aa0b7f7138de618c2ca622c8b813c988e264af3b96c7925dcbd1d2761757d800") (:digest-test #h"c7e947507822f28a562745a8fe6fed6cb47d73145804c894954e21245cde04fa9155a35904926aca" #h"8bddf3baebbc5b04fe0b0a9c3c2b730abe918ce4892d2843c613ee96da0228512f0d1307c7d1a8922e79a92e957dd18e") (:digest-test #h"6c497bf6ff69cb39e3faa349212b8b6691ca237905ac0099c450b6d33abf362bedb65bdeb307bfea23" #h"3639fab6191b35246278522cfacee0cd5b15580a26c505ae3c46b4b1c2572016b48f1b012bbbedec47916950fbb33a1d") (:digest-test #h"d15936f3b0c9018271812b4c81453c4457c7edd110bcea7f5735d6f5882d8f27155eb4cc285a65138ad6" #h"0293eeef0aa3392c93d9c6ca89c08b317622572d4de2286a4b9ae6c2f9c9e0e64ee6c483d4f10859077e3c6868430214") (:digest-test #h"df18139f34b8904ef0681c1b7a3c86653e44b2535d6cecd1a2a17cd5b9357be79b85e5e04dd9eff2ca8b9a" #h"db9e171d6e3336631c9ceec6b4d732ce62b015939269fb69fae7d22725500e8a2fc9f1459cf0a31fb9d16d7c44583f52") (:digest-test #h"0459dcbc149333ea2f937b779a5f3728148449a9aea3662cdd2cc653ce6a2050f9c0d54bf9326c039b263eb9" #h"464ba409fbb45e985f84ee24662eb7c042c3c2ad9649f1ac4a8b2be9c07d37ed2e4284362057493f6a7e52c356b05bc5") (:digest-test #h"eb3f7002c8352270340b8da8643622e5f7e32cdb208a0dec06c6cb9e6b64cc4d8cb9de1d49397b3386464a25d1" #h"a26bd76ce42d818dbec462d8fe7cdd957e6b84ae8750fb5e1c9c76bc6000e23737e073a59b4600e5056524edc667909d") (:digest-test #h"47e3e3d8c68ac9d9f4b3759d8c7d9dd901e35b096ee4c8b6cbe0cdf467463630926c08289abe153bfa1bcde3cd7c" #h"b504ef475a568f9caba8352a0b2d243acdf3d2b41d8890a6fb3abb8aa28a29e0c7527d20e2d79b25b400ec27c314db72") (:digest-test #h"838d9c181c5ab59592723bd69360e0d7fd15232beada7591ea899ac78ffd53a32fc73a5fe522ed35d92a6e2bc148ca" #h"53e99e1158d59032ffe4b5ea304c7d2f7a61b6b2a96ac97832ca26013549fe3f7dcdf926bd74ceabe4f1ff172daed6e6") (:digest-test #h"a90d2aa5b241e1ca9dab5b6dc05c3e2c93fc5a2210a6315d60f9b791b36b560d70e135ef8e7dba9441b74e53dab0606b" #h"4a16881ce156f45fdfdb45088e3f23be1b4c5a7a6a35315d36c51c75f275733319aca185d4ab33130ffe45f751f1bbc5") (:digest-test #h"8c29345d3a091a5d5d71ab8f5a068a5711f7ba00b1830d5ed0bcdfb1bb8b03cd0af5fe78789c7314f289df7eee288735fe" #h"e27b39a96255ff69c45285fca6edaaa3954ce32c1e3d9b1f60c1b6676594bb45caf0889fc11daf93a1b60746229689dd") (:digest-test #h"32876feefe9915a32399083472e3c3805ef261800b25582aa7c36395fd3ec05d47b49c4944bbcc2b8b5ebd081f63ae7943d0" #h"f96433cdb69a607433ea2eb77d87d3328867dc4076b67ccf17f50f9e08e89a86624b60f2ecdb8affcd431fc13173fe75") (:digest-test #h"e2e77eb54f321f86f52ea3d3c8cdc3bc74d8b4f2f334591e5e63b781034da9d7b941d5827037dee40c58dc0d74c00996e582bc" #h"a352ab33ca730482c376bdc573c9d1dc6d3597f9be9f798b74a57beaa8e9c57b78ee6761056eb67363e882fefcad4fb9") (:digest-test #h"da14b6d0b2ec4cf1e7c790e7f8f4212b8f4d05f50e75e2a56a5d70623c0d2e0115a15428129109b3b136d756e38a5c8463304290" #h"aae7ad977e17ac0e560c0e0186433420f9fddcd191b9e91567cee05df88f1e1aee50424a313998a873f7a9c289a02217") (:digest-test #h"2db06f09abaa6a9e942d62741eacd0aa3b60d868bddf8717bef059d23f9efe170f8b5dc3ef87da3df361d4f12bfd720083a7a035e8" #h"85d4e3e5abcb1b59ca6f551eb43b43ff64890511f73a9083a2ce6e9c2861c6e9664c765629024f4b01b0cd1594a5981b") (:digest-test #h"26bad23e51c4560c172076538b28716782ee6304962f68e27182048948d5c367a51a1c206a3e9b25135b40883b2e220f61cb5787ed8f" #h"a44c7f84ab962f68283404f8c5c4029dbc35d2138e075c9327580baf89f292937bf99422e45756b3f942bf0a5ae4acb6") (:digest-test #h"77a9f652a003a83d22fb849b73fed7d37830c0dc53f89cea7dbec24e14f37197765206fe0e6672016e4dec4d9ebbe3e1b4423771a5d0a8" #h"29c8bb39bb2aad419a00a80216ec71ec5ec9ab54c41927e3e3f2f48f079a5886d7fe89db98c807ab686d2339001d6252") (:digest-test #h"268c7b3a84849fec5c769bc4ad377dea10c9d20c91dd17fdbd9670a2fc909d0e212129ec40dee41dbf6194a3b04ae8be5e84ad5426ca4496" #h"0dfc6ffcf4a387ec09ff862c6139a6f7ac77abb2b5e1f6dc814eb71525f8657ac74a7697c2975c70a543af0e227d03ca") (:digest-test #h"b8324341a6891a6b5e001a7d2ebba6e02e8335c124185309a4c9e9907c43bd8d4fa73c527fdf783650316dd24b148870e1436ac05111e9cdcc" #h"6278d1cc17fb6d54129d04987d4774fa846dcac4ba8b6b72f41e63dc387ce0081ba29fb2c17c6744edae24e669cc9e75") (:digest-test #h"5ef8b3d79d299bee2c414560c7de626cc0d9fb429884aa69cc30095ef1f36b7e03a8ca25fb3601189f163b209e0facf8dc447f690b710fb47b72" #h"7ec9505f33f4a5493574422de078e0490b61be8e8d6f158192bb7d2bdc2dc335598dc88d9b443cd1c14b883a77119df1") (:digest-test #h"ad7321c9a8b8f0bfe100811114270daad57f6e88772326b62d88a37a6f55c2cf9f759115ed6a590878e4dcefb592db151538db7de20229d26a181c" #h"3782d2caa537294e809e9df837b1b07e2f1df07d0f4c12e12459f56eeaa478d5b3a41e519d9414eafa5ddd5661c831ba") (:digest-test #h"0719d9664541f0a824f71c83b809bb6afc973c9f7428e1ed11f7c29a558e1698b796aefb49eec2b098faf06bd43e82e1312bf0388c38a5bb523506d3" #h"362c05f678df92883d56e19221391fb00d0f0afcec51d3e0feb15ba2fb60693b09d69118af649648933259d7b1e240ab") (:digest-test #h"5415c2596aa7d21e855be98491bd702357c19f21f46294f98a8aa37b3532ee1541ca35509adbef9d83eb99528ba14ef0bd2998a718da861c3f16fe6971" #h"8f9fd7d879d6b51ee843e1fbcd40bb67449ae744db9f673e3452f028cb0189d9cb0fef7bdb5c760d63fea0e3ba3dd8d1") (:digest-test #h"b979a25a424b1e4c7ea71b6645545248498a2b8c4b568e4c8f3ff6e58d2ac8fbe97be4bea57d796b96041d1514511da5f6351120be7ab428107ef3c66921" #h"e248a64b6ef112bf3d29948b1c995808e506c049f3906d74c3ee1e4d9f351658681901fe42c8e28024fe31014e2d342b") (:digest-test #h"e64c7bb9cd99ce547d43de3cc3b6f7d87a2df9d8a4760c18baf590c740ec53c89bfa075827e1f3f2858ce86f325077725e726103fbe94f7a1466c39f60924f" #h"d1e5a72d2595f38714c6198ac14f8a5cdd894dcf9b4b8e975174b100df7bbf4f7ce291b4864f27c0b64e6330f6c1c82c") (:digest-test #h"91b7a1fd0e20072d9c5be7196e5eaf8df36fdf145895b30d4e4c02010d7c663499ac9d7a44732f4c7430511ba6fb0ae4b3dc9405523a054fdf962f5c5b79c423" #h"07c2e0aeae30da83b5a6b320aa1cf727b10c2034583d7acda55648fa3daa017aa15588b6e2149101c56e3d7df7c76df1") (:digest-test #h"5bbc2d4efe63cbfc9fc221dd8d8384075a79c80a27d6a8c5219e677f4c5bb8338013dc2ab1770acf735d13c0bc704621ec2691350cf3ea2f53bded45ef8fc70702" #h"dd0bbfe4b799642191abe316df9d59a3743566778b4459c51c3be3f658bdce45516ad188fbe1a8cad8a1fa78f8ebb645") (:digest-test #h"129549278e8976c38b5505815725400c3d2081edf141ad002e62ff299d9a0743f9c9f25971710b194dc88285d50b6cec6e140c19072f51cab32a9f6497abd3e407c6" #h"ca26aec527fadcd5ebeb4eafa7c102f79a3c2edb452afd04f6162dd7a17bdd1aad7d616508a89a3ec6a40791d915acc8") (:digest-test #h"b9a9f378adeff4337bc7ec10d526c6dda07028375549f7fda7a81d05662c8a0da3b478f4152af42abb9f9a65c39da095abb8161ba6676b35411234bd466c2914e00370" #h"99914f684e0b317f9338af0c71e9655a3af7153eb9fabaae61454bf8de9e0bfd274c1eff6c4b550e47afcb3b20fa7d9e") (:digest-test #h"101da5b09700dcadf80e5b7900f4e94c54d5f175569a854e488aa36fb41ab7220b0662178ca07a596768528123de3b2a3d944aa412875cedfeaf58dcc6d5b4a033a53b69" #h"d3e32c9b271e11e4968397d85d76938b974ac1ba55bcbe8d7b7da02dbd7e3b9c9af0d98bbd7e50c436fcf9e3551e3432") (:digest-test #h"14761bbc5685b5de692973e2df7c9c4750889c19a952f912c817890546d5e37d940d13a14ac7925abbd875b8cd60e4920896ce6decc8db9f889da2b5489e1d110ff459d885" #h"272222ed50631aff465c0e6fe49ecdfdca983bcb7231e50903e200b335b845108202c28315912c9c4fd50e2c6f13a9ea") (:digest-test #h"ed538009aeaed3284c29a6253702904967e0ea979f0a34a5f3d7b5ab886662da9b8e01efc4188e077c2cdeb5de0a8252aafbee948f86db62aae6e9e74abc89e6f6021a4db140" #h"8361b680243b1661d6f1df53db363cae41c2ebb7438c00606d76b9c2a253faa1f09d6f520d69d692ec1dca0c7885119c") (:digest-test #h"c434d88468f1eda23848d0804b476933f24baeadec69743dd90d8455f1e1f290f6f1aaf3670c4c74f76d3ab83e9bef21ad8d9208c712ca478e70d5fb3c4bd48834c969dd38f484" #h"9c26e96fcc09a76cc13d24ad25c9cef4300e96e97e4fb59b441baffed07f6a70b1464f2548c7fd7839810dbb9e9c1e18") (:digest-test #h"3064e5ba1e7751bf7198e0811ff4d4ca17d1311c25d9c3a316b562691cde75c974b0b52645c134ddcc709d77b6c1bd24cd684265d723c308bb4d0159e6b16d97ed9ceaa57436d302" #h"1ea779739b204abe911b4923e6f60fece271eedfc7f074fe1919f0cbc6ce2a99234b003389520884b660165f5a1e80f8") (:digest-test #h"89d9521ad84b1c9afc2fbd0edc227193acd3330764b0d2cb71bf47c7aac946af85be13858b55976009f3b36b09ced4308052c817c9c4d0295225f61a9659a0874b88667cdcc5213919" #h"4209bb8f869f6f17c8d5c368c489ac51a75e24a85a12de1b16fefc292ce636ff8fa360e82f05684f6b0b074ba370a933") (:digest-test #h"3216662da0227993d88288187177a0287de4eccf245d7c718b8045bbfb8869d93f1fb9e94d7478b0298e628c07e0edaab01dcf79264dc05f8b2181aa3f831dc949726fbcf80de4c9c9ed" #h"64c45e018cfbc88f8f4ffe3cef0df3a94aab3049fafae28e28efbb2a4b94809eb302caf901010abfa194f72965663d35") (:digest-test #h"e776e6749c5b6c7def59cb98340984539280a9874f80412d4df0ee73d58acd1094d49ed4e35125834cf8cfe349e599144e4f2e200aba4fd3eb6d78cde027c1d5620e0270b5e83ab26b8d32" #h"94bd67b7f2587b0bda5487cc45d00e4365f1ee40073cdf0d23a5ea3fba01eef42a46bfbac5306d67be02d8d918ae5c9a") (:digest-test #h"5d8f84b2f208b58a68e88ce8efb543a8404f0ec0c9805c760ad359d13faab84d3f8bb1d2a4bb45e72c0ec9245ffda2e572f94e466cffa44b876d5c5ed914d1ff338e06b74ad1e74d1405d23d" #h"947350307748c29467f00103d0a07c3c228c5f494fc88fe2352ca5d10449d0dda7076780c05439a09694eb528d1f477a") (:digest-test #h"357d5765595065efe281afb8d021d4764fba091adde05e02af0a437051a04a3b8e552ec48fb7152c470412c40e40eec58b842842d8993a5ae1c61eb20de5112321bc97af618bbfbaf8e2a87699" #h"32286970204c3451958f5155f090448f061dd81b136a14592a3204c6b08e922ee5bb6d6534dbf8efb4bb7387092c8400") (:digest-test #h"a8cb78e1485cbb7a9474c1c1f8e0f307cda5139a7e947df5ea20ac330a6dffcad4a9bd755f9f58724789eeee532615be550dd84f5241fde0e3058aeedbf287f02a460445027f5e6b3829bf71ecf4" #h"51168bfeef8a981c0def0c4cb067baf15ce5feb8d5f7e9d6076b2836267391aee1fd3a0b5d3434ceb5cf2d6fa06fa063") (:digest-test #h"81acca82545e767ab59dcc750a09849cebad08ff31c9297f4fd510ebe6c27769938319180ccc66f36b1a7cf9c9f3538b0f6f371509f77cf0bc4d6d87facc85b933f2e27f8e1bf6cf388f80c0fcbfba" #h"4ae44d6509986893a8414753b57d11f9c554d89c15ad6d70687c56c6c2ac73537acbb0d51f48e6bea6cf762d58890d7a") (:digest-test #h"94987498b1ca87a6f3fa4b999db726115c455d0ec24029b2f5810e49a94668864b8c470f7fc07c3dcd97f41c973b45ba4fa7879ee7546596881573b6863fc39d940eb3fa3444084f721341f5d23d2561" #h"a733b118be72a187ddcbe5ba67e04b589f9cd9f8482c4bd9d64c580aba7d19d2d1f9c1ddf95fe6efdeffd44f67fcabb5") (:digest-test #h"de6b32c2d40d0659166db235259b530ea43f44e75d8b3e9e856ec4c1410bbea3696964af8b6c5dfd3304282369a4bc4e7cf66b91fecd0c7c105b59f1e0a496336f327440980a34614ee00fff2587d6b813" #h"17ba30c0b5fc185b3245313b83dd0481145953101128914765784af751745b8a2b6a90a434548f3adaf1f07f18649890") (:digest-test #h"854211bedacc19f77b46cfa447a4ad672ea9b643f09f5cf5274ba28888207e2466b38127776fb976db8ad7165a378df6ee1e3a0f8109c9aff7e0d6126fd71333c6e6ebe15d7a65151d6a4a83b82c8a6f3149" #h"ca85632a9f7c32ac4705c6458770025dda4fd07a8d5d6921b897b0da490d64400587649f2d20bf608b9a18d071b63b48") (:digest-test #h"822373d9d3d5b06a8da48a43095740fb98c9caf717350fd2c3b058024ff705b9346b7f0a495a6d4d93802bc45ece777f8c6a6e7c2ef6b8135115ff911a2ba5241665b6f7cbfa1b9d93b011b3aaa1dac1853fb2" #h"6e84587c8c6e54353a6032e7505902ef7f0f0538dd1bb32922e13a7d4d98c47a541015381eab27e9186398120da7fb32") (:digest-test #h"c04b701f688092bbd1cf4217bc4b5877f2e60c087bdac46611482a61d51f820140403bc85be0c336332da0938734bde8c502014f3509266c73c6c93c22a1bd0ddf15a5ce7410c2894e9d092e32c079922ba1abb7" #h"75c585503f15a526113608bc183180b1cb80f4d1b466c576bf021b1ce7a1528391f70e10446681849fa8a643cb2b6828") (:digest-test #h"009dd821cbed1235880fe647e191fe6f6555fdc98b8aad0ff3da5a6df0e5799044ef8e012ad54cb19a46fdd5c82f24f3ee77613d4bed961f6b7f4814aaac48bdf43c9234ce2e759e9af2f4ff16d86d5327c978dad5" #h"02a09d37d31e4365c26bec0eaacecf29eea4e8d21ab915dd605248764d964f10ebb8fafdb591982d33869a1d08a7e313") (:digest-test #h"0b7dd6709d55e0d526d64c0c5af40acf595be353d705be7b7a0b1c4c83bbe6a1b1ec681f628e9d6cfc85ad9c8bb8b4ecac64c5b3a9b72f95e59afefa7bcec5be223a9b2b54836424afde52a29b22ab652d22cce34b39" #h"5c84ae39d959b79555231746ad5b33689a31720ed0070f6772147977edd0aead07fb8b7b71b0bd587ebc5c1a80d564c7") (:digest-test #h"3e9b65d7bf4239420afa8639c8195b63902b24495b95c4143978e49843d88a92d1feed2eed1a88cd072d6d04ea26dce8ee4b14896fdb69bc7ff2971ed8ac5655148d2e9921218d74efdf17c56b533d0bb17d11e07d7458" #h"ab7890d1b51af10285752bf9da5eee5c3e87a285dc33262d0261aa9a575f303e94845d7ab21b48f4e6884568cd78b550") (:digest-test #h"9436da433d1ebd10b946b129cb34bccec9b8f705aaba3f8561352ed36a8449aba2dd7ba15b1bc308b0c02913163af63a346524dff5521432db477f529606afb5d552efc95cb040db566b4d39eddaa19319e518a7b5c6931e" #h"968ae9104f9c907c5a72936250dfedd62cd04f6e5ddd2c113490808a11884449aaef5d013ea3993a6cb6fc5c08754408") (:digest-test #h"37254bf9bc7cd4ed72e72b6bb623a0cc8eeb963d827aef65ad4bc54913235b6d3551533ce33421aa52ffbf186eb9a2787188eeb1b52ee645c6d4a631bc071415c80014940c28fbfeb0db472c326c8dacfd6ab21f3e225edef3" #h"975e10fac9aa77b780e5f6c2151ec4a3c72ff26e41233cc774c074df1b78cce5af1191ba955a0bce15926ae691b0ffe7") (:digest-test #h"79e77cd08a6ef770bbe4bedf61557ea632b42d78637149670d4d6157d56ed7b2ccaee45d9439dcebc557b4118e86c15aa0ccc21c474b21abda1676cc56434d6d46422993e66dc99387dfa985358accf69884b9dd18a2c4d04448" #h"94729f5f99a54f5a3ea69233ff9d522392d4596eb6ac2bbb07492ece3c67317412bb47ae317ddd20536c3adc003862f1") (:digest-test #h"64b76cb554f6becc238a3fcfc3eb97993667ec82fdc3fb28d42567709c3250c7997328aeddfdc2750451ac462281bf66fa94f4b8712c7a8342660574f20268e707c466627519c56259fea55be91e10faab3ad2ade6ce8b6557f202" #h"26d48ef5067d704ee9e2a64e399de23068908b3c911ffc4056c168362c37385c92d37d51354b6505a82c4d22fec37eaa") (:digest-test #h"3df27829bfb1ab7d381f146b30370ef56b392b73b35b1be5d8bbcf88f499dda7f3c327b45350b8972991ee466545de96560cf451711fda884e3d9b2af3e909d655d25cee1c931beda79c40fa507097bdf1126771a7b9543ad5cb84b9" #h"5fa4ebfa24150236c03409f0857b31cb95b0150f381c8858b01559957b1268f73c698709233e6b15468675a102d0c5e5") (:digest-test #h"b00f4e67ca08ccfa32b2698f70411d8f570f69c896e18ec8896cfe89551810543303f7df0c49f5b94783cce7df8d76d0b88d155633302d46003711f233339b1c9a8c20164ec8a328890a4932b7d90d92d023b548e4820558f8bd327010" #h"eaa756b5892fdfc793d74e3f9f4d6c7a5a6a2241dd11e0c38ced59c8ec7be377a41d1d06774a5970ce9722d8e119d0ad") (:digest-test #h"a4f95f6a46a9cbf384a7e98e102d1fdc96839d1bf26b35a5a0bd6cb9734fd17e8a178d4581943c0fe469fb4fe94cc2f15e1ef59ae05b35324eb57ca07dfc69d42d41d80b3c3bb64e1aea143c7d79790a56697dc803ec93e6c68f27f6761c" #h"1aff8d9c64f0c162ed0195d1f3a342a010d14be0636903c48020ba42de1cfa8b98ae2142d89af3e69e9eb4c735857dd1") (:digest-test #h"02713084bf93fdc35135515243c3bc0f4b2b447f2d3461c0dc104cbfe23479ab036762a91d1987c953f7b3386abc80b8734a1d4eabf94f3a9f2fb62c943152b5253846fc2ec8dbb2e93dc74857a7b05fe2d7ec8040ba8b0d9ae69777ee739a" #h"84da02114e341a3636f00822b32bd21a8a1f7b39f2956bd97f39346fedf9aae63b304c65c93a541e8bcda549576d5f27") (:digest-test #h"00ce225eaea24843406fa42cc8450e66f76ac9f549b8591f7d40942f4833fc734a034c8741c551d57ddafb5d94ceb4b25680f045038306e6bcc53e88386e2b45b80b3ba23dec8c13f8ca01c202ae968c4d0df04cdb38395d2df42a5aff646928" #h"81d6e0d96575a9b8ca083ee9ec2ead57ddf72b97d7709086a2f4a749d3f61d16423463487562c7f09aba1b26e8cae47b") (:digest-test #h"7af3feed9b0f6e9408e8c0397c9bb671d0f3f80926d2f48f68d2e814f12b3d3189d8174897f52a0c926ccf44b9d057cc04899fdc5a32e48c043fd99862e3f761dc3115351c8138d07a15ac23b8fc5454f0373e05ca1b7ad9f2f62d34caf5e1435c" #h"00e95f4e8a32a03e0a3afba0fd62c7c3c7120b41e297a7ff14958c0bdf015a478f7bab9a22082bfb0d206e88f4685117") (:digest-test #h"2eae76f4e7f48d36cd83607813ce6bd9ab0ecf846ad999df67f64706a4708977f0e9440f0b31dc350c17b355007fed90d4b577b175014763357ce5a271212a70702747c98f8f0ad89bf95d6b7fbb10a51f34d8f2835e974038a3dd6df3f2affb7811" #h"eb396cfaf26ee2775af3c9a3a3047664ca34cbc228ccbb966df187d518717df6a328ecc316ed0ed09b170080eccc486f") (:digest-test #h"093e56d33bd9337ad2ad268d14bac69a64a8a7361350cf9f787e69a043f5beb50eb460703578a81be882639f7e9ac9a50c54affa3792fd38464a61a37c8a4551a4b9ff8eed1f487ef8a8f00430e4d0e35a53ff236ce049b7a3abdc5cd00b45c4f3d49b" #h"4a339128486e5b274fc4ed538c0ec9e57f780e9c500c5f92b04ae81a22fbeebf3785259a0bb3b6d9b47f31873cd8dffa") (:digest-test #h"0593babe7a6202077c026e253cb4c60ee7bad7b1c31a20da7aa0ce56b622eb57ed07d21a7f0ae6c6fe3c8398cc48353decfb287f1204e024fcf82a13059953b9f85797ab2217dc8dab34a13226c33104661c1ca79396e7d97e91039d32bafc98cc8af3bb" #h"5981815c1618cc49cd5cf71a4b7b32b8cd7b7ef553bfaef2149ac723ff2582a2d345c5bd05943e155ced1e5f091c5601") (:digest-test #h"ae1828047c5f82a7b9712f3399832124b892f2f7aea51c8fe3536cd6a584b4a7777cc1ecac158c03354bb467b8fe2c8ce2f4310afd1e80fec51cc5ad7702566b2c5d21bc6571e4b8e7c59cb4c9e23f1ecb57ada9e900e4aa308874c2d12d34be74c332bbce" #h"7257f5bfa7d33d1cf5f4550d0cb78750e84c5b7d25027da6acec64bdf30879a0e5c97fe7c468e743aa5ec2bddb29d193") (:digest-test #h"3bceedf5df8fe699871decb7dd48203e2518fb0fce0f865f46adce5c133a921320bf40915456204869a3ceb5fca3ed40e0a41a64b8951f0fc580694cfc55bd1f5ce926b07e3e32ac6e055de9b961ce49c7ee41e06b024559b933a79518192e969855889c85d1" #h"60d7f8bd85fb7a13701db5aded2b7771ab5e476ec34f1fd4298978defbd2b31bb2979391559a164b3ed28f6a39031a11") (:digest-test #h"6c36147652e71b560becbca1e7656c81b4f70bece26321d5e55e67a3db9d89e26f2f2a38fd0f289bf7fa22c2877e38d9755412794cef24d7b855303c332e0cb5e01aa50bb74844f5e345108d6811d5010978038b699ffaa370de8473f0cda38b89a28ed6cabaf6" #h"b1319192df11faa00d3c4b068becc8f1ba3b00e0d1ff1f93c11a3663522fdb92ab3cca389634687c632e0a4b5a26ce92") (:digest-test #h"92c41d34bd249c182ad4e18e3b856770766f1757209675020d4c1cf7b6f7686c8c1472678c7c412514e63eb9f5aee9f5c9d5cb8d8748ab7a5465059d9cbbb8a56211ff32d4aaa23a23c86ead916fe254cc6b2bff7a9553df1551b531f95bb41cbbc4acddbd372921" #h"71307eec1355f73e5b726ed9efa1129086af81364e30a291f684dfade693cc4bc3d6ffcb7f3b4012a21976ff9edcab61") (:digest-test #h"5fe35923b4e0af7dd24971812a58425519850a506dfa9b0d254795be785786c319a2567cbaa5e35bcf8fe83d943e23fa5169b73adc1fcf8b607084b15e6a013df147e46256e4e803ab75c110f77848136be7d806e8b2f868c16c3a90c14463407038cb7d9285079ef162c6a45cedf9c9f066375c969b5fcbcda37f02aacff4f31cded3767570885426bebd9eca877e44674e9ae2f0c24cdd0e7e1aaf1ff2fe7f80a1c4f5078eb34cd4f06fa94a2d1eab5806ca43fd0f06c60b63d5402b95c70c21ea65a151c5cfaf8262a46be3c722264b" #h"3054d249f916a6039b2a9c3ebec1418791a0608a170e6d36486035e5f92635eaba98072a85373cb54e2ae3f982ce132b") (:digest-test #h"035adcb639e5f28bb5c88658f45c1ce0be16e7dafe083b98d0ab45e8dcdbfa38e3234dfd973ba555b0cf8eea3c82ae1a3633fc565b7f2cc839876d3989f35731be371f60de140e3c916231ec780e5165bf5f25d3f67dc73a1c33655dfdf439dfbf1cbba8b779158a810ad7244f06ec078120cd18760af436a238941ce1e687880b5c879dc971a285a74ee85c6a746749a30159ee842e9b03f31d613dddd22975cd7fed06bd049d772cb6cc5a705faa734e87321dc8f2a4ea366a368a98bf06ee2b0b54ac3a3aeea637caebe70ad09ccda93cc06de95df73394a87ac9bbb5083a4d8a2458e91c7d5bf113aecae0ce279fdda76ba690787d26345e94c3edbc16a35c83c4d071b132dd81187bcd9961323011509c8f644a1c0a3f14ee40d7dd186f807f9edc7c02f6761061bbb6dd91a6c96ec0b9f10edbbd29dc52" #h"02535d86cc7518484a2a238c921b739b1704a50370a2924abf39958c5976e658dc5e87440063112459bddb40308b1c70") (:digest-test #h"7f25b2c0eb1a6911cc3328fcdcd40f28f010375f7b1b51a05402896fb999b17093b59b34fb9cc653feba3dbb9d96bd47180416946d9bd3101b691d532be6ddb3712721121054c1fb3c5c42ee44e7faf7cf8d75856545187a3220047f07373e9aa2e10c022f2aa2320f81fd3cd7b110609c131edd6e016707228d069a55731a4ead4d24ab6206b01ffd91384e60db45a907fed7428db707de721aeb4c1b84baf61ad230b6b0d034eb90f4b9cbe64de2fb98b6695dcc4f4129aa2e7a3f635166bb72d7faca227076bd5013495c72ef2e7dd8a39cd532b15d0d53307c1834c265c53cc64890becfbebec454afa90ba973584e2d3752c7c6a3b4f48aba8297bf013b0006e3b08ed354157420b559b963f7b383bd047e94745a4615a3f9239230804547ff93d19a657fece8e02114840504b7fdb9c9fea0a4ccea3ee304a330fd2b0d97191f9be86e8968a9fabc847577e08b468b4f7df43f3fc9f8b2a2ab760f4ab87bbc51b883d4b8b33ed84e4f93a1d359e6995ea1962bfc0bca789ae36e4c25717850efcd708155f52fe09f1de76b2746634dbe1290524bd73d9db5f21f9d035e183dc2" #h"927962c873a69caa05cadc1cb485eb1cbb07748e47d942192df4af9233f42b95a638918306ae83a8237d21c2824f666d") (:digest-test #h"386f98670b177683d0b804c5875fe9c7afa233ee66349c9fd1b60bb0becf5e1d887e67fd3baf34b4f90d94699d18d6bb9d77d4af358f31edc254de2d6c5fe3ec07425c633b18c1b9e3606b78b40b543e1fd31fb578cf58c45744fc073fbf3c7d7d607e815379a5fc565892d81560eab8fb5f1ae6771b998c592e6d288014f13ab283d53fcbfa66e31a9d107308402191fac2cf2b799c7dae91b93a7676898b8a6e516a86eac58ed8f6d8ed2fd4d38031e4a4466dc8798b90c48e6adb6b4391d47872443cfaffa542b4b132f6c3408f0081af8692aadb4c9bbd55053ea56d8b82998f6b4b41d331891acfe6af1bb0d6679989978368ea463743b514866d2d01fb9950e8990867bc14f1db1142254adeccf3da812949cd03cd1d569e9d0bab7ca7405cc21096e3cd4d007cbb9629372e98584b4c6b97ad0bc314e1ab6ac71184ee555c01973570ed9b115bed956f9e4e349083013098b1e483f0fe44d5e9849f38a2f7ae152b36a266ea1faf263ea8c706632ba8629602187379546fc6b82e57ededd6d074c15c771754710731e07c207899eb47e8d7c72ffd768c36257d373375ffa06f9b3f0af11417f9ff9f9b44e1f1f96ae8aaa429af88b14da1da81c7bb38a0fe9372ed6a9ac6fb5e9e56b82593d94c5192904450227bf040b7ce0904789f979845e112a1f995c849ec3f7e49bd975a474e8201630f40fc0d80e76019f110ae158cd0f8da96ea4561f242" #h"d30ec9a7baeabe40f6648a624dddf8721c89542e258f0fa9afcc9e68433faef781824048b0b771a94e8f0c17a403f9fb") (:digest-test #h"8c569727f1d4548f1c66a5c830346259612d10c5fef90518ae2fcdbffac9cd9c0bd5265ab56ddcfeb5e838bf37526a189c1a731b790b4208e37d1d1eeacd43b1630ad07debf1e03a281cf7715276a18df2f25535ea7d9fd9b6317f8bf1cb0c111b5f5c38994aa86bfd69ac8388884de1ed1d7eba583764b3afb1b8ae18ab6ee3bb3a9432c95f7cb7bd361da0e270b73b1503b653cc20d9bd5766932e6655b250cc053e148218a449efed136e661627c4f10dc5a84d22462035b8d7b4e4b11f7fd5272385cd5d67471bf556951e63e4a409a17260e324f203d2104be798a8ff985e080b2eb1160fdacab6aebe123d3802e5298624960f268fb4d4b9708c2098c5ef10beb6362be2298298e391498e69060e0bca9b6fc92aec656ee7f6c802342c11a703c76484295dce03bcb5cb3cc0da0bb1036e753b46416d449d22523719f54b35a306440a2b9d335f03d3a03085a36481fc44b14dc2b652c0a59c34a68f492622671ddda332123b147e92d153008ca2e57cc629e8e5759e48c60b7636e05029d614b4373884e36d8af69b648c79ba4c444a9ce7f2f8a3d846c7171ed15231dcba75725bb26a395129329564c23758ea052f6df355436b89217169365e2f15c734510050f72c3c705afc29d6df838c0492f3e153f70ef338418ca9c5c4bd2373ad6f051ef1121351831affc4caa57e23525ea111c2a1636d0ee07fd4ed4584678e982ace8664e77d0e55be356be558cead3755359c43e4b1f034916ac00e5f2b3d941767a069df7a61750e32aa8a3f8e0b48a5c56f3e9e8a4f518a8f2562dd48242b73f1266a24d2e64299c26fde5dead45737cb22d8b8839300104b04872645a925e77500afdd0c038404eda227da6a702db64e" #h"91e24f999cac1b9ab9ae456ecf47b52c1144ffd1df2d95feb05fce930e37ff767a005cf07bb7af45c8a73585e8544965") ironclad-0.57/testing/test-vectors/sha3.testvec000066400000000000000000000505451420372057600216330ustar00rootroot00000000000000;;; tests vectors from http://www.di-mgt.com.au/sha_testvectors.html (:digest-test #a"" #h"a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f500199d95b6d3e301758586281dcd26") (:digest-test #a"abc" #h"b751850b1a57168a5693cd924b6b096e08f621827444f70d884f5d0240d2712e10e116e9192af3c91a7ec57647e3934057340b4cf408d5a56592f8274eec53f0") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"04a371e84ecfb5b8b77cb48610fca8182dd457ce6f326a0fd3d7ec2f1e91636dee691fbe0c985302ba1b0d8dc78c086346b533b49c030d99a27daf1139d6e75e") (:digest-test #a"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" #h"afebb2ef542e6579c50cad06d2e578f9f8dd6881d7dc824d26360feebf18a4fa73e3261122948efcfd492e74e82e2189ed0fb440d187f382270cb455f21dd185") ;;; tests vectors from CAVS 19.0 (:digest-test #h"e5" #h"150240baf95fb36f8ccb87a19a41767e7aed95125075a2b2dbba6e565e1ce8575f2b042b62e29a04e9440314a821c6224182964d8b557b16a492b3806f4c39c1") (:digest-test #h"ef26" #h"809b4124d2b174731db14585c253194c8619a68294c8c48947879316fef249b1575da81ab72aad8fae08d24ece75ca1be46d0634143705d79d2f5177856a0437") (:digest-test #h"37d518" #h"4aa96b1547e6402c0eee781acaa660797efe26ec00b4f2e0aec4a6d10688dd64cbd7f12b3b6c7f802e2096c041208b9289aec380d1a748fdfcd4128553d781e3") (:digest-test #h"fc7b8cda" #h"58a5422d6b15eb1f223ebe4f4a5281bc6824d1599d979f4c6fe45695ca89014260b859a2d46ebf75f51ff204927932c79270dd7aef975657bb48fe09d8ea008e") (:digest-test #h"4775c86b1c" #h"ce96da8bcd6bc9d81419f0dd3308e3ef541bc7b030eee1339cf8b3c4e8420cd303180f8da77037c8c1ae375cab81ee475710923b9519adbddedb36db0c199f70") (:digest-test #h"71a986d2f662" #h"def6aac2b08c98d56a0501a8cb93f5b47d6322daf99e03255457c303326395f765576930f8571d89c01e727cc79c2d4497f85c45691b554e20da810c2bc865ef") (:digest-test #h"ec83d707a1414a" #h"84fd3775bac5b87e550d03ec6fe4905cc60e851a4c33a61858d4e7d8a34d471f05008b9a1d63044445df5a9fce958cb012a6ac778ecf45104b0fcb979aa4692d") (:digest-test #h"af53fa3ff8a3cfb2" #h"03c2ac02de1765497a0a6af466fb64758e3283ed83d02c0edb3904fd3cf296442e790018d4bf4ce55bc869cebb4aa1a799afc9d987e776fef5dfe6628e24de97") (:digest-test #h"3d6093966950abd846" #h"53e30da8b74ae76abf1f65761653ebfbe87882e9ea0ea564addd7cfd5a6524578ad6be014d7799799ef5e15c679582b791159add823b95c91e26de62dcb74cfa") (:digest-test #h"1ca984dcc913344370cf" #h"6915ea0eeffb99b9b246a0e34daf3947852684c3d618260119a22835659e4f23d4eb66a15d0affb8e93771578f5e8f25b7a5f2a55f511fb8b96325ba2cd14816") (:digest-test #h"fc7b8cdadebe48588f6851" #h"c8439bb1285120b3c43631a00a3b5ac0badb4113586a3dd4f7c66c5d81012f7412617b169fa6d70f8e0a19e5e258e99a0ed2dcfa774c864c62a010e9b90ca00d") (:digest-test #h"ecb907adfb85f9154a3c23e8" #h"94ae34fed2ef51a383fb853296e4b797e48e00cad27f094d2f411c400c4960ca4c610bf3dc40e94ecfd0c7a18e418877e182ca3ae5ca5136e2856a5531710f48") (:digest-test #h"d91a9c324ece84b072d0753618" #h"fb1f06c4d1c0d066bdd850ab1a78b83296eba0ca423bb174d74283f46628e6095539214adfd82b462e8e9204a397a83c6842b721a32e8bb030927a568f3c29e6") (:digest-test #h"c61a9188812ae73994bc0d6d4021" #h"069e6ab1675fed8d44105f3b62bbf5b8ff7ae804098986879b11e0d7d9b1b4cb7bc47aeb74201f509ddc92e5633abd2cbe0ddca2480e9908afa632c8c8d5af2a") (:digest-test #h"a6e7b218449840d134b566290dc896" #h"3605a21ce00b289022193b70b535e6626f324739542978f5b307194fcf0a5988f542c0838a0443bb9bb8ff922a6a177fdbd12cf805f3ed809c48e9769c8bbd91") (:digest-test #h"054095ba531eec22113cc345e83795c7" #h"f3adf5ccf2830cd621958021ef998252f2b6bc4c135096839586d5064a2978154ea076c600a97364bce0e9aab43b7f1f2da93537089de950557674ae6251ca4d") (:digest-test #h"5b1ec1c4e920f5b995b6a788b6e989ac29" #h"135eea17ca4785482c19cd668b8dd2913216903311fa21f6b670b9b573264f8875b5d3c071d92d63556549e523b2af1f1a508bd1f105d29a436f455cd2ca1604") (:digest-test #h"133b497b00932773a53ba9bf8e61d59f05f4" #h"783964a1cf41d6d210a8d7c81ce6970aa62c9053cb89e15f88053957ecf607f42af08804e76f2fbdbb31809c9eefc60e233d6624367a3b9c30f8ee5f65be56ac") (:digest-test #h"88c050ea6b66b01256bda299f399398e1e3162" #h"6bf7fc8e9014f35c4bde6a2c7ce1965d9c1793f25c141021cc1c697d111363b3854953c2b4009df41878b5558e78a9a9092c22b8baa0ed6baca005455c6cca70") (:digest-test #h"d7d5363350709e96939e6b68b3bbdef6999ac8d9" #h"7a46beca553fffa8021b0989f40a6563a8afb641e8133090bc034ab6763e96d7b7a0da4de3abd5a67d8085f7c28b21a24aefb359c37fac61d3a5374b4b1fb6bb") (:digest-test #h"54746a7ba28b5f263d2496bd0080d83520cd2dc503" #h"d77048df60e20d03d336bfa634bc9931c2d3c1e1065d3a07f14ae01a085fe7e7fe6a89dc4c7880f1038938aa8fcd99d2a782d1bbe5eec790858173c7830c87a2") (:digest-test #h"73df7885830633fc66c9eb16940b017e9c6f9f871978" #h"0edee1ea019a5c004fd8ae9dc8c2dd38d4331abe2968e1e9e0c128d2506db981a307c0f19bc2e62487a92992af77588d3ab7854fe1b68302f796b9dcd9f336df") (:digest-test #h"14cb35fa933e49b0d0a400183cbbea099c44995fae1163" #h"af2ef4b0c01e381b4c382208b66ad95d759ec91e386e953984aa5f07774632d53b581eba32ed1d369c46b0a57fee64a02a0e5107c22f14f2227b1d11424becb5") (:digest-test #h"75a06869ca2a6ea857e26e78bb78a139a671ccb098d8205a" #h"88be1934385522ae1d739666f395f1d7f99978d62883a261adf5d618d012dfab5224575634446876b86b3e5f7609d397d338a784b4311027b1024ddfd4995a0a") (:digest-test #h"b413ab364dd410573b53f4c2f28982ca07061726e5d999f3c2" #h"289e889b25f9f38facfccf3bdbceea06ef3baad6e9612b7232cd553f4884a7a642f6583a1a589d4dcb2dc771f1ff6d711b85f731145a89b100680f9a55dcbb3f") (:digest-test #h"d7f9053984213ebabc842fd8ce483609a9af5dc140ecdbe63336" #h"f167cb30e4bacbdc5ed53bc615f8c9ea19ad4f6bd85ca0ff5fb1f1cbe5b576bda49276aa5814291a7e320f1d687b16ba8d7daab2b3d7e9af3cd9f84a1e9979a1") (:digest-test #h"9b7f9d11be48e786a11a472ab2344c57adf62f7c1d4e6d282074b6" #h"82fa525d5efaa3cce39bffef8eee01afb52067097f8965cde71703345322645eae59dbaebed0805693104dfb0c5811c5828da9a75d812e5562615248c03ff880") (:digest-test #h"115784b1fccfabca457c4e27a24a7832280b7e7d6a123ffce5fdab72" #h"ec12c4ed5ae84808883c5351003f7e26e1eaf509c866b357f97472e5e19c84f99f16dbbb8bfff060d6c0fe0ca9c34a210c909b05f6a81f441627ce8e666f6dc7") (:digest-test #h"c3b1ad16b2877def8d080477d8b59152fe5e84f3f3380d55182f36eb5f" #h"4b9144edeeec28fd52ba4176a78e080e57782d2329b67d8ac8780bb6e8c2057583172af1d068922feaaff759be5a6ea548f5db51f4c34dfe7236ca09a67921c7") (:digest-test #h"4c66ca7a01129eaca1d99a08dd7226a5824b840d06d0059c60e97d291dc4" #h"567c46f2f636223bd5ed3dc98c3f7a739b42898e70886f132eac43c2a6fadabe0dd9f1b6bc4a9365e5232295ac1ac34701b0fb181d2f7f07a79d033dd426d5a2") (:digest-test #h"481041c2f56662316ee85a10b98e103c8d48804f6f9502cf1b51cfa525cec1" #h"46f0058abe678195b576df5c7eb8d739468cad1908f7953ea39c93fa1d96845c38a2934d23804864a8368dae38191d983053ccd045a9ab87ef2619e9dd50c8c1") (:digest-test #h"7c1688217b313278b9eae8edcf8aa4271614296d0c1e8916f9e0e940d28b88c5" #h"627ba4de74d05bb6df8991112e4d373bfced37acde1304e0f664f29fa126cb497c8a1b717b9929120883ec8898968e4649013b760a2180a9dc0fc9b27f5b7f3b") (:digest-test #h"785f6513fcd92b674c450e85da22257b8e85bfa65e5d9b1b1ffc5c469ad337d1e3" #h"5c11d6e4c5c5f76d26876c5976b6f555c255c785b2f28b6700ca2d8b3b3fa585636239277773330f4cf8c5d5203bcc091b8d47e7743bbc0b5a2c54444ee2acce") (:digest-test #h"34f4468e2d567b1e326c0942970efa32c5ca2e95d42c98eb5d3cab2889490ea16ee5" #h"49adfa335e183c94b3160154d6698e318c8b5dd100b0227e3e34cabea1fe0f745326220f64263961349996bbe1aae9054de6406e8b350408ab0b9f656bb8daf7") (:digest-test #h"53a0121c8993b6f6eec921d2445035dd90654add1298c6727a2aed9b59bafb7dd62070" #h"918b4d92e1fcb65a4c1fa0bd75c562ac9d83186bb2fbfae5c4784de31a14654546e107df0e79076b8687bb3841c83ba9181f9956cd43428ba72f603881b33a71") (:digest-test #h"d30fa4b40c9f84ac9bcbb535e86989ec6d1bec9b1b22e9b0f97370ed0f0d566082899d96" #h"39f104c1da4af314d6bceb34eca1dfe4e67484519eb76ba38e4701e113e6cbc0200df86e4439d674b0f42c72233360478ba5244384d28e388c87aaa817007c69") (:digest-test #h"f34d100269aee3ead156895e8644d4749464d5921d6157dffcbbadf7a719aee35ae0fd4872" #h"565a1dd9d49f8ddefb79a3c7a209f53f0bc9f5396269b1ce2a2b283a3cb45ee3ae652e4ca10b26ced7e5236227006c94a37553db1b6fe5c0c2eded756c896bb1") (:digest-test #h"12529769fe5191d3fce860f434ab1130ce389d340fca232cc50b7536e62ad617742e022ea38a" #h"daee10e815fff0f0985d208886e22f9bf20a3643eb9a29fda469b6a7dcd54b5213c851d6f19338d63688fe1f02936c5dae1b7c6d5906a13a9eeb934400b6fe8c") (:digest-test #h"b2e3a0eb36bf16afb618bfd42a56789179147effecc684d8e39f037ec7b2d23f3f57f6d7a7d0bb" #h"04029d6d9e8e394afa387f1d03ab6b8a0a6cbab4b6b3c86ef62f7142ab3c108388d42cb87258b9e6d36e5814d8a662657cf717b35a5708365e8ec0396ec5546b") (:digest-test #h"25c4a5f4a07f2b81e0533313664bf615c73257e6b2930e752fe5050e25ff02731fd2872f4f56f727" #h"ec2d38e5bb5d7b18438d5f2029c86d05a03510db0e66aa299c28635abd0988c58be203f04b7e0cc25451d18f2341cd46f8705d46c2066dafab30d90d63bf3d2c") (:digest-test #h"134bb8e7ea5ff9edb69e8f6bbd498eb4537580b7fba7ad31d0a09921237acd7d66f4da23480b9c1222" #h"8f966aef96831a1499d63560b2578021ad970bf7557b8bf8078b3e12cefab122fe71b1212dc704f7094a40b36b71d3ad7ce2d30f72c1baa4d4bbccb3251198ac") (:digest-test #h"f793256f039fad11af24cee4d223cd2a771598289995ab802b5930ba5c666a24188453dcd2f0842b8152" #h"22c3d9712535153a3e206b1033929c0fd9d937c39ba13cf1a6544dfbd68ebc94867b15fda3f1d30b00bf47f2c4bf41dabdeaa5c397dae901c57db9cd77ddbcc0") (:digest-test #h"23cc7f9052d5e22e6712fab88e8dfaa928b6e015ca589c3b89cb745b756ca7c7634a503bf0228e71c28ee2" #h"6ecf3ad6064218ee101a555d20fab6cbeb6b145b4eeb9c8c971fc7ce05581a34b3c52179590e8a134be2e88c7e549875f4ff89b96374c6995960de3a5098cced") (:digest-test #h"a60b7b3df15b3f1b19db15d480388b0f3b00837369aa2cc7c3d7315775d7309a2d6f6d1371d9c875350dec0a" #h"8d651605c6b32bf022ea06ce6306b2ca6b5ba2781af87ca2375860315c83ad88743030d148ed8d73194c461ec1e84c045fc914705747614c04c8865b51da94f7") (:digest-test #h"2745dd2f1b215ea509a912e5761cccc4f19fa93ba38445c528cb2f099de99ab9fac955baa211fd8539a671cdb6" #h"4af918eb676ce278c730212ef79d818773a76a43c74d643f238e9b61acaf4030c617c4d6b3b7514c59b3e5e95d82e1e1e35443e851718b13b63e70b123d1b72c") (:digest-test #h"88adee4b46d2a109c36fcfb660f17f48062f7a74679fb07e86cad84f79fd57c86d426356ec8e68c65b3caa5bc7ba" #h"6257acb9f589c919c93c0adc4e907fe011bef6018fbb18e618ba6fcc8cbc5e40641be589e86dbb0cf7d7d6bf33b98d8458cce0af7857f5a7c7647cf350e25af0") (:digest-test #h"7d40f2dc4af3cfa12b00d64940dc32a22d66d81cb628be2b8dda47ed6728020d55b695e75260f4ec18c6d74839086a" #h"5c46c84a0a02d898ed5885ce99c47c77afd29ae015d027f2485d630f9b41d00b7c1f1faf6ce57a08b604b35021f7f79600381994b731bd8e6a5b010aeb90e1eb") (:digest-test #h"3689d8836af0dc132f85b212eb670b41ecf9d4aba141092a0a8eca2e6d5eb0ba4b7e61af9273624d14192df7388a8436" #h"17355e61d66e40f750d0a9a8e8a88cd6f9bf6070b7efa76442698740b4487ea6c644d1654ef16a265204e03084a14cafdccf8ff298cd54c0b4009967b6dd47cc") (:digest-test #h"58ff23dee2298c2ca7146227789c1d4093551047192d862fc34c1112d13f1f744456cecc4d4a02410523b4b15e598df75a" #h"aca89aa547c46173b4b2a380ba980da6f9ac084f46ac9ddea5e4164aeef31a9955b814a45aec1d8ce340bd37680952c5d68226dda1cac2677f73c9fd9174fd13") (:digest-test #h"67f3f23df3bd8ebeb0096452fe4775fd9cc71fbb6e72fdcc7eb8094f42c903121d0817a927bcbabd3109d5a70420253deab2" #h"f4207cc565f266a245f29bf20b95b5d9a83e1bb68ad988edc91faa25f25286c8398bac7dd6628259bff98f28360f263dfc54c4228bc437c5691de1219b758d9f") (:digest-test #h"a225070c2cb122c3354c74a254fc7b84061cba33005cab88c409fbd3738ff67ce23c41ebef46c7a61610f5b93fa92a5bda9569" #h"e815a9a4e4887be014635e97958341e0519314b3a3289e1835121b153b462272b0aca418be96d60e5ab355d3eb463697c0191eb522b60b8463d89f4c3f1bf142") (:digest-test #h"6aa0886777e99c9acd5f1db6e12bda59a807f92411ae99c9d490b5656acb4b115c57beb3c1807a1b029ad64be1f03e15bafd91ec" #h"241f2ebaf7ad09e173b184244e69acd7ebc94774d0fa3902cbf267d4806063b044131bcf4af4cf180eb7bd4e7960ce5fe3dc6aebfc6b90eec461f414f79a67d9") (:digest-test #h"6a06092a3cd221ae86b286b31f326248270472c5ea510cb9064d6024d10efee7f59e98785d4f09da554e97cdec7b75429d788c112f" #h"d14a1a47f2bef9e0d4b3e90a6be9ab5893e1110b12db38d33ffb9a61e1661aecc4ea100839cfee58a1c5aff72915c14170dd99e13f71b0a5fc1985bf43415cb0") (:digest-test #h"dfc3fa61f7fffc7c88ed90e51dfc39a4f288b50d58ac83385b58a3b2a3a39d729862c40fcaf9bc308f713a43eecb0b72bb9458d204ba" #h"947bc873dc41df195f8045deb6ea1b840f633917e79c70a88d38b8862197dc2ab0cc6314e974fb5ba7e1703b22b1309e37bd430879056bdc166573075a9c5e04") (:digest-test #h"52958b1ff0049efa5d050ab381ec99732e554dcd03725da991a37a80bd4756cf65d367c54721e93f1e0a22f70d36e9f841336956d3c523" #h"9cc5aad0f529f4bac491d733537b69c8ec700fe38ab423d815e0927c8657f9cb8f4207762d816ab697580122066bc2b68f4177335d0a6e9081540779e572c41f") (:digest-test #h"302fa84fdaa82081b1192b847b81ddea10a9f05a0f04138fd1da84a39ba5e18e18bc3cea062e6df92ff1ace89b3c5f55043130108abf631e" #h"8c8eaae9a445643a37df34cfa6a7f09deccab2a222c421d2fc574bbc5641e504354391e81eb5130280b1226812556d474e951bb78dbdd9b77d19f647e2e7d7be") (:digest-test #h"b82f500d6bc2dddcdc162d46cbfaa5ae64025d5c1cd72472dcd2c42161c9871ce329f94df445f0c8aceecafd0344f6317ecbb62f0ec2223a35" #h"55c69d7accd179d5d9fcc522f794e7af5f0eec7198ffa39f80fb55b866c0857ff3e7aeef33e130d9c74ef90606ca821d20b7608b12e6e561f9e6c7122ace3db0") (:digest-test #h"86da9107ca3e16a2b58950e656a15c085b88033e79313e2c0f92f99f06fa187efba5b8fea08eb7145f8476304180dd280f36a072b7eac197f085" #h"0d3b1a0459b4eca801e0737ff9ea4a12b9a483a73a8a92742a93c297b7149326bd92c1643c8177c8924482ab3bbd916c417580cc75d3d3ae096de531bc5dc355") (:digest-test #h"141a6eafe157053e780ac7a57b97990616ce1759ed132cb453bcdfcabdbb70b3767da4eb94125d9c2a8d6d20bfaeacc1ffbe49c4b1bb5da7e9b5c6" #h"bdbdd5b94cdc89466e7670c63ba6a55b58294e93b351261a5457bf5a40f1b5b2e0acc7fceb1bfb4c8872777eeeaff7927fd3635ca18c996d870bf86b12b89ba5") (:digest-test #h"6e0c65ee0943e34d9bbd27a8547690f2291f5a86d713c2be258e6ac16919fe9c4d491895d3a961bb97f5fac255891a0eaa18f80e1fa1ebcb639fcfc1" #h"39ebb992b8d39daae973e3813a50e9e79a67d8458a6f17f97a6dd30dd7d11d95701a11129ffeaf7d45781b21cac0c4c034e389d7590df5beeb9805072d0183b9") (:digest-test #h"57780b1c79e67fc3beaabead4a67a8cc98b83fa7647eae50c8798b96a516597b448851e93d1a62a098c4767333fcf7b463ce91edde2f3ad0d98f70716d" #h"3ef36c3effad6eb5ad2d0a67780f80d1b90efcb74db20410c2261a3ab0f784429df874814748dc1b6efaab3d06dd0a41ba54fce59b67d45838eaa4aa1fadfa0f") (:digest-test #h"bcc9849da4091d0edfe908e7c3386b0cadadb2859829c9dfee3d8ecf9dec86196eb2ceb093c5551f7e9a4927faabcfaa7478f7c899cbef4727417738fc06" #h"1fcd8a2c7b4fd98fcdc5fa665bab49bde3f9f556aa66b3646638f5a2d3806192f8a33145d8d0c535c85adff3cc0ea3c2715b33cec9f8886e9f4377b3632e9055") (:digest-test #h"05a32829642ed4808d6554d16b9b8023353ce65a935d126602970dba791623004dede90b52ac7f0d4335130a63cba68c656c139989614de20913e83db320db" #h"49d8747bb53ddde6d1485965208670d1130bf35619d7506a2f2040d1129fcf0320207e5b36fea083e84ffc98755e691ad8bd5dc66f8972cb9857389344e11aad") (:digest-test #h"56ac4f6845a451dac3e8886f97f7024b64b1b1e9c5181c059b5755b9a6042be653a2a0d5d56a9e1e774be5c9312f48b4798019345beae2ffcc63554a3c69862e" #h"5fde5c57a31febb98061f27e4506fa5c245506336ee90d595c91d791a5975c712b3ab9b3b5868f941db0aeb4c6d2837c4447442f8402e0e150a9dc0ef178dca8") (:digest-test #h"8a229f8d0294fe90d4cc8c875460d5d623f93287f905a999a2ab0f9a47046f78ef88b09445c671189c59388b3017cca2af8bdf59f8a6f04322b1701ec08624ab63" #h"16b0fd239cc632842c443e1b92d286dd519cfc616a41f2456dd5cddebd10703c3e9cb669004b7f169bb4f99f350ec96904b0e8dd4de8e6be9953dc892c65099f") (:digest-test #h"87d6aa9979025b2437ea8159ea1d3e5d6f17f0a5b913b56970212f56de7884840c0da9a72865e1892aa780b8b8f5f57b46fc070b81ca5f00eee0470ace89b1e1466a" #h"d816acf1797decfe34f4cc49e52aa505cc59bd17fe69dc9543fad82e9cf96298183021f704054d3d06adde2bf54e82a090a57b239e88daa04cb76c4fc9127843") (:digest-test #h"0823616ab87e4904308628c2226e721bb4169b7d34e8744a0700b721e38fe05e3f813fe4075d4c1a936d3a33da20cfb3e3ac722e7df7865330b8f62a73d9119a1f2199" #h"e1da6be4403a4fd784c59be4e71c658a78bb8c5d7d571c5e816fbb3e218a4162f62de1c285f3779781cb5506e29c94e1b7c7d65af2aa71ea5c96d9585b5e45d5") (:digest-test #h"7d2d913c2460c09898b20366ae34775b1564f10edea49c073cebe41989bb93f38a533af1f425d3382f8aa40159b567358ee5a73b67df6d0dc09c1c92bf3f9a28124ab07f" #h"3aa1e19a52b86cf414d977768bb535b7e5817117d436b4425ec8d775e8cb0e0b538072213884c7ff1bb9ca9984c82d65cb0115cc07332b0ea903e3b38650e88e") (:digest-test #h"fca5f68fd2d3a52187b349a8d2726b608fccea7db42e906b8718e85a0ec654fac70f5a839a8d3ff90cfed7aeb5ea9b08f487fc84e1d9f7fb831dea254468a65ba18cc5a126" #h"2c74f846ecc722ea4a1eb1162e231b6903291fffa95dd5e1d17dbc2c2be7dfe549a80dd34487d714130ddc9924aed904ad55f49c91c80ceb05c0c034dae0a0a4") (:digest-test #h"881ff70ca34a3e1a0e864fd2615ca2a0e63def254e688c37a20ef6297cb3ae4c76d746b5e3d6bb41bd0d05d7df3eeded74351f4eb0ac801abe6dc10ef9b635055ee1dfbf4144" #h"9a10a7ce23c0497fe8783927f833232ae664f1e1b91302266b6ace25a9c253d1ecab1aaaa62f865469480b2145ed0e489ae3f3f9f7e6da27492c81b07e606fb6") (:digest-test #h"b0de0430c200d74bf41ea0c92f8f28e11b68006a884e0d4b0d884533ee58b38a438cc1a75750b6434f467e2d0cd9aa4052ceb793291b93ef83fd5d8620456ce1aff2941b3605a4" #h"9e9e469ca9226cd012f5c9cc39c96adc22f420030fcee305a0ed27974e3c802701603dac873ae4476e9c3d57e55524483fc01adaef87daa9e304078c59802757") (:digest-test #h"0ce9f8c3a990c268f34efd9befdb0f7c4ef8466cfdb01171f8de70dc5fefa92acbe93d29e2ac1a5c2979129f1ab08c0e77de7924ddf68a209cdfa0adc62f85c18637d9c6b33f4ff8" #h"b018a20fcf831dde290e4fb18c56342efe138472cbe142da6b77eea4fce52588c04c808eb32912faa345245a850346faec46c3a16d39bd2e1ddb1816bc57d2da") (:digest-test #h"664ef2e3a7059daf1c58caf52008c5227e85cdcb83b4c59457f02c508d4f4f69f826bd82c0cffc5cb6a97af6e561c6f96970005285e58f21ef6511d26e709889a7e513c434c90a3cf7448f0caeec7114c747b2a0758a3b4503a7cf0c69873ed31d94dbef2b7b2f168830ef7da3322c3d3e10cafb7c2c33c83bbf4c46a31da90cff3bfd4ccc6ed4b310758491eeba603a76" #h"e5825ff1a3c070d5a52fbbe711854a440554295ffb7a7969a17908d10163bfbe8f1d52a676e8a0137b56a11cdf0ffbb456bc899fc727d14bd8882232549d914e") (:digest-test #h"991c4e7402c7da689dd5525af76fcc58fe9cc1451308c0c4600363586ccc83c9ec10a8c9ddaec3d7cfbd206484d09634b9780108440bf27a5fa4a428446b3214fa17084b6eb197c5c59a4e8df1cfc521826c3b1cbf6f4212f6bfb9bc106dfb5568395643de58bffa2774c31e67f5c1e7017f57caadbb1a56cc5b8a5cf9584552e17e7af9542ba13e9c54695e0dc8f24eddb93d5a3678e10c8a80ff4f27b677d40bef5cb5f9b3a659cc4127970cd2c11ebf22d514812dfefdd73600dfc10efba38e93e5bff47736126043e50f8b9b941e4ec3083fb762dbf15c86" #h"cd0f2a48e9aa8cc700d3f64efb013f3600ebdbb524930c682d21025eab990eb6d7c52e611f884031fafd9360e5225ab7e4ec24cbe97f3af6dbe4a86a4f068ba7") (:digest-test #h"22e1df25c30d6e7806cae35cd4317e5f94db028741a76838bfb7d5576fbccab001749a95897122c8d51bb49cfef854563e2b27d9013b28833f161d520856ca4b61c2641c4e184800300aede3518617c7be3a4e6655588f181e9641f8df7a6a42ead423003a8c4ae6be9d767af5623078bb116074638505c10540299219b0155f45b1c18a74548e4328de37a911140531deb6434c534af2449c1abe67e18030681a61240225f87ede15d519b7ce2500bccf33e1364e2fbe6a8a2fe6c15d73242610ed36b0740080812e8902ee531c88e0359020797cbdd1fb78848ae6b5105961d05cdddb8af5fef21b02db94c9810464b8d3ea5f047b94bf0d23931f12df37e102b603cd8e5f5ffa83488df257ddde110106262e0ef16d7ef213e7b49c69276d4d048f" #h"a6375ff04af0a18fb4c8175f671181b4cf79653a3d70847c6d99694b3f5d41601f1dbef809675c63cac4ec83153b1c78131a7b61024ce36244f320ab8740cb7e") (:digest-test #h"8237ce9396ccde3a616754414cdf7b5a958c1eb7f25a48c2781b4e0dba220f8c350d7b02ece252b94f5e2e766189c4ac1a8e67f00acacead402316196a9b0a673e24a33f18b7cb6be4a066d33e1c93abd8252feb1c8d9cff134ac0c0861150a463264e316172d0b8e7d6043f2bbf71bf97fa7f9070ca3a21b93853ec55ab67a96db884c2113bea0822a70ea46f9ae5501eb55ec74eaa3179fa96d7842092d9e023844ed96f3c9fc35bbc8ee953d677c636fdd578fd5507719e0c55702fed2eaf4f32b35ec29a7a515bbc8bf61f9baf89a77aeb8bc6f247706c41d398cae5ec80b76abc3a5380001aea500eb31b10160139d5a8e8f1a976dd2dde5ce439a29dba24d370536a14bb87cf201e088e5e3397b3b61477c6a41e22a98af53cc34bc8c55f15d7924e7e32fed4d3c3ddc2ac8eb1dfc438218c08c6a6a8eea888b208f6092dd9f9df49e7ede8bf11051afd23b0b983a81bcc8d00f7d1f2b27cb04c03aeee59c7df23a17775ae5984eda7" #h"f08819ec3a9a9806a1f55be4f0e56bce084e66fa271784974bf80e1bed7b2be559ebf5b6396ce52f7db7ef45543965f83064095a70328489178718b491a4100d") (:digest-test #h"cfa6c0413dfc1a619417ac3f80fd38247b56941da8c2adf3ff70cc5dabed1875b0395d69d1200b73b1c7820b38868c5b38f52bf3514a96be12e27e34601d95d21c6f51c700b4edf1cac4b2079d487418a4cc5f34f815f469c4b44ef1a7dbaaa9597026c59260c9c22736c49d76ecf7430500b74866cbcfdb5e0fc4fa46cf5ee2b06363ca4ecba6d0104440348d191ec4a4bcbc9763152ffe271a69b805a0b9656970913dfd9e8c02cd16af33a878f083c926f48ab79b1db969fec493aef6c31accc1378867808440a5d5990490b07568bc66e9872904a0f46ae25ef4077b85ea217bdd12541a9472e2a9840e0d6ab55cc4a523f782f8c19774efbd41dad506bbafc90c438c14c780cab9fab9e74eb9452a0b29438a21878bcd4c6be4edac4e77bfd14a83d6152253a62e826de503880d37bf82d10924fab6bd23f04308a9660499bb223afcc5afd1bd2fa592d0322a9a30eab90bc7ac22018e99d2c8f573554c85b019d0c4cd75e359e5e9907082a8d660b353588b5f085486d89bd97bb32335cbd8b9adf7d57c72c078d9d08d9c09a70e43da1f1fe5b398ef08d2e06111d9a9b25a893a5d84cd643b0ffab8ef2755f781c1d6ca49" #h"3a4c2c9284c90515cb34a0895d0374e87467ffbbc7c1dda3239893a12aeae3b9951169fe85605ef7aa2c483662f3a65c72ff12becde50c23ec6a2bc8864c27c1") ironclad-0.57/testing/test-vectors/sha384.testvec000066400000000000000000003037631420372057600220120ustar00rootroot00000000000000;;; standard tests (:digest-test #a"" #h"38B060A751AC96384CD9327EB1B1E36A21FDB71114BE07434C0CC7BF63F6E1DA274EDEBFE76F65FBD51AD2F14898B95B") (:digest-test #a"a" #h"54A59B9F22B0B80880D8427E548B7C23ABD873486E1F035DCE9CD697E85175033CAA88E6D57BC35EFAE0B5AFD3145F31") (:digest-test #a"abc" #h"CB00753F45A35E8BB5A03D699AC65007272C32AB0EDED1631A8B605A43FF5BED8086072BA1E7CC2358BAECA134C825A7") (:digest-test #a"message digest" #h"473ED35167EC1F5D8E550368A3DB39BE54639F828868E9454C239FC8B52E3C61DBD0D8B4DE1390C256DCBB5D5FD99CD5") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"FEB67349DF3DB6F5924815D6C3DC133F091809213731FE5C7B5F4999E463479FF2877F5F2936FA63BB43784B12F3EBB4") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"3391FDDDFC8DC7393707A65B1B4709397CF8B1D162AF05ABFE8F450DE5F36BC6B0455A8520BC4E6F5FE95B1FE3C8452B") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"1761336E3F7CBFE51DEB137F026F89E01A448E3B1FAFA64039C1464EE8732F11A5341A6F41E0C202294736ED64DB1A84") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"B12932B0627D1C060942F5447764155655BD4DA0C9AFA6DD9B9EF53129AF1B8FB0195996D2DE9CA0DF9D821FFEE67026") ;;; bit-level tests from NESSIE (http://www.cryptonessie.org/) (:digest-bit-test 0 #x80 63 #h"0D6789B7F0BDCD9C88F022D6AF5B863F20E2E3C895210FDBB8DD613913F5ABA7ABA6D4A52B3B6B3ED6B61B711DD58EB8") (:digest-bit-test 0 #x40 63 #h"AC3B878B3D021A321E49663FDD146E7B51FDB92CDA54AD4FC98077B078BE8669CA5A22AE13590E951BAFE64C9055A616") (:digest-bit-test 0 #x20 63 #h"04B38810E761F7E2D872F47E94EDF22DA3B4B8DD9877144FE02D4D56386CD8861DEAEFBBE635835093240E7D4C41F776") (:digest-bit-test 0 #x10 63 #h"421A1933D4BF99B124C2016AF52F63C062283D02B4FB85D6D012BBE074AAA4F5FD0EB7D773E6AB237431A4942251730A") (:digest-bit-test 0 #x08 63 #h"966E1E0E68C21BB326269DD49E864969E003F7EA902F2D14B5820C8062E6426C5DCA70A09F5A21FA444FA1AE06206BDA") (:digest-bit-test 0 #x04 63 #h"81EF05BD7244ECC65C5BEF005931670CD77A3742466F21261A278C1EEA9B24724EE009084F751FE362086793FF3319AA") (:digest-bit-test 0 #x02 63 #h"8F47A61C62E23E5E70E00B62D17A510A702AFB402A5BE3C73B23F3A250F39312F35DAFDD92D104F339AECAB9FB807DCC") (:digest-bit-test 0 #x01 63 #h"FDAE5A152415F7D836BD8E5941B61E8B78E062E336E0A629AB416891EDA9C32153C386A14930C5B0EDD55B1290CC781A") (:digest-bit-test 1 #x80 62 #h"9B553DC40BE9E5728347E7BF078498052F6516E96AE25B496ADA2B0BAEF5829AC301C566CDFD193053F74F7A855ECD42") (:digest-bit-test 1 #x40 62 #h"E596A9D7381025092E907787CAA146C289DACC16D496EF9C86D8A754C4B43614A194E9059DD10A3B2C08865DB3BD56AA") (:digest-bit-test 1 #x20 62 #h"F47BEA73D9C332E30F0CBA95296D32ADD27B98402B73512EF8C95A0194DF4007257FB76248FEB3AD3A303A6398A09BFC") (:digest-bit-test 1 #x10 62 #h"931AB6E9C06EE26C32E09BE8C71A5630D54A47FEBDE18A7E40F79B844B164AE2E5F75154E1A6927056C22D3AEA9C813C") (:digest-bit-test 1 #x08 62 #h"FAEC0EA20617F2B5E2182B541131B39335EE482DEF1BB267D702DABFD1A73EBFF355A98E4F7200BB0FF8A1779A23EC64") (:digest-bit-test 1 #x04 62 #h"BA098168973BB02910876D16A93F56899C32AF0975FDDD7138851F28DBC73AA8E63C612704C7BF223DBAB478B855D251") (:digest-bit-test 1 #x02 62 #h"2CBA03C7A570559F0BDC9A2CBE54E2FE5081CD54EEB4CEF09517F9E20EE1D82299A67759627631283C05EEAA166B2228") (:digest-bit-test 1 #x01 62 #h"81C6BCEF2A4753FFB4ADAE459235A65118B38D523FFAA21A7EEDC07CB5A402080E29F0269C262C46AE1CFAC015C0C6C9") (:digest-bit-test 2 #x80 61 #h"7D3B507D162213366B2406174E7E9224EEE3D8D780E19C2AE1C17961377C1C89CA193EEFA3BBCE395BB10BA1E4481F91") (:digest-bit-test 2 #x40 61 #h"75A3B6B5009A6261355115448DAAE1A8D762B6F84C955FEF9784D5B7F29C9CE85FE060A1F91735AFA3C06ADD5758AB70") (:digest-bit-test 2 #x20 61 #h"28A8188AFCD4C8DB7B5A59BA64FFAF76E2AF87A859485DCB1130E957EDA07DD2B90E8DBCC04C47B8DD628D9AA3B1AC36") (:digest-bit-test 2 #x10 61 #h"848F4E21D91046829564C7721818938D13167FD62CD0E16D6E2B67A34754CF246BD76F9F065C5C3F425C5D4D1B9A2B8F") (:digest-bit-test 2 #x08 61 #h"755762D00DC98313BDE28D7632BB6117BAE73B4C1AABA9B2C92C874E7AD555EB17F0C282A5261A957E90C44546D9D89E") (:digest-bit-test 2 #x04 61 #h"4EC45CADD660E353271AD1B0ACFB47E58A52D90F415472C6F46F53A02FA29D2870334A5A1D58182075191E64944607A5") (:digest-bit-test 2 #x02 61 #h"1D8F069796623A1D767F490EDCF13AFBED983AD62919F1017CB7814606CFD02A7C36C6A5DF784A1AEB089584B87E1799") (:digest-bit-test 2 #x01 61 #h"9C94A9708CD824BD6FD11D9B17033911EF092934DB9700251E5B63C657068E096E975F40AACAE9422E9EB37C6A5B311B") (:digest-bit-test 3 #x80 60 #h"277559C7583D129BBB3F9563EE167FE7E1FE0C7C0F475332D235F7CDF493CF9DB453572E3567D27D715C3F5B360B756F") (:digest-bit-test 3 #x40 60 #h"E1C69FE8C65AFD6536003F089CBDB7E736C2533CF7E2BF809622296A1C0BC04E198282A14115E5AC326E3D12E5F071F8") (:digest-bit-test 3 #x20 60 #h"5038F268072FD858E9B20A370AF9EB56CF2E2E19878915CC44D3CA590658564AABD339932D2B42F399F1E5E73FA2C7CA") (:digest-bit-test 3 #x10 60 #h"DF977751F8743AD15EB208F28A5814E34476C1DAAFE3E077469E2DCEADC074F781A58DC8AB4725619E45AB58B07E8AC7") (:digest-bit-test 3 #x08 60 #h"940F4BB4B5A76AFC430D16AF8EF4D901F82ACF4215EC1370EE9072BFD61C53F144ECBE569F30F19663F9C7145ED34311") (:digest-bit-test 3 #x04 60 #h"079A3D16C22946B188ED874181825CA65B6D66430EC781620C9BDD8D98741873699B222AE804B32812CCE37B54720DD3") (:digest-bit-test 3 #x02 60 #h"C13874ACFAC8F296434E8473D1574269F1321B3DCA1AE14738C05B608B08B8E284B853E5B937BCAF0A07F5B4F4B64C19") (:digest-bit-test 3 #x01 60 #h"F6DEA48669AD5848BD25674CFE31D8477C82FBD015445B27126A2DE41BD832750778C113B597AFBB570816DDEFD3A658") (:digest-bit-test 4 #x80 59 #h"C2E503144B97D55901F8FA39451FCC39A69AE0A239E31D91DE9F6E3C663FDF953B65B7A1ADB770B0B9BD1423A0BDE138") (:digest-bit-test 4 #x40 59 #h"FC80751CA610189520F98DDA0E8080292E59EC3A67EB4DF7F9359A7B402D642653B810FC7C9727F7BAD06591A3BE4E45") (:digest-bit-test 4 #x20 59 #h"6CDE81FA29EA6E0998B5DDF8A1E015D72453A85B045AC10C267E1848A68620E84E8C4719D421B887CB1C9605AF637C91") (:digest-bit-test 4 #x10 59 #h"46DF52F2183DA06E131F489F1655DC0A21D40FD7BCD7AC1E6A358F9D857AC66D219AFFC261B3DC9F844ACB88EB8CA5ED") (:digest-bit-test 4 #x08 59 #h"574EB8BEA0E6186518074DB1AA78EB140685FF5D769C2D2111B6865E182EA3EFCD9F672EB79DBDF54DC0FD3C6069165A") (:digest-bit-test 4 #x04 59 #h"94325C32609E1F8EA63D9AD128607809E8129D067013803990CFDBAF410D16047D59E6CEB040710B79765B853555A42B") (:digest-bit-test 4 #x02 59 #h"7DF459B62B0EE0A00AEFB36C0B8F12526AC6F52F4E594769DFE1856447AECBCB1589137F6865DB4CA15BAB365A8C9E09") (:digest-bit-test 4 #x01 59 #h"D0A2200F3957B2BAF2D95DD707E72EDBBD072E4813C47EBF3670939B50EC313021730893966255CCB9771D517F1A1882") (:digest-bit-test 5 #x80 58 #h"D18E103D5024A2944CE24B60495CF697E8EDD6C00DC9353BA9E10B37FD2C15A1B131815545BF4F9CF63371DC549F1D0C") (:digest-bit-test 5 #x40 58 #h"E8ACF0A45AA4978883529D0D210D65193002078AD0FE0F72F29B355DE884F994860CCF8850F66D45C64C38A9374F2C7F") (:digest-bit-test 5 #x20 58 #h"9556F35790A9FC33ACD4AF43EF15036AB5A79D4CFC4FAED8BD4DBD8E122FDD96CF08814EE63879C4A18D146782FA9C3E") (:digest-bit-test 5 #x10 58 #h"D82D2895A2990B340A867E426A1F3A6FF94B2749FACD026CC2E1D108FF391C493DEC1D8DAAA8A2009BF24AB138990584") (:digest-bit-test 5 #x08 58 #h"6201C4943101F4F909D01D316CDE19FC54541BB045F3AE3886208DEC2CFE5E1C2A583EE8533CF781161F656388AE7391") (:digest-bit-test 5 #x04 58 #h"7799C8850857F762EE46D5EAE3FBB7228C838B25A5DF40ECB21E9E78F866E5009176DCFCEB921A86F4CD0DAA77EDA3B4") (:digest-bit-test 5 #x02 58 #h"DFBD42FA460B4F199040B330A16C47FD45FB527612A4A6E4E329D4236E8A4DA1B3BB8B270C6ADD7C364CD2E1CC787E05") (:digest-bit-test 5 #x01 58 #h"09087BC1F3237932F7AC5B12D4CBAD45BC177C76999A7D95F503D57BAD06D0C3FACF95EFDF32534EF40E854FF45B1E85") (:digest-bit-test 6 #x80 57 #h"1DD2629064E317DA117BFB62F36B0D68D78E61BD733DE70573A790220BAD21092535811617952B80ED3452539DECE2E1") (:digest-bit-test 6 #x40 57 #h"2592CAEE04F41E1ABE7F3426774007D32B863F07780A9D89B96BBC1A19E7E252EF60CA0173E4B4F092F5C2731EFC8B01") (:digest-bit-test 6 #x20 57 #h"6E5BBB2F1FF3F39A8A7711CD19CF471BB4B648DD865EFA06D36BB0B271169AE13B640FD4E314E4A48BA05CB45B876BA6") (:digest-bit-test 6 #x10 57 #h"95A7CB904EDF4D7D4C0815ADFE3636EE26056668B7A8632540DB7E5A6E62D0E8022183AC599AB8051AA915FC848B8A46") (:digest-bit-test 6 #x08 57 #h"8D7F3E71443532E288E511A68542490F5EAA36B19225DCCF723A9DF4D429F272BC5752CED674DC2E2A86CC96823FB6A9") (:digest-bit-test 6 #x04 57 #h"43CC96EA615AE5C54DA81691AD910E48CB83437EC9386B24CC0C2B56B7F10C522D9C4D5E6DDED2BB8D05D05581AEE857") (:digest-bit-test 6 #x02 57 #h"95E29644C51E79FD0A0EC2D8132E1B4581EC2D282FFF33C235F0F8413C2692978FD9ACED7E2909E1136F9F2B4DBD60C0") (:digest-bit-test 6 #x01 57 #h"C1871662572A550306ACB43191B6DAE38D96B7848978F0AEBC036DBE6DE087EEC5B55628BC550395905B9BAA6775EA4A") (:digest-bit-test 7 #x80 56 #h"033190F6E578016DDDB7CFA4B27D06A396C8093D01169A803323488E0E3CC642D15DD54D5211187E571DE142DB2BBD0A") (:digest-bit-test 7 #x40 56 #h"C3EFD204375A68436E427088B54E4816BC8E60711B32FDDD77FFD316065FDFEC637AC64F8E1DB4426D2085DB5CCB3198") (:digest-bit-test 7 #x20 56 #h"5EC6268E7CB91C698ACBD409379A8F40CB62937F84B71597F406B953637213F604E1FD0502FB6D1101F84D863191C045") (:digest-bit-test 7 #x10 56 #h"8449A22AE3E9E64C13122E52E6FB2C28F024E1FF5439CEE2024E8817998AA15B856A8DC38D86CF0D991DE1F6A095F53B") (:digest-bit-test 7 #x08 56 #h"FC2A1F543130F0DC8C34984B23BB62EBB9EA12C63290A5027F9AE2BA5984BCE55A235042B4913013DDA0AF31AAE7EE11") (:digest-bit-test 7 #x04 56 #h"B144BA7CCC8BCF27B066DA4C76EE43CB3A2120DEAD859D3312A8BA683018F11A9A7FED8B6B84DC61E6699614A811FC12") (:digest-bit-test 7 #x02 56 #h"0BAE1C5548ED19C7A31469B679FB4BA837001099781D427A383BADB4E4344A7D99FB9949CD43267418C4CED8183D0482") (:digest-bit-test 7 #x01 56 #h"FCCCF7EE39CF81C7E1E6B541F3EAE6E4799B85A9E83FCABF7EB7732C504ADD8BC4093B99F311EADC09495C6FE5687C88") (:digest-bit-test 8 #x80 55 #h"C3BCAB52F61F71E869619D7DEEC2B3AD8FD338D6EA47CAE4BB2A26710204A513381FDCC49046233B32AD2D01344E9F10") (:digest-bit-test 8 #x40 55 #h"ED90AF25974DE395AF7BF9CF29F6485BA969E492507C93AED17714B117210560B64CB7D045594068937BE773B35E516A") (:digest-bit-test 8 #x20 55 #h"15599F248389702F93B5E489B86C83C9B803BE31F4A845E7BE19AEE64D3AFFB0FAFD4273B87095ECD41B586F9DEB7607") (:digest-bit-test 8 #x10 55 #h"66C9E7069CDB0830E0A9CAFD5522D04AA923BF471E4265F2F40E53B6E8DE6B927593CB5246AF391E6203FFF4221C42CA") (:digest-bit-test 8 #x08 55 #h"C5DFC2C2BD3DE0796650640A7342B59A7B6E867797C2C6D51B8A8555032C02E772F33F6190341552CE2091AC8A804207") (:digest-bit-test 8 #x04 55 #h"B310277CC70BDEFA5DFA0E3A984B6F0F8C87E48C69B9F163016E9B9EEC90897B772EB1B5179026A1BD5AA93B2885E993") (:digest-bit-test 8 #x02 55 #h"0BA1D1817EFC2FF00FD4B2ACFFD68F55F9168FDB4A621E1C6FEE40C7107C18A7AEB86681E8B03244A3EF8D53C76E0582") (:digest-bit-test 8 #x01 55 #h"A3E2ECC79FE55E486911D5E0FC7A331C5826432388F032DA58A75AB0895E30C2A20C462D6A63BAD57570F0F79E658FB4") (:digest-bit-test 9 #x80 54 #h"ABE54BEEF3161F82AE3E604C4C92D2FD83460B198669AF3665FDF9D10F2DF2A8C4B2A80C4294392BB8265C7198D299F7") (:digest-bit-test 9 #x40 54 #h"1029CEFFE783E5D1BAAE7682BD5E6789BAFD80C4DD1F1E0554F899B191728677ACF88AC5F0DA7EA966BEA5F2D8D1EF7C") (:digest-bit-test 9 #x20 54 #h"7D8F7CF01D9335976700BB34D545DE80F09382DF30BABE84038740F16B566D535BD91FCED19AC09D7F3BF9EFFA0B4577") (:digest-bit-test 9 #x10 54 #h"0DECDBD9FCAC9DD56B8648D1E506041E25F0A84A22B2064DA3E3B63DFEEB19D34E0CD11B116F3141CB2784D681E0A12C") (:digest-bit-test 9 #x08 54 #h"2903A8B886387F1840ED880219E4273D2B39942ADD3930F320A3C26263C7482783D6B904D36A412482CE0CFEE517594B") (:digest-bit-test 9 #x04 54 #h"956F51ED9113163CE2CDB4A7A0AD42E200FB92E8C10B06D6F6B91FF074F0BB479F097C6BFA991EA074DC663AD6225B4B") (:digest-bit-test 9 #x02 54 #h"FD4AF6C6C6C88884DD8708BB4E32120EBAB66C179FDAEDC9506C9AF7E10A513F859190514A2BB8D497F21318C033440E") (:digest-bit-test 9 #x01 54 #h"277A846C6AB060B0544CE7BD20506CBF7932EE03B601B100BDC5AEB04F3CDB82C00A73360F85F92DBCAD01EC205C603B") (:digest-bit-test 10 #x80 53 #h"A7E4D9A48EDBD6DFC1ACDE2F7F7FFF0B073C7619689DA8A5CB7E19D529EC9C79B29E92AE7426693D14FC509724CB68EE") (:digest-bit-test 10 #x40 53 #h"86CD9B0BF788539EA79DF25993805A0A51A390DCD702576FA10452C9EE1F15C7D3800D6F06483602CED6340CD13CFE60") (:digest-bit-test 10 #x20 53 #h"BE0D1DACD77872A3FB6C15C2DC6F8707CCD60E91901851C308E2D8F3D8AF34DF25B630779B1F5CE18285F6E13F983A43") (:digest-bit-test 10 #x10 53 #h"D49A6EE8CB2FC5957CF67F6945EF5D902232800EB0BA39DBCAD57BD91E560C974C5F34447CCCE184C6CE17C931505145") (:digest-bit-test 10 #x08 53 #h"18CFE78E215AD8B31B46BE2B6FC68FA68781A8674895B220EB285EE28A494939EB0EEC1C1A305E0A37404E02C5C15392") (:digest-bit-test 10 #x04 53 #h"17F2CFA6CF8E5A01A8566EB15D6C0B186039DD03502803A995DC9B7C0099DF8D4D18E7427BF6543D9E709FE58EA13086") (:digest-bit-test 10 #x02 53 #h"3B747B8C37DFCCC0395B08CB591E8CB6572CAFD5013F1790282670C0B7D1417DB6D84206F4546A7C4D459286B3BC140D") (:digest-bit-test 10 #x01 53 #h"39CB92B34817F7707197B1FD5ED5814CA202EC92148088D4F81D530FBA4698F7A9FBC7D07C773187285B2C57AAD4517B") (:digest-bit-test 11 #x80 52 #h"BFA439B3ACDD0DF5421545126C661804984AE71DF2490622C18B155677812C3CD6E37CD88B3DD2B78161532AD9AF167B") (:digest-bit-test 11 #x40 52 #h"EA4EAF123A32E527A89A9FE68C360A2B92836E6CCB48A0DEAF242D2C88D3048732D047F7CBF2F7E1BBEECEE408E3E654") (:digest-bit-test 11 #x20 52 #h"95888D7D6D8976E37E2F786193F9F6DD8DCE0970A7DD8816EFF6CEB7BFD2B8759F2AD72CE6B4ABAC154F2CD18426CE45") (:digest-bit-test 11 #x10 52 #h"DD2610451BC9DB5C36854FB157FE7CA0A1EC2C00AE6785BA687AB466C35B2DE163BD68C1A1C3CE0B10CC5AC4B0DC81A4") (:digest-bit-test 11 #x08 52 #h"144A569ECE4294E193C86B801BCADB2DC04811351793D625C8BBCD5529B18B62B9C2147128FF73D0E0D357CA599DD50D") (:digest-bit-test 11 #x04 52 #h"B3C80BA81943F79C5BB7AFBA27EDAD957E11281C6A42FD330AC886FDDB74541D1DBC99C80AEE4920217E91E3BB81BB5C") (:digest-bit-test 11 #x02 52 #h"FA5C6CF5FA35D9088A54216CBE1E8999A3AB491C8540B9E32B7F6D1871B889F5011B8CD75839099293F35104EF644887") (:digest-bit-test 11 #x01 52 #h"42190AD68B3A0CF35FB0A9F5D9D7D925012CB0A33A9244FA5520F6DE745FA286360CB2522EA68397A98D869ACC6E8AAE") (:digest-bit-test 12 #x80 51 #h"35618BF24A8D3C2F476C9F75C60EFD18096D4EBDCA036A46C7160BE23D6C2448A7FB46B518F411B7D5344D5BFADDB21B") (:digest-bit-test 12 #x40 51 #h"8EDB921BC2EEE2BE757A3DC9434D7FA9F5BD745F2601048B400677C1E4002B203017EABE818982C5DBED75595F421146") (:digest-bit-test 12 #x20 51 #h"32DA9071F8C6C43441D1257545047501FC226B6386FB7ADEC0B7600ED304B9C7BB3AB836B563CB7988651D1E81D3ACAA") (:digest-bit-test 12 #x10 51 #h"168A98E09A07D6D259BDB8203B9BE5D69DDC6EEBCDB9D29A5AA629F614EBD00480D1BF6A930E0FFA328895E220DB27EF") (:digest-bit-test 12 #x08 51 #h"4938998ADB73D079397BF6470E37684F36E8744B250DB2495D88CD3855D1537EBAFBAFFB948BE495A4A1F26250070E97") (:digest-bit-test 12 #x04 51 #h"B66950532FDD2B495858D8BA389B409DDBCF72203167DE3738414605D6B1780664D50054D86EF40EC989F99E154363F3") (:digest-bit-test 12 #x02 51 #h"9B3E930016E3F79848EB4DA08CC94D287EC02C79CFD0C8A8A348AB1BDD244B808929B3A268233A75F7328DD741922491") (:digest-bit-test 12 #x01 51 #h"B33F56C9AF7E595993EBFF1CFB343120F6DAD1D6FDFBAFA697B4C78F7DAB8DDCAAD8CAE306AB5560219047695C7590BE") (:digest-bit-test 13 #x80 50 #h"D3E7E9297D8CC8FFE38710E8AFD0D152568230526658F3A1C94CCAD22B57F9B26504581729E87EA9D6E7FE39D7456D21") (:digest-bit-test 13 #x40 50 #h"BE4C0BB1A3C1D35DCEFA346540192C2FCA00692A5CC9024507FE216621253DE493B61D90D5336A2D9F00B560B03A77F8") (:digest-bit-test 13 #x20 50 #h"874965B3B4F744135DA88331788C478E9B591F6B3C43411C1A32B6951782EB932C4FE6715B99CF03E49EA4018941ED0A") (:digest-bit-test 13 #x10 50 #h"C7911FC620037D6E2727AD0EE2DA0C9811E940CD058565D17C327E6446ECC50AE9CC676FFA6CF320FD91C8235635595A") (:digest-bit-test 13 #x08 50 #h"E638150C7A9D93BCF1C6F1EF9E4D72B036413A31D9ACB64AB9F0247198B24767E4301CC3D1D68C91570D1D87C719D332") (:digest-bit-test 13 #x04 50 #h"72D3F9F439F7EE20E291E0429DEABA20CF6F888337B89A921D27DCC0A5114F2F1FC105D58310003C83A17F13FB64CAB2") (:digest-bit-test 13 #x02 50 #h"D54D465923769F68C134CBB9B28DAEF24B778008C38AD99BAD7DD6A75B6F2DD5124E35F3B29B547253631045230B7DCA") (:digest-bit-test 13 #x01 50 #h"367D40DD74A3AEEC62A54743DE894F8ECE52266BB6E85E61B098DD3FBCC084DE3A1C9CFAD5FB8FC1293BBA570BC2399F") (:digest-bit-test 14 #x80 49 #h"58417C295091835EC1E94AA45E6D8D8074485BD3D675CB493C6B2B636ACD952C9B54DE02DDE05A52D4E8DC2A74AAFEEA") (:digest-bit-test 14 #x40 49 #h"EBE3EC8642A0F2A727E4D00D6CFA006B00120102AD6F0E6996DBE3BD2FA4FB12FA826D5A298F5BA5FD45C9D6D68C69D6") (:digest-bit-test 14 #x20 49 #h"D069DA67FC6F9346EA88B693559D7AE956AB58D82F8A4E1F3ED122179D111BE24B01BE6D202A4410284515410415E672") (:digest-bit-test 14 #x10 49 #h"1B3469C41A01FBFEBF4CC0B3B9D0A197627A0B4DFE203C37D9B188ABADEBE183C024CBC849AA11074B37F596F44C21EC") (:digest-bit-test 14 #x08 49 #h"BB241A1F71D1BE6D5F928C3DF2C5E79FAA4E2492EE2415254FBDEB33973BFABAF5FDAD5B5B37110DA7A09BC62B69DFFA") (:digest-bit-test 14 #x04 49 #h"D85EA8F0CDAF388F9810BE1438A923D4DBF82ED283312A637D69BBFB3F629CF3D7D145C1F0C60F97CD2B8BD96A56F690") (:digest-bit-test 14 #x02 49 #h"20E6BBCD1B0A7DA50A5EDFF45C9DECED4AEA3E41AF2A9D3DC9935336D13517C8A4737E9E04376FE706007201BF640232") (:digest-bit-test 14 #x01 49 #h"7624A9FF61D2E84439682748C61EB47F235454588A4AFC082AA61565CEF6716B3522FD02127B0DE5CC71FD214F9B6E4E") (:digest-bit-test 15 #x80 48 #h"554C0812E728F8FB9F8FC58FB1A83B7062078883CC31489F86FBB1B76EC22F205332C19394B8D2D107F79240599C446C") (:digest-bit-test 15 #x40 48 #h"7E762C19778DD520D03FFBAAD8BF2233261FA5488A8E82A27C92C3902FB89A3160CD607BD2D05D7B90C747191808D9D2") (:digest-bit-test 15 #x20 48 #h"6903529146970925720181B577BF8E1E791D25ED0F3A934A9875B91E11FB5C6BA6D45A7E7F3EF33B76167D7BB5EF4873") (:digest-bit-test 15 #x10 48 #h"FFFB748F9DE35AE7A9BDF2F50C0DAC250057DBB6488DCA5F00AF0AD7D201F68E68FA29CBF1BA1783B8E37F1EAC9B01D5") (:digest-bit-test 15 #x08 48 #h"F9B60F131FDF0B0E6A543297F6CB8B4FE8E43550B1656300A22B630CF8959BE67E1DA4AC92E8725550CB5ABE9591BE53") (:digest-bit-test 15 #x04 48 #h"A795DB8BE3EE0BAD7A1C7B3A0B7A0C66C0FEB98FD3B3281ABE48B5D8B7C2A7B8D401BF622859207BAF690D251CCA837B") (:digest-bit-test 15 #x02 48 #h"7E64EC69701A668BE470C0936D77B3C8B7D2E48F7770F14C3204F0CCF0435A4569355FB789A700461B0D1D4FFEC407B2") (:digest-bit-test 15 #x01 48 #h"CF14F18908E4D10B1460275737B867ACD1E7178E3B5B26915CAC33D2DC22DB5D62E6408CCD4B206C83931AE3C1E37405") (:digest-bit-test 16 #x80 47 #h"FD1A4EC883F4124F7BB5B0A4F648CFE4E4E0F95B1306E047D31E5211F2E1736B44BD97A2C33FD2C972E69FB8DB594FF5") (:digest-bit-test 16 #x40 47 #h"87944637B04A0E21BB104D3EC0B62ED6C7F5B795BE54CDCAD8F596C16DBA8F94046312D0006362D609774C38D4C8BB0B") (:digest-bit-test 16 #x20 47 #h"F0DC195E48B6BF22DE071EC4EA5CBD5D7B9D04C61CC9E617DA45A568C87A64A92501534D8AA58235CB9CAE30C3C7FE25") (:digest-bit-test 16 #x10 47 #h"018330070BAD17AD9C1F3330893A9F2F32D329BE5FDF14CF7E1FE49BF8A236ECF1968611BFA398101908B1AE0898868A") (:digest-bit-test 16 #x08 47 #h"4DDC9D6F21DB5661DAFAABFA41974281A5564B5863D6824359C7A5A22CF9378D64EBA07CBA34351A2AE2584010DA2878") (:digest-bit-test 16 #x04 47 #h"BF7F6DD1982F380EA9E9E6A041E38AFB76C6453F11C576883A57272C3A8FFA5180A94A05C2678B2644622E33A361383C") (:digest-bit-test 16 #x02 47 #h"B789C84D3FCA2E3B1D0F729477BAFDB08E505C5F793812AAEFDF0360347B723C14B17DABAC598105B4DBE2B798D8399B") (:digest-bit-test 16 #x01 47 #h"8908FAD1D0CE850D7D41EF9FF5B92B105CC8FA615ACE428F0CB04A39B43F5057657E7FCD9913772E7CD674F01FCA78B0") (:digest-bit-test 17 #x80 46 #h"CDC5F6D7AAE9A06F86CF9E9887CB2AB88A5234AF884F0F6F917F1CAD60AD839CEA615C5DF6361A4845941955EBA77EF5") (:digest-bit-test 17 #x40 46 #h"D33E2BCA1F370D36C88FC6E0E4B8A93B3CF79280425FDD1BD6683A066C7C7C2B28FE74F681440C8C4243D117ECD764C8") (:digest-bit-test 17 #x20 46 #h"3A97F2680558330DF966810750116070632769E31089DCF45A27E316CCE61D24A451EB86C5A3B5B4B24697A982E894A2") (:digest-bit-test 17 #x10 46 #h"69A7619A91AF892471D1813E7708D3D7E8BA6975445D3BF8574A56DEB5006181C540D474CFA155D0D4C4E7A056319C99") (:digest-bit-test 17 #x08 46 #h"2D91235731E3C366A00252C8500145AC7A94B3A6384C9FD65B8A06A58771296A96677E9E838E3E436C8998B80AB241C5") (:digest-bit-test 17 #x04 46 #h"A4C56C6A063F7CC465EE061C430BE9609C1FB90ED45EB8A5517880E19D07149F0947BEBC3B692577B2A79C2258BDCA94") (:digest-bit-test 17 #x02 46 #h"E59922C9A00C7C15700A2184111EB2D4511D7FC110876255F468F2074A84B40F34C664BE023FB43C0CD9D2603D970F69") (:digest-bit-test 17 #x01 46 #h"230C843CB337DC125451F7456A7AA3C9060D904333359417EE820A1CA7FC6146356B4CDBBF8353B115E261C1807585A4") (:digest-bit-test 18 #x80 45 #h"3E20812E62FE9EF4505FB0056AAFB3C3C8E51CA684A929BF1073691B45425294BEEAA9C81F4B666B56DF4C9C8D37BBB4") (:digest-bit-test 18 #x40 45 #h"869C52727FA93F15E052F7E599DE312BC835559A61DF8D895E6CCDC48C849A305855B7B07B7F29BDA41ECBE0EC6522C7") (:digest-bit-test 18 #x20 45 #h"DB5F181C42CE58BA11D90E476B58AAD346D22C89BBE290B8704107F033947DFD68E195F073C39A232AF0356D79AB891C") (:digest-bit-test 18 #x10 45 #h"C4D299F480C15CD2542F445B358043DBEB66ED7DC2E7FC54AD676168CC95075D9F6B4448C3B209C2E2AC7252D5ABEA25") (:digest-bit-test 18 #x08 45 #h"0EB7355A9DE04274CEC8B3147A25D170D79A53667AAB25A08901D055600CDA2995A9E20190A186CF0DEA3CE6FB10B672") (:digest-bit-test 18 #x04 45 #h"2BA5462DF62F166790CC4539AD73BE811C6FB7AD73985A5D256ECE03EC6A53D3B4D63AC5CF08A29702DF535D8B9FEB60") (:digest-bit-test 18 #x02 45 #h"21A830E15A1AFD4C4EDB970F3F9F3B65A3B9A1D14998917CC791411F3F9A8B4765C77FDD000A6C5125113227FCFB8852") (:digest-bit-test 18 #x01 45 #h"5576C6E9A09D8116280F9C4C93CCBB81100A10E14D1A71CE05A5CE4A0E810D7862ED4809BB28720B19DDBAF4EF9AA13D") (:digest-bit-test 19 #x80 44 #h"49D42DD62993A317193C86466C5BB732BFC2AF052D98FDA113E16E7DED6842CBEA2AE6CE92A50A75A37347DAFE3FC874") (:digest-bit-test 19 #x40 44 #h"147A5F21DFFB094F3A4B61E39CD91B711085DA4246B56B8BA1A42C18AED13C83E5A2FEC7B94933BC0BB3CC3E2C5B196B") (:digest-bit-test 19 #x20 44 #h"9BF7DF9FD9D7B7F6C9EC950C29DE535EACCBBFC15AF28226281C0E7E9391FFD4BE7D72A95BA2B9264E6D3B1F4CDFCC5D") (:digest-bit-test 19 #x10 44 #h"68BB1E88530E9EE98C3938921FFB5DBFF04E554E62943B833EA9C5A67D323CC2870C45971630E8068EB19252C25EE74A") (:digest-bit-test 19 #x08 44 #h"CF51BB48536AB5E9380041D6AF7AFEE83014435E285EAE8AC7DE6C12D157F62A71F51AD34516F27573FFEAC4044A9C92") (:digest-bit-test 19 #x04 44 #h"0F254CF656386DF7D3643881F9633160C244074F6E206ADA0516F2A2D25EFF32933301AB0B36B294B0AC546594432459") (:digest-bit-test 19 #x02 44 #h"293C1F3DD88376A4EAD1DB73BC0B70F123CB1CFFD170ADB10EA8592AD7C9108C3B21388B07BDE44E111AE0682515A57C") (:digest-bit-test 19 #x01 44 #h"D09837366FD98E827E35EAE6A31A69FC6B64054D33F8DA243030C34DF4945C8E72EA6DA22EF8727270A1CC3B71792B0B") (:digest-bit-test 20 #x80 43 #h"4E7A2E0CB1C15D5700B4E34785A97AE9E3A148530337E69E0091110AC0A9A0478F42221398D3CF1ED5EFE383E735454A") (:digest-bit-test 20 #x40 43 #h"EC38ECF25F839D8850C87F39FA7B4749AD4179EAB3912909FB87957D9B74B60826B1006C3E0BDFB997F55F121762F3B6") (:digest-bit-test 20 #x20 43 #h"AD75EF283456DB25104A7500B29EB24D76FAF68A8061DB239A9495CD6CAD8477CCFB41BDFFA7990395643E741ADAE907") (:digest-bit-test 20 #x10 43 #h"CBC6EF0F51C47FD8940661A8D5DF50ACC6F2313B8A09D34FC75B349AEDE077989ABF364F4431F067D1401FD7C75C108A") (:digest-bit-test 20 #x08 43 #h"8F0B19CD2372825305FF7DBC9DD283BD306A1EF722A44D05E626FCB30976AA7AE5148C3ABFA86DFB6A6CAFE8556C9EED") (:digest-bit-test 20 #x04 43 #h"55C2152E041035492A1666166F7798CAA510943B192C408CCA912A032F2C8DE8D669EA6DC9D748CF6352C6E121984BE6") (:digest-bit-test 20 #x02 43 #h"2EDF8207FEC96937484F73EE76CB20849F8A02EA0C08B73F0A123D63E4739CB9D20FE08B19C10EF90B9B2D25CF4A290D") (:digest-bit-test 20 #x01 43 #h"8146696610DE87ABD409927897C615D23A479F1E58BED5A71B99617EAA24E5EF91D5DEC7551F50A9B3C171F23937FD8B") (:digest-bit-test 21 #x80 42 #h"7509CB3162DB506C3135B921CD8B1C82AD18579D29141F082A1B9CED6C4BB0CC8A5FCCC7A8A53B9D5F5E61F0342CE850") (:digest-bit-test 21 #x40 42 #h"7D2C0CB1E583314668195CEAEDED199E19E59BAF0BB0EB835D560F3FA8484C2CD0D41AE15303CE55D1526A937A504AE5") (:digest-bit-test 21 #x20 42 #h"851FBCA88B82AB3CB94B557D335C7CE5CCFCC5E0D1F649981674BC145F798590FAFBF87247342C2EF7012028D1341663") (:digest-bit-test 21 #x10 42 #h"03CD6429D1FD999A4EEF456C9A948B168A00E878FFC9D2F63F3C5EE233A34B7FBFE143F5E8BC46174F341FFFCF6EC89A") (:digest-bit-test 21 #x08 42 #h"969D02C4FDC6B868E003B95D93A20595F1FFB6EF648DF5BFDCD27C12734226EFB93D05C539385E6B74AE264D2D83FA1C") (:digest-bit-test 21 #x04 42 #h"28D3C86569C7C91AEB12739D08A7F9591D9CC7571B7FF47FCD694645C286A7452DA483F6586817EA81AD7AC471C95881") (:digest-bit-test 21 #x02 42 #h"CA2CAEE7113488FCEB255D9ADC32FAE28DE15F7753FD34CAD4A47A64B05E0978331AE7D154D0979836F7FDC1BCF707D3") (:digest-bit-test 21 #x01 42 #h"6399A015FCB3231587EB13076CFD8EBDFC33017BCFB4930F1565DF72F2898C0FC3A641FFFA13C70689F2ADA7F7567EA6") (:digest-bit-test 22 #x80 41 #h"E994D46E4536757B060B833C6323B8D931CD5EA9ACF1FFDC34215F7E75B928D8916A8FFCBBA5E1698CC8F7D2689C686A") (:digest-bit-test 22 #x40 41 #h"31E9AF9441AABFE1982B7B7A08487DC80C620122051B7D0CEA0697F2D222D1A56AE35928CD35F0308F93893C985A2248") (:digest-bit-test 22 #x20 41 #h"08CB2EF217D8B1B3E2BCEB7FA728527B9E2B96534B8E5472DAD96462C32BC223427C2A451E8925FD8E55830E82B12D0F") (:digest-bit-test 22 #x10 41 #h"AE2963A63AE9E5ED8BA8E1ED4A8F487844C9E0D07666B1051FBACC05046E0E4DB620896755246F98DE8E6C286773C89F") (:digest-bit-test 22 #x08 41 #h"8B4A8AC5C0322B0BBA8C05BA32E57C8F0EBE8909C49059F09DF99FAC39553B3F9A2A15779A84FBAC6258C2E8AE297369") (:digest-bit-test 22 #x04 41 #h"9C12B6BDD27590E7817A0CDAFA744260D86CEEC2E219213132BC3D84589BB663544E748A7C562FC498B991273174D39F") (:digest-bit-test 22 #x02 41 #h"22AA798F6836A1301C8D526D2C9B667B0A00BAB2FA2E83968C098717DF21E29701804177B49B83CE7FD5B19E42DB9506") (:digest-bit-test 22 #x01 41 #h"D2CDD8592FCCE340C44526795CF3A3EF16BC1559130086D8A5C55A8F1E5D86D4C91403B94C0ADF57697B44DF3540241B") (:digest-bit-test 23 #x80 40 #h"D92E6EB0AF143615C1FA68C41EC858EE45EDA399067BECB34331067B77C8EB8C3C7D55C0FBA16FE993652084B977B23C") (:digest-bit-test 23 #x40 40 #h"B6223073C3B6F21841471343FE5AD54C45FAE5BC9FE24D77D3130628F5133F6F0414AFC9D62ABEEDC1B13E3A49E280FA") (:digest-bit-test 23 #x20 40 #h"CDA27A1D79004D856DCC8FAFAE9BE81AD0B2A009B50DA8BEC6DECEC57FA5C87761C92B92280A65AC67B637BBB72C9791") (:digest-bit-test 23 #x10 40 #h"09C2EE18140C453A737AC902E977849696E6C19767BC93E272BB4514666D9281A1823B30C2254F9658257C96048B5BA3") (:digest-bit-test 23 #x08 40 #h"18DCAFFBB6D249CA8C352E763D4252A5CC8767172B8B2898CEC58352F850A88272B66E01DD76D775B12B342150D7B749") (:digest-bit-test 23 #x04 40 #h"5B54219D6D74F137DF918D5847CE7EFF3A1C3D3B87D1488CC9CDC487EB142EFEA2219679DFB14B76AA9750D1AA53B39B") (:digest-bit-test 23 #x02 40 #h"D48A3BCC3FF12940EE0367932911D014BF396F6440BB4B79996B0803E54587CE83B7130E7E12DCDAF709E6CDCB3C36DC") (:digest-bit-test 23 #x01 40 #h"1636633E1C88AEC817544E739B90E0F9F415DAB4AC53DFA06AADDC8483A28605E47EFACC44C6AFAF37F1E708C3C7EE64") (:digest-bit-test 24 #x80 39 #h"1912241718B9B4A9B422E84D8C497C9EF67E4CD2A733524AE75838783B1D63291883E558150E558AD6FAEC46C76777F5") (:digest-bit-test 24 #x40 39 #h"400F077EB2066E3F69EA9B30902879D41D1088AC4AD1FA248C592F02346D279447921D0D4A373419922E787390A586BA") (:digest-bit-test 24 #x20 39 #h"3148E1A6BECC6BF8E83242A614843DB1FDAB0EE9145A0431DFA17DA234637086A1B0FE8548241008348A471CCEC0034E") (:digest-bit-test 24 #x10 39 #h"2E0A446A3F1DB55764F5668DAAD236D7BD4AEB4020A3E7154D9E03DB48FF18B12673C517646080EF9FB510447E333EA6") (:digest-bit-test 24 #x08 39 #h"6C92316BBA85B053C677F58922EB7A55AD81F59B177513112748408F91D4444D3DEB5DD14D8CF262ABC3A96309736936") (:digest-bit-test 24 #x04 39 #h"11C160BACC2C7CACFD6F2A77FCD20494FA79558F9F2D283069C75CB844001F23C707A5F04666040FEF9BBAFB7299E7EA") (:digest-bit-test 24 #x02 39 #h"615E550243265F1CF5799516964229C51AFFB4E97151A12D5C937470EE2D0A15352EEE109A560E60D87B907A91901CFB") (:digest-bit-test 24 #x01 39 #h"D19A6C2B37534CC87869F1E1F7B5AF2AAFE7FAD05A675A484DF2B9EE8D275A557B3852630BDFA06642A6D94A466DB691") (:digest-bit-test 25 #x80 38 #h"9196FD39C7E1FFA6B43A921681CBDC9DD508388B7A26A77BEFA04347D124E7AE52D7EC225DDBA29F89433A039F5D2D65") (:digest-bit-test 25 #x40 38 #h"0FB900A08F051902780E08B70801AAA6DAFED20C1F0E5E5E6E051ABF433FF01CFEC8253A5F51D70292315DD01835C127") (:digest-bit-test 25 #x20 38 #h"CD94E4B6592D720DA45B50622FD22F7C1686509FA2122122E5F2AE44F40366FEC333CCA4D137E35A958055277FAD0829") (:digest-bit-test 25 #x10 38 #h"C8FCA181168D7415E234DF39B3BD888578A5BC976AA9B27EC058C78A57A5512C900F98A20C344CCF04E0435645AAB673") (:digest-bit-test 25 #x08 38 #h"EC9DD4BC45A00BE68E9B0C9DF97EE670FB67FB5D840F1D084FDE57FA3DC32192393CDB40FBEAA9E1E22115324825D21E") (:digest-bit-test 25 #x04 38 #h"70EB717FCCEB68B9146D280CC006F3D2988EA37E8372042D83BFDF9243F9359E7C2517E98B6962F39DEC7487DFAB1F03") (:digest-bit-test 25 #x02 38 #h"F0897128AE8D180E02AB35836F7058CF484C514848E604751F2C6A2E82AD77CDCA0B8296A8837CD4C8E2D3749F1D131C") (:digest-bit-test 25 #x01 38 #h"F5BA897BC3D9F4EF8D5436DE3533EE79144BC8216BCFBBF7CED91036F2BB1C94CC9B11AD194558EBE6618321E37CD217") (:digest-bit-test 26 #x80 37 #h"26E7E983C6A6BC2936BCE5C4A1EADC1484643DE5099EBD2CCA202CCB1273A328AA6FF243373BAFB068AC430C13EB6BDC") (:digest-bit-test 26 #x40 37 #h"A22B7FC9560288660DC7FD148C5569F39EB8A13CD94258F5210F0E6D25132FF13B369E8B37F61D77C04CB8098472E8A4") (:digest-bit-test 26 #x20 37 #h"6C854E196DD5FB33A3491C80F92717656E69A6D1CFFEDC3AF95AC38F135486A087A748919C423ABA4386AB6AA0948AD4") (:digest-bit-test 26 #x10 37 #h"450C392B8CEF739B31B27D0F8460C3157BE9C80F0709C75A5CC336C9F394AF6022C05BE75557B6D968AF4662B81D9D5C") (:digest-bit-test 26 #x08 37 #h"4F08AD5DC0CD7C1E09660772A996D99D5219075F2EC7808E8F6A6D747B1A2DF8355D4F90B942D8E5A9DA176018783F67") (:digest-bit-test 26 #x04 37 #h"F4F8CE4CA8A6E03493415C3FEAA764E8F61C3E918CE3A3C459F9511A5CB7289DA4493E12FCE153ED6A7A75389EF87E71") (:digest-bit-test 26 #x02 37 #h"576EC4850D0E0911B17DEA5ADDFFDD539EEB79D8D9A7CBF0156CE867E70394280298F993A9699EC8FBF0536AD4331E28") (:digest-bit-test 26 #x01 37 #h"4F72CF4D2230CD944CF3CD28D33297B56ADCB1E701C65897B829376E8596EB00F51882AFCE6A569E3A22DE7220032611") (:digest-bit-test 27 #x80 36 #h"FBC92A26972FBF866084DF62496F8677412E862A2E3854B8AFDFF01AB705FAE48D791169E476E2149EEC56C1B6F91DCD") (:digest-bit-test 27 #x40 36 #h"28D808A8A7916623964B8890F1F70FFBE996CE1EF6EF4D208BD8A33440ABE348D9DBED11E034A5D722683F52DAF28A1C") (:digest-bit-test 27 #x20 36 #h"65794965009CE130167E401AF91AFFF32CEC9CE46D4AF776B83271EE287231E6A1E0EA3601ECA308596035A994E73757") (:digest-bit-test 27 #x10 36 #h"C7DEDE39881F92FF6ACD42FAA51CFBA95D51391FD1F484788B9149676C7A215938E53C6C4348BA12A10BF769A21D5045") (:digest-bit-test 27 #x08 36 #h"99614EB2F2E0C6333823214236E711C46449753B4D48979724037542C313AB9E05A3E780E417A1E4F228D3DB0B3A8383") (:digest-bit-test 27 #x04 36 #h"E91A4C58528186B2D45FEA27ECFF36922254BAD7C8E2640A1945C5B4092FC07A093D5CF47AC45819F862EDAE8149302C") (:digest-bit-test 27 #x02 36 #h"60022A8C7535F93E052229F235DBC2794C283FBADDED8E160E7CC089BB8A135B9AABF41312C45C9BDC153B99998453AB") (:digest-bit-test 27 #x01 36 #h"FCCBDCFD9B4703A4D17A3AB46B878A8297B76E1348ED7AC7F500BDC6D2EB20561B12A01F25C7428755E14CB9499D52FA") (:digest-bit-test 28 #x80 35 #h"BE6D2E3EAF33EEAEF34FAF27D04BC29F70E968205FAB32DEA4B23B5198EAB031610396D275707CAD8081DDC420644842") (:digest-bit-test 28 #x40 35 #h"72D791CB3E89AEC36590D8B226815F6857A6C970D968FF01759370E0177F928B6E0860FC89D8512B57F8D73AED8C8A8B") (:digest-bit-test 28 #x20 35 #h"45B5BECA1299845D70BA9B8718F540530BEFBAD767813B5DE629685ACFD1E3DB0FF84A555CD5616AE714E0D122074B2A") (:digest-bit-test 28 #x10 35 #h"F11CBDFC79ECCD482E78AB5982F81AEA5C91593B1A026AB9C4B46D3A25279C36B26E55A91AC4055B00738C084EA531D7") (:digest-bit-test 28 #x08 35 #h"BFF1695D161CCECC71EC68D23506D9E4A4CDDD0403822F333EEE4A4C4A3C17C834570AF6B88AAB68EA663EB959A239A2") (:digest-bit-test 28 #x04 35 #h"50A408326365F178E2410C9CF29FF3550D0A76F3C41A396FE685A595306EAD2AF743DDCD0635FBAB4360E1488F874D89") (:digest-bit-test 28 #x02 35 #h"E941B019398FD772571F5C569D84B8A25CECD22A3990F596EB64D0FE1439AB63341F78EBF4126FFF1A41A96D3BB9CC6B") (:digest-bit-test 28 #x01 35 #h"386C762335D409A7A679E232AD564B0E60CAADA990A83DE2812C5C34EA5AE0AD8C566253260ECC0AA371FF63AD164929") (:digest-bit-test 29 #x80 34 #h"8CCA1F5B6DEA6B721DCC1C72A96746CCD625C1348961A4D72D3E40068668938764760BD9C7491D590208D6C966D685D5") (:digest-bit-test 29 #x40 34 #h"11010F8578FE58CA36883E4B3D85211C911559A7CD6958BFAA98920C3FD82790522DDA76DB32769FEC20C934ACC865E5") (:digest-bit-test 29 #x20 34 #h"3271C480145A685ECDC38D5CAAB8912F66EAD3B1729052475AC4ABAC1FB4B211DDD21E93CBC4773162B2159C1E552CF6") (:digest-bit-test 29 #x10 34 #h"AD1330E7479E08FE21D64E100CD2B0A642A970A3B514A15B4B124E0ACEEA7656B8F87BFD634A131EBFF89EF9730B9889") (:digest-bit-test 29 #x08 34 #h"3BBBD0FA79AE4C63E5CCE85EFA1CA857F790A117C224816F8B24E81FF43CF5C4432B114D573D8218B902AE9521C952C4") (:digest-bit-test 29 #x04 34 #h"A7490BDFC2DCEE81B5D1AB4EF322775F02D10FCAFEE0E61567E052A8E778F74F97380C2A45DB33ABEFDF81ABF64A455A") (:digest-bit-test 29 #x02 34 #h"F00E6AE888A33BF184C52A18A1677F0D0400BBA818D14BCC53D67B577E52F8DC2F72B3E03A525355C7FEFC781E6CB01B") (:digest-bit-test 29 #x01 34 #h"A55BE9AE54CA0A6ACA5EEFCCBEB8B5E64D170E3A61D1FB0D049859FE44F9D8C23313CD935C49A6F0862D782A77885A67") (:digest-bit-test 30 #x80 33 #h"EE5909BC21DECE3CB019A6BBCCFCA058B3E601461ACACC7E3C2A0DF76EFB99E932BEEA69E7B8AD212CC001711D9A3B7D") (:digest-bit-test 30 #x40 33 #h"DDC204008F0A566616FF6841CAB8AACA935C8172B0AC9722D89930C56B824D8A539FD6CFE21155DA2DDD07BF01FC839C") (:digest-bit-test 30 #x20 33 #h"9CEB62A6E96B43049E5D3EBD2FCBDABC8348F206CAAEE34C64CFFF657428779A0B5F0C4DCD8B6B63CCAE002449C3A9E3") (:digest-bit-test 30 #x10 33 #h"A7C068893B6D043EAEA92405844893EF3F8D48F21FBE67C714835D699CCCAE592857BCB50B1A3C7BA88800CC16ABF2CB") (:digest-bit-test 30 #x08 33 #h"79D82A57819BF95985091FDB8139F2461C906497A3F7006FC210C862B72B774F9636DC15888701D00CC70D8520A451A8") (:digest-bit-test 30 #x04 33 #h"34F61A7EF1FE5893A43DA42D8EA61C8C70A728AD83C373D84836BE16F4DD9627EBD3DAD85FB6E34146FDFF48037A3C0F") (:digest-bit-test 30 #x02 33 #h"7238D2043F7082481F9B85BF4D6FA84FDDF24C0DFF49F5EB2CE367968823E3E22CA55193620ED2A3ECE9C293010BB347") (:digest-bit-test 30 #x01 33 #h"A2A3E2F314D88A97A2AABF1EC22ED93539DA578FF28480B4F55550B36F0518AEB172956ED7CE7ED406121E81CE3B9DD7") (:digest-bit-test 31 #x80 32 #h"B2CF365BD9D01DA2F330B710B082DCFD4EC2962B7D7C33EBA1AF3D487CD5F82A8B753BF51F6C3478A200B124912364C5") (:digest-bit-test 31 #x40 32 #h"992E225F6BDB7A8B1DED390C01E0F77026A631E594E10D97ECE6C8565219751EE996290D322F5F211FF413D352479F9D") (:digest-bit-test 31 #x20 32 #h"14CB8F7C0E0A40C99991A38F4F629AFE47E59BCBF162B734C814E319B306A7C67F69884C8FD9E49A4821759541B334E5") (:digest-bit-test 31 #x10 32 #h"C97DC6E221BD58084674602C92867A1B9D4C3F7BC76306A579AE3C8BCD48E91F94DE46E52D1DBBA085FA3772BCBC3D8D") (:digest-bit-test 31 #x08 32 #h"A3F3E424A209F93B936A3A0AAF46F20C5150149B98EFA807F412D4B8FD4A1242C0DA3DD53ADFDD1D9C7F731D0F1DA910") (:digest-bit-test 31 #x04 32 #h"DEB6C496FE0C04B1D8F3F67C5BAA05E8065CAC85E2D142F21597A938CA2A859EF3A0A077A46C93D762133F7A535150AB") (:digest-bit-test 31 #x02 32 #h"0BB196F917D02296A49DC3F8EDCF35539251CEF64188C8FB7F55B4CB151DF87CBD0BD5498AE632D94B995C56BFABED99") (:digest-bit-test 31 #x01 32 #h"B81DB1716E2D8E6283D6F46584A58F8E890F7D75DCD16C5F1F43E6FFF1AC22FA65DCD13AF72B8329494CD82E4B78ABA9") (:digest-bit-test 32 #x80 31 #h"74555775BA3B99796E08D828250F6644FBB3C2E4C6BD5CAEC66E1385E4512E385D3B6B0DDBB1920364FE1FD21B88E711") (:digest-bit-test 32 #x40 31 #h"B8F2437A15203A47C1769A446F4A2FF761CFC9F1E40F2156AFAB24DEF7C34F63248A71023F5BCA7436010E417EACC8C4") (:digest-bit-test 32 #x20 31 #h"C0B60FC5D64406322B9F1BE17F7B03193B55A8240C4B13E34F27381E4E2C9C9A9E7F4AF6C7E88C9207E7CD055362FA5E") (:digest-bit-test 32 #x10 31 #h"DA6FBFE26016DCF3F0C12B2E55CEFF92536D72FAD8112EBA0236834432FA28AA4D8D17FA6FFB331E0E082F0BB30E5CE3") (:digest-bit-test 32 #x08 31 #h"35D0F700A8DE91341904E694341234D181177010FCE83A7E16627050AAD67D1E67ED347172AB1A95F6B6873A6341FE99") (:digest-bit-test 32 #x04 31 #h"A3A2F221F1810FF13E4F81EDE8639749430CEAA657FA2AA63A529A62E881D4C0AA1B06CC336099A5691D1F1BF3FD56F7") (:digest-bit-test 32 #x02 31 #h"E07441CD154D8FA7A942A030B10EE1BD268CB698F7F7A4ACC48F857AF02F18467C25AE88799BF0C345B81D767F208AF7") (:digest-bit-test 32 #x01 31 #h"078218080C1599B4A3775D9E94465A2AB7E0F9F7EEAC7FBBD4237E4590BFA28DF54C9768F207E33DA6FEA3E3D30BF037") (:digest-bit-test 33 #x80 30 #h"612BDCC9E67062C1F5C9E61D2ADE3AB2BBF8BE4516F91C78018D4C24F5916F9CDF316940D8FD06186AD527811BDCF4FE") (:digest-bit-test 33 #x40 30 #h"F080E798C4F74104C5FEC696E3C7C63AC051198BFD9490EC1BEE6E449371A86DBA5625046E72FF093CFF2538ED46D19B") (:digest-bit-test 33 #x20 30 #h"2FF42A947A5AF54B78CB8FE112923E8DEE28DF232A4CB269516C6D0A0C43A7062025F6E362BDDBA143B864027F09C407") (:digest-bit-test 33 #x10 30 #h"2C497217BC2E64A1720B9A5A312AC37B6AF20A2DFC75E0EF66CD454A887025F78C14E99A1413834F85A5A8BBE0D90664") (:digest-bit-test 33 #x08 30 #h"500893C49A36771E7B30D2D25A050EBC89A0C3E8D2FE7AAD84DB5BF2BBC4C13735E14169E0BA6D120A2723C98D2EEF67") (:digest-bit-test 33 #x04 30 #h"E6E58B87BBE66E8EA7502A867EA236E9BB1A4EF6850680761AFA602B766FA71B74089599722A29FA094A491A5D7B5962") (:digest-bit-test 33 #x02 30 #h"A5603BA7F4C3A2ADD3045B217D842B0DD59D667D44702E83589CA45C3C773D3397D501D2615CB8BCDFC6EA00A97F12EF") (:digest-bit-test 33 #x01 30 #h"5EF891115FB11406B70694311C0A591750E252FBD80A488317A06626D77C3DF82F1C83B97D36BC26D82513EC8D977E37") (:digest-bit-test 34 #x80 29 #h"440DAFBE831CACD9F162921D8B0C551C2D00154901A2C1995448E9507D7508FB9EF07E1DB289A7CC6712464FAD4FB358") (:digest-bit-test 34 #x40 29 #h"D40145D4722512F16BC9B276A6F0C64468ADA1E4D9DCEC49B5A2675C682587CCAC4CF87B3979471FA5935F828934C7F3") (:digest-bit-test 34 #x20 29 #h"FF7665A96ADB0659D051CB23740ECD4FD826789CF18B32785DE9B80FDF3BA27377407A669B71004F53D375C32EA76635") (:digest-bit-test 34 #x10 29 #h"89361350A5B0BD6C2B51984BBD83C9AFC96670BAC5B8C45729BD7E488C77E63F88F8B725B9BBA40E658CF775AE16CAD4") (:digest-bit-test 34 #x08 29 #h"5727CDBE5119D01137BD6184482DFE7B970C267076FADC99582D6DBB3ED8A83E088DF359C2B1CDC34FA5C41271450E22") (:digest-bit-test 34 #x04 29 #h"8B87D467220A1AB2621C1DD3A5E60832DD16E800409BC3DD7C7B35A9DBF53EC828425433734FCDCA42A6A09A90217C3A") (:digest-bit-test 34 #x02 29 #h"11091A30FE45402A85562C2CBE26A2822CD26BB9FB5A09A0D102690956E1BF679F86BC4D70AF9286327B047474CB61EF") (:digest-bit-test 34 #x01 29 #h"783E03D6491A1E112D5582B3EC7C4B48F5FDFE858148324E61D28152BD65F37150B60FC4686B82F68E83B9144D7BE9BE") (:digest-bit-test 35 #x80 28 #h"83232AF71354636B05794AFFC980CF381E84B49406BDC9838E6516B382BD8D91D24C567B246F5BCD8252F6B373FD7E9B") (:digest-bit-test 35 #x40 28 #h"8FF2E60EE6B0164DF17760E616FF9BEEEA644C5338678C422A1F0B1E6AA5E1349271798E5CEEAB34C0F9FB5BB18B2C81") (:digest-bit-test 35 #x20 28 #h"8155DA4CBAD65A0B3C309430FD4F8753967CB6F913A34758E27A2E33C3126B567FBBB7C878AE0439CA4ACB7A12CB5542") (:digest-bit-test 35 #x10 28 #h"477B55343660C3722941A8678C650BCC2053495F4A148A06919BE28CCA0020F8D6319488C46E80268EFA8D2F14ED66EC") (:digest-bit-test 35 #x08 28 #h"2D99867CC8D6F8561AEF5CD2B699F88776F37428D68D3557C4315F5A9BEDC7225623D8D902AD8CFF007DC07D56970F63") (:digest-bit-test 35 #x04 28 #h"F379813278A6DD7EADCF94353BE109625E4C0375DAC4F20CA98679B3361EDDC1399710ADCA7226F267AEC07DC8F1953C") (:digest-bit-test 35 #x02 28 #h"B7EFF71C84C69DF9B8D5096AA665D401B0C2EE9EE1C1607EE464E03256BDEFB7E449058CB217406DC98F35B890AA767F") (:digest-bit-test 35 #x01 28 #h"126BE561BC35366149F8C2F1AA7C776B318BE836D5406938CBE1601755203E112829516D8343BDC252B0AAF1092E42A4") (:digest-bit-test 36 #x80 27 #h"2ECB27FB077CC72E7DBCBA8FBDD6022DBEFAAE32BB2C708E30168822ACB8113A72D00D6B2B8D9385DC68CC308027E3E6") (:digest-bit-test 36 #x40 27 #h"D951831B1AC4536377FD2EAFCA56C84C6522D1B721D25231DBEFB61692AD485D78D007D33AC1F737200CD61C3333DA0C") (:digest-bit-test 36 #x20 27 #h"4C55BBF56B5B46FD313FA1CC06C01FABA8C0C993B5CDC2F905E91B4BDE42D98D958C5868E2E9EE57B917002F27B1B140") (:digest-bit-test 36 #x10 27 #h"C50A5578A633AAF0C3E181F75A5FB3509A3DB36276FEEABAC596F3771BF4BFEDE50025DDD04851A4B5C6107968EA5143") (:digest-bit-test 36 #x08 27 #h"E8CBDAE58730BF1AA308FE34CEAB8CB39A06B9465B613C04C52A441F2FEA9D7509F1FFE1097DFA9E8EEE05DA81C16635") (:digest-bit-test 36 #x04 27 #h"AC1F19E516B55DE55DCC759CE590407EC45820F4024241A946CE04C96BCD2E344B0863B9E4D2C78F9509CA121E5F8D7C") (:digest-bit-test 36 #x02 27 #h"D534EE54141D498BD4101FF07338DBC2AEA6D24B943757DF2BBAF0EAFC1C5C2476759FF97405AE59DE4DF53652553A86") (:digest-bit-test 36 #x01 27 #h"010078223C945810A0EEA3E385D74F28C41C687196C913EBD1C3D2B98119C9A274B8C2DAC5C6E654E9E4A5EA7CC2FF26") (:digest-bit-test 37 #x80 26 #h"034BEEC78BF968FFA05A9A61267587D176517C60861E791836B5EFE90F12C0BF0243C70CF2B2278D68246D763CA644D8") (:digest-bit-test 37 #x40 26 #h"E29ED6E06FD5F83056007437B10B2FDEE03188F3EA878AC5C5B5A05AFEBD31EAD6A831EDC131AE8EB9E7FA9A01C32B0A") (:digest-bit-test 37 #x20 26 #h"3A3127B1852355AA00F2434726D7B086B13D138C5DCD5D4E60334155FE28349E479856D5334927985B3ADAC59EB44E4C") (:digest-bit-test 37 #x10 26 #h"75CF3BB7F5DB697668B4AB8FAAD44F5C4C285CFA65864A0E3C74B5F2A67A4AD4DF8F2100C2445A180B44AA37B3CC97AA") (:digest-bit-test 37 #x08 26 #h"97BEBD4C6150287122FE715EDDEEF001665C50BF9397340E6915B4B5C8F87588826D2B8B32F3F2D9E3007A112EAD8DB7") (:digest-bit-test 37 #x04 26 #h"2548EDE855A2E8B7004BFCE313DFE70C6ADB7F2552629388329078062D58FC8938A230359157042699CC3C33E3114F63") (:digest-bit-test 37 #x02 26 #h"64C8AB032ECC0393F94F164883E9AEEE7443977D11E301B20F59C6CB7F45C59EC967F4D9B861A82B5C3BF852B588E024") (:digest-bit-test 37 #x01 26 #h"A9376170784FD04221BE829604E052FD0F0A960FF9F8CDCFC790E351174A7A389C5B590FF92EC30BA91F24D6C9EF3016") (:digest-bit-test 38 #x80 25 #h"03210B9C0100379229352511ED6218A30D52BF73D5CCCB2A89A0B4342A9D6CE8C315366062F78964C9EECF5C1C44E83E") (:digest-bit-test 38 #x40 25 #h"CFDE1721468C0420B64BB0592DB23A67E7510773EFC50F3874C09B7715B5545BFB6ECE467C1C6B4614AE0A5FEE198D1F") (:digest-bit-test 38 #x20 25 #h"4574BEA451828121E5BF8503F5F9582C086A3F0312D3C7A86910CAEF4CDE23565B0A59A4FEDA9973BA0D366E2818763F") (:digest-bit-test 38 #x10 25 #h"2CFF950C54FC24BDE335D75E8363A888BEE704EF226F8A7F7EFCC189DA28D927CD3D0D951D27460EE9D6322B8107EF0B") (:digest-bit-test 38 #x08 25 #h"8D92E33BB02A89CF87CDE7F7F374271AC7D7C6168C8DE3AD3252C92CB065669DC50F3AE8E869FA38E28719E0273A3200") (:digest-bit-test 38 #x04 25 #h"E864A0A28D6FF702ED84F461EBC75BD9A9C01E6DD042DB875E62597625AED23A643A5624853C1C31B97BFA565FFD8348") (:digest-bit-test 38 #x02 25 #h"4E23C54DF650F9E82355ACAC18AD545D36A879F153ADFE2B3786D3510ABC39E303D4B8EEE3163D8169AB2B950C2DB417") (:digest-bit-test 38 #x01 25 #h"EB4B1E6809CAC6665B0D9A20AC4FEC040A87D271731EDCA0C10C6ABD567640037AB0BC95A120ED92D023FFF39284133D") (:digest-bit-test 39 #x80 24 #h"DD381ADCCF1EC251567FF6C4660C676979DF327EA349EF8A92C1F0B81F9AF9305297AFA99AF7BD614DC47435218A5672") (:digest-bit-test 39 #x40 24 #h"CF1C76C9D4E0A87A69C45E1A295FA5EDB2731285341E8AFB4DD0A43392566FDC2BC329A9FE9F6F8DDDBFCE588145B3FE") (:digest-bit-test 39 #x20 24 #h"F43BD5C49058956A5C004F2511604A28A6B62960A35F0544D4537412541A76F4FBD93CD95F5854E818015F7B692507CC") (:digest-bit-test 39 #x10 24 #h"701EB4E39BA91D3BF3D29E22EC03A7C075454EB78C0AA3A4942FC5766B0C0A4B634BA77D1BEAB897D73A77CF4A75E4DC") (:digest-bit-test 39 #x08 24 #h"E0C193C9ADC50C569096458BD27412BED0CC1D73D946C12D211B5774DF894F683384F6634F21E8E006395A901BDF57D3") (:digest-bit-test 39 #x04 24 #h"4661D32533CEB76725A0769ADF333C68D020AE274FF733F655B03E4A5A0CC2A238C7F35AB16AFCA31306824D8BA95950") (:digest-bit-test 39 #x02 24 #h"8BAE9DFE9D1F28F01CE5EA8BE7471D16E87AABBEDD8C550880791E2D92A8CCD34A825AD8933B7DFF8A96159D49D09289") (:digest-bit-test 39 #x01 24 #h"2DC118A122010FAEC8808EDD7EAE179D3FCCE9301BF8427E0705FC5A7701ABA44E60F41B37A6BB0765EE3639A46448C1") (:digest-bit-test 40 #x80 23 #h"BE9684F44AE57AA6963C6B7F9EE07E922DECAA6E9181B7EFE4DF1B29AA5B92B21E36159BBE5B282D7F63544E26AD5144") (:digest-bit-test 40 #x40 23 #h"A7728E8A72D6EB59049B00524B2A116A9871B54559C9F2E19127AA2D6A2390AEBA0661F76D355E4D557B90406891120D") (:digest-bit-test 40 #x20 23 #h"98A73AF6484CDC29ACC43A32E663C7887B90AAE78A58EC189E2E20E185B6D47730697330DD8BFAD4BA1AD386001DCF0C") (:digest-bit-test 40 #x10 23 #h"3F1032C0C53BE887FDFA9CB2E006C7B68F2E939330237BB9E1FCC66A23BA28AD881808794D5F78568C35E9186DB514E5") (:digest-bit-test 40 #x08 23 #h"398CC2AE7FA21F86FB21540CA878FA4DF9E4E8BBB95E33864933F4AB7AEEC38771C1485B9DBBCA4D98D641DE92BFB44C") (:digest-bit-test 40 #x04 23 #h"5D8332B879A1EDB87FE1318497A264EA486EEB24FA693F81A6C5E05DD66A232EF5DE6D40E7D88DB8515A5FBFB5E466BB") (:digest-bit-test 40 #x02 23 #h"9C0600738C2969F77530119DEB281293767F16C47935B2B8127D619449841864F0943A16F09CA49C5F9761BDEAD0D320") (:digest-bit-test 40 #x01 23 #h"A5EE4E27749AA796CC82ECD5331D674F23499EA1DB93441D00754388211A0BC55363263BCEBC5B9EF9A50BFAD8B05211") (:digest-bit-test 41 #x80 22 #h"6D50AFCEE5E8E096B74A87B07DA83764384B2817C9445A6B9A1457B19F0D8CAA71B51CCC0C4D75E68D2DC0C0A3DE7554") (:digest-bit-test 41 #x40 22 #h"EDE7F1F6DAA383EB41D594D4D139F1FD39AB9A7A6FEB000B846EFA31F27744202C2E4EF62094E6BBABE1FF62A130D474") (:digest-bit-test 41 #x20 22 #h"83016F42788961BF80B08BB3BA5BAF29C0F09E01417F4BB19E73ECDBDA27E72281A24A50764CAB2DFCEF1897929F9037") (:digest-bit-test 41 #x10 22 #h"E637FF999562E727F3D08A5C5C64492EB7629C01BB9DE83C8FB5ECF92084C373C57D72B74B6D34D27717F84A0EA9FC32") (:digest-bit-test 41 #x08 22 #h"9E07928334BA96D475CCCEE11285DCD557ED75998BDBE3DB26D227E0EA46A537F69EC90071B44DE428865A4AAA680E4B") (:digest-bit-test 41 #x04 22 #h"8930EC88C0B729AAA5519F4B6C4D7D0EF842AD762443B1F30C26D2E71D13AA29F9139C047ACEC8EDEC7DBF491766F3BD") (:digest-bit-test 41 #x02 22 #h"EDBA0883F9C966F3CCF2E93906B1AEF29236121E07FAEE5F5C0E733747F7709945466541E1CAFC4E20E4BD2D1CE6C627") (:digest-bit-test 41 #x01 22 #h"2322B96C2618BE56639B97424EE56F3E18275D0BC14727F61600F2721BB343DFF72169ABFBB56272629D6775DED3475A") (:digest-bit-test 42 #x80 21 #h"9CA604ACB2B65E34276B3EC7757E9934EC9631DCF84926A0C04E4960153801AF4767AA22E0E4205ACE8587A9C4528E97") (:digest-bit-test 42 #x40 21 #h"5C06A745E00F95FA2A37101911ABFB01E164B52801D32795146F5FAE4E99968989A88077C7AFEB101512047264DEC0F5") (:digest-bit-test 42 #x20 21 #h"6A0F8D195FD68A1352C26F5AC8E046982E8D9FA2929D65F1086ED49B3D1A734C94F448162D67DB56865991BFC0F0566B") (:digest-bit-test 42 #x10 21 #h"0D01873EC2DB1E0335E5BC2577561D26E2BCC0F95D46B309D2EF058B19EC734F1976C8538EFDAB42FDF3CDE7CD2FCE8E") (:digest-bit-test 42 #x08 21 #h"CC037818A9E0A90420E2987284C8F0BB5ACF2BEA0FC2237C005A233C0028F9F7C6E9BD2A9E3818D40A3FC999ACABC0BF") (:digest-bit-test 42 #x04 21 #h"0EC6364854FA7D8D246494688DBD7153C11CF3BC76C5FE217B68A61AFD189FFABBF8C18FAE7E29CE46E4E2E97A09AE7D") (:digest-bit-test 42 #x02 21 #h"C15FA778AD05178B4C4292EB5088EC53E11FF43124C5FAB6CE0D36B1CC38032E20EF14BD1E1E443D7479457AEAA2F46E") (:digest-bit-test 42 #x01 21 #h"0B493260B9D501965EAEC41E4C342DD6FAA4545DA901BBBF97A7C923565AD78BF7AC59D06320914E2A4DC1CBD59F21EC") (:digest-bit-test 43 #x80 20 #h"67C741DA991799D8AFD5EA93589C874D4496B3285747884A12BE6BA124A306D72D1B5A91F726C2CD43B039FB3A667D33") (:digest-bit-test 43 #x40 20 #h"DF6E31152C9CB031735B82455771917D588321E4A92F350EB99C628EF3F915F99898A733C4CF234D16C5701D693F7EF1") (:digest-bit-test 43 #x20 20 #h"0542DC5BEDA73FBFC1399DB1BF428ED122C9EDE3535B0FE073F929B1A435DF1AE3180F6510216FCF7818212A2A38BCAE") (:digest-bit-test 43 #x10 20 #h"4DAAD1F4A91ABBA2ED1DE373195E1BA9C479466E257F2CC2824CD6E796C3B6F6E14192DD7DD9E83361A72DCF2A07F13F") (:digest-bit-test 43 #x08 20 #h"6A6D21E8FF50507E055D0FC2A3FD6DB08AB85CF96597A8DA8831778C4536F4B6A09EE35184735195DE1A88A87FF65713") (:digest-bit-test 43 #x04 20 #h"F0434999CF98C3842D7C7E42E78B9E3ED8789249908EEAB6E681752FA82ADB85A21027F224E8C19924C3E77316448FB0") (:digest-bit-test 43 #x02 20 #h"4BB67E8E9759F56CE86583B3E918C33B4A65A98883A169460F5509D1A4A7339597D9BBED663804600AA3023A636662FB") (:digest-bit-test 43 #x01 20 #h"AA2DDEC9E11B1BE707CCD1355B5D17D3E70B7A21C1DD4FFEA56E9763B3D85FAC5DF655F7B02417AC6214A792FF35BE33") (:digest-bit-test 44 #x80 19 #h"3D861AA0B8B487827A6764B197C0F9144C248480CD96CF9335F120B7A0ACF37BED4F1B5930EC7389A6A08723B7AEDCC7") (:digest-bit-test 44 #x40 19 #h"5F1B2D8F5B4DCFFE658AE90E77359981B1094D9C86A0C20E4AC79A7FBC9F868A2108A816AA24C71867D2F4AE2C27799C") (:digest-bit-test 44 #x20 19 #h"DD16679C632D8A454108F6FD728F74030F7A87E46FA5B34047FF1EF283FF46147367EDCC0238C23891263612D906643E") (:digest-bit-test 44 #x10 19 #h"886BC746F25B2425C2BF086BC51B6BCA673FA6D0F287D49ACFADB33A841E5A5A4E7447C718A78E7AF06805B9BB9A57F5") (:digest-bit-test 44 #x08 19 #h"4C5D65BB63B1B2E5C6814D5F20FA6C90F68F9655EFC544780F7E3AAC063F33DB755F7D569EDD6403147BAE4D0C960E5A") (:digest-bit-test 44 #x04 19 #h"0C02D11248DDAA99F3D4EB064D7DC09CCEB30099B6842DE7B5E9A50E568CBD912969CAC9CB949F8A22DB096A1E7305A1") (:digest-bit-test 44 #x02 19 #h"FC55C2BCCA197AD028D40D95E1D402A81BECB45E1B4C22704245CDF9DBB8023800721CBF2162AEC8F03EF2AA6ED797E3") (:digest-bit-test 44 #x01 19 #h"9A7BE8491349E5B000E5908348BAB7A8D316D609025358BAF8FD806EEB82829CFE7FBF7200479D88C58E256005B249A7") (:digest-bit-test 45 #x80 18 #h"4834E49EE4F21BC45C6E10A4C7A5FA0833BA6506D64CB97098ECC21CAAA82F4CA178D79C77DF8CB4F32B4A114952701C") (:digest-bit-test 45 #x40 18 #h"0352D5F1848C26A712092B41FE6081E2DA2A4227D4F1DD6CE033F3981947F3CD36132DFD7975784AA37AC6C775E8825A") (:digest-bit-test 45 #x20 18 #h"088AB2DDF21214C02C86735BCF7647D27F2111992D108BC9C74321F9F656FBD053F57A9C61C1CCB14C913A85FFA449AA") (:digest-bit-test 45 #x10 18 #h"54171A7DB384E37F983EA01C67C44C9F731066F7A43525EAC3DE40452DC9C8237A1145AE41D2E87A054F7B2292F469BE") (:digest-bit-test 45 #x08 18 #h"3D204CA07C7D13DDF3827B50006E8E689E1B712D667169ECA8A0F3E3B7CB62B46B37C073056855A10CF41756DD8C0762") (:digest-bit-test 45 #x04 18 #h"4FD3DB3A545E46BD4311DD0BBFBC02662E6A9E7FD67BD696F99B0F3BFD40C15B65415A47BABCA9EE1CC058CB3AD52F1F") (:digest-bit-test 45 #x02 18 #h"3D7847DFE482E726D3F5C2580D22FC016EC32BAA71FA53779A095954AF9E9FEDD9E67AE8515E8BF3D16012A3CCAC5EE2") (:digest-bit-test 45 #x01 18 #h"CC99F99CADB3F6CF48AE4944B7B91E4664896023C61BBF9DCE9938DD3E5ADB12718DFBBDDB79822E28253849EE6FA97F") (:digest-bit-test 46 #x80 17 #h"3524A85ECC69FDB93267047EF3603C0AE5398285D1FEEF8C073193C4CD8A07708ABE8CD106C830B33777A7922ED7D15C") (:digest-bit-test 46 #x40 17 #h"B625A7DBB7154D3F42C547C0A7B7FC13C33150BA7B79A54ACC29F305BFEF2A0DF6AF12065F05E22BD48865A5516BFBD6") (:digest-bit-test 46 #x20 17 #h"145393989FCF1EB63F174C2A2DEF1CF8DF510FE2F978F67DB3C0E73B54D0F0DBBF270F41489C75E513F9B6DBABBFA5B1") (:digest-bit-test 46 #x10 17 #h"9FE8A2B456FA71A80BFCD411074A2FDAC4583BC8435D600D49660935AE1466AC8EBC48A41F1AC44C7010319A93F505CC") (:digest-bit-test 46 #x08 17 #h"0023DE5B34B0B18D28CDEA959A5DB27891ABE454A4524DEE6ED480AB0C9328590DB814327625861D316715E0E6AF09A8") (:digest-bit-test 46 #x04 17 #h"5540381C0B6E274860CFA0C62D7D08A4EEB0ACE1D947A0EB779E44B4C8E85AE2DAF4BD58E89DAC92BFBFE091214E51BC") (:digest-bit-test 46 #x02 17 #h"95610A9B07793CD636C69BF2BABFFAB268A64F88CD5CF16A31FFEE5287D5FD5A34A3C0A2F5BF851375803A3FA8105300") (:digest-bit-test 46 #x01 17 #h"8106E1A3F019AE544C06B03FA85550A9002F8AAFA7A6E129B6A3834C5E0100AAEFCFFDFBE7A2CF13C478A3B732183CF7") (:digest-bit-test 47 #x80 16 #h"8DD90479FD9AFBD0560A53EA53E8BC8DC27E15E7124DB3FFC5E96291C8D201C6554D0DF8401066D46A6192D21311661E") (:digest-bit-test 47 #x40 16 #h"D39682E7F2B962A4ED037D36476692CD20A4E564A6DC1F09D56AED0128E0B366495800E6AEE5EF65DC1F674CA39126FC") (:digest-bit-test 47 #x20 16 #h"A765087DBCF2C432D9CA2FF0F195CC57674781B7A29CE9B3F5C083B858D4B10721477C6FE3E23C8B5AD4314FC2C26154") (:digest-bit-test 47 #x10 16 #h"09F7F699912A07054670B53E365DD33AA8875F39D07102376D8BC37B71DE92A8F30D47C8FE3B1BB47ECF893D02568DA7") (:digest-bit-test 47 #x08 16 #h"CA2BAA34B112ACEB6A60F04C93A57E6B9874E532958E60BFF1C5D9B497E3F074FEE3C3304E4A6228F4167F14277EBB54") (:digest-bit-test 47 #x04 16 #h"BCA4B985440D8E404336291A046433ED93DAC0767C4F28A422D678B45B19F6D84AB1FE5C727AED50F8F591FA657E1984") (:digest-bit-test 47 #x02 16 #h"D27A63E9E6C9C1A5CAAC850FEC0199EE9C1490EAE9C0755BF511BF84ADD041FB6349167BB0BC90CB1488BCB2F599290B") (:digest-bit-test 47 #x01 16 #h"F5DCBDB99DA87C664E913D7982EC37F43750E2EC436D427F64873FCF660ECD4BBBD54D78447071204AC6569A3B75BC66") (:digest-bit-test 48 #x80 15 #h"BA0813D1F978904FFF6A7870910D96F319A1544E70622415907C256A6FDDC612C52C395FC84122D7014C42EC5372CB6E") (:digest-bit-test 48 #x40 15 #h"43FB213F16E94A77517D1A9471438535A4F85A53C60F83570DFB144C5D269C7238559FCB60D4B955B24B27A58F3BA9FE") (:digest-bit-test 48 #x20 15 #h"A173C2CD000055AA58BD6DB2BC5256B53F05FBCBA8E2AF65197FBD7DD35D7B22E78E3426E48247D362A0A2CC45E60AE2") (:digest-bit-test 48 #x10 15 #h"7810594BDD848B582CEC4B265FA249856C991CF91205578742607EFD635246257A938BD881D2133E478334BBABFC4167") (:digest-bit-test 48 #x08 15 #h"DCAAB5466C2227017666669F793A7A39931A7CC50AAC5B172EEDB016413C6F4C787B57F65C415BF50B344D31ED3B1281") (:digest-bit-test 48 #x04 15 #h"5086A7CC1C093DBA1D874A2A0B9B5D5B539BA625C04EC71C2986D773398E538299ED066A0C599BA164C4F1228827E6F5") (:digest-bit-test 48 #x02 15 #h"50CFD3D1CDF5B7F6FC4D100F7E444F82C0792A087E974DE8A55928131B54049BB082321CA82621467E7AC427558C5967") (:digest-bit-test 48 #x01 15 #h"1AAE3CF64D7DBDE3E5EB62110455892A3FA6E9BB3AE22A7D4D838540C95DBDCA4A690D870C7CC99A1DEF222EF84B8B3F") (:digest-bit-test 49 #x80 14 #h"8B174247D6EDE400AE069E7BE87818C4D4889109049C7A2EA487F74359113B5B0FFCEBA63B24B9AB0C5BCE5747777654") (:digest-bit-test 49 #x40 14 #h"4287A2F3877879B402F9F0BE1E5057F9B89CC6DA24D8F6435ED42E5FD22879A0968DF6F4001D759C75CCCF865602B8C8") (:digest-bit-test 49 #x20 14 #h"CBF33109D97559306770448310FDE6D057BDD0CFFF5C23DCA07EB7D1F11E503B0B22FD05819D2C7F94B46DD0894C751E") (:digest-bit-test 49 #x10 14 #h"22259F225FACCE005577210671437EF88A3964A97B10531EB6474CF68002C93F1FF1799A6993FE61CB1562C029FF3F98") (:digest-bit-test 49 #x08 14 #h"E04C7DB7AA2ECF35FAB2D97F8D99A6D5BAFEDC23F283898A23C2FE52968637E080A2660BCCC351C5B3574D7CD0DD422B") (:digest-bit-test 49 #x04 14 #h"C457378405F0BAA157D57D303809E738B43F4EEF66F78F058B76A5F86BE2C84B4DB81ECFC33915F89167BB3F73A61DBD") (:digest-bit-test 49 #x02 14 #h"B7A3BEACE7813DD9B76788A6480AF15316C09E7605E4C5EAA68CC289B8EB3D0A0823C31BFD3CF466ADF52F0ED3C9F6FF") (:digest-bit-test 49 #x01 14 #h"A6329F067B60BD6878D8A756A8F52A1DC85BC0F058D8C267A2501455526FF43549FC61E18028B992B6A5B2A7B0318DEF") (:digest-bit-test 50 #x80 13 #h"13814178CA5BD077727D53C61D14953F3F7E6C4AA68B54601A7D5BFB4C9EFD9558EEC7D0C39084482E46CB6644FC8D53") (:digest-bit-test 50 #x40 13 #h"34C5153B8F2A00F3CE1F4024255203FF9D3229130A6C57EC6E2D1B3AC98562C00061AF94DEC8B9ABF0A257EE20A696FD") (:digest-bit-test 50 #x20 13 #h"B13862BDF3882041F842E56D626CF04F9805D8E2A9496F27F5B714729C1964791C7095B00C381F73F1912D988C60723E") (:digest-bit-test 50 #x10 13 #h"A51FF0F7378EE7FC4903D3486C8E73BA65A93B78A1758FCF654DFE84322F8CEC128D1D5C734AE10C3BB5682ED462BE6C") (:digest-bit-test 50 #x08 13 #h"0E888907F90A23938D9A9A6A221C73811C7FA3637ACF42404F3AD8DE82A6A94294335BB76331B863B98AB342E7D49E2B") (:digest-bit-test 50 #x04 13 #h"ED62B053E02EF638BD2C3462B550E58FE62439D8460183488DB7A7D3616E1A417260B1808E0D7929B0894AA510BB80FE") (:digest-bit-test 50 #x02 13 #h"4DE2D4970BC611FEA19D1E2C062D520789DEFA3CA8A7F55C38828AE0BF276790B9DF94394D3F5D91742F91C73002FD56") (:digest-bit-test 50 #x01 13 #h"ECC7E7745F7D1FC04D460A7029F619BD9D8DDE3D617D8B3BDC28FF79C1C59F68D57743B59EA094FFA3FD9AF09BAACE15") (:digest-bit-test 51 #x80 12 #h"B4B30628AF039C32BBFAA467BD2673760FA1459F4E4AB716DAE1632ABC6669BE7086D1CB2DE8A13B5CECB8A38FB6AF1A") (:digest-bit-test 51 #x40 12 #h"6CC8A64F78BB9868FD0A2C2B19F62BC0B27C70986B8C8B5C1EF32B019FA2B769C553D608D96E64C22EFB970C44C78382") (:digest-bit-test 51 #x20 12 #h"6957BBCD8089FFD602BAF45E512D1E78006CA22C18DA412CC54E98300044EAA65E0463595C47BD19D0561249BB9A8A12") (:digest-bit-test 51 #x10 12 #h"322277ADF32EB2C4D197CACB3F3389C701B167C56E7AA21CA4A1DC64AEBDC34A53A653CADCB23D48C9CD5E880FFA2F9F") (:digest-bit-test 51 #x08 12 #h"BB7C9B978F81039AC7B0CA5959568802F9C2DFC33539DD2E51374EF6554A2623AD31B7DE8004E13783A4CD338657571D") (:digest-bit-test 51 #x04 12 #h"A496DC4DBD18294C115E4DBF449F94B8B7FB356C845DEB329B982DB825FC38E04184D0E560F037752A3162A6D7C5DCEC") (:digest-bit-test 51 #x02 12 #h"E40F2C75955951AFC2974D0CD90CF16F414EE433761722BACED10BBEE90AE4556E61F8F39F6533174BCCBDA1CE57539A") (:digest-bit-test 51 #x01 12 #h"4D32CB337BAE63D17C2F5869368380A605A48122175EE3E11A98C727DD3BA11C59A981E65994DF10453B4B273E6155F4") (:digest-bit-test 52 #x80 11 #h"F644CF3E8B9CD02BE65344DDD6BBC1516F317D2B1505138FED83C1747ED7F04F285488714C334EFE9E6EA14B66CD5C25") (:digest-bit-test 52 #x40 11 #h"88479CE6E5DF7E0F7A14BEC5C1600B68D7320D0D5EB458DE642398E29B97AFB85CF647FE91E055FD0152A35EBF30F815") (:digest-bit-test 52 #x20 11 #h"707450731916C0A04CDED54FD24813975E6F1A5E9BC2EB57C781A5EF0F9C5341A1DE7B9AB74EA8A1A63385EDF32C1609") (:digest-bit-test 52 #x10 11 #h"DD679F5F7CC77A40A29842D287F86D1E3BB2FAD04DBAEBC41C556EBA27D3428157145599947A69753D59155059BCE6F6") (:digest-bit-test 52 #x08 11 #h"C9296E9C4C9145BB898BC173392F1355CEEF3A070D9A50D44ACC765C13B95D9055AB9A61C328D6E38DD4205428C25754") (:digest-bit-test 52 #x04 11 #h"11FA9CCCCA68E54EAD6AF9C258876684D5727F7FBC0B3E63FA110693AD3DAE3FE37B1B7AECC89CEC32977BF43BDE70BA") (:digest-bit-test 52 #x02 11 #h"D3F0769DE606FBED3C2EBC0D787FB296A894B2AF810CC077EBED65A73D0BEF91E92B9D902EBA22A1DF935F7D5F3CDABD") (:digest-bit-test 52 #x01 11 #h"83197CDEE728B0229B5BA6C3373914DDEABC5C63BEED4328BE72AC651F64454F4537EF3A6E62E4D2216C9B4163DED986") (:digest-bit-test 53 #x80 10 #h"A75B7837A61EBFD77D066A45178692091AA1F9E8E6C61441376CA9E7F860C951074851DA7F0E53CEBFB638C9F41AF984") (:digest-bit-test 53 #x40 10 #h"A6D693737A8F54B16A9F35C950366CD428572BDEA60A52BE054C8EFD88FC6ACA57699D752C46E1F2E623563A5F3B97BB") (:digest-bit-test 53 #x20 10 #h"8E8FE798AA1F256DAB978914FB21DC96967F35F15DC6711D5BC3715CAA532765F60AA28C21BDC47EA9648B5C0743ADE1") (:digest-bit-test 53 #x10 10 #h"9AFD64BA476BC37F7DAEE4F0114137DFABCD95C553A1EFEE015C438475585DE24569126941B6667E249E0DB7118FC98F") (:digest-bit-test 53 #x08 10 #h"DCEF65C874358661B52CD70EF8092629C418E6CC954AF19BD23214628063F939D2ADD6E43FD921D85729E1A5BCEE7FF9") (:digest-bit-test 53 #x04 10 #h"4EC7C8424716EA9E414933FB68F52ADE7DE8302B2546B347225FE9F72E4FA81F914C608957E196E2589E1EED9FE20B6F") (:digest-bit-test 53 #x02 10 #h"8BAC0A7868E8560FC0879C35F358AC34B1B684238EC72FDF27BA205A4B13897EE09FBB2895745FF33D914471AC8D9C6F") (:digest-bit-test 53 #x01 10 #h"0053982116564E2F1E8438A92FF57DBD9C2D70AA90DB36E105ED979403D74B1B0CEF736D7C77A146834361ECC587D3B4") (:digest-bit-test 54 #x80 9 #h"A669C89F3181C9EB13E29AA485D5375D34E2E25E44513F07F3BEBE15A7681D0299BFF83272F817B7FCBC05027801F012") (:digest-bit-test 54 #x40 9 #h"272A311819FDDE907AED8D5DACB983EC19467DFF86BFCAAD234E9662A3C8FE810AFA6A6F0FBAF51BF2F6B992B5AAA9B7") (:digest-bit-test 54 #x20 9 #h"BC0988D2BE2560E8429D91C88ABA0FC57B02AA4299A4EC2682F7EF8EF98AF6D4677E8FBE90EEAD841C372510F5674755") (:digest-bit-test 54 #x10 9 #h"BA5231986DD760572FFD6EBD5D6ACB225975638D36ADF68075039789D2196AF4D517379AA36EFAFBF530919BAB821FD5") (:digest-bit-test 54 #x08 9 #h"BB698D6C708DBF23AF90E1E64C55BC402064B2BE9E101ED19B42FD4A2F18DAD4CE94BF32C5ADCF6CEF7C48438DBED481") (:digest-bit-test 54 #x04 9 #h"4B5E97687C779E700EF9F35F5679F8BD23D7229C208C95F9FA43AA553F0A3CDE071076507FBA8FABDC7A1008BC54B28A") (:digest-bit-test 54 #x02 9 #h"7EFA7BBC978249E7BC00366DB5BDE54C59ECEC639CA2320114C876010F6D5259E0E8BCF3EFD5D2797D91622D133EA604") (:digest-bit-test 54 #x01 9 #h"25F54B43F6B9B065E8F01C757B634C90203B9A9421725148E26AE47E5E0FD51687AF95C7650EA36F79914BFD050DD9E6") (:digest-bit-test 55 #x80 8 #h"623B047E102DC3D342F63F7DCDA53F84CD2FE0E14D9186F6AAD545A91129797B018040BB677E157213B1EF3F55C22806") (:digest-bit-test 55 #x40 8 #h"1AAA34084B2EB1A4C94C75C2A2D3CF4E500870FA382B7ABE15B28A510BB9510F807E41B54726CF81B667B2ECC4F29602") (:digest-bit-test 55 #x20 8 #h"89E3B3B7762E71E426A571EB0A68567509729FEFD41CC916C7BB951BFD027D0D7B738CC58F0FA6B3E88E586741ACC50E") (:digest-bit-test 55 #x10 8 #h"1A56C67C0A385CBE6FCD347A039E3D1C11FF486D461501F0002447B3866EFDC1A6088AA3E436F4952296645959CD59AF") (:digest-bit-test 55 #x08 8 #h"28BF6AE8C3E22444F5BFE7439D9466A4633BA9C54EBAC9BD171812A7DC7AC96DD73E3797006B484B15B51FAB53729E45") (:digest-bit-test 55 #x04 8 #h"66F647BF25F559B48C815CC0C40A25C42390F93C2BE9D029B7E44AB5659C11237A5A00F02188245760C536B7DFB764A0") (:digest-bit-test 55 #x02 8 #h"10E64C44370BD7B8747D21FD6468FC249E87537DD0D9A16D31209E796E0E863D2D43F162704F8DF6B08D667F036A5346") (:digest-bit-test 55 #x01 8 #h"975BBA8E0490DE5FB0A9EBEA0441F539772926EED07D64F57D2ADC4BB92126805882961059066D6C7156C825E45B7498") (:digest-bit-test 56 #x80 7 #h"3FEA5D9B115909A5648DBD760A8F26BFB9403F600E8279F291FACCF757CA34A2A54855EC8FAC18A4BB5434548A089575") (:digest-bit-test 56 #x40 7 #h"0417C112DCA43BD56643162920779D28FCF1E1B0BD436C51FB47EECBB58AD70A9939E87933CD6DEFC592D5226139BDD2") (:digest-bit-test 56 #x20 7 #h"6287798C81995979BA110B39913CA58E112AA9D380409FAB68347D5A631054252B072E9A088BDD156653729EFCAEB1FE") (:digest-bit-test 56 #x10 7 #h"A2940C2762AC6B1CBD53DD6498BE9908D2A20B97AAF6A61E783D63CEE30929EB70D71234DAA7987085D9C0151015CE29") (:digest-bit-test 56 #x08 7 #h"CC1E2E7EBDEDA0680124FE3106C0CE5864BAB294C64F18FDD7033975A14BB8252A8949D609882A452143A62673ED67CD") (:digest-bit-test 56 #x04 7 #h"10EADFE26630DF7DA028C669373410BAFB69842394569662495BFD6CB00B907E4D378A7EF7211705902AD59CBFEE91FA") (:digest-bit-test 56 #x02 7 #h"A18673D5D56599D06D676522524648880070F59FC5CE6396D624CA5A994904E97E135BA6794BDA96DD979EB63F36B724") (:digest-bit-test 56 #x01 7 #h"88E2EF4BE630032B1070A74343556A9533DEB30D80D118BA7E10E4FD768800BFBB84793DFCC42F293191EA2F6E088841") (:digest-bit-test 57 #x80 6 #h"FBF28B63779A82B08BC56C0F64AF384DC53F0E91571F657F21EAA0B1DC9291A4CEE0E10511A59CE91C7CFFD304958EA6") (:digest-bit-test 57 #x40 6 #h"1D2579E0A8B4346E99D7782078EB6492786CCE7DBBF07D2922D627FCB5DC3E10CE692CAE3CC3E4960A71C9323704AF67") (:digest-bit-test 57 #x20 6 #h"D6AB1B4CFA6558B975826A70EA613DA689698096A043D4A1D7641663AD83C794B5A991822EAEDEB9AC2915F1F6C27B36") (:digest-bit-test 57 #x10 6 #h"479AEF93493200E4901EBBED9329A2F7886158839E967F446BECFB104DD6C99358347B55690C054E203C30F43D604A09") (:digest-bit-test 57 #x08 6 #h"4BBDB2B3CB057503FC5FF106E60E359ABCF43AFCF8E9151A2A338423D44D981DAA0D205A36E8550466EEEC07DEAAB64B") (:digest-bit-test 57 #x04 6 #h"A4FEF59249DF38ABE07039EA73C13CEDD965CD6CFF1CFA76FE4607564FDD4D00BB0125F28B993D521CD2B78F832871EB") (:digest-bit-test 57 #x02 6 #h"22123850FA79D76B380D3ECE62D761C94315D4D3250B55EB621FE096ED56DB8C77D275C37EB4520E8E7F479EE8742477") (:digest-bit-test 57 #x01 6 #h"4AA443F1DAFD0995A8FCC15129319B353A40B7912F8AE0DA76F0749DCE62B3D09655A165763F524C1B58D9D1B9E61C5B") (:digest-bit-test 58 #x80 5 #h"6E50E0C1B5A5B58AE348EA9620A60E1252364116F479A8076CF210AF0146B859649B5C9BF20BFF3253DDE90ABA611D22") (:digest-bit-test 58 #x40 5 #h"28ABF78C68F2BD9F2FFBA49A16974161F490E6E7FE010B3E8C6D8F1988C63A62B3D75450EDDEDD37E6486E8F92309AE1") (:digest-bit-test 58 #x20 5 #h"D95B843B96A7550A76E22335EA3A7484135950973D02184B425EE6866DC33A5BEA8F0A46898DC5DB21703F78E0D4D34B") (:digest-bit-test 58 #x10 5 #h"96C4D77996BFDBC1FF5AA0EA47C899E4B32CE3E1D178110CCBB73656988DDEBE7880EB7AE5138D0F2A3AFAB175A44422") (:digest-bit-test 58 #x08 5 #h"2F4576F45A8B0F7E9D86EE78CC7741D3BF9E0CEDA15BFF898D0E65AC9FAC06C4CBCD403980424463F85D5A70AAE2A5A6") (:digest-bit-test 58 #x04 5 #h"56468AB2C83BF07C2B7AF251E3BA4FBFBE0DF602501250F0326F2CFBC787CF77A3C87D81B6BB63840F570D53E60607BC") (:digest-bit-test 58 #x02 5 #h"44F9CB73FB751020D44A5967192777782231CB65B4B07CBEAFF78412F0CEB32E3D2C587E8A28948A94858BF8F7060263") (:digest-bit-test 58 #x01 5 #h"DDC2C285173F55FD0C155F1D09A76B032A93021BF41D817EE56380A99A094548D27187CD0C769C44B85B381E603DF242") (:digest-bit-test 59 #x80 4 #h"7981A30EAF3B919264879C2B74F4BB8BB7BAC8E5087B2E04500AE0F72E37BD586E6DE46F2F380030D6B1D638B9C5D809") (:digest-bit-test 59 #x40 4 #h"CD5D50179F7468AD7B798DA40A850C9FB434302ADCCC36E8BE94F9462B78B14CFFC23E28E8006975693B273830556A65") (:digest-bit-test 59 #x20 4 #h"FD67D2CDB061559E6687854107F27D752382606DB6C810557D1D4B348CCCA48B34F8D240E954ADBD2A3BF564CE9BBC02") (:digest-bit-test 59 #x10 4 #h"609A0B3D153C0499A3F3BA63A724CBFA49A00BF049E4B66ACC65D8642D935AAEC2E3EFC5EDF2EF0DA9E265A451BD8886") (:digest-bit-test 59 #x08 4 #h"D22FC8317545E2C58FB27FB222331C46FB4300C8D9CFD4610AB55CD90C8C0ADEF86762AA074B0DA495898297DBD14103") (:digest-bit-test 59 #x04 4 #h"14F14D5D4AE77F93A80748C8E79E16C1904ADBEB4A9811EC609DF9B0273819E0AC345ABEEB5F29E282FD628F2E74FA9F") (:digest-bit-test 59 #x02 4 #h"453C7F938A64901FDE8DF00D0BD1CABE019EB371687CA0007541866F03C89C0C7900E1B2EF8920F97A58111B727F35A7") (:digest-bit-test 59 #x01 4 #h"43C55F1CB0DDF2B85322AAE37FC3786C150461DAEBB2FD5AEE0E4BDBD4C365E436B39210707AAD021EA9050264E691AE") (:digest-bit-test 60 #x80 3 #h"62B0CE31A3E3B66B413A57A0E9AE4DD9108662D233403FA3DCD2A6135E0D9B95A5509FD72EEA90D33E193A97CA917A9B") (:digest-bit-test 60 #x40 3 #h"458D5A649CC1830173976105C00B16511776113BD8226AC3673AFFD5161B7C25BD2D11BA10497D7EC0D7EF853B18E569") (:digest-bit-test 60 #x20 3 #h"C6BA434EB837888A7D4C6122FEF3D652C0A166E1CF9F4965364FCC5583DF30EC3D2B604B3C122D4E5DBDA837D2A60D4F") (:digest-bit-test 60 #x10 3 #h"A947BC35EB6B1F21E3C5DDBA72E1B2D64CE5A6C467D2B82B055BF356C024241D1DBC1CF63791C3F5430C144C26867F45") (:digest-bit-test 60 #x08 3 #h"98846750A274934B855C6359FDAF9CBCBC409C8AC610B64A71448B1AAEFA4358E73A529740F870F99B5A0CD7886E6FB9") (:digest-bit-test 60 #x04 3 #h"BBDC13A658F07861B4C7D0F6DA3A908385C953B07AD540AC35D404769026BEA2C82F47AF9083D55F04182C51F4400510") (:digest-bit-test 60 #x02 3 #h"D0C366A3D84DDA8DA01F88DF12B6CD6D2C73E6148CC6A9E180DA4181B33F56DE8C6344F9BF2EC0931721277AD0038B4B") (:digest-bit-test 60 #x01 3 #h"9943983F279FD61D9815FCD2CBFC38718F1126AC49B03520FF9A9F3EED8DB929085E54C3F97067032CC75D06AD06C8DB") (:digest-bit-test 61 #x80 2 #h"C7FF6160DC30E9C666D8C51A802005DCF3C5826B355A9EBEE7CCA819798DB933D327093EBBEA4CA34845FC36B763AABA") (:digest-bit-test 61 #x40 2 #h"AC542B077B0B54A37DDBBC2DCFF28C0A6DA52FC3F0020FA4FCB49A38F3B212A19C3ACD5A7811865DEE4CF4EB33CC9846") (:digest-bit-test 61 #x20 2 #h"971A82F3325130DE0DF116B45C8AE2B3DE7CA28E5FEE75F55E02D7466D8F503A8864785576BE059D96387C01DEB0C601") (:digest-bit-test 61 #x10 2 #h"11AF2743D9D26A35ACFEA0E9D0FAAF20CEA70A17846882E38EAF7B655BEFB69FA8079EBF77272FCF7FE53767C3DC17F0") (:digest-bit-test 61 #x08 2 #h"1FD68463A66BAE15E59A1847FFA4712C4EEEB98B43463A78401F0551E6B6F467D4577AD1D36CE4D6884FD8E994932D9C") (:digest-bit-test 61 #x04 2 #h"13B401050A3578925B886FA8DA78ECB5D01907393E8DD857FE61E4332D264DFA633B7323DF7B5C0AA3D441A06B92E33E") (:digest-bit-test 61 #x02 2 #h"856F1C67FC6E64EACDAF0EDDE8C5A1213640242754E80F1F2C22B44AC081E2D447A3270A8B3443C731B5AB84DB594DB0") (:digest-bit-test 61 #x01 2 #h"F0679E97D14E708E91E5B0DD23E881B0CA00C59AF517652C4C5D64921CCB77657DECB38A8974049CB35A99919B8036D3") (:digest-bit-test 62 #x80 1 #h"2E0F72DB4F315E84977756126EAA3718AFA293CE60DDB6F671E726BAD17FCC409489C20509B208421C83BAD13E92FF06") (:digest-bit-test 62 #x40 1 #h"2D221439F7B4FEAA8315FE160121DD0170202D25671EF7D2BF5DEA604203AEE3FCB217ADB7F867A77D37119729C29CBC") (:digest-bit-test 62 #x20 1 #h"672846E82DAD7A2C1E18F4F84F698987FB877BDECADB7B64B1EE7C24A0ADC51BCE8A1AF39A5F219B43DD5111862A2A64") (:digest-bit-test 62 #x10 1 #h"33DD69CC0B341F9081C69AF81BBC924DBC2A2127E1BABAF8BB231DF619DDA5A4F8B31FAC293BB1BAF76B5C77175B4746") (:digest-bit-test 62 #x08 1 #h"641740439ED80545B1AE070891D7D98994C5B773B741C6D4C1A36B775B398E865D99FF99B292A21C8EEC629826CDEBE4") (:digest-bit-test 62 #x04 1 #h"6748B53EE8C5A94428B99F784E95C567DEAE07A507A53374E311D8178424714E1BE696A9F87490CF5E30DBDD8A2672CB") (:digest-bit-test 62 #x02 1 #h"5916D5001F36E15D3B9C2DF8081D1F87359ACE5AB200D342E50883D0CFF3DB51F92392DB4B761E9F4B3F3B0B060FACD8") (:digest-bit-test 62 #x01 1 #h"1C5BCCF7AA8C7DA0CC04676BB9DB3100FEE2011D5CFC4A28EA2BF29D0AA4B7617D778EBBD1F18BB11FC9EA231FB41173") (:digest-bit-test 63 #x80 0 #h"66C356AEBD0DE7EFE15284EF7F3900AC1150070E7C40A0670D653080E6E1C0561F05E43B5B54DC25AB3C02D1ECDAE794") (:digest-bit-test 63 #x40 0 #h"3C92A17985D747B5247BF751F703942BE94EABB774F821FD52F3850E7E720A90E7EBD53DF372CFE616137EE64381F51A") (:digest-bit-test 63 #x20 0 #h"76C8558DB248D60C5E47389BA1A11D285568AAEA4777DF43CB003B76BFFB8708AF8EA498A595D57B7A75C528355DF105") (:digest-bit-test 63 #x10 0 #h"36B3A1107C5C6478B7925B947CF5E3B45E15C4A2B0BC90924132BA365134C02762D2FF4CD0F04DA0EDB32383B2DBB801") (:digest-bit-test 63 #x08 0 #h"A9AEED8CAD8D2C60F32F94966AE67C7E79E6FEB60688A0EE790CE57B6555C2896534DCD2E23BBC9A1390EE2016D10C3C") (:digest-bit-test 63 #x04 0 #h"2C1C3B6CDBF71D2F199DCF28E54C3C64A400F6B257804DC238E851D6F826255873247EE18EE8C97124FB2A070FE2B973") (:digest-bit-test 63 #x02 0 #h"28496C250B56EFF5E650103B6487F95470B6FDABD2BA411847F636DEA7A7878693AF633915DA2EB1CD0CD8EA1DAA19A2") (:digest-bit-test 63 #x01 0 #h"A81AC80022B3315A5251A341A9F5243FF9CA833C3AAF519282C64C6D3078901D8BFE6959D0E3453EB52CFA7AA2CCF296") ;;; byte-level tests from NIST's Cryptographic Algorithm Validation Program (http://csrc.nist.gov/groups/STM/cavp/index.html) (:digest-test #h"c5" #h"b52b72da75d0666379e20f9b4a79c33a329a01f06a2fb7865c9062a28c1de860ba432edfd86b4cb1cb8a75b46076e3b1") (:digest-test #h"6ece" #h"53d4773da50d8be4145d8f3a7098ff3691a554a29ae6f652cc7121eb8bc96fd2210e06ae2fa2a36c4b3b3497341e70f0") (:digest-test #h"1fa4d5" #h"e4ca4663dff189541cd026dcc056626419028774666f5b379b99f4887c7237bdbd3bea46d5388be0efc2d4b7989ab2c4") (:digest-test #h"50e3853d" #h"936a3c3991716ba4c413bc03de20f5ce1c63703b3a5bdb6ab558c9ff70d537e46eb4a15d9f2c85e68d8678de5682695e") (:digest-test #h"4b5fab61e0" #h"fb390aa5b70b068a54d6d5127df6a6227becc4d6f891fd3f6068b917a883c9b66f318fddb6384d10be8c7af0d3132f03") (:digest-test #h"dad95a4b4d37" #h"3a2b40f453925bc3ce17d640757ee0e899390b4a8d984d0297c1bae6b60b9f2603bf71c323fd171011372335e5702e40") (:digest-test #h"121835fe3700b7" #h"7bd06a94acba7beb3c5a9b9e8769c3da6691c482d78b1e5c7619b36630eba4e596d11c410a4c87006f4716b6f17bb9a0") (:digest-test #h"de60275bdafce4b1" #h"a3d861d866c1362423eb21c6bec8e44b74ce993c55baa2b6640567560ebecdaeda07183dbbbd95e0f522caee5ddbdaf0") (:digest-test #h"8d45a55d5ce1f928e6" #h"de76683575a050e2eb5ef95ee201f82416478a1d14bf3d96d1fd4efd52b1a28fed8dfee1830070001dc102a21f761d20") (:digest-test #h"5c7dde9b3894d73cefe1" #h"f31b22115fa7178e78223e06aae870547ab93c6eb3c3910b0ee16e6106db55935d6c0eb820132a2078ece1067efc81c3") (:digest-test #h"967fa34c07e4945a77051a" #h"f8f24d81c4f8f23ecb42d76ed5d2b34c9cbc1f0a97234d1114804b5999759f3131c741d5768cc928163503c5f55f594b") (:digest-test #h"2209112ee779bf6d95711105" #h"09c54bf533a26c7447caa5783db2ec7ef5e55752da7f2a2c4e360982a94ec1ca2cb6a157d34eed28de978b4145e17ebc") (:digest-test #h"20442e1c3f3c88919c39978b78" #h"50bc95b036e0f54d833032a80d45c2ac38b3d29e9c7f72a2eb14781e9241d2a4b8e8dba6ee6f4c9e46a758d5712dbd39") (:digest-test #h"4d43702be4f0530319555d7f1a33" #h"83c8f0bb762801eb26cc5115abebb657c18ff811de500b32b7a568a220a287e900b6c75224fe7429169fbd534cb588e1") (:digest-test #h"5e2a79a544af85f150f7a9d209fd44" #h"8051ebc9cabb052cabe07e4023e2140808b77d25b07b96d2e3c22393f71b116c1a1e41bf62e57f73ff67871da7c93cf9") (:digest-test #h"e1bb967b5d379a4aa39050274d09bd93" #h"3b04f96965ad2fbabd4df25d5d8c95589d069c312ee48539090b2d7b495d2446c31eb2b8f8ffb3012bdce065323d9f48") (:digest-test #h"bb84a014cd17cc232c98ae8b0709917e9d" #h"85227ae057f2082adf178cae996449100b6a3119e4c415a99e25be6ef20ba8c0eae818d60f71c5c83ff2d4c59aa75263") (:digest-test #h"c3411a0592f1f4fa698815238997db356418" #h"233ac44170d9f452a1a0231622030b15c104ff8ecaa3fccdb9e9e5031fd5b4220186a8edd032849c8b93dc183a5c8627") (:digest-test #h"e831b739e8eb9f787f63c0bb071ddcc9f44cab" #h"91722d4b7aecc211bb8a5480c6855f3b71be4647e1dde0380c23afaa03f45c642606a24506e0317bf51506a483de28ac") (:digest-test #h"b8a7bbccde46e85f1223237d9353b78c3b19727b" #h"28ba69dc05e6e29de91924114d6c9fc7612f6d2a68b07fa001df059bcf98f7aa85389caeb966eaa299c79fe1fd1e40e3") (:digest-test #h"cf391b8aabec6f81288c8b7b92843be23d2e847574" #h"121e5ef697df491a53d7bae121416aa653d759a37db9d0b993031b18a0ef160ed98842a291e1ba2cea8b998bc5eee0b1") (:digest-test #h"9d65d88bffed764c286f34894f991600d1a67d622382" #h"84b6e0d6a45329daf47a793418ed5dbde01336b4b9468bb69e5da61c42b691e6794e6ed0e8fb1b8e7d4cd3cbaadc520a") (:digest-test #h"bab6ea46fb717f73f0628132a2b96be383774f1e5d8b6d" #h"e969aca1b50e928cad29a0d756457f6de8d7a4e589fd41e53a1e758c3b20f9b81b36bf098a49102fbf869651ca9a98b5") (:digest-test #h"8853b00e869764adb527a07b073c85a24e6c208ba47eef4e" #h"09ad44e85ac190e2d1c3ceb4efbea10ded34d0de961fe4ee268132c48e38660e6cf585bfffb8f7b00b0fad1514312b63") (:digest-test #h"71fe1ba5d299495d2a56039c64032ec6263d437f55e3f5bedb" #h"b41a5d3b4af6d4b9c349e0788538e9a0311086894df7b72cf5aaf4091a7e039e4e89cc77a123474e6d1bac438e5e9f88") (:digest-test #h"4ebe07d03c93e849b4bbfe9f2d2294bf6ccab457f76d3f99cb64" #h"beba464d7065185587fad89bfcea9635bf0ab775c3eb8c147b5b2bd8601db6dba0590b50dd1068733f20dc68e004a090") (:digest-test #h"918ac0a97ec1632908489e5242ba284bc811aa7197242cf7226fcd" #h"c4baf6397a4c6e26492b63a4aab7dffdd0051d8f51938ac24cfd8dae2f7afed1a4aa2430d7aeb0be2a72b21a6c50198c") (:digest-test #h"97477f7272d8a89e38e796c533e9f8a8ae4c92ccaa5d907ed26a1a15" #h"d1ad524ebe908d7c5aff50e6cb780fd3a70e87c914a36b93c4e35f5b2cb03850b122b480ef8587d4a44f22467f4c480c") (:digest-test #h"718e0cfe1386cb1421b4799b15788b862bf03a8072bb30d02303888032" #h"6d8b8a5bc7ea365ea07f11d3b12e95872a9633684752495cc431636caf1b273a35321044af31c974d8575d38711f56c6") (:digest-test #h"d3b07f0fd5d4cd3188aead8dc8338de42056e2e8487eca51ec37ef2daf27" #h"adcc2e954c91db3db2d71d0dee1f030e723bee1a23816fe003ac5dc862a0872ef51ff386c18be6ebcaa493f32d1195b9") (:digest-test #h"695b9efe1809abd5d44eae957ddf9c2cd3c75fae2f522855712a07c639c0b9" #h"3bb95d164d94595a1187f77fc26c280ffbb08e74ec7947aa3e5b38bec7c6f8115c4d880788c2402dbb3e5b94afd130ee") (:digest-test #h"be01e520e69f04174ccf95455b1c81445298264d9adc4958574a52843d95b8ba" #h"c5cf54b8e3105b1c7bf7a43754d915b0947f28b6dc94a019182929b5c848e11441c9e4e90c7449f4c3cd12954f0f5d99") (:digest-test #h"98ef7301f957d73d4e821d5873e8a9b5970fbd219d5cf74ec2291b8381181391b4" #h"b2564bbb159c3aeadbae0e4a4437f7c5111020e9ad0f4eb508147a961ac22a01e1a26df046b14ee5e8a49d9ed22b8cd1") (:digest-test #h"873ba7f8b71517ec50297b21cf94cdb7a58abbb8829206f0d3f328ff8a6939ac1d1d" #h"7405fdd557d2b5d4f65e9e85f508d3791495f1820d37cabfc8dbb74d7b41df8613d995c612d378dd88337e00951d0280") (:digest-test #h"e3bd4bc3a60cddd26c20aa86364bd44f4a07f3302825ad0ac127881de4eafbccf988cb" #h"199d5423a0e26438f4cea0081a89e0b6c84ca93f7c3120c8104b51c6edc04e0f6a203bb77d59973a7411a0efbe93a09d") (:digest-test #h"8716e4b86deff9da2a8ed55baa43582a7586ec9cd38ac3a933156158cd8e5b7887585e91" #h"0d2306d9c0a8ce57bc7869b439376c07ce352a41d86ab6cf4a5654cccd5c724fe1b62b2c1101c986222f5264ab3fdd66") (:digest-test #h"f8a503aaa25ef2cea25e31930c3a90db468cd3a862f4a93aab5de2777e82dc905cb03ee23c" #h"773ee958fe93dfd1b73af24d27ddce33144a9249d5a671682a56df30d0bbf92b9327130022075185d396de752959304f") (:digest-test #h"669025175ea917cdd7a71ff4ec0c45bf1246d2a6f031c00b71de701e17939bfe92128b21911e" #h"9ff6be3f02c7c5d0206f4b944c0843cb68bea8f9b7c8cc0b729503db5005c7cd5cb14e3457d8f5eabf733fca9084f16b") (:digest-test #h"b35fb2262edfa14938a0fba03eb2a25d377974b11f556491a781d0ba2b3c0ff3e42749925fef8b" #h"835b05a4bf00c2594c3c8c13da6c273a0d9efdea0da72b71b19d326bf5ce968c2e577a7d99fc0f985afd23b46423129d") (:digest-test #h"9d86b45df8d7dae0cf6b0bc208666ee1163a39e6116d6d240c9dc1c3a3c1db1dd3b1c6680fe9a196" #h"a84c469c24696f81d7df4ee8cd76aa584f8c9960eaa9908d3e3ebc5eea7d0b50afdded39deb94fd59323a21a6539e93f") (:digest-test #h"414f5619f6dfd45853bbabd224cc305d77350ad253358910a74f3a4381a9b86680b3c4068c089849c4" #h"848d481e3bbf5dd726f625cf6a444d995b36262c9f80d583b77accf1707e3f49bb3dc480a560694d769aa1ce65d69428") (:digest-test #h"e2658324821ae7b0faa0cdd63ee9efb9fcbe82092d04696feb3da92c82521dfdc98f6b41b3ef365d219a" #h"3ea5d0799f1a4dcab9149a40ab74bec9c8d76d8e392c1e63e080ddec2ec535f80be9f00927be281ec97ac0c882bb0bbf") (:digest-test #h"7e80271bb5f2cc7ddae4158658e4e8d06e04a39385da0ecac1cb8e91d68a9bd21ddb7320e79d10e3110758" #h"fa00bc0359a642dcb3559656094eb2fd4f63bc57f0d34abff26df5c54cc63dbeb4eac75905296e7fb69f871e134083f6") (:digest-test #h"43d2828e86f7856b78c66cfa3d602387c290975afd021a8b76af0918069cac35dec45de3cc52edc4ba14432e" #h"6c9e367e066032ce47ba2575565932002cc786f533c5551656abfe7391e7dcb5f9d9e047adace23d32f8acedfd0cafc5") (:digest-test #h"3f49bb645cced7530b8b82e6cf07fbf670f7ef0ba0583d16debafc639bdfbfc99b8417249f7f5a05410aa3a71f" #h"2b301a14647a67429cc3e7da02c4093a739640f7b47a305251d2855e75e09e60e262b279a073077d1fb6d0f04788f2b8") (:digest-test #h"31aac06a59b74bf478617c1637fa6c5593df168b8d58b1e923bf3e3d80e55d7170b16454160ab29ee1f7412ebc05" #h"ddd245c9b29ceac60506fb6bd6e8037889cb73d6ecc669fd129060a8a8f58971ac572d3ec9b44404f81381d0fd35a649") (:digest-test #h"c10b2852054d8034e07906c7fce3ce99402321a648bb881f13fb276afc224c6aecc64800cd767ed2429db94b95a9c3" #h"a44640fb4ce6dfd4a10290a0aecdb453054a9b54f2583e97bb7dc2b005e5fa2b4fda17b1f75902f51c18c0caad35833c") (:digest-test #h"b1eeef324b499f19eba322215fe3ce19c9f000b698d2b2dab7145015046cc86d049ee15ad59dcd1564f30112e06444cb" #h"38742d18bfa6e918b888d68d1034e61f65dec0759172c2dbf08cf1e132b217eaf4ec29e15db7f4b07e08a70cc5662012") (:digest-test #h"790dbba09965c9774dd60a32e010c50d6d518968a220141dc33e7410f2da6c08ad0419bd9864d5327d2c5c44914b2e83f9" #h"9174958bc8f4ed4731eced999bea2f63032f52bc8c46bcd903232f3fbc5046f0d6c203d43a078b822fc05101404f2635") (:digest-test #h"f7b577f1396b23c27eb637e53d3d92460270b001cc612fd3b4d68bcdd09c2d50571ea4350636324cc2428a087e7bd8785f82" #h"80afe111e44ad9aff9e39c4cf9e6b4c520072b4550e62b1740160a04f8d530612dc098917a556b44977d0e73df518bee") (:digest-test #h"7370d9b453936955b9c9d336f4b283237986232de007bf412fb426ff5b4093c80c428c19a12e0b187484dc6d5f4746537fb1ed" #h"6cd29159820d34e5706dd867e6363758d312660d4daca8d2abf677f234746e97a0a6224eb054066a0b74e18c70965368") (:digest-test #h"e8620170f0f39328bdf8888148cfd17730f314ea68d8fea02d16d98a3cca61484139d3ee92b748091dc841dda08483f1184025ce" #h"29c408a6a5045f397b56dfb5292c7c16028c63f068e699b86a891ff8501208ec9398dbaf463c00f39af7b2cbe45bac15") (:digest-test #h"75d4216bad77943bfe82be216157843b0da0fd16eeee847153a00b43e707b2ffe2c898168081f0bdb3af58f214cf67b920c385aca1" #h"0170357385a20865a8d30c2df39406903ff88c7f70fa1a7a5aaa86711d64046c432a1b139668ae5abed637d1dc4107b7") (:digest-test #h"2fa90c2210e3096caed122b74eb9559977120e5d9a97eeb3f99bcba6c19cf8cf791ac6c8a0a94ae49246611dace7f24eb05673a36b3e" #h"6c2ced3fae94dbd92f4170b63f1ff6fcd8194f60937b22b4f3c95fc9e104b77148f9bc6c16a890de86d9ef1554c96fa0") (:digest-test #h"a8de55170c6dc0d80de32f508bf49b7046aeea4b975a511b5ea3dc853bfa4b1e0138202d6785f6b3017914a86f824288d586dc0e8bc924" #h"2bc3b10c148200f7919b57afe1d7db773ffd235e04fec6897dd94f13ad9c437ef50900a40937f82a39daf2aa2b3dfd68") (:digest-test #h"accd9d05fb7ef3043470836137554af117440b3ccca7a280285494f90dfaea60dcbf40b230271932cd3875b1d3dca60d38865ff874180efa" #h"b9e02df93e9254180d6a15288d77088b5a5ce517644109b4e2532be315f08dee43491608a1127dcdf69397406e23d231") (:digest-test #h"32b835c180cc4006c11a61c65b03c099510e1d4f0a94b63d54bd6bd5a8ab207ab0f4639206564edc3fa6af03280a67744f68106dc51ee35723" #h"df97a1c5dda6f9dde749f213e429db84f0dcd481d43bf58e6142968d629ecf05b262830a7dac87f67f4383975f3e821d") (:digest-test #h"9409f9efadbf190b253367629f8f368c9d5ac262e94ab86f3559f9a1fe1a9b44b64e313121b34d43001c430bedc62fc586ea398acd8f17c7cfa2" #h"e1a69388ee6b6d234108ec29402cd0afd74957d990c7bdb544cf11e8eb2ccd170b6b5a74431be70364d7a31b926ff53c") (:digest-test #h"289586baf8daced50db14c936529a0a6438eb5da8d3d469172b6a06f4ff3a956d4f9219563ac285cb8e70074cfcc152c02593a97733c36f4a9e97f" #h"509e996c1e11611c243021b8b78f2ad90c5a9263bbf35910db7c8ec102aa7c518066fff8ce88562fec2cd6dfe04056ae") (:digest-test #h"156530cd6ed3baf1fd7232c7ff204f3c7d4d106016afa3bdff3786e84843ec556115626fdc84b2e874f1074e4f7d53e08079ee9fd01f80a8be7f20c0" #h"7b8a598029ca0ed475a72c0644ac81c63d72fd51305dada07b0ab4a29e47422f59e12643179269ca3d7d10446b372b2c") (:digest-test #h"30655a6b5a5965db992e7248d24141055e988d726abb8e729dc5c21ffcbaedbc0b1b5fea35b8751f6ec6625517312fff2234014176269b60959723787c" #h"cfaf443e95deeb3cc1910771a2c0692a54b18b3633dc5414e71ae08877f0804818f67f7196c52e26b762dd12bb7a86ca") (:digest-test #h"345c3c022e20144e135604078762ef5c8a8f038cf1b1d6a91709b59dd068396a9e971ab628f74886e765384a23607c1a1e6e973f8fbb0ff55104c46f5db3" #h"bfb1d5ee3a0b629058ecc521c706c2f9241c48cda3dcfdba660a2601d832a7a872a2bb840f3b98d21c37e28f9041a5b2") (:digest-test #h"0b94a0f43a92408963a59ded01a9338283a6ff1bfbacd9051a0104445c7f041e8037afde3b5a87d22d5a4796144cbc944091d6cc47b5ffd1f997ab1496ca31" #h"07a045c9590e9901d0598e604c4649554a823de996fa438cc81a634344eeb98e5f3c0c234ba30e2285a4d7ab568f2610") (:digest-test #h"93035d3a13ae1b06dd033e764aca0124961da79c366c6c756bc4bcc11850a3a8d120854f34290fff7c8d6d83531dbdd1e81cc4ed4246e00bd4113ef451334daa" #h"8d46cc84b6c2deb206aa5c861798798751a26ee74b1daf3a557c41aebd65adc027559f7cd92b255b374c83bd55568b45") (:digest-test #h"bfb94dfbe0d9a509b78d164a722050054dad91c9a8e260545d037eb450321aac48ed4459fdd8a41572bd6c9c84d18b6ec339247482cc3ee52a1bbd6bd4ae918216" #h"13af0be02986ea3176e8c65534ec9f32c23b53c93a73b15c26b9ecbd8a1181ae184a372e9f5e0596cd6606849aeae8e0") (:digest-test #h"1c8924a16fa7c602aff5ee961798bd44fe53798bf44c3d6b0d13ef837de07377651c1e94ed236eb79349f86ac31ba151a7e711c5407e65beb63824f6ec39754b58f3" #h"5be6482851ddafde582f2804071a702ae39bacb688741b7c37bbae99821ce4d3f47d5b097fd8eefa0ef9248a34f5d3ce") (:digest-test #h"184215145da49db417e8bdd573d6282de073e674c3dea86b6c78591d4947f5655a9d9eb0e5f4ed046b1d8642da9aefa80448a299504160a1b000c9b4d3c62ab69b3d96" #h"8995cd7fc0956e124075440686beece17a6256b282e7988a0c998f790e3995c974383179893477bcc32d1f114129b496") (:digest-test #h"ca7a63adf41f4da33142910c967706b5c8a093350eb3e6d3aabe69a46a2872f47a39bbe77cdc1160daa450225b0e8e36f506978ce3ac9ae5f75721ef30da46b28f07242c" #h"b89cc12b11e3afa58908580c47b25407abbf584f8e8d4b5631e9f450464c7e53cfd7e9f9d3cf35e587a6f02957ce4c28") (:digest-test #h"1da41a0af202b079521deb6109e312c2ade48544d2b498c07e91a102dd4650ce354f3f201b3ecab8e85e21d667959b43d08f4e90fa18dca2ccca8f6ff5e9a902dc8bf5c5da" #h"5c297e20c307aab7f325939fd4e2883b034fd547f1dd17fb6b97ade8b148e06ebbf3ff60cbf469e4933d5f48f0166cb7") (:digest-test #h"dece42c8849be40c78b8de6da96c2a8d7e940545b9f3f39aa1ca03ec60a85471aa84d8e29f095874f331b90a4c157da9eb048d2c8fd235399672707366c766f10bb833f02183" #h"bb509e33e9ffcc4c01233146226ee9364cdac5658132460a76edf617a035b197c86434ee889438581458102618769382") (:digest-test #h"952008ebdedd480449bb96a025576c5f617bbb8307958a010767e0d736ffe5a196ea4467d8a5d3ba1f5476ff07b6410ae659dcef520a2c14e3902f8b399a289f41f5fdadb502dd" #h"9b63d9145bc714a8253dcdb8341b2f5714eb58b9d4b22ce45aae07f51297a3dc9c5b691a8a3cd438dc5bd18be400af21") (:digest-test #h"100132c315bfc9c4fb93023f5d3500d7208a68acb4d2c63096232c361a161c4c67c0a74bc3e4d72c11664b1d970321d405401924b3a0f6ce2b1a2899e7caa9a55ce725fc37f55d6a" #h"b6ca04467ed3e623dba36f2e0248cefbe134cf555fdc14731175eaaf08e244ab0b15fca2f173a0ec98feaf359fb84a11") (:digest-test #h"99cba4019f5478789e674e08fe5d6ceadd698b0757ca39c605457c22c3d3b8ffb797d2be8f12960f099a5606b908d47207b2636a779948282de3661bb08b1b37ee576590800a492730" #h"e5378c7c251ae96f0359a30b3134fd77d61d0db68c42a1a2aac293195a596df42f677e6cb98abec90d6722baac63fc86") (:digest-test #h"bb327a0bcb2574df47080e8c0d8a45ee1c0424ae0414dc0a9b8717d9f27d8ac987c7c9ecbc946073884d1fb96dbdb583aa758186b16fa429dbf15b8d5bb48cca71469e7ce0ad8e7fa14d" #h"0f75e65ff8494ae28d9a0a2e65959653275fc34b2fa27b9e10faafff07c45addef3b8f25953d5a2e54e31ebe6d429d26") (:digest-test #h"7fd9eeb5ff368040d299fd17a943b21d65deb2eccf6128d18a33eb174693538935374c32c333a867821dba08636f20022c2ce01826c7b7e41640ad186f90ed0ac647d47086744867e5c54b" #h"007251a2a577add048b1edc79d96c7df8fd5b5fa0d7264f122e4cb54c50bc316a8bc5f4f9dfd4469e29e9b030f563a6d") (:digest-test #h"7ca9e369e82186984d5fc729e111a7e5d8ec19c5d74e13b5ab22e4993b05c88ebba6ba72237389a6e0722e12c96c5d6a54515ab00ad80efb38665a76e831abab0fa5cf020807078441585de5" #h"3ee8c4184de9ceaecd0d3aea16271835f3d45c873358c93a515539c38e819414ea63b08d0a109346793d5e0f703125eb") (:digest-test #h"5b4d945d55dea22e37821ec396476a4bfb617d2f392ad93afe67bcfda9cd9b725bc4ccdf516a83fd71dbff5a22b005fc61c58e471240bd2193ce13539730e63232f70f80308be48dab7266a1dd" #h"df82d242e4cdc2eb40bf3db6a56e1aa0a66e553f1914bedc65c8cc6ad9564b6e85df59f4c443cbe4e0aee05986f7d690") (:digest-test #h"e865f4a42bbbd0b73fe275b8ab90d3a9fb74ec5070192d38f60efef9564498b9adb716f31d50cf77c20ae4b2e85515307bb8d95fbeb9ad964001ac550dbc60cf213fd8a522edfaf54e5b1b93b2b2" #h"091fa9ae2184e2268ef9ef23c7c809efad244536e00aa9e8b3a6c228d90e31da051b40f268a13bd6f62e69c91ae8cd2d") (:digest-test #h"1d408c7b68e168f41bb46f9b2e9c8b04f968e4080252546814cc1cb2917dd5690886a9600a09c2673aec0329a4daf655508b06fc1646ef3bb3a472191d964db214a96a96fa89576ce4c4f6dbf1d176" #h"7e23472c03431925f3b4559d886e8d5d837b3d39b8efe1b7a91e61a13810c4dbc2439634d7c6ababfc66e9b18e6541db") (:digest-test #h"54ae030a4e27a05c1ea4a12e69c67544af9b4044cf157dc8cebbe8b2d49f9bc0779077603c90c5c55b891d3ac33b87b65e79e1b19695813718191b3bd8b7e42d5583f7cf1e60f84495b8f869f3719969" #h"cb65f823585773cb8802b6339182f13752a82864c898b445be5a11a969657ac2dc4a3bbeb87ac0abb232a2b124171096") (:digest-test #h"f73cd386f73d0c6ade05771b33117117c602e52693f05b47e90032eacc39295f9793258fe6512eeab291baa0be222e143295a28e8697e42fa27ec02b44217f32a1edae2f4f35213562ca37b6d6cc5ef72d" #h"f665c4d17a83d65a7ff16bfce279b58558250d76af68b8eb943753e411a57ceb31c1a131e54bcb7672584416e3d5719e") (:digest-test #h"1d259612e6867e7d788c71d03c5136864ad6d84f24eaf913a34e69333116f812395288d4dcee6665e6d7dabd005ffc6327e3ca305cab78569d1107a115e619fc90110436317925066726774d1da3639c31a6" #h"5dcf512e2b93d6ecdf7c3304534554ea79d22392e59bbe90df21e978c9fa3b34ff82e6dcfe8fe2236aa4af4e662e2a9d") (:digest-test #h"da8734414c45fc1d5a75a3cbacadb1bfb523d6fc391f882d0db0eef21f9ffd78b6a1e14cfad09e71b65cf7b05d7e8f2f4bae4e454e16068d65465639c729cfa92738563d37edc9676b7be604ffbc68ec3b6b72" #h"8b328a31adf67dc7aeb864a359628410d5814a2f0cc683303f61432ce32177e1f538feead7e5000343916c7042f8b3cd") (:digest-test #h"b228c75903d80fbc6d1cf629ff1d14a92ec4bf0e121fd97bd306ed265efe7a5d5c5d8fc764af98ed6f5978f88d7cd8bcd71cbef6a58261d201de3cb15b3161287e6a104cc2cf882d839f1da0d3f68b426cf08ab9" #h"fc92ba4eac9a1bf120a7b6c2cc30335b9615b1a98e55d14854ff872966e71040737401c6bc08db5842ceace14cb7e7ea") (:digest-test #h"c90d473a6fd30be9a98bf442a9ad65a697d4629c33cd517dbbed02710fa8ee991360bc8e557b0a0bf0b869e6b0c3a9457607580edec3859f2060c9c0340289d53a5d755918ca54876599045a86a9bcb8163795ea8c" #h"807582b2520e990cfb74367343268b9148b2519b9e7cd9182edb3db9ae7afebedfe8ca118130e2ef9d31af9081da8222") (:digest-test #h"6df8c5c28d1728975a0b766cd7de63bbe7f48c3db3e6fd5a4b8df6e3905cef0351f3d973b4f2a7eed80b0de5b85c877353fb9e930ad2679149ad4cbe69910e68d5500b096c5abdbf27d684fcfcf1a57f02769283d5a0" #h"7bda57d21a4434aada6758e282e612a4c0f41b242f9c790804d5bee25b81a821dc6f2a0ba56f1b3704802c9a6e153d85") (:digest-test #h"2cfc76f88cb6fb90927b69526ad5f03d6bd335f4f75b52b6a3c21e8f989ab0d03acb1ebe07e68a87c1b5607acf17d976e10ac4a3d30a8561d49a5e7ec720edace9f5f632b4bd63e104f4894a79caad2e1c31c736453485" #h"e16670ea837c259e418d3c0e1eaad4948c3457e15b1573056e24da25bff5c66b7e95d24c6bc1b8d6c2b812f64adc9553") (:digest-test #h"3f05108c2f33d39b3aa9e73efbad4b011b4e9e9fba409b7611e7e03956b2f3e5e0aa86f68c4bfada5f9223a66d574b08f9dd797cdda8f3c32d8e01921711f4870dec676027ecc56fc2010b496e95cfbf071c820f21edf25b" #h"b272bab680f3ab27de72d94df384323f8555f1d17facd2588ac8648def2451f82f9b99c05ead8316fd181a2cfb97483a") (:digest-test #h"1ffbe1aff0a1e7fa3e68be31a74612a1519b59397e7007ef61fc015f316d55b57be528cebcc2f09a2f22e3c5e4a6ae9612776b17ae87cd763c1a9eabe6846c5bcb347ffc99f10e3b5e64b29a9bd71a5e9b3c01a802715de2a9" #h"f08bda9d6762607519d53fecb0bffbfd3ff2924854833a759d631e910c42ca86741fc2e290af42e94b94898609b91390") (:digest-test #h"f755d6b5642378f2847893901d9aa91c54a4b7abb97c5c7184063e8f1e97aa2de4ad7ac927dd3cce770c906921e2d298f67cf9844e61bf104db803b265b86b821c5f4d901067d07b38764e3f6c95fd4f28e3cfe48d8a9694a8f3" #h"f85e98ea054455242280854e97c4ed399b85ee7bc5c5fc3d62910a76f3a9600c3d904c832b70b58d7d998db8dc978135") (:digest-test #h"773577f3a642c4f13b1cb1f4103e9f6b2da86268a52f449cbb174c8349e3c0dc636ce85c373115a337eee26f7b70ba1060a79a1c76fd186399e6a5255db80f83b0be4a34ba876f7908840553ead380f3195507729d067ac2ee8eb4" #h"cc27869cd7e63695d19082446b068b77dde4e8604f8c0e9ce20a1b71aa9eff1460f32d5a54476275bdee8e7621491f46") (:digest-test #h"651589927e17e1aef780690f3100a377f0179b18b31fd5b4418c84038573fc559b496a782beec3dcf6e9faf5aef676e10bbec34b1be5888fda49b91e02890d2524c5b369f8a54175f29dedf8156fff690cf186ec77104a798315033b" #h"da846042fb908eee5f5defd1055ff3e57103708278d379a8681f58bedc6ef89670b9f957c4e0edcaa42dfd8cd49df6ea") (:digest-test #h"678652600eee42580f73623412e9c011cc02dec4d4cc1b79b27b6f9939695bf2185b2012ab0630f317d2e2de95dd69890e430783e99d7ed121c7c8da9ae70780b5aabf9022d1435cf5ed6da6fc6692c050c2b5f22b24fb1cf9135f9cb2" #h"8a6ae41c9bccc16eac4860bd5fa91205a86fbfd09692578f7f36b3c135d96f9e9001c192dbeda975f7375bd43a23ba68") (:digest-test #h"416d3fb7b401fa5e78cd96d479d8860df147eef03adf13fce1c61131fb89cc2ebc63289745bd7db9bef14571a55318496572dbe52b9b349ef59f406cecd68909f364325380bb75f3aa62503c84f47a55aa6b9c9b199ebe414409ff3964cd" #h"c5f20542e0c0ac1eb433de6229fe5baccfd4502e2c2275439385efda6374a1d0fc50cd9bba4233d470ad91a3356ea315") (:digest-test #h"6f09e876c0b83c9934ffb777f006338c5142a31375e9b21cfea9a7de12998c4ea6708ff1fdf5a8ee6bb67c675ffd8209a10064e2d758a8734eb48f07f7cf3d43b09f1bfdc5d07a52b77079f23cec28bf863bed97c859276df7f7129fce71eb" #h"b3c968f3025f87dbd5cd3d364bf673e62827c35889532431becd87cfbe2cc75b7ef45696d19cd3452d0e7c2b69d09544") (:digest-test #h"0dc2b226b3431c69a76addc018fcbda22bd72c8ff01ed6549596798bd950f361c489a09c95cee2dcfd6401208ae6368d6630026b417cc4718ccb8b42e8872937de66895fd09142c42f066bf0ef3ab2b03803a8185fb65fc7148c376ddd4bf58a" #h"aa645a4f8f602411260ace24d381f3f5dff0000c246343eb528e3dd027cd743815737906ac5c74ea83c2755e56b99509") (:digest-test #h"8dc71c84c8772753c86ab6afd80e8d1df9b0d7e8d69ebe67fa883a82412c26738c3399cab95573b4d3c4367c85c81852d5a6564c0fc7caaafe16c05e62aa06cc9fa542ceb35c88fb6ab82c29d5dcd530f807d3f1c3bcb3974421101d1aa6ac112d" #h"12239813097124e6248e7dbec985a6a25f622b1d07295cfcfbaff33b847df7fd94265e439fa535f3becbdb576922ac41") (:digest-test #h"3df3edd9fc93be9960b5a632e2847b30b10187c8f83de5b45fcb2e3ed475569a8b2ed0784348f9dacce7b323c6b65071abd8b32d1022b1e12787bd4989d3c5ac329d576ccd7608dd336716532e9b4c7f825826fb2e343623ef85c6270619bf5e3b27" #h"f36590f5211a9cf84eeb0a3b2e5dc1164e813191cda7cb883f3f4a074605ce6780cf2f1a105658706fbd2829db8a2a58") (:digest-test #h"ced0ec6500cb891e6433d104ba5b1c1ebca397f3a5eeeaa0f0561729621ea50d4ae7ff1d0827178dccd84e4ca06d9891a90adbb7a9f4994ac947cf6296e71d2f49b826d64b123a7bf86f339fa4679caddbdf19cfed7d0206aa5f527a6b0cc00f52aa2b" #h"c2c2d7d65d0b9108648e3233d15fc4e4cb62ed8fee9cdd18ab44b8486e2100fbe45ddcf74f46c15eb77fb1c893c12202") (:digest-test #h"afa4a2c4fbaffe838dd149c78ea7851ea9396304b41806a093a90aae59c0c5bdb170cc9a7d22b90cbce52cc1b105108942df20c29ef3a913223b915e7ebc98ef135adefaa0f0a6441ea05920e868ce9d1ff6c8fe4dbec06a4849e5e55ad0627f9e09dfcb" #h"cf6ef91d8567414f5c7f0b1f4ad09a976afc7c8327a382fca90f5a136b19be33100a664390a377f8d8a3015fb882125b") (:digest-test #h"00f65a485bfd381113d6e79bf9e0d5e518c891988c073ba198ac3a20f25c2c81619723e88a3c0ed3075075fbbafb6a7b61d3bc336a5e6d6f08d166c4861e6a3bdc2e49b2806b567e7e821a55cb674a6cd699f7dc61a7054a8ff3dec73eb667f59644346be2" #h"809c6b5d41da7cd10df90b02b193ac7d40cf2e46c139e9dbd208a988da2b25002cdbad1db2ecc1322da20b7d054e5fe6") (:digest-test #h"b9ce382e1e82a873cc444248a3008c2cf64d18759057abe8f91c9d87f5dc83aa4eca0c51d30829b9a1d2712da1fac31f52942d77c9f20c2bf6d3751028d7d4f0d336d3dc92b27ec368caa4444b3180c1e37e98b58f25e647a9a6361f0b04cf78d17955766168" #h"18cd10b3ea907b3770e8eb91c974666e2da2525afe7020b872b3ec6689e5e1cd0059dd4fd49ce44d75dc4c8430c322d6") (:digest-test #h"6778d82f3a98eecdfac55ddeebc52476a070094fbd65831801fdd60f837d80d23b90d472c5f4e5ca6273a50f40154ea8fb94013f6310ad18800433a1d379c84bdf799a99e8c7b676fbcd29cc2ed66552297de7a6e565179bb42b70d48299e0925a1d72ca2c792a" #h"71f08d9333df5cb885fd23d6cbb1db84f9b55908d069df50fa4795cc713a18439bcab8daca078356f5c75a619f2f8782") (:digest-test #h"ba3a54a77d7c2b8ccec6d53136cd48827c87acdd1cd86ad1f56e862642ea2e1dcb4093f85d60f7bd77160738462e6c3fd3dd9d3a7c5cf7e2a1d60f489f84471902179f21f656ce0fff089278ea14441e04e7af71891622565f44c428044728fcc686212a32a5d809" #h"3cc154f0542d8e3cacf9d79f231416816178a7ef2275fb257a48a2f763ffa2e15a33c27b970a416a057925aa0412d268") (:digest-test #h"7eec4f4f491b4eeaeb1cdbdb95e9511c2872372bf64a1f61cda1cd8032729c8beafd1edabf78036d80023c814ad8606106cb4e7f33f214c3e69c0f230e885474fd594f7f2444aa581e0c70ebf13073d89063eb81a43c5f608b2fc99fa1bcf5e2bfe62a6802e70c52ce" #h"2f8c5682a07438043e55f0b7759fe7eea5d9bdfc8b0f89800ebcf777bc05a941ea7f3cac45d4659de0f505d814590b6b") (:digest-test #h"f3715b9e3ddd7862e15ee87aa23f1aaa0580591e55cff3fee9b49b42aa0c0cc8cfb8efa3eb96ffb72ab06b83d7b47b3d22a5772421cfc51214005150edf532af10138ad45758add459908601eccc3703e810002a2e4c6202e98d84281475d55d3de9f3d98809cce1f665" #h"04e7d55b0eb4bc3d3a21cfd2941dbb4dc44706588967186b40da54902aeea97b262c97f75e37ebe3cd60a804e7b9feca") (:digest-test #h"dfd7d792e162bf7a889109550a0fc4c415232af0c0d72dcbc2595299e1a1c2aeae549f7970e994c15e0ab02f113d740d38c32a4d8ec079cd099d37d954ab7ef2800902cdf7c7a19fb14b3c98aaf4c6ad93fe9a9bc7a61229828e55ad4d6270d1bdbca9975d450f9be91e56" #h"08e5ef57d0c2aa23edfc75cfae39e6bc1a43b5db08b2e27bc9823114edf760367db9cf3cd9c3779755f6d39e219b7079") (:digest-test #h"ffbc7c47f52e69f5c667f4ed578b46ff4592048f789081f3fb39321d0aa4627a6d4f261905649410a53a301c231fa787ae55c04f615a8f84196cecf2844d23007b44edd892649fc8ed10a2e855bf23fe8afd0b9edbb33296f5a7cf89f94634d9d1a2b8cac3b7f4e546f2329b" #h"be10c7baf94608408a0accfbc8ce95e159d08d8ca75dd6c273f935947a7ec3463e10a58d3ceaa0b2198b0887a3a24a29") (:digest-test #h"a39f202d866e8e96765fbb53b6772537dec043322f4a7475247036d7495c987850cef2a46218d3fab36e3bcd595c0aca5e98b9db14fa484ca8c9772dfa3839f7ac3066727a50b0d5c933d82f82f1220720e8063f08bc283f199c8a4f85c70043df4fe55e751d0d71df36fa43d8" #h"3b2664ccb555a1b1f3ec996860146ea75ef7f3bd62028a19c26f63339399f4275a07f3c064d34766ebe8e4dd532f6629") (:digest-test #h"b2c8261853e2218dfa135cb5387810352b8962e94e9fdc8695b41e7dba6ad122d14fdd0d2360dcc039ccce8b37fa0ead6ccc85bc26261d47cbaa78b925c6e380fef1856fed31dc616fe16b2039b1ac85cdee4ce04c0497998b41321868db08e35f358606585e0bb8c3da9a3be7a6" #h"45b286f49fd05c45c921b7bfdbe2cb024441c372e07394dcccae0de834cd541f13a79dbb3e5078896e88438542bd2f12") (:digest-test #h"a04f390a9cc2effad05db80d9076a8d4b6cc8bba97b27b423670b290b8e69c2b187230011c1481ac88d090f39154659494db5e410851c6e8b2b8a93717cae76037e0881978124fe7e1a0929d8891491f4e99646cc94062dc82411fa66130eda46560e75b98048236439465125e737b" #h"e7089d72945cef851e689b4409cfb63d135f0b5cdfb0dac6c3a292dd70371ab4b79da1997d7992906ac7213502662920") (:digest-test #h"f419494c3c6d0727b3395a483a2167182a7252f4fd099c2d4b71b053f94bb8b3adf3b51e8460cfec084ce9415c95798fbae4975c208c544645b54c44d2b97f2ecfce5c805be61f5ba1d35dcc07afdd51a87baa990506668cf710e18be9b0ebf943f366fa29c69f7a6616de72a3353b66" #h"aead8688c58c6ba4e9cadb4756b465dce0fb06f1cfaa478197f2ea89414e47e9572034adfed160703c79b82b3fd7ab78") (:digest-test #h"aaf7584d53006cbf2d2040e51b7feebd2bbf1e9f6d817cd8062a6a9680e7f10464eefeb50b07cb46b14b9b3fcb2caa3b9ab664490115d5919456613bf172b58c5388fd52646a5783535b88212717ef605314b70b8a085024d4ab1fcbe2be74609e4cbdec0730fabd3cd77151d647a3767b" #h"e6e79d8c61d0ea9fc70dd4dec1fa432849c3396e717b170badbd87a4c7974efc590ab8c1183a6232beff14534f004b02") (:digest-test #h"a467f77369730201f2812204fd63ad0d2757be580d937dfeb221a06b21ed3213531d936152a0c1f09f0ad5fed19fd11e80ad982c61203e86b2508279d91d99fa483e2e97a3d6a6ad2548a8da404dddb58344f4bdc1c9ea907088885e4f532d9c4c73cdfda43c3a9e4ce5a2809096593cfac1" #h"5a7508c2cc096bf65a4d4d337aea22008edb9a3bae869f94e09fb526a52c3368e9b28576fb950f078b7e43b5562120e6") (:digest-test #h"01abc90e9180fc9bb8ea67a405073ed6848bf33048076566476c55836bcb19d3e55e9400c5cc657bc7a95f1d703c390f5a8687e7cd7fe9138ea3837bfcadad6258a3eb8d65121fa8319bfde532aec0e694961bddd2b673f284124be5781100f40381b6ff99db92ea9cc82a4372e53924dac398" #h"96b209d7cb2c2033b38350744767fa5c253e1bfdb99fe8418bff83804df02248140fe3b77b0bfd4a79b51f70405a434b") (:digest-test #h"b555d99056362bfc2bac2a1bbb71ba112d644e50b82b015e5a1ce3d9cd5e90b8b74b08d32119baa62abae251fc0015e400051ada4ecafce3681e5de727c20d47f5cadc663d46ac682022ca396a4b7ed1c413e0b72bd7eec4a0dfdc2a2185abb5d99afd50940528ca75ad89daeb9a1b61e15747f0" #h"abd39f79d72c6cd2e8e130f3603032fe3cef4177c3563930096df1f10b87e79cd4e2059cf1b9f8252184bb26f659a5da") (:digest-test #h"14fb01ae9d6015ecb3e56d6ecdfa4bc0533186adf8457f5e4a5c57c687895f3db395d06ae7ffbd67ec41452009550dfc1878eec0df2eeab09e8665f7e59f9148a86b2bc695b36521a55b2302f2e869aac83f14d6feafc9e587322c3c44f052ea1c0578884f84f56307bc6dde31ba48118a0f62b6fd" #h"fc9b9a95a8ce1c157720cb63101a7594df24f4cc74baf735b0ccf6abb925478ad507cd048d30cde1c788806f43ed3a81") (:digest-test #h"11ae0cbfee7bb3df90ce585f09b9cf8ff5bea69a68eeb6c22553f8ed118c9a61e7b752cc2c94f38766e63e1b891dfa05b23347b617d42fde3ec17eea6e76d3cb640bf8fa46586fb9dd5c4d9bfee04c4649571b781709f848ad7081afb6e2c746f071a551251050fd5df72ee65248ecdc24f2cbe74ed5" #h"3214b5feec925059149fa852e3ae285a6eb377df926504e2f824572a3aebd2050a20144e7bede7e7fe238ee83e69f72c") (:digest-test #h"a5c4a47a04f4714269d5d922ba4694060aa2df49193720c819fac93bb8787ec55a107ac9a6602f0045fd2cc8e66744bf863ced91eeabe60e7d2c1d80276ecf3bbe91f1757096cf589214f3569c2c48bd74be7f8befddb28395814780a47c180a58b0d0276a7e9873d682f473e27de7275c925ede23b6cc" #h"6bd9e1303579d815f58e8c6c9855850133251778a632f7b312c4b3163b29b5ef6cb9511a08a31a237d9a7604afbfa056") (:digest-test #h"75264774af69ec7ee3125e205bd6d1cb8fdb22f7ea6dbe72d1f2c0f7e2205902796d75e379c79b11498615c21c9f52b8761a885eecc69d132b2b48c63bc074c3055ee5cc13f51d6c987e8188b030b837e8f754d40122b451f15b28cd2bdd576920e1de5806593a36d8e1e89b9ef3caefee5acd80b3e9c9d1" #h"ffa9e4e856d06227c1ccb959be558309cc10633173f4b66ceb382923b52b9150acfb08a7393500477a6ee4425a827e76") (:digest-test #h"791a36d748695e62db5003a8ad367df1f051c1ac6a21d711823e8e069b546e3fa06ceeaae06de70a1de249e1dffd0d940edc6acac00c4c15504c02d4b0933658005423455f00023b01cdc5b681b6083379c24595518a47c654f5e1a10947df10c05a3d716b2a973faf98e1ee3b675816598bb8d4c2a3b06eb7" #h"f8d33369680524ed6c6a716d4c502de3eac891f340f40e82e37501be1a90fb61d26e5daafe92bc6ef5ec0ae431168842") (:digest-test #h"74cd86bbed14d895301d8a54b2956b1c5cd1451eebab620b978d4ecef2cbdf7a14367381f5ee79281a773337740fb9f5853f4253c4b19f684341081d8f561b2ad773224151099588da90e04dddd565f67596c536d64c5b87e9480ad43601397507ad1b61ca0e349fb88f19feb48f770676fd562ee8259f50d0c9" #h"73ee8d29c30821dcdfa4441639f037fb6ba3a9ca596dc43428043785756608f6207d80b7f78e573174fb9dfd42f0b8cd") (:digest-test #h"46612e1a4d016c41700a3b5ccb38323353bd8da5b9942c9c9212df40b4bee06be362a15dad62c8b2924d789168b2d325fe35bd5100e1e29f1ac0fa7a60a94c9eee5a70cccbc75ac214b1946a5679cb523b378d5c690751b7a7a3b80d413712feae7024ce71d6295a3d5d16515c3622a052eb862ebdab81ca7fe3a0" #h"cac13a3784225be03d526f9abc1eb50a762e72c0e01172a15d578801089e5c9f26e53cc00ff755909453e2964d7df838") (:digest-test #h"1a857c1f105d068ceab0b1e12494890ec196362a48b0200a0d75d712b18fb14bec6bb5b68a33b7e0b4fdc5b77142c29c6d9151b9f884f59551f476e5256986a653d4a468f28141ed954721f2cd02054df0438738194545ed70234173ac4988b7d62812de4f2feada14f68e3b41bc9948d4139f4fb4da5939f26c0261" #h"b75d92b5cd3772846f7b68064a3567ae43e5010099f2b649f35087e7592aeec176646fc8c2629288944261cd35b5fcba") (:digest-test #h"9d36818d0c5a008be7904d1917aa3eccb5ef4f38cecb8c4e63c4b2e9b4b091a3bf25b4ed0332445f894c2a4c258b749afa17fad03cdd41713a869f899ba9a085e73fa9474a58db7a950d3a2386b60f79495d8bf73e72acaffdbf65e1989ff9cc206ba8c46a368d8512bac7c7c191d713aca949d45df297b1b6594a1a33" #h"a88da844579f3e3725d00daa8e1e287da4bfbb2d931ebe8d3b16021154be503341d6371d382ada744f86f5bbb56cdcfa") (:digest-test #h"4ae50ed626ee60dc5ea556e3ce0d3c18b9e6225b5620814e8b9621acf8f939dd370ad9c7620d85e6d67a229f37f517d1b580acae8df0b5c9d29d756f6d5ebd3b63b554e556469b5b4f8e7113bad1559fb254ca827fcd00425d18b0be7f2b48c2544c48d90982ec624f490be65e893fa93ac9467f35a0a8e1b56d9a403748" #h"f8cd943f429333c7c8d30a8576827f92c92ae18e0dbcae770601b79687bccf8c23e9e589dfeb45c3b9bcafdd545e45e7") (:digest-test #h"dbed7612448d46cbe0a384d1c93233f02ffd1c984ba765299518656d3723b766c1658d4b1e7047cdc729459e366ef9349efc40cbd990f2a9a24db7a5045e1dea12dce8f9d9f2aaed933f93031e7b8959ac5e7bf6bbbdf30b48f7eb783f8fe292371a2f245c5c94b4acae160767a20ce7c0ea7723d97691d8eedda9efd1fe2d" #h"fb531a1ed181c732311e56f4b56ed91dcacc0dd6bf1eb4a44be6f87dd7cb1ef9dfb0310f4a79eaaa3f32bf3914d8624e") (:digest-test #h"3bf52cc5ee86b9a0190f390a5c0366a560b557000dbe5115fd9ee11630a62769011575f15881198f227876e8fe685a6939bc8b89fd48a34ec5e71e131462b2886794dffa68ccc6d564733e67ffef25e627c6f4b5460796e3bce67bf58ca6e8e555bc916a8531697ac948b90dc8616f25101db90b50c3d3dbc9e21e42ff387187" #h"12b6cb35eda92ee37356ddee77781a17b3d90e563824a984faffc6fdd1693bd7626039635563cfc3b9a2b00f9c65eefd") ironclad-0.57/testing/test-vectors/sha512.testvec000066400000000000000000003543631420372057600220050ustar00rootroot00000000000000;;; standard tests (:digest-test #a"" #h"CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3E") (:digest-test #a"a" #h"1F40FC92DA241694750979EE6CF582F2D5D7D28E18335DE05ABC54D0560E0F5302860C652BF08D560252AA5E74210546F369FBBBCE8C12CFC7957B2652FE9A75") (:digest-test #a"abc" #h"DDAF35A193617ABACC417349AE20413112E6FA4E89A97EA20A9EEEE64B55D39A2192992A274FC1A836BA3C23A3FEEBBD454D4423643CE80E2A9AC94FA54CA49F") (:digest-test #a"message digest" #h"107DBF389D9E9F71A3A95F6C055B9251BC5268C2BE16D6C13492EA45B0199F3309E16455AB1E96118E8A905D5597B72038DDB372A89826046DE66687BB420E7C") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"4DBFF86CC2CA1BAE1E16468A05CB9881C97F1753BCE3619034898FAA1AABE429955A1BF8EC483D7421FE3C1646613A59ED5441FB0F321389F77F48A879C7B1F1") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"204A8FC6DDA82F0A0CED7BEB8E08A41657C16EF468B228A8279BE331A703C33596FD15C13B1B07F9AA1D3BEA57789CA031AD85C7A71DD70354EC631238CA3445") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"1E07BE23C26A86EA37EA810C8EC7809352515A970E9253C26F536CFC7A9996C45C8370583E0A78FA4A90041D71A4CEAB7423F19C71B9D5A3E01249F0BEBD5894") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"72EC1EF1124A45B047E8B7C75A932195135BB61DE24EC0D1914042246E0AEC3A2354E093D76F3048B456764346900CB130D2A4FD5DD16ABB5E30BCB850DEE843") ;;; bit-level tests from NESSIE (http://www.cryptonessie.org/) (:digest-bit-test 0 #x80 63 #h"5655ABFC8D7999F5A95B943442B6FB92C95187FBDFC245CE31C18A53E9B51A5B05B6B6C21686081AC6F8F2C308B9E9321A32B94C89F73E6FFBA35201B02FB986") (:digest-bit-test 0 #x40 63 #h"42BC8579EDB78B98EDCCD0258D701982EDA188B2C1F1F8109608CFD7235EF87F265EC4323F17433716C0B092AFCB30575CFFF4086F4EDED11EE44CE2ECB5474D") (:digest-bit-test 0 #x20 63 #h"5EC5411C25765EDB2925147F8D8186BBB565B62F67E1414D7DA69320D82747A33D9FEB2838BBF559C93BD42C5900AA921A7CAE294AAE01D2240B6809C80F9795") (:digest-bit-test 0 #x10 63 #h"00F5F5F323776140B2F03997C53DBB8B8CE8E65A06CB23C77B74170AE0C43E842A23E41397D75767D77BDB339C41ADEBC98B817728ED322B70E0DA9FE5AEC843") (:digest-bit-test 0 #x08 63 #h"E6733FCCBF0AADFE888017FE3B2436212F17E14B9E1EBC37FB37AF749F3B790B0A457979F06A7D90AED913C2B05D98E99FB56D329748B89D1E4450F339674F4F") (:digest-bit-test 0 #x04 63 #h"C5D6A596875568541FE92E61E308A38D8B2F0B7BD7FA34C3E49A32A85DFD3BA6552F5269A8EDCDBD46300018E627E09D8E62983E1B899A69B9496811C643F5D7") (:digest-bit-test 0 #x02 63 #h"A4CDA617DFDA4AEAE967B26721EF0525E839B64B9C11EF9E5750925D59E46F89F956392A2BED94FC136586AF97F4D703E5C0B4C678E4AD4C047602DE42337A1B") (:digest-bit-test 0 #x01 63 #h"FE8C073EEEAFABF2F6DF1E6A8DD833FB1356C89ACA150FF8C9FD37FE050073E249EC7D9C329762921D06AB0496C59B331E0A754E2DFE18366BC185885A26917C") (:digest-bit-test 1 #x80 62 #h"D6B10118E80D2EF70B798EE0612695E8BE83694FF03DF99D673A9C8F320FD1DB910482C48CBE2829685617E03B70A831CACBF9D4708B70F5EC44244AC52EDBF8") (:digest-bit-test 1 #x40 62 #h"9CEF1643E18DAB9560B7FBDCEC81BEF22D8EAED1219287E14A6F19B436BEB751E3F52ABBF23694CE62118245A595CF88918B7C7F6D5BB728FDB728C7AB9DFA85") (:digest-bit-test 1 #x20 62 #h"ABC0EEB7411221A9B5D6029DD0A84A3B7F736A7229F85478B23A4816E432BDDE3B14B2DF5AE47FD374AB824DFEDD9BC7B0F0547D64BA847A2727F185D82B2970") (:digest-bit-test 1 #x10 62 #h"BC3787FCD453BA8A6A2F3680633B48A1674F6BB7E06B0AC825ACBF3B5B252B43313B247C73CD09B8D6BE3F7B39FF2550AF9AA94D3E27A84C211F59A2CA87FF08") (:digest-bit-test 1 #x08 62 #h"0CD70245E99F61E326F4CAFDD77E0F7C481487C44445315972804F0E0A57EC1AD3819303B7C13984349F7DA5EE4E9230B849C5595AF7E0538237469F34F92FD2") (:digest-bit-test 1 #x04 62 #h"592934C289ECF5FBD8C0B8C9CADA466B13A07E9AB984EB4811C7C423F8B7C7C9AEB1D96933C20DB220947E43FA40D2F0754286E397A7BDB7AEE97918A6260873") (:digest-bit-test 1 #x02 62 #h"4443368DE2561E0B7F4030557E080066A39147360F7AE8967160B275929644EDA7DB275F2778FEF3AC3EC28060C29171803E0A8D39B0CF65A0CBB18FBCD3986D") (:digest-bit-test 1 #x01 62 #h"8963E44F2213058498D116E114690E241BF39250984FCB4D2FCA692C4FDA26F636ACFE0054A4CEDFA1A40F6442593CBE8E6884AC8D5D0D81A83AB8FB2BD74289") (:digest-bit-test 2 #x80 61 #h"194432B1086B73704F526F7106E6CFD807F715085BC9E6518DCE4036BEF5CE1C53494EE37AFEE8D21577DFE9FAC8535659DB43336FBD842F784C98FD856D3F45") (:digest-bit-test 2 #x40 61 #h"69332268608686EC7228FB03597020D104CAE3EEFF2FFDFF129A7A375DA660D2CB0A0C549861358583C6DD9B7E72FE306873ECA1416B106EE8F5E334B46CF105") (:digest-bit-test 2 #x20 61 #h"24E867E1B0024AA1D0C7323BB833E3C5E9109CC4CDC1AC000148AC18810A1B1F3B7DDC548D003905DC8C707524CFC5DB5177167A6060757578BE969B5A3AADC0") (:digest-bit-test 2 #x10 61 #h"F22BE2E5255BFA586765BB11F3BA6117089439F5B99290780716D783FD68A833785676A8CDFA7E8C465CE41FB861C7CACA06BCF61AD14749586D5874066DFC45") (:digest-bit-test 2 #x08 61 #h"20C9ABAD1627ABE0036E607EA823FB5298FCFB85CD5A6446FC98D7AFA5189634D7D4A9B80707A344CACC9D9A07803A139230F8A75439E2E4A7B0B73781CE1039") (:digest-bit-test 2 #x04 61 #h"635D9888A45B4534495E0185D272B485CC2EFED1EC4260A0CFF84DE8CF0CC1FF06E5A98001172938667335FE2543472793E617DA4AC1C75960FFCE4DA56BD69F") (:digest-bit-test 2 #x02 61 #h"1DEADE855339AF4F4DD676DD127B871964D6D6B9693D38029F56A6FB824DF6FD3AAA3EDABA05B729BDD62BD603E1A1E4C32C24073670C0C72CAF8AD1126D095C") (:digest-bit-test 2 #x01 61 #h"F13C5A443AD5A55ADCC4ABC00F2A508A0D49C163346D434BE5CD63F79B9E4AFCE06D8A2BFBE8A4695ADB0E6884F43E05B494A7EC7ECF1E2EAD3BEA220698D107") (:digest-bit-test 3 #x80 60 #h"1DB013A5FC42EE92FDC4B1C845A7EB01E7177EB7293F9D313929506440CC0DA7743C2D09C271823CB4746FAE46DD51E8D77F5573D8C3766458961648E0D5775C") (:digest-bit-test 3 #x40 60 #h"A55266D73830BFEA4BB8B1B95135E6CC6A66A8DC5B6E984F9D9BB4F480316985936086F7933AB30BA83E5F2634A9FFD3CB452C8A0A7B2B3715D995FA9FCE74B0") (:digest-bit-test 3 #x20 60 #h"31301EEBC89F3E2EE284F04BF425989DA7831C0E547B178961633F825F725E9C0284BB64CAA3D3623CCC6BFBB737DF56B9B7AC754B555DCD5156B4FF0429F3AF") (:digest-bit-test 3 #x10 60 #h"433608282DEE28AE46D61B1941C520B613F4D5366B91E915102A1B41EE75FC84D75AEC43C6CC68BCC7E6C093C44414A2D5E42747FCD1C70DC1AEA3548A6B3B5C") (:digest-bit-test 3 #x08 60 #h"58722A82A78F3DC59ADE9AB4DFFBBF5EB10E8F49920A3C7B06A2591717EA41915425B5877EC857A34F5B53EC9A36AAFC930A4D9D4EA3BC361749A5F3BA6FA9A8") (:digest-bit-test 3 #x04 60 #h"8C324E7E3399AD0F8669FBBAF53516B56E64892FFFD5ED6811D47436512A9F9289D17BE00D9F43C2B96903C91B435CAEF80037DB8C5AEC551D6FD61E4FA4FF0D") (:digest-bit-test 3 #x02 60 #h"B9E916471A2957524B58D5472082693C5F64E86C5C02ECCA2BA1EB02B45A00164059D2D5CBB994F656768920A2C288DCFDE029CF401B560B1D6A5753A0441C39") (:digest-bit-test 3 #x01 60 #h"CE8410C84A93A870FD5B81403A249E089556A2AF0B2C653F195F3AE7FA6C883F7AA2440131758A7273ECB9BE3FF64FB8C1EDCBF9A4A8A1BA6E167D75401A1BC5") (:digest-bit-test 4 #x80 59 #h"BC098731773B0DA621D6A35C618C690FEA84BCFE8E4F86B0B501C44C8F13C6042E724A38F9819B05E06CA9341DB83DC3086C0F0C3C862F5920A956509608485B") (:digest-bit-test 4 #x40 59 #h"46FA6EB4402E7815F8DA0A804C9421ED8BFD4D2E59ADE80CF17F468F5CC7363E6E3BFC7F0F3EC9323F09472916CD258629B3743EE3ADCF4B4F5FD8DD263D2B34") (:digest-bit-test 4 #x20 59 #h"3D043283FD431452CB224777FD0FC906E76088824DA62E0CB1F499E54B0989AE1840ED861102BA68B59D083B752CAA8152FCEEADD814813494721EC844E4EC16") (:digest-bit-test 4 #x10 59 #h"AF369E97A0DC14B668153141DE82EA1AE39F6DE2749EFCE089D306C6B2CAB84188D601210DD3843D879E8E7ED24EA0213702FA622CB0F972BB9FDC48E50DF565") (:digest-bit-test 4 #x08 59 #h"517877D377E43763FB43AACC84E2276842ABEFBCD7EC903A327C3154640A461D6EBA6AA5147BC7E66A9A36196F19E7CFE6D4F9C8E81F07A896B04656F2858D48") (:digest-bit-test 4 #x04 59 #h"D491E34BC9C7DA141AAB286CD807DA593AE6A6864A6953C05E233D564E18D73A851BD02D9969C615C9FC8E2805307A2D6450ED65845052ADB5A6FACDA7DFE67B") (:digest-bit-test 4 #x02 59 #h"4037A8CD2C57CED0F9C7FA1D91919736650AB81BE3236CE17684FABC88E81C643476A26491A9EFBFEEA1C8C78CDAAC851E0383924D5DD5FF537CB384C8670199") (:digest-bit-test 4 #x01 59 #h"6AA5657BD67860E4D151C2F6AEEF87DDA1409FF708010902631A9CABA4BBAF4FBD4822E18A06FF26C586B0FB385A770A4A2643F0010998D89B8FD8812AA907C0") (:digest-bit-test 5 #x80 58 #h"BE9D7E52060D4CE12F3BCD2B727BF91B8FD86F20417079529A93044D5FD51D86D6B427519ED726DE9E70663E35CAB07CDF4DA576B470C9C2EF8886580D5BC9E7") (:digest-bit-test 5 #x40 58 #h"F59F82AB4D7B8A20EAB4878F42E6E0F4D70B7CC74B1AEF8477747BF3184782AD95AD7F4EFE691FA1B2B80C3462DAB427E79827409182DF8BCE82124F2EFFB721") (:digest-bit-test 5 #x20 58 #h"54AC5E35F00B7FEF9470CD01839DDFD2E9418C0C7C39A85FA3768D4DA5525116D62C18BD37428966DE14C7278F80EDF45395FD5723E9ABDFBCCC9A72F96471E5") (:digest-bit-test 5 #x10 58 #h"B91B4550D9A0E98AD3532BC3FACFC8716C59B0114E298143D9FC3AA0EF4DCB0FD48D29C0B134A2281384250C3D94E724412FDBB8EB0B6D181436DA064CB8AE82") (:digest-bit-test 5 #x08 58 #h"D252A80DA8A021D8E4454D76D20A60CBF5D8CDC3D113CC81D2252C4482451F2911B3F1EE328C3FD46D9C19E637539861C60E3DF68AC43F01DF6F3F719B038E03") (:digest-bit-test 5 #x04 58 #h"6A139183DCAF8E19560592E816A534256E68CFD0AA7B23EC5CA25DE41ECA95575C5083A81213172E06A0BBB267D3236EFFDFA209D6577B78EFDA1D32281C2458") (:digest-bit-test 5 #x02 58 #h"C6BB247DF5AB4BF9F75C84584C6232218C806776D79851890D1CE3DD8CF6F8BFD30F41649F55E3E235D631D220A93AF78604CB44E86B1C8C03662716A1B0BE43") (:digest-bit-test 5 #x01 58 #h"4546E1966C6E8BABE90BAAC91893BAC1F7D52115129846470F62EC72AB0FB567FD6BC12BF33A6BDA3D32601B782D7FDF5909FE0B3CA9B7520386C28428DEEC58") (:digest-bit-test 6 #x80 57 #h"4CEE07B1CF7D1BC622CA0F6E9F8C2270ADEF6B7533D1B41562B0869ED44A31FC9F5850729F252D34679EDA80D907578393DF463CF599673AA50647EE0BF9590A") (:digest-bit-test 6 #x40 57 #h"5F45812F394BA485FF54A3ABE6D0DE2833026A53494540BF3B96EF447E8304942C252887A6E99CDC1946E842A02EB3B65DC472F047039582E5E277E428378E32") (:digest-bit-test 6 #x20 57 #h"EAC178B95C05B87F17F74C2F962B2F2A21EAFB2D74C42B5FDFEB629CAAC2C48303729045083D294F49BD34F6163076C19C2BAC5760532DE769580651F7DAF313") (:digest-bit-test 6 #x10 57 #h"E96936FC0C80DFC0A450970EE7677054D4B3B96E02845C76F61DE391CF4656A94CF82372F64D399C06AC205A7E9DFFC8D8226F5F1D50D08B090A74351320EF05") (:digest-bit-test 6 #x08 57 #h"A9F06016E170C5A698E60BC9F5C18D7D250F9E21AD482FCBC5ADC980F8FED369E811A96A3CD14749C55A6C470B20479B3714214FAEFD7C9843533B8577BE1939") (:digest-bit-test 6 #x04 57 #h"8704CDF09A0AFA5C2435982D9DDDA32CA8806F93D2B42785F108FC531FA1B9380BD5EF1371957FA9E7A4BACC43A7C30A635D33826A65D4E3F357F513F47EFE91") (:digest-bit-test 6 #x02 57 #h"29FAFC3B92EE32C91A8D44DBB088E34AD0D80FE80C29ECF73EC7405C253E76FECEC89B00953492718B3B9E50697A5049F878918F601E65710AD3781E6C6503E6") (:digest-bit-test 6 #x01 57 #h"583E692DB24C8249E33E8C39AAD66855BDDB461C444F174D5E05228C1DA300B6585CEAACDCAD148F884F3805D39471BB331DCDFE8F1AADDECCDA1C99366F5291") (:digest-bit-test 7 #x80 56 #h"4C30BDC3CC0B05AABABCF2767BA55FD361D7CF57C31D8293F3EA8C913AA8E5489AE69AF017FCF2079ECFA3E04A76454F6D5409488DC546B499D57AF1B480082A") (:digest-bit-test 7 #x40 56 #h"B70B73528934979D67121DE12B037ABC0E9A5220EE070BF0D96A93F7D6A927292B27137E289786F486A7B3598F5237115006AF28F89B95EFC1B4CBA9C088CEE6") (:digest-bit-test 7 #x20 56 #h"7E72545E0028BAF6935E84E63027C02B2A88F51A3B44BDBE49E6A6BD9545D090362836781A0BFB10491EF5D1000E93F7D59ECF939C5E8ED6223BFE78F95E0E03") (:digest-bit-test 7 #x10 56 #h"178B2D6722D2A84E67C1E300056D280351126B056E495EE167C466F7DD19F087948D5BD260F77C1630B33AF5F9F17E4317C2C25C20A2A31B60843CA54B93E82A") (:digest-bit-test 7 #x08 56 #h"1A292525015EC06194E8FBF533E2AA9FC79E186C2A59423A9AE69A567001D3CDF21FFCC85F1DFFDE5CAE11F0F52560D9F41FB68E614F33AB0DE71F3D3F9B4435") (:digest-bit-test 7 #x04 56 #h"6A547ED7C565B308309721F6F717EECD2DF3A919F9FDBB509B1EB2A9A138473FBB1AB9948270E8665CE3337C8279A44DC06A1E5E43C7E1852D42F1E24092E9B4") (:digest-bit-test 7 #x02 56 #h"DF9F52F0716BC3E1B538AC289B216A1039718402C143A070F1E3C024CDCCF9DCD95E23820EFFB51F44B67A02354FC1823BFB5C03D57125DC6934D160893C854F") (:digest-bit-test 7 #x01 56 #h"317E8E4A988383231CE409E458C146887D387025D4F0978DF9F90188DCF8F6932F2261341251FEAB5FB785EA749B919F45485E65B683C023DB4071CBA71AB966") (:digest-bit-test 8 #x80 55 #h"F792B79EA61E9C68D3F9286EA564C2902EB8D502BD031ABD080E815249A56684F14FB27DFDA4C95E5D54FD609C2696CB47AC78323EACEF27961A410A0ED0681D") (:digest-bit-test 8 #x40 55 #h"6A71C349BEAA6CABFC78FE081D106D4B5E71374DE108421F7A6908CE3612DAFFDCB01B36A8FF0FDDF72794687CABFA53A0EEF68C6C0B9696B3D5FDA7B238940E") (:digest-bit-test 8 #x20 55 #h"5E95CD17205856FB1BBA0AC2B218E6D7D2E24E68263D6D2DF804574EEA0A6A343D421B2BC01B7A0A3EFD97EBB2F24FD1AFC6FC35E0289581E6755CAD6BE4267C") (:digest-bit-test 8 #x10 55 #h"6118BB66961F2EA6D06E4DD15FC716D65E5310D40F1F1F154EC75C566E6DABE03D6F7215468AD20071166DF291C48723E0DF49D12743525162E6849D36C6FD97") (:digest-bit-test 8 #x08 55 #h"A3DF1AA8271255AD932E6E481F0BD6F15651EFDEA063EEB1322DE2565D5D71E4F8035D8D0A41B56DCB9C5E20D7D04EED3D6AB35CC546AAB3A15EA62AABD40C92") (:digest-bit-test 8 #x04 55 #h"0D758704675058AD73E2EBA2846E49B1654C4745A95A84BE227972E49C96B494FB894C9E7ED94BFD28DC53A710B0ADE9F38BE1C307FF459EF295C736B25B6104") (:digest-bit-test 8 #x02 55 #h"6F1BD76ACC8D7B653646DBFD8CFAE6611AF1B5ABF53EB55A9592D98499E2CC64B73FB2CC978001991697568C42AC04CCA72929EE6013CE29F5A4F8558180FCF3") (:digest-bit-test 8 #x01 55 #h"10F9B83FEA4BAEA2E10F5A0DEA4039A5AEA83101C8B6C41D8FDA31475692E74A8BD2D98F027E68A3A7F53EFFB7D81424B06689DCC594541D0AE90B175234110A") (:digest-bit-test 9 #x80 54 #h"A80F20F7120E27F4F37CF3C4F093D43E98095547CF4F2506398A72C64855149C87A4E45A893C12107BBFAF0EB9EE9CC60FEB0D50E03CBCE2DC22EBB33C54F93F") (:digest-bit-test 9 #x40 54 #h"079C824A9EFCE435F3F46CF78E24800ED06A0E203E6C4952042F4E0B8D737400A1CE940AA45D15161531132E9DBAFB7C5489C0DD88A8BA25892559FB6333248C") (:digest-bit-test 9 #x20 54 #h"836F9D9AE1AFE1EAB3C2CF6A21C710CEE17A7BF4D2DA5CE85EE238CC88158B1800B9B328B2004FF92F8A4354EA6329EF9B6DBE63914F067D9B878535B5B338F9") (:digest-bit-test 9 #x10 54 #h"0E9BC0DE2570AA4E99FDF4B45738FC266A9CBEB6B63C21CE357A5B71F013560454319F05645DB89D194FA2CC9BE4A227FB3319D76498C26E9D2A054875026CC0") (:digest-bit-test 9 #x08 54 #h"137EB7957C2536FBE2E7B527EED8AFE6B880B98F1EB5BD6A1E4F22FC0C9E2D4C717C387415B8324B522E8CB1B6523EF3E485EE319CC76024D5330E33D479C70F") (:digest-bit-test 9 #x04 54 #h"A8017E56C70DC97118FCDCC4BB72B1ECFB856E7B8FDB9EAE4BA959EED1A3F96B2415CF2913C471430318BEB4F53D74C1859BB433AF1C44E1328E7D62F867C905") (:digest-bit-test 9 #x02 54 #h"96A7C5D1B56B4FAEF12A9D1F86ABE023EFC08376984AD5D37FEC2139E18080DA72394D3BDFAC9C03507DD2D236E6526A5A2EAF51868583B3562C6B0BB72C0C0D") (:digest-bit-test 9 #x01 54 #h"B4F7072B8D5417FEE6C1A536C7165F99768DC4EBE66945D33B41DB8C08DEB9C19665F8D367546C00599808F64D4E377BE2408C5E49B4950E4F155FA017F79FBC") (:digest-bit-test 10 #x80 53 #h"13F2075AD9DDD24B9E8284DFFA009705D957AE70DFB19885A875956F851C36AD8105AA35076DBF007BE385FE21253B68B2DC82C1B7783892CAB7986586283EA5") (:digest-bit-test 10 #x40 53 #h"84B9ABE00BFBE335508C463A671D720E18156D0FB63A9958556AE97546575CC6CA693CBD29071B658ED08E192CBF210FB4EDA6D4DECBC79C173A38ECEFA46E7A") (:digest-bit-test 10 #x20 53 #h"754C8292018BDF7F870BECC30E3D16594AA39A350A83110C549FEDBC0D0C8644AFDE23C29975FBE759BE64DFB0A2FE9D0F77E70E9EC099DE1E9ADF5FB8A16DCF") (:digest-bit-test 10 #x10 53 #h"62B96F76FE675C9A2DC6F64CB6E345C5E7F05BB873EAF2B5405CC798324E906A56969DA6F349E952E928615E7007015AA5DA3F916646AEECF30096BB3F36DCEB") (:digest-bit-test 10 #x08 53 #h"DD4A53ECA26C4450CD44E3040F3674F735710AFDFD43A06BF3A1CAD05FA5EC93CCBAE5F6FF2B9D2D13B6D7AA20232C096C1D5736C5BAB04E368FCCEABF3C37D9") (:digest-bit-test 10 #x04 53 #h"B5B553B0C346C777B4482E1BD1573351AEC8A4DC7026E6BC89A752CE82A2DA1D0C355F13D056147E1D1F3128AB36D79898A4C56822730259F6D7C378FE6239FE") (:digest-bit-test 10 #x02 53 #h"F96060F3BEA7DB387931A4062C451F877E3482DD5B8944392170F519D2D0187D40D89BCB4DCE3B5474E410BB89D57DB0F97214C886D6644E47125BDFFA403C39") (:digest-bit-test 10 #x01 53 #h"410EA01380D0FBEAD1E9BAA17EC04AB382708FFCE3CD2FE173DD421A25C075F0B8676E05A93AB327C0504131CF733F8B759501FB30793C1093079D8FEF44A0A7") (:digest-bit-test 11 #x80 52 #h"C70C3524311A799EB7B8B420A8EB53C3BC434B7A89A237F6E78D25E058C48B52BB148A484677D98DDCD33E577993FC757D646D83CDCAF7BE779E37575784A990") (:digest-bit-test 11 #x40 52 #h"37373C2AB013AD9CA686E11C603C90ED1DDFE004810D94BEFCF7E5DF800C7135B345668FBF0753211B1903BD4EE5EC9BFE8298F62034AC470C4B46AAC82C17A9") (:digest-bit-test 11 #x20 52 #h"1596CA087099718556E858681B2F0463A211ECE912C0B04E1234AD57479FBEBABC1281F5CBC1DB24C84E3A1A2B71B2FE924E7C520AF4ABB94EFF2D4848765E90") (:digest-bit-test 11 #x10 52 #h"962DFB2E0223EFBB224CABC43AEF0CD9971CE28FE4202127E0958620C3CB0E829B8439F764D581A46ADA9D5C61DCE11122913AAF9BCF82CE9E4F95259D96BEF5") (:digest-bit-test 11 #x08 52 #h"1E730B2913A1C3AC1934010FEB40A9A20C541A96EF48732CEF04AC1F934E0105AE6C7364C2A551CD1004D2B74C369F44E93CE893712E1F7D2D390CA87D13D7DE") (:digest-bit-test 11 #x04 52 #h"93B0AE3E59EB59038AE8304D1CF32118B004BB4390E48BB3249C5EAAB63BF9B605FFC57EBA052BEE28DF02372AEB950C0DEC0BF696565E3A78BCCDBE998431C4") (:digest-bit-test 11 #x02 52 #h"334BB60DC640E1081AAAFB7586776DB5617B1A9D4EF43752447FC649E374A4967239FD0C80BC9AADC952073762F3CAE96919A052E5303C7D05080B180D63EF18") (:digest-bit-test 11 #x01 52 #h"54D0E5CF1B472DADD16D6F0B9244789C6E3EB8313EA954381CC91DA0E353E46D488FD9C14FFE82C6F331906DABDF14BB26C9D7DA438D46ACF016967E308A50C5") (:digest-bit-test 12 #x80 51 #h"E2E96713B1F99AA5AE71A43CBB8F309917B7E7D297A0261A22D962FDD2C70652BCA72B25566BF19936F1F931A21712BA2264599DA3F583715F389ED43F5582B4") (:digest-bit-test 12 #x40 51 #h"F7621D95261388DAAA9E6770185FAEE5CF37404867139F8E9FF34DA87416BD92CE1BB6BDC3A8D8B9E86878ADBA0D618B4B6DA12A0DAA201736DCD65ED365626D") (:digest-bit-test 12 #x20 51 #h"03DAECB7B974DC832705B804B99C297F6B5ADFEA275F883A7105A0F2B843ED48A3CBC84C46CBD91B8F5E94C8E6BCCBFE5E973AB0DC09360E1CB58615499F1974") (:digest-bit-test 12 #x10 51 #h"DC277A4EB33219E36BCB71AEA23D661B2F528A2B5AB764F1D544E78F91964768BE2919C851F634D2559B2D1FB262777279DD25DC771B625340A3C97B441CCA38") (:digest-bit-test 12 #x08 51 #h"B8545F65329F09CBF558825835D66410AED2D419408128E7E1D3A0928E66896A789A8BACA18948ED53AD10329B3F840FBC029A2D67FA0401808571AC1D57A8A0") (:digest-bit-test 12 #x04 51 #h"DA205D221492E719972FE8EEF6C7B4C2112B2E5E1E9436639A47AAEF5F501B98F99264C04FB6B144D093E877AEFA7CD651777AD630562F00C3C3CDED5E3FE453") (:digest-bit-test 12 #x02 51 #h"F56A942AF828B650ABE35EE8CB0A4EFE348414C53C2CD4A825D901B15D59DD6A23F94C1E905944F0B577F28CC3FB5A47A37DBB82933A0672C4768D4B002FD452") (:digest-bit-test 12 #x01 51 #h"C02984FFB17C5DC20A18C25C0DDA9DDFD5AB6212DAA7266B5FD5C83864435C7C4E647A10E78F442F428814EA8E37B976FC1E6156FB084ACA92B2B0C4B586A835") (:digest-bit-test 13 #x80 50 #h"863412258D0B27CB635B7681236114FB6419A3A855001474F3365AA19FDDDC187530E29ADD8E5E336832E081EA5C3501B8FF23F4FA95DA40237E44074C942827") (:digest-bit-test 13 #x40 50 #h"8565D9494D0359FD1397FFB7A059B312F13078F8D65D2A7B0F634331A7A5A02B5696D6F08600769519E90868A0E6CAD35CE1A2D62F1FE43A06A923DDBE69FE79") (:digest-bit-test 13 #x20 50 #h"906AACF549DC26DE9389777D95AE8142370AC05D4E396D90B2C1A7B3AC46EEF722598AB82220C9FEB9F23B656424F2AB371F00F37EAF55321FF1DCFEF02CA195") (:digest-bit-test 13 #x10 50 #h"59588B098D7AFB9391A3938E075CC3E9E2480D4A9DA74C19D6BB335309B2C240A2D7EA1D44903288E640433C0E68DE9B805134140E7FE8130027E49D94D2245E") (:digest-bit-test 13 #x08 50 #h"68772602DDBEDAF865945081BC520EF82701FC3E5D3BEAEAABAECAFAF858626EDD65FAD14EC87379D0E71F3AB96A5E7235CF0E3E0C3217D2F19A19974F3A7E4F") (:digest-bit-test 13 #x04 50 #h"6554FFEA31DC3DFA4F03F386D222AE79A82D018D65DF5DB05EDB61097EA1CB60B510EDCF3FBCE210E7D710546720281E3B1BCDF7DAAEFB780A18C94D896954CE") (:digest-bit-test 13 #x02 50 #h"DD490D8A2DC613770345E214B3B393F36982026DE99E969283590BD3733F77E17F1B9CAB65C53192E84D8CF8BE6BF4AD882D3C75D197B6CE1CDB30C36A76C91E") (:digest-bit-test 13 #x01 50 #h"341AF3110642F4FDAEDB78F3271DEB0805BD168004FE4A40D636A348B2B6929F06C4D6954B3C18DE9483E24B0C25D321B7FFFE2B4AC64FF5FB6AB60A19A3F84B") (:digest-bit-test 14 #x80 49 #h"AF57ED6DC403831BA733440C6F0FDA0966FD8574B23543163FFD2A5E9C80965A50DBB88B8D205FCAFF4C3CEA946A28B7224517A0A9E19A3C325AA416E9723500") (:digest-bit-test 14 #x40 49 #h"91AA140B77AA4F4E7F982E8797B915073C4352D51B78E0DD61CFB093E03A6A8AAFBDEF4ED90DC1FDDC612E153E55510690A9AD0F16B56DFE7C005083F1E02AE1") (:digest-bit-test 14 #x20 49 #h"6352DE86D04E0F0D029AF15A1704211AD6C555C479016A97ECD2F82867EEF3F4171B53094A5ADAC0A10FB2BC2B349025032EE8C54E6AF6A0D9416FE3F527D908") (:digest-bit-test 14 #x10 49 #h"4EF7AABB010DD69F5DF3C30B517F5FD1F493847C6A24BD07E8DD87F6777305AAA3EF20964CC5B8381A04C5704C62C3EFA827A5F5C51A88D92918779DD7C1AFAB") (:digest-bit-test 14 #x08 49 #h"F5B916BD19D3015EA7215730183915516F2B80BD2CDEE7178033E9228FF55A9CDA9554EEC39D98221A6651909FB28DB63105CF8B1970820F8E4CCB8DE3FE7344") (:digest-bit-test 14 #x04 49 #h"D7BD194724B350AA3D6B81B8137226A46FCD4616A1697C075D2CB06E9227C58BF892A77C0FE5DACAB5BC409023ECC84B0256DD1C9E66E8AB83ADC2E02F0367D9") (:digest-bit-test 14 #x02 49 #h"5E7699798204C49D9E17CC4AE6DF5A5276AAAE80D85192895112FAB1F881BBB72D21476CA879AA782CBCD1176F82C88B3F560621B5A634CC6CF99D0DA8519A30") (:digest-bit-test 14 #x01 49 #h"745EB4EC72890DD2BE3647E27D193893EA70F77F35EB16CD8AC04DB9D11465C2A1E017E3C2D2995BD6035E50F7718A68AA933CB48D9E94EC4FF55F7EC3923947") (:digest-bit-test 15 #x80 48 #h"B03C3EF9CE7EE74D408F743A760F1A245F69C38B91D5CE505030347F5500BFA323A3410270AAE397AC412272D444ED37A7801B042622E4E5DF426EF080CBBAB1") (:digest-bit-test 15 #x40 48 #h"86376FB303CA23D58DB3CB4CF2C56DA01F71E31D2852B5BCD000F47708EB6617E176E6B6F03B9E7412B3FB4047C43FC78ED67E3A5C8896108B28E452274D9533") (:digest-bit-test 15 #x20 48 #h"C836ABA578A8F92080E0AC9276935EB5D95DE1EC7BC11CEE38EFB1B96E08CBD4F88163083D4E2F3E3DCF740A1C9BA87567E8C47BC2DB565898D381606D1B11EB") (:digest-bit-test 15 #x10 48 #h"B96F19DF4F89D25E022E722B1E4DD82F562A7E27EF7885AA77C2DC66737743B7E7BA30F651F801B23C7CA13729637D3AEBB797A13A1CB3C38F0801D1A2C02BE9") (:digest-bit-test 15 #x08 48 #h"849F2F8CCE9EA8F5DB7F7F7B433ED87203EE7BCFE5EA9FA3BF469624F0FCE5CB2F7EB8436114F4CB923C8C74CC53658C45A6AD74C06D55E04D5CF29FC8BA6C36") (:digest-bit-test 15 #x04 48 #h"A9914B46FC89FB8126A584BEEAEE96A93B1AF44CF920DE0BB3F4579BC968D10E32E4F8A5CAB3238F6F816F9E86867D56DE2B28D49A4D7D0B8B3A76FCC5A16052") (:digest-bit-test 15 #x02 48 #h"87776D0B3B2C0AF07E5B031C1F54465EEC75081EE184840E95385F36E9158A204B0E579F0B82CD5CDF4589DB760C3CE75293A56CFA47BD8E335F39FABE2DD84E") (:digest-bit-test 15 #x01 48 #h"9279549873C35821887EFEE9B5E0678A2E9E65A2FDDDA959673E56CD1F364F19A716B587C96EA3D01B64702255BE0ED59133A9EC3AB0D01AEA0751804676DEC9") (:digest-bit-test 16 #x80 47 #h"BF9D283496CE68D57BE0BA7F9621BE6F811938F4455226F0D8E31A2CA5064DA184F953C81E9AA997D551C6051BA1201BBE0508570F900556B4E32CCD2CBFA3F4") (:digest-bit-test 16 #x40 47 #h"FA23021EBBF748CA7743971D7462B2592D3DD5FEBAF84AAB55387DA6C1B11CDC8AF8B3DB6278BD1789CC4D05D4A880ABAF9A3612705624B33F766BD241736254") (:digest-bit-test 16 #x20 47 #h"29289ACBD507DA466BE75A7F3A8F7BB202A75F585CF80799CA815FBD9D3FE10212B0F185AD5194B1E167030BD71D2E3499DBD959C51BFD85010644BE7F717337") (:digest-bit-test 16 #x10 47 #h"1E53BE33EFA614DCAD5A81758A5BE9D08AC56A291670418E481383512187E45EBF47EF44F48B3BDB4F254CF9A26AB829897D39C5EEABBAAC9612DE2A45C01477") (:digest-bit-test 16 #x08 47 #h"1369D9004942C009ED238C617DA999CBBED78F889264FA1A8B2FDC33AE8B9D79B824C82BA72758E3ECDCD304F68B3C54A6FAF39B0CC892048FA7D2DCF2E190AB") (:digest-bit-test 16 #x04 47 #h"D3BD4B8A3F606E7D30DFABF4FEE280EB3283A0E181D3044E2ACB7E743F5F06B48572B72411FA2302C60386442272A22E56CB5A77A5833B441D3019ECBC67E4D1") (:digest-bit-test 16 #x02 47 #h"FA1D2C8BC2B9EDCA939B067994439029386316D8C6E7E6DEAED213CCF9C3A63577146C72EC1118506084A88C41EA1EE06B9EF02262E65E5C1ACA2834D434C9C0") (:digest-bit-test 16 #x01 47 #h"9477454A6AAE17F710D47636B328EA43219E8118729535F0B1D97E7E956F13AE54340D95D64DA120F555D92F690967E918F70A12BD34C1C1A3406D3CEB3CE926") (:digest-bit-test 17 #x80 46 #h"E4BF4EF2A69D366BC71E4EE013F6D30DBB5AC3B5139BC62AEF7CBEA74ED074556FF0A87294B797CB1956D9E90BA49DA627549FF9DA2763E0E0EDDED3DE575499") (:digest-bit-test 17 #x40 46 #h"21ED29152608DF4394E558B17215E8428E97D1D6EFDFCB1C650EBD3DB31F0C8E747DF738A2DFE996B25C512F48EF759CC81D83A9192611CC505C4000E89AF285") (:digest-bit-test 17 #x20 46 #h"30C8F1666BAF5B56AEFB259481B9C366A25734018E4764F0EE902D1015AE4EC7EBEECC1D1D15FDACBD8BFF3CDFA36D082A6E8481A53D3BC3FB011906E127BFA0") (:digest-bit-test 17 #x10 46 #h"25296D54C91266655B46A980E0FFE1DD2EC4AF32AA9BCD0C5206EAFE0496D87868323B0812587C3DB12E248B25D828BE519F95031C09D14B2189DB6DA18109C2") (:digest-bit-test 17 #x08 46 #h"DBD71BC5D9FB9BFE9C7DDB0A7B416ABA3FAD1B2896F57DDF97DE7395E465CE1326428A3A508E0C542678CF97A20A329996BF7320062CB1B3E6C7D3D97548D7FE") (:digest-bit-test 17 #x04 46 #h"F81B5DF074C34F3F379C8DAD0D4417D0397B17B15B71845514E5691A3F71134ACCC7A369CAF984A57D42237FD60A8BD5F95F1D1EBE6DAB4166912246D760ED22") (:digest-bit-test 17 #x02 46 #h"76CC936B0FD7F0103D6877811F66BC86C86ACB5B017CDBAA56ADC0DBF80ED2313072EE2BD8611664267E1275B450625CEF58D1D11ACEFE95FA0F8D42A0C0C7A2") (:digest-bit-test 17 #x01 46 #h"D8694515228A6AB322CA9C6301EF27A715C2297ECFFBB5F96E3A21759E93F2499E3BB2BCF01071A370DDF314F89404F0B9060FEF581605CE4CDD888C112316C8") (:digest-bit-test 18 #x80 45 #h"8626044B39BA1B0E500BA00DAE208DDAF9D8FE39C8C8AD7699542C6DEC20AC6F1CD5D93F43C0393A1518B837E85BCF014C4CD6B518949F3FBE6A088F8D0B7028") (:digest-bit-test 18 #x40 45 #h"61E5B0AE280CDA970119902A76FD53AC9549C4374EEBD19A20B60F9AA31B6313C542115E9C48A7B851DA8AFD4D620A34F5623E05CBCCDD8C6F44F0B56144437B") (:digest-bit-test 18 #x20 45 #h"F89F5ECB6B754D94C98F99A0F8251667BB9509DCAD9766E951D143DCC9F7428DFA2DE59736EAD010988BAB92ECAE04AEAE00464FBC26B833B0EE58416DF3FD90") (:digest-bit-test 18 #x10 45 #h"DD840D389C0ECA2727AD8F4D7F25ED53803BF2D28B68BE7BD856F0F3F39F8BABE75122C08571332493BABD756804CEE5434F34FB6B65F1D20A61CDD854551185") (:digest-bit-test 18 #x08 45 #h"EAC4A4A3A9B65A1D405FB084FBB3ED8E85D9257E1B6A4421818EC821174B9EBAA65E1E7F5FE21E0DB067A0F1A6CE4EC053565D3FB05B8433BA4252C600B50E6C") (:digest-bit-test 18 #x04 45 #h"73E3108981D23EB265200FF4B4143CDED0F154DD87C167AF64871001034DC4AF2FFEDEE89EA3DCCB0A65A0D43C62258736B3DA1CCC7A1B38F05CB3F61DA689FA") (:digest-bit-test 18 #x02 45 #h"6057DC6FD91691E8179ED34A9418368DBE63922D01DE336DFBBC38FC97969EC50A4F9747CB052CD1C5F67E42906E12945FC326A3E25F3B9FB77F11EB99A4EB44") (:digest-bit-test 18 #x01 45 #h"81610EDE3101E07BC04D19A1C49EF9D55B5AE5F015BE2F8B0F56B74652EB0E2D2DA0630849A4D1AF75A36540D5F83F40C4EABE47883AA5604C4A30A4A5203C3E") (:digest-bit-test 19 #x80 44 #h"2F4C76C7058641DAA9F0AE886B37B5442E0E85CFC420C01B6B6B219B7CA6E152660EA641A734725DE618D68AF634F0309144D52CC30B05BD165A3FBE041C5285") (:digest-bit-test 19 #x40 44 #h"CC835A85D20FCFE069BDD4ADCF58D1222A2AD82E940CED91A159B445E294BFF787339DC2C4B8153BD275ABFA921E89A05DDC794D31F5DE81DB58BBE047E8EF49") (:digest-bit-test 19 #x20 44 #h"D0B19DE7DA4A139744F21780C59D00209073C662DA7182AEAE0EE5BB3087281CD222E7FBC6C4E1C27C95DFE3F53A6EC34EFBD23BEA49D9F6F96B516A520E5C91") (:digest-bit-test 19 #x10 44 #h"520F4C20064A82E585A7642E29A397AA65680310ED7B46A5CED1D28FC1D12093D24CF0E052A0F7F827A093821F0CFA8E425FA6E856CC723BC9D33E76E99826F9") (:digest-bit-test 19 #x08 44 #h"9BD10A14A255272A05C51011D5612F8DEBD0849568F625575F864C82B501AC39014063BE6BA46D49F8F82B35A6F91D32E1913A7CB0D4876869E5BE568EFACBA3") (:digest-bit-test 19 #x04 44 #h"8DD7DC36620A756A16121E20E3DB1A6ED2819BBAEE6C26D57ECDE2D06B07D459E078B181755FC82996E5E6486F0D7A03BD2AAC9E19C003CFC0C723905D45CCF8") (:digest-bit-test 19 #x02 44 #h"08AFA05C9C3D69E8A5EA467AEAE281D5ED841389CF6047CB031AC99EDF315C30AA15D5A19DC1C830C82EDFD931D94688ACD420B0031216721987FC102AF8AF4C") (:digest-bit-test 19 #x01 44 #h"2BAFCDE165557C3D4A90AF9EDFA7F1B1A200BA9B29F8CE107548548F4C0378AEE9696D96C613B63815FF7E473AB9CAC5E997E49ED92BB7DC4DC4AA34EB90E693") (:digest-bit-test 20 #x80 43 #h"C02A79C4AAF5F1D3D788E341804C10E2CA00591BEA76DF8C8EF0EC24002E4E263AECC063B027B09023F9F0239E0FC381F3888C8CE79A174A965C3164A9352A25") (:digest-bit-test 20 #x40 43 #h"941F813A91744E63FCF63E12D8C7D23933E39BBEF6362BFEE1ED22B59DB8D6D0B299D5C0D0BD6F0B2C4D85FC5C408D530D80A436543FC7523CCB8A5A21450D2D") (:digest-bit-test 20 #x20 43 #h"539508801260ECB9B69208A4D7D4FF94F084D4EDB22F8A093544876E3446921B051BF90DC8AC14C3063E8BC83EC156AB4BA981AF48C9D1AAD93CD1C168F4F76C") (:digest-bit-test 20 #x10 43 #h"B0D7D3F695F635F0AA703C6CAE9CDEF8DB1978DD94308261640570B7668959E881E485381BBCDBD11FDCAC43B1361B6F9E034C49AA4508F36750A9A8AB89D60B") (:digest-bit-test 20 #x08 43 #h"04AE947B794826670295C2934673CF106DCAC1F1A7FF1D072189CA89D8674B39B581473DEFEDA6482C67D4DCB43E152A4A58C8BD706AC23C9483BE52A4CA7886") (:digest-bit-test 20 #x04 43 #h"CCB6BD383EFE67AB7AFA1A56BE6409E2B97E64202E098C86B52CC6A549E71BFC08FB6702E0BCB2D477D8E3A25888B26597CD1830C97F3DB3EE421E8DA9A078C8") (:digest-bit-test 20 #x02 43 #h"ED3AAABD8312218E061D254A9C5735FD2FC9AB94A73116AB5D17E3016A029481591F52564B375E2521F024CA78F645E21CBAD2AC2D26415DBC3BCB78F57918E3") (:digest-bit-test 20 #x01 43 #h"DF5C4986627C34136316AA1BC29E5313F6C6C6DAD34A6285059E5A78E8781EE45D02BD671F9C2AD67E392BF1DB3CB2576E34BB14535E7AAE11E08B829AB664D3") (:digest-bit-test 21 #x80 42 #h"DB84D3900FF2022D8EA2375B0353C7B4C703421F0DF300FFB8A341256148F7BB47EA125641ECD7E8A4FDCC36E5234333260AC00E9D0DAE203708C97C55B557F0") (:digest-bit-test 21 #x40 42 #h"E344499C150BDA67358B7B4C2BAB307DED1E983A1F0266D21D36F11FCFBFC844E6971D22086C1154CB14567F087B158EE84E095A72D0870462A9D2EB86F59672") (:digest-bit-test 21 #x20 42 #h"E3ACE0D37FEB6C91212B2E9BB657E93EE49CA8AF8389E4506F8419E77AD250D65FB30599D4F8CB6AFFA4BDF86051F283218E3516AC9F203B78486646834A86EF") (:digest-bit-test 21 #x10 42 #h"C9615A28F980C8F5A47F2FF5A3822486D5410278941FED3F5D32F148173D1427DE050CCBEA98A2F4953C94B205FC5E1A4FECBA2BF0FC9E7CB4060C36FC433DB6") (:digest-bit-test 21 #x08 42 #h"EA634E6810D84B85C1310C10E51BEB849B347761A8CE694FD3459177D97DF21D9007F83B640DD4359A347CD531C3E1FB215B5FFA147A81A8770FECBBABA417C7") (:digest-bit-test 21 #x04 42 #h"4AB000F08F3207FD45D324FCD9B08AE6A2CD468B5B7C16A1300A33674635A545084AE309AABE11CE9DC7A8101E9BFFF2D58B7491204C4CE660F20CF8CD399FEF") (:digest-bit-test 21 #x02 42 #h"7CB620C04B06D2D4822273E39997A69F920EFB023D0AE1E8EF7F58341E4E2F3E61DF103E9F7DC7352BF83D660FC289A19BA106A41F403A7F8E315515410671FC") (:digest-bit-test 21 #x01 42 #h"28D14C2C318179E3CFE7443AF4B68095DA59257B92E6F1D583D2547FAEE8AB67FEE97498C7C86DD878C0E1B6CFF0A29AF0877537485576004A011989C94DA5F4") (:digest-bit-test 22 #x80 41 #h"50640B82534C91E26837A6FD897554A2A57D8FA0704E7B30A1500814DC0BED065F5BCB2A1889F9E51E1C2057CB6C47E75D3F9A05CEAC49B1AC4DE5F1D378E931") (:digest-bit-test 22 #x40 41 #h"1621B5851F3BBDAB79826C396E90046D7A186BA2BCEF025E741A8D9B88A235E56047BCE2362C8DB708250E13AD32C05A40BE5AA67F623C66A4D5AE057A741604") (:digest-bit-test 22 #x20 41 #h"F9F29A2243F87621820A91DD4012FC7CB4A69EED87B8CD51694721DC77671805A794E4A5F0B7150ED8C40DB726BE6D21A06011847AE747C020EAE982D248EAA9") (:digest-bit-test 22 #x10 41 #h"946ADA93FAADB9EE82AB31A84ACA89AA2291C50F8136F964C393E0CCBF61426FA2A15C371CB8C7FDAD8A74794EACCE58927862D4014BF0801A691DA4BE67C3E0") (:digest-bit-test 22 #x08 41 #h"E672C1D573D9C0CE68EC43D8978B31C6749C74B11F8AEA20416C25EE6704028F4B064846F646AE96D2BE19A5E22FC1DF0FB370555D75DE8659C9D1E5B9E31593") (:digest-bit-test 22 #x04 41 #h"5827A6609BC59E41537F03CC553977217A511F5F290AC4868CC44F13B931E42035A601E9518A411440F3BB2636528F0176F5451106DF9D70D6B647AEB2288515") (:digest-bit-test 22 #x02 41 #h"4229814073DCC716404769BB0B6513907957FB20B9D7065D38E5B0A2BC9D6C4F91A5E28362EE5C715A88FA64D2AF6F4D9444405D8F43740A269A5041B5915E46") (:digest-bit-test 22 #x01 41 #h"EDE334FE9CD0A10EF50213AC4AD476A743A794D53679638B0A0F82BD685D5536D092B4889268B6BF4BFED30C7D4D61168714E71DAA8CC2B2297ED0EEBA39AFF2") (:digest-bit-test 23 #x80 40 #h"0CCF05B3063E82AC3D80FF5CE4A2577B5AAC448EA33A41A8E4AF02A32407BBECAABEE027E77B3E8823B67995F9D3E605D40F4163CF749BE0F01BD5C12F565121") (:digest-bit-test 23 #x40 40 #h"7A4FC6055A2DC9F6B1573D93FB324AE8ADD73419AD6889675C2EB2DE33BABE623BC0B68DE7E90CA0710EA999107E609714D389C293AB110232812C61543CDDB5") (:digest-bit-test 23 #x20 40 #h"115189494BB34B5E938F0D4DBDEB156787BFC9840CCE1435FB849DC679D591A1893D006E741898639BD59B924E71118460C178BED113A41F69F8B8488EA453C0") (:digest-bit-test 23 #x10 40 #h"783C39338C56B775469C09764D2E7F6D6A3C019DF15D9F9896CD4ED897022A5031CF4608457C03A230E3657D910AB164B7577F7BDDF31913126E5B3BD780B677") (:digest-bit-test 23 #x08 40 #h"E8F01A9600E4774D83087135E4A433B9331F9603AD0B6ACDA7C2CB49B50B1E7A134E53EAEE9D3CFBDC409BC661C76EC78C8D231337F6A5C4BA880641AC01F5FC") (:digest-bit-test 23 #x04 40 #h"E8845C959980E1AA7E32BE77BA0065DD0D78543986452E97A71C27CBAA53001311F6C9AAA08A81C9EC4D5B5AC1895E58902C5093B0DDB9D4062BF95CF2C1B398") (:digest-bit-test 23 #x02 40 #h"9DF0E3E6909F9C71F9E3BC6CCFA8DA8B67E3CDEC918AC41C5172A737AD07A8A856C5A5C93A933F758804479DD0FF72BAC4463B8A1319DFBCE1F30F83826AC562") (:digest-bit-test 23 #x01 40 #h"55E12EAE38C674EF1B8B118698E0A59F7CA0B327D3C7A1F58A334B4F771F8D73285FC033C8DA3D5564223D2715785C3E617EBEC90C4A5085BB8884CB92E38CB3") (:digest-bit-test 24 #x80 39 #h"020C67F9979C4495892DC0C8ABAD9C7C4857DFB45F5E4E7CF771E1FDBA8845360743C13E278FCD167B419EA6F34C49605A2F3471C6E5133147F721DAA953F07C") (:digest-bit-test 24 #x40 39 #h"1421D557FC4CE230E31B7D5EF77AA2AB0D5DCF4353673E6EB25ACE94BCE3692F1D8332C9C8CAEFF9940B1FB10D7B859147E695B1F986274FED017569222BF785") (:digest-bit-test 24 #x20 39 #h"2000610D0BF5027F6C51F7D8ADC88EFCE5E40E597AB2ED8628885D2431CA43E12B49643C108620C81847B384762BDDAB69108F33A931E2E8E866C62B656C8EAB") (:digest-bit-test 24 #x10 39 #h"7184848F9FF009747E6061D0A06B6E50E71B292231676CA83B892057B9C2B866DE22B92349C0D752E0C8AF9DEB557CC099855CD8D98164776643DB70330FE241") (:digest-bit-test 24 #x08 39 #h"89D3574AD5ED03886A4A0C8DD38D33BC70C9ED33ADFBEDFE8F0F1117CA09BCD9EAA9E17CD30E3747283097F8E928908EB5B133704EC98D01113373BEAA102171") (:digest-bit-test 24 #x04 39 #h"1F38E3A4B1399022D1B820662ED8E6E2CAF0AC57C64FA550261E81DD15109E8F0243591AFE45AF535C5115E671FAE7B6E6C1FF5ADBD4251D1C61B603ED65BD4A") (:digest-bit-test 24 #x02 39 #h"534927869F795E0C3F3C1998FA321B129F2D6131A1162D7CA97BBD04E60588C47703D025660499079AEFABD64D8B57320D2F7F5EE192EC61F26AA1B5BE1C3C77") (:digest-bit-test 24 #x01 39 #h"7A90DCE1F0FD3CD6DCF6181529CB3963E7B236608B59473DD46AEEC028B65912E0EF38414C3160803926C2CF866782B81FB817D579D5273F6C8AD14AA44055A6") (:digest-bit-test 25 #x80 38 #h"18676B78C52778F05146108A283883395519934D3EDEE2881CCA84463C3C70543A44EB61877EBDE36C148325E50AA678957EA1E7227063C4CB1715FCA199ACF0") (:digest-bit-test 25 #x40 38 #h"C1F19DD2DA72B0FD70810F3187CA1C93890711EA1CDCE8E9195E639BA1F744C1F1EC60C23BB699E81B59F7C7986D1F4AFACEEE62CDD38CD8B7778801D0771FF7") (:digest-bit-test 25 #x20 38 #h"B972F1BB739BFFD97100007E3207CBB1ABBD42F77EDD79BCE380683553990208795B584778129A79D57A853A88D33521D9E93773E0B9DFE9A0A484BA5AC4FE2D") (:digest-bit-test 25 #x10 38 #h"666FADB30C739E193CD2D5F136B6FF3086120460AD55FFCDA1FB6A3345A9A3DE75DD281496A4FCBF198BD65BBAC95B9B7F3389A3AC4493571B1E783491CD5269") (:digest-bit-test 25 #x08 38 #h"DD69E6BBE29D7680A5A2AF9EE6BDE582E5E3F78FA073DA85D35B12494D668949DF96D6F4EEEA11DE4BA1A9E8683B084AA587A399995DD06A4E48CAF69EAFB3E6") (:digest-bit-test 25 #x04 38 #h"A647E76A134C82BCEC42B041B2684AD2BECB1787302F0AC40D2AE8DD9B79234DCB4EB806DB62D911EB6111703F3900F7FB34F5286C4DAE8182966CB6E4E655D9") (:digest-bit-test 25 #x02 38 #h"53DD1AEFA4EFE5666B6A2350816FFA350C91A9476AD07C782ED05CEB9AFDF5823264A7A54BA9F715F0511AE10FF7BCADFF3957FFA10261C7497A03230D436E77") (:digest-bit-test 25 #x01 38 #h"CBBD9BD537F1BB8D0780FD990E80CB9BCA7715677E1E47A0DF663D2B2BEE9282F3A62D6F5ED98D68B5C837F83E5A14CC555C8501F0AED8852E81903F528CFD07") (:digest-bit-test 26 #x80 37 #h"6AC0BCDA220041BB80C572113B10AB6007E4EF589B33889570448FDD4F5E7E9C54B07AB8243E8520B0CDA19C544A220F13A9537EC344673121F5AC6CD8F4CFE5") (:digest-bit-test 26 #x40 37 #h"D31980804A1844CEC16A6DE8339290E9D4C296CF5B36B6ABB19845C03DF4029D87DE62F0A40BDADF59D4D91AF7FFF9BA8B43213CFE89F2F3706D4C88225795CB") (:digest-bit-test 26 #x20 37 #h"9B2AD85D3F626AD317BF90BF585B876A489E8DF473EFA6F636BB1A51460053D4732FB0AE8BF398F469EDBD6EAF018AD8346A1B4CD659728BA3C79988A3F093CA") (:digest-bit-test 26 #x10 37 #h"9A2E0D4F9448814DC53F2BE24B56F67839038D6F58D43AA43FD08FB05F0187A02DA270215C76762816B1CEAE415B62AC1DFFB2C929B609E764056D86F9173871") (:digest-bit-test 26 #x08 37 #h"2F2993ACF833085E95D021E5BF776436CE219B8996A83F181073A3BE0627D01471571E8AD29A2D6E752253F3637F0BD627FC1FEA7C401EF2F6C9E5EC0AD19FA0") (:digest-bit-test 26 #x04 37 #h"30BCF6D1A8B16E38AD61CF939B0808FE70788A16FA5CC7707B641DD0594450F269DA63069666D40C0658B2BAEE114422D76558A1A8820D35B48A399127222058") (:digest-bit-test 26 #x02 37 #h"3961A0980D06498AFDCF3C5F2F1DA34C1C915E7BEE6B7EEC04CDBD6F69D933B8527B5ACCB2CCFFB9D9B1C151E332CC56698C7D70C5FBA555AB4DAB162140A21A") (:digest-bit-test 26 #x01 37 #h"99D02F69F7379A111517F87F3E067B06B5F3F7538E566CC0F0F4AD8A5327CE9F9E29CCC13FE7030706D76DE2AB5BF5052E72B584ECE04347F90CA8027DC2832F") (:digest-bit-test 27 #x80 36 #h"E3AD6789688CEB7007891B79F070E99C3ABB061C8E130E1374B533115916B3F7A511B800E66662108C5379D3E419F8AD99CD13E478F2936AC6F2E904501C5F21") (:digest-bit-test 27 #x40 36 #h"6D17640EE441DA68ACB3F9FB91A4273570703308B121782CCFAF17A3E483AD9F7AB49DD13494A63D5F59B46C5CD3583B28BCFF2BEB674869A5624BD83F39F0AF") (:digest-bit-test 27 #x20 36 #h"E2357529BE9EF391905B0E1939C36A6E1F334493016FD5C5656A58C59B580C763EAAB979C1DE713ED3A1B69EDBB03FCD88A1F6C53C244DD1F644EC316A87158C") (:digest-bit-test 27 #x10 36 #h"C672703E2614B3588D8337D1D37BABBB6F48B3C9389F98FA72C97369584D8D506983278E2BA6D5EE192B7627A3B7D4BF06AEBC7ACCA24DCE45E07D534E783FD1") (:digest-bit-test 27 #x08 36 #h"ED99B57DFA96F5DD990B68D954EAA0F0C290D73FF2B5E2E0E3110FFB96894AFE9FC5B8AE0E65C24B9FF16A0075736193A36215B5081B03FEA7C7476F5F4F59EC") (:digest-bit-test 27 #x04 36 #h"7B72E1B4F06C82CBB7D500EBFEEB7CF584E9010CD365686511DEC11973E6E1769EABC1F7133513710137B1AFC990084501DBED7C0264683E17E626075C166A03") (:digest-bit-test 27 #x02 36 #h"95ED7C4E95BB1536ECCB34318E25542FD95E033833A2956216CCF923A12E303DFE6FC916975E4CE86A896914F41F53647778D6CBFD7CC408E4242592D27B1BE1") (:digest-bit-test 27 #x01 36 #h"9E0FF43B594615A9AD43B239F1E94218D01D6BDD0403F45301BA209CD9840368709FAC1D9D3A363D7193A890E2F021784A7A921A9759A751B0271D4327FE4776") (:digest-bit-test 28 #x80 35 #h"560778B9613DBDD24106114517163483643E7A5734DA32231A228B55C06EB3C397370582858A30E5DA613E48F1E8AEB8E205B7CB524286B4FE767C7AEE90B557") (:digest-bit-test 28 #x40 35 #h"B60FB3521C78006CEBFA4A4E606B7A108FE2D4F89CEC47DA20B55CFF57A03592596E2D21055140CD3C9FDC1719821DF10C5EC500A0BDF553D1A821F39FBD2C19") (:digest-bit-test 28 #x20 35 #h"66A83B676B57AFDBC5779BC863260D8B2E68F77774A61E37B1FEDD2E9BAF3C4DD9B1E69B6C4EAA099A8B3ED7A09898E956D5B06E77DD2DA67656BA7F388FD80B") (:digest-bit-test 28 #x10 35 #h"A660821F3D40C636B4997104A60346D75A757F45C319C2E5716F468927AD4BDC697473B4D1FE79060F36F7A3B58BC14DD964DCC9E53A9282CF2095D1827D21F2") (:digest-bit-test 28 #x08 35 #h"F5FC42A9C48A80DB60EEB9C903E5720C3E54CE96B6805A35B83C67FE25D9970E8097189126C3C74C94933BADD1F4A10E85528DA088D822AD5C0FE9AAC1E00C7D") (:digest-bit-test 28 #x04 35 #h"28601C5D8B0044C417DBFF69AACA39E811CAAA9F50D53EAEA70DB24D09D7D5299B437E337E279AC88F9A9FED25DD06EDF951283044F334A757ED34105345D2E1") (:digest-bit-test 28 #x02 35 #h"3AF963AD344CB3B46586DAE63209C42324ED11909E12272E924E844D8EA87FFD12410D90474BF8E957D98EB14D29621658B2F583363E3DB66CEEED3CEEB67A8F") (:digest-bit-test 28 #x01 35 #h"651201A70D0E756F09639FBC38E164474502DFEC83D09CE5A4148B662DEC51CEC104273FB14EB4F36D108900C1264739F8C4CFB0EEB0BF7713F75C11784F21A0") (:digest-bit-test 29 #x80 34 #h"538379668E896CC6A9DADD64DDCBA2C8B73FAF06A2B79433122C9A23FB550FF910A868C026E8947659510F1CA5D36DCFD7F8A07AB155E7A79ED80F39EE69C253") (:digest-bit-test 29 #x40 34 #h"A68C495595E166B08D0FA814F59DC4CDD1FF9E2F2E894BBDBA4E0F3362B3D0FCB7C0B28A344D57FE69C68EA916077293E411B88911D554AAD2A5CAC73897F3B2") (:digest-bit-test 29 #x20 34 #h"F8FF158CC6DFD8E1259B9A3BF4F10C2E014BAC088888E50B4B60FEE692D64BA254C4AAEA40943FEAADE0BB5EFFE9E134FB8B63FD7CA55F699A6827ECD78ECDEB") (:digest-bit-test 29 #x10 34 #h"ADFE4026071205645CC69DA028B85C7C4E70D7DE257DD8D82E61593355B80FDFA9812D639FD943C12EB9818B8A2643348D0577BE283E6C0E80B42656F1BD2600") (:digest-bit-test 29 #x08 34 #h"90E7939D6F8E95880EB01988CEC9FAF67A1A4AB1667D7D12D02A535BAAFC80DCD4B6A20084A1F72F009B6EAE0831A846777BE5421DF23FCDE7C6AEC86BC281F6") (:digest-bit-test 29 #x04 34 #h"F1BCA7377431A4CB4CD79B6A6460FE6E3ACACBE3E29B163FB77C7B8AEA3802E8AB8A4ECFD00901412122F20BCCD35B9CC05F3AD2DF04A9856901654575BE5442") (:digest-bit-test 29 #x02 34 #h"E975983DC5AC21F69ABABACBF40738B7DA536920BF0ED25FDDE6ED7D28F007581CC09975CC4F2DBCDD522C2105310C8F9263E938194BBCA4E405188E72A01966") (:digest-bit-test 29 #x01 34 #h"ED3E0CD2894A5E943C7B698655F549FAF68A439D56BA4E2D6403D85185C7E6595DA97720907ABC26E91DD51837F5735E1B3EDFA9741A4926A38E0BA7300653C3") (:digest-bit-test 30 #x80 33 #h"F7CEC4A9E0252374C837ECB68D7FCEE8CD5EA23D53F5088C893D52930F902DDB11A9FED83B553620A0E862B574CEEF7C0ECD3D3E75685FCB04C2F64EC54B7FE7") (:digest-bit-test 30 #x40 33 #h"5188DAB78097E4D296525E6E35ECD16FF6BE006C8B9C0F19112974200FFB5E2B7AE8AD01467BC76C810B0EB7D8EFDFE36556F72867190A8A8E5C0EEE116204EB") (:digest-bit-test 30 #x20 33 #h"BEA24AFB3394CA03ED732675B9F3450F38D6165CCD0EE1C3C6125111E8D3B77509924BBF53B0996293BD5031B41959B69CD1F66387C4E23D4283B5C84CBA2F2A") (:digest-bit-test 30 #x10 33 #h"DFB1363DB6C8ABD19A4C851CBE89732E2AF9B538D66A8B10CDC9D993C0DB9B27B0DDC085A10166A457D1CBE4772CEFD286CB30A27F14554D9FC6D88AD4421200") (:digest-bit-test 30 #x08 33 #h"F1364B858C3DFF933F477E013FE1F40E847E0645C57B48855096458FF0E780B723342F9EF87420CAE71CFA34BB1691E5A8AFA6ED4B8DD93A4F89DA6F0E11346B") (:digest-bit-test 30 #x04 33 #h"BDBE42E735DEF1E451833FF821AC0D8081EA87B938C5B7ED01590D2912F37F4D46A790E95EC89402D3101DE582615E3700D210901B2AD17F6BC7A49CE060E322") (:digest-bit-test 30 #x02 33 #h"E8CCF97A589BB31DAE88676F8EDA621355FAB1DB2D084F36453FED3A30D0CEACCB18BFC94666744EA34DD9085672C7DB26118665DDFFD9AEACCC7CB96B686696") (:digest-bit-test 30 #x01 33 #h"BAECB62A117ED0ECC0943F7736AC5D84878841BF16B330A7FAF4BB8F0E06E882CBA096BAC89B176A57DC0F7728FAA6399366B5BFFBCC8106C9701FB30DF12240") (:digest-bit-test 31 #x80 32 #h"3E36BD7B2EA5D151FFE5B923F974FF9D57210AC5A665A98585062C3A6D144F24A39C12CD0B3780AD60F2450219E70539802F77F428E0EDA74658F314581231E1") (:digest-bit-test 31 #x40 32 #h"D5E9791255AF3140F624E9321FB2FF58ED474025C9649D8174D772CEB3D280AD51814E6972BB30AB2EB2DC947B545E6F88E88703E3B15EE1DC18AB1C9ADE8447") (:digest-bit-test 31 #x20 32 #h"34B0C0C1A4B1C71E47E698F206B91988582F94A8A6B1899D9ECF36FA840DF48C21330721E387C79861A2FFFA59B5C17F956334F02C735CCDCCBFCF2681DF7EEA") (:digest-bit-test 31 #x10 32 #h"D72EDD4D8F6CAE53D58C8F7FB9F57FF85AE089EBC9F4BBAC7731F9280A623A195ABFD0585A438B8AE4ADDFE28C6B9FDE810AB0672E0F79E49C143DFB4ABDAA7D") (:digest-bit-test 31 #x08 32 #h"1271C935B74C65D8256A006588A87F3E88A96BC3F3A46F6BD3D28AD88EE277C97111FAE9D9F85E266B60D5F2D93EB1C4113BDC2C9245B5E2C7B13B9FE72028CA") (:digest-bit-test 31 #x04 32 #h"922D331D43BAEE3C676CF77C2A3C8694DF405CB4B1F829DA3F55A1C0F72CA851421378BD99CACB217489D398F9AF3700D098F0E090CDC9D2ED989D1FFE03D6E9") (:digest-bit-test 31 #x02 32 #h"509466380D493302589C8EDE504E6C3829A51DE3ED81F16B75A4F340852F4B8362B6F61DF2DE62239052244A8A6AB9D41E053041A3B4AC78F6F3C6939B243972") (:digest-bit-test 31 #x01 32 #h"F845424CB18D078E876D2C9D0138CBD43947207D21EF8BE517975DD12B5A34A03D6928C64057B39929C409CC0E7427D45B641658BABC81608A8C748477FC44D3") (:digest-bit-test 32 #x80 31 #h"03B39ED2E0D4B87327120948B318B13F9D33ED5423FEF2EC846F88924BF64F779E0AA6B5A19FEA70C8131F8036170F24B9EBBF3771F732C35D0D1A5563A7F869") (:digest-bit-test 32 #x40 31 #h"6DCE005462914A3F58B575E3DCC5C83FEF78AABC826060B86CE95798B2721D63077D583CB4E8DE89F215ACFF526D4212B009E295F9FB1614A149C9032060499C") (:digest-bit-test 32 #x20 31 #h"661BFDE91A3B1427BF0CB28D5294CE42FBA3073921531948F40719F2EBE9CF4F22A182344020056481208331C870A47F3E57993B5F2C708C50BD33D2D0438398") (:digest-bit-test 32 #x10 31 #h"7F36A9CF03E309A379D425D133BB51F692E95050F76E829D5067C78E53C1F4667A29F8E3D89E4998ECB094C1985DED5919D63E28651DF632AFA2234332AE5A3D") (:digest-bit-test 32 #x08 31 #h"110802FA5735C7450B943FB7CBC77565569E922E260E9A18D7ACD138A79136E425EBF4087D6A5C5270D7F8A0F0944E129A98E8EFEEB6F43953FEA57FB636954F") (:digest-bit-test 32 #x04 31 #h"2AFCBBBE3733B8D14FBDBFDC5DB7267DB593007B133A96F1ED5C452A2FEB5F73848A1223C857511465C89497C5BF75840241D08F7A92306EB4AC4D55857336B4") (:digest-bit-test 32 #x02 31 #h"A4AEA742E243156104FA254E0390A0196CE68F5498551AFD4A991377F839C0ADFADACFD7D101D9F99FC7FF188F2A8CE7FAC928D9D60B45BF09AEE2B47EB180C3") (:digest-bit-test 32 #x01 31 #h"123AA69922B31CD78125D1641174174D9E15D690B0D2096E3787966B33A8557C1B815046077A0FEF9080974DEEF352CB4ACB86033F5368CBB5E6201B181EB8D9") (:digest-bit-test 33 #x80 30 #h"3933E0E7BD7C47F4C4F223990DFFE6C5CC87107FDB9EE04584B1D0C3785042C4C026202A5769F1CCAADAD693B9D0862A75BFD6631329240EC02FF57E50A3D1C4") (:digest-bit-test 33 #x40 30 #h"23A144E2AB693BCEF72F373DF55C56A8BF567760AA7D11DBD165FAEA101571A9DAC4522611EC5143261BCC1F25647CF39168EE9CBAC83D29EE8E6C4344402B04") (:digest-bit-test 33 #x20 30 #h"816099EDB83B5B3B4C86FDA5E4010F350CF4CED65944054CEA983622A44A6BDB45BF9AEA4792471562AC4961D687658989F1829920732408181E4FD37BC6FFF9") (:digest-bit-test 33 #x10 30 #h"9774689DF45B887BDF632A12B01CE7AF4004EFFDA95C7FB9CA429FEAEAFBEBB7B557B3A521B16CD18ECDEF25D015BC919F17680CFFE98ED194267ECBC5500962") (:digest-bit-test 33 #x08 30 #h"C725F2C08C726BF6AFE50CA53AE802A4D6401AD9436533F8C0544DB89E9810AD005C84D0834B63E2BD93591C657EBDCBF88A7034AD8E1C2D9BDC7866348E78BA") (:digest-bit-test 33 #x04 30 #h"BDA6A619D0666268B7E582F0D6409FFB93A421DA0429C0E9CFA530FCFD918329DDF84C21AEC346C8A982588765BDE8AE96BBF098808535EF57E97227F69DFF75") (:digest-bit-test 33 #x02 30 #h"8240D5FA3AF5A4C6CC7021FBDA7E1ABF520C6470905733474EFEBF5821207E5B6B52CDC41CC6CB62F3F29261657CF07F4993A8ACA58AC67A05E2B697097C17CF") (:digest-bit-test 33 #x01 30 #h"30E8E64BD59277A7868AAF6B57863CAC877260333569D1C81B4B398C936D0610E9310F78D6A71AE4153886DE4B6FB1093444D308D5F1C6A4B9E10ED77CF93151") (:digest-bit-test 34 #x80 29 #h"6810FD47DF39E199307F50F05D3057297DF45A000BE2D2C38792A8111B93C43464C96FE098E1EB1935AE918AD7F4A3AF8844193556EC025A223F8E604BC53212") (:digest-bit-test 34 #x40 29 #h"AD8FCC70A791BC171854083F16FD284B5FDF3A2549827FFBE97C8141092CCA0BD6822A6E8412A4515BCB12117AAFD07669EC731E179BD2C1B5414709A101F69F") (:digest-bit-test 34 #x20 29 #h"EF023C0A80296F26C99A629CE82F3CA8A07772BCE5FBD6ACB600CD55A8603AB94E8F59CE2FA21F2557C4BD16FDC15788844E3A3F434FA50D267D42BC60E396F8") (:digest-bit-test 34 #x10 29 #h"32F2C3A8C7257E76748EBFBBD523E0560853C261CD77D4FD106964CD36924E53F67D6C9C52BFBE2A95A8E320D8459B88228F280FD8196C1D1854BC0D65188A58") (:digest-bit-test 34 #x08 29 #h"1293FDBA821B8B56C975C2AA5C4B796265B8E1109DAB75CBDD7337B28E574368501EA648E39E84B3C0D82DB60DEC8CB7B4218DA581909A7C8125464C60F33C00") (:digest-bit-test 34 #x04 29 #h"BC02E71307DE22CD71332E73CA8CC5BC1853D64469F612EA1B697116DDEC1752F5836FEB24274CBB7B656587FC7B8817DA5468E68BE0484FFE10F94BC756F5FC") (:digest-bit-test 34 #x02 29 #h"DD27D897161576C5B8976F1D73E074112D6D2830193A343FE081F906C6223FC1FF6F812BA45BA59DE8B661C60DF53771CA2EAA9E37E0453BFF8761DF6A6182CE") (:digest-bit-test 34 #x01 29 #h"3AEB6210D247C531C7E7BAE1514B5AAA482069420BBD0B7C6B0AAC4B73D4BB69961034B9ED4E50160FC063BCEC8A9DD59A1B8E5132490AAFB29CEB37DB4B0A9E") (:digest-bit-test 35 #x80 28 #h"06AE800A3BB4DE7C8C88874D56D6C768F307AB495C092520F344B0F0EAF4CE9C83BB4CCEA3165B99C97FFF9B873071E5BC2AEE60AC94A532C16F8656EF2C0A83") (:digest-bit-test 35 #x40 28 #h"82825E40A4DAE5B2B699E078D35D3A4AF013CCE8B1ED8B649294540B91DF798E407E2AA4647EB802C0C23F2377C31C30DCDFF35B6E959E6E41E5089E07CB755D") (:digest-bit-test 35 #x20 28 #h"7927FA65FDA2F1A8930DA458E6E6F5343E00BE0C89B9BBAF6A8E88013E429B5DD83EE1257DF5820CC9639CFAD9BC82E50F5691F3C48F26C2F2206D1217C0A2A8") (:digest-bit-test 35 #x10 28 #h"16ADB8AD40F8E7DE816365B95E8698345D1720F8C2B4EF81808C273E8CEA77A03A86B3F96E0633C6238BC77A0947BCD0A943544CAFA554517D8D598B010A2244") (:digest-bit-test 35 #x08 28 #h"CD22D9FE3B3A892F33290B161D38784C5F8CEB440479ED5908C3C0AA768BE14586791D51BA181C40248ED6008FAF8CD3A7EFEE4EA5A84D1FD5584A150434336B") (:digest-bit-test 35 #x04 28 #h"26AED50E42229330774E1AE38F7E09EE70C5F2A18CBAE88715B30B4DFFF8B1B0D018BDE6AD4D7F56DFB716A0B7EECD123AC9727A5B3322580735F61A928B2F05") (:digest-bit-test 35 #x02 28 #h"4838DFAC9D9A21C0BDD1613EF95B0B1F2E7D9475D9F4AA1D725F5B625F3259CAF18C673A985ADE85A17093889F60C4B08E2435D73C993948FCA9A4CC232912F1") (:digest-bit-test 35 #x01 28 #h"010E43662BB66F53285961E42D720008319229E70FBC62B15F81E2BD18A85762469FE219C20C02D7400FC984129B69EB0FA5FEAE0F76A98AD3212E84180C6D88") (:digest-bit-test 36 #x80 27 #h"808F71EA00AAAC17E95FCC100A6E84064F0072DF4D12630AA26A103DF625F8BB0441FD78978247DCA480F5ECCA6C96BE394D9C2BDF9B95F874CFF840000B61EE") (:digest-bit-test 36 #x40 27 #h"92A2D3BE40C1B803F99CD5B4ED7E756EABE4179A851C3440A73BCCB2B16F89F8D807610C475244680313A6AF14DF70D2189C5989B57429BE11CB2D222DF14057") (:digest-bit-test 36 #x20 27 #h"F9B22C20F13C9B6EA2275D62A5751B363F78248C4484B55B757C05A106905B85CE57AD9389AC8285E8ADFE5207CE31B78B87C5A820EC3010891FE8493B43825C") (:digest-bit-test 36 #x10 27 #h"61F6E044E81F5F54A56058EEC1677775C6E6D893E9CAA93F3D30FB3244D64115D1381F9DF3DA737DC8EB48ACE931F2FAD5CBD7102989EAF2EED9CCC23A1F63AF") (:digest-bit-test 36 #x08 27 #h"568A3D054D65B3AE2DACA496D471C0725CC619151F340933B29DB81F6E0B70A2A5C40E1C0768D13C89050AC3CAA1388C38466AEF2CB2D24C6BF10E74AB9BCD58") (:digest-bit-test 36 #x04 27 #h"BF7F5E5B4F5EA434C3EA7C16D4BFA3343A69C198904DE4891FC75E6E6B292369F5181BA2C11830B948BBAA200E2C9D2502695E845FF5A4AC0A7FB4FABB473640") (:digest-bit-test 36 #x02 27 #h"8A372DB7A84BFCA7B852C46FA0DA43483D020B1651CFABF664807BF8F776BD047D6DA4917F48DD268B20052730ED3110000B6DB674C9482A58F2FADF0766B2DB") (:digest-bit-test 36 #x01 27 #h"A3F18DF2ECF5CC88F465A044540E222C37D8C1E24B9C72B8D261B92DEAF6747C6CC16258E226E59A3155621663BF75C2EBB302A5CD6E087FED2C92CAE819211A") (:digest-bit-test 37 #x80 26 #h"359FB88A771416F50984CE7759182C0C80783E0BAC3A4ACCDA26973029ED75E2111FC6D1FC2057D4BBF2F16AD488E79BF030CBCBA3A9B03BA9163B5956FFEB82") (:digest-bit-test 37 #x40 26 #h"D04F94ABF2D14F82FAEB370EEB4B1BAF3DF7C558FE899ABD981FEF47BA9891802B12F9F877D5A0C291ADD33C39A355E725EA25E41ECE871CD201654BE3B12885") (:digest-bit-test 37 #x20 26 #h"7E9031FAB344F0BA03EB8E3C6C33B454B7F0F32691588A6126339663F404D63585F9C7A89D25F174A32267CB8188EEF6E3277DE9F00CFAA5567CD01C430FD2C7") (:digest-bit-test 37 #x10 26 #h"143DB1BA514B8BF6D6FC4425C67A8855F2578337E8E2067427E678958BE791D5DD5B7492A98E87B25F8798A9D3A11EE096D7C81F2AC225FD5DF0583AD51E4070") (:digest-bit-test 37 #x08 26 #h"4FF920C525841F3DCCDE2784C98CB005A0CDEE6C8D8F3CA2CBE2A9354EE3FF58F95923B5C9F6DBD8F2E7DFBD582EAC71284392762429880F28625581249C693C") (:digest-bit-test 37 #x04 26 #h"CA5BAA6CE7D209E69653052607AC2ADF2B73F4A37DA29C16E6BA983A3BBC2F4AE0422723EDA865F7C986E964FDCBD60C1C314466594B61D05C83E7886D47BF2E") (:digest-bit-test 37 #x02 26 #h"8E82DB8B7417258899A1E5B1526154D6DCF7806267FF749A36FDE0D99FBE3BAC9CBFE680A9705543C30C5A0DE45F0951A6DD1B5E051F09AD9ED366E498BB59E1") (:digest-bit-test 37 #x01 26 #h"7BB4BA5ED40799D088E3829849355CEF0D17275B202B27FD4B8C907ECEA165FA42DAA8F94114BE35BBF1B65759E43CCCB4E17814735B211E19565A3A5B986F60") (:digest-bit-test 38 #x80 25 #h"8770783577432080341374C2A150997C3A54994D6D45A3905DB66645D0B6B806A528018E1DBE8A94A10BE4E3E032789FED305021AA1E32B8609495024910294E") (:digest-bit-test 38 #x40 25 #h"F6EC3145BEFF1BE7B6FADE06B527FB4CF5E0D22EECF0886FA1E3C288CD8031D37595C4F583DB590409FFA8DD6AD03B2F6EE04F923BE3E83ABB80CE1399E2DE33") (:digest-bit-test 38 #x20 25 #h"C5645A9E5F801B15AEFD7D9AF2DC04BFA723AE44117938AAAD4D63AA568E3AEDE1D844825E25FC1962681650DD67383008CBC701C29F7F813E367326CA52F37A") (:digest-bit-test 38 #x10 25 #h"D0F55556457E41A94C3CC899CF36ACDFD32E1C13D83394086FEA5A7EF11C2A33ADE4A6BE1EC5B37F09C3F1E6F02195D49A748D4DEB85BA762E2DF16F5856550D") (:digest-bit-test 38 #x08 25 #h"98D77048E06452442A0E4B36D7422D7DBEEC4A3CA8251AF2FF17FFBF6E3B03EDF065CE4C7B7BDC7F0CC3322A78DA3D47EFFC51601263C9A326EEFA7F51736BA7") (:digest-bit-test 38 #x04 25 #h"D13D5B346311D40AE6CDCEF42702C3A50D22ACD47D78E65370DB7BCB3C3F4C7F6FE911B75F7FD99B3462F5A6BCF86037A90BD0FB5BB36B7CB9FD1468D7549C6C") (:digest-bit-test 38 #x02 25 #h"0A304F3BFEE8E91FC4025D4AA71F86EF692F4184254FADB41F1AD57933C00FB2DEB9B85882D6B0665482C4B35194B2C12E847B299C1F297EDADE4C55AFF67BCE") (:digest-bit-test 38 #x01 25 #h"4CDA7E6FB4333854AB1BF7F24260FAFBE9DEE8E519C2037218B3CF9459C9EDB9F0255A7D36C175339D82DE9228758495DF8426FD112ECA5D8159F0C376C26474") (:digest-bit-test 39 #x80 24 #h"023ACB8D8DEE56EBD1D821E62B96FE4683ED42636E09B13EBC0ED90E2890507AA727B800B3FE782C97880DD9C64ACB2C6D0268E5AF4479203A9D652F86C1687F") (:digest-bit-test 39 #x40 24 #h"4CB9DB72A825D912BCC66CDA0A77A481A710DF9B47989A917F68A7D7EE3146C67B766CC376152F26FA245CC98F55169B4806F6B1E8614474691FC062D539170F") (:digest-bit-test 39 #x20 24 #h"C4900970C21B19D74B48C6622F109A7B64ED6B9C3F74F10796B55F67B1D205308776770DE6C47279A28EEE20A53229975810BCC1F6A842748811C7A8EC392F91") (:digest-bit-test 39 #x10 24 #h"DE90F962685A13A53C4107EA579DD2BBF74BB9767C3F728C392A7E98A1EAA8EA3CC963F0260C40AD17F298E665267AA250832D25320DEAF0AE551ABC904BAE3C") (:digest-bit-test 39 #x08 24 #h"03710A30DCAE0E79D7A3126FEE4EDFAC6AB29D6459DB8E422DD355033988FE110590999125C427CAF89FCFDC78C6C53EECB173FE74EC446A536D9408689AAE6D") (:digest-bit-test 39 #x04 24 #h"B86545AD9127F37D2D0C28B1510B2107383F349FB9F743508178766E012F4EE663DD38B0C4ED57F155A8BC2D23FFE6E7C97C601CFD49685604A9B1442F1178A3") (:digest-bit-test 39 #x02 24 #h"6D7961EA4261F57EB2C0A72021AB821BCABDA1099FFF6A89E01D025BBEDE6230977384FB4A9A890CB22F96EA8746E9F4642511A44FD6ACE7BA5146438CCAEE23") (:digest-bit-test 39 #x01 24 #h"6F0F9D54F5A3F7B25AC7ABF00847533D5B58A056962ECF9AF454F9C7E2CC1DD1A179B520AC2841421AD5680BBF065CF9F903D90D958422DBDB372B43967B6F05") (:digest-bit-test 40 #x80 23 #h"4592812E77D0D2DEF9823A2B44E2B7CD59DE717B6D76913D10EFAA658D94AAE59B1D80792F678383536307376ED3F88917E36F6EC9C73C137724BD64164519D2") (:digest-bit-test 40 #x40 23 #h"14E25880F7E4BCE75E90C413191D36330025085E5CB8EC2D05CC35A2620DB01A306966B9FABB4A0B36F2AFBE739EA6B1170B0D17A9D83372730793891B4FF174") (:digest-bit-test 40 #x20 23 #h"80325D985D0A2E2FCD8191F99AE2EA13D1AF137DA729CBC32E46B292BC56F825DD79307607C7D15F2B9E8ECB7B89C0C805BC009D89B107836156181C880235DC") (:digest-bit-test 40 #x10 23 #h"62D9C22B5078CC2A6EB1BC0A033FC1BF1F365F88DC1643A4130436EA753E5BAD7D2B742FDB6D5ADBB0876A0AC85F0AF311CA54C27ECDD06B5709901922FCD166") (:digest-bit-test 40 #x08 23 #h"3256DE63A6D8D09702E0C003BE551FECC7697F7D2784B021C86966E19AECD9538F34AED8DE1FF8D64B00FD00C699153B678018C170CBDC9176D33DE24AAC0907") (:digest-bit-test 40 #x04 23 #h"E62B4DF19831FC08E6F5FD6C948FD00B5F79CB0811931FD9137AA0E918863CB3696748CCF14AC5A625180A27B29C7A0352892ACBF2D0A83757E4B51342012A93") (:digest-bit-test 40 #x02 23 #h"5AAC65EA249592893F3548453B80E77D59E615A28E2BB2A5DE952512B6A0C5F1A923884AD104B6EF0C4988952EBD3159D62C197494EE699411361FBE41B764A3") (:digest-bit-test 40 #x01 23 #h"E5BAD469FD3C36D045F87A59D140518EC0C7EA635CA1882A55CFBD20DC36218695811716E1DD9D0E5D3A4C02002621B49DFF5F03CDAFFF30FF276B8C35B7C575") (:digest-bit-test 41 #x80 22 #h"459B5FDD6F8E4BBC20D62BA739B9C044D310BB77B8C7CA8F573F36768FF252B4E941ECB5B80A54254735C9BF5AE3B65E51A1C1F3916CB000902ACFE4789B76F6") (:digest-bit-test 41 #x40 22 #h"5EC9ABB919B3EC3ADFD92C2B25C335E679798B30E97EEF990BBE41EE82DE525AA90878B4736CB2751A59175082E3022B64EEFC7205D02193A0B7D40D54BC7CC8") (:digest-bit-test 41 #x20 22 #h"1BDF647A2356F71AE0C75E142B563F78F6E9164E7CC424C69C78AF0F9E75241D6D07D0D8ED4DB931D9E78A6BBA0CB78C8AF954D9534D279A4CD82581ACA702BF") (:digest-bit-test 41 #x10 22 #h"AFB80FAB79D3898EAE8EEF0A108E9AFC2D7E7CECC189E7247A78D2FD59FF07E3DB54069A5501961331D64731F05812F789C16D486C0D26A61585F422668F7C6A") (:digest-bit-test 41 #x08 22 #h"86427AA9995665FD0A210D5E6B73A9593892588E97CB94AF76BEEB9E3765C81811A7364E4B19249C15B9FF5F89F14E777B7F5A0FABE331A10657994093A516F4") (:digest-bit-test 41 #x04 22 #h"63CF6C788D35AA6193790E929FF87591F44CE501C23DF008E040A3CC0D51BD143F695291CA950BA752428F8C8966C370609CB735EAACF8B4C1109C1BE5EAE9EC") (:digest-bit-test 41 #x02 22 #h"45AD9E5609A91189076EC6E84A0B99655F82E7B727212076F1B6FEA4260F3291E6041A4587F779C2E59DBDDC5C2A2B30C5F29CF6BCA2B85FA2E63CBB8724E004") (:digest-bit-test 41 #x01 22 #h"F245C5E1AAC7A29028DA7AC5EFCB549CEA0190E2FD4F053545742A3BADD6D3C0707AFB5F6191A8F9CF9D6771012A3C9FA5546DAE47671833532A57AD5E5132A4") (:digest-bit-test 42 #x80 21 #h"2D7B4FD37FF55C715C4C264734DE406EA432DB59FD495EBED685CFF78ED4A16AF5BDFEC782ED94EE62D29A8F5B25969D592030E5F7418D38B96F7275140FA80E") (:digest-bit-test 42 #x40 21 #h"50C566D5CA58A71A7267F866DCC80612C90FEB28F39516007A6D1B21D4DC15C5AC559D859AD6BD4029B88283EE5A789EEFBAFE8BAF7DBB3A8650730A707517D9") (:digest-bit-test 42 #x20 21 #h"B9DFD2AAE638139CC9C055D915335479D459FE0641DCAE5177CF135DE11C9A6B381E422BAFB068E248B7E218A6A5D9F55D7537C4C614E3F868CA0F9E694381B4") (:digest-bit-test 42 #x10 21 #h"52352C822E33883CDD16E9B0C1B5A49327AFA81E1EB1EDFF187A9AD49E2628CE7815F2941049F4F575FCE303AAAFC5ACF0CEAB9B0A4926AB3A7131E061EE1C52") (:digest-bit-test 42 #x08 21 #h"13B418100123E8D6628C3ECE9C5B167F7A4AED3BEDE4A0E8D712B93509A5932A2C98F9FB704BBE2BF455625C26232671C7F7A6D22F00E210FF32314824AFE5CD") (:digest-bit-test 42 #x04 21 #h"5DD49A571E93A6513B1B8481A7FC509434623A37EB0B566B968B4EBA7F7C6D48207F908240D8F80C6A5BA32AE96513CC44DCD553304EAB751FEE2F9B8B921332") (:digest-bit-test 42 #x02 21 #h"98DFF0FB7D2A8C99E2F2E87052B4EF8E2E5CADEBCE95233364346DEF1718BA94C293CF00974686ECDAF6CD1D82EF2620CE3C56E887152F17B1F6A13E797CBBE2") (:digest-bit-test 42 #x01 21 #h"25C7B4079F4470094A9848DE534F0B5AB0A664F1B3E04C3855FAE97C5332DBBE8061E66FB1F1CFFE43C34AEDAD6FB864F5452EC69B1BE1118EA98A166B18168F") (:digest-bit-test 43 #x80 20 #h"3E71973A31A0DC523423FC6C2F860E2B8CB23FDAF3C4BB1BE90CC2777159892536F269FBA9C18DDE7ED4921237531465DDDEBBA8962A8C602192216BB299C1A5") (:digest-bit-test 43 #x40 20 #h"1F8A99C1B2FD7315EB2B2E0DE7ED2BF4778075A68ACCF02DC73944B4CEB9D3B20CFB2EC9CB3880590150F486C47A6D7D461949E80220E76277CF44EED927AF94") (:digest-bit-test 43 #x20 20 #h"3994B22859029B3F951284426AC4475110539AA63FBA198D7AAB12BEEBD324FAD540B1B0C5AF544D9823606683DC5D3AA7168D95FF8C1DE319B5064DC8B6AADB") (:digest-bit-test 43 #x10 20 #h"2FC4414496AB27813DFDDD1C73570F029E97B30023363DB038E4C646BD44984C1CFF47FBC09988E025C1772B3EE87C28BC60555BA47BA465B80E5785B83401C7") (:digest-bit-test 43 #x08 20 #h"0275E439DBEA83F0E2302EFA85E8C2C0536DF9BC119C5C5A88137FFD7626092311B69322E24C0F9EF47CA0EC0C8B4DD0901AF0F3280E3347D9E8D17267D28666") (:digest-bit-test 43 #x04 20 #h"35424D0982B4F6969D86F28721601A84DBAA6164EA2BE4AE5FD9FB979C7313D633AE1F137D957C2DC8AC3EA1F3408978EA8C5D30764FB2D6830CB0894B9BA9B6") (:digest-bit-test 43 #x02 20 #h"619DA0A308EDB6F7F173153F1DCAD3BD80B6CB5A6C7E6E3D2DF8EE418DA57F5A1789E77E1B3C0E4B5ABE55E4CC4FF5A94AF0FBE79430CB4EFECFDAEFF45BF8FB") (:digest-bit-test 43 #x01 20 #h"0C66AE0ACA6BB894981CAACAFF43AC9D52418C0A0BD789D4ED4BDE3452CE8FD02DDBD98D31E35579B7C141F6CCDC57D6447008BF00DAEC74A47E48D29237693D") (:digest-bit-test 44 #x80 19 #h"B6BD5F12B706BB5EA25B400254BB3BECA27F78985C4781210A9CFBCE8885D16D73771BC452200279F363C1854FBD80A1BAF7DEA2E5C1A07F5002D8B063EFF851") (:digest-bit-test 44 #x40 19 #h"150F019272CBB162AAE2377C5D222CC8947FE0E05EC5789C8622111DDD262DBC0D25D3CBFBAF60EA6E0352CFECFB650401AD8BBD142A6F3F67B45B18DDA45C6A") (:digest-bit-test 44 #x20 19 #h"2D06BEE37EF1C73A3C9CC0DC733668B6937BDF6C89704A8B70FF1ECAA389980B8F04119613E3084EA98DDED46544B10EF413C877EC647A9E7784122CDD56B5FD") (:digest-bit-test 44 #x10 19 #h"F4DD7A139D562AE9C7376B71C2C1E0E9FC653B4A1CFF50C71CD7EEB4C3076E53FDC253E0BCE8D48A149FA725195BE70AA9ED8BD10FFD5CC244320F70547DA67D") (:digest-bit-test 44 #x08 19 #h"AD9E3A8CDE3C16E899950F53E0E8C8D857F597E4FCDDA25C50B0055717EA96E694112F28649EBD398E7E9666602F60669E03FFBD6A48CF08026D8B6E10A90104") (:digest-bit-test 44 #x04 19 #h"06801E37DB9BE9A5A419340C978B45882AB8FB4F586C1CD03C6C38F2C84CA7EF0AB344D2B10DFB74CAC8758787790D070F3288A68EEE58FB74F173571096BA66") (:digest-bit-test 44 #x02 19 #h"15506BB0E4531FAC6BEA11DC8C23D29AED71EB6AE860B657F7C8D5CBBBAD3456FD892AB56511EDBCB42DEEC156029D874297FC91A31D98104027C26F0E75F913") (:digest-bit-test 44 #x01 19 #h"7CDA9C57D588097D30F7EAA5DD5BE5A7CE8F66FCE8B4096FBB01FECA3A8056E57232AE9A7486AA7FCD12B552B5DA3227FDCA631ECD5D086BA06B94437F20FCE8") (:digest-bit-test 45 #x80 18 #h"DBEF8036DEF9F9BA9C5F58AFE2612BF88B5FB68D972648ACE85B0E2AF5B8AEEDD7C3E8285690E9E7D1B64C5593CBEF8D52D947B2E4455E3ED29C410565761C4A") (:digest-bit-test 45 #x40 18 #h"218B947B6F2F44610A62F7F7406354A69A0A178EC1751B6B641827CEDA677E481E1453649D340BCB07203BA418FDFFF954CFBC59E6F19526D4108F70B8DBF976") (:digest-bit-test 45 #x20 18 #h"8C0D3B87DB9E41CE42BE01CA21597E36F4DFB63B6F89C2A7BD7352F04469F8C4FF32BB1F4033F1D6982226050C2A4A6AC10C1B281683DCA5DC5C42660A76CB15") (:digest-bit-test 45 #x10 18 #h"E0E517CAA1BA9DCEA2A44AA0F8306FC4E91B2A927189F06715315AB142DFB27ED7BFB67C66C295960ADC754C98618A13137114894DD5DD3B23FAC71C891ADE56") (:digest-bit-test 45 #x08 18 #h"51E9F37D978DEA7B2C4BC2D7F8A09D9E9818DCE72A03ACBB539983C9BAD4B83CF45874E616C6AFD9B1B6E5AF45C6F9014F3437695F8487D03732329F2E49723F") (:digest-bit-test 45 #x04 18 #h"2A04A78682BAD0AC8F06B623FBF432E2CD0F75AF9D3D146240311613F3BCBA3AE6E4E1A85C90014495B2375175D7E26E5A31076C1E1DAD4E181630D9771B218C") (:digest-bit-test 45 #x02 18 #h"CB40FBF4ED2AA384E08809CA0C5A73797A19F39E732DA1673D28AC8C7135314A21CF14CADFB69D05CCB19B606A4D4C8DEB812D3389403EAE7F546732CC9AA5DE") (:digest-bit-test 45 #x01 18 #h"5FCFD715F12A3999C8195E7808B28A45A6C20EFFF687708B267900185E6B1F2C15F3EBDE611D736A65EB2DF7FBB6C533FA86EDD4497EF2404503F30FCD8027EA") (:digest-bit-test 46 #x80 17 #h"6299A4C4A6871B4D286320BDFE9CB2EA15F26FD6D184EA1C1FA059D46C38339EB3F0B4CA21E948B59EEC4563EB8E113CF714EEFCC4B99CCAB3671BB2D0AF400F") (:digest-bit-test 46 #x40 17 #h"2B9DD11B4274F1586CA120F0D0CBAEAD764EAAD348A272D81DE2B0EFB0B67147A01B42C06B0BACFA6E531632C17B90CB0F510B84C4C1EFB0C2EEB3ED177C7E0A") (:digest-bit-test 46 #x20 17 #h"E95099B3B28DA32BD23B42911C296B7130B953DA429747139D4225FD9F235070C7C0F5330B20F25239F594F2F81D0B88376DD7AC7EACE8F782035AACB1D5B3A3") (:digest-bit-test 46 #x10 17 #h"DD4A01A6A22702FE05F3AC072179A20A060E788B2ED0041583999D381C49F9A1D749DFF8F535591572DD2543B88D7486B53919EF6D1BAD7EFB1C19FDCA10D16F") (:digest-bit-test 46 #x08 17 #h"3F65B4E31AE4744671F766BE821A7BB16677AA6579E41D4A9D5DEA6CDC70FA91CA93D43724BD99800424A343B1FD2688A2487E381857B61AFB4737C3A6F162E1") (:digest-bit-test 46 #x04 17 #h"F5645936710779494F6F9B108926E0ABADBF88CCD67DB1D99F187C9AA5D7AB3E7640AA6A3186E2963C467AF4417BC9CBA64257B391C5D9B7682D791473500F39") (:digest-bit-test 46 #x02 17 #h"24D84F2C7FBBD77D532A2C07AABBE7F8773AB23AF7EFC6054179302374161E6D8205BF54F5B48F785F14AF61793ABE613263E33DE49996BC23120A3B78789BE2") (:digest-bit-test 46 #x01 17 #h"1EF01FF3B151D117CE54968AFEC0C99DC9985FB64577E57E52BF526E6883E4AC4A055315373106729911DCC95D927A0572201F4D7394473DC5FC136C49EA2856") (:digest-bit-test 47 #x80 16 #h"CF9B2454FE6F41CF6A4D404BE741F0145B9E6E4F8834D9FA9974ADB2D3CFC0A0190F78FD4D6977E1D12420D75887A353CD97AA7267AC7D2CC234886D801CDDFB") (:digest-bit-test 47 #x40 16 #h"1952CE415BC9050B7E38752CEA731A125E60E4FCA70AA6A0CC335A33512D79DD1A744388A1507B63B679B08DD1F0FCB81B869EEE46E5CF35F53F4755EB5BA307") (:digest-bit-test 47 #x20 16 #h"989DD0DCF0D6CFD444D9A1D2320C3B4BF3AD487AF53829E7A40DCEA795349DDF554588CB911D4DA66EEA14713B696F7D4B065EB22D0A6A96BAFCB7C7AD91FD61") (:digest-bit-test 47 #x10 16 #h"713FDF6618B8D4FFACD13C94ACA119CD8D8C34C3D7586800F51288E004CB28DD7734DF80CDA02E808DE3F254B36CC313AE30B8EEEF1B7CBC22BB21AD44DE9AEB") (:digest-bit-test 47 #x08 16 #h"A8EAB2B02C2F62FCA254C6E633B031E22A58843070E8222C1D92A74716200F1D58D33C2D250EA161FD2E19D7892F84E04679F0D04216C89335EC2984A5CEA37A") (:digest-bit-test 47 #x04 16 #h"279EFABF4EB34A64F47310840C4BBC8A9129C76CE4CBC8AE6AED15180E09122527ACD9763D4CB81E6F4DE9F88A9914DAD5C727C2375C6AE4A8EDDBFE7AE2482D") (:digest-bit-test 47 #x02 16 #h"B64EB8C73590E7D0945EB8B8FCB8B68893CC84E87C4B1F518381E9C5828D373A3206AC3BEFB4EF238A66D0101B420A85B6D5C2BB45A89AB71186DB8D4295AA0E") (:digest-bit-test 47 #x01 16 #h"3901D66A817310CFC0CD8B4E71C60D0C44EC9925397B787BBF1EAC49B1261E74D898FB2BA896C67E00128C98EB332C459FC1C256F5A70AC0EDBB1EC1144C265D") (:digest-bit-test 48 #x80 15 #h"752E22A33D8850B48D47606F857F0E600925674F8383D1DBB82550CE8CA6AB863605CD9B2CAF61E1A204E067DFA09CDF8E17615C19B8621C68BCCC47FA4ECB94") (:digest-bit-test 48 #x40 15 #h"C2FE7A0E317C5D16991F37254DCACD039ABEA30C3D3098756F1A5DF32F981BC5089FF31C0AC8B4812F12CE0DD41F1A6A6173D15B73375AA133B143BD76F1DE4D") (:digest-bit-test 48 #x20 15 #h"9E2586367A849925B31F33FAF46C61F1035D8FE55D7DAB4B3521DFCD57B224913CA21B7E82286FA371AD3E8B8E1E5A63A40DA521FD040EB813CAADAD7E1558EA") (:digest-bit-test 48 #x10 15 #h"052C635B337B2772F84C5EE212ADCC61A339871E9CC207B48178C4B9FA32BFA0550895A1005F9D0CF3064A0F03BBCCEA47EBF267CC5CBD431C28D5AC3C0F828C") (:digest-bit-test 48 #x08 15 #h"B6075C572FA983BFEF068BFD6C1A93A68A7224850514EC04E7A03AC01CA24FE92929E714B9C99190E7BF92EB0B2D7C015E05EC8B362F8F55CF18BA0C1E478153") (:digest-bit-test 48 #x04 15 #h"F2DBC1692F671D7DA945917597460DE8721B13BEBEE79AB6B68787B85D7D91EC75CC32DF5D1CECC258C72967CBC472C3DB86D90B710C162DDBC4E938AA0D37E0") (:digest-bit-test 48 #x02 15 #h"02D39920EE7EBC3D9081AAD2124A9FFEE1EE165CD89ABBC9E00C1450EE11F84EC4949BF1A1AD66B8D05E7BDAB2A505CC131C636AEA5495D8288CB7E7641EE559") (:digest-bit-test 48 #x01 15 #h"DDCA558DC8AC4043925BB49AADE3FBE54013125800AD6319A92932D7DCA986A555E568434398C455E4434D614EAAC415B7B0640176F1BE5436C6BF2A9C9E3600") (:digest-bit-test 49 #x80 14 #h"B5CD32E369C9F13C00A87A93B02D959D48027B91CDAB279B900E8983DD98D9574EA97F568F27C4F62716633CC4405A9390AE2172F21574E809ECBFED1FF9E752") (:digest-bit-test 49 #x40 14 #h"BF33D153FA1E72AF4F96A1E61F98555D6138C3322CC7DC94505123E2309D475C4E55AB8D9E9A40DC2F4CB049124FA44BBB4EB596F3F17F9B49E7130310DFAA26") (:digest-bit-test 49 #x20 14 #h"A2038C5F4631FE26A8F3A47A07127E7CF4DCAB4CE571DCFA107BDEF0E442C49998C8415F850AEDB729F5ED53800BF6B96A7196AC673BEAF9906322A5564BD0F6") (:digest-bit-test 49 #x10 14 #h"6D41069DAC1F9AF57815A6CED30B80AC2D58D6BCB6657538CBEB7E58B8BC69552574E22C25BB954E5B97AE3BF366B68BD37A9F2FB61437F4C24B9150A4B79190") (:digest-bit-test 49 #x08 14 #h"A68F882E78EB8FFD3AA8269CDDF22CEDCF79413F1E88279D966A7DB13DF1B7788BB3114364A4B0E46A27F426E771320A6224061507105309F5A092602974FE24") (:digest-bit-test 49 #x04 14 #h"75749813B8CEA722B399D81696F45E5F8738F6F38CAC3C771AEDB3A708F4B5B0E6CDDAE4343A2B83537BF25B3495B3C7045D544C30F99099ECFB9763933B6D8D") (:digest-bit-test 49 #x02 14 #h"3526ADE009678CF578804100C5D9E9ACF50D0AD03CFB71EA7D63D4F85419655A7D41C7FCACCEDA96D454F904B3A21F201E4F2392C414FF9AF68B39F8DE0FAAFE") (:digest-bit-test 49 #x01 14 #h"FDF47B4DF0EFB94CBD2A2BA59FBD6DA7F364DB67C5638CD025505A1D1FF0F3FBBBC952D6E592CDAE2469CE6E6A22E8597C8BE2F79C25FE9ED643CE2B5D3DAECA") (:digest-bit-test 50 #x80 13 #h"EA69CB755DD17AC2E7F7CD27714B37386356A4F2BE6E51565EB51A717D0D56C60DDFF7F919239204A6DA6AD38173234377F6C351BBD152E799010D4BBC35053A") (:digest-bit-test 50 #x40 13 #h"DB8632568DE4BD9624A1F185E997E10025E727E8912C03CFB3D928680241210A09D07CF196F05D54799E206438997121D84E3485BC5CF66580C9E8540A852A5F") (:digest-bit-test 50 #x20 13 #h"9AFB864F0940D70921079B1BDA3E5624966846CC1BDA9297ED026D3100FA87B1D087DA41489CD053F6F7378A37134D2451627A7CD9AD4D3505018315BB9484AB") (:digest-bit-test 50 #x10 13 #h"8E9A112F139B7FF5233EF9A4DF0729FC09A32C50F0FE5013F9A73DC8F4456FE0A1DB5C77DB61933F7614412E4ADE6CF3158E6E3D7B732111B2C6940739B10EDC") (:digest-bit-test 50 #x08 13 #h"D7D65A65CC2DA7A5343782C9F6F13DE7017C65DC561023EEC11A834F0D02E9019A9305C04F21A1146096CC98B7AF5D5F8E36284F763E687E260CE57341405854") (:digest-bit-test 50 #x04 13 #h"13BAAF4DAB74DE595A9A5493C528506CDD932CFE68280291B70979775917DD22E52817CA18FCD48E3B477EC3422EA27181BAED8C47B2DFDFE27F75027017C604") (:digest-bit-test 50 #x02 13 #h"7D6E7DF03BF600629A0681859B02C99143A79AD3A3BD6DC04AF01B4070CF2FC2AD9B604CE8A8BB497F00DB42167514467DDFE22EF29A7034274AC086A80EC79A") (:digest-bit-test 50 #x01 13 #h"01D997D331141B04496C0CE717FD859ADB0D6438A66B9BF99CBD9EB207579B5868B0E17B144D7F7619D75D176F4B13C58C0F942911AA5DE8BA8B09B243F2F23F") (:digest-bit-test 51 #x80 12 #h"A61F82618D0D29FBA5156575E8F0B20E03C1FD16DABD2133BC526539079805056B82DF8665201367F2EEDA7752F8F6DB953ACFE85C4DE2BCC9C475F906DBF2F6") (:digest-bit-test 51 #x40 12 #h"9559485A18DEC0F980F13104320348843FE37A1D08D9E1357B909FAF3D2CD819200D058C5DBA1409F91F02F3DBB98D8839FA2A80720E2BC4BBAE73F57F16151A") (:digest-bit-test 51 #x20 12 #h"A0AF2155C0D5CE99AF7E16A66CB1293D15FAFFAA05347ACA8393496E3BDA9DD50C2D305494BB66C1ADD835992C252AAB43F73025293BE6D3521FE5D9A70ED91A") (:digest-bit-test 51 #x10 12 #h"09EA8D8D5D67F0A3E55C3DAAFCD1A7E3815774572FE95735882A04F2D4385EAD319ED4E4C895CF49D3F0F5AC3D3504F4AE9CD4F1291CBC92301312940655E349") (:digest-bit-test 51 #x08 12 #h"0BFC0D95940237BF56F2EF88B261DF5B974CD4E1A6CF0E03508BFAADF64E44D576CADCDC5B808035B88F3E57AEDF17F455935B4B7F6F316EB62D57906DE724A3") (:digest-bit-test 51 #x04 12 #h"6D79900DA08455D212585241A24AAC3041833E6FDA8437E15E0FFAF3BB43F3624CFC164452ADF8D150E4747F4E3A1328DC00D104A0BAF987860FAD70E1C533B4") (:digest-bit-test 51 #x02 12 #h"A1A2A33950F959CC23A95B64CB4BEF739BF830D76FE1E556956E47074C08C8056929D4D9CAD347FC813246AAA484EC10251FD88E8261EC803F5AD8E75F7FEDF3") (:digest-bit-test 51 #x01 12 #h"9CC796AC88E7062CBD8712AF259E1B3918ED095A08E211929EF7D3491EC7822664A80C278377EDAC610A2EF4E91ED4345C5813560C5B516378C5C89B47B4909E") (:digest-bit-test 52 #x80 11 #h"81A93507AE364F2AE37801D4E3579B73B2AB5012F60C9BBA1B8BE2AAB83A24DE9487688916D00B86FDC1CF57CD5A2611F3FC4B1F90B5B446883A67285F9E286C") (:digest-bit-test 52 #x40 11 #h"4EEBF40A53ED39C20FBC31117C9A13B1B4DC154F1B9450EADF8E8E2E10430272F8624EF961B595CE79E6957DFEB8828EDA501BC341A036DAD43E01590CEEF98F") (:digest-bit-test 52 #x20 11 #h"FD3F2D35F8E384BF2993E9BD52E012322359F0AD8141D28B8BBD6FBE51C48E73BB9FE5886C2960AB0F23C384766630394AD76160A837A757CA20C1EEF559B4DD") (:digest-bit-test 52 #x10 11 #h"C67764739E829373E435F5C9F6F8D188C9B4A7BE566F4F940C2B9A93133612CAA4C135F316C8199A1C082B736B4D9DDE597873BEEECB268E683E8EC7BE8A9162") (:digest-bit-test 52 #x08 11 #h"7FA05C132D736A84D42783060AB946F80784EDC86E1B47E7F96BDBC159080255DEAC0F4FE406F74B45638002765B075DC642497A696FEBF3FAFE3D9D19D19870") (:digest-bit-test 52 #x04 11 #h"2328CB5E6C25DABAADD8441DF688EDBEF4885E481427C8145CAB136D8F517AB264A8E8F4BD058F90B9E7FE3779422E8DFD0B8D6EC060D46EB614DF3E8A1F8A88") (:digest-bit-test 52 #x02 11 #h"9A70D2543E2D3FA2EF0E780E1FEC260F4774372CDF1D046884650B1D142A3E111ADDD4543D2BB82C89A26D25BA89E064E05A41628C9EC2CABA6BAA62368EF816") (:digest-bit-test 52 #x01 11 #h"4BC233CD3F172D549C8999BB689DBEB038C5217D196A33C269760570AFDD99D0B955D3D511AA389E2F80FC7D65FE1856716F923ACABA6B570D6B02530A2C7E20") (:digest-bit-test 53 #x80 10 #h"D158507C1517FA18CD7807A96302AA63FD58AB2998C5DAE604BDA37322C57550103D5835E6C590E0A80ABDB23E4D68E382880EB2CE19F39E90996FE49025E462") (:digest-bit-test 53 #x40 10 #h"D96F87D7110E2B8CEB26CEB899B64B574F20FA700F85FAA198C1E87D5190C7EBB1BEEA24C503AACC955FB37E6A3926D3CB3E341CA42C55F430E9AF7080054A5C") (:digest-bit-test 53 #x20 10 #h"CB22B185FBB00D2E2DD43858A0C822ADDEDD1F865FE1E806F6B3B38853B08339576922A40785A153C1AECFAAEEE892AB23233440EBDE854EA0A11BF11F67F939") (:digest-bit-test 53 #x10 10 #h"8BEEBCA773EBE8662DABDCA3B1159B6FA50996AEC276FC622619C958CEBDB0421D9ED7414F80E577D4CEF087662FA16DE19A87EB22E7536B38752AE31DE8A486") (:digest-bit-test 53 #x08 10 #h"8CB59041478EA74A9925255F718A74DCDD5CFCFA7F849E40B4AD9E97EF3C12A93E0D587C6153AE883ACAC31D0E960B36E14E806673C21CE058EE44E580BF89C2") (:digest-bit-test 53 #x04 10 #h"10C573278BA7AEE3239A43A3DADB3ECA5CB1CCE5C910812D45F8E90BB247CD33615750207526E6B44B95FC2679F135A5D3A0E5FEC2E6F29A6E23EDB3EA824CE7") (:digest-bit-test 53 #x02 10 #h"E051B4720BCAC15353EE9E90A1EB8FF0DEFF003D08B46C37C46BB42DCE7B5D1ECECFA3DDC1DBE4823E48028245890D1A9BC2827DC0ACC2F00CBAEECB8FA8DED5") (:digest-bit-test 53 #x01 10 #h"2FC9874816CB8A3D3DF4081AD5A669A76C7B36D92DAF1FAC18ED7D90304FAAE7AE3C3BD2C4501A4133D0183E2D149D952EEE7D1AEB2C473B3139E3FAAB60984B") (:digest-bit-test 54 #x80 9 #h"F68C393F1863FB7872E7E8134B3A220FA82CF80BB7FD9605AAF5E39F5CA24A8C5B2A3112213D7ED334E46EF96548477AFD78536B54974ACF6759859213A2EB13") (:digest-bit-test 54 #x40 9 #h"44740CEC92333F52C1EDAAD6F8C1F94F78BB62BBB0E5B6B89E9D707C708572892C53319B1C8702B32476E7C4E1EDA37910E04C46DEFCFDF5DC0516B25318475A") (:digest-bit-test 54 #x20 9 #h"D97D7146AB94433AA7E9DB65D8B5088314659B8F901F288968720232B91B2D8BCF548C66D41694717A892D0B7B8DB1DD933B5D2BD88FCFEA87CFBF11570F3ED1") (:digest-bit-test 54 #x10 9 #h"8DEE46170F240A4C170F3F13C941FA753619EDF81341FA099672CB7BE230D3352FBD1692E4D377A8529DBEE2044072F1EDFE08EE1D36E02DA62AEF9BEF962B79") (:digest-bit-test 54 #x08 9 #h"FD36A395C71A8F0C23FF8C7F75B01787A2EB4C51C26A927AAD4E3272A02EABE70CFFBBD0D083E529386DC68213D6EB99819B8E1786DF9943C3F17F9549721FD6") (:digest-bit-test 54 #x04 9 #h"B4FB4206130AA5C4441319576EB8921371244B9BFDB8E1673CDE0BFACB822F36ED1F3E8CD0BA5A3B2D63EA4C8B104671967AAFC4D22857C90BE91E439554C43C") (:digest-bit-test 54 #x02 9 #h"851CCAD13EBC7BD5EC536FC293CC8C4EE39A1E255F50714307B9E696A2144D3C168FDCE58C882E4DE426F0C68319493923B9B0825E7DC70536E0F623F847AE08") (:digest-bit-test 54 #x01 9 #h"A08D8549F9B4B10D2FE0C752B6C34E92E2BAD4EB0AFE42E0021667AE6DABDBCA15B92D7AD59DFECDEA3B3F6F039B975B5711D90002BAEDFAD78A2F2B8A5516B6") (:digest-bit-test 55 #x80 8 #h"2F4CC04DD38D72ECD1FB3904580F2FF8E9D6863A877333B0598FAE24D85670E1963832CF6B2AEA8E73FC9F4F782A3AFA4A07F489CAEE091122B2C58B59917435") (:digest-bit-test 55 #x40 8 #h"3B7631CF56C1AFF70C2B088575782B35DD4332D10488E13D0F719A2727D6DB6B3AAAAFD92011B59C3F2C6846620A8D0BF49FB2D4804FD5DC32E33D117C1EBF66") (:digest-bit-test 55 #x20 8 #h"F333F6A1DBC56B73156562E0E9BD571AFBCAA4AD69B1C0A7CB2FBED45106F8C8DFA4C184A475F88B2002E9E31C57840A148BB7D12D267E6C55CDB566BE74D816") (:digest-bit-test 55 #x10 8 #h"4EA38C2D2536A05B83C310AB036966CD407983FA9506F840DA3332F5082E15BF88AAADCDBA00383EE05502A9F8945D489A9407A93574A6B856CA217153053997") (:digest-bit-test 55 #x08 8 #h"2D05C9DE322326BDAF96BAFA893E4026BF7FB9F5D62325A68DFA3B0FC9488BC42B04591E8719EA26A2AECE75B0690F9EC833A2827080C50941691D0EEFDB1EC5") (:digest-bit-test 55 #x04 8 #h"F7BBA4664D418305EB0945A9270618C39FC33AF1DF56D010E2D6A9E1AAC994EC8E5D81AB14D0598F563B450CEEAD416F857B08C86822B34A901ADEA8B7AAF992") (:digest-bit-test 55 #x02 8 #h"8C6FA6625D34DEF8AE6E852947E963C679AA2406D85850B7F53450990B047F99FDB2C4C24F8EF9725102605D41C41408DA23E4C9E8E19F100974402F3E92F4D8") (:digest-bit-test 55 #x01 8 #h"343CD009F39973072A563866F8F4681590A7BCFAE041DEAD5FBD7E128FE61529C5636BACDE3D0BF30DFB55F8A613D4536D0DCD590BE479C95B604972F7B806A2") (:digest-bit-test 56 #x80 7 #h"B61B70AD156AA68FE1E63363421B60CCB8E0E6D85C0F0884CA4EADCAEA60FB04BF9B96B3759BF4790A3BD2D6CAAD48DA3F99615C47461D15993CD4F174FE6A1B") (:digest-bit-test 56 #x40 7 #h"6097C70A7662980088D9D0254BA0CE48ED5788FA2F48E8FEE465AF05D8A775F62AE460210C86BDB35CA65985BE92974223F5CC0DB53838CD7F1F8345845B0480") (:digest-bit-test 56 #x20 7 #h"28C0E325105ADDDA3D15D3AEF4BFB0D9320C5992DAD052221D0B75DE8BDB2CC03E5326E373AD003550C2AFE046D2E916FF4E6315F356FFB24DCF99880E935ABF") (:digest-bit-test 56 #x10 7 #h"34C81C1B3992F305468ED2CD97A2B45DADB05865DBC1F68019625D57B3803E9548B95E4EC6D03739FDB1573EC4FBD27F5A5543E04ABC2823F6BE91D37C8ABA4A") (:digest-bit-test 56 #x08 7 #h"8AE6C50179F727C1738CD1877083A140B25AA629D4CC1EBD82E0F6567539FEAF4E874B02D2F215BA9463CB1A226D0152DD8BC9C7991A059B4E25B0D7D6D982DF") (:digest-bit-test 56 #x04 7 #h"E55207D274825B0FFBB3F2F7FC9434C11E52FC0A704380E4208072FD0CB7E169C683F5A67D6B34C1335A565C65CE74D70F7779F1FF859E4D4F3BA4EBDA4A05D4") (:digest-bit-test 56 #x02 7 #h"CE44520AC7BE9B162DD0DD9A2F1E9869B7CDE670435E5A8BE3992F0AB21E25000BB23BD23DB9C91741E8F8471562D6697C806654B11C1A96D944D7A3F6203A49") (:digest-bit-test 56 #x01 7 #h"7EEFF2C0786CECE0A0442948663A8F3952C756E7020AC19A050E8668108BF062A0D2F61AF38E7E53F825781F5F6F80662CD3676FC82EF4E0ABB8F01368749ED5") (:digest-bit-test 57 #x80 6 #h"D58737DB6CAACEE54FEA2B2731C9F20350987A8D0C5F60D6D3086EFC81D4DF9DCF9B6836F6A89B8A6197628A18CE92CC68000DF8CFA6F16374A5624CEC0FE857") (:digest-bit-test 57 #x40 6 #h"0D2F1495390183D84C0A5D68515B48CFBEB62027E3970FA41380D8F99C5B6C58FA18756FE6CD5EA60A79271285223456B87A9192B1E5778C9BFC0B7E4964DFBE") (:digest-bit-test 57 #x20 6 #h"0E46D3DA58447C267CEFB8EF3EA8EA754893E1FA570A16E5CF825BE20B45501D9D7FC42D42F2A3D784050E1866C7B6B3B778DCFE5DADC59199EF70D07C772824") (:digest-bit-test 57 #x10 6 #h"D3FFBB932B17C5BEA745BE0CDE5138EB1144E5DEB8850C7A34B68207FB5E4B88B210E54E0BD79B7E8FFD1C007A8CAA56FA2FB806A6B1B0EEE9EBBE46DA34FEA4") (:digest-bit-test 57 #x08 6 #h"EB45091BEB7E8D0C702D11DBFA4664B0070884169D385AEC6A031CB28EF3A778B55261FBF118D746FE4AC23E808E4F11B3B2E67ECFDB1EDF8EC35BD756F9BA5C") (:digest-bit-test 57 #x04 6 #h"5370930568308D50394DA5D1B88F8F294881B81C7C2566D622EB1506DBD8BCA9E978B78E2F16C1F0F4B17AB2BE880000F020A1A9A2E1BBB449A1B57F1D96DD5B") (:digest-bit-test 57 #x02 6 #h"CA88E9181BF0764C25E5C161289F1B8B7A04CF631D155DFD0FF87F9E71BD9B2E0D3B80041FEFE1A0667CAC959145CD5202CBB15CD1DB746C6798ADA14384C0BC") (:digest-bit-test 57 #x01 6 #h"DD7BC2B4815D133621DEC056EE17AB1AE1B069D437FC3D229BC077A7513785F22910CA62AE695F47F3F6B5EA1D0321F514AA0AC4D094E14CB043002A6858D485") (:digest-bit-test 58 #x80 5 #h"A094F2A798063958830A1131A6BCCC47DE68FDEEE32E2CA2C66F86B8F89900516BF979580FE91C43DE080DF67D1E77F730D078C6A7F18CBDB7BD0BE173AD0389") (:digest-bit-test 58 #x40 5 #h"4E60423EB5B7AA985D56DEF9A11E3353AE67133F1B3587C1A41F1A21877C7161C79926EACADC7290C30A8B9426A21698F95FB58E21F3BC2A40BC2375CC0E5235") (:digest-bit-test 58 #x20 5 #h"D7D1E0B7830BD4CB240CC6E075E4BDA039EA670BBECDD50AF103DFAF8A67063A5C4CE3593871E9FAED3A6A85334FE925F13AFE32CC81A85CAB00A797C191506F") (:digest-bit-test 58 #x10 5 #h"DD98D17AE17295F1CE155FA905AF08B15611E60DE7B88F20E5F7D9662EBB8B6C0C10D5866BF06514B61EA931908323527939ABE4F04A5C1F4A07B246770D265B") (:digest-bit-test 58 #x08 5 #h"77FF15E968645D3BCE6529AE792695FA9D707E33724C60DEE76B26BED3C48969605D8E264E3BDA22F0AFA1D34BB6428F745E67DC9BEBCCEFAC21E4F03B97727A") (:digest-bit-test 58 #x04 5 #h"36BA8F0D0B5DEF0A208AAC91DDA52D6EE568B85B6CE635783DDC7CB1497494E949BE9C3E01A291CACD0D95F167A8BBE97F20B7F2F314D2D7389A5BA50898C4D9") (:digest-bit-test 58 #x02 5 #h"66B40FED2160CE54385D591B20C57B0BD6B8356F456F65B73A0988A5C56EF1D76AD8596C07DC98C1CEC4F8227B418222F7DE631BD4BD6A145F4506FAB4DA8286") (:digest-bit-test 58 #x01 5 #h"15683EC859B4E8E7E250FB52B213D9C79800B0E1906F0B4C74BCEEFE499D591144AD67EBBBFB65F64CAF6A289FB893DE8D90A347CEF3FA58E940603087C128A8") (:digest-bit-test 59 #x80 4 #h"4FECC42F6D9D206E3BC47E11C292835239B93EBE8453C097F4F0C24CB0966BADDF21095BCE26A0399E88719067E1A71D2D578A745D31D90761E1D02F2AAD152D") (:digest-bit-test 59 #x40 4 #h"5EC9EA77D1AFDA51405C5D3010C09BA0053A425B33EF0825156758AFBDDD803C7128B418FBAF56E40F31DE2BDB2BA802D9F36FAF3A4E5DD6BD37287FCF4F88B2") (:digest-bit-test 59 #x20 4 #h"B42342C0969EAE8C3881CE80B601516EBE5FEA463CAA6B24D0CCAA66462D9EC91DE32B7230558D8913EFFF44C568885F226B70B1341EB025C6ACC2478B0B673B") (:digest-bit-test 59 #x10 4 #h"0F94ED73EEB5EE9913161F1E35A0941B0FC397BB08FAABC01F62127CD14612F44AD999E15E21B08F9E7ABADE213FCFC03A635A94D51CC6DEC3119EF15BF3E90C") (:digest-bit-test 59 #x08 4 #h"CEBEE3823964A072E7268CC01D6A0CF5963C4A2FB35B849D2AE5E6F162C05D569E60CA32B8B084A0A853DDF9AD9D8AB0AE9FD7189B8B7ACB90BB841F68F694FD") (:digest-bit-test 59 #x04 4 #h"A7238DBF7668B0BD94D8A990625FA4FEB58197CCD313BD7B914653CBDEB069A927DDE3EAC45180E2EDE6CCF36EDD6894CE57681A11B149E00B36A15E0610BBEA") (:digest-bit-test 59 #x02 4 #h"516CFE773620C66828CE60B63D658656D2C05E438AB630AB67181D4718CF146372B82C6A28048E59DE419E92B224F58FE5B7A9390F914FEBB5153C2EBAB3E0BC") (:digest-bit-test 59 #x01 4 #h"79EF809A330347C7EF7910750A739E92A94CF05E3A81A68C090E85CBCE8763B10472206966394E8BF9E8D934DBF1CCC8C171F32C8152C17A45BC6B0283C1A9AD") (:digest-bit-test 60 #x80 3 #h"DC98E4A347C69F7CB06C3CBC60D44C1B5278B5EE16D1C6950B7444F44FE517F9AC284EC808738D01086270FE24C78957C4CB073DEAB3B015588983B86CAE4E33") (:digest-bit-test 60 #x40 3 #h"840C65EF0ED3CAF5351396C2B3349D72EAFACB53BC483778FE209B94A5248BC62090BF6E5E19D200DA20A76ED31DDA39E5F21FF506289279277D483DB12BA6F7") (:digest-bit-test 60 #x20 3 #h"44B8FB2C2BA4C20D140A954D76251E82D6BDF446C96A89908673E8E7226EB8E108614FFC4E282BA7DE021FDCF58BA6774196615073F213F9EDE25B316FA044FB") (:digest-bit-test 60 #x10 3 #h"B88818996D0A75B65054BBDFBBC24273E1123291D58B0347AF2764EA4323B2D48335AC8C5D0B4AEDCFC4E8C4DCFC80B3ED3707EE17ADDD0F301296FA28C49A21") (:digest-bit-test 60 #x08 3 #h"BFC8806B7DD38F0D2A45C3425F6F6AD2E31DD61BB19ED51258164AADEB218FBEA76F5C6900F37D8976E0EBDA4AEA22E75F44C98F990C34F1CA60042246F62E36") (:digest-bit-test 60 #x04 3 #h"CC0D6B8C5B0D6FD469025640E0F21DAAE7C0591129CF170D2E76C18DB3129747A6B2C22D5581A606FE749F2AD108433426225F24F47A89D41C32F00F6DD08ABC") (:digest-bit-test 60 #x02 3 #h"7DFD9A3F16171369C535E0DE475E1BC82A5D13FD34AD5CD3D472035B40450EAFA749DC37DA62F7F23C0957BBB932ADDC94330BB1B59BC461243E8CC7E39FA6B0") (:digest-bit-test 60 #x01 3 #h"CCCE96F690D865A220A7C8130BD24CE5016BF46BD6A4C9D882534E7067C0C97772DE316C829CBD00F68FFE5784244E0C209DE0E0AF278B5377F398A3B6C32FE5") (:digest-bit-test 61 #x80 2 #h"C7B8A88D353F919FCC3B666FB8AC8D8FB24542486C15A0E461ADE1713E317E962C72DB43DD941BB1482BEABB7B130076FAE47565D9A11146F02BB81ED3E09CD5") (:digest-bit-test 61 #x40 2 #h"123882AEF7A198D7BB5095FA2FB1822700DA042AE4D161C05298A0C3718964529FE964A96E627C06EA014C4D2ED28A190CE8745254D6C86F9374704C7FC0985D") (:digest-bit-test 61 #x20 2 #h"94221E6CC44720A69A73B875ADAC569FA2159B1C3038A962BAF12CF4B5F64715A21A96D9AA4B7AF2763C5B35E4318C68A1EA19A5AFCA98D02BE6B1B99871F8C3") (:digest-bit-test 61 #x10 2 #h"CAF89DF4AD3C01277237BB3888D308C69D553CC95D3A81ED88BE55835CEC786342AA58E076E4ABF40FC2E32D7B334D8E363F6EDBB629C6C6FD6E751A2BA86CE5") (:digest-bit-test 61 #x08 2 #h"35042B3DB2FD94E5441B4C31C8B4E8B2ABAAA8D5EF3EBDEF45F77799052D7AD5689AC997B3582D023AFE09246DC796B25A57D21AC29023A2C6D7CC6D3FD8450C") (:digest-bit-test 61 #x04 2 #h"FDF49B72D5AFB44388B5B28EBF7DA56CBC0E52F8B638B7F70FF8DF8916A2CD8BD1363A776BD4FC3CEC4126DC3725E9889C127BF222F1889875739C77CFF0C283") (:digest-bit-test 61 #x02 2 #h"53E0CF24892C07E2647034267B78202F439A27A48320CD29F3CC381F31DCCA4C561C6551479964BB66E3092ADCFF46BFC680E62D3C6B5FD90CB94C666EEABAE9") (:digest-bit-test 61 #x01 2 #h"271DC9151D8DECEADC97B1ECCD5F4CBE2357BA4C20BAC6800431269A32B6715144EE8B8EC9191473FF390C04E78C6DE6F0A8CBA9EE18100559F415B17DFFBB97") (:digest-bit-test 62 #x80 1 #h"5254D3F778D35A1A08B090E7C54E7ADAC5F0560B0000D141FEF386E76221632662C4028C4ACE4B6267998D5C9078204CFC58C19A320C54AEAE45BFBAA7A28520") (:digest-bit-test 62 #x40 1 #h"7495E8F64EDAE4CD0E58726379CFF623A981CAF800A99BC33618E53C79EBD5866C258DBA46EAD1AB20F111076BC2AF12F1ECCA509020F32B3EAC6ACD72B346E7") (:digest-bit-test 62 #x20 1 #h"AC6671FB607C0841E06412D64C7417FC560691DE7640D1B422843FDD74E4CA4CF5E6A2691FD7E8B690F3052E01F7E0E54B9CBD1E6421007FD918C2C87BA393F5") (:digest-bit-test 62 #x10 1 #h"CA0BAD33E1B7A2C227789460766B66E2173D149FA58801089F1AF7E2DF3E4980EFA4EA27606FFF2FB20DC2B331B866FD50938C1F012110A3777F7AE54FB333CF") (:digest-bit-test 62 #x08 1 #h"2047DD721D2E159BD0698B756DC09A4E4B70CD965BBC60D25BCAF9B6AE6671C215BFD53F1130734DB5B0E23A093EB31E19D79E073A074A1D3CEA8274ACBAC5F1") (:digest-bit-test 62 #x04 1 #h"4C455263B5077C0168BAE0B20DB9545FA6575964DF7C4CDBC893F322DD90D1D1F89F3C8BC85CD56D7170A01A371F2C39A90A6714E7F20F81F9C6022AA75E8419") (:digest-bit-test 62 #x02 1 #h"C7B4ED422B58C3150229612E096FE9DC9498728468477C9DCAC3691D7657B1EC13BDA8005BE91F3A5622A12C87E0497DAF626C58B83B83AEF0741F019DCDFFCB") (:digest-bit-test 62 #x01 1 #h"ED6BD216362CA0DBF651E40AD73D4DA07211CA4BB324505D4C3E531031B63019F8F6B1819715F8F4CAC091AD636A33EAC2677C81EFD7185F382D1C1FF88EA22E") (:digest-bit-test 63 #x80 0 #h"0813B60406C753F8C2C0A843BC4BE0EDDF77DCB5AC16075BA04CEA4A321F3CC5697182A501EFD3F9FD72BD448A0573C310A10D223B5E43C4F2B3FA9E0480637E") (:digest-bit-test 63 #x40 0 #h"D7AFFBC1CC58536AEFF876AF9EB9A4884CAEE57EDAD98BA4AFC44AFE55D735D7419EE13109965E56A5A1FC76D225E2EC484F7C3303B91B16E0E41B1B95E98D4D") (:digest-bit-test 63 #x20 0 #h"A3302F92B5CB0A103DF25FA8AA375EDB2F4AC323E1AC8D12C6BCC5467C8837D86C97DDDD114A2E30D245CBA0B9D3772645A64A29A447B1F656FECB026F32FEAA") (:digest-bit-test 63 #x10 0 #h"241EE38D4511ACE1E7BB519083FA550C7955F961E83C7C7490AB521EF2117FE33B2D1A59134EAAE2CC5D41B4F9A7DDEB8D1C05D1387B9C647798F89F2B211757") (:digest-bit-test 63 #x08 0 #h"B6A4A828466F3F4FBC707DF1ED1321E7A6728B1DCECAA24375A5950D0FB60B59D86C0C02678907C35C62D2BD65019BC80240E25BA3CC01A2338299E13F23154E") (:digest-bit-test 63 #x04 0 #h"4895EBBD90CFDBF45D6CACF29DC6A5EE8BE1BE3A396F871ED8D60B89C37FFDD64ECAC08A43A9F5010254832D9AAE0B594B2FE2546531A2E76FF3E1DD1BA254D3") (:digest-bit-test 63 #x02 0 #h"D966D0EB0C6EE7235DC135B8DD86F128CEE6F83A81CC1FD54DF358D421154DFC94B82CFE69777E73C68CCD5B60D597A2432A1BC2238021B0A4F73ACE8E9D96BD") (:digest-bit-test 63 #x01 0 #h"3A621DA1125ED4AA186EDC9E26F0E5560504CE8BC7C309AFE5D3002E38B338B5ACBDDCC1CA253B088BA69B69478A94F03014D22A98E9B31D67894426E30F3511") ;;; byte-level tests from NIST's Cryptographic Algorithm Validation Program (http://csrc.nist.gov/groups/STM/cavp/index.html) (:digest-test #h"21" #h"3831a6a6155e509dee59a7f451eb35324d8f8f2df6e3708894740f98fdee23889f4de5adb0c5010dfb555cda77c8ab5dc902094c52de3278f35a75ebc25f093a") (:digest-test #h"9083" #h"55586ebba48768aeb323655ab6f4298fc9f670964fc2e5f2731e34dfa4b0c09e6e1e12e3d7286b3145c61c2047fb1a2a1297f36da64160b31fa4c8c2cddd2fb4") (:digest-test #h"0a55db" #h"7952585e5330cb247d72bae696fc8a6b0f7d0804577e347d99bc1b11e52f384985a428449382306a89261ae143c2f3fb613804ab20b42dc097e5bf4a96ef919b") (:digest-test #h"23be86d5" #h"76d42c8eadea35a69990c63a762f330614a4699977f058adb988f406fb0be8f2ea3dce3a2bbd1d827b70b9b299ae6f9e5058ee97b50bd4922d6d37ddc761f8eb") (:digest-test #h"eb0ca946c1" #h"d39ecedfe6e705a821aee4f58bfc489c3d9433eb4ac1b03a97e321a2586b40dd0522f40fa5aef36afff591a78c916bfc6d1ca515c4983dd8695b1ec7951d723e") (:digest-test #h"38667f39277b" #h"85708b8ff05d974d6af0801c152b95f5fa5c06af9a35230c5bea2752f031f9bd84bd844717b3add308a70dc777f90813c20b47b16385664eefc88449f04f2131") (:digest-test #h"b39f71aaa8a108" #h"258b8efa05b4a06b1e63c7a3f925c5ef11fa03e3d47d631bf4d474983783d8c0b09449009e842fc9fa15de586c67cf8955a17d790b20f41dadf67ee8cdcdfce6") (:digest-test #h"6f8d58b7cab1888c" #h"a3941def2803c8dfc08f20c06ba7e9a332ae0c67e47ae57365c243ef40059b11be22c91da6a80c2cff0742a8f4bcd941bdee0b861ec872b215433ce8dcf3c031") (:digest-test #h"162b0cf9b3750f9438" #h"ade217305dc34392aa4b8e57f64f5a3afdd27f1fa969a9a2608353f82b95cfb4ae84598d01575a578a1068a59b34b5045ff6d5299c5cb7ee17180701b2d1d695") (:digest-test #h"bad7c618f45be207975e" #h"5886828959d1f82254068be0bd14b6a88f59f534061fb20376a0541052dd3635edf3c6f0ca3d08775e13525df9333a2113c0b2af76515887529910b6c793c8a5") (:digest-test #h"6213e10a4420e0d9b77037" #h"9982dc2a04dff165567f276fd463efef2b369fa2fbca8cee31ce0de8a79a2eb0b53e437f7d9d1f41c71d725cabb949b513075bad1740c9eefbf6a5c6633400c7") (:digest-test #h"6332c3c2a0a625a61df71858" #h"9d60375d9858d9f2416fb86fa0a2189ee4213e8710314fd1ebed0fd158b043e6e7c9a76d62c6ba1e1d411a730902309ec676dd491433c6ef66c8f116233d6ce7") (:digest-test #h"f47be3a2b019d1beededf5b80c" #h"b94292625caa28c7be24a0997eb7328062a76d9b529c0f1d568f850df6d569b5e84df07e9e246be232033ffac3adf2d18f92ab9dacfc0ecf08aff7145f0b833b") (:digest-test #h"b1715f782ff02c6b88937f054116" #h"ee1a56ee78182ec41d2c3ab33d4c41871d437c5c1ca060ee9e219cb83689b4e5a4174dfdab5d1d1096a31a7c8d3abda75c1b5e6da97e1814901c505b0bc07f25") (:digest-test #h"9bcd5262868cd9c8a96c9e82987f03" #h"2e07662a001b9755ae922c8e8a95756db5341dc0f2e62ae1cf827038f33ce055f63ad5c00b65391428434ddc01e5535e7fecbf53db66d93099b8e0b7e44e4b25") (:digest-test #h"cd67bd4054aaa3baa0db178ce232fd5a" #h"0d8521f8f2f3900332d1a1a55c60ba81d04d28dfe8c504b6328ae787925fe0188f2ba91c3a9f0c1653c4bf0ada356455ea36fd31f8e73e3951cad4ebba8c6e04") (:digest-test #h"6ba004fd176791efb381b862e298c67b08" #h"112e19144a9c51a223a002b977459920e38afd4ca610bd1c532349e9fa7c0d503215c01ad70e1b2ac5133cf2d10c9e8c1a4c9405f291da2dc45f706761c5e8fe") (:digest-test #h"c6a170936568651020edfe15df8012acda8d" #h"c36c100cdb6c8c45b072f18256d63a66c9843acb4d07de62e0600711d4fbe64c8cf314ec3457c90308147cb7ac7e4d073ba10f0ced78ea724a474b32dae71231") (:digest-test #h"61be0c9f5cf62745c7da47c104597194db245c" #h"b379249a3ca5f14c29456710114ba6f6136b34c3fc9f6fb91b59d491af782d6b237eb71aaffdd38079461cf690a46d9a4ddd602d19808ab6235d1d8aa01e8200") (:digest-test #h"e07056d4f7277bc548099577720a581eec94141d" #h"59f1856303ff165e2ab5683dddeb6e8ad81f15bb578579b999eb5746680f22cfec6dba741e591ca4d9e53904837701b374be74bbc0847a92179ac2b67496d807") (:digest-test #h"67ebda0a3573a9a58751d4169e10c7e8663febb3a8" #h"13963f81cfabfca71de4739fd24a10ce3897bba1d716907fc0a28490c192a7fc3ccb8db1f91af7a2d250d6617f0dfd1519d221d618a02e3e3fa9041cf35ed1ea") (:digest-test #h"63e09db99eb4cd6238677859a567df313c8520d845b4" #h"9083e5348b08eb9810b2d15781d8265845410de54fe61750d4b93853690649adc6e72490bc2b7c365e2390573d9414becc0939719e0cb78eca6b2c80c2fda920") (:digest-test #h"f3e06b4bd79e380a65cb679a98ccd732563cc5ebe892e2" #h"6b315f106b07c59eedc5ab1df813b3c0b903060e7217cc010e9070278512a885008dac8b2472a521e77835a7f4deadc1d591aa23b624b69948a99bb60121c54e") (:digest-test #h"16b17074d3e3d97557f9ed77d920b4b1bff4e845b345a922" #h"6884134582a760046433abcbd53db8ff1a89995862f305b887020f6da6c7b903a314721e972bf438483f452a8b09596298a576c903c91df4a414c7bd20fd1d07") (:digest-test #h"3edf93251349d22806bed25345fd5c190aac96d6cdb2d758b8" #h"299e0daf6605e5b0c30e1ec8bb98e7a3bd7b33b388bdb457452dab509594406c8e7b841e6f4e75c8d6fbd614d5eb9e56c359bfafb4285754787ab72b46dd33f0") (:digest-test #h"b2d5a14f01e6b778888c562a059ec819ad89992d16a09f7a54b4" #h"ab2e7d745d8ad393439af2a3fbc9cdc25510d4a04e78b526e12b1c0be3b22966872ebe652e2f46ed5c5acecd2f233a9175dd295ebeb3a0706fc66fa1b137042b") (:digest-test #h"844b66f12ba0c5f9e92731f571539d1eef332e1549a49dbfa4c6de" #h"c3f9c5781925774783ae9d839772d7513dfcea8c5af8da262c196f9fe80135b2b0c8c6ca0a1604e0a3460247620de20b299f2db7871982d27c2176ae5fa7ad65") (:digest-test #h"6b6cc692d39860b1f30203653e25d09c01e6a8043c1a9cb8b249a41e" #h"2e5263d9a4f21b210e0e161ed39df44102864325788647261a6e70ea4b1ee0abb57b57499bc82158d82336dd53f1ef4464c6a08126e138b2cc0892f765f6af85") (:digest-test #h"ab1fc9ee845eeb205ec13725daf1fb1f5d50629b14ea9a2235a9350a88" #h"72d188a9df5f3b00057bca22c92c0f8228422d974302d22d4b322e7a6c8fc3b2b50ec74c6842781f29f7075c3d4bd065878648846c39bb3e4e2692c0f053f7ed") (:digest-test #h"594ed82acfc03c0e359cc560b8e4b85f6ee77ee59a70023c2b3d5b3285b2" #h"5ef322cb4014ecbb713a13659612a222225984d31c187debc4459ba7901f03dac775400acfe3510b306b79894fb0e8437b412150c9193ee5a2164306ebb78301") (:digest-test #h"f2c66efbf2a76c5b041860ea576103cd8c6b25e50eca9ff6a2fa88083fe9ac" #h"7978f93ef7ed02c4a24abecba124d14dd214e1492ff1e168304c0eab89637da0f7a569c43dc4562bdb9404a018b6314fe0eebaccfb25ba76506aa7e9dcd956a7") (:digest-test #h"8ccb08d2a1a282aa8cc99902ecaf0f67a9f21cffe28005cb27fcf129e963f99d" #h"4551def2f9127386eea8d4dae1ea8d8e49b2add0509f27ccbce7d9e950ac7db01d5bca579c271b9f2d806730d88f58252fd0c2587851c3ac8a0e72b4e1dc0da6") (:digest-test #h"9f8c49320af9370cd3db20e9b50d3eaa59a6232d7a86fb7d472f124508d7968b05" #h"81b002f15c4d48be8517f7ed89df302fb1435c9435efefed58f3eb8ea11910623f1eb9028a66e02121a7f08a7c604226f2324f483e91548dbbd2c441ab704ce5") (:digest-test #h"4ab9aa069475e54b25e5688a52dd4acd134169c858105f01a0a1b134c72d4af51f8e" #h"48ba5a63aba7e7bd8e420475331125a947928c67fdb00f65c4080d9a0b99c0672424e76a1ba6bd76dfe492c730f6f9adccaee7bb11571aadb31f6bb628cfa933") (:digest-test #h"f0c1d3407de92ef7421e42df5c9ab31d2ec0a750a9522869cbe4cabd66908d5823ec04" #h"9e75c5bca2c2af1d7739787f46e1d981c4f98e493d0724b5252c2fbae3c526719f1d27e6ccd0d705240281e8fbf3db75b9b3205c1413436d3b5d140004b8cca1") (:digest-test #h"ae8c9f8fb41b519b6d943833fe1c32d1c4292fb1ddf1dbe2eb227d9e14d31ed74ebaef12" #h"042f9fd0a4ed3d9fec3655ae11011c6f2bc7e457e8812b6d8be2cd45fc6c432a94558c88f22c01439618865e8e49e509c448b342ca914b120344aaf7bcbdca18") (:digest-test #h"da39fb86237f00303844e61fc6cfe779e42af53349839590bcd2f0e4cbbc279ec0b7e885d1" #h"ecb43de8c233a731b38e30c5696f8876761b7ea72efe283fd07bedf20029f47c6d2a4427823e100fb087abaf22d7eff42a951c97c3dd05f48a20163fa4367cba") (:digest-test #h"3e7271d2070ef095394620c4b016576c150f34bea60784613a0f660d7fa5ae56872b88c58398" #h"8154d0da634ab2266061acc123acb407650ffe9164a22de3fe29bf05393b2aece92cf4db00ea5b4341c31ddb7de151683c8a71b5a44d5c3175790feac67d18ee") (:digest-test #h"311fb67f6a0784bb01a2d5a3f3092c407a9d3322319dff9a79f894291c5fac37319fb408402e18" #h"1870fe913abb0a4b4f53b6581ae18322cd05328514556607f3f4d7b6a2ac8e9185d94d947d8b9c88e0efa66d89b59f7439c75fdadd1816f7412306ab2b59d664") (:digest-test #h"7651ab491b8fa86f969d42977d09df5f8bee3e5899180b52c968b0db057a6f02a886ad617a84915a" #h"f35e50e2e02b8781345f8ceb2198f068ba103476f715cfb487a452882c9f0de0c720b2a088a39d06a8a6b64ce4d6470dfeadc4f65ae06672c057e29f14c4daf9") (:digest-test #h"dbe5db685ed7cb848c094524c1723519d49dc66ef9fe6d57e6862a6435750bfa0a70f104f5d396e61a" #h"2fa6e5b2c443a68050f093e7fb713bd6b18f6274c061ed61d79bf0688a61dba1940bcc30998276860943ab038902896d0fbf59b88b07c80de927037097150c40") (:digest-test #h"9fa83e96b2a6df23fb372895015678e0b2c9cd18a8542c3eaa2c435a76ae4dc9bd5136d970daff933acf" #h"3a2c0ec88a3e5347cf0ea9c078838300ef7356f9a6c342063277c106b880a00ed2be205c13064097bd372fde38007bc306561eb4e74bba2bb20bd354aa690ca6") (:digest-test #h"8a5a45e398bac1d9b896b5a2b4e3566b91d80ad20c977ea7450ff2efb521d82f65019ee762e0c85c6cc841" #h"3c704620f4066d79c1ff67752980f39ef3d9c1023fa5a213a5265376b14a15166ffe069b51df7710d8907fef9406bf375d502ce086ac82aff17229aaa7a5a334") (:digest-test #h"49cfffdaf4d031e33b1d28a447450545f6c4293b38d5afbcb9883976c014f080576ec691ac1bff70b742efab" #h"8bcc4f1ea2b7862ef1591bfa73916665de8faf65439ddf5cc1be43cebfd5f60f205e835a2b186b675b041258c5cff42669316ce25b46a2f4d4218e102f0f5d6f") (:digest-test #h"2ff845d85efbc4fa5637e9448d950496f19d8d57da99b7bd3df7474822f0a790586736416714e364c6e1fae04e" #h"236f6f4ed6e858c02d51787e60c578f731f694f8e52b5df4ecd5b04dff14c78e56bad1028d6f626c29d85aeee151a2a2846d3eed5cfafa9854a69fea8af6d04a") (:digest-test #h"cfca05fd893c0f005f5ff796f4da19ba27a1e729956b8b715e67ce4b2d2a382a72ec7814f2f507b1825209a20fcc" #h"d80969284a4565add4dad6ab9b3bdf53446142f84aaf92d4b23dd22ee7241e6c81489ac8b246edcb6df9bd7b23d91a0c517f546feba4ed5790a2be6e165c1709") (:digest-test #h"cfc425759a9c36bb9f4b32eed7767af6566f68ded0adeae25c7a70ca78ec09774d16c8bc357f6d6f7bd441bf62d942" #h"b587a785cdf455cc9c544e756c1e306300aa3c59f8725012e68ab4d54020b6d227a164d9f83c905e86f8cebeef708a69f976d6e7b18b9bf78e9b98cc4a5cd1b6") (:digest-test #h"097c9db919515242c99d973acb1dc4ed482768f974eb83b465f9f6c82503372006e4490835e2ec8f92301130bfb790b2" #h"ff5a376f938e73014caef7fe3962944a7230d020b7087869ebe7ec70302721cd06fcdc981c893a425d05e2f99fe198e4db50a088aee2bf1263212110efed422c") (:digest-test #h"77e73d387e7bc80419ebf5482b61d5255caf819fb59251ff6a384e75f601ea026d83ef950ed0b67518fb99dee0d8aaef1f" #h"c4c89cd882ec945cc888fb9a0127d35e585ecc14a75e4b5b3d8330538d22da28cf6af1ebec96dc247f109cd2aaab9756e6946a3d80db8363a4da3e6ddbb510a1") (:digest-test #h"317e5d9ac73ed0633fa18ebebbca7909ec3a5ef790478f9c38cacec44f196d895835b425774483043341381e7af2d383e51a" #h"b10bb04491b9c0c334709b407cda1d503efb6b63ee944f2d366b6855e6e63e5b80115be4be7ff63edecdfb5923792e68123976d79212b3884dec2179d1fcf382") (:digest-test #h"209461f20666a346fedf4a530f41a6fa280c43665767be923bc1d80bbcb8c9f8f93ad75782ea2689c8c5d211d2053b993145a0" #h"67b7a328d9444056a52ca2f695c5d3f3baafb625a14fb32eee8ff26a40ccb296bec1771a826b55f7ddb6170d4caf7795b612448e66a0f19356fe505927149b47") (:digest-test #h"5d61aa45c446f3bf93604b0511313b4e2f306d6b046fbd94797b926746836f2e1dbdc56124060c6ca9c911b1122192d112420827" #h"d3931bde2bde8271ed18ca0b9148b12f6f16161e637e376fc961f65bc33bcacf2f6addf26a3eaa81b196653cc37e8a739ec5b3df870d8c38c8f28691c22a39bb") (:digest-test #h"9288c795bb0b86c0419d9c5637dcc37b39bfa18d441e3fbfca75bc0306e5432e8e7b3a5627b5bc7fdc424a77520abdff566e7f2bb8" #h"e363d0e95d8cd18c384016ebeed6d99c4fa2768e2bd58fca019c5108b9cde1cb46f3f884028a55ce282ec310a10037faa1b16b4a6a669957f0b00f350bbd63d0") (:digest-test #h"780427dc164b2f69b8c7d569266f461e2d30c88c4cd6057fb030a6cf636f24e3c0d0db742a7b6193fdaa15eec50dfb4fae6ec7653c91" #h"2964b009fb1bf996de12e030b9d6e0608ae8b9dbf2acfb9beb76fc5361cc104ee85c2a46fb7b4cee90848312da302de49afe61c546477e2b25d223d5e3d33560") (:digest-test #h"ec2a92e47f692b53c1355475c71ceff0b0952a8b3541b2938270247d44e7c5cc04e17236b353da028674eab4047d89ec5dad868cfd91ce" #h"c83aca6147bfcbbc72c377efa8d53654ba0830c5a6a89e1d2a19b713e68fb534640deb833ca512247166dd273b5897e57d526f88eef58f6ff97baee0b4ee5644") (:digest-test #h"c99e31ad4e23ac68e15e605d0b02437f8147c44f5445a55b68a10905276cce8676481c33e8cd3efe322bb13fe0107bb546ccbec7b8b38d10" #h"52992d45a88221d972958e9f2854adaa9a21d2bf7051e1f1019ae78004da50c5b55c144a02afffe539d753949a2b056534f5b4c21f248a05baa52a6c38c7f5dd") (:digest-test #h"9aa3e8ad92777dfeb121a646ce2e918d1e12b30754bc09470d6da4af6cc9642b012f041ff046569d4fd8d0dccfe448e59feefc908d9ad5af6f" #h"994d1cda4de40aff4713237cf9f78f7033af83369ac9c64e504091ea2f1caff6c5152d6a0c5608f82886c0093b3d7fbadd49dfd1f9e0f85accf23bc7dad48904") (:digest-test #h"5842512c37312511a3d8ae41f5801df60cd682d58b4a997342b6e717e94006c214813e6c63e75591f957a7ec301779838bec8ae3ed7febad0805" #h"9763c43331ad0eb279d704c5f6e97e02da8724115026827f889e9fcda21f60fd230894ab35abb719890f3afa51afd31bc6852183b9c51059910af460abd2474d") (:digest-test #h"ca14e2ea2f37c78f78ef280f58707ec549a31a94361073e37701bfe503e4c01ee1f2e123e00e81a188f08fa050825709128a9b66bb8ae6ea47e41d" #h"4600e022a02258739f67fdd367cc1e662631fb087918768352062b9b3c8de8dbca0e9ec751b91f284694fbddb8d325c0637bccb21dd2efa92e48dbab2e5e9c26") (:digest-test #h"647629c779b24c1e76f41744aba17159487532a0156a7d8264db50d645e9595ff81e0c96a850f2aa56c844c613a4b892727a9bfc3d3e20386766f805" #h"5bc842fc2d3b7eb31d2d3044df3ec32af114feaa7cfc27ebc8630f46ab6f0c543f59b812e776e5303861d17da3f1f16097641f3b808d4d5cb3e483946409746c") (:digest-test #h"1c5dc0d1dd2e4c717635ff3e9b67caf957aec0f8f63c1b1e221e800a4c14848f4ea06e644e5d3e1de592ef5a8007fa3f07171b24bd07578d68963e5cb1" #h"cbf1ea86fa5b3dbf67be82fac41e84cccd0d296c757169b37837d273ccc015eecd102b9ce1cff68fdc7f05d22f2b774734f62ded54c8ee0bf57a5a82010d74f5") (:digest-test #h"8a555e75477d065b3af7e615475f37c0a667f73a4c7af5e4a69f28a68d9f4434776a8f90eab7f1d137eb4b22643c0a0d6a16fcfaa1bd62f2783546a9695f" #h"c088e4a3d7da2f6f99a8f3f717361108872b8ffef921b383c24b8061d4e7c27fc56f4f20dc8f952a14043c5650b5a9e777c49c41cfeb3f2de97ee2e16b2c3924") (:digest-test #h"ebb3e2ad7803508ba46e81e220b1cff33ea8381504110e9f8092ef085afef84db0d436931d085d0e1b06bd218cf571c79338da31a83b4cb1ec6c06d6b98768" #h"f33428d8fc67aa2cc1adcb2822f37f29cbd72abff68190483e415824f0bcecd447cb4f05a9c47031b9c50e0411c552f31cd04c30cea2bc64bcf825a5f8a66028") (:digest-test #h"c1ca70ae1279ba0b918157558b4920d6b7fba8a06be515170f202fafd36fb7f79d69fad745dba6150568db1e2b728504113eeac34f527fc82f2200b462ecbf5d" #h"046e46623912b3932b8d662ab42583423843206301b58bf20ab6d76fd47f1cbbcf421df536ecd7e56db5354e7e0f98822d2129c197f6f0f222b8ec5231f3967d") (:digest-test #h"d3ddddf805b1678a02e39200f6440047acbb062e4a2f046a3ca7f1dd6eb03a18be00cd1eb158706a64af5834c68cf7f105b415194605222c99a2cbf72c50cb14bf" #h"bae7c5d590bf25a493d8f48b8b4638ccb10541c67996e47287b984322009d27d1348f3ef2999f5ee0d38e112cd5a807a57830cdc318a1181e6c4653cdb8cf122") (:digest-test #h"8e8ef8aa336b3b98894c3126c71878910618838c00ac8590173c91749972ff3d42a61137029ad74501684f75e1b8d1d74336aa908c44082ae9eb162e901867f54905" #h"41672931558a93762522b1d55389ecf1b8c0feb8b88f4587fbd417ca809055b0cb630d8bea133ab7f6cf1f21c6b35e2e25c0d19583258808e6c23e1a75336103") (:digest-test #h"52761e1dac0eaea898e0b07cd24f4b2e6bb7bc200ea4b0528842f17b87154559a2ea94459a0e480ae0bdf9f757dd4a335aed0e510138b024a04ed1d591b4323234dbd5" #h"b826fe80494e19c51b42f2582b2d080ba6b90512f35f2db67dd7fd5ee532eaa16498afba08b4996cbcfdf8d1a2df6b1da939e8265115a48aefa42f38205db436") (:digest-test #h"3804ebc43cbea80c2bd7e4fda5c5515500cd2d2b846a1378dbf218d5c377138606eb3cb8ac88f9076f6ff4436f90717427c9df1ba052acbbe4585e98b6e8e0bf800f1946" #h"17dd6d87bc6773051e52047fd444996afa8124b0483fe121877f98553448772bd0e7751fc655e9cc2d29830211015d310f191474ca6adc0477a187c03b8fe252") (:digest-test #h"2249d698c4d807a8e7b4de21c485738959a0d67e5d2ca6f77983dfccb5dbf47931261e1f1537f3cbca253afb6bf4fe5e7672e1dcc860b3d6c8d243afe2d9758b375e955692" #h"6af44563fc468d51182f6c3be58d45932af1d985c6f283976c91a9ff421f383fe21dc7322f397ccead583e26b3e3fda067976a7f34665df25a2ced7b4b09cdec") (:digest-test #h"32a9c17033658c54f22c7135ddfc879de94d79593ef2dc7d3041bfa872738389864eeda27801794ccc4ff1fcb5ef3fc48833801d6fe959e3627f8ea1536ad00fa9c7d7d9f043" #h"6a47699dd3ada2f11bc4ea42072b06cc20857bf164497df1285400c250f5848b6f71957dbdc845f5daeab913036661f69387893fc2d61c25fa59b9d85b19f401") (:digest-test #h"3d65f69a590a5baaabcd274fe3ef9e88920ffc7adf05c16d7b0f4d18d72bac1e94c3b3d83b8f4c552eb80e9fde3911403f8b000579816f02e1716fd627946031d0af0793e7f3e1" #h"ffb2d9450943c24b5933c24812459b75d3d9f380344c9bc06fa3e17ee448eca2f98ff79f7e2235ccd9f9a8176f68a2254bbc9b834d6ac8d2bfdbc1597c432c9f") (:digest-test #h"76ff8b20a18cf104f6cdb65e2ba8f66ecf844af7e85e8ef2da19e8848a16052ec405a644dafb5ca08ec48f97327ac52c0e56218402c72a9a6dc1cf344d58a716a78d7d7529680bae" #h"f8858144c6d709dd0689a526a548a43f17494950ba2ac20544799e8ea27201d78bce5b921e29a7b4029278e68341ef2a0ca4ba3894566b3c8f8950e3e545a689") (:digest-test #h"ca88dddfc876a12f45f19562bc9ca250f43267ab251a7f345c3c022e20144e135604078762ef5c8a8f038cf1b1d6a91709b59dd068396a9e971ab628f74886e765384a23607c1a1e6e" #h"4f3d9eeef349ca51a7e419af1686f42795abde58a85335ce68d496e81e4436a80a61dc143a4300008c23a3e71f4ba98743195a3694a8d02fee11bd314569abc0") (:digest-test #h"0a78b16b4026f7ec063db4e7b77c42a298e524e268093c5038853e217dcd65f66428650165fca06a1b4c9cf1537fb5d463630ff3bd71cf32c3538b1fdda3fed5c9f601203319b7e1869a" #h"6095c3df5b9db7ce524d76123f77421ce888b86a477ae8c6db1d0be8d326d22c852915ab03c0c81a5b7ac71e2c14e74bda17a78d2b10585fa214f6546eb710a0") (:digest-test #h"20f10ef9a0e6128675340171cd248df30b586557620b615ca39a00db534315a9012dbdbfd6a994986eb829dbe6cdaf3a37d4f59ac27298742c8f777b6b12677f21eb289129579868705f27" #h"b4ead3f860eabbd36c770d66c7356f8107acd1485c7c94178c2eaabd50266d7645d009972586ef83ed43ed92882137df5117b88f35231b894ec1741ae7501145") (:digest-test #h"995c8f747ea418f7d63aba2260b34ac3c7dceebb78438ca4b1f982b7db9798ec1a7f32622264cb024c0d9e60e955a6e1d677c923518851990a459b767d0f13cd803460f61870db3391b44693" #h"a00a601edeaca83041dc452d438a8de549594e25d843c2cf60a0e009fb92d87abe28a72690ab657c8d35b43cd02d22ec0755de229d1f922fa6ca18a6d6c2aaae") (:digest-test #h"0feb23c7e4a19bcbd70bd300d76ec9045d696f8c9687f49ec4154400e231d2f0862495150cf250b6f12f172a7d130f8fa5d175bf2f25e280172ccdfb327951701165302728a619aa2f242631c9" #h"eeb6dee30c119fb1e1eb5c15ff2b32d8b9c7464a4e4cc6815cd251a6bae29b49961dd5c2fa9c44a9b142ca062c7072cbf3db04299b767789040196bf0c06aa76") (:digest-test #h"ac59a110623f1a64666f160ed32926676cb5be25dd9d962f441951b0efcb5d6a67ac1a4eae473e49c6257860728853ff415c5e8ec76a8a462ecfd343eeac22dad820722c597332fbfd94ebbd32c6" #h"f65ea942ae0a47e73b02b1442e5b26083db79307f64dd34a039c476faf18d5c514bb77a2c412a6074a7afc326ea66c74e5705fe2abbabf274333325a15b61fd9") (:digest-test #h"9e3e1077e1333a1fb1aa633ccf2f746588ad426489ea08dff5511438b5f4c0b110d1a4d47b540a12b21ea2aa070578ccfa5c22fe0b743ec0cc621c6b3a03b75f4d3eea5dce89e03269afcd9603d0db" #h"4b5c5df80c344c12388c723856cd06965b2190af652480476747dc2195ea3716f87c1762359583a5f31522f83f7833bec30f1f47d14540417dd463f5d258cd4a") (:digest-test #h"e881e3284c79d8f5237e699e4fbca84090c664bb53229f58cb0842b0436710c9b329d98191b8f030e9c1df89b03858c1569c6ff49a7c07c4a23a8a434b0fde13be4f94cb44ee629d5b44d336090d3de6" #h"147d8071c7871ef9256cff32aa63ea031404fa5ee4ec09c56afdd5da919b0cc84a9d35d142c417715203316011cc620cd6855bb117063a5e52867facc680d5f4") (:digest-test #h"e58521098911503de84311387d375c25929e6e55076eb6934fd8f2b1bb7b9667fbd76d5ee204828769a341b1f716da5bdfece6c62a9f4d4f988267fce1f5615540dbe375324eef607c910d976b45a5ea5f" #h"f97ba056fa41f43b8e1987072a09e828c71c5ff6ad4e37f9ab6b89e2a078933dd23052fa72c6615b613904259e9ff9b55ef7b923b89bc8752f6babddd256e117") (:digest-test #h"3796cf51b8726652a4204733b8fbb047cf00fb91a9837e22ec22b1a268f88e2c9f133e5f8527f1b184830e07c3458c83a8ca9f9d9c6998760e610668ba0f22e22b656a737e978b246a17840b7dc4091da85f" #h"c8a466199acbcbc93f2ce042968508c046901631e3118a2d0bf39a9b42b4197a379b3a86cdeca9df2de1a3eb71b79ae9bf2d6575eadf1878029c4093133f54d3") (:digest-test #h"9af608d031ccf309d7273c607a8e5e36840d449b55db5b13f03aeb9af49fa7e7cf1383ee2ed9c5a8b7515f16fb1c7c84a681590bf90f56597b844db5ebee223d78109b72350772f7c72ea996603e1e84f2ba5f" #h"f0ded9495b4f64cac585be8a737cfa14247a4a81cdf7f01ebcb134ace71f5a83df2cd72e7773fea1e82beae17e13857372792c8231e2ab9fbeb633e399d5f0ae") (:digest-test #h"d0df1bdf1df6203241722fb9c9c1cf7405017497ae154538ccf9224ad752e6ce1d4ae948639aca70cfe86b2b06543cb9914ebd3085aa3e2963f6e9b93d0b03a31ae26fcb9ca974eee016c091a6fcac37b21cc1d7" #h"c2da3ea3c8a3fd88a5bc5dea2bc076f861abedefae5a5fbd941ddfd1c41cc3312eb2dc826c2c0f65414fe72ebee447d2f9b1a6a56302660d1f86632ee80a175f") (:digest-test #h"8cbc9480553acef7bcdba9716ea8d66b4131780917de2b0b048045fcb32b5cac054808e1fce6e94ad851ecb47fe6cb802225d3551e08ea122093d0078dada564212eacf1d6394e0007cc62a1d595ab14ca08a284bc" #h"63b39b88ceb848188b37316e04560e75a5340ab8d417932d231c997e892b41daa69d9fe3e9a14dd19ccfbbfa01488c208e7b946cfaf16ca2b1bf7c8d8da4e6b2") (:digest-test #h"38f184448f3cf82a54cafc556aff336f23f9149e612134b3fc00c8a56455653d88640b12f69062b8432c4335ad8f7ab4ff66cb7eb54f332561a36f024d92c3e26276f4fd48619628cff88e4b8e85cf14ca4767ed990d" #h"9a49265fc641c59f1a91872cdae490d3da73c0c60fd59648e1d17dba1a647a5b95629392bb4ff5163d1a3cb45427c1437a3b2e1d9f030c0a8bcc5ed22da9e2ed") (:digest-test #h"70900618b1e9e9db62296fb6c6590c9f10b0a632765c489c887f1ab7c07791765a62e38465e1be281b1d396c6e080b7ee3e6fa56a30b9799d0e629be153ee76f81bc6a3295aa61489bfa87d53a8ad24248a6ede0dfcfe9" #h"1c8c3357ff1f8d6ac4defb3af462a73e09159e3a20c6506edd8cd3052df941c81f68c5fbb893912619e28640977fe8eaae8e9d5d4e7d5f132552cefab4540bac") (:digest-test #h"4e6ddae0d805afcd10a055bce584c848d050fb29fe8f1c64b18e1abfe46b65782e6ff536e89d8d40928b41ed7371365c8080a9647f7532ce6c6d4ac21cfb0c8020783851ec9a7dbc3948f8fca7adf8b2a78c04d898d31ff6" #h"5c2f996c779b91b3c4639311f54fabbdde7e2212b53dbae4828c8399588fc00d3b2ae60918aaaf6bb48bc757e52b2bcea84f5d15bf4ec25d5519fb54f6f26e1b") (:digest-test #h"696825f6d6ea8173ec47d0959a401c4ddf69f8f08ddd678a4d2ff976e3a4372bb39f4159845cb63585e1d4108d32e12fa7c5c9d7ce3508a7f53aca2b4bd951adbcd8984ebb7536563f5884c90bc5023b3316f7e4dc6958f743" #h"3ce940ca96b00011375daa95c65f66907d69b3eb3b8d779e6fc971afcc05e990bc4c541f434590f6b18b68c080d0f24475a3e764e9cb85343301314ee2fb661e") (:digest-test #h"79ecdfd47a29a74220a52819ce4589747f2b30b364d0852cce52f91e4f0f48e61c72fa76b60d3002cae89dfc5519d3430b95c098fa4678516b5e355109ea9b3745aa41d6f8206ee64ae720f8d44653b001057f2eba7f63cd42f9" #h"ba3d0fe04470f4cf8f08c46d82ae3afd1caea8c13bebbe026b5c1777aa59860af2e3da7751844e0be24072af48bc8a6fd77678aaee04e08f63395f5c8a465763") (:digest-test #h"9263fe75e8f6c7d5d642e2ca6a6eea4f44e9a0f249513ed79c9409ffca5526ca4491aebb1382057cc7c36722b0b6c3b15123cde312214f25353abfe30bca170568a8e1ba5408917403a01834080ab607c56a10d0265082498fe0b6" #h"7736d7a7fc1eb05857ce7d88abfffa87f58c670bfdfc0a8031f60f379e4b6ad94ac8f13ffe28c697809b5cfac7f13be01e7496a85237c4025539051fb2e32fb6") (:digest-test #h"78c17bfe0e02eb526d1a44a1ac127be082181452b625394bd6dc093a2cb432e6ee59c2f8b5503aba30dae41e1a1c6702697c99b2c94e94af48b00caf53b2e0e4e1bbee81ee282c7b2b35f58cf421a07e828d57a6622626af25835399" #h"b56b6e343166328523e0d1693e5174da643ae83cf69c85a7b3c3bee247b77b84702069d9e6b4cab03bf17fe612009bf4239683ca78ca7e876aca7d07603ba714") (:digest-test #h"298bb304a920f960447d8fd38b061bf8fe4ac1f871d8a0feb4549feb72ca694a5a41b6867d94cd5af77d468ad2f315d127b6c41a862800f3985e573e037740298e2c5c6186a9fb83609be2d49f8b4c31f96a2e49b56dbf09571b38587f" #h"34e3878627904ffbbbd85266cc973c34f931e3cab5d4c31f841c553dd69f84838206067df4f9f3b9102001be19267151e673f5c2d4c2f8438a6999a0a325487d") (:digest-test #h"a3cf714bf112647e727e8cfd46499acd35a640dd393ddd263cd85cf6225f59890a0686dad1c54eb8d809b81c08a98dba131bbdd6fce8ff59d95db824d8831ea480529da739227a6e0f62b603b38c35cdc2581f614a31879b8be54aeefaa0" #h"6f230ae4903ddbef0ba384c2e3506eab318bfd1a46ea76099f65a3fd529c91bc2865b9fd943e346de64626b8529f9db1377bf2c5e0129c66b50c6a5cfb364b3a") (:digest-test #h"0a427ae55ef3a7e6044a08cf6128cbaaabfd776c4e9374708f2ece246fd73603d2f54ac3e01d16cfac2bdaf713920d66e8f0a3d54ee68cff64267d5528cdf2f295f474d10f81173e0143488ac53fc503c444ed23dec63a080ce90c2443dba8" #h"f6bbe5d0cf13ddf41c1436748a5d1ccae2948547b452c2171c7c8e8b66c6ae4de3c0e8b2962bcb60d3de3608479f80e455c9024d9716c38f6f1206861ab1eaac") (:digest-test #h"2cbbb87511f4948efec3a61b511ededb1dda8b6ecfc0210c11e43a77ee32dc2e374afae4268e3d30427804868232a966b56006d3214037076bf6a265b72135af0fb2ef7909fea2dea412f7717446b276ff153753662b4d4148c02347e3259169" #h"76897b87a8a1cf835c434f6d391c9e5227351af9d3e20a3389c796b98b424281a59068d9c8d567ec2bebc435b0126b059e2d86394a9854d6611e1c922f385496") (:digest-test #h"2b23324c9992f60a7fc010159a03cb9a2b290df4fa6a82359b9af602f0a403a5ef33ed5da5b2caf87b77e6a4b93b650348ce2a7dbc08f8da9203d710b587ba5947c65e899f4a759f8e2b049ae7850a8e3e2962f6ef93ea4c631de5d78e729ec5bc" #h"3beea0b373ed09cf1c919c51d86d642c9125e0ee81698dc4cbadf02e9e6925efb562fd9b87301a6377ca192be79c4118deabc450b54639000c2e312945451fb5") (:digest-test #h"4022f930c7033b00d986c65ff6bbbdf9ebd0e58c52844ff658df3893c3202dc533f873d4a7f5a5f944419fb5528c9b6788479a1e891306acae7995fc06db70a59baa95bef7da79f5e793f2db7f2a55825e4fdb4a34884af881ded1089fd5334502a2" #h"0358775bbb733ccc49e78f544aeee512370d480d0e13c7e8d5c444c423e592146b45fdb91a1b694d35e36b60e4bc8397fca8bb9790e619339778b9cd1abe3fe9") (:digest-test #h"1cb77ba43ce77e236b9fc925f589b1c070780a84f99e8f50c1ff846ac92599cfe91612c8178325bee642a34f4dffdba2aa2ebcf7064339829b26f27993e1106c139c70d578cc05f0e1a777cceddb10a2c67fd9675e4a009df8037d6eeb38f5fba233df" #h"6502f46551a3fab3a96428fb97801d7a4aa2f17fef6603238df84e17c74309ed3d9489c8b16a9384ee634a3f86d0b3ba9a4dbc9c51ec8bd4bf8d61de6d3d87d7") (:digest-test #h"52167de2d6c502d99fa10c27b2ab6203bdebc2cafbbfdef15872a43dd610c2362f796ad9bcb5528d95870058fa454453f1e6065b315d410a3f2650e5d71e69d78d9767dfb4accc057fd2069266b0f180cb319e30ded7535bbe52d24be151de4bb598fc5c" #h"25cb3ed3983a91b4cf37a65193916c5e3e211b63e943e2f7b50a85d349a463b941aad33eff16561bdfdc92fda06a4e1d94b162de48f06d3c626940b31020925f") (:digest-test #h"cede6697d422ddaa78e2d55ae080b8b9e9356c69bc558201a2d4b0b3190a812c27b34bbcee3a62b781378b1bf636b372bcbae1fa2f816a046a0a649a5c555c641fea4ccd841cc761f38f777972f8c91b0324e71c333ce787f04741439bf087ef5e895011c0" #h"0be42a25d77ac6ad995c6be48e783380bad25a61732f87cefb0cce1a769cd69081f494a1a12d657664ef2b4d9c41f2ee83f6e9a84327d8756af9f985595e7d3b") (:digest-test #h"56d18d3e2e496440d0a5c9e1bcb464faf5bc70a8b562124f5fc9e9deb5fee6544b945e833b8b5d131b773ecb2cdd780cd4e1bb9e4f1e3cb0a1d64d19cf4b30e44e6c2d0cbcb4e284ce50db7a8a8062ddb63f981d9026c532bf8eeddf8af5a43848a32262178c" #h"982dc61c91a93770582eee8025aa55da8e9edb966bf5cf70d4a6534c0d53a2789a8c4fb65b7fed478cda02ed1e0d198d85c5c735b2417c5fab5d34e969fc8e7e") (:digest-test #h"25a7320dfaec5af65da4d0f8688e29e8e95532ecc16679ea8aff0f407d898db6922855b0e8901aa9681aa3dca617cb440764cdc7293fbeaf7f585b593c2b0531738e0ade7c8626b9995f4a84d9fc9b593d6bbee01abc53c5be14bf6956fd2fd81000dafc7c7686" #h"749c928c3d5510925bfe98659025b0ed7c01acd4d59a9bf1c54863a088091771dc9d407bdbf83b0f44b0902e10349ba79c84d0981d5e8c4f5c733a117fed0790") (:digest-test #h"3d7177b28ffd916e7e0634895833ba0bd9e0653df2cc4202c811536a005aec853a505e75db55d3c7107579041099e382a1feac80dde65d72368e909ab85f56d88e68d7c3c80c38f85bf8c2b36959409cc34ba8e3ad94fe8ee1927612d672d92141a329c4dd8a88a9" #h"14a331508cd7d94fcce56a66bf65f20870a281c8442f8dbd4c2371454a2b66f8d0994a0b67692e771efc6a5e0b887acae7d6f4ec7338e1aa89f2abc7034c4e4c") (:digest-test #h"c033e4a512297caecdbead892b11a9f7007af9a74bcab89e0bd4ffdd542ca03ea12e17a06c42bd43fc5f3f757fce4f6f5831997abac3f95676e1ebdb11ca43e11aa31e5ebabe18ce8d1bbfd8b02f482e1ce581b532e307e6960eb97441506c2ed299e1282523f41527" #h"95ac9b7d22aa458921874c4b4331e7d64761853217c3f83c601abcbccd7e2eaa6ca6ce9a22ebcfe5046d52f8a09097f043ab8bc59243fd770090bb432c3155e9") (:digest-test #h"69fff0f1a3dbfb36e32f025819fa99ea9a0edaef73145bf7fcd05d8bb0a646cb3b5d5256d524856acfd2e44d6b72e4ebf1ff23c0ff6c56f821e782d5a15f7052a1445b06668eeb4af700679ee7ae26496fbd4640c06aa149964dfd6011df835ac13b73c8ff21151e8440" #h"45d4daa652558d1c12beb0f5662c712f325b4c802fc6eb9ee039c949d002bb786f1a732712be941f9c5c79b3e5c43064d63a38578e5a54ee526acb735b9ad45f") (:digest-test #h"b2c439c97ab7c63736b3796324d68eeb7a471ed142bd9622684167d61234fff82f93f907537a909bc2e75a4bcbc133cf57197662c1af746ae8b81e5b83de05d9b589851de25d3c99c004c1dfb12d93bf50d450af49c428716f5b90ef088e3b6a6b2c46d3ce67b379599018" #h"c48ec83be5fa669e6ec8db90aca9676cfe2ec0d5e8e7a2431687bb953c0a300be3db4075cca3bac4dfa4d971baf0fa1aff46639db4b238856ff36d1dfcd520f1") (:digest-test #h"c016f522f26b7470e922b9a287e6d45f6c28813b68c1457e36d9ba266708272f9cbc5411f8db9d8bd5a9449fb6eb0cde7d4d03e5df019f2814a90ceed377c59d7d92623899bcb0268033073559d4d8de488686cbe3d67796e6df6ad4276d0b52cc62c49ebb58d7c95287aa6c" #h"7402f1a99b47e102b3b73140c6771b07ee6c33b3715e9c4027c441bee40511b735d95e508baea78da26fded9b7038e9a53defa58448aba40dc1e62d7ec592107") (:digest-test #h"a766b2a7ef916721f4677b67dbc65ef9b4d1bda1ad4e53fc854b0236440822152a111939e5ab2ba207719472b63fd4f4a54f4bde44a205d334a2d72cfe05abf804f41841b86d36920be6b0b529331ac163a985556c84511ec986439f83e1d7311f57d848cfa02df9ea0cf6b99a" #h"ddd60f93a3babc78299cf763e7919d45ac6f479700e1adb05ab137acdf89c1521ecb9dfeacd091e58ca57a1db964a9c3cd1fa39192cc1e9f734caa1c5fa62975") (:digest-test #h"10f2be77a4055771a67007cd8630e3230e38288499cb160380290174d66da57455b6baaa9785c84c8a663de41ed3bd544055b9170cec43cb3eb120eceaba1fe36e3eaa3fa4f99b425cd2519f09bc0282bada52d14ce625b1ded3b24d86b1dad342d2b7be322b775b04fc6b86afb4" #h"a872fa33d463b3343cec57c20c66979c33e1ad067bfc703454696aab5dd0003bc194318f4a8ebbc74503feb7211a472dadee991efe3e38f21a1310f8a76eac80") (:digest-test #h"324533e685f1852e358eea8ea8b81c288b3f3beb1f2bc2b8d3fdbac318382e3d7120de30c9c237aa0a34831deb1e5e060a7969cd3a9742ec1e64b354f7eb290cba1c681c66cc7ea994fdf5614f604d1a2718aab581c1c94931b1387e4b7dc73635bf3a7301174075fa70a9227d85d3" #h"3b26c5170729d0814153becb95f1b65cd42f9a6d0649d914e4f69d938b5e9dc041cd0f5c8da0b484d7c7bc7b1bdefb08fe8b1bfedc81109345bc9e9a399feedf") (:digest-test #h"518985977ee21d2bf622a20567124fcbf11c72df805365835ab3c041f4a9cd8a0ad63c9dee1018aa21a9fa3720f47dc48006f1aa3dba544950f87e627f369bc2793ede21223274492cceb77be7eea50e5a509059929a16d33a9f54796cde5770c74bd3ecc25318503f1a41976407aff2" #h"c00926a374cde55b8fbd77f50da1363da19744d3f464e07ce31794c5a61b6f9c85689fa1cfe136553527fd876be91673c2cac2dd157b2defea360851b6d92cf4") (:digest-test #h"9159767275ba6f79cbb3d58c0108339d8c6a41138991ab7aa58b14793b545b04bda61dd255127b12cc501d5aaad476e09fa14aec21626e8d57b7d08c36cdb79eea314bdd77e65779a0b54eab08c48ceb976adf631f4246a33f7ef896887ea8b5dfa2087a225c8c180f8970696101fc283b" #h"3cd3380a90868de17dee4bd4d7f90d7512696f0a92b2d089240d61a9d20cd3af094c78bf466c2d404dd2f662ec5f4a299be2adeadf627b98e50e1c072b769d62") (:digest-test #h"fe2d8ae200e6657fdc7494af5a12b2ae940348f1f983f0ba98febbe99c80d115126d57dbf37296765ebb5990256696588b3851d54c8fbe7ade98a6faf7c20b5e4f730f54a7f912ca0ac31bbb53d17949ef69aa0de40c7bab12a871a9b90f68813ca87af4256422a268f4a1d8ec3aa1a947fd" #h"8025a8608df0f6a01c34cdec012d4cb25852e1b100b68172fc4e86ac8b7126b64859cb9e767a7e59060989cedbd925afc475ca7369bd43f85ae590e224e036dd") (:digest-test #h"dc28484ebfd293d62ac759d5754bdf502423e4d419fa79020805134b2ce3dff738c7556c91d810adbad8dd210f041296b73c2185d4646c97fc0a5b69ed49ac8c7ced0bd1cfd7e3c3cca47374d189247da6811a40b0ab097067ed4ad40ade2e4791e39204e398b3204971445822a1be0dd93af8" #h"615115d2e8b62e345adaa4bdb95395a3b4fe27d71c4a111b86c1841463c5f03d6b20d164a39948ab08ae060720d05c10f6022e5c8caf2fa3bca2e04d9c539ded") (:digest-test #h"5af8c0f26db4e99b47ec2e4a01a786e77899e46d464ac337f175027b61aef3149848af849d76ac39b9b0910fe6594817859e55974fa167518ed72d088dae6b414d744d477974fb719c626da792f981233de24b7579d8acca510a266d73c0ee8ee1424343eaf6ffcc59c86c1becce5894072c6c11" #h"09da284d5b6556508be54c8ab6c97bbd472995c6bbd585917ecdb54ea9167208daaa070a7b2b7d8e93ce1315f0d1ef8d69667429c44dc5ee1499de57b229a398") (:digest-test #h"49cd0ba0df5bb3f43f68464e3e83e9cbd5d5ee077ffa5591e30f939cb30c93f7d454fb3fbf8bb05327a89c08dc4baf1eef50237317a405775357f1e0d1f31d9f0f0d98124019d47bf18363b1ecfbfe155c10cbc83300e01bc9ce0347c596b35f411e6d8229ad2855e42022b0373ade98663c6d6e9c" #h"30cbf0679a97c871574d2fc05d7aa760c6bc8a864b7d246c39b9e812f9b7ff7b4ef5197dd5b69493306688b8564de1ad47d75505c913ba6a78788f8caf5788bd") (:digest-test #h"a8a37dfc083ad2f47fff468738bf8b728eb7f1907e427fa15cb4424bc685e55ed7b2825c9c60b839ccc2fe5fb33e36f570cb8661609e630bda05ee641d938428867d90e00744a4aad494c93c5f6d1327878078590cdce1e647c9820818f467641fcd508e2f2ebfd0ff3d4f272393478f3b9e6f806b43" #h"8e1c91729be8eb40226f6c58a029380ef7edb9dc166a5c3cdbcefe90bd30d85cb7c4b248e66abf0a3a4c842281299bef6db88858d9e5ab5244f70b7969e1c072") (:digest-test #h"36af17595494ef793c42f48410246df07d05936a918afe74cd005e537c586b2843701f5df8952242b74586f83339b48f4ba3a66bdeb457ecdf61784eac6765cd9b8c570dd628dbba6ae5836b9ac3dbcd795f9efdb8742a35bca232abf36eb3b6698b2933965802277ba953a6edcacaf330c1e4e8c7d45f" #h"158bfc348a30b4fabbe355a7d44bdc2122a4c850444c03f289003ce01bfc1ebf3ecc0febb6a8ff523d25db7681b05bdce048d11943ab476c1967cf6556c4a120") (:digest-test #h"42d66edc5f22e0c13c25504c5101a5d172d2db7209e461efa323c0bfaed27e5f808042ea9c3838ea31f9b76de465225ccfbd0c09ca0d9f07e9a43e3e46c7693e00a7e1d483900ddb0a629d5563456dbbf299ac91f92c3d3c17b05d180e6c87c6c93194c39d90273fcf4a482c56084f95e34c04311fa80438" #h"061afb119a3c60876e04c10f12ad0f4b977593dc5a2d21096a57e7d3f7d4d44fdef934b2c17d7530674e4f4a1c176dbdcc54811a22e1b8712e4192fc2d4bf8e8") (:digest-test #h"f91bb2e1a9c4cd96bf250426b3a6afd9b87ac51e93254d2dae3b16ec686ba80fb0bd7a84d218660e9007593075bc4f4c66567f0c7a5fd2010c999a8a0efa81f89ff5bfefe0fb910f0442e6d4a7c55bbb618c69a79a2ddd82a0938927f6fe3a80f04beaeb7c7636e3435d12dcf1c6bb6ed0a4edb69c9657fa93" #h"6e692c8c694ee0a3565f37a299e0006b85ab4a821b20e76798220229f656efc6a20211a4e7e4ed77facde0d70e4d5d95bc8ed1d7a56d8df1446d562f044b344c") (:digest-test #h"d1eb961ca6a8f67c49b61e4d3ceaa2a1de6f0ea927b132bf987abdaa725b0e1e274e46830e99a2f75af608964df0dff9a99024fc6839bac5acd10202f921ac71a27fcda681aa3109ebf5f21ee3a849098ea3a551e844fae4b48b5c5bb97ccc802bc5520d68a14cb7e5fc056b67d889d876efb82d0e9a9a2499f1" #h"39b2c76ec207120de4b320c7fe069e602c9c38f257596da7369395e87eb64b3acff988c1839ac269d5012c093f9edd4b7cabf13bdea7d42e969ab108269c6ab0") (:digest-test #h"adf2263200f376886ba7b6f5e4411d5f07f7d9d101590c73ace114bafbcb0fdc99269e87cd2cead2a1cfe5744394d333aba408a07e21f30233b65b907472e9e3c7d6e7aa6d2c47a08a1be7bb877913a6b5604c723384478911c339e3b5fe527c7e288705a89c95d970b443347897e79f6c522bafe62b11ef8f3135" #h"3c23d2d8cf4db6ac6a42e27208180f37668bef5ee0a3f879483c8e604e7f42583f202037b8d242c04a87345b8be6dc8b121d6484b9edad0d73c894c1288f5cae") (:digest-test #h"18e75b47d898ac629c48e80dbfb75dae1e1700b771165eccdb18d628bfc4063dd6c3839a7ec4cd1255c4821b078cd174647b320bb685541d517c579f6b8e3cdd2e109a610c7a921653b204ad018d0340d9938735b60262662016767e1d8824a64954086229c0e3b5bd9ad88c54c1dc5aa4e768ff1a9470ee6f6e998f" #h"01c756b7c20b5f95fd2b079ab6a50f28b946fb16266b07c6060945dc4fe9e0d279c5b1505b9ec7d8f8f3c9ebf0c5ee9365aec08cf278d65b64daeccc19d3cbf4") (:digest-test #h"c2963342cfaa88ccd102a258e6d629f6b0d367dd55116502ca4451ea523623bc4175819a0648df3168e8ea8f10ed27354807d76e02ee1fdf1c9c655ee2b9fd08d557058dabdf8dcf964bfcacc996ae173971e26ea038d407c824260d06c2848a04a488c4c456dbcde2939e561ab908c4097b508638d6cda556465c9cc5" #h"a4d2f59393a5fea612c3c745f4bb9f41aaf3a3ce1679aa8afc1a62baa4ed452819418c8ae1a1e658757976692390fc43d4decf7d855cd8b498b6dc60cae05a90") (:digest-test #h"85360c3d4257d9878e2f5c16d3cd7d0747df3d231e1a8f63fddc69b3b1101af72153de4c8154b090c9815f2466e0e4f02f3af3a89a7fd04e306664f93e5490d4ce7fc169d553c520ae15dd02c7c613c39b4acd00e0c9a3c501566e52cecea11f7303dd1da61abf3f2532fd396047b1887255f4b256c0afcf58f3ae48c947" #h"e8352ddcac59e377ea0f9c32bbb43dfd1b6c829fad1954240c41b7c45b0b09db11064b64e2442a96f6530aac2c4abf3beb1eae77f2bce4efe88fee1a70cf5423") (:digest-test #h"c13e6ca3abb893aa5f82c4a8ef754460628af6b75af02168f45b72f8f09e45ed127c203bc7bb80ff0c7bd96f8cc6d8110868eb2cfc01037d8058992a6cf2effcbfe498c842e53a2e68a793867968ba18efc4a78b21cdf6a11e5de821dcabab14921ddb33625d48a13baffad6fe8272dbdf4433bd0f7b813c981269c388f001" #h"6e56f77f6883d0bd4face8b8d557f144661989f66d51b1fe4b8fc7124d66d9d20218616fea1bcf86c08d63bf8f2f21845a3e519083b937e70aa7c358310b5a7c") (:digest-test #h"fd2203e467574e834ab07c9097ae164532f24be1eb5d88f1af7748ceff0d2c67a21f4e4097f9d3bb4e9fbf97186e0db6db0100230a52b453d421f8ab9c9a6043aa3295ea20d2f06a2f37470d8a99075f1b8a8336f6228cf08b5942fc1fb4299c7d2480e8e82bce175540bdfad7752bc95b577f229515394f3ae5cec870a4b2f8" #h"a21b1077d52b27ac545af63b32746c6e3c51cb0cb9f281eb9f3580a6d4996d5c9917d2a6e484627a9d5a06fa1b25327a9d710e027387fc3e07d7c4d14c6086cc") ironclad-0.57/testing/test-vectors/shake128.testvec000066400000000000000000000140501420372057600223120ustar00rootroot00000000000000;;; tests vectors from CAVS 19.0 (:digest-test #h"" #h"7f9c2ba4e88f827d616045507605853e") (:digest-test #h"0e" #h"fa996dafaa208d72287c23bc4ed4bfd5") (:digest-test #h"d9e8" #h"c7211512340734235bb8d3c4651495aa") (:digest-test #h"1b3b6e" #h"d7335497e4cd3666885edbb0824d7a75") (:digest-test #h"983f235a" #h"a5597fff9277088ab56d4d5485023fec") (:digest-test #h"76fc16763f" #h"a539f540f3e69e2d25a46ef0b1cf16dd") (:digest-test #h"cb1b0103501c" #h"a07d5bd636c2ecca4b239124ef9fcac0") (:digest-test #h"7216a825029da1" #h"9de6ffacf3e59693a3de81b02f7db77a") (:digest-test #h"7bf2fef375bcaff3" #h"5ef5578b89c50532131b7843de7329a3") (:digest-test #h"fc948f094aa4b4e035" #h"9dfe4efaa2c43081702cbfe8636859ce") (:digest-test #h"f83091fff290c4b333fb" #h"637e1cb6bdbebb4793447e81e2a2bb60") (:digest-test #h"ae7cafada3e3e9f4314fa2" #h"ae03aecba2995b344aa8e874808b5b7e") (:digest-test #h"84f6cb3dc77b9bf856caf54e" #h"56538d52b26f967bb9405e0f54fdf6e2") (:digest-test #h"2af26c79175fcca8e13fb783b1" #h"9cca3ec830b2d9ef819b377a96a6c94e") (:digest-test #h"52977e532bccdb89dfeff7e9e4ad" #h"fbfba5c1e179df1469fcc8588ae5d2cc") (:digest-test #h"e49706130f266af2946e496e0e722a" #h"4d84336572ccaabb827e81a0d887ec9a") (:digest-test #h"d4d67b00ca51397791b81205d5582c0a" #h"d0acfb2a14928caf8c168ae514925e4e") (:digest-test #h"6159096096f4cba469db393377c57d9be0" #h"281b6b007cb17235b8aab33781c4cf59") (:digest-test #h"43bdb11eac71031f02a11c15a1885fa42898" #h"de68027da130663a73980e3525b88c75") (:digest-test #h"1e5dff69ea217bdd182fc8d6d25b74792db36d" #h"e1905b84d9c060db55cc119f328695d9") (:digest-test #h"b0438cd9e8853e976cfc13abbbb62fb8b5a50d59" #h"c3ffe9ea9fa6c9cf59ad26f44ea0b82a") (:digest-test #h"e63b13334669de132c6a0175e2eebdaa48ec7e7dd1" #h"50377225df64d18fe6c645a6091e82a1") (:digest-test #h"ce9b33631d7e628bbd93805b157c391c5574668d4ed8" #h"43611af9675b642fe8fa7e95de3e4389") (:digest-test #h"efa36e0c2049129d37eabc310521714a54a6d38f8267eb" #h"5f735cc0076c2f01454ad90a713e3583") (:digest-test #h"741950a661e7613f6e77c9ff8e432cc5abd4fb10e22a487a" #h"0b9f45cd316d62b2f882c641bee51ea2") (:digest-test #h"878677c98d8582cf4e0fc3b0f9610e470fcc06f87571d594c8" #h"78a194799c3334a880ad9f31144a1c28") (:digest-test #h"f8fe47cdc43511636f316ab2b40f0968198fc0de2175529dc32f" #h"a92b196b0ac4077b58e134852fad841a") (:digest-test #h"3fc3dc539de2171e05909d1f89a6b01b302036f69c29756bea781b" #h"585739f75aaf8f980e7505e841981450") (:digest-test #h"805e90c72b97798d936c10c9252bba561ab42736402d35e1fef712dd" #h"53790f771045d51abcd6c79ab7938e3b") (:digest-test #h"c4e3ab950463b426942d279c03a89dbc56d1f57ff48c5108bf3762d884" #h"52725b1f753eb91ee906f803148097dd") (:digest-test #h"8203912752fdacfca1e89f45a86c857a8e64ddf4dd8598ad334070483ae9" #h"eef9b5940a9f1785cd33d8fd73d690ea") (:digest-test #h"9fe97ba305fcb1f8630d3c5a71833981dbea557b44e9eb448b746d964d4205" #h"8e912e50c56fe5df4bc24e573eabd3e3") (:digest-test #h"6fe69ddaec89a72124f7575bd40cee57e1261f883e7b16fd10b0b99310a72e6a" #h"d1042a7f5580f4fc08afdc2e4a5c7dec") (:digest-test #h"bde187d2ec9cc9f6ff26197b53c3be5992bee6d96e50f49d96c41be0e2d92cffd1" #h"3ac47340e1bc4a64c2cf0ecf600f8b1e") (:digest-test #h"4a206a5b8aa3586c0667a40020d65ff511d52b732ef7a0c569f1ee681a4fc3620065" #h"7bb433752b98f915be5182bc1f096648") (:digest-test #h"8978b2e5ddb1b12b7dbb0fd86280a3b155759c7f02652afd4e707bf4ea53e9a528ea72" #h"63b47adf8ba0e1bae29e2afe71fb95e6") (:xof-digest-test 17 #h"f167511ec8864979302237abea4cf7ef" #h"20f8938daa54b260860a104f8556278bac") (:xof-digest-test 18 #h"96dbe183ec7290570b82546af792eb90" #h"762b421dc6374055a061caeddcf50f5dfbb6") (:xof-digest-test 19 #h"365c75b9b325a2e1708fb9d91539343e" #h"6004bf78fb5f0e181aaa8f9890aaa06a7f03b5") (:xof-digest-test 20 #h"3458d31eb677c3a369d58608715480ef" #h"eca90329dd0e76f5051eb5cd75f5e015f0348993") (:xof-digest-test 21 #h"efd99fb27a8dc1c9f31e5483b35784a4" #h"c0cf862a4230b413d88a0205a17352b1683ad1b8e2") (:xof-digest-test 22 #h"7ceb1e7161c9170d3c6ae5cfab3b4e3d" #h"420890852bd43a6399f9fe1760a76a26540cf03f28b8") (:xof-digest-test 23 #h"fbd93adb9e9176398cf1136a1f02c6df" #h"bed2e63ebcb926a5a18d523741d1cbc9f5ecc98a97d9c0") (:xof-digest-test 24 #h"aae474370700c8896ff1bd90df4de3b6" #h"73750ba855ce376034dd5dc9c1cf54e3e2e65bb0a1c7209f") (:xof-digest-test 25 #h"c1b88c92ecccd4755987dfe1a915f986" #h"6e555538878906721fbd2c8334f4934174ae5317cd249e92af") (:xof-digest-test 26 #h"bf8594f322de3d179722d182273f51ba" #h"c2e5b8946c6c73739678a3dbca41a8a615a0967773a51d2fb387") (:xof-digest-test 27 #h"606e64147e3db716c3d20d12144c9db2" #h"ae8b8acaf035d9d42f53c437fb4a08b129ac6e29b7abaca6c59ca9") (:xof-digest-test 28 #h"cd10343363fe9ba5558a0d547bc3a5fc" #h"750120acfe4cb4181831b8e8793bdd3481eb9c45daa7aac24035c8ee") (:xof-digest-test 29 #h"73eeecd1f5c1a64fbbece5876c101e32" #h"f297d2264c57b39a2cb988e68d721f4bb1690aab0c302a9048608c640e") (:xof-digest-test 30 #h"db8e4d7be53d2396fdf82726b2e57a1d" #h"1aa263d0ff30785a74ad2ab0aa635ced434de00e39b3e544aebbfdab0adf") (:xof-digest-test 31 #h"5d8e8b9854a597c3277395cd3dd5c28f" #h"f67d83cbe49b580d00c42a5fdd6446a755e227b57e13ec3072fe0fadacc950") (:xof-digest-test 32 #h"d94be6703183babe2a30331b0028193c" #h"0583c92e58ec7df9365dfa9ae3fab8bab0ae1a85c24cc834751a39159fe17d77") (:xof-digest-test 138 #h"aefd329afa04993117493268a638cca6" #h"dae4efd55b15b0525afba52fe0c6a1ad1a8ad163bad7df596f74a55d525ce3fbbd643a87feaee45fb436cf3bb7378c9f07bcb660b50a54bfd3f9c03272bc2193df3ce166e64e16213a034c6812f3ae15b4bcc8013deae67a46e90b204200e3bcba92e992a51d109e237d9eab845d387f130b8bc56f7c4e4b9730e6a580d63452777851ce1d046aa27675") (:xof-digest-test 139 #h"6832b7adaac918587c17258d0c20228f" #h"8b6c5e626316100d9bd091a23447bd4fea16e695f88c96ee8aabe1f26d037eb344601bc228927febb990ba2d7ece2311ec40fee70907187d872e34d7b20e77bce771f8ffbb809034c8a6ca0e77ce1ec489b469cef85e516cccb3e6bfa770118cc0cb7d5f102e02ac685578bf8076264d5a262124dc864d83965886e54c2c52a60a0ffe92dd295244ca0776") (:xof-digest-test 140 #h"0a13ad2c7a239b4ba73ea6592ae84ea9" #h"5feaf99c15f48851943ff9baa6e5055d8377f0dd347aa4dbece51ad3a6d9ce0c01aee9fe2260b80a4673a909b532adcdd1e421c32d6460535b5fe392a58d2634979a5a104d6c470aa3306c400b061db91c463b2848297bca2bc26d1864ba49d7ff949ebca50fbf79a5e63716dc82b600bd52ca7437ed774d169f6bf02e46487956fba2230f34cd2a0485484d") ironclad-0.57/testing/test-vectors/shake256.testvec000066400000000000000000000224341420372057600223210ustar00rootroot00000000000000;;; tests vectors from CAVS 19.0 (:digest-test #h"" #h"46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762f") (:digest-test #h"0f" #h"aabb07488ff9edd05d6a603b7791b60a16d45093608f1badc0c9cc9a9154f215") (:digest-test #h"0dc1" #h"8e2df9d379bb034aee064e965f960ebb418a9bb535025fb96427f678cf207877") (:digest-test #h"21eda6" #h"f7d02b4512be5ddcc25d148c71664dfd34e16abea26d6e7287f45e08ed6fcd87") (:digest-test #h"4a71964b" #h"7b7e12d2a520e232fde6c41dbbb2b8b74c2912fb3f15404f7304fe46691430c9") (:digest-test #h"e82f4188ab" #h"f4bf0c76beee2abd6156b41afef4142c3dbabfede5b9ce2ecd282fb294669731") (:digest-test #h"8aa122803362" #h"46bc101b681e53d49f4c1b5e42f496bd29b2b0f767c6e42bc4ac5ac317d9d41b") (:digest-test #h"c5f21a07c8dcc7" #h"569b1a32fb32f1a7fc9e35baad586f35645c5366cdfdfed394076bcd1801371f") (:digest-test #h"587cb398fe82ffda" #h"54f5dddb85f62dba7dc4727d502bdee959fb665bd482bd0ce31cbdd1a042e4b5") (:digest-test #h"127373351d8eb30829" #h"dda6a905234e81b47780bb0834a760ecd297068b28d4e00faf2c5094ff869e72") (:digest-test #h"762d668ed04fb3d0cb55" #h"2d182bd68eb904023e025b2fdb8303e72f7138705d2780dec2cf939edf023764") (:digest-test #h"6b901a0168cb0b8036c62c" #h"2b0509bf707446f14685d202a67d338ae9193eca3558219db54ca07aec176669") (:digest-test #h"c650c70e625d363f95b0b986" #h"f0a6c64a7d0a95dbb02478644d0b49f385e7d9980f47ee01e89e4b7daf857f35") (:digest-test #h"95a009620e91621403d47581fd" #h"ba3598c9b5237f6e843265d677e2575c5d76dd0b56590c887060150e68f19952") (:digest-test #h"210c88cc83c306a8313a6390be03" #h"f44825f2147c5fb1848f1ee21503a0884ba801baade4f86922abc19474ae75e9") (:digest-test #h"765db6ab3af389b8c775c8eb99fe72" #h"ccb6564a655c94d714f80b9f8de9e2610c4478778eac1b9256237dbf90e50581") (:digest-test #h"fdbff9bf3fb910a92d25651ebbfba365" #h"89f2373e131a899b4ba27f6da606716a5e289fd530ae066bb8b11dc023dacbd6") (:digest-test #h"f9da78c890847040454ba6429882b05409" #h"a84983c9fe75ad0de19e2c8420a7ea85b25102195614dfa5347de60a1ce13b60") (:digest-test #h"8f84a37dbd44d0f69536c5f4446ba3239bfc" #h"05ca835e0cdbfaf595c6867e2d9db93fca9c8bc665022edd6fe7b3da5e07c4cf") (:digest-test #h"961c9927de4557805a7a03dc682c9a548c6156" #h"7cfcf4b0aa6aa608b055a466b66aaa2c99e401c141c5746ed74749c6d0dc82bf") (:digest-test #h"aaf1f64f3df3fd4d422acbcb5491ff3835b57e32" #h"333d096475b6a6d45c87b5afc7e8cb2284456b84bd3e30a9b264492539ed3159") (:digest-test #h"b18bdf2c9bbcc1668958f6e9db12f79af09c3e583c" #h"b7ae5f250409a751199901e1aa50b2c519f6b135934a81f2f69dc2159781a64d") (:digest-test #h"d6d82f4713267bff5a486c65be9943c628edd1bd9dc6" #h"504f0f9e2c07a2ad8ad2e50723dcfc163119a7136e230f7986f1ec3fc73bc5af") (:digest-test #h"8e2ed5f836b6f99b642bde5ffeea3fa63373691460c042" #h"4eeb5263eaa4cf78d614b2ee5dc52ec0ac61aeef751396c7854b3438c11d4040") (:digest-test #h"c533de6aca8dcfdaf7d3d9649a67e81b0d8b42fbe8c95c71" #h"4a5e7a6095a16e624802aced516f8bfaa3374c87d04af0921a56f8c682dabffb") (:digest-test #h"cf578d6c77d2ffad3171f977e93fedc5c49c47a1b485a28a4a" #h"d8d54a314e0480ee366265d0f79f718f77d44a8fa8dcea3c1bc0a87437ef99bf") (:digest-test #h"3cb99341f746fa282c2518d840c200287dc40a1da38478039fc4" #h"8dac22ac436eee4ce4ca902faf233566a612abe301392ffc1a1a77e4ca7a44fc") (:digest-test #h"1b4ed0e9f249a36bc12574011cf3a5da8fe62d5fea588e5bdc0e07" #h"0f425e588a2095630e20a230ad5927c2d9f28035d27c1c70fb6dcfd6dca687ae") (:digest-test #h"941be4d9bbc3d399161fb35ed9e8674f1a26eb4ccc51e430f0b77c53" #h"e84b57566775cc8c64363874828d11475e80da3b604605dd62235a101a098dbf") (:digest-test #h"0aa29f8a95bd5e6117661178815fc7b2f8c2811f213794cf9c6a4ee4ce" #h"780fc2a4b32282684dc3f99e83a6443896845ca920932ae8eba997884d868953") (:digest-test #h"7ad31b363f8929c7a262e01c75afdfa87020a8383c8752d7cae07feee98f" #h"58273b2859043f1acc6d6a68f6d95417c5c5262ce653ee466999abe9069fa9f5") (:digest-test #h"e34dc086477a69347b5d85d9e55345edeeb3fa8e05bc361ae6cb2efc1cd163" #h"9076470ef15650b75ad59780b1fb4265838dc3ed50bf17f2dd714d90a02d7d8e") (:digest-test #h"ef896cdcb363a6159178a1bb1c993946c50402095cdaea4fd4d419aa47321c88" #h"7abba4e8b8dd766bbabe98f8f169cb6208674de19a51d73c92b7dc04a4b5ee3d") (:digest-test #h"e68f2d765dd0b3450db083cae53026b4ea16de9186ed97ec224d1ab9f75c84f420" #h"ab529d0f7c3fb4b49e88731d2e4c1a226d328e44829e749dff710970a20d2520") (:digest-test #h"0de312610daf8aa96844194ccf5c27610f64f8709ec8ddd67370a76a1b8b61600a8b" #h"99bf17c40aab71cb82571e234839b50fa52bec5c77fc2c9300ea9d3e142a1555") (:digest-test #h"0e3dcd346c68bc5b5cafe3342a7e0e29272e42fba12a51081251abca989c77a1a501e2" #h"c934ab7f2148da5ca2ce948432fa72be49420f10e3dbc1906016773d9819cff4") (:xof-digest-test 2 #h"c61a9188812ae73994bc0d6d4021e31bf124dc72669749111232da7ac29e61c4" #h"23ce") (:xof-digest-test 3 #h"29eade8f428791131625a160f95d97e8654f5ff93fdca8915c158c7344f2747a" #h"6d0e57") (:xof-digest-test 4 #h"687c03141fb6788f601d09c8375a4f4226b7fa3f7726c2e3d185a1970a203fac" #h"a3476714") (:xof-digest-test 6 #h"b17977aced3a1184b14b0e41a04dd8b513c925ca19211e1abdc6c1b987ac8455" #h"073d08a75c1d") (:xof-digest-test 7 #h"0cf9662f935c94e203b1e3471ec3c8919c795514cdf303fd7fd5ae4122e3e1d3" #h"de4ac702408944") (:xof-digest-test 8 #h"dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0" #h"00648afbc5e65164") (:xof-digest-test 16 #h"dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0" #h"00648afbc5e651649db1fd82936b00db") (:xof-digest-test 18 #h"dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0" #h"00648afbc5e651649db1fd82936b00dbbc12") (:xof-digest-test 20 #h"dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0" #h"00648afbc5e651649db1fd82936b00dbbc122fb4") (:xof-digest-test 24 #h"e3ef127eadfafaf40408cebb28705df30b68d99dfa1893507ef3062d85461715" #h"7314002948c057006d4fc21e3e19c258fb5bdd57728fe93c") (:xof-digest-test 28 #h"dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0" #h"00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950") (:xof-digest-test 32 #h"dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0" #h"00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e0") (:xof-digest-test 34 #h"dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0" #h"00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d6") (:xof-digest-test 42 #h"dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0" #h"00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f263") (:xof-digest-test 48 #h"dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0" #h"00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b") (:xof-digest-test 56 #h"dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0" #h"00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa5298") (:xof-digest-test 64 #h"dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0" #h"00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092") (:xof-digest-test 68 #h"dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0" #h"00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b8") (:xof-digest-test 75 #h"8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4" #h"2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db") (:xof-digest-test 96 #h"dc886df3f69c49513de3627e9481db5871e8ee88eb9f99611541930a8bc885e0" #h"00648afbc5e651649db1fd82936b00dbbc122fb4c877860d385c4950d56de7e096d613d7a3f27ed8f26334b0ccc1407b41dccb23dfaa529818d1125cd5348092524366b85fabb97c6cd1e6066f459bcc566da87ec9b7ba36792d118ac39a4cce") (:xof-digest-test 248 #h"6ae23f058f0f2264a18cd609acc26dd4dbc00f5c3ee9e13ecaea2bb5a2f0bb6b" #h"b9b92544fb25cfe4ec6fe437d8da2bbe00f7bdaface3de97b8775a44d753c3adca3f7c6f183cc8647e229070439aa9539ae1f8f13470c9d3527fffdeef6c94f9f0520ff0c1ba8b16e16014e1af43ac6d94cb7929188cce9d7b02f81a2746f52ba16988e5f6d93298d778dfe05ea0ef256ae3728643ce3e29c794a0370e9ca6a8bf3e7a41e86770676ac106f7ae79e67027ce7b7b38efe27d253a52b5cb54d6eb4367a87736ed48cb45ef27f42683da140ed3295dfc575d3ea38cfc2a3697cc92864305407369b4abac054e497378dd9fd0c4b352ea3185ce1178b3dc1599df69db29259d4735320c8e7d33e8226620c9a1d22761f1d35bdf") (:xof-digest-test 249 #h"7d9312ffe94845ac51056c63eb3bff4a94626aafb7470ff86fa88fd8f0fe45c9" #h"de489392796fd3b530c506e482936afcfe6b72dcf7e9def054953842ff19076908c8a1d6a4e7639e0fdbfa1b5201095051aac3e3997779e588377eac979313e39c3721dc9f912cf7fdf1a9038cbaba8e9f3d95951a5d819bffd0b080319fcd12da0516baf54b779e79e437d3ec565c64eb5752825f54050f93b0a0f990dc8747aae6d67d5ca8d00c98907fa276671bf4f9971d461b2924be1e4924c4d61901ddc2240ce13969191f4a34fb84c4fd8317777b4074ca440204e9d99218064a9e2c07ffa1678894afe622448fab4480aa92744d8256b8a6e5cb7890e7b66f0e0316eb1edcffd21fa0803424a4bedd811a547d89e2b26a3ef4aeb8") (:xof-digest-test 250 #h"8d8001e2c096f1b88e7c9224a086efd4797fbf74a8033a2d422a2b6b8f6747e4" #h"2e975f6a8a14f0704d51b13667d8195c219f71e6345696c49fa4b9d08e9225d3d39393425152c97e71dd24601c11abcfa0f12f53c680bd3ae757b8134a9c10d429615869217fdd5885c4db174985703a6d6de94a667eac3023443a8337ae1bc601b76d7d38ec3c34463105f0d3949d78e562a039e4469548b609395de5a4fd43c46ca9fd6ee29ada5efc07d84d553249450dab4a49c483ded250c9338f85cd937ae66bb436f3b4026e859fda1ca571432f3bfc09e7c03ca4d183b741111ca0483d0edabc03feb23b17ee48e844ba2408d9dcfd0139d2e8c7310125aee801c61ab7900d1efc47c078281766f361c5e6111346235e1dc38325666c") ironclad-0.57/testing/test-vectors/siphash.testvec000066400000000000000000000222301420372057600224220ustar00rootroot00000000000000;;; SipHash-2-4 (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"" #h"310e0edd47db6f72") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"00" #h"fd67dc93c539f874") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"0001" #h"5a4fa9d909806c0d") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102" #h"2d7efbd796666785") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"00010203" #h"b7877127e09427cf") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"0001020304" #h"8da699cd64557618") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405" #h"cee3fe586e46c9cb") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"00010203040506" #h"37d1018bf50002ab") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"0001020304050607" #h"6224939a79f5f593") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708" #h"b0e4a90bdf82009e") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"00010203040506070809" #h"f3b9dd94c5bb5d7a") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a" #h"a7ad6b22462fb3f4") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b" #h"fbe50e86bc8f1e75") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c" #h"903d84c02756ea14") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d" #h"eef27a8e90ca23f7") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d0e" #h"e545be4961ca29a1") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d0e0f" #h"db9bc2577fcc2a3f") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d0e0f10" #h"9447be2cf5e99a69") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d" #h"B97C83DB4EDF24E8") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e" #h"42A406FC61660BFA") (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"" #h"a3817f04ba25a8e66df67214c7550293" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"00" #h"da87c1d86b99af44347659119b22fc45" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"0001" #h"8177228da4a45dc7fca38bdef60affe4" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102" #h"9c70b60c5267a94e5f33b6b02985ed51" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"00010203" #h"f88164c12d9c8faf7d0f6e7c7bcd5579" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"0001020304" #h"1368875980776f8854527a07690e9627" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405" #h"14eeca338b208613485ea0308fd7a15e" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"00010203040506" #h"a1f1ebbed8dbc153c0b84aa61ff08239" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"0001020304050607" #h"3b62a9ba6258f5610f83e264f31497b4" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708" #h"264499060ad9baabc47f8b02bb6d71ed" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"00010203040506070809" #h"00110dc378146956c95447d3f3d0fbba" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a" #h"0151c568386b6677a2b4dc6f81e5dc18" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b" #h"d626b266905ef35882634df68532c125" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c" #h"9869e247e9c08b10d029934fc4b952f7" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d" #h"31fcefac66d7de9c7ec7485fe4494902" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d0e" #h"5493e99933b0a8117e08ec0f97cfc3d9" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d0e0f" #h"6ee2a4ca67b054bbfd3315bf85230577" :digest-length 16) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d0e0f10" #h"473d06e8738db89854c066c47ae47740" :digest-length 16) ;;; SipHash-4-8 (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"" #h"41DA38992B0579C8" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"00" #h"51B89552F91459C8" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"0001" #h"923716F0BEDDC333" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102" #h"6A46D47D6547C105" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"00010203" #h"C238592B4AC1FA48" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"0001020304" #h"F6C2D7D9CF5247E1" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405" #h"6BB6BC34C835558E" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"00010203040506" #h"47D73F715ABEFD4E" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"0001020304050607" #h"20B58B9C072FDB50" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708" #h"36319AF35EE11253" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"00010203040506070809" #h"48A9D0DB0A8D848F" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a" #h"CC69396036040A81" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b" #h"4B6D68537AA79761" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c" #h"293796E9F2C95069" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d" #h"88431BEAA7629A68" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d0e" #h"E0A6A97DD589D383" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d0e0f" #h"559CF55380B2AC70" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d0e0f10" #h"D5B7C5117AE3794E" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d" #h"2fbd2b9a1c0ef576" :compression-rounds 4 :finalization-rounds 8) (:mac-test #h"000102030405060708090a0b0c0d0e0f" #h"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e" #h"9951ad46d24d81b8" :compression-rounds 4 :finalization-rounds 8) ironclad-0.57/testing/test-vectors/skein-mac.testvec000066400000000000000000000333431420372057600226410ustar00rootroot00000000000000;;; tests from skein golden kat (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E" #h"D3090C72" #h"1D658372CBEA2F9928493CC47599D6F4AD8CE33536BEDFA20B739F07516519D5" :block-length 32 :digest-length 32) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E92" #h"D3090C72167517F7" #h"41EF6B0F0FAD81C040284F3B1A91E9C44E4C26A6D7207F3AAC4362856EF12ACA" :block-length 32 :digest-length 32) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C193" #h"D3090C72167517F7C7AD82A70C2FD3F6" #h"CA8208119B9E4E4057631AB31015CFD256F6763A0A34381633D97F640899B84F" :block-length 32 :digest-length 32) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135" #h"9E9980FCC16EE082CF164A5147D0E0692AEFFE3DCB8D620E2BB542091162E2E9" :block-length 32 :digest-length 32) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF8" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDF" #h"B1B8C18188E69A6ECAE0B6018E6B638C6A91E6DE6881E32A60858468C17B520D" :block-length 32 :digest-length 32) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF8" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"A097340709B443ED2C0A921F5DCEFEF3EAD65C4F0BCD5F13DA54D7ED" :block-length 32 :digest-length 28) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"AC1B4FAB6561C92D0C487E082DAEC53E0DB4F505E08BF51CAE4FD5375E37FC04" :block-length 32 :digest-length 32) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E92" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"96E6CEBB23573D0A70CE36A67AA05D2403148093F25C695E1254887CC97F9771D2518413AF4286BF2A06B61A53F7FCEC" :block-length 32 :digest-length 48) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C193" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"0E95E597E71D6350F20B99C4179F54F43A4722705C06BA765A82CB0A314FE2FE87EF8090063B757E53182706ED18737DADC0DA1E1C66518F08334052702C5ED7" :block-length 32 :digest-length 64) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E" #h"D3090C72167517F7" #h"0C1F1921253DD8E5C2D4C5F4099F851042D91147892705829161F5FC64D89785226EB6E187068493EE4C78A4B7C0F55A8CBBB1A5982C2DAF638FC6A74B16B0D7" :block-length 64 :digest-length 64) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C1" #h"D3090C72167517F7C7AD82A70C2FD3F6" #h"478D7B6C0CC6E35D9EBBDEDF39128E5A36585DB6222891692D1747D401DE34CE3DB6FCBAB6C968B7F2620F4A844A2903B547775579993736D2493A75FF6752A1" :block-length 64 :digest-length 64) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C1935DF3061FF06E9F204192BA11E5BB2CAC0430C1C370CB3D113FEA5EC1021EB875E5946D7A96AC69A1626C6206B7252736F24253C9EE9B85EB852DFC814631346C" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDF" #h"7690BA61F10E0BBA312980B0212E6A9A51B0E9AADFDE7CA535754A706E042335B29172AAE29D8BAD18EFAF92D43E6406F3098E253F41F2931EDA5911DC740352" :block-length 64 :digest-length 64) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2" #h"D10E3BA81855AC087FBF5A3BC1F99B27D05F98BA22441138026225D34A418B93FD9E8DFAF5120757451ADABE050D0EB59D271B0FE1BBF04BADBCF9BA25A8791B" :block-length 64 :digest-length 64) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C193" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"5670B226156570DFF3EFE16661AB86EB24982CDF" :block-length 64 :digest-length 20) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C1935DF3061FF06E9F204192BA11E5BB2CAC0430C1C370CB3D113FEA5EC1021EB875E5946D7A96AC69A1626C6206B7252736F24253C9EE9B85EB852DFC814631346C" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"C41B9FF9753E6C0F8ED88866E320535E927FE4DA552C289841A920DB" :block-length 64 :digest-length 28) (:mac-test #h"" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"AA703B798B6F472BAA9D1E1689FA0F70F8DCA25A6046BB2C8FB7F34407934AE4" :block-length 64 :digest-length 32) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"DFBF5C1319A1D9D70EFB2F1600FBCF694F935907F31D24A16D6CD2FB2D7855A769681766C0A29DA778EED346CD1D740F" :block-length 64 :digest-length 48) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C1" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"04D8CDDB0AD931D54D195899A094684344E902286037272890BCE98A41813EDC37A3CEE190A693FCCA613EE30049CE7EC2BDFF9613F56778A13F8C28A21D167A" :block-length 64 :digest-length 64) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C193" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"08FCA368B3B14AC406676ADF37AC9BE2DBB8704E694055A0C6331184D4F0070098F23F0963EE29002495771BF56FB4D3D9FF3506ABCD80BE927379F7880D5D7703919FBF92184F498AC44F47F015CE676EDED9165D47D53733F5A27ABBC05F45ACD98B97CC15FFDCED641DEFD1A5119EF841B452A1B8F94EE69004466CCDC143" :block-length 64 :digest-length 128) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C1935DF3061FF06E9F204192BA11E5BB2CAC0430C1C370CB3D113FEA5EC1021EB875E5946D7A96AC69A1626C6206B7252736F24253C9EE9B85EB852DFC81463134" #h"" #h"BCF37B3459C88959D6B6B58B2BFE142CEF60C6F4EC56B0702480D7893A2B0595AA354E87102A788B61996B9CBC1EADE7DAFBF6581135572C09666D844C90F066B800FC4F5FD1737644894EF7D588AFC5C38F5D920BDBD3B738AEA3A3267D161ED65284D1F57DA73B68817E17E381CA169115152B869C66B812BB9A84275303F0" :block-length 128 :digest-length 128) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C1935DF3061FF06E9F204192BA11E5BB2CAC0430C1C370CB3D113FEA5EC1021EB875E5946D7A96AC69A1626C6206B7252736F24253C9EE9B85EB852DFC814631346C" #h"D3090C72" #h"DF0596E5808835A3E304AA27923DB05F61DAC57C0696A1D19ABF188E70AA9DBCC659E9510F7C9A37FBC025BD4E5EA293E78ED7838DD0B08864E8AD40DDB3A88031EBEFC21572A89960D1916107A7DA7AC0C067E34EC46A86A29CA63FA250BD398EB32EC1ED0F8AC8329F26DA018B029E41E2E58D1DFC44DE81615E6C987ED9C9" :block-length 128 :digest-length 128) (:mac-test #h"" #h"D3090C72167517F7C7AD82A70C2FD3F6" #h"F2BBA83800C11A591F21138B2B5A3FE114820083A792CD10B973516593E6DF4E304B75FCC514147613CA198340612215147FD6565C73C74308B43AF83C0CFFA1594F816FBDAAC8F59D399F2873D719C2FD67B007544DB2BBDBABAF7C981148EDAB95EF94CC9D3C6E09CDF230D3C3C2F66F128DF2E5D1B6B26B1A58FF3B1CBB47" :block-length 128 :digest-length 128) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C1935DF3061FF06E9F204192BA11E5BB2CAC0430C1C370CB3D113FEA5EC1021EB875E5946D7A96AC69A1626C6206B7252736F24253C9EE9B85EB852DFC814631346C" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135" #h"3E0CD7938D71C39FFBB08A6BA7995ADE3AD140E2C0C45CDBAFB099247E08E4C20B61C1F885CED5ED2F816680925034918236E5807F0EECF3F27E9CFCA36675EB75873EFA1FB41F17541DC2F7C2469EAECB35CC7CA58E489804CAF56F09FB97C9F689C64AD49C6888F86C483E901BD3D25798B394EF93FAF9154900F92F31F433" :block-length 128 :digest-length 128) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C1935DF3061FF06E9F204192BA11E5BB2CAC0430C1C370CB3D113FEA5EC1021EB875E5946D7A96AC69A1626C6206B7252736F24253C9EE9B85EB852DFC81463134" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDF" #h"7266752F7E9AA04BD7D8A1B16030677DE6021301F6A62473C76BAE2B98BBF8AAD73BD00A4B5035F741CAF2317AB80E4E97F5C5BBE8ACC0E8B424BCB13C7C6740A985801FBA54ADDDE8D4F13F69D2BFC98AE104D46A211145217E51D510EA846CEC9581D14FDA079F775C8B18D66CB31BF7060996EE8A69EEE7F107909CE59A97" :block-length 128 :digest-length 128) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C1" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"17C3C533B27D666DA556AE586E641B7A3A0BCC45" :block-length 128 :digest-length 20) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C1935DF3061FF06E9F204192BA11E5BB2CAC0430C1C370CB3D113FEA5EC1021EB875E5946D7A96AC69A1626C6206B7252736F24253C9EE9B85EB852DFC814631346C" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"6C5B671C1766F6EECEA6D24B641D4A6BF84BBA13A1976F8F80B3F30EE2F93DE6" :block-length 128 :digest-length 32) (:mac-test #h"" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"0B50658B7F45ECC7CF211D5E2D16A8AE5764B28271C136C8B03C1CC308ABACE9EECAFF8584CCE97A9AB75804B1250A30A76D69139B47A433E9FAEBE6A4B7DD10" :block-length 128 :digest-length 64) (:mac-test #h"CB41F1706CDE09651203C2D0EFBADDF847A0D315CB2E53FF8BAC41DA0002672E920244C66E02D5F0DAD3E94C42BB65F0D14157DECF4105EF5609D5B0984457C1" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"211AC479E9961141DA3AAC19D320A1DBBBFAD55D2DCE87E6A345FCD58E36827597378432B482D89BAD44DDDB13E6AD86E0EE1E0882B4EB0CD6A181E9685E18DD302EBB3AA74502C06254DCADFB2BD45D288F82366B7AFC3BC0F6B1A3C2E8F84D37FBEDD07A3F8FCFF84FAF24C53C11DA600AAA118E76CFDCB366D0B3F7729DCE" :block-length 128 :digest-length 128) (:mac-test #h"" #h"D3090C72167517F7C7AD82A70C2FD3F6443F608301591E598EADB195E8357135BA26FEDE2EE187417F816048D00FC23512737A2113709A77E4170C49A94B7FDFF45FF579A72287743102E7766C35CA5ABC5DFE2F63A1E726CE5FBD2926DB03A2DD18B03FC1508A9AAC45EB362440203A323E09EDEE6324EE2E37B4432C1867ED" #h"1730BD2FEBD59095C801A4376058DD04771452506F3EBF8F22CE8661D2BD7E1617CC9CC88133C4D8CC22F4C20F09B88E643048E064CE193D088C4CD8BEAD28920E085BE85EDFE91DA754F0AB4A4A35AAD828523531C596C12C2A5AA8235735713ACD617776006E0A9E8BEC142F49FA59EEC753BB5FEA3C8D9FD5B1B8C1D93F7D040D2417D3A3778F750674D438E1B50C014C968561861C79F42BBC60C23C835413A59CE38A2D81DE038B44851D5E8C3747BAE14CD3D8D4AD463C796941FA54C6D965308467A5AA0864DA959FD6DC17F9944E359E415B72F7FA31E40530F16502241AA52B1C83F5417EC8D9B2089863EA3EEED172046B328EEC176F1E133F134CA5" :block-length 128 :digest-length 257) ironclad-0.57/testing/test-vectors/skein1024-384.testvec000066400000000000000000000014231420372057600227200ustar00rootroot00000000000000;;; tests from skein golden kat (:digest-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"B40D9E5110DF88376AA744D65544D26E8C5705B2D461EFF6FAED65EBCE94583FFC5399A5FAC00BFF1184523BC55BAC0A") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"A550F3071A8826044FF5F14E88AA86938087A10C155102C09D3B3E3BBF5C96B0FE9C1C705E5D0BACCDC98FED102542E5") ironclad-0.57/testing/test-vectors/skein1024-512.testvec000066400000000000000000000015231420372057600227120ustar00rootroot00000000000000;;; tests from skein golden kat (:digest-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2DF89E1021071C136CA68C020D0A670D980DC7750D23BB084D7BFF10CA2F2F51FA1E584DA858DF1FC58287B7C6F2BEC2C48DCAAFCCD35F4682E68759B62B6A70") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"57E3DE8CA38A69C9405ABF2A4063B4855C775B6D6C464725D325FAF27EB6F15F086B11DA99E252ACFCF3BBE62E08BC10252850C40BB4766C32C10D998DB27B10") ironclad-0.57/testing/test-vectors/skein1024.testvec000066400000000000000000000066631420372057600224170ustar00rootroot00000000000000;;; tests from skein v1.3 paper (:digest-test #h"FF" #h"E62C05802EA0152407CDD8787FDA9E35703DE862A4FBC119CFF8590AFE79250BCCC8B3FAF1BD2422AB5C0D263FB2F8AFB3F796F048000381531B6F00D85161BC0FFF4BEF2486B1EBCD3773FABF50AD4AD5639AF9040E3F29C6C931301BF79832E9DA09857E831E82EF8B4691C235656515D437D2BDA33BCEC001C67FFDE15BA8") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"1F3E02C46FB80A3FCD2DFBBC7C173800B40C60C2354AF551189EBF433C3D85F9FF1803E6D920493179ED7AE7FCE69C3581A5A2F82D3E0C7A295574D0CD7D217C484D2F6313D59A7718EAD07D0729C24851D7E7D2491B902D489194E6B7D369DB0AB7AA106F0EE0A39A42EFC54F18D93776080985F907574F995EC6A37153A578") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A898887868584838281807F7E7D7C7B7A797877767574737271706F6E6D6C6B6A696867666564636261605F5E5D5C5B5A595857565554535251504F4E4D4C4B4A494847464544434241403F3E3D3C3B3A393837363534333231302F2E2D2C2B2A292827262524232221201F1E1D1C1B1A191817161514131211100F0E0D0C0B0A09080706050403020100" #h"842A53C99C12B0CF80CF69491BE5E2F7515DE8733B6EA9422DFD676665B5FA42FFB3A9C48C217777950848CECDB48F640F81FB92BEF6F88F7A85C1F7CD1446C9161C0AFE8F25AE444F40D3680081C35AA43F640FD5FA3C3C030BCC06ABAC01D098BCC984EBD8322712921E00B1BA07D6D01F26907050255EF2C8E24F716C52A5") ;;; tests from skein golden kat (:digest-test #h"" #h"0FFF9563BB3279289227AC77D319B6FFF8D7E9F09DA1247B72A0A265CD6D2A62645AD547ED8193DB48CFF847C06494A03F55666D3B47EB4C20456C9373C86297D630D5578EBD34CB40991578F9F52B18003EFA35D3DA6553FF35DB91B81AB890BEC1B189B7F52CB2A783EBB7D823D725B0B4A71F6824E88F68F982EEFC6D19C6") (:digest-test #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"F855173813D124CE9966142DF64DC4F2F882B59FAC63AD512E2A6F69F0BEF5C25C28BECCDAA9D72067F88866474DEBB59A4226D2BD6D0352C755B6E09A77EE981B5D1D29D936527C1B943A2588420AB81C93B459BCF4ADE1D26F6EBDC192710E7090D23C1A189C7CEEA30A6FD6D3A3A6A6C963BBEE9AA648997B2C599069FC74") (:digest-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8118D174A0BC09505A2F677C6DCBC1B8C5A7C6720F6C59D60AFBC7CD6F64E20A92B64095C39EDB56A2F47C2683C5116FF358FD969E76D44C1F50C92B26171A33FA9EEBAF0D1F320D4144BC97EA00D59F00598643439CC13BBDADDDE6671A89E9A40D3002A29300E7C665B606D8B7167254787C867BE8141A56E8D1145865CCB9") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"1F3E02C46FB80A3FCD2DFBBC7C173800B40C60C2354AF551189EBF433C3D85F9FF1803E6D920493179ED7AE7FCE69C3581A5A2F82D3E0C7A295574D0CD7D217C484D2F6313D59A7718EAD07D0729C24851D7E7D2491B902D489194E6B7D369DB0AB7AA106F0EE0A39A42EFC54F18D93776080985F907574F995EC6A37153A578") ironclad-0.57/testing/test-vectors/skein256-128.testvec000066400000000000000000000004711420372057600226440ustar00rootroot00000000000000(:digest-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"67947C6F10AC8C9F96DFBC108C66B7D0") ironclad-0.57/testing/test-vectors/skein256-160.testvec000066400000000000000000000012431420372057600226360ustar00rootroot00000000000000;;; tests from skein golden kat (:digest-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2E693AA8CAFB42D90C808F7D2FB6C925DF618275") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"1FD30886A2C315DE86F67FFE66EDDDCF73BE4FE4") ironclad-0.57/testing/test-vectors/skein256-224.testvec000066400000000000000000000013031420372057600226340ustar00rootroot00000000000000;;; tests from skein golden kat (:digest-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"F4B52FCED0C88E95A3CA67B2D2D8D8D4D2DD16CAFC0DB7AECE570F53") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"FAE243AB76B414FC4883EE73102FDCF51C2D74B98DF185A0BE9045F6") ironclad-0.57/testing/test-vectors/skein256.testvec000066400000000000000000000030631420372057600223340ustar00rootroot00000000000000;;; tests from skein v1.3 paper (:digest-test #h"FF" #h"0B98DCD198EA0E50A7A244C444E25C23DA30C10FC9A1F270A6637F1F34E67ED2") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0" #h"8D0FA4EF777FD759DFD4044E6F6A5AC3C774AEC943DCFC07927B723B5DBF408B") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0" #h"DF28E916630D0B44C4A849DC9A02F07A07CB30F732318256B15D865AC4AE162F") ;;; tests from skein golden kat (:digest-test #h"" #h"C8877087DA56E072870DAA843F176E9453115929094C3A40C463A196C29BF7BA") (:digest-test #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8B0913FE583AF838E745EC9011978482FB83A3C58EDA5FA04FF70832B1AC639A") (:digest-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"35DA44B91BFB020E6E85592E3310A6E6D8939A64C778913003A61BC13583EDAF") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"180DE106A70401BA38F2597C25CBEFC736DFD88D90F2D3352E0EB255AFB6DB63") ironclad-0.57/testing/test-vectors/skein512-128.testvec000066400000000000000000000004711420372057600226370ustar00rootroot00000000000000(:digest-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"0E4CADDC02A260C3E43FDDB6ED8DD331") ironclad-0.57/testing/test-vectors/skein512-160.testvec000066400000000000000000000012431420372057600226310ustar00rootroot00000000000000;;; tests from skein golden kat (:digest-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"9CC1810DDFE971CF71FED0815DF862926C85CA6E") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"7D59D23FCF38FF54710F0D38D3A0ACCE7B8D64F6") ironclad-0.57/testing/test-vectors/skein512-224.testvec000066400000000000000000000013031420372057600226270ustar00rootroot00000000000000;;; tests from skein golden kat (:digest-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"BEC6A37A9F086BB2397AE1BDF000EC5EB87AD58039F36123A27E0EF1") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"21521B15C8A9F05D5958F997008E95C50C4EEE35FB30BA81D5831856") ironclad-0.57/testing/test-vectors/skein512-256.testvec000066400000000000000000000013231420372057600226360ustar00rootroot00000000000000;;; tests from skein golden kat (:digest-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"2D0E2E241972DF39BE822A8C682105C64747FAF8A10EC032881DE7DC67887CC2") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"1A6A5BA08E74A864B5CB052CFB9B2FA128203230A4D9923A329F5427C477A4DB") ironclad-0.57/testing/test-vectors/skein512-384.testvec000066400000000000000000000014231420372057600226410ustar00rootroot00000000000000;;; tests from skein golden kat (:digest-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"E63EA4698F314AD9F8F8CBD1F336E027955F8DCE78C3210AF9B1F46BD328367D8E88D431071C4385CD8B50D74862C248") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"EEAF4DC9B668C2A270B90CBD2E986C857E464B08903E5B6DDA1F15736F50D1BF2B6C40A398B79C67533592EFD96BD8DC") ironclad-0.57/testing/test-vectors/skein512.testvec000066400000000000000000000042631420372057600223320ustar00rootroot00000000000000;;; tests from skein v1.3 paper (:digest-test #h"FF" #h"71B7BCE6FE6452227B9CED6014249E5BF9A9754C3AD618CCC4E0AAE16B316CC8CA698D864307ED3E80B6EF1570812AC5272DC409B5A012DF2A579102F340617A") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0" #h"45863BA3BE0C4DFC27E75D358496F4AC9A736A505D9313B42B2F5EADA79FC17F63861E947AFB1D056AA199575AD3F8C9A3CC1780B5E5FA4CAE050E989876625B") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"91CCA510C263C4DDD010530A33073309628631F308747E1BCBAA90E451CAB92E5188087AF4188773A332303E6667A7A210856F742139000071F48E8BA2A5ADB7") ;;; tests from skein golden kat (:digest-test #h"" #h"BC5B4C50925519C290CC634277AE3D6257212395CBA733BBAD37A4AF0FA06AF41FCA7903D06564FEA7A2D3730DBDB80C1F85562DFCC070334EA4D1D9E72CBA7A") (:digest-test #h"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"24359E4DA39DB5B4995087C3173BD16DC73E65AB7EC1991F7FA8A3DB239397DC09C9461157D939B28FB8107A13B31A15158BD00F85433AD2AAE4A1B01B25E84D") (:digest-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"FBE65B75D681B2FE354780BDDF82CCF164C5CB2827F8E4E7DE96235907443428957881C76CE46555E2BB9EE34F42F7A9B2E090B55D73C7A02506E17BBDFFA4F2") (:digest-test #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"91CCA510C263C4DDD010530A33073309628631F308747E1BCBAA90E451CAB92E5188087AF4188773A332303E6667A7A210856F742139000071F48E8BA2A5ADB7") ironclad-0.57/testing/test-vectors/sm3.testvec000066400000000000000000000216511420372057600214730ustar00rootroot00000000000000;; Test vectors from https://tools.ietf.org/html/draft-shen-sm3-hash (:digest-test #h"616263" #h"66c7f0f462eeedd9d1f2d46bdc10e4e24167c4875cf2f7a2297da02b8f4ba8e0") (:digest-test #h"61626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"debe9ff92275b8a138604889c18e5a4d6fdb70e5387e5765293dcba39c0c5732") ;; Test vectors from Crypto++ (:digest-test #h"" #h"1ab21d8355cfa17f8e61194831e81a8f22bec8c728fefb747ed035eb5082aa2b") (:digest-test #h"61626364" #h"82ec580fe6d36ae4f81cae3c73f4a5b3b5a09c943172dc9053c69fd8e18dca1e") (:digest-test #h"6162636461626364" #h"b58b85b795b34879c354428f7c78cd1486c4ef25ea4c5d68e611ff41c15731ef") (:digest-test #h"616263646162636461626364" #h"fd959b2560dadd0c0839144be6090cb665915156179c1fa6dc00292da7a2b9c2") (:digest-test #h"61626364616263646162636461626364" #h"639c6f6b30d93ecebd559a953ba2eb72705db7d2be82bbf32979380e02124971") (:digest-test #h"6162636461626364616263646162636461626364" #h"3f0371287a1d1fd198e12bba07e94ae5815dc7e06ba45856b6e53e56f1594f23") (:digest-test #h"616263646162636461626364616263646162636461626364" #h"8d15c0b9e7540b5f41b359774127ee51d126a3c780357336c7d39d6ffc01f130") (:digest-test #h"61626364616263646162636461626364616263646162636461626364" #h"0a5a2fafba54c2a6593b18c5877c50c26bee5369bc7f07b0c66a641e49295419") (:digest-test #h"6162636461626364616263646162636461626364616263646162636461626364" #h"73edef5c9d3710f14dbaf892f50ce9dfab48e462d837d93ec0f9422c5f2a4007") (:digest-test #h"616263646162636461626364616263646162636461626364616263646162636461626364" #h"28a6a907842a5b4a360cead2ff6f0b96f1b28c12e5c9ed0be58169c26863b0d8") (:digest-test #h"61626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"035be9acd343d3711a61972ea6a80d4deb38e40c901f1cd20786cf57c82ce8ed") (:digest-test #h"6162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"7a04f699def87c0ef8a9dd44d46a71a39e6b594bc467298d04454e52aa922dca") (:digest-test #h"616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"6fe77b627c1a12bc367d13c8f07b32ffbde1a537b1b9cb061bf7d75a692e02bb") (:digest-test #h"61626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"4251f280685451d9f73d75e6d59f4e3f140f3a0b22f9cb0416e4dd15c1410d11") (:digest-test #h"6162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"9a032f0cf27e4b408f252452d451cac51a422d43ae73ab6cd7ec2483241358e9") (:digest-test #h"616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"7b0685c88114bee154296c262d619a3d43c4fbf325d5dcb6f2bbdbf96d4275db") (:digest-test #h"61626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"debe9ff92275b8a138604889c18e5a4d6fdb70e5387e5765293dcba39c0c5732") (:digest-test #h"6162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"860f7ad118996a6f631c5e4ac693157aefda97a18a873d3323f64c28a8a44fc5") (:digest-test #h"616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"0c5e778ef656184f8c9ee54f0fe0c9ce5059e02c771325184619be82c92a8c5a") (:digest-test #h"61626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"bb78eaeb6b00d13d43ab682b8d65512aa9e91fbc8c6c2841c6b96345f44f9652") (:digest-test #h"6162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"716f5396cc9312609c28c645344ec695fdabdb9fbf11de36c1b33ac5291cca6c") (:digest-test #h"616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"24ce4fbaab353814f890561cbde3d10308c33ac6831ff74e236e8e0525b2cd4e") (:digest-test #h"61626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"5852844cbc2d742d4b129392646b3a1029c54f9813eec409012bf2c4bf0acdeb") (:digest-test #h"6162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"3efb9d84992a87607dc43d91fb818cdbebe3f6cfac66456495f6cb922f9c2fb3") (:digest-test #h"616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364616263646162636461626364" #h"994bf36eb6c0099b21d6ead2cf71490ea57aa845f0feed97d7f8ce2788e22342") ;; Test vectors from GmSSL (:digest-test #h"8f" #h"2b6173f01b9002cac00ec91c8b481867c2e35bf408bde154d62844da1b5b6e18") (:digest-test #h"bf23" #h"b49515e07f9e777070d725fd49d41579d263cffb4ec3fa65b93c87b473d91cb9") (:digest-test #h"7a9719" #h"171e937ace4b4e18fef1efbae2feaaa7f1022f722ffc82155a24e75ae4ac4b29") (:digest-test #h"fb39e8cc" #h"041326870d40091c58ce7a252458e86cf19664ca6aa7e11db8952329b7688a1c") (:digest-test #h"95aaf89fe9" #h"b2249a453544ca8699e07b369382001e8d741c76cad673851a4a25be5c1765cd") (:digest-test #h"7688740e973d" #h"5ac22e272e9c6e7cef2c17178302817d865cb178c6c04b331b0e5ee61c2014f9") (:digest-test #h"d7b976b5f139c5" #h"667509d27e794d11621817e993b8da4accacb3f83a719e635e0ea455905040de") (:digest-test #h"391b4861669a3de0" #h"911b051b02636a5efe12ec8fafa3b18d55b1aa6c4bc9e07789b2d44470b94167") (:digest-test #h"e71ec750cc768837a8" #h"429debaa692b6aeb85aae6666ed2f8c206395d6a87560699dca23d6035918b28") (:digest-test #h"898fb851bb90bceefb6d" #h"140f2130d810310c5d0a988e9b380678031c4a9050aabe1a7b5603a98f452684") (:digest-test #h"7d33665e8ef4f522b55df7" #h"3b4c28a7bd3ab41b65525f580edcbe1a308c3fa09d821c192858a349581ca55b") (:digest-test #h"815e16c63b984946c07ad55a" #h"ecc8181aaffc4dbce05c8ad2b3544bf6838791d6c9966de2996318b33ee37b8b") (:digest-test #h"87eb36f4116f4d2aa05c9d2b56" #h"5b617c321f8769b5227bc02471c117f44dfdf816ebabb60575d07edef1f880c0") (:digest-test #h"f670d1ed03316874263b039cb53a" #h"911048c7853c404970a9230fd997a95b5b4a00ff74a8aafbbce72b4f9444de8f") (:digest-test #h"102cb525fa7e0de28efe6d2f2ad1b1" #h"ddc82e25eb0caa33ee7229a12ac69a7b9b72345236e835857e81bd2173edc532") (:digest-test #h"74c2e33d49e8c2a5144e82edc04218f9" #h"ad2b435cda7615f0ac367aeca843a69189b665552233f4804439090f86f3009f") (:digest-test #h"706c9721e103771b688e97636ab26b412c" #h"78b026963e21183970483449ee9272a877a2254c89c63f0f6a0b4b86dea1db33") (:digest-test #h"ac24ded9e54844b3e0ca037ec1d0f8103fec" #h"eb46d32b15ebf5c5fd2af316c9717065cc21376053945f04cb6f92d31e1666e9") (:digest-test #h"1b39c5a77a7cd6d538c3d2d1079f3f5338c620" #h"c1761751af06a5be5233bd7a8d6fc497fc1ea3f36cafb988e457f281615bf867") (:digest-test #h"65a647b8dd26dcaece299788b13ac05a0e71c577" #h"7239694c9b61cdf9e62d5d48bafdc283f2041a9c0845e0dd975bb3a8e5a01198") (:digest-test #h"98f13468ff3c69382495d34ba12e1e4bd895bec29a" #h"6b70357406f59521ba34f961aa4c7d78a088db325595d6267af5d499f1d95b1f") (:digest-test #h"03de8240c26bbaef801d579d2f2be849ffeab779e056" #h"d98dea9c0a614fb689750c75fd4c6d5e91447104f8f563dbea1f50602da018f5") (:digest-test #h"a733f4adfbe6b110c1ef6fd3599b680a6fa5644fbcd073" #h"acfaaad49a8b94d1df81ea951a30ee2b899fba79f60c452f63af3c79e1283944") (:digest-test #h"1cb083e53c6242d1dd62510ccfb3d5496d692b8017023bae" #h"1ec1f230391a74818cf79b24c9b4df63f0a291e317eed70990c65efad9b5ad33") (:digest-test #h"6a8000baf113ddee93437ce36c9b28f69f0df4a0500633eeab" #h"9aa7e33e6d4edc5e487a4a15b9bfa013d167d256afd86df7770468107df19f87") (:digest-test #h"d2d424446f9b2b29efcf93f2da96208a90a39fb0dc7e46ad8f53" #h"6f5321a4bd11eb49dcfc9214d1391fcb733bedca2148f05a18afcc3d141211e6") (:digest-test #h"db1bcaf89851cbcc847347eb4b1d0c40ea6f3e0de1853d713704bc" #h"6194eeda953c297c20ec9876e4f0d51c44c1ccc4037cc90e6ba184572c84ef2f") (:digest-test #h"bab74a186887702204977bceefb1bba1d52c9c58667e7fe0e3f4bc19" #h"e715a625d3d1271f8a3aadcf215f91161c1bc161bd645627b78c707f0c8b3b3f") (:digest-test #h"36cdc511b3082afd547f4331298f879aa742c634c10e0263f80efdeece" #h"4c77eb46a03cc08c37ee567127c0bce8f952ba5fdd729ff6fc44e3ffe307a507") (:digest-test #h"072bedbcbe5f9295ec6a2bf22490d984bc7388fe99035916c1262e8b592c" #h"6a1ad547946c39bb22dda3dc8b861010790d8cebf4cf8dc3c9493ca8d4c92f70") (:digest-test #h"6009dced63eef9985da162f1beda1b56e0c17d51119b1aaeee7b28050bd1dd" #h"8abe85411e3ce2c2a2e582eda291d45fcd3a4a5cd7e1851a7e67a49fa2f3ba9a") (:digest-test #h"45dc649b6c57a9e21e9b069d06e12729b80a62facd901c6e9ed10c38ba5c2e65" #h"355422a0c526088b16c5207d1adad939cf9642150ebe110e213f23884f8db789") (:digest-test #h"8d8ac08987feb09407263bc7cd471911372f1daebe2c879b258c0efbef9c544aba" #h"d730e1a1482889c9f4f2b661941c2e1ea6a12f1c78e70908df164b33c6226dee") ironclad-0.57/testing/test-vectors/sm4.testvec000066400000000000000000000114551420372057600214750ustar00rootroot00000000000000;; Test vectors from https://eprint.iacr.org/2008/329.pdf (:ecb-mode-test #h"0123456789abcdeffedcba9876543210" #h"0123456789abcdeffedcba9876543210" #h"681edf34d206965e86b3e94f536e4246") ;; Test vectors from Crypto++ (:ecb-mode-test #h"eb23add6454757555747395b76661c9a" #h"d294d879a1f02c7c5906d6c2d0c54d9f" #h"865de90d6b6e99273e2d44859d9c16df") (:ecb-mode-test #h"11e3790f430b4729da1eef291bce99cd" #h"04a36e56b2032b725dde112fce3f8398" #h"4076848ad4563b9d8e3fd09ba2e5dcfe") (:ecb-mode-test #h"4310652e0bb55c2cba9aebd4fc2bed5c" #h"cb33507774e6e161cd5029e901c6c36a" #h"64b8d9fb4114d490ffbd105969310ef9") (:ecb-mode-test #h"fdba958326cd690f28c7632b5ebef6a1" #h"bae8a9b1c3319d3fc9d48817e034fe1b" #h"19c70a4e9fe8d6739863224c8734a79b") (:ecb-mode-test #h"63af71ae3ce38fd96afaaaf12cc3d5d3" #h"a505b41e20c73c777f56235261198e56" #h"2f6071bc04f55844bc8675fabea3f727") (:ecb-mode-test #h"03f360d31da9dbd2f0bfffeaefdb1d1e" #h"8177f025ddbc7ce919dc5d2612548878" #h"d7447f601c174aabc62e06bb85bb597c") (:ecb-mode-test #h"ea326bd4223b2f1be3cb0319220adcae" #h"15dbe19a7fac233433cb9ca190fac2f1" #h"6bc11d09bb46092831e2399cf1525f43") (:ecb-mode-test #h"f1163693e6e70cbf48e774368142286f" #h"95ff06c4a634e09baad6f1b2230662c7" #h"558614db4dd8aa43717c14c7b87a8d79") (:ecb-mode-test #h"cbad11138e97ee20b140bd8923031488" #h"a514119f5ab688278e581cfca5bdff5f" #h"8e4682e2a5f92b777caff65275528caf") (:ecb-mode-test #h"3198ab4e006a5180966d5075912bc406" #h"5f9b108b715f047b7879e323b0d95c3b" #h"7b40084f82caaa25821862f986abd424") ;; Test vectors from Botan (:ecb-mode-test #h"f11235535318fa844a3cbe643169f59e" #h"a27ee076e48e6f389710ec7b5e8a3be5" #h"94cfe3f59e8507fec41dbe738ccd53e1") (:ecb-mode-test #h"419a55a70c401da6571654bc4af1f6d7" #h"9b6294ae9be009c87caefcd842632a1d" #h"9868917b7329ce6f1e1fba6e404d8f20") (:ecb-mode-test #h"ee1e457608d7704a99f76c73815cbfa8" #h"c89c30ad3b257ca7635052ed63b6d268" #h"ce25779ca2a8eefd7add059273e2a1fd") (:ecb-mode-test #h"43d99b186beaa4e2de3159f77bf708fa" #h"91cb86ca6b0fdf6671ff4ae4bf63ad6c" #h"3a6b1df36c9cbfc327ff8b6c7318579c") (:ecb-mode-test #h"bbe5816e2b56084fcdeab9b739ce899e" #h"b607bb382377f3b6d5fb740e3bf0e822" #h"4dcdc1708360a700130c3bd90c8f626f") (:ecb-mode-test #h"bf35fee606e59d0e1e18bda40180672c" #h"6f217dad31488a54a7f4482d1be230bc" #h"de1aaea076633b37b54aef10b180661a") (:ecb-mode-test #h"d2b1ce2cfdb2306be24f0364434f7734" #h"7ab0e2cc96e55659e5078591f510b721" #h"052e420981d36c01a96a8302f71fb7a6") (:ecb-mode-test #h"2ddd024a42b24a9652c8c52021024c33" #h"c9bd217786c00f420a88d6818b685a02" #h"ce273e3523b443eb34c7b6a153fc9308") (:ecb-mode-test #h"4a6453202ec4378492bfa3d6a685f6cd" #h"b9edc63029f5fa1390918736590a3483" #h"2c7e67e24281ba3271e6fff2d2b91b75") (:ecb-mode-test #h"6fc86efe73b3af96014e490882a34825" #h"13805831d15593ba3cf4553d4aefdb71" #h"a32951875534f6b1abb12465ef370fdc") (:keystream-test #h"7aa9470dc8182d09d2bb84411ffb6f96" #h"4efbe9452824555156404a8e1d201a9d" #h"b5f503e76d6505b344f1ddfe2e679814fc791684bb7e5e57a4d7027442701747bffdbb66fc920375397177a26ac8aba026cd627547b7f5ee9e8878ba1adafe905ab12f6cc5105975c3960945d9de29d5c07b3f037aad870304b2e4c47b7f81f4c1a8caab03432ba3a6dc38f570c1db9c069caabe50a1490952da1a68a1610bd9919c0a0936656ea9aaf613b067da0416b0c7dbc15d41ca9b49437fd47dbd649ffbf8b22987fb804729dca6f385c3932278807c81dc4d02a335d87efaaade78d19f270edb4a9bf8e6615f622e04239635d835470636ace72aa580b3cf8beda8d39ecd0caba5df7c6f7ae5a6465adb54686177f6965aab4be4caf8240cdc6422addd7c7e77c55801f10ab688cc9a67c2dc99bc6005d2628d97ba159689eb5bbc21ba98a48b33142a1f5ecda2e304167cb0060b88762df381842dad4230b2dcfac1225e734c15c3042ab006627c222c1e11f4a0fe22eb944756c6db434eea97628b0852cef46f59c604c3fd7472a130fad89961a9624827cec7c23949ab7570426f9c4f13033a417012ec8bc49481248bffd3295c92ae20dcc2a17d6e4c553790b6b64367fd320821f34014f517d44d8d4f5e0193bf2def8f55f3ab10d808feffd6289f21db6aca04ed08d6579e0ea0184e72d9ad325dbc45abc5fea540e6f890d959ca7dff296c26d9780d4e964be4b709c2c2125a75c22f2c21044515d0d0a1da6dc9f2607e2269691839ae1427bcfe629eea4d8f91ab97ee4372893950cea3e0b5d6e26e443c9632bfc57acc9563e93f0b5811a3fd6bbaf5b83be98d093ddd994a9db17e71c36d90b1fdc57c2421ee583f6d66b89ad6978a7b541dd4dad93cf5c5a5c004661ef9d0da23c6a4b110fdcaa8b762304009e8d24004e952688bb3563710f0200aa398114f3e95a2194c8d9ee96c63d90c7a2d32f7c41223834acf6afa899ddf84c3011a675ec3770000b6e2f218835bd6cd8b58473471b80748817f16d70bb17d2e99277db1bd8dadbc0514dbb3afad64dee9234bf3bed52c68bbc1f8aaf6138f2e0c8d8c3abefedc644c4a516863ca424bfb51ca5bf508c5b14a8cb5667a2bed482b24decf23549d53e0b13d0dafe86b9c111e8e60dc054cf0fbb0ddeebcf789d0b3900e28531f94ebdc86e2eb40bbb2faec16ca905747bb3c1fc31f2faba15a00eff14825a3e903c54e14c6f2d497d705dad51f1179241959a3bccdb92c305b3be26272c0f7fc19a9e4c07b3be970c08bd90601a9a229b212cac82cba523f9b4a7c573ad68cef99ece2cefc5bc44769275dd1f46d68d55da74e70b7c83260eb89cbfc25141481e72351cc26e1fe898c412efa9dad957086ae4f89737dd705dc13469888c1c593ea558f129a7c1c8c85005130ee3cf357625b96c324fc7550fe0fdf7e") ironclad-0.57/testing/test-vectors/sosemanuk.testvec000066400000000000000000000145011420372057600227720ustar00rootroot00000000000000;;;; Sosemanuk test vectors (:stream-nonce-mode-test #h"80000000000000000000000000000000" #h"00000000000000000000000000000000" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"53CAFDD607EB210D76C83F898592A34E1D52AFCD3E3709D14F8CC9D1566528C247B3D7253FF81B7B037B8D7ABA761FD253A9F4FA7F10713E6903F66DAD7CB109") (:stream-nonce-mode-test #h"00400000000000000000000000000000" #h"00000000000000000000000000000000" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"B2266FB1017599B3DDBD7EBB261DDFD9F6E2FF5227F9DE5A12FAE5F784C97F7939FCDFC0CF5CE301C09F8C1159F3FCA2D1D9B3EA36496C5A7D20520DAF6F178C") (:stream-nonce-mode-test #h"00002000000000000000000000000000" #h"00000000000000000000000000000000" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"B9311A34EA226B1514A941AAA35276DAB76527171B984BF301F18DD01D5E7B529388F847B9452B8A749FB3AEACCEA127653734BFD9D11F034ECEF0146369E1E6") (:stream-nonce-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000000" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"761C68BC2EB1912A8EDC71807C4F291F80755F3555016BD7FC12EA40A0A1D8AABF3AE8F83134157938EA22C407FA7E29E346A018E2F047C8079213791A1D9556") (:stream-nonce-mode-test #h"09090909090909090909090909090909" #h"00000000000000000000000000000000" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"FC617CF31401E7696C77690548712A6A0552803400F40024E6E7BD399CEF7390544CF178A5BD0A72878A8E3B3D10D7F09824B10406D3DFEA55439A34F87AC807") (:stream-nonce-mode-test #h"12121212121212121212121212121212" #h"00000000000000000000000000000000" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"21138011538F1A535207B8BC9CD06DFCDA0D733486A72FEC1A909D804A7D0979DCEE2063625621D7A06081D171D1BE737E405304D6875273C22F64F44CCCB9D6") (:stream-nonce-mode-test #h"0053A6F94C9FF24598EB3E91E4378ADD" #h"0D74DB42A91077DE45AC137AE148AF16" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"F28D62E5FD4E3A33CD6BFCABBC96E8AFF6D320C2569BDE753C4A6CBC18504FC53DB070D52CCC2BBAC7977198657DBC7510F8425390852D51FAB34DBE3DB971BB") (:stream-nonce-mode-test #h"0558ABFE51A4F74A9DF04396E93C8FE2" #h"167DE44BB21980E74EB51C83EA51B81F" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"72BEE9C2C8CE2D1A23CCA5C78390651F706AD47A118E4630DC7E7396B2B53068A990D82B7DFA41928D6EA6339787A4A182637CF51DEB8CDB988224254D244D3B") (:stream-nonce-mode-test #h"0A5DB00356A9FC4FA2F5489BEE4194E7" #h"1F86ED54BB2289F057BE258CF35AC128" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"77AC8B7E56E6E54C44814153609BF5424DA5F6C200D36729E5F515CF3E057CF5165211BB31CBCCDAA60F9FD565965769055A8AC5B963EAD96646970B9E59EF85") (:stream-nonce-mode-test #h"ed592a7a87994ad243e401d8aacef230a1689aec825917ad" #h"4fc3f2dfe5786220e3fd764e7f2ed38d" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"58af9354b31113c3d451988750aaa6f220bab09bcf836018e5aaf6a0b2de88a9a1b52e3c281b0604d6c0e04f93b5e0694239d45cb3d1ea4eb7eb36052b14c16d0c9be91552a5b715f693652ab8f1b3966360540629afdb5076a8b89e568f0efee55931f91ac0f4faddd7115914dd0a1bfe1e646b7657228ed346a0c8ecd8532f3501f4e73adf9ca7401dbee60a6dc9ff1a4f69aaa939eb95b6a8a50357b3478bea00746f0d811f6725f80e02e3921f5a1c3c0f019a9daa5559a2f0cc3604d36411bdfa11ea1353be9def9737bcb7569016c67cc18820986aebf683caa13d3dc5b480ddb1cbb7e925f823c3858121d09974c445b09db1067c01cd21e258761cd0") (:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"80000000000000000000000000000000" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"F847D7FF5426BEF5882BD2D0717494AFA9B7BC922915808057581BA9E35E3B7BDAC3FC878D278FE5D145DBB71B6B16A6134475266239B99D04E512982B4113B8") (:stream-nonce-mode-test #h"0053A6F94C9FF24598EB3E91E4378ADD3083D6297CCF2275C81B6EC11467BA0D" #h"0D74DB42A91077DE45AC137AE148AF16" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"55EB8D174C2E0351E5A53C90E84740EB0F5A24AAFEC8E0C9F9D2CE48B2ADB0A34D2E8C4E016102607368FFA43A0F91550706E3548AD9E5EA15A53EB6F0EDE9DC") (:stream-nonce-mode-test #h"0558ABFE51A4F74A9DF04396E93C8FE23588DB2E81D4277ACD2073C6196CBF12" #h"167DE44BB21980E74EB51C83EA51B81F" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"AD5CBBC643ED2EC7C9D6013313D6AFA1A648889299429BFA893F397BD2444C8AC2742BE74E7BFBD3DD032B2A3CAFAD45DEAACB53DF96E717886885103A72AA3B") (:stream-nonce-mode-test #h"0A5DB00356A9FC4FA2F5489BEE4194E73A8DE03386D92C7FD22578CB1E71C417" #h"1F86ED54BB2289F057BE258CF35AC128" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"8ACFB48C93EF7B3EB06FB909D4BBD7B8F8B99735435CD78411D8C2D4BBA564AD5C5EC93F80CA40C4A8A9C119B59F0397583DE1B0050A7CC3E47619A3B0960037") (:stream-nonce-mode-test #h"0F62B5085BAE0154A7FA4DA0F34699EC3F92E5388BDE3184D72A7DD02376C91C" #h"288FF65DC42B92F960C72E95FC63CA31" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"1FC4F2E266B21C24FDDB3492D40A3FA6DE32CDF13908511E84420ABDFA1D3B0FEC600F83409C57CBE0394B90CDB1D759243EFD8B8E2AB7BC453A8D8A3515183E") ironclad-0.57/testing/test-vectors/square.testvec000066400000000000000000001043661420372057600222760ustar00rootroot00000000000000;;; square-test-vectors.lisp ;;; Encryption of the null data block with every key where a single bit is set (:ecb-mode-test #h"80000000000000000000000000000000" #h"00000000000000000000000000000000" #h"05f8aafdefb4f5f9c751e5b36c8a37d8") (:ecb-mode-test #h"40000000000000000000000000000000" #h"00000000000000000000000000000000" #h"60affc9b2312b1397177251cc9296391") (:ecb-mode-test #h"20000000000000000000000000000000" #h"00000000000000000000000000000000" #h"d67b7e07c38f311446e16ddd9ea96ebe") (:ecb-mode-test #h"10000000000000000000000000000000" #h"00000000000000000000000000000000" #h"39207579067031706fab8c3a5c6e5524") (:ecb-mode-test #h"08000000000000000000000000000000" #h"00000000000000000000000000000000" #h"fc4f2602a3f6ac34f56906c2eeee40c5") (:ecb-mode-test #h"04000000000000000000000000000000" #h"00000000000000000000000000000000" #h"6f2431469f4a0866632216c59c18ff11") (:ecb-mode-test #h"02000000000000000000000000000000" #h"00000000000000000000000000000000" #h"c745f6f339d1bb9524e1b2d2b0dde843") (:ecb-mode-test #h"01000000000000000000000000000000" #h"00000000000000000000000000000000" #h"241e113a1bb5c32cc45d95d7734165aa") (:ecb-mode-test #h"00800000000000000000000000000000" #h"00000000000000000000000000000000" #h"5e16777211c67ae4609f6a47bf5df2c4") (:ecb-mode-test #h"00400000000000000000000000000000" #h"00000000000000000000000000000000" #h"272330139236c300cd161f0266b62494") (:ecb-mode-test #h"00200000000000000000000000000000" #h"00000000000000000000000000000000" #h"15115b9e29524325e7c992ead262ade8") (:ecb-mode-test #h"00100000000000000000000000000000" #h"00000000000000000000000000000000" #h"acdcce277b801ed53dfe0fc12f4c957b") (:ecb-mode-test #h"00080000000000000000000000000000" #h"00000000000000000000000000000000" #h"9cadb290cedd6f7ca6c10d42fe4c1a70") (:ecb-mode-test #h"00040000000000000000000000000000" #h"00000000000000000000000000000000" #h"d70d4c24ffbf3de6e6bd54ec03b8492a") (:ecb-mode-test #h"00020000000000000000000000000000" #h"00000000000000000000000000000000" #h"602455a418a99a942fed27123b9f73e6") (:ecb-mode-test #h"00010000000000000000000000000000" #h"00000000000000000000000000000000" #h"f239c4efd3729d43081544104378f0ea") (:ecb-mode-test #h"00008000000000000000000000000000" #h"00000000000000000000000000000000" #h"70259a9572990099ac563114074db3d2") (:ecb-mode-test #h"00004000000000000000000000000000" #h"00000000000000000000000000000000" #h"932d3644863b6377100c64f243445e7e") (:ecb-mode-test #h"00002000000000000000000000000000" #h"00000000000000000000000000000000" #h"47100bf12f2e1f718e9430f4127535be") (:ecb-mode-test #h"00001000000000000000000000000000" #h"00000000000000000000000000000000" #h"2ed60ffa71c162a53c3a8bba2b0b042b") (:ecb-mode-test #h"00000800000000000000000000000000" #h"00000000000000000000000000000000" #h"e2992d6bdc7c65b70b62685c0d84425c") (:ecb-mode-test #h"00000400000000000000000000000000" #h"00000000000000000000000000000000" #h"c552ca3d805e456f5239dd7956cacd71") (:ecb-mode-test #h"00000200000000000000000000000000" #h"00000000000000000000000000000000" #h"95b577c2ed3c2d9d96c2106e091b1f72") (:ecb-mode-test #h"00000100000000000000000000000000" #h"00000000000000000000000000000000" #h"3d550ae470bfb0306c3099c8d5a471d8") (:ecb-mode-test #h"00000080000000000000000000000000" #h"00000000000000000000000000000000" #h"fc13974afe73a92598aa95edcb2102e9") (:ecb-mode-test #h"00000040000000000000000000000000" #h"00000000000000000000000000000000" #h"ab0cf3a0cfef3aa3d10738523e624a1d") (:ecb-mode-test #h"00000020000000000000000000000000" #h"00000000000000000000000000000000" #h"72fea53144f673e283547f08da30bdda") (:ecb-mode-test #h"00000010000000000000000000000000" #h"00000000000000000000000000000000" #h"389fef99fa1a3dbf664673aa39d848d1") (:ecb-mode-test #h"00000008000000000000000000000000" #h"00000000000000000000000000000000" #h"041152bca8440e8de572dce9dcc88cdc") (:ecb-mode-test #h"00000004000000000000000000000000" #h"00000000000000000000000000000000" #h"845b37c1338a0ba0f295be273841b940") (:ecb-mode-test #h"00000002000000000000000000000000" #h"00000000000000000000000000000000" #h"e2e3a1c7998040ee6bd8714e65ebd8af") (:ecb-mode-test #h"00000001000000000000000000000000" #h"00000000000000000000000000000000" #h"0b2b34c480648dc91f938dd368464780") (:ecb-mode-test #h"00000000800000000000000000000000" #h"00000000000000000000000000000000" #h"96bad4a54376917044b1076727a91e2b") (:ecb-mode-test #h"00000000400000000000000000000000" #h"00000000000000000000000000000000" #h"dd8c3dff69c3fda2802dffcdef1b1631") (:ecb-mode-test #h"00000000200000000000000000000000" #h"00000000000000000000000000000000" #h"da45872e48af2f0ec7fc395d03ff9451") (:ecb-mode-test #h"00000000100000000000000000000000" #h"00000000000000000000000000000000" #h"b25194c0f1953f35bc4c0871cd2d4a40") (:ecb-mode-test #h"00000000080000000000000000000000" #h"00000000000000000000000000000000" #h"3e09af82736971f2847834082d6ec6f3") (:ecb-mode-test #h"00000000040000000000000000000000" #h"00000000000000000000000000000000" #h"fa75a64f778b914dc4b926626bc8b4c0") (:ecb-mode-test #h"00000000020000000000000000000000" #h"00000000000000000000000000000000" #h"d21542857f03f6a92cacd2e783e33e3e") (:ecb-mode-test #h"00000000010000000000000000000000" #h"00000000000000000000000000000000" #h"1ec0a5b9781c5e90b1e15731e0625c36") (:ecb-mode-test #h"00000000008000000000000000000000" #h"00000000000000000000000000000000" #h"e1c58917e586b6c46c46982fa303f14c") (:ecb-mode-test #h"00000000004000000000000000000000" #h"00000000000000000000000000000000" #h"72ecc0d267b445482924c9969de97a15") (:ecb-mode-test #h"00000000002000000000000000000000" #h"00000000000000000000000000000000" #h"a52af631193375dd59555e2753acde65") (:ecb-mode-test #h"00000000001000000000000000000000" #h"00000000000000000000000000000000" #h"033b8482c4010eb20a3edd4ba35a3db7") (:ecb-mode-test #h"00000000000800000000000000000000" #h"00000000000000000000000000000000" #h"56534a944796abdf51ad247b8c9ee9bb") (:ecb-mode-test #h"00000000000400000000000000000000" #h"00000000000000000000000000000000" #h"9eda6fd2cd4eabf8218b98a165e82b9e") (:ecb-mode-test #h"00000000000200000000000000000000" #h"00000000000000000000000000000000" #h"60043a7e110e1321bc41e4ac47d1f45e") (:ecb-mode-test #h"00000000000100000000000000000000" #h"00000000000000000000000000000000" #h"90e685c8f990cedeacc8a2bfc8e46ca2") (:ecb-mode-test #h"00000000000080000000000000000000" #h"00000000000000000000000000000000" #h"b9e77e32f721c0a7a02b50925311e834") (:ecb-mode-test #h"00000000000040000000000000000000" #h"00000000000000000000000000000000" #h"001d2fe95bb39ef0c3548307ea7580f3") (:ecb-mode-test #h"00000000000020000000000000000000" #h"00000000000000000000000000000000" #h"a5dd651290a063f4e7c5e714c9c398b4") (:ecb-mode-test #h"00000000000010000000000000000000" #h"00000000000000000000000000000000" #h"aa7b3b9f459ba0367ff2a332ef725da1") (:ecb-mode-test #h"00000000000008000000000000000000" #h"00000000000000000000000000000000" #h"a424f80b0048756879ed6343768bbe08") (:ecb-mode-test #h"00000000000004000000000000000000" #h"00000000000000000000000000000000" #h"ea4590786de7f8a68439b4616bf7e4b9") (:ecb-mode-test #h"00000000000002000000000000000000" #h"00000000000000000000000000000000" #h"7d15058fe884dcf0976105a816cf6366") (:ecb-mode-test #h"00000000000001000000000000000000" #h"00000000000000000000000000000000" #h"a07d1b74ae6a3f26a8a25e1e778a0d4a") (:ecb-mode-test #h"00000000000000800000000000000000" #h"00000000000000000000000000000000" #h"61f13db32828961c3e35d9b7ab77b57d") (:ecb-mode-test #h"00000000000000400000000000000000" #h"00000000000000000000000000000000" #h"0e2979112efb29754605011a358093fc") (:ecb-mode-test #h"00000000000000200000000000000000" #h"00000000000000000000000000000000" #h"a878c8a8a5230917c56f7eb74fdada25") (:ecb-mode-test #h"00000000000000100000000000000000" #h"00000000000000000000000000000000" #h"34343f73232790e6fa44d8f606a24de9") (:ecb-mode-test #h"00000000000000080000000000000000" #h"00000000000000000000000000000000" #h"d569b991761c26dde723cca0c262f195") (:ecb-mode-test #h"00000000000000040000000000000000" #h"00000000000000000000000000000000" #h"f1a0f35ada018c5df56ffe0dc95636bf") (:ecb-mode-test #h"00000000000000020000000000000000" #h"00000000000000000000000000000000" #h"b26af455039312e1206290a921459e1a") (:ecb-mode-test #h"00000000000000010000000000000000" #h"00000000000000000000000000000000" #h"594049c7e3a34e1b9bccefaf5e75b373") (:ecb-mode-test #h"00000000000000008000000000000000" #h"00000000000000000000000000000000" #h"4e4e037f07ff26e8e9065f26afedaf2d") (:ecb-mode-test #h"00000000000000004000000000000000" #h"00000000000000000000000000000000" #h"ddedc3ca10ec011ea24dd4566d21409c") (:ecb-mode-test #h"00000000000000002000000000000000" #h"00000000000000000000000000000000" #h"3660f51bb790f275a55aa435db6da193") (:ecb-mode-test #h"00000000000000001000000000000000" #h"00000000000000000000000000000000" #h"a9a7cfe07ea640498e832ae25e2906ed") (:ecb-mode-test #h"00000000000000000800000000000000" #h"00000000000000000000000000000000" #h"3863d1c222a36338ea6d402073341f42") (:ecb-mode-test #h"00000000000000000400000000000000" #h"00000000000000000000000000000000" #h"ced5dfdf8b5d1d60e9ad51830a7965a9") (:ecb-mode-test #h"00000000000000000200000000000000" #h"00000000000000000000000000000000" #h"4ffae5d7a5689a5584330cb0a5cc9cd2") (:ecb-mode-test #h"00000000000000000100000000000000" #h"00000000000000000000000000000000" #h"1dd688d47541463915f658bb656420b4") (:ecb-mode-test #h"00000000000000000080000000000000" #h"00000000000000000000000000000000" #h"ef3a1c1800dd3cda748fbdf17086ba4f") (:ecb-mode-test #h"00000000000000000040000000000000" #h"00000000000000000000000000000000" #h"f9aa9b3e76543ef12f7f8b87ce393328") (:ecb-mode-test #h"00000000000000000020000000000000" #h"00000000000000000000000000000000" #h"1813935bb67dc40dc37c68cc2999758a") (:ecb-mode-test #h"00000000000000000010000000000000" #h"00000000000000000000000000000000" #h"8c4916d59fce8eb913b128f2d7b3d464") (:ecb-mode-test #h"00000000000000000008000000000000" #h"00000000000000000000000000000000" #h"bb88da704c5ce031c61954efcae6ed2d") (:ecb-mode-test #h"00000000000000000004000000000000" #h"00000000000000000000000000000000" #h"4e463bceb0f52c3f722e2926c2bd04a3") (:ecb-mode-test #h"00000000000000000002000000000000" #h"00000000000000000000000000000000" #h"4a6181492a454604293396bbd21c4956") (:ecb-mode-test #h"00000000000000000001000000000000" #h"00000000000000000000000000000000" #h"801f29d5462365735a6ca7a64288f48c") (:ecb-mode-test #h"00000000000000000000800000000000" #h"00000000000000000000000000000000" #h"7933733c4daab746ef048edba2d05538") (:ecb-mode-test #h"00000000000000000000400000000000" #h"00000000000000000000000000000000" #h"4127c1d95431fd2632f2b5e5085a3dd8") (:ecb-mode-test #h"00000000000000000000200000000000" #h"00000000000000000000000000000000" #h"0588168ca7525333460c4030af266388") (:ecb-mode-test #h"00000000000000000000100000000000" #h"00000000000000000000000000000000" #h"32b3f193d7237b48883de002b3cbe1c3") (:ecb-mode-test #h"00000000000000000000080000000000" #h"00000000000000000000000000000000" #h"7ca557bc05b845a233c01412022da825") (:ecb-mode-test #h"00000000000000000000040000000000" #h"00000000000000000000000000000000" #h"54f11361ad6dfbb069be67536cc98d81") (:ecb-mode-test #h"00000000000000000000020000000000" #h"00000000000000000000000000000000" #h"a9df031b4e25e89f527efff89cb0beba") (:ecb-mode-test #h"00000000000000000000010000000000" #h"00000000000000000000000000000000" #h"7da4d0d6309906d935ba27ae00cfaf33") (:ecb-mode-test #h"00000000000000000000008000000000" #h"00000000000000000000000000000000" #h"e231ea0fec29d983d3236bb15e7cd1da") (:ecb-mode-test #h"00000000000000000000004000000000" #h"00000000000000000000000000000000" #h"fe1b963a4f596422a6cd7787f4ab3377") (:ecb-mode-test #h"00000000000000000000002000000000" #h"00000000000000000000000000000000" #h"848833f2f7a247d2e1d0c8614694139f") (:ecb-mode-test #h"00000000000000000000001000000000" #h"00000000000000000000000000000000" #h"630bb1dc4e60d3272b6b673bdb918b20") (:ecb-mode-test #h"00000000000000000000000800000000" #h"00000000000000000000000000000000" #h"500251a5c6ad5a6d2f218a3fd5765727") (:ecb-mode-test #h"00000000000000000000000400000000" #h"00000000000000000000000000000000" #h"d019ef316e84149cfd0e85665aa2fff5") (:ecb-mode-test #h"00000000000000000000000200000000" #h"00000000000000000000000000000000" #h"db0b5ac0e8ef011d710323fa3b8bb3a7") (:ecb-mode-test #h"00000000000000000000000100000000" #h"00000000000000000000000000000000" #h"207e46a533617374d2c9da0c92ffd620") (:ecb-mode-test #h"00000000000000000000000080000000" #h"00000000000000000000000000000000" #h"8273ca155249f9f1ad8cc2ca114984f3") (:ecb-mode-test #h"00000000000000000000000040000000" #h"00000000000000000000000000000000" #h"82a73a18aae84ad671e226470f246e1a") (:ecb-mode-test #h"00000000000000000000000020000000" #h"00000000000000000000000000000000" #h"3e0e1206e333917d4c250bd82fef6afd") (:ecb-mode-test #h"00000000000000000000000010000000" #h"00000000000000000000000000000000" #h"2182f67239be15c796439ea3791202e1") (:ecb-mode-test #h"00000000000000000000000008000000" #h"00000000000000000000000000000000" #h"486fb3fa7b1fe1a304cb4e8960c3c6bb") (:ecb-mode-test #h"00000000000000000000000004000000" #h"00000000000000000000000000000000" #h"c1de50e456c4308d5d70da141cef0b4f") (:ecb-mode-test #h"00000000000000000000000002000000" #h"00000000000000000000000000000000" #h"a623f24515a27cee3dad277429000218") (:ecb-mode-test #h"00000000000000000000000001000000" #h"00000000000000000000000000000000" #h"02fa5762f9cd90201565bce71140c6f4") (:ecb-mode-test #h"00000000000000000000000000800000" #h"00000000000000000000000000000000" #h"a643a0ca5154a7d10b251d562d58ea53") (:ecb-mode-test #h"00000000000000000000000000400000" #h"00000000000000000000000000000000" #h"48660e32b1c7ee7085e5b5e9f719c790") (:ecb-mode-test #h"00000000000000000000000000200000" #h"00000000000000000000000000000000" #h"a96366bb17b67e161fd8e33c3e1f3d2a") (:ecb-mode-test #h"00000000000000000000000000100000" #h"00000000000000000000000000000000" #h"5659ab825fc2de031a6998cacd741ff6") (:ecb-mode-test #h"00000000000000000000000000080000" #h"00000000000000000000000000000000" #h"1253e9e4079e9b573a73cf4ce08dc015") (:ecb-mode-test #h"00000000000000000000000000040000" #h"00000000000000000000000000000000" #h"28205442270c735d4ba79042dce81509") (:ecb-mode-test #h"00000000000000000000000000020000" #h"00000000000000000000000000000000" #h"98cfb10f3ed70bb82cc90597b463a1f6") (:ecb-mode-test #h"00000000000000000000000000010000" #h"00000000000000000000000000000000" #h"cab40433631fe3a272fc401255a58064") (:ecb-mode-test #h"00000000000000000000000000008000" #h"00000000000000000000000000000000" #h"abb041d85114da88e65e8bdcf1c67cc8") (:ecb-mode-test #h"00000000000000000000000000004000" #h"00000000000000000000000000000000" #h"00f0926f0f9eaa0a6238dfce79c8f596") (:ecb-mode-test #h"00000000000000000000000000002000" #h"00000000000000000000000000000000" #h"7c662d01b12d9845705b2bd4d7aef43d") (:ecb-mode-test #h"00000000000000000000000000001000" #h"00000000000000000000000000000000" #h"8f1cc7a0fbe7d70a894d09e12fb22bb8") (:ecb-mode-test #h"00000000000000000000000000000800" #h"00000000000000000000000000000000" #h"ebe03d0c6752d0edfebff879c33d8c07") (:ecb-mode-test #h"00000000000000000000000000000400" #h"00000000000000000000000000000000" #h"b74ce7f67bbd969e8ff8862d1fb1715c") (:ecb-mode-test #h"00000000000000000000000000000200" #h"00000000000000000000000000000000" #h"63ad5ea9d599ec848a40d489c0b85e8a") (:ecb-mode-test #h"00000000000000000000000000000100" #h"00000000000000000000000000000000" #h"4e4167f091ea5776e80fb2fca38c2a04") (:ecb-mode-test #h"00000000000000000000000000000080" #h"00000000000000000000000000000000" #h"dbf0cea3a5ed5b884ac13a2a62c32d51") (:ecb-mode-test #h"00000000000000000000000000000040" #h"00000000000000000000000000000000" #h"7e86285068a376a3b9fe8641a38e3f90") (:ecb-mode-test #h"00000000000000000000000000000020" #h"00000000000000000000000000000000" #h"aec1ef8d651a2cf7b5475fcc7fb7a81a") (:ecb-mode-test #h"00000000000000000000000000000010" #h"00000000000000000000000000000000" #h"fda539d910181ce1a1e1db4c3459600b") (:ecb-mode-test #h"00000000000000000000000000000008" #h"00000000000000000000000000000000" #h"f8072bf053d5b5163949ff0b9bb3f81a") (:ecb-mode-test #h"00000000000000000000000000000004" #h"00000000000000000000000000000000" #h"a31eb966d34ed6a6132a6b6e9128e997") (:ecb-mode-test #h"00000000000000000000000000000002" #h"00000000000000000000000000000000" #h"673aebbff82091a19e758ece151811d0") (:ecb-mode-test #h"00000000000000000000000000000001" #h"00000000000000000000000000000000" #h"369bdb6f102d6bfea7645b1a6753bf37") ;;; Encryption of a sample data block with every key where a single bit is set: (:ecb-mode-test #h"80000000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"ffd90e8a92a1b025108168714f7923f7") (:ecb-mode-test #h"40000000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"64e10ab587bc5d996cf2186c2ff2dd58") (:ecb-mode-test #h"20000000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"eaa404b51336a16c963735588b0b2a0c") (:ecb-mode-test #h"10000000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"51aaa1e37cb08cf5c6ec9241ac36b4c5") (:ecb-mode-test #h"08000000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"c21b34c3c077b30add67d0e2e75e59ec") (:ecb-mode-test #h"04000000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"f33ccd4771932f5e467552e93ae367ab") (:ecb-mode-test #h"02000000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"b70b9f3a5814ddeb6d3549d88c5b4656") (:ecb-mode-test #h"01000000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"5c01c66e9bf9617b155d3902722ccadc") (:ecb-mode-test #h"00800000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"1f47def31d2e7e286172b38119fde307") (:ecb-mode-test #h"00400000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"bd3c2f005cf0eb5ef737c29f457ed549") (:ecb-mode-test #h"00200000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"1d409243f79ce876d13b0fdfea26ccf8") (:ecb-mode-test #h"00100000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"b879e37c2f435b0cb941f74892c1476f") (:ecb-mode-test #h"00080000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"58c6a8884bf8b110c9127893976a9e4e") (:ecb-mode-test #h"00040000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"7a258ac14cb88a31432ba1b320d254f6") (:ecb-mode-test #h"00020000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"ff382f1b4bbb54c9f42b73b256f80d25") (:ecb-mode-test #h"00010000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"0cef334bcbe5d38e23a9780d2e3e9097") (:ecb-mode-test #h"00008000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"3225e13778d2a3bab1eb375e034478c4") (:ecb-mode-test #h"00004000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"4ef73320931377f64e296e49c286e5c9") (:ecb-mode-test #h"00002000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"adbf2c07f2f42eb7d92acc07f9df7a5f") (:ecb-mode-test #h"00001000000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"bfca14ad6925ddb4f563048db1c6b485") (:ecb-mode-test #h"00000800000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"63f01ea46c82dc3b1d81eac5e4f1d687") (:ecb-mode-test #h"00000400000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"b2f6eb69ce81accc720e705146cfc2a2") (:ecb-mode-test #h"00000200000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"85b1ff06090504848fdda74dd830e960") (:ecb-mode-test #h"00000100000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"5bcb44ab29d7c31def58c902c2491333") (:ecb-mode-test #h"00000080000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"4d982cbc7c1455cde7c0de3f83fcbc5e") (:ecb-mode-test #h"00000040000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"32f08276e0633e1d819fc6227e631503") (:ecb-mode-test #h"00000020000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"e6bebd4cddc205399126bfda486ed37c") (:ecb-mode-test #h"00000010000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"afe39df4f356aea5f07069455010d9ce") (:ecb-mode-test #h"00000008000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"a8c7b2c1e8e1ade5e28e4104ff716ba5") (:ecb-mode-test #h"00000004000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"fbb3e4ca3e710a5bd94b50726de5fdb1") (:ecb-mode-test #h"00000002000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"2091d65d6fbb8672d84655f33dc1473a") (:ecb-mode-test #h"00000001000000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"9c74519acc53498333791febfd0e5e8b") (:ecb-mode-test #h"00000000800000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"ed44022a82468ed54203b5863b63061f") (:ecb-mode-test #h"00000000400000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"eae325499a1a9e8e1bd4d6f018e65551") (:ecb-mode-test #h"00000000200000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"b134fe1498d7a1d926d3a623ffa5723e") (:ecb-mode-test #h"00000000100000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"343f8d08a35c272c5cd4064a42a7b6d8") (:ecb-mode-test #h"00000000080000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"79230ea5d7f6b5d85922ed7679aebe08") (:ecb-mode-test #h"00000000040000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"d3f799e3579c68e10fb1c770b1cbb7c7") (:ecb-mode-test #h"00000000020000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"90c24054dc24772ecd92a67a43335320") (:ecb-mode-test #h"00000000010000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"bf38cfda7b75a478fa73316801883d34") (:ecb-mode-test #h"00000000008000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"4323a85f7921a4a1fc072b72b6b46f50") (:ecb-mode-test #h"00000000004000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"3e10218fdefd9a0b91d9032d793aecc8") (:ecb-mode-test #h"00000000002000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"66a759ec5e5cdd9c27a4e97ff0b5aab8") (:ecb-mode-test #h"00000000001000000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"3730876a26727d44a46404f69ba99f09") (:ecb-mode-test #h"00000000000800000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"b277bd5a0e78eafc049bd9aa3393870f") (:ecb-mode-test #h"00000000000400000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"af05cdd3a6dd19fb0199933bdea3c20f") (:ecb-mode-test #h"00000000000200000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"0d962ec5f824d922924f3c39339fa934") (:ecb-mode-test #h"00000000000100000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"de695dab525ffebc039f63c3defb200b") (:ecb-mode-test #h"00000000000080000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"f8ce4303ff6a523a60e3526a28c1c1de") (:ecb-mode-test #h"00000000000040000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"c00c5250a33165254408992f6aa1fb97") (:ecb-mode-test #h"00000000000020000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"7e81d9c10bc3ac8fcac65079867183ff") (:ecb-mode-test #h"00000000000010000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"42f91fe46e5f6485973123b586cc2517") (:ecb-mode-test #h"00000000000008000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"0900c5c4bb963e1e421571056aeda9f0") (:ecb-mode-test #h"00000000000004000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"933312932700ef9c82333913782fc8fb") (:ecb-mode-test #h"00000000000002000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"d78181179ac4cc05f38a1d134b29b70a") (:ecb-mode-test #h"00000000000001000000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"411b9bd8a8c3d3c9a2c375d28a336c4a") (:ecb-mode-test #h"00000000000000800000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"632433f8708bd47d6a083adbdf3a8982") (:ecb-mode-test #h"00000000000000400000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"f037e3fcd3db611bd777420b8170df1b") (:ecb-mode-test #h"00000000000000200000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"31da207bfbdbb93157408ad2d7e559df") (:ecb-mode-test #h"00000000000000100000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"2837b13cb713b5fde1bc07cb7b2613d9") (:ecb-mode-test #h"00000000000000080000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"c31906513814506753848c50ab7c8d13") (:ecb-mode-test #h"00000000000000040000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"014b54ca9f1d87c7711af20119b03afc") (:ecb-mode-test #h"00000000000000020000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"060903be7b215ee51fbce79205b0515a") (:ecb-mode-test #h"00000000000000010000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"f91da002995fe07969ff63b8673fa75a") (:ecb-mode-test #h"00000000000000008000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"65a8b07ad4f77c8be4f27f975a42f2e7") (:ecb-mode-test #h"00000000000000004000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"31a157653449da846b5dade80e2f3ae8") (:ecb-mode-test #h"00000000000000002000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"1be98428352aeab7534e12463898bde5") (:ecb-mode-test #h"00000000000000001000000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"a7a50bec385145e784486d6d70552fbf") (:ecb-mode-test #h"00000000000000000800000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"eaacafae73701d566b24ab68350c4cb7") (:ecb-mode-test #h"00000000000000000400000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"deef8a7a5de90caaa0e3412356518d9a") (:ecb-mode-test #h"00000000000000000200000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"8d4373f4933353f589e42471ef35836c") (:ecb-mode-test #h"00000000000000000100000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"01436b7d351b9ff0fe85dab7ef77a020") (:ecb-mode-test #h"00000000000000000080000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"a6b2b93c4c6dafea4db5a4ecfee2c561") (:ecb-mode-test #h"00000000000000000040000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"7b0f7781683d890db4582d4399b07fab") (:ecb-mode-test #h"00000000000000000020000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"01c82b395331de265555d72df29c7efc") (:ecb-mode-test #h"00000000000000000010000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"5d9ba76d5b20b4b88b70b80c20c5e350") (:ecb-mode-test #h"00000000000000000008000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"92b2a69dd8a75d2edb01644a0b975c15") (:ecb-mode-test #h"00000000000000000004000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"e2f6e46a2a899615969f4b751d55d57f") (:ecb-mode-test #h"00000000000000000002000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"97427298315d058eb2f7cdabd4a851c8") (:ecb-mode-test #h"00000000000000000001000000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"8f0f710a0cc1d6049ebb01974b76caad") (:ecb-mode-test #h"00000000000000000000800000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"2cf62d9d02afb40eed66fedb53c2db5c") (:ecb-mode-test #h"00000000000000000000400000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"fb215ab9ec3fafc5fd91cd9ad3cee2be") (:ecb-mode-test #h"00000000000000000000200000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"4a37472335edaf7393a304d45a233085") (:ecb-mode-test #h"00000000000000000000100000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"d22a878d2ca3a88f34acc92a4e26c738") (:ecb-mode-test #h"00000000000000000000080000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"f1a95970638dcbc69c4675e895370904") (:ecb-mode-test #h"00000000000000000000040000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"1660060085c0e241f88462bffbe67602") (:ecb-mode-test #h"00000000000000000000020000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"a097acb2eb5f779090f886beae746ae1") (:ecb-mode-test #h"00000000000000000000010000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"9ffe05163407ba53b62a35d857f58bc6") (:ecb-mode-test #h"00000000000000000000008000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"dfed8392eec1b389cbc261faf97c5c9e") (:ecb-mode-test #h"00000000000000000000004000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"d2c1b3159129d86959f3aa9b70219a74") (:ecb-mode-test #h"00000000000000000000002000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"98c043b2e86cff626abf5fbc745d98a6") (:ecb-mode-test #h"00000000000000000000001000000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"35c5aed481c801a0ca78842273e0186d") (:ecb-mode-test #h"00000000000000000000000800000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"ddaac5c7f13943e80d2244a4a19e9980") (:ecb-mode-test #h"00000000000000000000000400000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"51dbf12fc81e5ffe9b1ce9963636205f") (:ecb-mode-test #h"00000000000000000000000200000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"38ee89874d644ccdf9694280a6c48182") (:ecb-mode-test #h"00000000000000000000000100000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"c3bc93ca8e8800622c92c56b99262ae2") (:ecb-mode-test #h"00000000000000000000000080000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"dc2c2b7558f75b71a9db34e971892171") (:ecb-mode-test #h"00000000000000000000000040000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"609bd72078f92ae345dcde14e6aba0e0") (:ecb-mode-test #h"00000000000000000000000020000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"cabc8bdda6e1979199f5010c3f8b8a31") (:ecb-mode-test #h"00000000000000000000000010000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"c993d659ba4426dc30f8dc7ea03cd2ee") (:ecb-mode-test #h"00000000000000000000000008000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"5dd47466cbb15dca1485e04231d7491c") (:ecb-mode-test #h"00000000000000000000000004000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"e1351ce84ded187e0f5aab9bb7198387") (:ecb-mode-test #h"00000000000000000000000002000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"e5222c68fda26e5e62929c70233ad097") (:ecb-mode-test #h"00000000000000000000000001000000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"78cc456147db73850328241bdff861c0") (:ecb-mode-test #h"00000000000000000000000000800000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"4f10436e3ba4f38cd96744b897d5a136") (:ecb-mode-test #h"00000000000000000000000000400000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"12b698464abcb67c3956c5d1b9c62dfd") (:ecb-mode-test #h"00000000000000000000000000200000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"49de5db3e7d997c56dd2f82935e6617f") (:ecb-mode-test #h"00000000000000000000000000100000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"71ea115e54775680f16b1b9d7b2ee367") (:ecb-mode-test #h"00000000000000000000000000080000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"45b7e46c664a472af948b0c393f92af1") (:ecb-mode-test #h"00000000000000000000000000040000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"db3678b993ef5e48931b5bf84cece6eb") (:ecb-mode-test #h"00000000000000000000000000020000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"051c9a17d4ca77eabd8b9d9a1bce52d6") (:ecb-mode-test #h"00000000000000000000000000010000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"e805aeeac134761ff7b3260bb4308a10") (:ecb-mode-test #h"00000000000000000000000000008000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"3301700109b460c7e41a51059f33004f") (:ecb-mode-test #h"00000000000000000000000000004000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"d71f178093314e188bae26dde5a78927") (:ecb-mode-test #h"00000000000000000000000000002000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"31bb9cb46fbf607fcaa5932851899420") (:ecb-mode-test #h"00000000000000000000000000001000" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"ea77bcd0ce469ab47a828dc6324c3651") (:ecb-mode-test #h"00000000000000000000000000000800" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"e4596b0d33bdeb062a7ddb93e6efae94") (:ecb-mode-test #h"00000000000000000000000000000400" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"24d04f34b837461cd3b8d9c13afe6fe5") (:ecb-mode-test #h"00000000000000000000000000000200" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"ffb68c9ae4d7d2642bf5bee57d2bd914") (:ecb-mode-test #h"00000000000000000000000000000100" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"c008d35eb9de15700c0491319e6415f0") (:ecb-mode-test #h"00000000000000000000000000000080" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"92bfbbfcd2bbf54fff06af097893e9a3") (:ecb-mode-test #h"00000000000000000000000000000040" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"d2475279191bc4da183ee2dba75fce6d") (:ecb-mode-test #h"00000000000000000000000000000020" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"7b8adf2ef0e1f5fbb19cbd4b8fab1426") (:ecb-mode-test #h"00000000000000000000000000000010" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"0b07b9c4385bdc86447f535e09a9f424") (:ecb-mode-test #h"00000000000000000000000000000008" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"e7308875d8d6645719c076dd1660924b") (:ecb-mode-test #h"00000000000000000000000000000004" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"bc50d54a891d6102d0c02f471f1f0567") (:ecb-mode-test #h"00000000000000000000000000000002" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"2b14534ca7d9821a40b101035f681f0d") (:ecb-mode-test #h"00000000000000000000000000000001" #h"0f1e2d3c4b5a69788796a5b4c3d2e1f0" #h"69bd984641e0aa887bc23738f60070db") (:keystream-test #h"7428ca2437ca9ceaa1494b1417404d95" #h"a86905afc45b11160b8628882b644d6f" #h"98e456216569970f53ab98f4a57190d1e3ce9c72ce178870c3c6460e61d918d476fab3d4935027be421e7d930f50f1861da9805de9872bc22e183ac6281be8a24c55c1b502f17d10c106b4c8790490e19fbec25090a49e37c01d2ec01c4db8bcc1f076ef8562c6df19c3238d5ebf39527b45f95add08807a4c3fc6b4143b397bbfba3972d011a11271349931ddc0ee545658ad19a0c6995bd896ade139bb68d174df77f72486300256bc8fa9899ba49fd87357317e66f617d49d1413fdf9649b1bce3bdd3163aed49f442d6e8ee90e5b6937cc149337457e8c06557f0c726f0ec8468bc46cef6cd48bb9ebbb4e72a135fcc3db4e5f51049d89977feffeb711bd3e468e08b26b03e5d841938b516837f8cb9c37707b728b617b5c1451dbf3bdda749ab059ba1e870d452b81fb99f2471c5eb02e76ff9a12646008f82d885a9b01060b1a07ec0747053a1a6ede5be4b22180bacb549d1a3668d1af1c8380a2abe9f169118801bb6818abf38382e1f899c4b5678094e8ab5ae9be2de7b7a2179265bbc46e2708318df1763cfcd9d6e378a0453f91c7f173b42dde8023d86c0c68643c325fac2d3cee878814ec56eb3d3a4f7b1baf15f510bee24bcf3007a444052a8315eab0d98ed18b47cf6d6b904fd69414935b9b5b64d0e2313ebce64bdf566f521091505a6632cecd7ecbe43e4ceeb5825c293f6ca1e8ac2401de5842e4196f508ed63651e3e22b359cc6942f710a53efc1863a052b865deaaa673baabb596958fe8474a333295c65ba03127011d55e4aad22c5aa9902aeaf5b5fdbc6b35ed77ea7753ad6fcb5ed2e5c5169bc15efb5ad354ca0a04def5c6981c528724d545dbb01a95de26ffdc53e47b57e740303b94de0a82121c558e78614439d4f1288959440705603543023d64d3ff974e3c06a44c9f7f68e00bc2fc3c69807fabe5af73a66844718321132389315ed2ae1e1991a86be8d1db05c364a6a3e03543ac35964512e673bf39bd0fd5b464b4312457407b0993f04eb3a025ef8ad396e457a89cc07a73b1e4df8737f8c4822fb77fdf832b520b07799680db0c6845cac1e895dda34a20dbbc0a8f3ddaf705a30e23bd9abd3b98395e71a3d18e202d697b0a0ea0f451339e60cedc2af93b082e2db2bb621c915c6585c7464771881cd07d70682690c101e84567fec9347862b085d1e50ac8fc0adc9df8fbc2593724484c7c37d89f824fe44bc222fb31cd4c92baf92327a7fd931a5687a63793d8fa6324dd068eb894d6a592344bdff99799086a4e9e0937870b15389e6a76c496b0218d43e2e9c8818dcbd0ed523f060e705ae8ae8ffc0078eb1c9f163b6845cd0ea89075e684b0f6be918d611f71505c59890138896c124c5f10a8fba8ca6e52b813c4d63cde2924e62f19d221e") ironclad-0.57/testing/test-vectors/streebog-256.testvec000066400000000000000000000016741420372057600231200ustar00rootroot00000000000000(:digest-test #h"" #h"3f539a213e97c802cc229d474c6aa32a825a360b2a933a949fd925208d9ce1bb") (:digest-test #a"012345678901234567890123456789012345678901234567890123456789012" #h"9d151eefd8590b89daa6ba6cb74af9275dd051026bb149a452fd84e5e57b5500") (:digest-test #h"d1e520e2e5f2f0e82c20d1f2f0e8e1eee6e820e2edf3f6e82c20e2e5fef2fa20f120eceef0ff20f1f2f0e5ebe0ece820ede020f5f0e0e1f0fbff20efebfaeafb20c8e3eef0e5e2fb" #h"9dd2fe4e90409e5da87f53976d7405b0c0cac628fc669a741d50063c557e8f50") (:digest-test #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"df1fda9ce83191390537358031db2ecaa6aa54cd0eda241dc107105e13636b95") (:digest-test #a"The quick brown fox jumps over the lazy dog" #h"3e7dea7f2384b6c5a3d0e24aaa29c05e89ddd762145030ec22c71a6db8b2c1f4") (:digest-test #a"The quick brown fox jumps over the lazy dog." #h"36816a824dcbe7d6171aa58500741f2ea2757ae2e1784ab72c5c3c6c198d71da") ironclad-0.57/testing/test-vectors/streebog.testvec000066400000000000000000000031231420372057600225750ustar00rootroot00000000000000(:digest-test #h"" #h"8e945da209aa869f0455928529bcae4679e9873ab707b55315f56ceb98bef0a7362f715528356ee83cda5f2aac4c6ad2ba3a715c1bcd81cb8e9f90bf4c1c1a8a") (:digest-test #a"012345678901234567890123456789012345678901234567890123456789012" #h"1b54d01a4af5b9d5cc3d86d68d285462b19abc2475222f35c085122be4ba1ffa00ad30f8767b3a82384c6574f024c311e2a481332b08ef7f41797891c1646f48") (:digest-test #h"d1e520e2e5f2f0e82c20d1f2f0e8e1eee6e820e2edf3f6e82c20e2e5fef2fa20f120eceef0ff20f1f2f0e5ebe0ece820ede020f5f0e0e1f0fbff20efebfaeafb20c8e3eef0e5e2fb" #h"1e88e62226bfca6f9994f1f2d51569e0daf8475a3b0fe61a5300eee46d961376035fe83549ada2b8620fcd7c496ce5b33f0cb9dddc2b6460143b03dabac9fb28") (:digest-test #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"b0fd29ac1b0df441769ff3fdb8dc564df67721d6ac06fb28ceffb7bbaa7948c6c014ac999235b58cb26fb60fb112a145d7b4ade9ae566bf2611402c552d20db7") (:digest-test #h"323130393837363534333231303938373635343332313039383736353433323130393837363534333231303938373635343332313039383736353433323130" #h"150fd4d141347ae78253b1fc9fcd2522aaad2bf06316a5e9189b7487835bc022b85a503627136177c9d6f133a3f338c83277ca5798bd6bc0ee34282ba0a3d353") (:digest-test #a"The quick brown fox jumps over the lazy dog" #h"d2b793a0bb6cb5904828b5b6dcfb443bb8f33efc06ad09368878ae4cdc8245b97e60802469bed1e7c21a64ff0b179a6a1e0bb74d92965450a0adab69162c00fe") (:digest-test #a"The quick brown fox jumps over the lazy dog." #h"fe0c42f267d921f940faa72bd9fcf84f9f1bd7e9d055e9816e4c2ace1ec83be82d2957cd59b86e123d8f5adee80b3ca08a017599a9fc1a14d940cf87c77df070") ironclad-0.57/testing/test-vectors/tea.testvec000066400000000000000000001303651420372057600215450ustar00rootroot00000000000000;;; tests for TEA (:ecb-mode-test #h"80000000000000000000000000000000" #h"0000000000000000" #h"9327c49731b08bbe") (:ecb-mode-test #h"40000000000000000000000000000000" #h"0000000000000000" #h"77316e05c9ed06fb") (:ecb-mode-test #h"20000000000000000000000000000000" #h"0000000000000000" #h"d6b88f1b6b1e5f3f") (:ecb-mode-test #h"10000000000000000000000000000000" #h"0000000000000000" #h"039ff567e117b685") (:ecb-mode-test #h"08000000000000000000000000000000" #h"0000000000000000" #h"56b44dc7d3cbe7cf") (:ecb-mode-test #h"04000000000000000000000000000000" #h"0000000000000000" #h"7230929cc60bd350") (:ecb-mode-test #h"02000000000000000000000000000000" #h"0000000000000000" #h"08e7c8795485edf0") (:ecb-mode-test #h"01000000000000000000000000000000" #h"0000000000000000" #h"7cc227951deb2351") (:ecb-mode-test #h"00800000000000000000000000000000" #h"0000000000000000" #h"691d4a5c210cd865") (:ecb-mode-test #h"00400000000000000000000000000000" #h"0000000000000000" #h"7421dbb014a8da4e") (:ecb-mode-test #h"00200000000000000000000000000000" #h"0000000000000000" #h"3446cd86de5ee499") (:ecb-mode-test #h"00100000000000000000000000000000" #h"0000000000000000" #h"fa79b09fb5a395f6") (:ecb-mode-test #h"00080000000000000000000000000000" #h"0000000000000000" #h"e86f97ed5579c450") (:ecb-mode-test #h"00040000000000000000000000000000" #h"0000000000000000" #h"7b27e59efe093a9d") (:ecb-mode-test #h"00020000000000000000000000000000" #h"0000000000000000" #h"5e34d77e40c1c08e") (:ecb-mode-test #h"00010000000000000000000000000000" #h"0000000000000000" #h"7f904680db138017") (:ecb-mode-test #h"00008000000000000000000000000000" #h"0000000000000000" #h"67a6286f3e956426") (:ecb-mode-test #h"00004000000000000000000000000000" #h"0000000000000000" #h"731134baddf1af56") (:ecb-mode-test #h"00002000000000000000000000000000" #h"0000000000000000" #h"2aece694cc553274") (:ecb-mode-test #h"00001000000000000000000000000000" #h"0000000000000000" #h"971cbb6f10a84aab") (:ecb-mode-test #h"00000800000000000000000000000000" #h"0000000000000000" #h"81f67368204d961d") (:ecb-mode-test #h"00000400000000000000000000000000" #h"0000000000000000" #h"aed4c11f29c3ee68") (:ecb-mode-test #h"00000200000000000000000000000000" #h"0000000000000000" #h"898512b5c44cb47e") (:ecb-mode-test #h"00000100000000000000000000000000" #h"0000000000000000" #h"2f86859793b707f3") (:ecb-mode-test #h"00000080000000000000000000000000" #h"0000000000000000" #h"a5df8e7a43abfe53") (:ecb-mode-test #h"00000040000000000000000000000000" #h"0000000000000000" #h"41214c96a1aa5770") (:ecb-mode-test #h"00000020000000000000000000000000" #h"0000000000000000" #h"c0c1b413c1e62808") (:ecb-mode-test #h"00000010000000000000000000000000" #h"0000000000000000" #h"d49c70278bed6dbf") (:ecb-mode-test #h"00000008000000000000000000000000" #h"0000000000000000" #h"65a876c07202faf4") (:ecb-mode-test #h"00000004000000000000000000000000" #h"0000000000000000" #h"5a02e3ff6fb66706") (:ecb-mode-test #h"00000002000000000000000000000000" #h"0000000000000000" #h"137ce12f07eaf814") (:ecb-mode-test #h"00000001000000000000000000000000" #h"0000000000000000" #h"64baca9d167905e3") (:ecb-mode-test #h"00000000800000000000000000000000" #h"0000000000000000" #h"9327c49731b08bbe") (:ecb-mode-test #h"00000000400000000000000000000000" #h"0000000000000000" #h"e30512c28eeea4a4") (:ecb-mode-test #h"00000000200000000000000000000000" #h"0000000000000000" #h"83100f131387357f") (:ecb-mode-test #h"00000000100000000000000000000000" #h"0000000000000000" #h"feae28fbf28412fb") (:ecb-mode-test #h"00000000080000000000000000000000" #h"0000000000000000" #h"8ede81aaf8f6cf68") (:ecb-mode-test #h"00000000040000000000000000000000" #h"0000000000000000" #h"520f3196ca4a4054") (:ecb-mode-test #h"00000000020000000000000000000000" #h"0000000000000000" #h"12b0a74271e3eb4a") (:ecb-mode-test #h"00000000010000000000000000000000" #h"0000000000000000" #h"23f70ecf046d2cfb") (:ecb-mode-test #h"00000000008000000000000000000000" #h"0000000000000000" #h"1000370381d9445f") (:ecb-mode-test #h"00000000004000000000000000000000" #h"0000000000000000" #h"b949b51e2a0d0a4d") (:ecb-mode-test #h"00000000002000000000000000000000" #h"0000000000000000" #h"2c9823206679d350") (:ecb-mode-test #h"00000000001000000000000000000000" #h"0000000000000000" #h"d118f873147e281f") (:ecb-mode-test #h"00000000000800000000000000000000" #h"0000000000000000" #h"6fcdb64de39bcec0") (:ecb-mode-test #h"00000000000400000000000000000000" #h"0000000000000000" #h"887f289e858955a8") (:ecb-mode-test #h"00000000000200000000000000000000" #h"0000000000000000" #h"7b7fccb8e9005c8a") (:ecb-mode-test #h"00000000000100000000000000000000" #h"0000000000000000" #h"577118e0241ca2ff") (:ecb-mode-test #h"00000000000080000000000000000000" #h"0000000000000000" #h"7439cfb1b55cf400") (:ecb-mode-test #h"00000000000040000000000000000000" #h"0000000000000000" #h"d6b11f91decca7de") (:ecb-mode-test #h"00000000000020000000000000000000" #h"0000000000000000" #h"58f3c12fe6df1ae5") (:ecb-mode-test #h"00000000000010000000000000000000" #h"0000000000000000" #h"925a64f5d790da27") (:ecb-mode-test #h"00000000000008000000000000000000" #h"0000000000000000" #h"9c442947b9eba40a") (:ecb-mode-test #h"00000000000004000000000000000000" #h"0000000000000000" #h"4399f437f62208a9") (:ecb-mode-test #h"00000000000002000000000000000000" #h"0000000000000000" #h"0b6b0544d06bac31") (:ecb-mode-test #h"00000000000001000000000000000000" #h"0000000000000000" #h"8e3b191e5bd9db45") (:ecb-mode-test #h"00000000000000800000000000000000" #h"0000000000000000" #h"f2afe2e3442d82d5") (:ecb-mode-test #h"00000000000000400000000000000000" #h"0000000000000000" #h"935bfeb4fb8741de") (:ecb-mode-test #h"00000000000000200000000000000000" #h"0000000000000000" #h"d23ae44d8df72de6") (:ecb-mode-test #h"00000000000000100000000000000000" #h"0000000000000000" #h"e4bdaf27f28afc70") (:ecb-mode-test #h"00000000000000080000000000000000" #h"0000000000000000" #h"9deb2a7cb651f53d") (:ecb-mode-test #h"00000000000000040000000000000000" #h"0000000000000000" #h"bc46ac01e593404c") (:ecb-mode-test #h"00000000000000020000000000000000" #h"0000000000000000" #h"9e1fb17206eacb2d") (:ecb-mode-test #h"00000000000000010000000000000000" #h"0000000000000000" #h"6cfc01b6dd3a443f") (:ecb-mode-test #h"00000000000000008000000000000000" #h"0000000000000000" #h"ad882fa98ac0b700") (:ecb-mode-test #h"00000000000000004000000000000000" #h"0000000000000000" #h"76fbec33247fae1e") (:ecb-mode-test #h"00000000000000002000000000000000" #h"0000000000000000" #h"68b029484578df4f") (:ecb-mode-test #h"00000000000000001000000000000000" #h"0000000000000000" #h"7a5270e3d27645d6") (:ecb-mode-test #h"00000000000000000800000000000000" #h"0000000000000000" #h"8217710f75d1ec9e") (:ecb-mode-test #h"00000000000000000400000000000000" #h"0000000000000000" #h"0c7e62b6682096cc") (:ecb-mode-test #h"00000000000000000200000000000000" #h"0000000000000000" #h"6921c16bed66d6e7") (:ecb-mode-test #h"00000000000000000100000000000000" #h"0000000000000000" #h"6b1c0e516c417fc3") (:ecb-mode-test #h"00000000000000000080000000000000" #h"0000000000000000" #h"27fd02f4fdcc0700") (:ecb-mode-test #h"00000000000000000040000000000000" #h"0000000000000000" #h"34307256916d51bc") (:ecb-mode-test #h"00000000000000000020000000000000" #h"0000000000000000" #h"332157afac442492") (:ecb-mode-test #h"00000000000000000010000000000000" #h"0000000000000000" #h"a1b452f99342d76f") (:ecb-mode-test #h"00000000000000000008000000000000" #h"0000000000000000" #h"27039c8a04126de6") (:ecb-mode-test #h"00000000000000000004000000000000" #h"0000000000000000" #h"698088435c3eaca2") (:ecb-mode-test #h"00000000000000000002000000000000" #h"0000000000000000" #h"8051ebb7f0f4c8c1") (:ecb-mode-test #h"00000000000000000001000000000000" #h"0000000000000000" #h"a1df700526ae75ee") (:ecb-mode-test #h"00000000000000000000800000000000" #h"0000000000000000" #h"b63f23e428c5d599") (:ecb-mode-test #h"00000000000000000000400000000000" #h"0000000000000000" #h"f88577597e99f773") (:ecb-mode-test #h"00000000000000000000200000000000" #h"0000000000000000" #h"3c00bdf07d46e359") (:ecb-mode-test #h"00000000000000000000100000000000" #h"0000000000000000" #h"3a4023a7492ab211") (:ecb-mode-test #h"00000000000000000000080000000000" #h"0000000000000000" #h"302c29866d314f3b") (:ecb-mode-test #h"00000000000000000000040000000000" #h"0000000000000000" #h"0241ad5e5b1fa3fb") (:ecb-mode-test #h"00000000000000000000020000000000" #h"0000000000000000" #h"a194533bd3b90971") (:ecb-mode-test #h"00000000000000000000010000000000" #h"0000000000000000" #h"6bb7f27d7e7d5008") (:ecb-mode-test #h"00000000000000000000008000000000" #h"0000000000000000" #h"0becfc29a97bcc6f") (:ecb-mode-test #h"00000000000000000000004000000000" #h"0000000000000000" #h"5697db8eea1801e5") (:ecb-mode-test #h"00000000000000000000002000000000" #h"0000000000000000" #h"4b28c230c87f85dd") (:ecb-mode-test #h"00000000000000000000001000000000" #h"0000000000000000" #h"d75651dcbdf6dd4c") (:ecb-mode-test #h"00000000000000000000000800000000" #h"0000000000000000" #h"124dffe509974c10") (:ecb-mode-test #h"00000000000000000000000400000000" #h"0000000000000000" #h"02ba21adb33365ea") (:ecb-mode-test #h"00000000000000000000000200000000" #h"0000000000000000" #h"1882bca9e45dd111") (:ecb-mode-test #h"00000000000000000000000100000000" #h"0000000000000000" #h"b8c098cd5b0e38f8") (:ecb-mode-test #h"00000000000000000000000080000000" #h"0000000000000000" #h"ad882fa98ac0b700") (:ecb-mode-test #h"00000000000000000000000040000000" #h"0000000000000000" #h"a7ab58c50a0d12da") (:ecb-mode-test #h"00000000000000000000000020000000" #h"0000000000000000" #h"2517a5ad9fa057b3") (:ecb-mode-test #h"00000000000000000000000010000000" #h"0000000000000000" #h"15b5a378fd36d424") (:ecb-mode-test #h"00000000000000000000000008000000" #h"0000000000000000" #h"976288897a9fd129") (:ecb-mode-test #h"00000000000000000000000004000000" #h"0000000000000000" #h"b96cc163d3bdaad8") (:ecb-mode-test #h"00000000000000000000000002000000" #h"0000000000000000" #h"846f1f70c284c838") (:ecb-mode-test #h"00000000000000000000000001000000" #h"0000000000000000" #h"1df2bfd8c87fe527") (:ecb-mode-test #h"00000000000000000000000000800000" #h"0000000000000000" #h"796b760e590acb7f") (:ecb-mode-test #h"00000000000000000000000000400000" #h"0000000000000000" #h"36f1bf1828068cec") (:ecb-mode-test #h"00000000000000000000000000200000" #h"0000000000000000" #h"02d54a62eac951ca") (:ecb-mode-test #h"00000000000000000000000000100000" #h"0000000000000000" #h"5a4d8851bdfad6e2") (:ecb-mode-test #h"00000000000000000000000000080000" #h"0000000000000000" #h"47a5087aa93f5ba5") (:ecb-mode-test #h"00000000000000000000000000040000" #h"0000000000000000" #h"3c089a00c8c4e688") (:ecb-mode-test #h"00000000000000000000000000020000" #h"0000000000000000" #h"eed06ff0b59791df") (:ecb-mode-test #h"00000000000000000000000000010000" #h"0000000000000000" #h"3c3031517c5053ee") (:ecb-mode-test #h"00000000000000000000000000008000" #h"0000000000000000" #h"fd7711e03883f332") (:ecb-mode-test #h"00000000000000000000000000004000" #h"0000000000000000" #h"f94d1c40e7be0d92") (:ecb-mode-test #h"00000000000000000000000000002000" #h"0000000000000000" #h"1595d41e9bf8431b") (:ecb-mode-test #h"00000000000000000000000000001000" #h"0000000000000000" #h"cd2dfa96b5676f02") (:ecb-mode-test #h"00000000000000000000000000000800" #h"0000000000000000" #h"8d78167f434aed2e") (:ecb-mode-test #h"00000000000000000000000000000400" #h"0000000000000000" #h"1de2bb0fa0dbea11") (:ecb-mode-test #h"00000000000000000000000000000200" #h"0000000000000000" #h"12bc2dee7a371205") (:ecb-mode-test #h"00000000000000000000000000000100" #h"0000000000000000" #h"72edcc6dfbd71d47") (:ecb-mode-test #h"00000000000000000000000000000080" #h"0000000000000000" #h"b54dd68f68370762") (:ecb-mode-test #h"00000000000000000000000000000040" #h"0000000000000000" #h"9964e3052949b1eb") (:ecb-mode-test #h"00000000000000000000000000000020" #h"0000000000000000" #h"98a3dc15d4c1aded") (:ecb-mode-test #h"00000000000000000000000000000010" #h"0000000000000000" #h"98cf76a774d542a1") (:ecb-mode-test #h"00000000000000000000000000000008" #h"0000000000000000" #h"c060a5c7d4240cf3") (:ecb-mode-test #h"00000000000000000000000000000004" #h"0000000000000000" #h"e8cf5bd0f6bf1b72") (:ecb-mode-test #h"00000000000000000000000000000002" #h"0000000000000000" #h"def21aefb9e791bc") (:ecb-mode-test #h"00000000000000000000000000000001" #h"0000000000000000" #h"0c6d2a1d930c3fab") (:ecb-mode-test #h"00000000000000000000000000000000" #h"8000000000000000" #h"8781ce72034d3869") (:ecb-mode-test #h"00000000000000000000000000000000" #h"4000000000000000" #h"09ddd7913c869215") (:ecb-mode-test #h"00000000000000000000000000000000" #h"2000000000000000" #h"9b661e3461de805e") (:ecb-mode-test #h"00000000000000000000000000000000" #h"1000000000000000" #h"1b7edfe2a1e1cc22") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0800000000000000" #h"97257c1452e0760c") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0400000000000000" #h"a829abff1aad9392") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0200000000000000" #h"2beca07c86f23510") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0100000000000000" #h"a763208c598d9b83") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0080000000000000" #h"9c20a1b65a076a6f") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0040000000000000" #h"1a9da0c81206cf11") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0020000000000000" #h"f6ac9170a48c9fe7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0010000000000000" #h"145be0d1a55fc54f") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0008000000000000" #h"b4df727a2f5a531a") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0004000000000000" #h"778d51e4d787db55") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0002000000000000" #h"35a4a07dd40e9ff9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0001000000000000" #h"7f845ba4b746d187") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000800000000000" #h"19742487bba154ef") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000400000000000" #h"87128954980e3368") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000200000000000" #h"a89043e85f428494") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000100000000000" #h"88ef6a7c3492d779") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000080000000000" #h"520f29c26ba32867") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000040000000000" #h"f1158ae1bb398eb4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000020000000000" #h"91cd327ac0395a14") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000010000000000" #h"6f543d43d53d8e0b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000008000000000" #h"06856a44c8654250") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000004000000000" #h"f3d25d3fd25a81cd") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000002000000000" #h"98f0bf018000eebf") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000001000000000" #h"d41d2a52455014b2") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000800000000" #h"203a5315a9c95c76") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000400000000" #h"cb8fb4c59727cc17") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000200000000" #h"24d04d6b7e80772f") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000100000000" #h"9fbae93b81bbf328") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000080000000" #h"ea14ebb91520e9a3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000040000000" #h"d3cee88f818622c4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000020000000" #h"fa31da3d2c6a7b2c") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000010000000" #h"7f01a1c8c0ff896b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000008000000" #h"286f5b2256a8155c") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000004000000" #h"3a85599ecea2bb97") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000002000000" #h"45fbe47c4d7fcbb0") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000001000000" #h"4001dfdea732e43a") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000800000" #h"1d482095ee5827c4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000400000" #h"584f74f72b9eaf29") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000200000" #h"410ba3d2c769eae1") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000100000" #h"8166d090d938d8e3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000080000" #h"894ffa534efb5cba") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000040000" #h"00605d13f6d3f9e7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000020000" #h"fa70972f69be35ef") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000010000" #h"8e0a303c90a7efed") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000008000" #h"17a55cbfd6b29db8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000004000" #h"10bbabbdbadf26f4") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000002000" #h"32838a75b094b49a") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000001000" #h"1dc14862509415f6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000800" #h"34764113aeb469f5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000400" #h"312fcb7ba57e33cb") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000200" #h"449ceb904d4d6bea") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000100" #h"7cf0e015bdc8e777") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000080" #h"f9ce9df9ee21f6fe") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000040" #h"e0f51f945e0b2ba8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000020" #h"147baa1f042c259d") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000010" #h"07e0ed90197b0420") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000008" #h"2ffce6557d7dc86c") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000004" #h"7c5c5df258aa0907") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000002" #h"e634482517da1b17") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000001" #h"414091a7a27f9c32") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000000" #h"41ea3a0a94baa940") (:ecb-mode-test #h"01010101010101010101010101010101" #h"0101010101010101" #h"2f120d74c11346e8") (:ecb-mode-test #h"02020202020202020202020202020202" #h"0202020202020202" #h"4442f8d4aa85a82a") (:ecb-mode-test #h"03030303030303030303030303030303" #h"0303030303030303" #h"9cfa50ce173efdb7") (:ecb-mode-test #h"04040404040404040404040404040404" #h"0404040404040404" #h"8d069ca00ad1e84d") (:ecb-mode-test #h"05050505050505050505050505050505" #h"0505050505050505" #h"bfe33e626a810f67") (:ecb-mode-test #h"06060606060606060606060606060606" #h"0606060606060606" #h"75a64a0807d4b737") (:ecb-mode-test #h"07070707070707070707070707070707" #h"0707070707070707" #h"f66b8b44e58f83cd") (:ecb-mode-test #h"08080808080808080808080808080808" #h"0808080808080808" #h"649f94b7edc7522a") (:ecb-mode-test #h"09090909090909090909090909090909" #h"0909090909090909" #h"2423c8f1a00306c9") (:ecb-mode-test #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"0A0A0A0A0A0A0A0A" #h"e710d88b3815bcc7") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B" #h"a58a4f88c9a60f6a") (:ecb-mode-test #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"0C0C0C0C0C0C0C0C" #h"f4f2fa0628f698ae") (:ecb-mode-test #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"0D0D0D0D0D0D0D0D" #h"8c4006ed1009ae7a") (:ecb-mode-test #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"0E0E0E0E0E0E0E0E" #h"be2210f91b44cea4") (:ecb-mode-test #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"0F0F0F0F0F0F0F0F" #h"b59a724383e64603") (:ecb-mode-test #h"10101010101010101010101010101010" #h"1010101010101010" #h"41bf4ad01b90f160") (:ecb-mode-test #h"11111111111111111111111111111111" #h"1111111111111111" #h"c0c027758888d009") (:ecb-mode-test #h"12121212121212121212121212121212" #h"1212121212121212" #h"ca5836af61a16b5e") (:ecb-mode-test #h"13131313131313131313131313131313" #h"1313131313131313" #h"5dc2a0bf5a9368a2") (:ecb-mode-test #h"14141414141414141414141414141414" #h"1414141414141414" #h"5873fbf503f14028") (:ecb-mode-test #h"15151515151515151515151515151515" #h"1515151515151515" #h"80cd4baede16ab79") (:ecb-mode-test #h"16161616161616161616161616161616" #h"1616161616161616" #h"47c7ae0be4805446") (:ecb-mode-test #h"17171717171717171717171717171717" #h"1717171717171717" #h"39caddc8e8980743") (:ecb-mode-test #h"18181818181818181818181818181818" #h"1818181818181818" #h"0e0594de27842831") (:ecb-mode-test #h"19191919191919191919191919191919" #h"1919191919191919" #h"e73b591651a532e8") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A" #h"238e897cab8b2f32") (:ecb-mode-test #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"1B1B1B1B1B1B1B1B" #h"98ebd0a86c9d44f9") (:ecb-mode-test #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"1C1C1C1C1C1C1C1C" #h"6842817862d3a80f") (:ecb-mode-test #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"1D1D1D1D1D1D1D1D" #h"5cc17ee36f96059c") (:ecb-mode-test #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"1E1E1E1E1E1E1E1E" #h"c6897542ee6ca837") (:ecb-mode-test #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"1F1F1F1F1F1F1F1F" #h"f9029a328e706536") (:ecb-mode-test #h"20202020202020202020202020202020" #h"2020202020202020" #h"ef53138050dba703") (:ecb-mode-test #h"21212121212121212121212121212121" #h"2121212121212121" #h"fc6c459ce3e86e44") (:ecb-mode-test #h"22222222222222222222222222222222" #h"2222222222222222" #h"7a1f37b8196035f5") (:ecb-mode-test #h"23232323232323232323232323232323" #h"2323232323232323" #h"edbad59d0d34f459") (:ecb-mode-test #h"24242424242424242424242424242424" #h"2424242424242424" #h"94396505412e362b") (:ecb-mode-test #h"25252525252525252525252525252525" #h"2525252525252525" #h"289da1d0239c8fc5") (:ecb-mode-test #h"26262626262626262626262626262626" #h"2626262626262626" #h"1026af8e5bdb3db7") (:ecb-mode-test #h"27272727272727272727272727272727" #h"2727272727272727" #h"74a2a6e1a325bcdc") (:ecb-mode-test #h"28282828282828282828282828282828" #h"2828282828282828" #h"b7a792601ed5b90b") (:ecb-mode-test #h"29292929292929292929292929292929" #h"2929292929292929" #h"322143fe8e99f0e4") (:ecb-mode-test #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"2A2A2A2A2A2A2A2A" #h"c30d63f15ba8b687") (:ecb-mode-test #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"2B2B2B2B2B2B2B2B" #h"edac480d578cade7") (:ecb-mode-test #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"2C2C2C2C2C2C2C2C" #h"715eb080d0c1f5ed") (:ecb-mode-test #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"2D2D2D2D2D2D2D2D" #h"d8446265709152e1") (:ecb-mode-test #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"2E2E2E2E2E2E2E2E" #h"b2c2e490afa7b274") (:ecb-mode-test #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"2F2F2F2F2F2F2F2F" #h"a23580f9c49d1c14") (:ecb-mode-test #h"30303030303030303030303030303030" #h"3030303030303030" #h"1654187171f4335c") (:ecb-mode-test #h"31313131313131313131313131313131" #h"3131313131313131" #h"76e0e9a69ca67718") (:ecb-mode-test #h"32323232323232323232323232323232" #h"3232323232323232" #h"cf421cce8fc3836a") (:ecb-mode-test #h"33333333333333333333333333333333" #h"3333333333333333" #h"cf88a2cfed916afd") (:ecb-mode-test #h"34343434343434343434343434343434" #h"3434343434343434" #h"3e49c79ccdeb26a6") (:ecb-mode-test #h"35353535353535353535353535353535" #h"3535353535353535" #h"be263d90298fb174") (:ecb-mode-test #h"36363636363636363636363636363636" #h"3636363636363636" #h"a055d94d6363d66e") (:ecb-mode-test #h"37373737373737373737373737373737" #h"3737373737373737" #h"726cc505913d91e3") (:ecb-mode-test #h"38383838383838383838383838383838" #h"3838383838383838" #h"858ed3550525f887") (:ecb-mode-test #h"39393939393939393939393939393939" #h"3939393939393939" #h"648d4430fa5be9b4") (:ecb-mode-test #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"3A3A3A3A3A3A3A3A" #h"3a9d773824006b08") (:ecb-mode-test #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"3B3B3B3B3B3B3B3B" #h"3f7b22532a290ac3") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C" #h"4bb0f07cc533e275") (:ecb-mode-test #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"3D3D3D3D3D3D3D3D" #h"09f9fc03cd356d39") (:ecb-mode-test #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"3E3E3E3E3E3E3E3E" #h"0569c83b917e0037") (:ecb-mode-test #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"3F3F3F3F3F3F3F3F" #h"e9092584dc95f75b") (:ecb-mode-test #h"40404040404040404040404040404040" #h"4040404040404040" #h"72401d37f9f3f4c1") (:ecb-mode-test #h"41414141414141414141414141414141" #h"4141414141414141" #h"e0de523dcdebe99a") (:ecb-mode-test #h"42424242424242424242424242424242" #h"4242424242424242" #h"2c0aab9fe3ed14b2") (:ecb-mode-test #h"43434343434343434343434343434343" #h"4343434343434343" #h"fbbfaef47778b728") (:ecb-mode-test #h"44444444444444444444444444444444" #h"4444444444444444" #h"0de59580c3bd4584") (:ecb-mode-test #h"45454545454545454545454545454545" #h"4545454545454545" #h"9dbc70561cbed832") (:ecb-mode-test #h"46464646464646464646464646464646" #h"4646464646464646" #h"7579489bb71d2635") (:ecb-mode-test #h"47474747474747474747474747474747" #h"4747474747474747" #h"b489539ada8a9b56") (:ecb-mode-test #h"48484848484848484848484848484848" #h"4848484848484848" #h"1d30e56b88b55a4f") (:ecb-mode-test #h"49494949494949494949494949494949" #h"4949494949494949" #h"0467e0e5f4c8ee0a") (:ecb-mode-test #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"4A4A4A4A4A4A4A4A" #h"380f5fe14d3e7674") (:ecb-mode-test #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"4B4B4B4B4B4B4B4B" #h"ed1caf2835111c22") (:ecb-mode-test #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"4C4C4C4C4C4C4C4C" #h"b8049e13663c9183") (:ecb-mode-test #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"4D4D4D4D4D4D4D4D" #h"c72c2936e47b976b") (:ecb-mode-test #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"4E4E4E4E4E4E4E4E" #h"f0a60b1ff2f2ded2") (:ecb-mode-test #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"4F4F4F4F4F4F4F4F" #h"bb5bfa9862a06e66") (:ecb-mode-test #h"50505050505050505050505050505050" #h"5050505050505050" #h"5848a5318a489af6") (:ecb-mode-test #h"51515151515151515151515151515151" #h"5151515151515151" #h"a1a6a805fc62dd71") (:ecb-mode-test #h"52525252525252525252525252525252" #h"5252525252525252" #h"074ca556d95c3114") (:ecb-mode-test #h"53535353535353535353535353535353" #h"5353535353535353" #h"a94ca82b49e7903d") (:ecb-mode-test #h"54545454545454545454545454545454" #h"5454545454545454" #h"a6f1060f8e0fb9c2") (:ecb-mode-test #h"55555555555555555555555555555555" #h"5555555555555555" #h"6ad911dd9f036677") (:ecb-mode-test #h"56565656565656565656565656565656" #h"5656565656565656" #h"4ace4acab512b016") (:ecb-mode-test #h"57575757575757575757575757575757" #h"5757575757575757" #h"54879dfdf08a0bf2") (:ecb-mode-test #h"58585858585858585858585858585858" #h"5858585858585858" #h"6184606dbfb3da7a") (:ecb-mode-test #h"59595959595959595959595959595959" #h"5959595959595959" #h"09d57e7f80230931") (:ecb-mode-test #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"5A5A5A5A5A5A5A5A" #h"779f50a69c4845f0") (:ecb-mode-test #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"5B5B5B5B5B5B5B5B" #h"bfe9f7e76c75fa21") (:ecb-mode-test #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"5C5C5C5C5C5C5C5C" #h"61d282d08081c9b6") (:ecb-mode-test #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"5D5D5D5D5D5D5D5D" #h"45b3eb0ddf62848e") (:ecb-mode-test #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"5E5E5E5E5E5E5E5E" #h"83128170dcabee04") (:ecb-mode-test #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"5F5F5F5F5F5F5F5F" #h"5d93d40184a418f4") (:ecb-mode-test #h"60606060606060606060606060606060" #h"6060606060606060" #h"e727f33c912a8cf4") (:ecb-mode-test #h"61616161616161616161616161616161" #h"6161616161616161" #h"b367bc7842016ee4") (:ecb-mode-test #h"62626262626262626262626262626262" #h"6262626262626262" #h"81facae0da45bc1a") (:ecb-mode-test #h"63636363636363636363636363636363" #h"6363636363636363" #h"bf01cc71a42bc537") (:ecb-mode-test #h"64646464646464646464646464646464" #h"6464646464646464" #h"bc899e0edaa0d664") (:ecb-mode-test #h"65656565656565656565656565656565" #h"6565656565656565" #h"9c23cc07320035d6") (:ecb-mode-test #h"66666666666666666666666666666666" #h"6666666666666666" #h"e7eab7005941477f") (:ecb-mode-test #h"67676767676767676767676767676767" #h"6767676767676767" #h"4d28983d6a8b17cb") (:ecb-mode-test #h"68686868686868686868686868686868" #h"6868686868686868" #h"607037bc7d32fd05") (:ecb-mode-test #h"69696969696969696969696969696969" #h"6969696969696969" #h"d94c73a4ea44261a") (:ecb-mode-test #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"6A6A6A6A6A6A6A6A" #h"bc33d4dc7e4296a7") (:ecb-mode-test #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"6B6B6B6B6B6B6B6B" #h"f71f131429609c6a") (:ecb-mode-test #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"6C6C6C6C6C6C6C6C" #h"6053c13bde3631b2") (:ecb-mode-test #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"6D6D6D6D6D6D6D6D" #h"44c6b2b1f1bd9962") (:ecb-mode-test #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"6E6E6E6E6E6E6E6E" #h"bf2dc1e086b80496") (:ecb-mode-test #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"6F6F6F6F6F6F6F6F" #h"17f6bf773408a4a2") (:ecb-mode-test #h"70707070707070707070707070707070" #h"7070707070707070" #h"2199ed6aa129d361") (:ecb-mode-test #h"71717171717171717171717171717171" #h"7171717171717171" #h"102fd4f8f468d4b5") (:ecb-mode-test #h"72727272727272727272727272727272" #h"7272727272727272" #h"c6e481e258d97703") (:ecb-mode-test #h"73737373737373737373737373737373" #h"7373737373737373" #h"7bae8bff812f80c0") (:ecb-mode-test #h"74747474747474747474747474747474" #h"7474747474747474" #h"1e939547eda92715") (:ecb-mode-test #h"75757575757575757575757575757575" #h"7575757575757575" #h"867b3165076222b1") (:ecb-mode-test #h"76767676767676767676767676767676" #h"7676767676767676" #h"71629a979151ffe4") (:ecb-mode-test #h"77777777777777777777777777777777" #h"7777777777777777" #h"d09fab9b63dbcc42") (:ecb-mode-test #h"78787878787878787878787878787878" #h"7878787878787878" #h"21209670b1256ba9") (:ecb-mode-test #h"79797979797979797979797979797979" #h"7979797979797979" #h"65ed3a28cd39db74") (:ecb-mode-test #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"7A7A7A7A7A7A7A7A" #h"3b479e1dde59ba82") (:ecb-mode-test #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"7B7B7B7B7B7B7B7B" #h"3c2eae873ac45eb5") (:ecb-mode-test #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"7C7C7C7C7C7C7C7C" #h"e4f5d786d39166ed") (:ecb-mode-test #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"7D7D7D7D7D7D7D7D" #h"5a7a8bcd492108cc") (:ecb-mode-test #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"7E7E7E7E7E7E7E7E" #h"d5af1001c716308e") (:ecb-mode-test #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"7F7F7F7F7F7F7F7F" #h"da1d3a2d42e6d0a9") (:ecb-mode-test #h"80808080808080808080808080808080" #h"8080808080808080" #h"2068f7cd562454bc") (:ecb-mode-test #h"81818181818181818181818181818181" #h"8181818181818181" #h"80bb348eab42f5be") (:ecb-mode-test #h"82828282828282828282828282828282" #h"8282828282828282" #h"962eb247b1758df0") (:ecb-mode-test #h"83838383838383838383838383838383" #h"8383838383838383" #h"7fb523d20191bda3") (:ecb-mode-test #h"84848484848484848484848484848484" #h"8484848484848484" #h"893869a65eea372f") (:ecb-mode-test #h"85858585858585858585858585858585" #h"8585858585858585" #h"037f81d6c9b80c46") (:ecb-mode-test #h"86868686868686868686868686868686" #h"8686868686868686" #h"9db6e9bba0e34b50") (:ecb-mode-test #h"87878787878787878787878787878787" #h"8787878787878787" #h"0804ee28e0eb1a1d") (:ecb-mode-test #h"88888888888888888888888888888888" #h"8888888888888888" #h"1e689f604f2c9d0c") (:ecb-mode-test #h"89898989898989898989898989898989" #h"8989898989898989" #h"88409aa0a0df005a") (:ecb-mode-test #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"8A8A8A8A8A8A8A8A" #h"a17a88800ef52202") (:ecb-mode-test #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"8B8B8B8B8B8B8B8B" #h"6ed32542bcfe488b") (:ecb-mode-test #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"8C8C8C8C8C8C8C8C" #h"72d33c2a6c0435ae") (:ecb-mode-test #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"8D8D8D8D8D8D8D8D" #h"31031922560e9832") (:ecb-mode-test #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"8E8E8E8E8E8E8E8E" #h"e52e25ef733dc5d8") (:ecb-mode-test #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"8F8F8F8F8F8F8F8F" #h"423ac788e5a40ea7") (:ecb-mode-test #h"90909090909090909090909090909090" #h"9090909090909090" #h"d8dd7adfb7cb15d7") (:ecb-mode-test #h"91919191919191919191919191919191" #h"9191919191919191" #h"fcb3d76b6fb2c95c") (:ecb-mode-test #h"92929292929292929292929292929292" #h"9292929292929292" #h"c249d053dacdaac4") (:ecb-mode-test #h"93939393939393939393939393939393" #h"9393939393939393" #h"da791058366763b9") (:ecb-mode-test #h"94949494949494949494949494949494" #h"9494949494949494" #h"43d7f2e58d6cbeca") (:ecb-mode-test #h"95959595959595959595959595959595" #h"9595959595959595" #h"c766f6d325182284") (:ecb-mode-test #h"96969696969696969696969696969696" #h"9696969696969696" #h"d5cb7cc8c9b71920") (:ecb-mode-test #h"97979797979797979797979797979797" #h"9797979797979797" #h"d7757b1c5548ee5c") (:ecb-mode-test #h"98989898989898989898989898989898" #h"9898989898989898" #h"164e5c721b5cbdba") (:ecb-mode-test #h"99999999999999999999999999999999" #h"9999999999999999" #h"e365320f05f4ba14") (:ecb-mode-test #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"9A9A9A9A9A9A9A9A" #h"a7a1b3f7775de991") (:ecb-mode-test #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"9B9B9B9B9B9B9B9B" #h"5f8e5e101d2adf8a") (:ecb-mode-test #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"9C9C9C9C9C9C9C9C" #h"f971e0af77b5b70c") (:ecb-mode-test #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"9D9D9D9D9D9D9D9D" #h"bd0c2347001550ef") (:ecb-mode-test #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"9E9E9E9E9E9E9E9E" #h"5adde566f29fcf1a") (:ecb-mode-test #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"9F9F9F9F9F9F9F9F" #h"69957b9deaf24580") (:ecb-mode-test #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"A0A0A0A0A0A0A0A0" #h"d27ed9ccb317a05b") (:ecb-mode-test #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"A1A1A1A1A1A1A1A1" #h"d4a570532b6e2ee2") (:ecb-mode-test #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"A2A2A2A2A2A2A2A2" #h"a5a0ded4a1cfe9fb") (:ecb-mode-test #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"A3A3A3A3A3A3A3A3" #h"9d9a09be6b2787ab") (:ecb-mode-test #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"A4A4A4A4A4A4A4A4" #h"9a411ffbb9907017") (:ecb-mode-test #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"A5A5A5A5A5A5A5A5" #h"22d680772f45facd") (:ecb-mode-test #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"A6A6A6A6A6A6A6A6" #h"2396da1e2377fdd8") (:ecb-mode-test #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"A7A7A7A7A7A7A7A7" #h"1c507819d72c02e9") (:ecb-mode-test #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"A8A8A8A8A8A8A8A8" #h"ee6cb03e27f2def3") (:ecb-mode-test #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"A9A9A9A9A9A9A9A9" #h"3c54090c29919fe0") (:ecb-mode-test #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"AAAAAAAAAAAAAAAA" #h"26a5db9f8cdbd558") (:ecb-mode-test #h"ABABABABABABABABABABABABABABABAB" #h"ABABABABABABABAB" #h"73d240c92b912619") (:ecb-mode-test #h"ACACACACACACACACACACACACACACACAC" #h"ACACACACACACACAC" #h"5f1667ed8b2b7b5a") (:ecb-mode-test #h"ADADADADADADADADADADADADADADADAD" #h"ADADADADADADADAD" #h"8c39b64fa0aa5c3d") (:ecb-mode-test #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"AEAEAEAEAEAEAEAE" #h"f965aa5bbc713939") (:ecb-mode-test #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"AFAFAFAFAFAFAFAF" #h"39bab4b42b7a701b") (:ecb-mode-test #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"B0B0B0B0B0B0B0B0" #h"566fbca0194694d9") (:ecb-mode-test #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"B1B1B1B1B1B1B1B1" #h"121013323e172df5") (:ecb-mode-test #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"B2B2B2B2B2B2B2B2" #h"f6ddb09402443b22") (:ecb-mode-test #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"B3B3B3B3B3B3B3B3" #h"292fa5cb8204ff76") (:ecb-mode-test #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"B4B4B4B4B4B4B4B4" #h"a447d8f13c9cf1cc") (:ecb-mode-test #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"B5B5B5B5B5B5B5B5" #h"e7414872a236133e") (:ecb-mode-test #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"B6B6B6B6B6B6B6B6" #h"c8861591ad5dd8b1") (:ecb-mode-test #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"B7B7B7B7B7B7B7B7" #h"3efb35b5e12595e5") (:ecb-mode-test #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"B8B8B8B8B8B8B8B8" #h"b0b2fdf5f452cb9f") (:ecb-mode-test #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"B9B9B9B9B9B9B9B9" #h"7b1b1265e4adadb4") (:ecb-mode-test #h"BABABABABABABABABABABABABABABABA" #h"BABABABABABABABA" #h"5b4b8912b4a1b121") (:ecb-mode-test #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"BBBBBBBBBBBBBBBB" #h"aa0fc6d3b9b580b3") (:ecb-mode-test #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"BCBCBCBCBCBCBCBC" #h"7496f0504c4569f6") (:ecb-mode-test #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"BDBDBDBDBDBDBDBD" #h"f7b146753a44cda3") (:ecb-mode-test #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"BEBEBEBEBEBEBEBE" #h"8f48e0d94b79ab3e") (:ecb-mode-test #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"BFBFBFBFBFBFBFBF" #h"bf26624a48eb2e07") (:ecb-mode-test #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"C0C0C0C0C0C0C0C0" #h"296f2cc76f095831") (:ecb-mode-test #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"C1C1C1C1C1C1C1C1" #h"104600a4c1dfdcf7") (:ecb-mode-test #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"C2C2C2C2C2C2C2C2" #h"8ac437bde9025817") (:ecb-mode-test #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"C3C3C3C3C3C3C3C3" #h"a6dbf25d75cc371d") (:ecb-mode-test #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"C4C4C4C4C4C4C4C4" #h"8dcf3a83803d610a") (:ecb-mode-test #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"C5C5C5C5C5C5C5C5" #h"d1c97a2b9bb7e410") (:ecb-mode-test #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"C6C6C6C6C6C6C6C6" #h"86e4022b4c89e31b") (:ecb-mode-test #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"C7C7C7C7C7C7C7C7" #h"8ba235dc6406c026") (:ecb-mode-test #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"C8C8C8C8C8C8C8C8" #h"ab6c23ef8d73e13c") (:ecb-mode-test #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"C9C9C9C9C9C9C9C9" #h"07b771201e4892e3") (:ecb-mode-test #h"CACACACACACACACACACACACACACACACA" #h"CACACACACACACACA" #h"765602d5e52aea55") (:ecb-mode-test #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"CBCBCBCBCBCBCBCB" #h"b14283dcad7ccfe9") (:ecb-mode-test #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"CCCCCCCCCCCCCCCC" #h"874af9266c61b550") (:ecb-mode-test #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"CDCDCDCDCDCDCDCD" #h"a9260f13bfbe6c46") (:ecb-mode-test #h"CECECECECECECECECECECECECECECECE" #h"CECECECECECECECE" #h"fd2afb96430fc051") (:ecb-mode-test #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"CFCFCFCFCFCFCFCF" #h"036b8624c9081e15") (:ecb-mode-test #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"D0D0D0D0D0D0D0D0" #h"bc723f0513ce905f") (:ecb-mode-test #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"D1D1D1D1D1D1D1D1" #h"c61cec8b227c4f78") (:ecb-mode-test #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"D2D2D2D2D2D2D2D2" #h"87603977b586b080") (:ecb-mode-test #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"D3D3D3D3D3D3D3D3" #h"88635b498b3e2a57") (:ecb-mode-test #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"D4D4D4D4D4D4D4D4" #h"a7ef784b9e2555ab") (:ecb-mode-test #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"D5D5D5D5D5D5D5D5" #h"44a15541c7389400") (:ecb-mode-test #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"D6D6D6D6D6D6D6D6" #h"933f358da4286932") (:ecb-mode-test #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"D7D7D7D7D7D7D7D7" #h"cfa3a01d6fd369dc") (:ecb-mode-test #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"D8D8D8D8D8D8D8D8" #h"fed82bbd64ff5f58") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9" #h"bde494d8c9f0b584") (:ecb-mode-test #h"DADADADADADADADADADADADADADADADA" #h"DADADADADADADADA" #h"8c911f229fa765c9") (:ecb-mode-test #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"DBDBDBDBDBDBDBDB" #h"e667cefd15f63afc") (:ecb-mode-test #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"DCDCDCDCDCDCDCDC" #h"a6d992a149df4ecb") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDD" #h"dea3d546236e5c0c") (:ecb-mode-test #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"DEDEDEDEDEDEDEDE" #h"4e4787aa962ccd7f") (:ecb-mode-test #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"DFDFDFDFDFDFDFDF" #h"750a264052f88a69") (:ecb-mode-test #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"E0E0E0E0E0E0E0E0" #h"5d406bf14493d8b9") (:ecb-mode-test #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"E1E1E1E1E1E1E1E1" #h"1d4d7bb4796df7d4") (:ecb-mode-test #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"E2E2E2E2E2E2E2E2" #h"63dfc04a8daeef43") (:ecb-mode-test #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"E3E3E3E3E3E3E3E3" #h"5416aabd3a610884") (:ecb-mode-test #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"E4E4E4E4E4E4E4E4" #h"155f3e314f36f653") (:ecb-mode-test #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"E5E5E5E5E5E5E5E5" #h"080b08449902f8ef") (:ecb-mode-test #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"E6E6E6E6E6E6E6E6" #h"18590d824d5ef2be") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7" #h"8a13d81f2e9f4865") (:ecb-mode-test #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"E8E8E8E8E8E8E8E8" #h"e0672bb124d1458b") (:ecb-mode-test #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"E9E9E9E9E9E9E9E9" #h"9bdc91da010ee40f") (:ecb-mode-test #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"EAEAEAEAEAEAEAEA" #h"b9c94a58e5e990e9") (:ecb-mode-test #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"EBEBEBEBEBEBEBEB" #h"0b7c32e63c6b8013") (:ecb-mode-test #h"ECECECECECECECECECECECECECECECEC" #h"ECECECECECECECEC" #h"8a268641c5d7a276") (:ecb-mode-test #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"EDEDEDEDEDEDEDED" #h"d3043f0d7bbeefed") (:ecb-mode-test #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"EEEEEEEEEEEEEEEE" #h"56aa2db644e7ce76") (:ecb-mode-test #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"EFEFEFEFEFEFEFEF" #h"40d3e7c42214ad16") (:ecb-mode-test #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"F0F0F0F0F0F0F0F0" #h"6a05c72c6268012c") (:ecb-mode-test #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"F1F1F1F1F1F1F1F1" #h"e753a9ed5046ae88") (:ecb-mode-test #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"F2F2F2F2F2F2F2F2" #h"c72db1e599fabd5e") (:ecb-mode-test #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"F3F3F3F3F3F3F3F3" #h"634025ffc80bfec0") (:ecb-mode-test #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"F4F4F4F4F4F4F4F4" #h"381723194ae6e3ca") (:ecb-mode-test #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"F5F5F5F5F5F5F5F5" #h"64d5fc8069c8ef5b") (:ecb-mode-test #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"F6F6F6F6F6F6F6F6" #h"697bcba45e593e44") (:ecb-mode-test #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"F7F7F7F7F7F7F7F7" #h"4a2889f5fa9b9750") (:ecb-mode-test #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"F8F8F8F8F8F8F8F8" #h"1d613c043cbfff71") (:ecb-mode-test #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"F9F9F9F9F9F9F9F9" #h"1de1ed75d42a9597") (:ecb-mode-test #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"FAFAFAFAFAFAFAFA" #h"a2d35c7e826c595a") (:ecb-mode-test #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"FBFBFBFBFBFBFBFB" #h"5b2ce2e874889d0b") (:ecb-mode-test #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"FCFCFCFCFCFCFCFC" #h"2cb64d9f0bc28f71") (:ecb-mode-test #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"FDFDFDFDFDFDFDFD" #h"d3c61b06b8f603ff") (:ecb-mode-test #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"FEFEFEFEFEFEFEFE" #h"40ef405e698d4eba") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFF" #h"319bbefb016abdb2") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F" #h"0011223344556677" #h"3b7689c3f5fbc86b") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF48" #h"EA024714AD5C4D84" #h"52f7d60b787cf3d1") (:keystream-test #h"3c6e0839eab75c2fbb0976c188f89199" #h"4232c63112921992" #h"0bd0da3fe291f5d1515efaa19bf9210701ab1c36c4da3d9cc40415f573f08a335e0dfa171cf4ee4fc57bb8136e8416bb8fb3652089c4a7c1a43fe3fac77d3919da831136a9b88d89d03f07adfac8ae92a4650cd8416c0945404a77fe45bb7db826ddd7bc8212afc61da0ce485f9aeb7bbe674a36d3015db4b41e71bcd411693a4f0ad81df1e789588eff14b8c99579b670d1d3817328144e0c18be040dcf7143a3305323a1feb10acf029e238de5788e7dd7021bb9f6089d28c48ab2d11934b15cda9650547771312b39ddd61c202fac8d839031f258d84cbaf2ae915ee75249f47c2f5b2ac1a0e33e898691657d7a160dfe258ca8bd5986352732fac0fe828ead525753882cb3be167c607d3865d766d3372b7528f4f7ecbb4fa0ff5f3a6c40749c378c667717c37b40b889bc063ba08650b6252a2a540feff58eb6b076ce1511b945b61badd19af9f3af4fe535d6c56f86c58fe81c2138f292fe7a8b39c030c8e05ea18887de6e542908b03ded13a2fce0751d3cc43a7fc8298c223dddcfcaa94287ee59725ca94aeed427f49c03d266b5ab4e433e7f9da28cf58bf20617f19c5a98672a22e99828f61d845739f7fbe929ed245e296306d2ba112807ccfac3b1253381c5627fc0edf563b6742fbc107d6a4ea9223a62d5b263499b8d8f8716c427593fef5e9e702ecb80eb2f3ddebcb8083b04fcbac2b3bb5367d41a733a61595b99e5dacfe8a034d0a8c4513df9a3bd04591a786e3861df532cfa269e7a81643357fa9a58c8af961353b31c066e0a2566e8925399a3707ea702780b50307b4533c8aa259e320a4a50b8c6fd2c4f5b688b0df89a5206252c71adf55d404447e50494723401ac5bcb89071f7ccee16348c639ced6b40252a6998a7e2a654b9047442f95a961e34e6ded0bddfbca016a2bf38f021928c618ece4bf795ab02130e4fb6afe235d736189aa62d4fce0ca55802bb87df03d5b59038ac8149a6eaef7057191b4ab174ace28e846d2254845b09ee64e09d520d8e5a0e9c35a762dbfe8baf993d75116cab520b0a5836873177afce8be0bf6e36d5b81057f316dddfc9b86913823b742f348c19a82e0b730193962ff7edc52249974b1b35e705c560ee0263d13c84f036feae385503972f0bca1c98533cf7e68b178b8184c97fbea334c48c369317807584e38512a4a78c96df103b9eeff33a0cd28915a9abb6ae825d4b3e733c5dc6749b0dbf20a35c0ae89b760974a1e3751b40b5ac86c9f0938131c6b57f45778f803a8e8874ba77ad7449e9181db105d6ca5791bf42cb6a22d65500fc02739f144d5ae09f911fa50efa228482671cecc1e4d4311e1e969caa2f460920129c68912c6bfcf9f8aad473bd2e7c9d050e16a7f798379c7a93fdbdc561398c3d29b24f621e0") ironclad-0.57/testing/test-vectors/threefish1024.testvec000066400000000000000000000102511420372057600232530ustar00rootroot00000000000000;;;; Threefish1024 test vectors (:ecb-tweak-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"F05C3D0A3D05B304F785DDC7D1E036015C8AA76E2F217B06C6E1544C0BC1A90DF0ACCB9473C24E0FD54FEA68057F43329CB454761D6DF5CF7B2E9B3614FBD5A20B2E4760B40603540D82EABC5482C171C832AFBE68406BC39500367A592943FA9A5B4A43286CA3C4CF46104B443143D560A4B230488311DF4FEEF7E1DFE8391E") (:ecb-tweak-mode-test #h"101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F505152535455565758595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F707172737475767778797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F" #h"000102030405060708090A0B0C0D0E0F" #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0BFBEBDBCBBBAB9B8B7B6B5B4B3B2B1B0AFAEADACABAAA9A8A7A6A5A4A3A2A1A09F9E9D9C9B9A999897969594939291908F8E8D8C8B8A89888786858483828180" #h"A6654DDBD73CC3B05DD777105AA849BCE49372EAAFFC5568D254771BAB85531C94F780E7FFAAE430D5D8AF8C70EEBBE1760F3B42B737A89CB363490D670314BD8AA41EE63C2E1F45FBD477922F8360B388D6125EA6C7AF0AD7056D01796E90C83313F4150A5716B30ED5F569288AE974CE2B4347926FCE57DE44512177DD7CDE") (:keystream-test #h"032762283634bb968c865cfc26b3dfd51ce3f48077710cc6d2918be654bd9a7195ad075c45882e1c803010a9d407a5c77a7aa885fa9b43157e22f84e9daf2a442922062c0bb8a94f5f5d57ba1006854d1d7377f200f2ae17d5a86c0173a8d8a89effb81929ad292f7149e9257e73b037b6ccf9eca400ffaa3a371c3935ab3d0a" #h"20e5a25a960a9c52093aea313c5bbb9c9807d2714612a60e2bfe2ede9cda2f11ca9388b6ffa18479349c3cccc38f0fcb00f3b8fb5cfd55ef08587f189ce58e9adea5d7d2d0880e132a7408da87dc0673899e4e5175fc653e0e00d16d2254962d3221695fa3f9269654ba3646af012e3a5ba2bbeea5fdc7b42ff3e21ed64966ca" #h"193ce826c7a23cc98aa166034bc45ed40951bd5b496ba053cb91249a8946ec69307aab9093b5d9a0bbfd327d0d8856ed3d4ac043b6c35eedd74b60931f1cae8fc3a15e6cf03afba219430d99bb15e78bcc8ed60313423bc52dcecd96538d6fbac102d69f41fc66fa533418f86bfd2412f459314a9300b512bdad49d3fa7c0c834c9cbbccaa1849d1b24984b3fb883fb943313d99d231eb7b0bb1d947469a8567fb0eb3f5f49f623f8e3054a599f40445d660021e6837039f1eec12dcecada775bc745b87629e91c37cf923a939c798b2d41aee4c31b13658886293158d14fdc55d2ce591209599f7e5ef86d7de65a312a485c4145766829a16dc873b69ce326d6a06b7dabb61d9427f998deb8db1f0ca9a04f15ad6cd0a63d50968581f60fef0fa46fd02392b3210f9f0601db06ec6e931d4b4ddbd5a0d7f3b667f4c81eabbc230f9dffef5da73de1102a6fceaac1bec1e4dd36f454c7d4b1eac15c31fd298270d992877786b93e805ef17c5806e7d669111f321836f1c7a537c37b71e85312b6358488aee3b52516d34c87b73cdf26f8f3ce23990bbc3e524f14c8212fbd7d3b2c4016459f3041d59dd1728bcd741675f403aebd55d775b632c9216b66b84aef426427dc78bb6d5521ce2adf039f6c6e6d4c6c293e7a02e094652a35c28e81ad6094b16f06e7d0ca10874a05b7a7c8ce96de4cc9c933427eb1eddd43d47190efa8b3566814342fc0bf29180f48193bcafd3b48c04d1ca2fb0dc79968dae8bfbe1f1648562767068693702035c06c0d570c548ac00d12acc5ab9cf3a81be77833b019a66c291c1b43d4ff0b2b70fa8883813676d6c1ddbb2feb2deb8459458aeed6726111b70fc2e4710ec338e6ba3014a737ced06600eb7aaf1edf0ffc84b61ad81c11b678a5e53fd009bd9a3d6053aba7ee42912090354714fbed3810c5fa27bc495c84465f3a9f995d20af55e2081fbecc262b4f5d22784554355ff3f23db4b04849aa101070eb019e7728b44b7181bd8ccc337ff5d99465daf74982347de45d4a83ba2907ffc99addd086b12bfa37c17caf4f51d10cfdf6a9829241ab093408053761016f87afb25732ab3123d78ea5c1206b1f74957ca10b86768c7f96d0b139ca7dc1e3b74b9955119d412bc48568cbb268af988b8b78428c94e83951f37dfb0e2ba3b08d7974f516ffc79f71b9982dd36b6b9ded8515eb208ca74a150797a9caaf5d0d2e32ee170189e26b6055a7ffdcbdd5c857dcd8bf7d0a40a2356a041661ab8edee102adc616ccfc1296dd5bb5a312d799722c56c26c60d1b6b38b198d14998466c88c1848615052e2958bdfcd9d79b5f5463e8877577a2853cb358adf6af2a5699f16867d7e3b0046385a1d30b4c327a07345999e71ee86983b1ff2b2ceb10385ffb") ironclad-0.57/testing/test-vectors/threefish256.testvec000066400000000000000000000052501420372057600232040ustar00rootroot00000000000000;;;; Threefish256 test vectors (:ecb-tweak-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"0000000000000000000000000000000000000000000000000000000000000000" #h"84DA2A1F8BEAEE947066AE3E3103F1AD536DB1F4A1192495116B9F3CE6133FD8") (:ecb-tweak-mode-test #h"101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F" #h"000102030405060708090A0B0C0D0E0F" #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0" #h"E0D091FF0EEA8FDFC98192E62ED80AD59D865D08588DF476657056B5955E97DF") (:keystream-test #h"6176026252b24f48fae21eaec162fd6f18e1e16525888875a6b8117e32a3fe42" #h"f26941e28bb26de69a4a0d7cc86bfe33b7d3426f324d1e0edf8fa647eebe20bf" #h"811ec52f269bf2127db7d25e2b8dc28a6b7e6f88d1f3665218ecf47c20601291ccae5161cf7ba3d576903d7b4035a742edd7f03a074a0594e03cf5094f57f746dbfb8654f70bac9ec3635bb3ebea1fa6abdf621fd76471a91997344002207df07f4eb30218119359d9d2007f4ac5f721cb44a0ea174a9ce334bfa5d93ff27350908b07fc923ae437c0019c2977d4b1b11b122b1168b69d8d017f3a1a3915cebaa612fe77c23d9b4ff57a4bf31e9e83c4f827a3a786d37cd35a781dd2e44738e61b2fbca1f25969061d0dea2a4a182b13f14267864349a2047cfd9b98e5ceab54add116f0409f131d81286c2d535e2149497b268a69d27c257c4a932a07322a410a9478eb1249a518cc1971c529c309f58874a97dd92618d7bdf48830b5404269dc07ce3dcf093119769e51530428d318d63afa1f3f354f3fb49579d27111fb24a699cbb35c78eebffca843f1b40ce120e20d0f4d4d6ac9d19435d947c3fb06f40804af9612d46044153e29056a26c77aaa4ef5da5b3dcd073c875149b25f83caa83ebc6fe96988eb8aaf22d6780a1c9eb8245a3ee3ea7aa51d7f574e14f835ba2d6922cc0aec6b8fbc737043a7fe64c29399ace2f9a5320f1c22dd9a7cbcdc84f4977bed07b06cc1cdcbadbb912c1a558c3fa182c13b44e5f7aa32595e05a398fe97c7c1f0d461d42a4bed8a6aa788a737c318716b619ebba1c6b1e71d209dde9f2fc9715973ca319e2b8195367bdd434aec35eca53946e599ff16211b3803b8fa6f03b8a78650726d400ae46db3569fdf6afe35d4b782c90594fda0d71cad94c9e3c248dfa62d81a582c496ef1b7b86e393710155b06b1acb193bbb135c74a80e8065538d4ff6f4a45faf87a54f2736c387289b6633a40e02ca3beb58b979935f6df51d68a3b37cb424a9594f391d4a92b0a9c155768403582211e8033d4cd95ac3dbc5fb2e6af1962814157a1a2831451e694f9830e0b9e3ce109f4e5a330d8a6c4d319cbd26413a9c18b3a644a173058b4c206f570f7633af2818afcac92f28cb60b698763c2d9dedcdbc3acf7608ccb8cbf7cd051d803518e3d52aff7f19e563407f8ec9af620922e7b04798857d4592bf423786661434ebab8cbc884c98acbd1b809c62d055b3c2de1903e642d4a4bece4cbf4aa3543da0d8266fefc650afb422db63934b16c0f2a0a5257edda4918d5770ff3f3e6be9461e4687e0fa2674b6905c380b11d0fadf57b4f5d1c1c7508a3179823558fa2c1b9f02bf095c732a245995dca128959f01ad1fe4be7c7fac2837565320fce88d7cd2c38c3e8c69991e0457202960158361f2529ade4c1ab50bd5af9834d51aef0ea944544176c61199d0326b136e5449af6cf693e8b036d5c7864c7db6c787d877735191dc8d54aeeb3fc74f28f540") ironclad-0.57/testing/test-vectors/threefish512.testvec000066400000000000000000000062501420372057600232000ustar00rootroot00000000000000;;;; Threefish512 test vectors (:ecb-tweak-mode-test #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"B1A2BBC6EF6025BC40EB3822161F36E375D1BB0AEE3186FBD19E47C5D479947B7BC2F8586E35F0CFF7E7F03084B0B7B1F1AB3961A580A3E97EB41EA14A6D7BBE") (:ecb-tweak-mode-test #h"101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F303132333435363738393A3B3C3D3E3F404142434445464748494A4B4C4D4E4F" #h"000102030405060708090A0B0C0D0E0F" #h"FFFEFDFCFBFAF9F8F7F6F5F4F3F2F1F0EFEEEDECEBEAE9E8E7E6E5E4E3E2E1E0DFDEDDDCDBDAD9D8D7D6D5D4D3D2D1D0CFCECDCCCBCAC9C8C7C6C5C4C3C2C1C0" #h"E304439626D45A2CB401CAD8D636249A6338330EB06D45DD8B36B90E97254779272A0A8D99463504784420EA18C9A725AF11DFFEA10162348927673D5C1CAF3D") (:keystream-test #h"0ea0f900feaf23b40f88e07900c531d08d28620e8b53b5d8d62eced75da362b7af17004dc89a79453953da553d392807b9faf5f2316cc97a9ba1bc4aca5da48b" #h"87c54e2ba117e928dc5179d2e3f356d33ae01415bf1dbcc055c012b0be83b73c58aa50f0f557185b9ebe0f11ef226daefc08e5be48b585fe98503bb844e88e5b" #h"d8dcdb860f1d58af65590035d7515cd411838b08d5f86de3e8105aeb5181d00b92f22542e2b28039c3b99e2d7dd8065810525a2c90c0f6dff2ba1e20cd1d820ccd45719c5c36d5e29c1cbeba939c53ac50a0e201adf658dbb639368684f17a9dd1c17ddf5eda0817b25473874957c2abad6e41c1b36500dbe2332bd871be6bc6c25a6b02c113af10d47a90b108967eb4375995631b29d2e400dbcfa477fcc902e97538448ed94c42daddf0d7ce946055e8b9738f8b9a3e3cd6e257d1a15615b51ba41b32d9572c5d31f07cdf1d0f0c30fe2cfc19ebbd337f0343d57b9a867704be0e56ab29a93f9ac858d318e81a2aae556e8725249083d901ded457d9e0c04cd74fd6578bb95b002ee79c25f3467ee570036ea2a95aea28f2db9e896f467bb25ae2a8cd08efadc8053f184fe57783911cb635e4ad55452de8d3df016c552e4d14af99912f6210e0c8dc848b681c1cf8a89d7c5520337a683f9150e3ee7ace49d505560dc591642675d515affb8e534b829a1f3326997ed102e95216ac2218b3a65e66879daf0a2c162b426d551362433ed006ae04493a9481e7bf955a587de574be138aa893e7d76ac8ad4008f3703f8ec0b7887ba154eb69c8b7aa1377fa26f2881a8cf54a730954842b5d23346fff6d4ef0f886bb5098b452a23f885314c098b428501edbf8fe8ab13c74081a7ae2097cdf286812fce717f731ad9b12005baaa529f8fa883e0a89497219e254965354cdd63891c7bff87d9a33d34b87465fb83ef7d54fa016161cb46d5bda11c325df2be7a7b967050b30d78806d823ce36603fa5693e540b88ed35e330a58f93fdecc3d3560ecc9fb3d5474eaa31bdd46909b879ea8f50de1bc81074c68a3a49b41b6bce9c2778ffed8ae12cfa061e92de6525be5ed58cb2ea2cd1775b9358ea988d08ff0011b04ebfc41ed08d50c31c2a50ce500b18cd2df314e84cf78bfe5e8560092fd6e8408315e9f763a6db9b72f6bab24d4399f92be92a2a65d9abf226f11bc525d098f5fce4ab194679836b84c247303b4558577037c9ed03800cd17810ca0f941213ed24373ce30281cf9ea9ec822bc6401f9779247711b094f1c8b441419c69a5c6cd2041a04e2501b73c0a1cfbbb033397fea67d97b51040a60ff91fa7c880ca963d926bf53e6d289d150fa959051923026a6f5dc54aaa7df59436988e2c1a5aa9e25b6068aa62e901a3772379bdef22c63937edbed9eced99a140b1fc675b5462169ab0ca4210a2586238283ed1346fcfdc4f24be091d6c7fc615db7676d61ccbe2ea34af018086cb4cad63e2d49d6310d67d164c1b4fda1f612f644445782b795f2916793b926b14966d307d6aa704ac6426f4291107139bf5a834cd1de805903fc665ba1ca0aeb98c4da247cb11fc07d9e649") ironclad-0.57/testing/test-vectors/tiger.testvec000066400000000000000000001243611420372057600221050ustar00rootroot00000000000000;;; standard tests (:digest-test #a"" #h"3293AC630C13F0245F92BBB1766E16167A4E58492DDE73F3") (:digest-test #a"a" #h"77BEFBEF2E7EF8AB2EC8F93BF587A7FC613E247F5F247809") (:digest-test #a"abc" #h"2AAB1484E8C158F2BFB8C5FF41B57A525129131C957B5F93") (:digest-test #a"message digest" #h"D981F8CB78201A950DCF3048751E441C517FCA1AA55A29F6") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"1714A472EEE57D30040412BFCC55032A0B11602FF37BEEE9") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"0F7BF9A19B9C58F2B7610DF7E84F0AC3A71C631E7B53F78E") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"8DCEA680A17583EE502BA38A3C368651890FFBCCDC49A8CC") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"1C14795529FD9F207A958F84C52F11E887FA0CABDFD91BFD") ;;; bit-level tests from NESSIE (http://www.cryptonessie.org/) (:digest-bit-test 0 #x80 63 #h"B99F2BEFF1E64861ECB3D91B04C9BA4BE6FC0FE7CE9653F3") (:digest-bit-test 0 #x40 63 #h"FBDD470EE15111676B477532D293019EB182CE9EF17C0B59") (:digest-bit-test 0 #x20 63 #h"D68BC840B64746A212810784CAB2BBDFCC49FDC743AFF5D4") (:digest-bit-test 0 #x10 63 #h"D6B280F151C286E2B8A78B3C80F181E192BEEC0A339F0453") (:digest-bit-test 0 #x08 63 #h"02FDBD79A641FDB807DD80699019BC97DA69D692104FBFCB") (:digest-bit-test 0 #x04 63 #h"E30F39FBB7BB8C191E2CD9A970EC806EA64825E4CCE782D7") (:digest-bit-test 0 #x02 63 #h"0521BC64D5C188320CB9AE9D2A89BE291352F77C3E44772B") (:digest-bit-test 0 #x01 63 #h"60224F0B05145D00FB3C09E78522FE17FB7C64AC90AF4BE0") (:digest-bit-test 1 #x80 62 #h"3104BE53E8A19ED90BB03DA1FC5FBD052EE7D80B4AB31AF2") (:digest-bit-test 1 #x40 62 #h"ECE34E9D1BBA44EBAAF18254812DA74E1B250D874049471F") (:digest-bit-test 1 #x20 62 #h"7FBEF692D8F3DB59912960E1C4F255D65CFA93E64CDA00B3") (:digest-bit-test 1 #x10 62 #h"180C2B906440036CB48ED7DBD670CDD06054734CA9E3E531") (:digest-bit-test 1 #x08 62 #h"EC1C85F1C4361CCC979FA94565CE47BA766B26C03E0155ED") (:digest-bit-test 1 #x04 62 #h"0CB103FE2F16046BCF473C0EF5F30510094B327A811303AC") (:digest-bit-test 1 #x02 62 #h"35E499F9FCCE1B0CFE442FE493333763C8E5F956A255DDBE") (:digest-bit-test 1 #x01 62 #h"E8CFB0B7651DCF73891553FE1AD3DC0F1BF5CA89E2243771") (:digest-bit-test 2 #x80 61 #h"9F375EFC406EDB4DC7008C6ADF57CE7BC6072BD39593651A") (:digest-bit-test 2 #x40 61 #h"C40960EE520A3F6E38938C4D774695FAB9AA99ED98724686") (:digest-bit-test 2 #x20 61 #h"C925142A228B90DC4EEE8D740480095B72EEF71717AF230D") (:digest-bit-test 2 #x10 61 #h"49F67D2EE9E5E07754EB3FB587A5DFC9A5A5F1AF952ABB90") (:digest-bit-test 2 #x08 61 #h"8EA4A53FB597B8612B751B25B4D67A3211BD9B55810830FB") (:digest-bit-test 2 #x04 61 #h"7F8A9779678C20D7B26126CE54CF40D586D639038E0D898A") (:digest-bit-test 2 #x02 61 #h"45B2D2247DF2BE8762F7C2BFB1D282DB99686B8C61F12DC2") (:digest-bit-test 2 #x01 61 #h"5AF3F43A65A123F25318B108322F1422FBDD4E2088B3FCC5") (:digest-bit-test 3 #x80 60 #h"255BA44E43BB186AC95A8BA873F27C17D4209A7CDA0743E8") (:digest-bit-test 3 #x40 60 #h"6CC1C5FE50A6A3E1A8C9151E529627B7825E797CA2996763") (:digest-bit-test 3 #x20 60 #h"4C8E2574514F1908500775D706E66CB5E098A07763CB29A8") (:digest-bit-test 3 #x10 60 #h"80E15B5D7DD082786B73BFA7C11ABE846CC08992D82082EF") (:digest-bit-test 3 #x08 60 #h"9AAEDC20A2B5C9B3AC1FEAB011E0BC63C3F14A77716745B4") (:digest-bit-test 3 #x04 60 #h"20FDDFC28496F4B7C474D1DC0D2556B71A0BBE0008FBCA74") (:digest-bit-test 3 #x02 60 #h"6C5437A6A7ACD3882300183FBE7B474CB7C0E45DF4BF126E") (:digest-bit-test 3 #x01 60 #h"3220E4DE2B99FD792057CA379EC8E0FB9277B2B0AFCAF7E1") (:digest-bit-test 4 #x80 59 #h"5605262344AED0F46F6AA94AAE288A936B3783D7B0C96EBB") (:digest-bit-test 4 #x40 59 #h"79FE05ED00EA9FBE5C5A411B7BE9D0AB7E95FCAC4944FB5A") (:digest-bit-test 4 #x20 59 #h"5632B77A86B06F60FB38F6F8D7B8ACB076610CDB17C45F3B") (:digest-bit-test 4 #x10 59 #h"6F1C90B7CE7D352A1EAF908EAAEB69DE70CFEA924FA1F322") (:digest-bit-test 4 #x08 59 #h"B0582D1882AC0B5C534293ABB751072EACFCBCCD7760B739") (:digest-bit-test 4 #x04 59 #h"D56CC1F5522E00EF7F25DA7C524CFBEF639E04ED232FDA74") (:digest-bit-test 4 #x02 59 #h"FDD3E72BD41951FF6CA729207F9EE320F277C240C5ABA6CE") (:digest-bit-test 4 #x01 59 #h"25C341EFBF8E0197DD7AA0D098BE9C262EA24A5ABF1956DC") (:digest-bit-test 5 #x80 58 #h"3D8E11219C1F4A655DE818DD5BAE94724292D1FC1F2C0451") (:digest-bit-test 5 #x40 58 #h"78D0C2AEAAB13E6957111303BCE092987F38B125654AEB06") (:digest-bit-test 5 #x20 58 #h"76CE1A38D5408FCF5C60F231F8624D22EBE4F3C2A77833CA") (:digest-bit-test 5 #x10 58 #h"A1478F92ACD8AFBF1383F566E8074249C576C6C01573C816") (:digest-bit-test 5 #x08 58 #h"EEF978C6730A5A51E0C67CA0CD591718F48E586924DACAC3") (:digest-bit-test 5 #x04 58 #h"D244E12581769DF1260AD3B9BADFEAACAEC10F08D0BC20B8") (:digest-bit-test 5 #x02 58 #h"6C88A229FF9769C257AE208427684E2BD2F2616FB11DC61E") (:digest-bit-test 5 #x01 58 #h"F9AA7D877F5B192A751D6956225FBB166E70BB5373EA03B5") (:digest-bit-test 6 #x80 57 #h"8E5FC1110E41E417B771F4860BD7180A8771EC8BE3F51371") (:digest-bit-test 6 #x40 57 #h"16A04075744A70693EDC2823E6D3F53F8BD7DA82F61C988A") (:digest-bit-test 6 #x20 57 #h"DAA5DCE2246AA0B16DFCB5A6DE1148A4667CF130CB0FE57A") (:digest-bit-test 6 #x10 57 #h"7935C3EAC77062032E4DA41CFE266DB7B1CEAD6A92F36531") (:digest-bit-test 6 #x08 57 #h"12FAFE2DD9FE0F928585DBFFDF2FC940329F4CA2C428FFA2") (:digest-bit-test 6 #x04 57 #h"B5AF46B22173E04EC7C73D201D230E76AFF7E25E7C64C9A1") (:digest-bit-test 6 #x02 57 #h"04A39346609CC870A34BFE4BC381391E5096EECC0420CBE0") (:digest-bit-test 6 #x01 57 #h"8E30346B3CF6A33A5DF960349E79E318A559177A10132AE5") (:digest-bit-test 7 #x80 56 #h"E010FE9A2A139AF552D7A22D5D04D59ABE9F26099565B139") (:digest-bit-test 7 #x40 56 #h"7E3A17F0489C5D1CF249BDFD6D839D17797E5F91655061DF") (:digest-bit-test 7 #x20 56 #h"DB0EDCB6F326FFC5EC6C23A9B23630110BCF3EF1623090C7") (:digest-bit-test 7 #x10 56 #h"0E878D8D2984F9A638DFF1A309EA4B436D24FA40B3BC5F4D") (:digest-bit-test 7 #x08 56 #h"AE09F204A5E6EEA22BADD0042D00D48E60643343C951C79D") (:digest-bit-test 7 #x04 56 #h"5411134E8112EBD21A89CA726D6C3293BAF1522031BFED57") (:digest-bit-test 7 #x02 56 #h"1CC1D5B8489F213F6A0519811867CA70AAB68B93768B2EAB") (:digest-bit-test 7 #x01 56 #h"A16D7299661CC6978AE949CF9F607E286913CA0615E12CEB") (:digest-bit-test 8 #x80 55 #h"9A2A8EE8963BE88DF83D5761D490FFB0450E9C450542CB08") (:digest-bit-test 8 #x40 55 #h"FAC9C5FB38BF7CE0902DC3E447D3D4D6DD369DBE94A8AB67") (:digest-bit-test 8 #x20 55 #h"C430CAA3FD05B674624BB549B3A565C9F1A93D8E4AE429E0") (:digest-bit-test 8 #x10 55 #h"D03C16013ACB204439B0B84C5EC0507C07EAD360114BB6D7") (:digest-bit-test 8 #x08 55 #h"44F6F5EFA89F2302B9E4B6710EFA1BD79F2589575F57B7A0") (:digest-bit-test 8 #x04 55 #h"C392AF0E93D619A0FAAC3FC2EE960DE9464DF3F3B87728D6") (:digest-bit-test 8 #x02 55 #h"BF1C5CF1B59A39C9EFD3D46F9144E7E7CC75F53C83BE87AB") (:digest-bit-test 8 #x01 55 #h"F4DEAFA84B6859F0B32D04DA3CF8DED931870EB8EBA086B6") (:digest-bit-test 9 #x80 54 #h"68B3511E9A930CC1E465DDADD3813E79E5235690E279A53A") (:digest-bit-test 9 #x40 54 #h"D98B1C76BF4216804783DD2A082F5722AE7049717AC6BEE4") (:digest-bit-test 9 #x20 54 #h"8FE146611B75E5E6527F0E2516F09090FABE1AE0F51D9965") (:digest-bit-test 9 #x10 54 #h"B6F4518C9B5A082BA4951EEFEE8991D2605395D04FFD9784") (:digest-bit-test 9 #x08 54 #h"0C4C268E0243354A31C576B053FCECCD320D864892DD4452") (:digest-bit-test 9 #x04 54 #h"4FCBCA86DAAD5EE31427339F45DB698C56F4EF5977C62346") (:digest-bit-test 9 #x02 54 #h"D63400C91F46CEB1F73427A1DD61920E5D98250CD7B21D61") (:digest-bit-test 9 #x01 54 #h"2002BE33AA6783F40109E747E27231C652FC90B304F91218") (:digest-bit-test 10 #x80 53 #h"A8FEDBD8A393C41857EA09B457FDB42078049B3F269C1431") (:digest-bit-test 10 #x40 53 #h"D2C06B7D56774863AB6F3A9F8FFD79FB56FF130906B16596") (:digest-bit-test 10 #x20 53 #h"5D8339715D342E8DDCB7CF18F4878D2221BB05FC4B2563BD") (:digest-bit-test 10 #x10 53 #h"06DEF00E4151BBFA011D87096B16C09A955B1059EBA03393") (:digest-bit-test 10 #x08 53 #h"36386BE0645E7577BFF63BAAC50532912EBB7026B120E472") (:digest-bit-test 10 #x04 53 #h"8E4CAC8FE8C09463A5726B0FD3335A09E8971B498CCFC14E") (:digest-bit-test 10 #x02 53 #h"45EA2AE4AD4B1E0C6958FABC69939E1A19300E28946638E8") (:digest-bit-test 10 #x01 53 #h"7C97246A7834ECF7074DCAD08A8B4BF3E8A68157889B97E4") (:digest-bit-test 11 #x80 52 #h"0F040C8CB0C777EE04086DDEAC53751D037FC41A62DF3D64") (:digest-bit-test 11 #x40 52 #h"011A9D0417A070DA0D425E835F03C68D0BD8762A7174C0A6") (:digest-bit-test 11 #x20 52 #h"76B90E3049F98281369B0ACD1D2193EF2F63A25F75D9FEA1") (:digest-bit-test 11 #x10 52 #h"733DBC18BB0821CD1B33210BD9018F2EAF405E0A281328B4") (:digest-bit-test 11 #x08 52 #h"4C3B42FEA3DA2B23AE3C723B22522AECC84BB1D5CD2F9E51") (:digest-bit-test 11 #x04 52 #h"77396616E87FDEEBDB6276B30422B04C2098F85F0085371D") (:digest-bit-test 11 #x02 52 #h"6BD882666B2089F5A3904F91E26B34263BEF463456486ECA") (:digest-bit-test 11 #x01 52 #h"1AA8BC49C40EEADA030EE802C336D83D75C3EEECDF365AB2") (:digest-bit-test 12 #x80 51 #h"6E9615A0291AEB33D37FFF3BDDAF628178009820457F0737") (:digest-bit-test 12 #x40 51 #h"F78CB6642756E3253A46FC55E5C852B5D209CB886F1953D4") (:digest-bit-test 12 #x20 51 #h"3D900B55C9CD9E821512415B734B06A28B8EFB0488F9EB4E") (:digest-bit-test 12 #x10 51 #h"1D534936BE6E2831E83661E0568B170EF52712899E2F8A8C") (:digest-bit-test 12 #x08 51 #h"68D08DCA280F71F6E33FE81F56BF5D98BB498B720F8294F4") (:digest-bit-test 12 #x04 51 #h"D4D1339C8797918AEB4000CE0B75EB741EEA852B7E5FEF35") (:digest-bit-test 12 #x02 51 #h"F6204099D4C1B7F82BF0A1364A6322C3578A46F354A68622") (:digest-bit-test 12 #x01 51 #h"FC94F4DFB37B4674843E0CD9DAFDE149D89667915DEFAEFA") (:digest-bit-test 13 #x80 50 #h"F64C25ED176B388E022A3AA4622975F1CEC7A9A359D1D28A") (:digest-bit-test 13 #x40 50 #h"CE3230D5A7B57E82F92D8A36485B0EF70B3A8430391907F8") (:digest-bit-test 13 #x20 50 #h"D9AC7B94226A60FC7D99CD796FD5B6EA36AE798047E1B53D") (:digest-bit-test 13 #x10 50 #h"8A9F12D8D9DF81E43E9DC038FBA927A3A0A0D6FA43749D2D") (:digest-bit-test 13 #x08 50 #h"CCAE282196A07B02E896FDDBC71616298BBBC436BED3D424") (:digest-bit-test 13 #x04 50 #h"09503A7A95B31206D16FC3A3A6730CB379F413C255B0916A") (:digest-bit-test 13 #x02 50 #h"0D799B12AF89A92E0E91237F37236BA484B5192B468F92B4") (:digest-bit-test 13 #x01 50 #h"04A3597758A82EE3EAA34F5B0FB1198A1177B3B3B8DD583C") (:digest-bit-test 14 #x80 49 #h"BAC0B8BE5A41BB8186CABAD7A32F17559DB8579D2A32ED35") (:digest-bit-test 14 #x40 49 #h"96B5AD3931A54DF4C0754FFD17E2ED27EEDBA480D7DEC700") (:digest-bit-test 14 #x20 49 #h"4A3E600FE13F444B31E03CFA0863F9E316F83F68F16D509D") (:digest-bit-test 14 #x10 49 #h"B5DA026AE3BFBFAC6D2AB00A16ECFBA40130E1817E26E6FD") (:digest-bit-test 14 #x08 49 #h"635799A28E0E31EF6DA157BE71327548E1EBBE93D39A40CE") (:digest-bit-test 14 #x04 49 #h"00A7C94AC7D6DA73AF3537816D7535F6501C81E9D0B70C30") (:digest-bit-test 14 #x02 49 #h"CEA02CEB43D209ABA6217234278931ECB509813A516C8770") (:digest-bit-test 14 #x01 49 #h"460F8608C1CE8A7ED701C8D46D800E5097DD421321A595BF") (:digest-bit-test 15 #x80 48 #h"595B7A837EA74AE2A9C2A4DD9915C684E4003A78C908EB34") (:digest-bit-test 15 #x40 48 #h"40A34377B74D9C7404E69898DA030F47C7B4F5125379799C") (:digest-bit-test 15 #x20 48 #h"011A1626ACDE5490D40D6D3B212E4296DBCFAA310C0D0A7D") (:digest-bit-test 15 #x10 48 #h"0C38A676E739B11BF2B5F305DFC38C1194B67D5BD9ABDD3B") (:digest-bit-test 15 #x08 48 #h"B2BDB49CBB6A27D90DC43CAEF626531E3794B02A4B557363") (:digest-bit-test 15 #x04 48 #h"925F73F9BF011425B3C855EB93FF2B3702994957C90A6E71") (:digest-bit-test 15 #x02 48 #h"C5438E4F6F20FA52579EA70DBE976E8ED0CD0CA79F0FF667") (:digest-bit-test 15 #x01 48 #h"9C19CE6E144C81EDBEFA42762CCE7687D82D90C80E6E4DD7") (:digest-bit-test 16 #x80 47 #h"F6F514983734179B56A2DB5810D2FEF9FBAAE792DF757EE6") (:digest-bit-test 16 #x40 47 #h"47EA4D78437E145E56490DD5C47788BEC899AB249A782AF1") (:digest-bit-test 16 #x20 47 #h"751FCB36A8B567673E9571B4F359CB7452913DE68458233B") (:digest-bit-test 16 #x10 47 #h"6B86FAA0426879F9C1A6F4A9F26FF19DADCD0BA2C34273F2") (:digest-bit-test 16 #x08 47 #h"8ABD32BED2814C6428812B67CB7228BF02AC80EC80C5771C") (:digest-bit-test 16 #x04 47 #h"026EE4B31888E474E20F1627B30475FFEE90BAFA2E214CE2") (:digest-bit-test 16 #x02 47 #h"6EA00649517124D6598C2CBB109B8F8AC445771A9550263D") (:digest-bit-test 16 #x01 47 #h"9029BD1306510D7BFCEF39B7E3E6F3A62993A810141919A4") (:digest-bit-test 17 #x80 46 #h"802BE35C1D0356AA8D7E7830C1426AA9789CF9B1B75C7145") (:digest-bit-test 17 #x40 46 #h"78D1FE031819E727172B1FB5A0EC87AC33C494C1E37C222E") (:digest-bit-test 17 #x20 46 #h"E87A76683F7B6D8CA2B47C8C41F346764053D8841FBE610E") (:digest-bit-test 17 #x10 46 #h"E3E18819D97CD24E6C82AF5212876375134D9401E1CFB25B") (:digest-bit-test 17 #x08 46 #h"528D81D4D77B3C9360D1CCB3D8D906FAD4BAEEB8C417AF8E") (:digest-bit-test 17 #x04 46 #h"940509DDE91065297F51C95D6D61196BCADDFFBFE43A0490") (:digest-bit-test 17 #x02 46 #h"1F745AD4161EE006A4260D7249E0B68B0453B01819EB2A14") (:digest-bit-test 17 #x01 46 #h"B1AA443FAA0B47E51A307ECAC7FAF07CA8732E715513C738") (:digest-bit-test 18 #x80 45 #h"CB30A43A2DE29002ECE22BD0CA7FA5C40E0F1EE3C9784249") (:digest-bit-test 18 #x40 45 #h"A5B6D8400303E5118489CE082241808027945C143D1200AC") (:digest-bit-test 18 #x20 45 #h"FFB82281B7B2CDFF2E83440CFEC036D03C26BD5133AA56C8") (:digest-bit-test 18 #x10 45 #h"08F21816D77A3D5F7DFFFC5477C4EB78AF660D7C32B1B6F0") (:digest-bit-test 18 #x08 45 #h"286FC4EA0BA3EE25CA28CD635DA1077BA00B7BBE1D319C9C") (:digest-bit-test 18 #x04 45 #h"ABD221DECE666C1E0ADE89ED127001B1AE8B37A3249BC237") (:digest-bit-test 18 #x02 45 #h"EFD037EAD7168C5B48E18DBB0BFE94E7A7337ED9F9DC0B60") (:digest-bit-test 18 #x01 45 #h"17A915BB90D878000A07BBF2F7C29605541CCBB2BA33BA9B") (:digest-bit-test 19 #x80 44 #h"EDBA011909174DACC7276FB748DA3D72037688E09B471CDB") (:digest-bit-test 19 #x40 44 #h"18646AB2DFAC64E3D1B8298F9DA48F8ACD3EC8E9B6C091D2") (:digest-bit-test 19 #x20 44 #h"5BB55C940C48C5F173356ED2F76F135BB33C49C6FF401CE8") (:digest-bit-test 19 #x10 44 #h"444CCFDECBBCAAC55FD538C84FECE4AD05E1F86CA2183046") (:digest-bit-test 19 #x08 44 #h"0DD2986EBE58B62051C5F8558B33B2150E2162273A21D2D6") (:digest-bit-test 19 #x04 44 #h"BBD0BE785D950FEE7272A6A42E20EEF9FCC96DA0862A9D4F") (:digest-bit-test 19 #x02 44 #h"C6EE3736BED22F09A3082957D5D2D9939E926DE56B23E540") (:digest-bit-test 19 #x01 44 #h"F272AA5CC30126CA15ACF94904EA44A28068BD3B3ED74BDB") (:digest-bit-test 20 #x80 43 #h"24713F450026D6D9717475558F33A84CEC5B8EC74367A1F4") (:digest-bit-test 20 #x40 43 #h"021A9ECFC35A18BC91568F76A06EA7B6F068B1B45E725F2C") (:digest-bit-test 20 #x20 43 #h"54027E9B61191C3ADE350615D809EC6A4BF7FE926946F93B") (:digest-bit-test 20 #x10 43 #h"27C362B26734609E760ED30E492273A2EC0786CECE1B62F7") (:digest-bit-test 20 #x08 43 #h"C56A7C83A9F780DBFC564564D60B110894B3462BF202B31B") (:digest-bit-test 20 #x04 43 #h"E46DAE97BF1D1433B91E7C4B30A3D11189BD1959F363C8AA") (:digest-bit-test 20 #x02 43 #h"DFFFD3EE84CE33EDBD6CCBDF9FDBC4C6CD9F6C3663AB3124") (:digest-bit-test 20 #x01 43 #h"CA9D313C0A9D62198C2528B856627BC9C70DD1C6523AA09D") (:digest-bit-test 21 #x80 42 #h"DAB676CBA9ABC9799E4416E703CD4C89348F3513D93BCE58") (:digest-bit-test 21 #x40 42 #h"383C379EE484CB248AF0008F339F2B76C25DB122ABE46C2B") (:digest-bit-test 21 #x20 42 #h"466C5466009BFF5B4D9639CC2DDFFBEC31663189A11A3F06") (:digest-bit-test 21 #x10 42 #h"5C2457FB54624D291D0223FDCA7CE3EAFB85B6D492408A9D") (:digest-bit-test 21 #x08 42 #h"FE593DC31045C782EC6B52216FC64B35FD33EE3904BA9966") (:digest-bit-test 21 #x04 42 #h"D7174534437E6168C2EF60B0EA9DC61ADD8098C0694539EF") (:digest-bit-test 21 #x02 42 #h"75FDFFFAF4F1D44DD610CEDDB215E16593340EDE583C875A") (:digest-bit-test 21 #x01 42 #h"36EAA91B577FB20178B0F06FBF369D07FBCE8445BB36774D") (:digest-bit-test 22 #x80 41 #h"9068E188528160BC3B2C2036B4B6140BFCBC98A031847132") (:digest-bit-test 22 #x40 41 #h"42E86596DB6EA0724CE131CC379F5A3F37646C87026DFB87") (:digest-bit-test 22 #x20 41 #h"733642DD7D4F08A2303B7517974AC6D9E6EC65FBED56CB05") (:digest-bit-test 22 #x10 41 #h"92ABCE48F750C364C5FC649E3E2168E5BE83F6176A2DC552") (:digest-bit-test 22 #x08 41 #h"BB841126EBD38F36A63FDA47FD5971DFF6D9CF0432811535") (:digest-bit-test 22 #x04 41 #h"1A5F8B7F34376121B1BA35FB19DD2DE6A1FFE55D22703940") (:digest-bit-test 22 #x02 41 #h"A4705AA774708F6D6AEABD6B527C973DD3B955E144812BC5") (:digest-bit-test 22 #x01 41 #h"ADA04C7993477041403A144C15BBFEE889A6F835B9F968DF") (:digest-bit-test 23 #x80 40 #h"2F4179071804EC9280CD2EA6E265AD77633F5196CF8EDB32") (:digest-bit-test 23 #x40 40 #h"4378BD6082B465ADB4007CBDC5F764C402ADCBEE4347C08F") (:digest-bit-test 23 #x20 40 #h"F75B2A3267B96CA1EE4191B99CE78B079333F10EF184D91A") (:digest-bit-test 23 #x10 40 #h"C3891913D02202A3DFD2BFE70EDB992275744136452C566F") (:digest-bit-test 23 #x08 40 #h"07B465A5110B6F1D8CC50B4716A5B5CE9985CD0A7A857EAE") (:digest-bit-test 23 #x04 40 #h"AA3E818EDB7190F12AD58D9A4A9DAB53209AEE83F5B3C554") (:digest-bit-test 23 #x02 40 #h"C570CAD73E05B2F8283A26726F07BAA339EE78ED7CA42F62") (:digest-bit-test 23 #x01 40 #h"B48EC775851C9AE303F05AC8E51E62FF169C175792C2627A") (:digest-bit-test 24 #x80 39 #h"1E3047A18CCBA9F21D1E58F90FC2F8100D94227E29DF84A0") (:digest-bit-test 24 #x40 39 #h"5CA88D9C7D388BCF7877FE0F8CDD5EC767DEC73783B60195") (:digest-bit-test 24 #x20 39 #h"F0AFF7784660E13949EEBC8A817DB227D7DC2248EB0F659B") (:digest-bit-test 24 #x10 39 #h"9B5D9AB548CE2CB1B4F121B5BCACB724A02A655E56650014") (:digest-bit-test 24 #x08 39 #h"DA5D70AC87DB9AB9A19D7E79FA3820B9A6855F148A662E9E") (:digest-bit-test 24 #x04 39 #h"0DA0AA0A4187C2AC05B220AB88498FC244FCEF7FCC59692A") (:digest-bit-test 24 #x02 39 #h"DEFC6E4E0FF252A652CAD76C06429D7D902F80D0C132EC2C") (:digest-bit-test 24 #x01 39 #h"FB8EA1191F9272038017D3D10B0F901514490B119C3C086F") (:digest-bit-test 25 #x80 38 #h"A0F433C8EF9F86EC52989CC77B999EA02827EA0D57F00766") (:digest-bit-test 25 #x40 38 #h"73C51E27F033BDCF09E29C19740AC05676C7DA219C83F019") (:digest-bit-test 25 #x20 38 #h"C1A41E1999A6E7ED8D2407005608A44999C0918F009F12BB") (:digest-bit-test 25 #x10 38 #h"C1DE2FB59A6A6CC45D3E1A9A502F0327E4E0582692882E01") (:digest-bit-test 25 #x08 38 #h"FA371922F657875B03268090C91EF8A7D968486EFCBE853D") (:digest-bit-test 25 #x04 38 #h"D7786FFE8F9411E982D591C63A364483A733A005D8DD4F52") (:digest-bit-test 25 #x02 38 #h"EA71A84A2AE43700E2D6CBF9705809F38EB01E3AA3500981") (:digest-bit-test 25 #x01 38 #h"AEE84693BEA5105467DFFF30E694772F31148CCECA362D0B") (:digest-bit-test 26 #x80 37 #h"02C9565A480DFE315479D62BFFFF915768411199596D0067") (:digest-bit-test 26 #x40 37 #h"0EA5DA49521F8C298EB3A65B157D3B0E42E0BDA0EED10EB3") (:digest-bit-test 26 #x20 37 #h"A8F8E5533E0025DDF4421EA099D9C553736B86626649BFAC") (:digest-bit-test 26 #x10 37 #h"76D357BCB224F3B59DD6286A3EA0D4C2D09699E68ED7D4E3") (:digest-bit-test 26 #x08 37 #h"202794850A8B2A8D611473C84F18835F322D32E04214502F") (:digest-bit-test 26 #x04 37 #h"1BED2B5DAA818E27EACA9EA5BC6B5D88FF7605CBC529C423") (:digest-bit-test 26 #x02 37 #h"6FCEF79BBB8B556D597071E6E86815575C36955DB95FF0C9") (:digest-bit-test 26 #x01 37 #h"5C76AF9054B56A78EE4BAE2F69E54EB4A4DCCA9251EC323F") (:digest-bit-test 27 #x80 36 #h"8645904A860B9227CC2EBE31269BCB033D12626D4E7B1E07") (:digest-bit-test 27 #x40 36 #h"5CCAA2D96A4B90DD33CA1A8F63D9A32785FCE91FE9D261FE") (:digest-bit-test 27 #x20 36 #h"644AEF13CA34442715AF3B71F6F40863B9FE5B68D9AEA69D") (:digest-bit-test 27 #x10 36 #h"BB8F2FCECA6DBE2233D94CC9617C0C924251503E15ECBEFD") (:digest-bit-test 27 #x08 36 #h"C0CE5B9858DCAC7C2A7FD41EAD46C1D1F4A55C612EB87095") (:digest-bit-test 27 #x04 36 #h"C3209B535B1893D292F24AA705A54AC6893F5C34DFC0B89B") (:digest-bit-test 27 #x02 36 #h"4A9362D913330BE01F8AA9A40621CF2BAE0AEE998182BFD8") (:digest-bit-test 27 #x01 36 #h"6757B6725238FDF3AA6E92CE05242DC7A138F55A8A2B8CDF") (:digest-bit-test 28 #x80 35 #h"9C1EFCC39E943DB17478F55C2E8F5AABE665A257A74E7CC7") (:digest-bit-test 28 #x40 35 #h"9E48EA08AF2BC00367D950D2A0BE14D0F26B71FBF3997B10") (:digest-bit-test 28 #x20 35 #h"A6BBD6177AF40DDDCCF8CC8B8218833B8A89D6BE122E12AA") (:digest-bit-test 28 #x10 35 #h"F7BAE51827F6C16F31508A28D362DE9BA4984E47C88DC037") (:digest-bit-test 28 #x08 35 #h"65DD7FF5BB8CE8D5F84480BF5A0E35127CD736A1CDE7BC12") (:digest-bit-test 28 #x04 35 #h"E8531E2C7329ED60B7246E6246B1FEE13B1B70F1A119CE54") (:digest-bit-test 28 #x02 35 #h"7B26F57EF6D56F8966AFB3AF6C9BCE1C1948396CE4FFB1F2") (:digest-bit-test 28 #x01 35 #h"D6EFC3AD5E62E9055C414D01E11E0EC9374B5F4486AF92D9") (:digest-bit-test 29 #x80 34 #h"B4000A22B7ECE2B3BC2695A2E98A9F4FC981DE2F44A80CA3") (:digest-bit-test 29 #x40 34 #h"30F506642345E45D1116318D8F9849A640B13C27291F5B83") (:digest-bit-test 29 #x20 34 #h"E02C8DBAAA96F301081E0F6F6FF3163D11B0340C5154E06D") (:digest-bit-test 29 #x10 34 #h"4D176A285408CA3E69FAA2F90B980CD10BED31F3B7C31F15") (:digest-bit-test 29 #x08 34 #h"8BBECF1AAD25FDC805039E0B0AE53C72B2D598400FAD8A0F") (:digest-bit-test 29 #x04 34 #h"68213C2CB2C200AE8E130125F0DA1A81AF46DEA7A32564B0") (:digest-bit-test 29 #x02 34 #h"B65CAE529F4F5640EC8E61D7B18DCABF5C42D09D16638E02") (:digest-bit-test 29 #x01 34 #h"6D9BDF35483F61B8B41DF2BB3DAB479CE960916A91768BA9") (:digest-bit-test 30 #x80 33 #h"C7065FCFBD627402B557D08EE245E4B792079CBA32E7E956") (:digest-bit-test 30 #x40 33 #h"FA7CAC5FC22F2AF0FF1E052D28817A65966B2B0C1C2F8792") (:digest-bit-test 30 #x20 33 #h"204A233E044B2C07EBBD2C529A8D578A07B21BB674EE4D64") (:digest-bit-test 30 #x10 33 #h"5D64C8D0554606505D54BDF395D6608AE15D23144284C05F") (:digest-bit-test 30 #x08 33 #h"C90A9B1D92220CA0F3F4A8E65155FE0E1D152C89213E96D9") (:digest-bit-test 30 #x04 33 #h"3C8673A6ED62C5FFC880D24A000053ED7042329424181DFF") (:digest-bit-test 30 #x02 33 #h"732D68C9AAEF89D27676A87AEA0F975BC31E9B7184AABE49") (:digest-bit-test 30 #x01 33 #h"61D3540EF01107CBEDCA147F615B0DA929474344FA8DAB0D") (:digest-bit-test 31 #x80 32 #h"FBF56E336FF510ADA9A801F84E4792FD8E9B1C3B44B4D666") (:digest-bit-test 31 #x40 32 #h"FD5EB3F4BF2E475CA451C856B2F576FCE1CAC3B700348176") (:digest-bit-test 31 #x20 32 #h"E5D6F6AF3BB3D2D22975AB500DA24B5783E651C1AFADBCC1") (:digest-bit-test 31 #x10 32 #h"22C7EFD25977630807C1D0FD7DC220FF426D589BEBF3F818") (:digest-bit-test 31 #x08 32 #h"38C0B8ED87706F4A7C2DC5EADCD01C72193261CF37C196EF") (:digest-bit-test 31 #x04 32 #h"CAA17EB9893A85EBE650736A0B56FDCC9DDF6916707D1B99") (:digest-bit-test 31 #x02 32 #h"1FC43409C387A59F2702D1120CA69AE1EB8BCC072AEBCC89") (:digest-bit-test 31 #x01 32 #h"9D5CAD387705F97F784279C85B5C09D3A8216C3151BB8BB5") (:digest-bit-test 32 #x80 31 #h"DC1EBB94F3E0E6703DAA5715A7E826554DB9EDE756B2EED2") (:digest-bit-test 32 #x40 31 #h"5E626E0FBB4CAE926AC717EC009CAEE23B5CD3062359E20A") (:digest-bit-test 32 #x20 31 #h"F348BF048DB8D98D0BD0666B520AB255B12CA6047B3166AF") (:digest-bit-test 32 #x10 31 #h"8F929C79DDE5DE2794998170EFCABCE511637A29810ABF47") (:digest-bit-test 32 #x08 31 #h"FE4661EE9DD9FD928D2AF9B5898EAEAB617E88369457DD67") (:digest-bit-test 32 #x04 31 #h"6E0C9BCE677EA50439E02731B301300511643AC1FE00125D") (:digest-bit-test 32 #x02 31 #h"4589434D3BE9D44EF45DF1ED91AA97D812ED55DD869B9067") (:digest-bit-test 32 #x01 31 #h"0C0DC9DAAD3351B7CE17F8D1F6DBDA62F91FCF6C93019C45") (:digest-bit-test 33 #x80 30 #h"07FD597941C0A30A137256D65E5D2430EBA2C6EF24979E00") (:digest-bit-test 33 #x40 30 #h"EEFC74ECC53C334768D59EEB02B49A462A976CAD32FA9F4C") (:digest-bit-test 33 #x20 30 #h"292EE351E25622EF85A07C0C161FC0FBC09229C176998D35") (:digest-bit-test 33 #x10 30 #h"7ED81D7B5AD71E60F04E388D2E29E044EE253D701D213ED1") (:digest-bit-test 33 #x08 30 #h"56A2F7E6F85975BFCE0705A124AE4CBF7C3015690304521D") (:digest-bit-test 33 #x04 30 #h"B07EA50183596A2430F3DEC13F96845D1070A3D32F5EC066") (:digest-bit-test 33 #x02 30 #h"526F6BBF1EBE525ECF7EFBE693A06B746307726F2011529C") (:digest-bit-test 33 #x01 30 #h"89EBE9219A9AC412BEC88BA321030B4AAA257B6410F7719B") (:digest-bit-test 34 #x80 29 #h"ABD5FE2E6DA870D5B894B35E72E41D590A01E40303524335") (:digest-bit-test 34 #x40 29 #h"1E3D537D9580A74F2D7FC71EE241923AB3848D11A1A5644C") (:digest-bit-test 34 #x20 29 #h"F580664AB99A6B50BFA21019261D91B3A1238FB129B0797A") (:digest-bit-test 34 #x10 29 #h"2DB79D2513802F939D4608E4FFE38D1CD5FFE7B667CE3EEC") (:digest-bit-test 34 #x08 29 #h"13B1F534DACAC2836C67B4B410151AE550AFF9C977B6A3D5") (:digest-bit-test 34 #x04 29 #h"86ABFE6988DFE9D6C9A884942946BE74115987EA3C6AF477") (:digest-bit-test 34 #x02 29 #h"9FB58A6C6822D1F7BF3AC52BD210132FD6DD1E823D3CE95C") (:digest-bit-test 34 #x01 29 #h"1F5E0C29EBE8A28B934E7932C0D120F2F01CFA87DC089E0C") (:digest-bit-test 35 #x80 28 #h"BEA84869592DF1FD12127F891CA9DAFEE767226868F878DB") (:digest-bit-test 35 #x40 28 #h"6FC0DF95D191F492399AFC32C4F536F43C14E189DA93396C") (:digest-bit-test 35 #x20 28 #h"33E9415EA0EDB2BAC1DD210B9CC2F5D7F46B5B07C5EFCC3F") (:digest-bit-test 35 #x10 28 #h"CD933BE80058AFBBC9FFD6590CA2F53B3696E7F86CBDE8CD") (:digest-bit-test 35 #x08 28 #h"15F89B44FF00A4CB930233FADB49A824F0AB540636A0E8A5") (:digest-bit-test 35 #x04 28 #h"33C345BFFA20C8F0B92AC6F3F063E477F1CDA525C35E68AB") (:digest-bit-test 35 #x02 28 #h"617EE74C600A5B9D5C591984222DC000642FA97ECAF6948F") (:digest-bit-test 35 #x01 28 #h"E50FF576A78A5FF73038F307740FFB190F405AAF65909C7B") (:digest-bit-test 36 #x80 27 #h"10F16B3B9BE9762F603DC156A2626D0A92C49D6788433292") (:digest-bit-test 36 #x40 27 #h"65C75607C3085EE0DF99AC88FCB71FEEA3E95D1995027B90") (:digest-bit-test 36 #x20 27 #h"A95A236CEAA6FE6A33DBD6B2FF2CC61DCD06B576D34D8BF9") (:digest-bit-test 36 #x10 27 #h"94701D90637F543B83AC736D448D915AB56ACF688AA2A9BF") (:digest-bit-test 36 #x08 27 #h"C005D8C2069CB7F291C7214165383ECC418999FADF197ED3") (:digest-bit-test 36 #x04 27 #h"F02715BA20879FE16CA382F3F33B35DA09273F524A832CE0") (:digest-bit-test 36 #x02 27 #h"925F4C6B45F07D01F1033AE426E554FE30AD5664F89EB521") (:digest-bit-test 36 #x01 27 #h"DA89E876647B2B17B726DABF0620B5791B8D910CB9E7323D") (:digest-bit-test 37 #x80 26 #h"A3817AEC34558CE5C4554B4BB652D52E0FB834D66173B40A") (:digest-bit-test 37 #x40 26 #h"EC4599DB388F66C10AF7C24987AAAB6D02CF431602C321D3") (:digest-bit-test 37 #x20 26 #h"D7BBCCC448440CD6BFF93D8CA1DC309BE47E51C823B85EBB") (:digest-bit-test 37 #x10 26 #h"2CAB4F11BE0BB64B4F16F707DF30F465A279C6972FBCD7D9") (:digest-bit-test 37 #x08 26 #h"12E4D1EF75CBCA5369EB440776F117EDA8B536A35C26F139") (:digest-bit-test 37 #x04 26 #h"17444B27596CBC519FBC8F2B90D68D05BCF51608ACC3D304") (:digest-bit-test 37 #x02 26 #h"D76A8B2E986EB16CD6121CED58295F0CF5EB02DEB60F98CC") (:digest-bit-test 37 #x01 26 #h"164E3829B70E59570D2A5B24A0F1C67A974DFFF1EF5BF2EA") (:digest-bit-test 38 #x80 25 #h"0EE8B5DD7E5A285EBE11965B574517B949C3487937453B2B") (:digest-bit-test 38 #x40 25 #h"E3639D864D20ECB48D8C2B8F892D97A7FECF83937C48C2DC") (:digest-bit-test 38 #x20 25 #h"4434C996B25FE43CA24746396E50C157139C57787675CE17") (:digest-bit-test 38 #x10 25 #h"6D1693269BBA7630B6C083EA6D8AA16F0512F07C214251A9") (:digest-bit-test 38 #x08 25 #h"A1D5C7ABDDF9FA51FB5C9AE0008FA953EA83063C93E49319") (:digest-bit-test 38 #x04 25 #h"9BAC4A7FFF14B34F32F10EB2B6A3A61A13C255DB176D6FCB") (:digest-bit-test 38 #x02 25 #h"C6BD779EE2F9FF6A4ACCDA2E33FD0C62D641733E414D5B36") (:digest-bit-test 38 #x01 25 #h"F0D656506DE265EC28F1781DACB76D1C7575DC55C15A40DC") (:digest-bit-test 39 #x80 24 #h"0E95FD14633037441CD9AFE78391FFE73AAFEFE532B8F7D6") (:digest-bit-test 39 #x40 24 #h"AFA01B52D549FF4C8B6DC71BBA6CFA27E8EA03046B95F6EF") (:digest-bit-test 39 #x20 24 #h"9E63417D3DF651A3353FB6573FFAED9DF4ABD7F68AAAA051") (:digest-bit-test 39 #x10 24 #h"CE51254F812107B91727838B619D5C4F17FC2C3C9A95233A") (:digest-bit-test 39 #x08 24 #h"89F63C422BB85635F432D4A6DC9F940D79E0B5E111A24F4E") (:digest-bit-test 39 #x04 24 #h"999534C4B3B25F32FFF05B893F4E26CF8F1819FCB5B908C1") (:digest-bit-test 39 #x02 24 #h"7FAACB92FEFD12045C77B4180EA95EE7E1775703E7BB4C3E") (:digest-bit-test 39 #x01 24 #h"2BFEAD2B7E1C6BB0F47AEFB9909E3ED961EFB39A29794515") (:digest-bit-test 40 #x80 23 #h"A52AE6D0221773E42FB042B7830D28A73A590562C38C802B") (:digest-bit-test 40 #x40 23 #h"5B3007DFB62B78955620A0F17F58B6FE55B360C0F7A9F4C3") (:digest-bit-test 40 #x20 23 #h"77883951F130BA75FED13621DC61BB766E475DB7751B0D3B") (:digest-bit-test 40 #x10 23 #h"297DEB90367720058318C994C0382B83D182110797A29A53") (:digest-bit-test 40 #x08 23 #h"0BA968080D4608C3BFBE43682CBBD63F246F866AB0A0070C") (:digest-bit-test 40 #x04 23 #h"328F20CDFFD905862A11F70B6FDB4803133CCE8ABB8D2B73") (:digest-bit-test 40 #x02 23 #h"74AC023139CF3557F49E2F8A674AD0857AEEB9EBA3C1985C") (:digest-bit-test 40 #x01 23 #h"BD588F19DC358DC37450A6689E4D7DA413206159F3DD2A4D") (:digest-bit-test 41 #x80 22 #h"DB626F5040AF44803156FF86860A1367B1B644B021C15460") (:digest-bit-test 41 #x40 22 #h"ADE8785F2F65B67ED1740F8693C5A1CB3BFEE9E3B211B83D") (:digest-bit-test 41 #x20 22 #h"D08599E7444393A3C5FF2493E1B6647B297708919163E05B") (:digest-bit-test 41 #x10 22 #h"8AA57D3CCCB899CC92A44ACE801F54A13E60A45BFDFE7D30") (:digest-bit-test 41 #x08 22 #h"3415A0699A0D14DBBBB2280A9C8E3C91B954B769CE606362") (:digest-bit-test 41 #x04 22 #h"EAD03B5ACC5C86FC8672AE14330BF93A9489A5017D3B9354") (:digest-bit-test 41 #x02 22 #h"7ABE3B7FD5804A23B937C0EF5ADD8869188BF842F68D21F5") (:digest-bit-test 41 #x01 22 #h"739004F8FC7577D0BA954187F300E441F4A99F62E0F3C367") (:digest-bit-test 42 #x80 21 #h"30D99CB386570F45B8F0EB75868E8EA9EC7DBB04C26D8FEA") (:digest-bit-test 42 #x40 21 #h"7278F6E780965FB5C02AC4AC24BD2020D2439623EEB901C8") (:digest-bit-test 42 #x20 21 #h"93E7E84B803152CE17491B9B9DC6502041DA4D56C636B4A7") (:digest-bit-test 42 #x10 21 #h"32D63F3C642173BDE55C2A7E8BB6C942420C309DB2E7210A") (:digest-bit-test 42 #x08 21 #h"CECC92727AAEE2FA74B90AA728F0D3F0FC5E8A42DF283713") (:digest-bit-test 42 #x04 21 #h"51437CED5761BC3FCF29FDE5877675B5DCCABC85BC2279B8") (:digest-bit-test 42 #x02 21 #h"F6A494D7241543CBFE2BB3C68F2DA9FD9915BF0A14BF82F4") (:digest-bit-test 42 #x01 21 #h"DD8BE4ED5FFCF836C977352ECD2CF689BD94F9CF0EB66EB4") (:digest-bit-test 43 #x80 20 #h"1EF1B22652B07E0039DC257B30E88A2FA5D3FC64C79C741C") (:digest-bit-test 43 #x40 20 #h"775E4B0447AFD1C960320C042EF2AB6C879088956435872E") (:digest-bit-test 43 #x20 20 #h"A40FB52C188AAC639CF9ECE72B978C812CA7991997CCC3D0") (:digest-bit-test 43 #x10 20 #h"F6F305D3ACA46CEFDA5FCF420B49C9C13F14C3247E4214AB") (:digest-bit-test 43 #x08 20 #h"2A5611447591A609BEDB9B99AF030D1548C25C1090FB7252") (:digest-bit-test 43 #x04 20 #h"6BB8BF7CF510DF644EA1771146EC6E943E26598734BB2022") (:digest-bit-test 43 #x02 20 #h"8508F80824415D97E468B19EA305B0473A915B996DC83A31") (:digest-bit-test 43 #x01 20 #h"8814EE7A02164290EB431E70D50490DC2313BD30EB479857") (:digest-bit-test 44 #x80 19 #h"EFD4A311C5F5093AB23F2C775577EEEE230643A75F7938C6") (:digest-bit-test 44 #x40 19 #h"6FA980DE170E4708F4F59BA46DE0EA340BC61C540B0D12BD") (:digest-bit-test 44 #x20 19 #h"C699821C7E342804278CA77879FFB9332F274530C673385F") (:digest-bit-test 44 #x10 19 #h"FCFA7BA4FE1736CA672914AC98905FCF235CB82F10BE9981") (:digest-bit-test 44 #x08 19 #h"BB1DC4CAA892B46D15C44125DEDF64C63EC4DE5B807F93DF") (:digest-bit-test 44 #x04 19 #h"520F25FEEC8D698D31C164D291A54B906564A75B7B693239") (:digest-bit-test 44 #x02 19 #h"772CB58B4086454862B813AB25EA5E33BE530D3DF48F8BD5") (:digest-bit-test 44 #x01 19 #h"CBDBBF709ADE1701ABDA7A258528D675B505678E6B643FDD") (:digest-bit-test 45 #x80 18 #h"A16CEC411677F88C1F751442BCDBC9F013AA1F4E829CFCA8") (:digest-bit-test 45 #x40 18 #h"9DA04A1EF52DDF86660B9EA7D8AF385BBE6369B10AF2F3B3") (:digest-bit-test 45 #x20 18 #h"049F7036F40FB51260E4B8CB0696EA03D375B401CED3E2C7") (:digest-bit-test 45 #x10 18 #h"EEB8208784C4C65DA497729C948063BD9F51FE5C026CBC8B") (:digest-bit-test 45 #x08 18 #h"F39BA71DFAD235C2E0CC8BBAE4CD8D5D1EEE9247086ECAEE") (:digest-bit-test 45 #x04 18 #h"8372D7953F7697BE48661E3718196082B06EB448EDF3D839") (:digest-bit-test 45 #x02 18 #h"D41785ADE9E2FFCAA5B9D44613CD23CD9C3A519CD9C89BED") (:digest-bit-test 45 #x01 18 #h"620D6396A467CB957740B85D5D51E53279DF78D56D6CE8B6") (:digest-bit-test 46 #x80 17 #h"89905029EF0112631ED9DFDEB63BA26235B822022B686D59") (:digest-bit-test 46 #x40 17 #h"51AD7F7D9611ED7C24A84525832A2F8CFAB80F907C02533E") (:digest-bit-test 46 #x20 17 #h"C645E4CF66DA4B343FC0E9221B4616E8CAE1E65E50195E64") (:digest-bit-test 46 #x10 17 #h"38EB1AAA6CEBBE8A21EBBB9C0976D29F4089EE47ED1D1F4E") (:digest-bit-test 46 #x08 17 #h"EDF66F50CD0F54FB3094E3412E28177A53B1CE56D0FDE4E8") (:digest-bit-test 46 #x04 17 #h"11CD219A1E03532D2D4D61F1563C2AAA8A1586736FEB5CA0") (:digest-bit-test 46 #x02 17 #h"01D50B226A3517A3DCE79495FE1410E7AB6FEEAF8FA24BB7") (:digest-bit-test 46 #x01 17 #h"F981D517F259B363A945D2D19447378649E597A37641B911") (:digest-bit-test 47 #x80 16 #h"B36A8BB7E4018ADB5DC72B4961501F9A5AD5931F5E97A6D6") (:digest-bit-test 47 #x40 16 #h"D78D1E9D4682A0777A6EC0D8C2F165CAB925966650937F89") (:digest-bit-test 47 #x20 16 #h"2F6D9783D5BF5976DCC31C7F00B9FCD04B6C16BE92417C9B") (:digest-bit-test 47 #x10 16 #h"22B9F7C41FCE5A4638D6E6C61265B58D18C2D5FBBE33E9F4") (:digest-bit-test 47 #x08 16 #h"37B7BA6658F835D817CB114D06C197D23C47708352EAC551") (:digest-bit-test 47 #x04 16 #h"D8E97C4A5F14A1F595C041D0ED59C4D4631E7AB673484824") (:digest-bit-test 47 #x02 16 #h"AC782146178A613B3FEA97DBF2018A6C7E1EE3789BBE2A51") (:digest-bit-test 47 #x01 16 #h"11FD098F69CA3BE809474769C7DC6664A37AA26358A1EF08") (:digest-bit-test 48 #x80 15 #h"93856CBBE6404B2EF9D4240556810833C73D6D049FCA47BB") (:digest-bit-test 48 #x40 15 #h"C8466665EA45CE4CFD88F819D5C639777640B84D3D60C4BF") (:digest-bit-test 48 #x20 15 #h"9B4834F18ED69D519D497AD84204BCB9D749F122A86206F1") (:digest-bit-test 48 #x10 15 #h"7571A4B267EB04E445803700DB6A72242E1DE16B1677C410") (:digest-bit-test 48 #x08 15 #h"2A6518AF7D1C26F81852CABD90366371783BE49E94BEA42F") (:digest-bit-test 48 #x04 15 #h"AEBDEE389CEE275743FD1DFE10716DA734049874700D55C1") (:digest-bit-test 48 #x02 15 #h"8EF1808D19882CCB413F4B432918984BFE61D3419999642E") (:digest-bit-test 48 #x01 15 #h"26B8CC222AA5C53969D3DB6DA64743B71063AE978E1F5899") (:digest-bit-test 49 #x80 14 #h"2B8FA32B543ED0E1A8EED1165806602675D21D4A330AACD5") (:digest-bit-test 49 #x40 14 #h"7BBD8EB068F2EFB116AC6EF6FE80BFB0E8023702D17EFA6E") (:digest-bit-test 49 #x20 14 #h"344265DD1FEEE145A37F268EF0877581998CF323CFECECCA") (:digest-bit-test 49 #x10 14 #h"9B606437205BD1DB249D3566D7AEE9D289C9CFD0D57FD058") (:digest-bit-test 49 #x08 14 #h"C28D239C59BD76719345840E7C491748FAE7FCBC5EEA6C51") (:digest-bit-test 49 #x04 14 #h"BD1EFD0CFD6283ACD2A95B1DAE33ACC47A14D21AE3A74DF1") (:digest-bit-test 49 #x02 14 #h"B0EEE8E5A9256A73A98B641F3D29092D2F1F1B75509F5455") (:digest-bit-test 49 #x01 14 #h"C46B3EB0F3B3C6D61CF0E5A263D4499A91D68055B1EB4996") (:digest-bit-test 50 #x80 13 #h"C14215E03D57E2D109D88F48500F0D2332A819F1716D8885") (:digest-bit-test 50 #x40 13 #h"DD38ABA719EEB2B7B78DD4455AB2DF07A5DA8608BC8250EC") (:digest-bit-test 50 #x20 13 #h"1175351A36F8F2769BA8A206185C10B241189FA4D6220C83") (:digest-bit-test 50 #x10 13 #h"208DC327BC1BE3B55EFDEFEF89776DA5EA979CA479CC970C") (:digest-bit-test 50 #x08 13 #h"AD80043313C929A421495430561C49F0613C195D3578B518") (:digest-bit-test 50 #x04 13 #h"8384691A0DCADD919AB610D69A4C478A582525D5C48B7F17") (:digest-bit-test 50 #x02 13 #h"2FF93D872E9E6AE1783C0EF5B1AB9510050F0276563BA02F") (:digest-bit-test 50 #x01 13 #h"D3C7B2D23986E191D95B19810843B63360578024F3272DA9") (:digest-bit-test 51 #x80 12 #h"29F56FA57392FF312289DF4A88C718FA56D2C3357FE6D0D8") (:digest-bit-test 51 #x40 12 #h"175884C528D5584EF0E0AAB61660EB9684242F00F6911A24") (:digest-bit-test 51 #x20 12 #h"F5D5EE0BFBF2186BD6CE3C63A9E19852EFF62D39E8215068") (:digest-bit-test 51 #x10 12 #h"6712197F2D9E424139C93292E9B684A11579BAD5546A9F99") (:digest-bit-test 51 #x08 12 #h"EDAFE550B5634A040E23A008DD3B15C476907B3CD596725B") (:digest-bit-test 51 #x04 12 #h"230EC8B2DDCE48BB1ED8928509CE6659981DB303813C7031") (:digest-bit-test 51 #x02 12 #h"02371A2CA23F8781DCCBA0672C979EBF0EA8F17F4CAAB443") (:digest-bit-test 51 #x01 12 #h"E0EFB4CE4025CD25C760F9E822F954D6B38319E71ABED25E") (:digest-bit-test 52 #x80 11 #h"2030785CC6D18999182F7B6A9BCA9F72F86829F89B306C37") (:digest-bit-test 52 #x40 11 #h"3490EBCD433D9FDA74EAAD97469345846E190540C6D82642") (:digest-bit-test 52 #x20 11 #h"A9C3E5AB60F1666619A899B8F3AC2370A5BF2298B99BADBB") (:digest-bit-test 52 #x10 11 #h"804320365682196340806665DC55299041D3BD85728BA0F2") (:digest-bit-test 52 #x08 11 #h"53A2DF8B0C83C7120BE2A9608F1B5A4528BEFEC9D7970487") (:digest-bit-test 52 #x04 11 #h"2BCD607D529B39E1429F0C54B94ED78F826389086C7739C8") (:digest-bit-test 52 #x02 11 #h"0C466A6ACFA584D239367547536323A32715D0DBB5867B0E") (:digest-bit-test 52 #x01 11 #h"2FC3EA605A33AC26E78D8CA19F98CE7B5827E62961D89212") (:digest-bit-test 53 #x80 10 #h"8761107DC3785DBF710BBBEDE5FEABAB6F175A5ECFA961B3") (:digest-bit-test 53 #x40 10 #h"F123F30881EC794674403328E3CE7C80BC95DAC12D7B360B") (:digest-bit-test 53 #x20 10 #h"341C9DADB601F2781F6ABEB933B73AAD103A81E8D96F6730") (:digest-bit-test 53 #x10 10 #h"38E53597534CCF0E60DA817C62924453E193D61861043244") (:digest-bit-test 53 #x08 10 #h"3DF84CC5EDC3D732948BE841302B9AB708F5AF33DC537A31") (:digest-bit-test 53 #x04 10 #h"B546891818224B14E90827757DE18BABD71449E57F8FCFF1") (:digest-bit-test 53 #x02 10 #h"A7D6E7A48C1C14CD8DC58D7EFCD4FC8D407F15A1D4AA41D5") (:digest-bit-test 53 #x01 10 #h"0B178B35A97C06D9D4D2A5838AA867BFDBDB36D674AF33D0") (:digest-bit-test 54 #x80 9 #h"8C22DFD72E5ECBA3D0E0B54985D01223032939E7B7B33697") (:digest-bit-test 54 #x40 9 #h"A52E67BE70E116BDF6EB61EF225DB94DF06966203DFA2E31") (:digest-bit-test 54 #x20 9 #h"4AB1B7BAD46AF64C8B6203A8889CF56A079F18F688790896") (:digest-bit-test 54 #x10 9 #h"65D1A4BF8DBA94C9752913A4C15FCFB7F18CCF257D48DED6") (:digest-bit-test 54 #x08 9 #h"090CFB92322D482D9D8AAFF716F10FDB491BE0FAF50C784F") (:digest-bit-test 54 #x04 9 #h"94F1F66FB01D719F04D36CA30287F7E534DC31B0D91CE1FE") (:digest-bit-test 54 #x02 9 #h"D8689D811424A59B870F84D11BFA1D202BF57896154405B6") (:digest-bit-test 54 #x01 9 #h"D7F2171F5B7523C54B4D1A81BB6048C99CED1E15087A9C49") (:digest-bit-test 55 #x80 8 #h"94DC8F6AAAD2A07CA81191B613291EB06EEC66A1B628F9CC") (:digest-bit-test 55 #x40 8 #h"534D75114EB28DFE082BBA4285ED30E55CBE4864278FF182") (:digest-bit-test 55 #x20 8 #h"F5971C8523421B68BC3D9FCA5ADC5D2C76CD0C3797232950") (:digest-bit-test 55 #x10 8 #h"D274B834360952A27265C12C2B70623CDCB69C4815B8AD9E") (:digest-bit-test 55 #x08 8 #h"D25074898E465F024B7D5AA542575176B885998694BFF162") (:digest-bit-test 55 #x04 8 #h"100B09B1A2778E07F0DEE2E6DFB28D032FA35D7EBAB2E87A") (:digest-bit-test 55 #x02 8 #h"96FE586BD7D472FFA884C5724561D517C1126957FB190096") (:digest-bit-test 55 #x01 8 #h"45EE36AF320341688173D7C41A7615BCCD0A431F834EFD18") (:digest-bit-test 56 #x80 7 #h"F73847AEB45D714CC5756DBDEE00A9E580EF91101AC8FE64") (:digest-bit-test 56 #x40 7 #h"30A56E8B8CDAD753A854A1BE4B61DB04F303B6CFD0D76522") (:digest-bit-test 56 #x20 7 #h"1BADACF65A1F790B448DF08A100E66CDB8B404DDC7865016") (:digest-bit-test 56 #x10 7 #h"D0DA13AA2AFC006A97C537541B505B96CE798BDDC07B9D6D") (:digest-bit-test 56 #x08 7 #h"FB4170AA2DBAA3844FD8485D4325BE987E2E589B58AB3B80") (:digest-bit-test 56 #x04 7 #h"50A0FE8090A0AA2EA503CD40DBE894004852584FDE11E3E2") (:digest-bit-test 56 #x02 7 #h"F6311445087C56C3CA179EF211FD32762134EDC910D9270B") (:digest-bit-test 56 #x01 7 #h"A292F008A7BDF88E61FF866269A6D6F6AC9A81F706D57C27") (:digest-bit-test 57 #x80 6 #h"700C29CF917F3634215C58B9B3B9C147FC0AEA52C05B2841") (:digest-bit-test 57 #x40 6 #h"2071C5313B0EA39ECC258AC29ED6E6CA8E0511C726A528A9") (:digest-bit-test 57 #x20 6 #h"AC6F08712123FF72E9C04D1C5C343BC2A356DBEE9223B8E8") (:digest-bit-test 57 #x10 6 #h"01F46A7935579B7A7F5CDD00B5E7F1D62C37726F4216DC1D") (:digest-bit-test 57 #x08 6 #h"820320BBB243E30FE35395FBFAF46A5C8C0CA41E4B48A80B") (:digest-bit-test 57 #x04 6 #h"4B3365B4AF9E0C1AB703F297ECB82F9DB6ED44819DBC72F8") (:digest-bit-test 57 #x02 6 #h"DF69D9A819C4E27ED1B7D66678FDEBD8BBD1747F892D2B55") (:digest-bit-test 57 #x01 6 #h"C0F17FAF958767C65EBA2F68EE245205CB1BB73290AACAB6") (:digest-bit-test 58 #x80 5 #h"D62C3EBC661115CDE4F4BD646D745ADB7225304D2712837D") (:digest-bit-test 58 #x40 5 #h"37E9A837E07B12281F4740D8353DD6008A077F6EF51978B9") (:digest-bit-test 58 #x20 5 #h"9826470A5ABEE6EE66BB799C9A9206703174AB77AA6223A4") (:digest-bit-test 58 #x10 5 #h"506C60EAC24C18D955364759BD8CD522157AD658C7B1652E") (:digest-bit-test 58 #x08 5 #h"110923F8A4E154057211F273FDAF0F565AAD0A0962C4E08D") (:digest-bit-test 58 #x04 5 #h"30CE0B97A6578CE2398BF04E63F78B2CAB5DC97A140426CE") (:digest-bit-test 58 #x02 5 #h"3AE75A6039177B44B18B2C02EE148388F93E6EB96A989D3D") (:digest-bit-test 58 #x01 5 #h"0DE8D7C180C5FB4E90ECF4165EECEDE97316170B7B00D681") (:digest-bit-test 59 #x80 4 #h"A1BA31195FF34A411C5D9A72A84C83C7BD7C6C777FC7DA4A") (:digest-bit-test 59 #x40 4 #h"1D7295FE7B297D4B752159B7DD71483D53C7799FF82054E4") (:digest-bit-test 59 #x20 4 #h"F0210F4416BE56B157EDC9A76684D1F1653EFA6B7D06079B") (:digest-bit-test 59 #x10 4 #h"311229D7C5AADF9CAA0DF39E441D4E119D0B3887194B9751") (:digest-bit-test 59 #x08 4 #h"7E5E875547284EE4952C250DA3BB4E3BBE59086FA638CAAE") (:digest-bit-test 59 #x04 4 #h"890371D12AF03062698C2F4F5F2D7272DF652EE99C4233B3") (:digest-bit-test 59 #x02 4 #h"BD3F48F09AB50132242F762A61904E945CD3628A925A8B82") (:digest-bit-test 59 #x01 4 #h"6401C4DDCDD7441581AFF57D13C1198FC2347D886D319FDA") (:digest-bit-test 60 #x80 3 #h"2446A367AABBDEBA9EFD1F8CAA9805EC1A9B45200A90E2C1") (:digest-bit-test 60 #x40 3 #h"37C1C64324D78E1F7549E6169FA66D492184F3A5A524810F") (:digest-bit-test 60 #x20 3 #h"91A620E120AB9C4949C6D3E27A856F079F76DA00D56C3A22") (:digest-bit-test 60 #x10 3 #h"575C19C550408D8454650AF1739812870E371BA8F34B6861") (:digest-bit-test 60 #x08 3 #h"5AB6FF5B263ACFAB2013C3068C03A82979EA6DB287A3ECDD") (:digest-bit-test 60 #x04 3 #h"BB40E88E5DA7D4B12356124D9ED74BA5283C502FC68B5A1B") (:digest-bit-test 60 #x02 3 #h"CFEC678B1CD75F4249D536C9399F11C12CE9938EE8CADCFF") (:digest-bit-test 60 #x01 3 #h"8A26E3715E0471DD3616A9E505F4C73722BB42FB233BF641") (:digest-bit-test 61 #x80 2 #h"ED38E1AA4B73AF6024471252F8102E77ECBF4BC315DB1C31") (:digest-bit-test 61 #x40 2 #h"4D5E37A37AFC8C7DBBC25AF2C6670ED2DAFB56B5376E2550") (:digest-bit-test 61 #x20 2 #h"958603BDA98C29A87AEDB0C1C8F559D161EA4FCBE9EED392") (:digest-bit-test 61 #x10 2 #h"A7F58251627E2C4C82ED1AFADB2FFF3B3483CDC279117E1E") (:digest-bit-test 61 #x08 2 #h"4B003F86DA13C24E10041F934DC02EAA9E86C4200550DE8F") (:digest-bit-test 61 #x04 2 #h"6139AB107BCD192E8419E869F77738D2624BA81FD774828F") (:digest-bit-test 61 #x02 2 #h"15E286064681AB50343CDFD1E178F6DAD9071E3727997DA1") (:digest-bit-test 61 #x01 2 #h"95A26E99BFFBB5D0027B380688D3E5C567454F4F2F283C41") (:digest-bit-test 62 #x80 1 #h"45326511C3070AD878172A7DA38D17ED65D17BFFB0298058") (:digest-bit-test 62 #x40 1 #h"C127E412181EF4734360466A38245409E44B2B208FFF4D67") (:digest-bit-test 62 #x20 1 #h"4C9A55B7BC50B8D7343F1FF351F13A89CA53E8AD2F056559") (:digest-bit-test 62 #x10 1 #h"9B93DF18074112C26FBEB1EA277070EF4D5A1778376DC12C") (:digest-bit-test 62 #x08 1 #h"79CE5EFD59A9A0ADBC3661F278B3C540A0332A9E8FA30E07") (:digest-bit-test 62 #x04 1 #h"886F0AD49176EAF30EA422CDA7D1061AF2D62DA67C672407") (:digest-bit-test 62 #x02 1 #h"54C7674DC49D49E63DD7296241C3F2F0B022BCC0451400F0") (:digest-bit-test 62 #x01 1 #h"9DFC07C61179B9DEEA1D452D3073C2A12CB0342EC8FA25C1") (:digest-bit-test 63 #x80 0 #h"E9C6E911956A0D7C3958F4E0252A4DF98FAE33AFC834EA10") (:digest-bit-test 63 #x40 0 #h"9DB1556485B4C5C67FC532C4C6937AFA3A889FDB09B055A7") (:digest-bit-test 63 #x20 0 #h"5875A1A391DEDD84155F3805A81EF68AD288A9E77DEB4324") (:digest-bit-test 63 #x10 0 #h"5DA3FCD577895036D0AB8D6BC654C59E76C0312C81F3A374") (:digest-bit-test 63 #x08 0 #h"3DB3B9731E66FEF6039A2723C7CD7814F2A5F8ED20807361") (:digest-bit-test 63 #x04 0 #h"C784C70B8F431D8AEA3F5ADF2BA55AB4BEC9C580558CD0BD") (:digest-bit-test 63 #x02 0 #h"B256AA37A7DA84F3599B338E2B853B92ECBA5FDE6901B620") (:digest-bit-test 63 #x01 0 #h"1CDEC1D10BD749090B1F491A4FC8E2F8B150D64F3215CE8F") ironclad-0.57/testing/test-vectors/tree-hash.testvec000066400000000000000000000023131420372057600226430ustar00rootroot00000000000000;;; standard tests ;; See corresponding tests in binascii/tests/base32.testvec (:digest-test #a"" #h"5D9ED00A030E638BDB753A6A24FB900E5A63B8E73E6C25B6") (:digest-bit-test 0 0 0 #h"AABBCCA084ACECD0511D1F6232A17BFAEFA441B2982E5548") (:digest-test #.(make-array '(1024) :element-type '(unsigned-byte 8) :initial-element 65) #h"5FBD0E62AD016D596B77D1D28883B94FED78ECBAF4640914") (:digest-test #.(make-array '(1025) :element-type '(unsigned-byte 8) :initial-element 65) #h"7E591C1CD8F2E6121FDBCD8071BA279626B771642D10A3DB") (:digest-test #a"abc" #h"0487CA26443F59CFBC780F3CA0CE509C8C352C27C5DCCA20") (:digest-test #a"message digest" #h"C339BD324EBF6085A0FA5F26D77B44DBB7DB60D690649704") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"5B0ED06AB8773DD7EA2371A71D097EBA8F96A357E0854C77") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" #h"A9E27D4684D9E49D49A09A7803DA15B258E5DDE0923870E9") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"997FC234BF6175678C9BEB35B6C655525115622C9AEC03DA") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"685420361A70DB395782FE1252ED31057EB54CA879E0D0A7") ironclad-0.57/testing/test-vectors/twofish.testvec000066400000000000000000000555051420372057600224610ustar00rootroot00000000000000;;;; twofish-test-vectors.lisp -- standard tests from ecb_tbl.txt (:ecb-mode-test #h"00000000000000000000000000000000" #h"00000000000000000000000000000000" #h"9F589F5CF6122C32B6BFEC2F2AE8C35A") (:ecb-mode-test #h"00000000000000000000000000000000" #h"9F589F5CF6122C32B6BFEC2F2AE8C35A" #h"D491DB16E7B1C39E86CB086B789F5419") (:ecb-mode-test #h"9F589F5CF6122C32B6BFEC2F2AE8C35A" #h"D491DB16E7B1C39E86CB086B789F5419" #h"019F9809DE1711858FAAC3A3BA20FBC3") (:ecb-mode-test #h"D491DB16E7B1C39E86CB086B789F5419" #h"019F9809DE1711858FAAC3A3BA20FBC3" #h"6363977DE839486297E661C6C9D668EB") (:ecb-mode-test #h"019F9809DE1711858FAAC3A3BA20FBC3" #h"6363977DE839486297E661C6C9D668EB" #h"816D5BD0FAE35342BF2A7412C246F752") (:ecb-mode-test #h"6363977DE839486297E661C6C9D668EB" #h"816D5BD0FAE35342BF2A7412C246F752" #h"5449ECA008FF5921155F598AF4CED4D0") (:ecb-mode-test #h"816D5BD0FAE35342BF2A7412C246F752" #h"5449ECA008FF5921155F598AF4CED4D0" #h"6600522E97AEB3094ED5F92AFCBCDD10") (:ecb-mode-test #h"5449ECA008FF5921155F598AF4CED4D0" #h"6600522E97AEB3094ED5F92AFCBCDD10" #h"34C8A5FB2D3D08A170D120AC6D26DBFA") (:ecb-mode-test #h"6600522E97AEB3094ED5F92AFCBCDD10" #h"34C8A5FB2D3D08A170D120AC6D26DBFA" #h"28530B358C1B42EF277DE6D4407FC591") (:ecb-mode-test #h"34C8A5FB2D3D08A170D120AC6D26DBFA" #h"28530B358C1B42EF277DE6D4407FC591" #h"8A8AB983310ED78C8C0ECDE030B8DCA4") (:ecb-mode-test #h"28530B358C1B42EF277DE6D4407FC591" #h"8A8AB983310ED78C8C0ECDE030B8DCA4" #h"48C758A6DFC1DD8B259FA165E1CE2B3C") (:ecb-mode-test #h"8A8AB983310ED78C8C0ECDE030B8DCA4" #h"48C758A6DFC1DD8B259FA165E1CE2B3C" #h"CE73C65C101680BBC251C5C16ABCF214") (:ecb-mode-test #h"48C758A6DFC1DD8B259FA165E1CE2B3C" #h"CE73C65C101680BBC251C5C16ABCF214" #h"C7ABD74AA060F78B244E24C71342BA89") (:ecb-mode-test #h"CE73C65C101680BBC251C5C16ABCF214" #h"C7ABD74AA060F78B244E24C71342BA89" #h"D0F8B3B6409EBCB666D29C916565ABFC") (:ecb-mode-test #h"C7ABD74AA060F78B244E24C71342BA89" #h"D0F8B3B6409EBCB666D29C916565ABFC" #h"DD42662908070054544FE09DA4263130") (:ecb-mode-test #h"D0F8B3B6409EBCB666D29C916565ABFC" #h"DD42662908070054544FE09DA4263130" #h"7007BACB42F7BF989CF30F78BC50EDCA") (:ecb-mode-test #h"DD42662908070054544FE09DA4263130" #h"7007BACB42F7BF989CF30F78BC50EDCA" #h"57B9A18EE97D90F435A16F69F0AC6F16") (:ecb-mode-test #h"7007BACB42F7BF989CF30F78BC50EDCA" #h"57B9A18EE97D90F435A16F69F0AC6F16" #h"06181F0D53267ABD8F3BB28455B198AD") (:ecb-mode-test #h"57B9A18EE97D90F435A16F69F0AC6F16" #h"06181F0D53267ABD8F3BB28455B198AD" #h"81A12D8449E9040BAAE7196338D8C8F2") (:ecb-mode-test #h"06181F0D53267ABD8F3BB28455B198AD" #h"81A12D8449E9040BAAE7196338D8C8F2" #h"BE422651C56F2622DA0201815A95A820") (:ecb-mode-test #h"81A12D8449E9040BAAE7196338D8C8F2" #h"BE422651C56F2622DA0201815A95A820" #h"113B19F2D778473990480CEE4DA238D1") (:ecb-mode-test #h"BE422651C56F2622DA0201815A95A820" #h"113B19F2D778473990480CEE4DA238D1" #h"E6942E9A86E544CF3E3364F20BE011DF") (:ecb-mode-test #h"113B19F2D778473990480CEE4DA238D1" #h"E6942E9A86E544CF3E3364F20BE011DF" #h"87CDC6AA487BFD0EA70188257D9B3859") (:ecb-mode-test #h"E6942E9A86E544CF3E3364F20BE011DF" #h"87CDC6AA487BFD0EA70188257D9B3859" #h"D5E2701253DD75A11A4CFB243714BD14") (:ecb-mode-test #h"87CDC6AA487BFD0EA70188257D9B3859" #h"D5E2701253DD75A11A4CFB243714BD14" #h"FD24812EEA107A9E6FAB8EABE0F0F48C") (:ecb-mode-test #h"D5E2701253DD75A11A4CFB243714BD14" #h"FD24812EEA107A9E6FAB8EABE0F0F48C" #h"DAFA84E31A297F372C3A807100CD783D") (:ecb-mode-test #h"FD24812EEA107A9E6FAB8EABE0F0F48C" #h"DAFA84E31A297F372C3A807100CD783D" #h"A55ED2D955EC8950FC0CC93B76ACBF91") (:ecb-mode-test #h"DAFA84E31A297F372C3A807100CD783D" #h"A55ED2D955EC8950FC0CC93B76ACBF91" #h"2ABEA2A4BF27ABDC6B6F278993264744") (:ecb-mode-test #h"A55ED2D955EC8950FC0CC93B76ACBF91" #h"2ABEA2A4BF27ABDC6B6F278993264744" #h"045383E219321D5A4435C0E491E7DE10") (:ecb-mode-test #h"2ABEA2A4BF27ABDC6B6F278993264744" #h"045383E219321D5A4435C0E491E7DE10" #h"7460A4CD4F312F32B1C7A94FA004E934") (:ecb-mode-test #h"045383E219321D5A4435C0E491E7DE10" #h"7460A4CD4F312F32B1C7A94FA004E934" #h"6BBF9186D32C2C5895649D746566050A") (:ecb-mode-test #h"7460A4CD4F312F32B1C7A94FA004E934" #h"6BBF9186D32C2C5895649D746566050A" #h"CDBDD19ACF40B8AC0328C80054266068") (:ecb-mode-test #h"6BBF9186D32C2C5895649D746566050A" #h"CDBDD19ACF40B8AC0328C80054266068" #h"1D2836CAE4223EAB5066867A71B1A1C3") (:ecb-mode-test #h"CDBDD19ACF40B8AC0328C80054266068" #h"1D2836CAE4223EAB5066867A71B1A1C3" #h"2D7F37121D0D2416D5E2767FF202061B") (:ecb-mode-test #h"1D2836CAE4223EAB5066867A71B1A1C3" #h"2D7F37121D0D2416D5E2767FF202061B" #h"D70736D1ABC7427A121CC816CD66D7FF") (:ecb-mode-test #h"2D7F37121D0D2416D5E2767FF202061B" #h"D70736D1ABC7427A121CC816CD66D7FF" #h"AC6CA71CBCBEDCC0EA849FB2E9377865") (:ecb-mode-test #h"D70736D1ABC7427A121CC816CD66D7FF" #h"AC6CA71CBCBEDCC0EA849FB2E9377865" #h"307265FF145CBBC7104B3E51C6C1D6B4") (:ecb-mode-test #h"AC6CA71CBCBEDCC0EA849FB2E9377865" #h"307265FF145CBBC7104B3E51C6C1D6B4" #h"934B7DB4B3544854DBCA81C4C5DE4EB1") (:ecb-mode-test #h"307265FF145CBBC7104B3E51C6C1D6B4" #h"934B7DB4B3544854DBCA81C4C5DE4EB1" #h"18759824AD9823D5961F84377D7EAEBF") (:ecb-mode-test #h"934B7DB4B3544854DBCA81C4C5DE4EB1" #h"18759824AD9823D5961F84377D7EAEBF" #h"DEDDAC6029B01574D9BABB099DC6CA6C") (:ecb-mode-test #h"18759824AD9823D5961F84377D7EAEBF" #h"DEDDAC6029B01574D9BABB099DC6CA6C" #h"5EA82EEA2244DED42CCA2F835D5615DF") (:ecb-mode-test #h"DEDDAC6029B01574D9BABB099DC6CA6C" #h"5EA82EEA2244DED42CCA2F835D5615DF" #h"1E3853F7FFA57091771DD8CDEE9414DE") (:ecb-mode-test #h"5EA82EEA2244DED42CCA2F835D5615DF" #h"1E3853F7FFA57091771DD8CDEE9414DE" #h"5C2EBBF75D31F30B5EA26EAC8782D8D1") (:ecb-mode-test #h"1E3853F7FFA57091771DD8CDEE9414DE" #h"5C2EBBF75D31F30B5EA26EAC8782D8D1" #h"3A3CFA1F13A136C94D76E5FA4A1109FF") (:ecb-mode-test #h"5C2EBBF75D31F30B5EA26EAC8782D8D1" #h"3A3CFA1F13A136C94D76E5FA4A1109FF" #h"91630CF96003B8032E695797E313A553") (:ecb-mode-test #h"3A3CFA1F13A136C94D76E5FA4A1109FF" #h"91630CF96003B8032E695797E313A553" #h"137A24CA47CD12BE818DF4D2F4355960") (:ecb-mode-test #h"91630CF96003B8032E695797E313A553" #h"137A24CA47CD12BE818DF4D2F4355960" #h"BCA724A54533C6987E14AA827952F921") (:ecb-mode-test #h"137A24CA47CD12BE818DF4D2F4355960" #h"BCA724A54533C6987E14AA827952F921" #h"6B459286F3FFD28D49F15B1581B08E42") (:ecb-mode-test #h"BCA724A54533C6987E14AA827952F921" #h"6B459286F3FFD28D49F15B1581B08E42" #h"5D9D4EEFFA9151575524F115815A12E0") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"EFA71F788965BD4453F860178FC19101") (:ecb-mode-test #h"000000000000000000000000000000000000000000000000" #h"EFA71F788965BD4453F860178FC19101" #h"88B2B2706B105E36B446BB6D731A1E88") (:ecb-mode-test #h"EFA71F788965BD4453F860178FC191010000000000000000" #h"88B2B2706B105E36B446BB6D731A1E88" #h"39DA69D6BA4997D585B6DC073CA341B2") (:ecb-mode-test #h"88B2B2706B105E36B446BB6D731A1E88EFA71F788965BD44" #h"39DA69D6BA4997D585B6DC073CA341B2" #h"182B02D81497EA45F9DAACDC29193A65") (:ecb-mode-test #h"39DA69D6BA4997D585B6DC073CA341B288B2B2706B105E36" #h"182B02D81497EA45F9DAACDC29193A65" #h"7AFF7A70CA2FF28AC31DD8AE5DAAAB63") (:ecb-mode-test #h"182B02D81497EA45F9DAACDC29193A6539DA69D6BA4997D5" #h"7AFF7A70CA2FF28AC31DD8AE5DAAAB63" #h"D1079B789F666649B6BD7D1629F1F77E") (:ecb-mode-test #h"7AFF7A70CA2FF28AC31DD8AE5DAAAB63182B02D81497EA45" #h"D1079B789F666649B6BD7D1629F1F77E" #h"3AF6F7CE5BD35EF18BEC6FA787AB506B") (:ecb-mode-test #h"D1079B789F666649B6BD7D1629F1F77E7AFF7A70CA2FF28A" #h"3AF6F7CE5BD35EF18BEC6FA787AB506B" #h"AE8109BFDA85C1F2C5038B34ED691BFF") (:ecb-mode-test #h"3AF6F7CE5BD35EF18BEC6FA787AB506BD1079B789F666649" #h"AE8109BFDA85C1F2C5038B34ED691BFF" #h"893FD67B98C550073571BD631263FC78") (:ecb-mode-test #h"AE8109BFDA85C1F2C5038B34ED691BFF3AF6F7CE5BD35EF1" #h"893FD67B98C550073571BD631263FC78" #h"16434FC9C8841A63D58700B5578E8F67") (:ecb-mode-test #h"893FD67B98C550073571BD631263FC78AE8109BFDA85C1F2" #h"16434FC9C8841A63D58700B5578E8F67" #h"9594CF62D48ACD347A68A3161F0F3EE7") (:ecb-mode-test #h"16434FC9C8841A63D58700B5578E8F67893FD67B98C55007" #h"9594CF62D48ACD347A68A3161F0F3EE7" #h"B23E8C2C731C514017D1F2B88D77D208") (:ecb-mode-test #h"9594CF62D48ACD347A68A3161F0F3EE716434FC9C8841A63" #h"B23E8C2C731C514017D1F2B88D77D208" #h"93CC592BC96D95FA8AC32DA894F6AB89") (:ecb-mode-test #h"B23E8C2C731C514017D1F2B88D77D2089594CF62D48ACD34" #h"93CC592BC96D95FA8AC32DA894F6AB89" #h"26516E6BD4AEF86AF4F4AD58FA41A14C") (:ecb-mode-test #h"93CC592BC96D95FA8AC32DA894F6AB89B23E8C2C731C5140" #h"26516E6BD4AEF86AF4F4AD58FA41A14C" #h"00A8FFFAB8616BE710A6592438FC40BE") (:ecb-mode-test #h"26516E6BD4AEF86AF4F4AD58FA41A14C93CC592BC96D95FA" #h"00A8FFFAB8616BE710A6592438FC40BE" #h"A19B811C77482D97C842EC62DB2EDCCE") (:ecb-mode-test #h"00A8FFFAB8616BE710A6592438FC40BE26516E6BD4AEF86A" #h"A19B811C77482D97C842EC62DB2EDCCE" #h"D7FF438678D818CAA26A676342F98E8B") (:ecb-mode-test #h"A19B811C77482D97C842EC62DB2EDCCE00A8FFFAB8616BE7" #h"D7FF438678D818CAA26A676342F98E8B" #h"84EAFFC0C091582ABB717086E0807A5F") (:ecb-mode-test #h"D7FF438678D818CAA26A676342F98E8BA19B811C77482D97" #h"84EAFFC0C091582ABB717086E0807A5F" #h"5500AF1C79503FEF1BACF35A81DC2865") (:ecb-mode-test #h"84EAFFC0C091582ABB717086E0807A5FD7FF438678D818CA" #h"5500AF1C79503FEF1BACF35A81DC2865" #h"7282B2F3E766C83664930A19D201D7E7") (:ecb-mode-test #h"5500AF1C79503FEF1BACF35A81DC286584EAFFC0C091582A" #h"7282B2F3E766C83664930A19D201D7E7" #h"6796085C32FBDD2AB43E81EAC1262743") (:ecb-mode-test #h"7282B2F3E766C83664930A19D201D7E75500AF1C79503FEF" #h"6796085C32FBDD2AB43E81EAC1262743" #h"5839F9E148B9FD2B5A52751D4F178FDC") (:ecb-mode-test #h"6796085C32FBDD2AB43E81EAC12627437282B2F3E766C836" #h"5839F9E148B9FD2B5A52751D4F178FDC" #h"A88F34056742E55408A7A9E7B6D4C8C0") (:ecb-mode-test #h"5839F9E148B9FD2B5A52751D4F178FDC6796085C32FBDD2A" #h"A88F34056742E55408A7A9E7B6D4C8C0" #h"9C8C304CB1F937C6E42528459FA8872F") (:ecb-mode-test #h"A88F34056742E55408A7A9E7B6D4C8C05839F9E148B9FD2B" #h"9C8C304CB1F937C6E42528459FA8872F" #h"EA3668C0D96529A7F3BF0F7C2B5C5BE2") (:ecb-mode-test #h"9C8C304CB1F937C6E42528459FA8872FA88F34056742E554" #h"EA3668C0D96529A7F3BF0F7C2B5C5BE2" #h"A8FB6EEFCAAF9C4041072D570984CED2") (:ecb-mode-test #h"EA3668C0D96529A7F3BF0F7C2B5C5BE29C8C304CB1F937C6" #h"A8FB6EEFCAAF9C4041072D570984CED2" #h"ABF4662E5D50F71B15FE3B428AFE3500") (:ecb-mode-test #h"A8FB6EEFCAAF9C4041072D570984CED2EA3668C0D96529A7" #h"ABF4662E5D50F71B15FE3B428AFE3500" #h"3B3AED23958DA6E2FA4493BCBE59A806") (:ecb-mode-test #h"ABF4662E5D50F71B15FE3B428AFE3500A8FB6EEFCAAF9C40" #h"3B3AED23958DA6E2FA4493BCBE59A806" #h"CFBF446E33C3DCD4DD5161CA00D4BA8F") (:ecb-mode-test #h"3B3AED23958DA6E2FA4493BCBE59A806ABF4662E5D50F71B" #h"CFBF446E33C3DCD4DD5161CA00D4BA8F" #h"072ADBFA7EB962BA199AFC720339FF29") (:ecb-mode-test #h"CFBF446E33C3DCD4DD5161CA00D4BA8F3B3AED23958DA6E2" #h"072ADBFA7EB962BA199AFC720339FF29" #h"AAB346D9123A8140AC563EF17E7054C8") (:ecb-mode-test #h"072ADBFA7EB962BA199AFC720339FF29CFBF446E33C3DCD4" #h"AAB346D9123A8140AC563EF17E7054C8" #h"3C7DDC5FE6E5888FE61DEDA0C69CD320") (:ecb-mode-test #h"AAB346D9123A8140AC563EF17E7054C8072ADBFA7EB962BA" #h"3C7DDC5FE6E5888FE61DEDA0C69CD320" #h"34AA645C7E3532098ADA91BB128ED821") (:ecb-mode-test #h"3C7DDC5FE6E5888FE61DEDA0C69CD320AAB346D9123A8140" #h"34AA645C7E3532098ADA91BB128ED821" #h"7A5D12E315038522DA01EC0834B1322C") (:ecb-mode-test #h"34AA645C7E3532098ADA91BB128ED8213C7DDC5FE6E5888F" #h"7A5D12E315038522DA01EC0834B1322C" #h"86E235A1CB091FF7FE6FBBCA0D73BE58") (:ecb-mode-test #h"7A5D12E315038522DA01EC0834B1322C34AA645C7E353209" #h"86E235A1CB091FF7FE6FBBCA0D73BE58" #h"F3CE81CACE5D6BA9C558111DCDB22F5D") (:ecb-mode-test #h"86E235A1CB091FF7FE6FBBCA0D73BE587A5D12E315038522" #h"F3CE81CACE5D6BA9C558111DCDB22F5D" #h"FB30A5D67D5F5BE4048C77E2AD3BC9D1") (:ecb-mode-test #h"F3CE81CACE5D6BA9C558111DCDB22F5D86E235A1CB091FF7" #h"FB30A5D67D5F5BE4048C77E2AD3BC9D1" #h"31E69DD3D2D90E81C9EBFAC257E9823D") (:ecb-mode-test #h"FB30A5D67D5F5BE4048C77E2AD3BC9D1F3CE81CACE5D6BA9" #h"31E69DD3D2D90E81C9EBFAC257E9823D" #h"87579B3F19A9CDE12BB882FFEAF665AE") (:ecb-mode-test #h"31E69DD3D2D90E81C9EBFAC257E9823DFB30A5D67D5F5BE4" #h"87579B3F19A9CDE12BB882FFEAF665AE" #h"24A8572AA844FEF25F7670FAE30F1CD2") (:ecb-mode-test #h"87579B3F19A9CDE12BB882FFEAF665AE31E69DD3D2D90E81" #h"24A8572AA844FEF25F7670FAE30F1CD2" #h"0CFA32E5E33F3B2DAC9F34D25979319A") (:ecb-mode-test #h"24A8572AA844FEF25F7670FAE30F1CD287579B3F19A9CDE1" #h"0CFA32E5E33F3B2DAC9F34D25979319A" #h"3C64D7FC881B9B82ABA21FF122B98F54") (:ecb-mode-test #h"0CFA32E5E33F3B2DAC9F34D25979319A24A8572AA844FEF2" #h"3C64D7FC881B9B82ABA21FF122B98F54" #h"A794CAEE6756281B7A64894E4E4F70A8") (:ecb-mode-test #h"3C64D7FC881B9B82ABA21FF122B98F540CFA32E5E33F3B2D" #h"A794CAEE6756281B7A64894E4E4F70A8" #h"89A9BF6B893BC5E6FEF4C77F3D0F29A6") (:ecb-mode-test #h"A794CAEE6756281B7A64894E4E4F70A83C64D7FC881B9B82" #h"89A9BF6B893BC5E6FEF4C77F3D0F29A6" #h"5DBE44032769DF543EAD7AD13A5F3310") (:ecb-mode-test #h"89A9BF6B893BC5E6FEF4C77F3D0F29A6A794CAEE6756281B" #h"5DBE44032769DF543EAD7AD13A5F3310" #h"DEA4F3DA75EC7A8EAC3861A9912402CD") (:ecb-mode-test #h"5DBE44032769DF543EAD7AD13A5F331089A9BF6B893BC5E6" #h"DEA4F3DA75EC7A8EAC3861A9912402CD" #h"FB66522C332FCC4C042ABE32FA9E902F") (:ecb-mode-test #h"DEA4F3DA75EC7A8EAC3861A9912402CD5DBE44032769DF54" #h"FB66522C332FCC4C042ABE32FA9E902F" #h"F0AB73301125FA21EF70BE5385FB76B6") (:ecb-mode-test #h"FB66522C332FCC4C042ABE32FA9E902FDEA4F3DA75EC7A8E" #h"F0AB73301125FA21EF70BE5385FB76B6" #h"E75449212BEEF9F4A390BD860A640941") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000" #h"57FF739D4DC92C1BD7FC01700CC8216F") (:ecb-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"57FF739D4DC92C1BD7FC01700CC8216F" #h"D43BB7556EA32E46F2A282B7D45B4E0D") (:ecb-mode-test #h"57FF739D4DC92C1BD7FC01700CC8216F00000000000000000000000000000000" #h"D43BB7556EA32E46F2A282B7D45B4E0D" #h"90AFE91BB288544F2C32DC239B2635E6") (:ecb-mode-test #h"D43BB7556EA32E46F2A282B7D45B4E0D57FF739D4DC92C1BD7FC01700CC8216F" #h"90AFE91BB288544F2C32DC239B2635E6" #h"6CB4561C40BF0A9705931CB6D408E7FA") (:ecb-mode-test #h"90AFE91BB288544F2C32DC239B2635E6D43BB7556EA32E46F2A282B7D45B4E0D" #h"6CB4561C40BF0A9705931CB6D408E7FA" #h"3059D6D61753B958D92F4781C8640E58") (:ecb-mode-test #h"6CB4561C40BF0A9705931CB6D408E7FA90AFE91BB288544F2C32DC239B2635E6" #h"3059D6D61753B958D92F4781C8640E58" #h"E69465770505D7F80EF68CA38AB3A3D6") (:ecb-mode-test #h"3059D6D61753B958D92F4781C8640E586CB4561C40BF0A9705931CB6D408E7FA" #h"E69465770505D7F80EF68CA38AB3A3D6" #h"5AB67A5F8539A4A5FD9F0373BA463466") (:ecb-mode-test #h"E69465770505D7F80EF68CA38AB3A3D63059D6D61753B958D92F4781C8640E58" #h"5AB67A5F8539A4A5FD9F0373BA463466" #h"DC096BCD99FC72F79936D4C748E75AF7") (:ecb-mode-test #h"5AB67A5F8539A4A5FD9F0373BA463466E69465770505D7F80EF68CA38AB3A3D6" #h"DC096BCD99FC72F79936D4C748E75AF7" #h"C5A3E7CEE0F1B7260528A68FB4EA05F2") (:ecb-mode-test #h"DC096BCD99FC72F79936D4C748E75AF75AB67A5F8539A4A5FD9F0373BA463466" #h"C5A3E7CEE0F1B7260528A68FB4EA05F2" #h"43D5CEC327B24AB90AD34A79D0469151") (:ecb-mode-test #h"C5A3E7CEE0F1B7260528A68FB4EA05F2DC096BCD99FC72F79936D4C748E75AF7" #h"43D5CEC327B24AB90AD34A79D0469151" #h"05BA7BE9BE5274FBEB4AC5FD5FAAFA10") (:ecb-mode-test #h"43D5CEC327B24AB90AD34A79D0469151C5A3E7CEE0F1B7260528A68FB4EA05F2" #h"05BA7BE9BE5274FBEB4AC5FD5FAAFA10" #h"89D513B989E3CECE4D2E3E4C15D4E01C") (:ecb-mode-test #h"05BA7BE9BE5274FBEB4AC5FD5FAAFA1043D5CEC327B24AB90AD34A79D0469151" #h"89D513B989E3CECE4D2E3E4C15D4E01C" #h"E56E462AE2E66F800CE2224C4CAFACBE") (:ecb-mode-test #h"89D513B989E3CECE4D2E3E4C15D4E01C05BA7BE9BE5274FBEB4AC5FD5FAAFA10" #h"E56E462AE2E66F800CE2224C4CAFACBE" #h"F5DBEE5414D79CA46BE17346FDC72BF5") (:ecb-mode-test #h"E56E462AE2E66F800CE2224C4CAFACBE89D513B989E3CECE4D2E3E4C15D4E01C" #h"F5DBEE5414D79CA46BE17346FDC72BF5" #h"C780FC28815E667B3D224ECF1F4A7D65") (:ecb-mode-test #h"F5DBEE5414D79CA46BE17346FDC72BF5E56E462AE2E66F800CE2224C4CAFACBE" #h"C780FC28815E667B3D224ECF1F4A7D65" #h"2EF17A0D75440ECEC9AF18D29ABA3CDA") (:ecb-mode-test #h"C780FC28815E667B3D224ECF1F4A7D65F5DBEE5414D79CA46BE17346FDC72BF5" #h"2EF17A0D75440ECEC9AF18D29ABA3CDA" #h"D653FDFF96BCF89A929F6377AB41967A") (:ecb-mode-test #h"2EF17A0D75440ECEC9AF18D29ABA3CDAC780FC28815E667B3D224ECF1F4A7D65" #h"D653FDFF96BCF89A929F6377AB41967A" #h"36BBAD8838380C8793A7AEA0A11D04D2") (:ecb-mode-test #h"D653FDFF96BCF89A929F6377AB41967A2EF17A0D75440ECEC9AF18D29ABA3CDA" #h"36BBAD8838380C8793A7AEA0A11D04D2" #h"034EFECFC0EFC00D82C3345A8708AE78") (:ecb-mode-test #h"36BBAD8838380C8793A7AEA0A11D04D2D653FDFF96BCF89A929F6377AB41967A" #h"034EFECFC0EFC00D82C3345A8708AE78" #h"EA38887307337A2934A9EB802F6CFDDD") (:ecb-mode-test #h"034EFECFC0EFC00D82C3345A8708AE7836BBAD8838380C8793A7AEA0A11D04D2" #h"EA38887307337A2934A9EB802F6CFDDD" #h"7C279D47775AB4C26442E8A117943DD8") (:ecb-mode-test #h"EA38887307337A2934A9EB802F6CFDDD034EFECFC0EFC00D82C3345A8708AE78" #h"7C279D47775AB4C26442E8A117943DD8" #h"E3CF581056EBC1169CF451E930308726") (:ecb-mode-test #h"7C279D47775AB4C26442E8A117943DD8EA38887307337A2934A9EB802F6CFDDD" #h"E3CF581056EBC1169CF451E930308726" #h"65527B29D489C8CDDC62E5E7FFC4E924") (:ecb-mode-test #h"E3CF581056EBC1169CF451E9303087267C279D47775AB4C26442E8A117943DD8" #h"65527B29D489C8CDDC62E5E7FFC4E924" #h"3B491F930230A0170819CACB48F9030C") (:ecb-mode-test #h"65527B29D489C8CDDC62E5E7FFC4E924E3CF581056EBC1169CF451E930308726" #h"3B491F930230A0170819CACB48F9030C" #h"A7C8193F35AF63B51D7F9DEDCEC85866") (:ecb-mode-test #h"3B491F930230A0170819CACB48F9030C65527B29D489C8CDDC62E5E7FFC4E924" #h"A7C8193F35AF63B51D7F9DEDCEC85866" #h"009A48F9A1C27F9AA5F9BD909C848B60") (:ecb-mode-test #h"A7C8193F35AF63B51D7F9DEDCEC858663B491F930230A0170819CACB48F9030C" #h"009A48F9A1C27F9AA5F9BD909C848B60" #h"3B507E987B3F827A093B26C85CDFF6C6") (:ecb-mode-test #h"009A48F9A1C27F9AA5F9BD909C848B60A7C8193F35AF63B51D7F9DEDCEC85866" #h"3B507E987B3F827A093B26C85CDFF6C6" #h"EAFB3BA6C78E37214FE908669BC24F6F") (:ecb-mode-test #h"3B507E987B3F827A093B26C85CDFF6C6009A48F9A1C27F9AA5F9BD909C848B60" #h"EAFB3BA6C78E37214FE908669BC24F6F" #h"2B09F10D7F2B62A4D0DAFFB9F882B980") (:ecb-mode-test #h"EAFB3BA6C78E37214FE908669BC24F6F3B507E987B3F827A093B26C85CDFF6C6" #h"2B09F10D7F2B62A4D0DAFFB9F882B980" #h"E6B9FE907009B2DC649412DD630AE576") (:ecb-mode-test #h"2B09F10D7F2B62A4D0DAFFB9F882B980EAFB3BA6C78E37214FE908669BC24F6F" #h"E6B9FE907009B2DC649412DD630AE576" #h"F2E4DC89724CD58F85847BD09ED4500F") (:ecb-mode-test #h"E6B9FE907009B2DC649412DD630AE5762B09F10D7F2B62A4D0DAFFB9F882B980" #h"F2E4DC89724CD58F85847BD09ED4500F" #h"DC650444FCEBC2BD6E450EF4605FCABE") (:ecb-mode-test #h"F2E4DC89724CD58F85847BD09ED4500FE6B9FE907009B2DC649412DD630AE576" #h"DC650444FCEBC2BD6E450EF4605FCABE" #h"B7CFB31755FDA2AB0A67FBA09901A73E") (:ecb-mode-test #h"DC650444FCEBC2BD6E450EF4605FCABEF2E4DC89724CD58F85847BD09ED4500F" #h"B7CFB31755FDA2AB0A67FBA09901A73E" #h"9C7E7578F3D2923DCDABFED0A5EF86EE") (:ecb-mode-test #h"B7CFB31755FDA2AB0A67FBA09901A73EDC650444FCEBC2BD6E450EF4605FCABE" #h"9C7E7578F3D2923DCDABFED0A5EF86EE" #h"9465E9AE176483BD398C8033AA136F68") (:ecb-mode-test #h"9C7E7578F3D2923DCDABFED0A5EF86EEB7CFB31755FDA2AB0A67FBA09901A73E" #h"9465E9AE176483BD398C8033AA136F68" #h"8551279DE9991805FCFC1937C52AE9D4") (:ecb-mode-test #h"9465E9AE176483BD398C8033AA136F689C7E7578F3D2923DCDABFED0A5EF86EE" #h"8551279DE9991805FCFC1937C52AE9D4" #h"A830EB8DA52ECFF7F93B7627322CF9D7") (:ecb-mode-test #h"8551279DE9991805FCFC1937C52AE9D49465E9AE176483BD398C8033AA136F68" #h"A830EB8DA52ECFF7F93B7627322CF9D7" #h"EC89F0E5155425D4B92BD4B200C1A6E0") (:ecb-mode-test #h"A830EB8DA52ECFF7F93B7627322CF9D78551279DE9991805FCFC1937C52AE9D4" #h"EC89F0E5155425D4B92BD4B200C1A6E0" #h"8AF76A782061D38360C6C3CDDCBE1516") (:ecb-mode-test #h"EC89F0E5155425D4B92BD4B200C1A6E0A830EB8DA52ECFF7F93B7627322CF9D7" #h"8AF76A782061D38360C6C3CDDCBE1516" #h"D4EEAA6A069659D5D88590DE75515631") (:ecb-mode-test #h"8AF76A782061D38360C6C3CDDCBE1516EC89F0E5155425D4B92BD4B200C1A6E0" #h"D4EEAA6A069659D5D88590DE75515631" #h"259C021D37B077197B80FCDB07EA1AF2") (:ecb-mode-test #h"D4EEAA6A069659D5D88590DE755156318AF76A782061D38360C6C3CDDCBE1516" #h"259C021D37B077197B80FCDB07EA1AF2" #h"300CC8B4171F0E9BD75710FAD033C570") (:ecb-mode-test #h"259C021D37B077197B80FCDB07EA1AF2D4EEAA6A069659D5D88590DE75515631" #h"300CC8B4171F0E9BD75710FAD033C570" #h"5CFA5BD213A74F02E65390A4C14A1DF6") (:ecb-mode-test #h"300CC8B4171F0E9BD75710FAD033C570259C021D37B077197B80FCDB07EA1AF2" #h"5CFA5BD213A74F02E65390A4C14A1DF6" #h"A443EA1B2C5747CE7EC5F21D4FE0C147") (:ecb-mode-test #h"5CFA5BD213A74F02E65390A4C14A1DF6300CC8B4171F0E9BD75710FAD033C570" #h"A443EA1B2C5747CE7EC5F21D4FE0C147" #h"D2DED73E59319A8138E0331F0EA149EA") (:ecb-mode-test #h"A443EA1B2C5747CE7EC5F21D4FE0C1475CFA5BD213A74F02E65390A4C14A1DF6" #h"D2DED73E59319A8138E0331F0EA149EA" #h"2E2158BC3E5FC714C1EEECA0EA696D48") (:ecb-mode-test #h"D2DED73E59319A8138E0331F0EA149EAA443EA1B2C5747CE7EC5F21D4FE0C147" #h"2E2158BC3E5FC714C1EEECA0EA696D48" #h"248A7F3528B168ACFDD1386E3F51E30C") (:ecb-mode-test #h"2E2158BC3E5FC714C1EEECA0EA696D48D2DED73E59319A8138E0331F0EA149EA" #h"248A7F3528B168ACFDD1386E3F51E30C" #h"431058F4DBC7F734DA4F02F04CC4F459") (:ecb-mode-test #h"248A7F3528B168ACFDD1386E3F51E30C2E2158BC3E5FC714C1EEECA0EA696D48" #h"431058F4DBC7F734DA4F02F04CC4F459" #h"37FE26FF1CF66175F5DDF4C33B97A205") (:keystream-test #h"b921996dc3792d5b46f0171f5e67e1f5bd7e74efb98f155242dbb20a3714a6dc" #h"ba2595288c75b56b702ae7f903c40ab0" #h"e1800fd1b31fe1dd0bfdf8938b86dbdd21a3057d89789153daddc11d69852ba8a8ad0a64c63c236f9734a33c989f348d7e56036b9f749385bb7582ca20dcc72bd0956f98f6e23212eebf098048adcedcd79b39fa39c396ce178676c3ee424fc28b2d9e77c4876128f2779e46609bf19fbba8f0e084adc1ffe9ec8815a1ffac3048c4f115963bd0ded59dd48ede3a35933a54235ec72e9c98ea800d6d74b6a4fc5e3c3557fd2f81508fb14eceb873137e1053aea6f746be7fb3c23898ce81e5efd7351588b8c0307347cf35ec9761a8a632662e80100a9b49534cc29894c006bf36965b84bfe3561116bfbf7295f398af07732ccbce23af8d1a41ba66b2c7a30e6a850049cbf995d63b4eddba2ecdd97962780be1d61575938c27c2626490867d0d83db30a290cdfeecd310bcad42c8f5980a317348f096f47aafceee018d8eecf8e22c9a9a2bd2bc8864aa9c15be8f196e89fd7e033e8872d09d6fba74350f1555dd21a4297ebd61b3b8b3bb60f269d59c595295be8cfd0a3fc1bc384950eb5910c57413284e91f4d5c54585498aa94975f9660c67176f660cddda37945b6397ae290867cbea096282adba8d13ee43260052f06eadfb3c5bb6ec4143ac119d38732e76025417f78799a98513fa88dd85c7c83a8f465aadb40f4d218bd8fc54e4dc6f34c7829c90dadafe6d40c1c05513f06c68231e8be3403da0b2e8fcb73edbfc2a6d36c1c7e38a25aad73ca40cd57ce8a8f3e9e7950d3d9c9428f710098c39aa2f82ba8208acb575321e87e560eda31383799e033a779c7198ed678e586ffb33a6d16eac988f422ac769897b4a2f59348b5008df1bf68c3696fb1da60a6e5d12df9b35c9f05250b758a761d79eed88d13bbfa97aedee8149e110e0c37628dd0d00dac5fac7e7b24b149ee4135df1fb01d6f485754543c2a7b9124b569c221252fd991108881b972579619cfc74c69084fbfec56367c4272a058b4a0e8fd85d18063badafd0d725079a1de2ecfc4a16861af7401dab32e9aa13d5cd0cc8b987d8b1aa6f3eb29241296394dd691b8f809991837251803fa6612501dba7127858417741174877b6a5ccd035d18086d341409fa1d5aa0aa4209dcf94927fc5b520006458c037bd50cc864f1029a881f95025cc5c88d2d6f7298ebb9eaa4c331c567a64ca0ef23d9d1a49060d5b66b62a184241ee8bce5a76bbace8e882c572c0cb903dfd39d29da366059df8be5fc2250ce57e0f744b9612a4f0badff59fc8ee6d417103aa7fc6325044eeffbfcc80f2ef533b79c64f69430382723fd04a228fb02eb7eaf90176fbeac94881977fd517d1d70b11f33630bd66ca5aced3c7b11ec097efc500af7402906ee679b8fe4e21d6f038da9e7ed7c49afa5966209008615064bc511568b94a55") ironclad-0.57/testing/test-vectors/whirlpool.testvec000066400000000000000000000026701420372057600230100ustar00rootroot00000000000000;;; iso-test-vectors (:digest-test #a"" #h"19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A73E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3") (:digest-test #a"a" #h"8ACA2602792AEC6F11A67206531FB7D7F0DFF59413145E6973C45001D0087B42D11BC645413AEFF63A42391A39145A591A92200D560195E53B478584FDAE231A") (:digest-test #a"abc" #h"4E2448A4C6F486BB16B6562C73B4020BF3043E3A731BCE721AE1B303D97E6D4C7181EEBDB6C57E277D0E34957114CBD6C797FC9D95D8B582D225292076D4EEF5") (:digest-test #a"message digest" #h"378C84A4126E2DC6E56DCC7458377AAC838D00032230F53CE1F5700C0FFB4D3B8421557659EF55C106B4B52AC5A4AAA692ED920052838F3362E86DBD37A8903E") (:digest-test #a"abcdefghijklmnopqrstuvwxyz" #h"F1D754662636FFE92C82EBB9212A484A8D38631EAD4238F5442EE13B8054E41B08BF2A9251C30B6A0B8AAE86177AB4A6F68F673E7207865D5D9819A3DBA4EB3B") (:digest-test #a"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" #h"DC37E008CF9EE69BF11F00ED9ABA26901DD7C28CDEC066CC6AF42E40F82F3A1E08EBA26629129D8FB7CB57211B9281A65517CC879D7B962142C65F5A7AF01467") (:digest-test #a"12345678901234567890123456789012345678901234567890123456789012345678901234567890" #h"466EF18BABB0154D25B9D38A6414F5C08784372BCCB204D6549C4AFADB6014294D5BD8DF2A6C44E538CD047B2681A51A2C60481E88C5A20B2C2A80CF3A9A083B") (:digest-test #a"abcdbcdecdefdefgefghfghighijhijk" #h"2A987EA40F917061F5D6F0A0E4644F488A7A5A52DEEE656207C562F988E95C6916BDC8031BC5BE1B7B947639FE050B56939BAAA0ADFF9AE6745B7B181C3BE3FD") ironclad-0.57/testing/test-vectors/xchacha-12.testvec000066400000000000000000000137141420372057600226110ustar00rootroot00000000000000(:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"000000000000000000000000000000000000000000000000" #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"10e0a531a2f916a364eadbbf8e726d4cb01d18eb4acada60792202072a7b4b7a135846a9d4452c5ce8dc06d77907f1a18eebb978fb8ee00b9f3973fb7af1b113b9d0f103c82b1e03dc36b5346707d707be2ee7e5c59e66136c0a67d52f73fd0c3948083fae897200703efcb636ee64a835f554d1d7db958dbf1fdb18015897bede3754048dd5899cc86aee1ddc096a48bb2f807d4bf36c69418c51ac8b34fdaa056af27374d26ff7d377f2601bf92e7527fbfa02599877a2f1ea01e87b287d9c681351c05473481eb5759d30aa248ff124f6cdde77945ff424ac788a3c08a7190d32591858a1f648943038757a71f6116c09d5b4d27a099edd13a06b3aaa4dcdfa1f958548bfb301f035ba5c2d3ba8278d4dbdd79af26258f485d4fdda1a359330229349261a6dd6ad525e9dd50646184d40b9e13e95b4ffc2d99b2caae51e8654f94f1461caf2ef402543f12b1013a462eb368a8c9913870bdd26c66f0de6ee06486bc36280336a6b7c2f660c5db0b0aacf6ea2bd99eb5e1fc10c5f7aca21242452c5f1f280e07295fc9bb21f6d208505b7bf16d3460fa1feb1ed512df44036214eadf59c22c8f171ccf3a11d8fa8699bdfa1dbac2194620ff9ab25bcb73c2bceca4d22be30927bf35ff4b3e56d1b27915328538185541cb7590f00c50ad6e7887fcc6e2c77faf3324b284df188579c3cbe30a3342238f8eb05ee09015a9326") (:stream-nonce-mode-test #h"10e0a531a2f916a364eadbbf8e726d4cb01d18eb4acada60792202072a7b4b7a" #h"135846a9d4452c5ce8dc06d77907f1a18eebb978fb8ee00b" #h"fa1f958548bfb301f035ba5c2d3ba8278d4dbdd79af26258f485d4fdda1a359330229349261a6dd6ad525e9dd50646184d40b9e13e95b4ffc2d99b2caae51e8654f94f1461caf2ef402543f12b1013a462eb368a8c9913870bdd26c66f0de6ee06486bc36280336a6b7c2f660c5db0b0aacf6ea2bd99eb5e1fc10c5f7aca21242452c5f1f280e07295fc9bb21f6d208505b7bf16d3460fa1feb1ed512df44036214eadf59c22c8f171ccf3a11d8fa8699bdfa1dbac2194620ff9ab25bcb73c2bceca4d22be30927bf35ff4b3e56d1b27915328538185541cb7590f00c50ad6e7887fcc6e2c77faf3324b284df188579c3cbe30a3342238f8eb05ee09015a9326" #h"74f57e7d0157e0e917fa2dd0d00e2981a1f5fd58825632330a75ca6cf867a073cfd57cb4297f11ff6e4892c6dd7d1b909f2813c2ca75638d03b86e62b3177abf63af7e950650e24124b7752e44514f1177f3e32a1875b12d04199598d04372fb7ca1257917e0924826a2c8ca8db2b5a18a3117d3ef001dd06372fcbfb16dcb416349953b521428a7118649b72bc7d485490fa9f4ecac8e786aed22d0d172a62fa4f030804fb1e4774d89cc6fa20c1232d64244abd8175aba3ebe32d7e2dbca99a0d72e9e0d4e0c3a97d1bee89d87b90ade07ded40d6022196d133ffc3243e404c5cf71ed8f71a80ce3ac85bd5da9150aea110870b78121d70c9585cdc6ab522c") (:stream-nonce-mode-test #h"a5092b2a88596eafc9216518757f5d6f261aeb946de0b2bd43b5bb9d441efbe9" #h"272613af7f815e48a2c4611743be8669d972fd4652b00495" #h"65bf33a9dd2e920455a5b3d427121dc9d67ee1193c678215d97f5c2b2f60c1951ff43efd22d1017776b54c9dc769679de748b623af383989b795b4e7f5757c1469ba118c8b130302c84f9f8fb8062c9f4ee2c3fe1afc87d1913bb886b1349a1aefaca67a" #h"21527d5cdbf2cb8050d2fae935dd9283f7a97761eb93c0daaf10c1cc30a50f81d6fc43048d7f19af6bbe4e637490e76b0e9e6c85ef5c84c4aaed0fb1cb06ea676bbf418d790b303841f30bfb8a0e490b30d38d6999484243417e094f1f4e19ade0bfa551") (:keystream-test #h"e3b51300b94b08190e57c789b73cfa8d49be6ff975d1e2f9f350c8c1d443392e" #h"2cf2269707b8e64c9806af1e11f86bbfa92ccb18bdad29bb" #h"4178036cecf0a1ecfdd67cd9712fcd956c0be9b1bbd8afacea1d28615ef51ba0d9dcf6080cbc747e2ad58990f39df09996a1cee87d2c8fed25d7b24f8a56061129f147b16af3e9110760929335a86d4b2a86d4d671014ef28572772885fea56266e7562f362c0a0ceb7da869f000674a8937a593cd5d3756eca8434f904e4c8197f15e653e4f2586f50fb2b8873cf2a3c8d5c6b9c6c4b95eac89357d3bd3d24e6e801b271bea8c74efed39822d1c5246bc2276c0f0f29d4188a1c3286db82858a6e27475b3799a2f6cf5f952cc1371365da8412e6b815d46d3ee0a4b309e79daef1ac590b7042b6f8f3c5ec207098497e0477d38e0533a58bdccd6c8826996a6b0b3aa393c658dacf5cab92dce3b0dcf67e7ca5aff57fd825427709917f2f372cca6099d64c6ef9f558f28c13bf91e22a159832cbac4c82c395ff77bda2f9406c1078d83710d63d2c150ecf7f3da801565fa2a828cf8512d2a41fcecee1382a8ce0588075ba057abb9ebfb6f9cde2be2228a3fd7267e7a1437a490e392c11f984424caa4941f43e272b0a4a72c44baf74983fb466157941dc301defb7f98e509c4041a7b60648643f52dd65e876ac718ebffee62c8c8bd895a5bf5bc8f9aeb1973bf20f961fc3cd43e190db346c6a60a2eb3801e6f20a9130f0f2a9c798b3886983cf6eaadb96dae1ea602f07826fb4655feaae8ca4f8d38d205eeab7b5fc443a94a60b9296f400b86a07cdad66a92395d0b49b64cb761cf84c871931f8bae2b9ff910f6de069481b29e6851bf411e0b4bfbf3e88592f80538f7ef6cb25ac711a6cadb1c06dbabce2d3924580b0ac5cd5cb8349e1536ef283ab3a51ecca215bd7f3d3a138b302c11ce7b986215a80f9e621f108daa9ba8f2f809b74cd2a46508aa76b6c7a756b735e24b2f37cf0cddfd9b08173e04cbf841f7ff04e927dbd556f0859e97d41831cdeac023c5e945851ba61fbb8c62ceeb5133be06603c7fa889c53c08bc21bb807c9056123136891d222d821dede82f1871213b4be67883d647b00e612131b8a27cbbf8d96c56a9afb60803153ba90d2902db0b08039802cf8ab8d3c82c3e20798c8479ca60a3d70a63b43a00001ceeeef2a543e99b8f491c9572ddc796d89ed0af655affd59ad46a9eb6ad1e410fd10b6313e22b4de0bea665538fa9307bc3be8988ce4ba25457422817ca34eb900e1889c265961bf467d0756d9e0c341a08be7a963eb48e21d784117ec62b568a207655b72b4e3a410f06dad1f4f280e22c75099352a4d235f152ea92a759d633d03a05e314837428214d8f4e0165b3338afb8d571be357c5d01c93216c478c1157c25a6ba1854d6df5fea508017ec6a342b1916252dd93d10a77ec6b1c7324877d3037f6562cb78f50268a992147ed15fc0572") ironclad-0.57/testing/test-vectors/xchacha-8.testvec000066400000000000000000000073541420372057600225410ustar00rootroot00000000000000(:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"000000000000000000000000000000000000000000000000" #h"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"ae455a79b8762f84871c3888285820ad7c48b528cbc708849687aff65b2a2597eea32a77d169216fdd6c6915152e1bb6819cf324ee7e422088deccbe07802f2df76d285af8219fadf871816fd0e70700db90d3901112460f7abaa11deceec3f267983726") (:stream-nonce-mode-test #h"a8a333834f79bb7f425ed3b962108db4e7ddc4ed928c82d9ae659fe651b4b5f9" #h"57e87da7613826a397f95cf90aeaadf1c772df59fe6132ac" #h"c6d19217864710dd2f8d8490c6aa345da49056ae7a039f41757e9a73dfcc1fa59eb2bc24f9cd01295a86b92030ed7dd47ed382f8d7223a4ca0d4c080a1df253f91e2638baf64b409ea6d2a1b5ba7efd97b72d152940b9e34e05eb4813edac0cfbc235a6b" #h"dfc48d95cfd0a92c0048866aa64b62b2d0bd5e671df82c380094bc2024f5bd771d5fe4f60ca2cdc5d6af0d0a28049ec1293f825d858fbb969f7ecf1ce0d6578bd71b8cf721fe49996a033ace05117b21fcd654154dc6689e6f9e8c216977c94675144615") (:stream-nonce-mode-test #h"a5092b2a88596eafc9216518757f5d6f261aeb946de0b2bd43b5bb9d441efbe9" #h"272613af7f815e48a2c4611743be8669d972fd4652b00495" #h"65bf33a9dd2e920455a5b3d427121dc9d67ee1193c678215d97f5c2b2f60c1951ff43efd22d1017776b54c9dc769679de748b623af383989b795b4e7f5757c1469ba118c8b130302c84f9f8fb8062c9f4ee2c3fe1afc87d1913bb886b1349a1aefaca67a" #h"bbd38ff54a09c74c467c3e29176cf3253c0ef7085cea411100b4da7b290027da367dedcd517e8dbf4cbb7ef32cce0fcb1dec5c23eae4e7c928d7455bc117fa40956f93908304b23d33f20e2244ebf46fdb3eb6e0013d29863c420c726e91fce1b9afc806") (:keystream-test #h"9c97432b18c883b5f072e725641910536f14ed50e53f2825ebdd719bf5a10595" #h"21bb0fabd336c5e66542892536949be0c107eb4aa374cb2d" #h"1af0164784a1be1bf4bebdfda85f4d012bd1696a473cb119d2c0ebdb9843c5017e13a8a9aa9a27f5c4e6b9871f7b759b80e79279d1456b69854cf983e3db6bd56b58ca47e3530953bdb3183a1d394b6c28edf81149d8b34715d43dcfaa1850babb389ad906bd748cef19c23d18ed54bd37ac29ccb247c3c876b5ca5022ac345bd87cc3b6404222fc2f5b81b8fcdf1a8ba150febb24ec01a4fff956646e7f6ce195e61a7f8409e83af8a6349cd61a8aba546bbd41687ef6dcf7f8e0ad603f099ef20d36b5deb2c519a4c2dba1f7667a28318bd5776f8d5bec7161cddbdc8385773eb818857e5ed959dd8f7ac07d2cdd4aba18b89bd89c8380289bc53ecd4ea24158a20792a410c3d989c0822c13a8eac47982ac566f716ed88be82bc9f0d89d38a3bba5e2cd00575c29a5384ef53400cdb531df0139b2296305d53bcd16abe1c0f2a43b7424c4ef7913e75f528dcbf5578ebdccf4cf262c1e0e302568a697590cd36266b065f670bb0f5eedab88a21f05195536e85426270d1911b21ee5ced9cb1fbf16d04a7cf496a4ea8a1db5d8f3c331cb4f699489fa48c15e1e0cf69d6041970a8bf82ee129ff552a2cb6c0becad26e068e66a07b9860c88a4d1ccd981b3d167cfa764b87209701817db4f81724c0a54e4ecae58671d4f2d241d4c7664189a80073b949500c06cbcad29714ce36b82a6ad722a993363a72ef4f8bcbd051677de3543c57238fc58b351e7cec09ac8d9a38c60c64b515580f6b9f15d48767259e05cdb8f185497507704b1046ef4c766c9ecbf36ac96b8770be321b37645862f32e537f67a793857e723ab796cc1a689dd9daaa058c44763500085f243daeaf256530bd6afb6c2e169f78094fe854da82d40e7b8d1125b61fed494e66af735e51de23aca8b68696d2561806c332c4a6355f3a3ac469f2af21a46b11676f7b6565212367da04060e1bd568c10cd3c81abbf35118deabad15d51a0b49e9268dcc609af3df87024f84b61ecee0c5b24ec494eacd3e7db80a1cf65b50f2ae83eac7729452e7da92ffaba1c1b86df3b66d8a2b49ccba7256a0d0dcd2654dd780397dd9c46668688058ad0ea9c7dce58b59fe27ee365d4cceabb766efcbb11bd6151965a2864d82d1dc18aa0e4681449e299a0ab816aa10c1215093368cc86bd8266ab6c58a7314a71d54f6c0288f65c2283225dc733af7e7bb3d1b272789417635e989ea85d52c6e168b1db742c7a0668f1791e1caab0506435b05dbd9d50ab4e70e32c7a321ed0e8179a8228ca6ed29b0a1fe88d09aed4b1fa19a7e27801afaaab867760a1876fcb3f9273dc0ae063c3ad42d5197e29df13bfc59dc601d8bb14aebf13b9e369baab729a59e70d55798777d9aeb2fbfb5f199973b7daf549abea6aef74b975cc643e68e") ironclad-0.57/testing/test-vectors/xchacha.testvec000066400000000000000000000137141420372057600223710ustar00rootroot00000000000000(:stream-nonce-mode-test #h"0000000000000000000000000000000000000000000000000000000000000000" #h"000000000000000000000000000000000000000000000000" #h"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" #h"bcd02a18bf3f01d19292de30a7a8fdaca4b65e50a6002cc72cd6d2f7c91ac3d5728f83e0aad2bfcf9abd2d2db58faedd65015dd83fc09b131e271043019e8e0f789e9689e5208d7fd9e1f3c5b5341f48ef18a13e418998addadd97a3693a987f8e82ecd5c1433bfed1af49750c0f1ff29c4174a05b119aa3a9e8333812e0c0fea49e1ee0134a70a9d49c24e0cbd8fc3ba27e97c3322ad487f778f8dc6a122fa59cbe33e778ea2e50bb5909c9971c4fec2f93523f77892d17caa58167dec4d6c729147d8f40af1b5123ac815b0d778b9d8037090f0eb4cb8f008ffa2e3974be0fc7b3fb963e12ffb63eecf14f6d13715c4532875b80a309f3cbe445b19f490384c8abd364e3ae560556d1e13b6989bce2058b3b7dd8034a4b40cceb90416fb6fb4615c6ad82413d39a8badd6336b7a3d9c268c59e9c6531e35665db80d42de8b4a5a6622687954ca3c598a9296c5ad7b6dd206fb52baeaa00fff10404c1db076ab2c3bd11c27d31b1dbe4fafb4fc648a44d427717bf9e6df942c2a5888fee8d3f04f45cfb5cc32c19b005e7ed06fed08bcb07659d6156efe58bb50f6ff496b49c5b33ccdf584007f6778435cd446bab8a44d795fc703bdc6d67e2c8b19bf05ebfae5f8d99a04b6f574145b49a16597e94d40845b3504b60f1363beddaa933a4b9fa42ba11fc56840d73a95bf402baf04586800cb509ab993ce92bb164379565c2") (:stream-nonce-mode-test #h"bcd02a18bf3f01d19292de30a7a8fdaca4b65e50a6002cc72cd6d2f7c91ac3d5" #h"728f83e0aad2bfcf9abd2d2db58faedd65015dd83fc09b13" #h"c8abd364e3ae560556d1e13b6989bce2058b3b7dd8034a4b40cceb90416fb6fb4615c6ad82413d39a8badd6336b7a3d9c268c59e9c6531e35665db80d42de8b4a5a6622687954ca3c598a9296c5ad7b6dd206fb52baeaa00fff10404c1db076ab2c3bd11c27d31b1dbe4fafb4fc648a44d427717bf9e6df942c2a5888fee8d3f04f45cfb5cc32c19b005e7ed06fed08bcb07659d6156efe58bb50f6ff496b49c5b33ccdf584007f6778435cd446bab8a44d795fc703bdc6d67e2c8b19bf05ebfae5f8d99a04b6f574145b49a16597e94d40845b3504b60f1363beddaa933a4b9fa42ba11fc56840d73a95bf402baf04586800cb509ab993ce92bb164379565c2" #h"e17cdbaa8708dd66fb48199b4f99fb51f78dacc8a0a3da8173e5ac7f45fb37ecaa6d58503e91e3c7c30dd120b2c86125b4148a140e201b6c44fb4af2d6f58fc6fdda9d2dafbf21caa2ad98e737e77d2fa509d43898a981d9ce966a9fd9ec9f8a41e330d59bf8c9bb16bc4ece4b0136edefa9e2df15e1177ac702944026f949f0218b845f9888dd83cc3bb42a8fb3f4af9b59c0fa3b9e46f21a9854e88c05f6b9ea6149b460704789c17c6b9d9d4b61cbea31cf2b7fa8ae0e4295d5fc94e697015e6f454eec23c1febbbfc7e7cee7d42112650e025e4007168dec2fdfd65e5a145f182dea37213efc58e0fcc5d951adec2090b39edbd95cbf624683bc04ec9763") (:stream-nonce-mode-test #h"a5092b2a88596eafc9216518757f5d6f261aeb946de0b2bd43b5bb9d441efbe9" #h"272613af7f815e48a2c4611743be8669d972fd4652b00495" #h"65bf33a9dd2e920455a5b3d427121dc9d67ee1193c678215d97f5c2b2f60c1951ff43efd22d1017776b54c9dc769679de748b623af383989b795b4e7f5757c1469ba118c8b130302c84f9f8fb8062c9f4ee2c3fe1afc87d1913bb886b1349a1aefaca67a" #h"149a216993547a05f5e93faf80f7fa9ced983b3d60a6535b749a9325adf36f5af37e26d4e8f5223062e609f12bdae16e30c14eaaa2349fba5ace431df700e917f96b7809a5310bfe388c18a5ad50d061ca7af80658adb746e2959497194cb510c31ba3bb") (:keystream-test #h"81aaf9091a63707b9bb61856bd220c8b795df5c61617960ec06aed6fb28ef8fb" #h"a8f09383ae319e8f607eed2dd9fa59f8aadae8839319ffee" #h"92b51e2bea1320b909cca2669db0cb9eea5b89cb9bd80fb3be2a35bb5b9f4400a92a85215948a5ad43f45ce9dd128c34494d050ecd33b3df193fd1cefb15932a7b0216c943c50f48ca06f1b9a26e637203c78e400200968cc4368911ae56d661556e432d72f316dbe04d402952aaa8c48fd1e09f7cab48e21be8c49c2460b6b68d9f608b9c109c5ff909cd64dcf691e2344f8ad2bdcaceb9f2680080ad8da0d9e5b3a6954a0ca9a9305b7acb6f39fffd5ceffa58ad3d3b1063c78b29d0aca39a158181ece7fccae96129aa5ef13f28698ff00076ac853002953555deceddf9ebb10dfe5fefb0c869e5ae2a7a86ed2bcb16a63aec9ecade78aa02a5ef91d76a52a344e1cce405c23569cb424080e1c31aebce0461d470703643b277289badd30533bf37a33fdbe7ba81168269bb935abcaa81379308fbccdc27f77dc623f7ac476a0e63fb9de9edd8d2b9f74c61a69fb922b0c4d46ddcea153e0b9ce0003813602bbe664ae1a7cc9455b5492dcf927eaeb7bba02fa96863f176e7459d21fd65f88547f538f9ab35e75ae51f1d8bec8e99b18734b2a877ec28ec9e0a06bef50cd9d3118f2f99e19dd3acf4239866508518e30d11bbb4dd5b1a9b22345dcf410995b8fe6d3d4f18474cc4d087ffd6b0aec455c23b59b26d6cec5c93feeab27cb4c7f0696946462f77cf8996ad4f0ee5e4fcb1c8037a1e666f3bc1d70f39ac0634c346a214fbd93cf0b4d18fde816dc744df700235fc705a7a42c4f34cebea3ff137e25c7ea8c547109fa820704275470970be92e90acc2830c61795df255dfa3c0ef4a9468f9f32217e3a3acf3194acf190ef701c5ab5ac244e84220d6f911dff826a6e13ef8ab3920fb379017f9b6e7dff7fac7114565788ddc3ce0fc452927f09fdaa2719cd8a98c686a1a7bca48f64ee2042ef95fa3a72e517da56ee8cfb902857a056195b8e8587c39b8018e4b1e47352160d97ee86f84646b9ef2181c48debe01bd15260b248892f9a0baee0b322da14a8ec7a6cec7a4b113c9b01cc41986298cc2431d2274cfa7acd2326f98df69e12c2935265206282210ab6e7e37d8236bf777bd68357a156d226059b612a467940036c3e57c5bfc9b14935c63d874189a58eb1890c105d652cdcb5fa7d3bd167f72a65c3561a05ccbf25eaeb8cf6dd7fcff0bd67dd5619db439409c5c0eee0f226bcc9c6c90c697c480155fc01fa9ca2b01f8264c0bb1d64bc79779d1c8965af2a3608b0c742d523a097c16f486aecf3d0adcbd984488f3d97bae4e71334514b90999f2eb7da8608eec14b7758f9218c66fc418df81ce0438d981f8e8a0fb7cf16b1acbca65cfe8a2104254ec2596d9bd44695e648bc93b2208607825460486c3cb67d6c5b71786442b2f9e72d5c9292b20b09565d2ade74") ironclad-0.57/testing/test-vectors/xor.testvec000066400000000000000000000004141420372057600215730ustar00rootroot00000000000000(:ecb-mode-test #h"00" #h"1234567887654321" #h"1234567887654321") (:ecb-mode-test #h"0000" #h"1234567887654321" #h"1234567887654321") (:ecb-mode-test #h"01" #h"1234567887654321" #h"1335577986644220") (:ecb-mode-test #h"0102" #h"1234567887654321" #h"1336577a86674223") ironclad-0.57/testing/test-vectors/xsalsa20-12.testvec000066400000000000000000000073541420372057600226520ustar00rootroot00000000000000(:stream-nonce-mode-test #h"a5092b2a88596eafc9216518757f5d6f261aeb946de0b2bd43b5bb9d441efbe9" #h"272613af7f815e48a2c4611743be8669d972fd4652b00495" #h"65bf33a9dd2e920455a5b3d427121dc9d67ee1193c678215d97f5c2b2f60c1951ff43efd22d1017776b54c9dc769679de748b623af383989b795b4e7f5757c1469ba118c8b130302c84f9f8fb8062c9f4ee2c3fe1afc87d1913bb886b1349a1aefaca67a" #h"ac92195d9f50a2dc3e529b9b0e8b99cb3c1dfaac536aebe7c021a2b88a90e5f1d8a360dae00e527187626b2bfcb16b62580d5d2d3d99614a3fda5645137e302f9f866ae48f86e2ee9cfce43b51087fec01a678fc97b4b2bafc09bb70fa811bf4e03472e9") (:stream-nonce-mode-test #h"b9488d5aeafc13be15ff455da618c26f3d6e5d55d74df7506fd54d3d57df7011" #h"27fd6b11f97ecf0f7d156c242d2e936b9df0c0743eb7c4ad" #h"8c11eae4f05af51857602950dff95f5c0ecc803bfa14a69704660b421ecfefaae0d98ed13383e98ae412dbc30b3a1f1906a05501b4fb98b862a4fb8073ea2a54c4b925f73c0e8220205de32c9703459ea39a9f5796370ff8db0a784ff5a2a3b95bc8b098" #h"1bd962d5a3b40a3f03940ae956eaa16f6809077081dfc386d8cb60c5f5d27b44d2a0b04c98629dc1f392d6488882ffefae8336077f54b9f8700e476175f4e53184ad0ac7c23eb935cee7e55d47fd07bf3406877223237a2619659e59d7f0f28a96f43133") (:stream-nonce-mode-test #h"c4f2d0462f908cd22ea8477fa255ecbdf0a853a912f1e28e62c80ce601f811c5" #h"eae10b197198eb9f40321ee2870b9f77b3f321c6e4035446" #h"cc602dcd583e92421f9d5b9035463076784e58ff59f8770deb98d3cf9b271667884334e081c623a0647e3099c5600f3daf683d0860b4154b4ce81ae710304f98738378f44a9b94ae1ac547df25571cd4bf59dd1f0df26a59db8441ebb590832813fb1d5d" #h"8d268eca43090d7136faa11d49faa08f72952a15301f07c4e7c41c237d14411cef6beec2f0125385dce2b9de41125d7419b90d5f62cd877872641051165ecdfdeee73586217a409aaa42ecfc2ac456bf1f3e87d2df6745c6eb455a8f7575a26b1dd6a9f4") (:keystream-test #h"beb446e945c8871dd54a511c2316efc8a852e804cd5fb30c0ed57370eb6e7e5f" #h"88988068018676b18bf6c8c6a090a5355d799479c4793249" #h"f3f662787256c6694aea431eb5621da39856ad2e5797a39553fac5486da788bbb4fcfe79539261a1c20d869b32617129c5dacf98892e086df9f50b05f18ef6b960557d0b84f794b8c9e2a98de2e527e35fa400f443936536fbdfc910d2c9d561b58f07833bc1a7cc6528a7933842f1bb86401b2aec4d251d434d7a4effcf4cea0953495bfaa7e9d114c65d199ca0f314c4bbef4b028d28f832f495030723d008a136132e2a1aa6929a997c4e1325f6efcb280bdd97b9a5879045c5dc667ec492298bc569c8b45ee146bf97ddb4a9faf4ee002faf3ecf791ab4a2457410eb5b01961f02762c9aa0623da896bbd8803ad208cda51fb63d5472d1b1723372ff2a5f2295714ece93cd7d407ad5fa2a2921fe930ee37993511a2045b7a9d84db3547d71e2b94eeee07366be967c78b0daee7a01f75036dabdf333db39daad459faca5ce8a893f572ba7952a915026f0980849b51b7236a50cceba8dc640b0371c93df53fb2fc69d5f0d9f53ca5a4bbffce69b034bcc81b54060ed38c5742445c5ffe2566c33f47df324a1fd0f4f8de7502798893e7a0b49cc89d1f49c143cdb478b995838018274f2b858b4e2b8c479805fddde57cdd071220d7691b959c7830590e91c97fb83f86113dfb100d1e288a53517c24a1bd5583f5be1afa25d88da63ce7f6757474f1b7abd8b37826d185ff4efd4f7719a0b2977e3ad0ed71d57f94145b941735848c42a055440e9fe90ce15277421c9101ddbe689baac2d4d3b435321da405fad8b7787644fa6eb66da62973c62f849eda20a0b3f23885533e9f3080f1870937d0ac827dea8a59785f8a88a824f6f8bafe9f663c91706aa6a2715e86c720ef2448e3ce5686152c2eb996fc5a38fda4b32b43e933efcf51b414e9e77fe09c23248980921bee969dbcc8d5e021686e027b7a90b7d74499f9c3143c55aabab8833fa2346819a466a2da1ad9111afa1eab763a67f7b1613fac72c40568a8de6d651a69998bb754fae38400522f4fa4299aaa5219a3f4090fe0ff27866741cd79c6fccefb993bb74e518aa3ee92049ff5fb573bb1c9266ac7681390d71c5f62ddca9112a65bc3e70691894113dcc6234e8e421c6c5239a8eec7380fde6030b2e6ef6c976a7d53ac6c626d58554e7dfd9cb13a2568f16fd8369b5e1bc7caa78ebcb0f6cb675270ba3d75e99047cec46f4d1e6e9cc44785104015d937b7e3836c8f44aad1cee07a41733eddb19d78b2ca2e1c98e305b618e08d87336572ff5a130cb60e6d18b83cb5eb0f9858beab9d9c6a7604c89ee7052876c9da87446257d44c2c85eef642d8279d7d0dfb5a44f8d366b19de3ba98b2cae92a4df7be4d8e0fa1df590138dfd5750c851b774ab262b9992fab33412d7c0d2e142c164faf811c70bc022e2e2309f24") ironclad-0.57/testing/test-vectors/xsalsa20-8.testvec000066400000000000000000000073541420372057600225770ustar00rootroot00000000000000(:stream-nonce-mode-test #h"a5092b2a88596eafc9216518757f5d6f261aeb946de0b2bd43b5bb9d441efbe9" #h"272613af7f815e48a2c4611743be8669d972fd4652b00495" #h"65bf33a9dd2e920455a5b3d427121dc9d67ee1193c678215d97f5c2b2f60c1951ff43efd22d1017776b54c9dc769679de748b623af383989b795b4e7f5757c1469ba118c8b130302c84f9f8fb8062c9f4ee2c3fe1afc87d1913bb886b1349a1aefaca67a" #h"4482d6a45581463060b608a2900fff3936cf973687779116793e5de426004e8894ea71b08a6463670c70a2fe467881835d3bab3b8188e0019b9391bf3ff1ca40e92d7bdd989cb0e2f88fae37da1214d29981fef1e53e06db906eca4ecc3584ed7e65b8bf") (:stream-nonce-mode-test #h"b9488d5aeafc13be15ff455da618c26f3d6e5d55d74df7506fd54d3d57df7011" #h"27fd6b11f97ecf0f7d156c242d2e936b9df0c0743eb7c4ad" #h"8c11eae4f05af51857602950dff95f5c0ecc803bfa14a69704660b421ecfefaae0d98ed13383e98ae412dbc30b3a1f1906a05501b4fb98b862a4fb8073ea2a54c4b925f73c0e8220205de32c9703459ea39a9f5796370ff8db0a784ff5a2a3b95bc8b098" #h"39863e9afcc75ca729e061e5235266e106f79b87fa0da412dc5f8384bff76733ad6d3e723bb5ea177c4f6241c0cf859244b3513ade74ba1580ad8348691929043db2b71bd5dc5ca7c7495a9ddf6aa1f72bc15b6b1fbf534331056741fee8d3649396c6f6") (:stream-nonce-mode-test #h"c4f2d0462f908cd22ea8477fa255ecbdf0a853a912f1e28e62c80ce601f811c5" #h"eae10b197198eb9f40321ee2870b9f77b3f321c6e4035446" #h"cc602dcd583e92421f9d5b9035463076784e58ff59f8770deb98d3cf9b271667884334e081c623a0647e3099c5600f3daf683d0860b4154b4ce81ae710304f98738378f44a9b94ae1ac547df25571cd4bf59dd1f0df26a59db8441ebb590832813fb1d5d" #h"3d9c839079d58894e110cd19e04b7691d23f240ac1a51cbc03b450d7fa2be749159fd7662fd62ff8fec2af7471eb7f2838f017d38da99d2d6dc2e269446d9f86c2cc5d20c41126910a3a00449b750a8a276e5a23a557809e819fd313fedd99c74dfed565") (:keystream-test #h"31de31589d867203ba2f1be7c17b13b66543732c8a4cf20585b78b821e8e1c24" #h"8e8762bcaf4bb34e4ccdca5169cf411832a0836e83fdc13c" #h"2968c1b91398711bc2c9ad10a2e392325655a7453e6d35539b9682f82a1f5130b670c2772b7ef535cfeeec545cce9224470ee35220b328930aaec5572cb9d5426f54aecdc0570e7d159a04c06f974e1f7afa6dd34ad6e687f1bb4c31fdf614879c0efba4d07cdda78a69cad66c5e982dab046a580eb0bb47f339426e7bbedbe938517b3af10a411ce55bd804972b7dbea1ae63af33da559260536f921b3c2b3f050a9cc80c58b90ebf1be4216756cd3be566fa86e8166810963dbae5ff42df40812cd4897aff90e4f46254d3636b69b1d863e0fc5c67abd8c5cdbf9bbe3fc1ceb57489eda9d9335ec76c3d997f8605df5b03b9c6024f3f4df37bcbd1a70eba25f1d8a615e3a380f82a800b3536cbb6378fe36f1fb7a768072bb2c166e64623d01c98fdfa339bbc44b8652f07374ed341de86f383f7773eec56b0066f05824584a7fdb24d24b3ba286078b218039c17166e1509fb6fafae4b6930a6a4c877d7768f104023eed6a63a0d35d3c537f6114159bfd6926fe2973c9545d9c76cb7630e9256c785f3d00a2a3797c6769d54fe618b74be46ee0cf6f14b0877e2c5aab2158e13b092689c047115eb9cd9ba21b103ca4686680419b845227416d575e7e29af3dfc428fdef949997ff3eb954d9f61d341bc9f7e44e09545d842061704a94929ce3d79f03a1960083a02ad03e5918fc4f9b5bd8f0c7fed92d58d1e1c8a424b1d2ff073ba0baa05522fb86b104cd31122e4e39d5b6e7e61bd6e7f6075462c669ff56b22c713f79685f0f440ed934d77a21874082926d8e51a772ff73a385be1058c4aeb98d5cc5f8357c648f7079ce44a8ffd340a5a0d79544bc8fbbf413edce11d22eba21ee2300a4d5fdb8067aa033d75b5054928ac9b52fa6eff76b47560c8e55a608364f9a998c9f9152cdeef11347ef081634f880bdea7b70822789843fad0264d88b9b2fc4effc6aae30e337f569d01d8662bc30e72ecbea6a9126b0bbd19c750ab5a97aeaef2346e03969645ba8a4a54176b4058c96f3a381755714b9801d6df134c208ccf0ad0fe77b437496e352d708113c3287c95a9d07c01462f5e7d6163a0c5091ecb3ffa1668775f5265b20c857da4e462256f2e06cac83a231f24637818608716958ba82192bec99ec595e8914d6eb97766e73d396d464d86af9d21870e9fef717e2e86b581e73ed059687a34e3f00b924fb24b8e2f9059dfe3e3c4309d41d989d4d5a54d586045d81fb8d468bb616b0af5b1fbd6a0d8eef50b74edbba1ffbdcf0ca4a036afdb2f7631300a6e1452402a74108bb274b96c1aa478b28679c6ea31a540d09bb382010a67845ac4f62e10d4f450afbd777f7b31752fc3187a9746146043af39c1fc61c55c8a25eca8585ddd2faeee00354d7c05efa237a90f57a50b9") ironclad-0.57/testing/test-vectors/xsalsa20.testvec000066400000000000000000000323441420372057600224270ustar00rootroot00000000000000(:stream-nonce-mode-test #h"a6a7251c1e72916d11c2cb214d3c252539121d8e234e652d651fa4c8cff88030" #h"9e645a74e9e0a60d8243acd9177ab51a1beb8d5a2f5d700c" #h"093c5e5585579625337bd3ab619d615760d8c5b224a85b1d0efe0eb8a7ee163abb0376529fcc09bab506c618e13ce777d82c3ae9d1a6f972d4160287cbfe60bf2130fc0a6ff6049d0a5c8a82f429231f008082e845d7e189d37f9ed2b464e6b919e6523a8c1210bd52a02a4c3fe406d3085f5068d1909eeeca6369abc981a42e87fe665583f0ab85ae71f6f84f528e6b397af86f6917d9754b7320dbdc2fea81496f2732f532ac78c4e9c6cfb18f8e9bdf74622eb126141416776971a84f94d156beaf67aecbf2ad412e76e66e8fad7633f5b6d7f3d64b5c6c69ce29003c6024465ae3b89be78e915d88b4b5621d" #h"b2af688e7d8fc4b508c05cc39dd583d6714322c64d7f3e63147aede2d9534934b04ff6f337b031815cd094bdbc6d7a92077dce709412286822ef0737ee47f6b7ffa22f9d53f11dd2b0a3bb9fc01d9a88f9d53c26e9365c2c3c063bc4840bfc812e4b80463e69d179530b25c158f543191cff993106511aa036043bbc75866ab7e34afc57e2cce4934a5faae6eabe4f221770183dd060467827c27a354159a081275a291f69d946d6fe28ed0b9ce08206cf484925a51b9498dbde178ddd3ae91a8581b91682d860f840782f6eea49dbb9bd721501d2c67122dea3b7283848c5f13e0c0de876bd227a856e4de593a3") (:stream-nonce-mode-test #h"9e1da239d155f52ad37f75c7368a536668b051952923ad44f57e75ab588e475a" #h"af06f17859dffa799891c4288f6635b5c5a45eee9017fd72" #h"feac9d54fc8c115ae247d9a7e919dd76cfcbc72d32cae4944860817cbdfb8c04e6b1df76a16517cd33ccf1acda9206389e9e318f5966c093cfb3ec2d9ee2de856437ed581f552f26ac2907609df8c613b9e33d44bfc21ff79153e9ef81a9d66cc317857f752cc175fd8891fefebb7d041e6517c3162d197e2112837d3bc4104312ad35b75ea686e7c70d4ec04746b52ff09c421451459fb59f" #h"2c261a2f4e61a62e1b27689916bf03453fcbc97bb2af6f329391ef063b5a219bf984d07d70f602d85f6db61474e9d9f5a2deecb4fcd90184d16f3b5b5e168ee03ea8c93f3933a22bc3d1a5ae8c2d8b02757c87c073409052a2a8a41e7f487e041f9a49a0997b540e18621cad3a24f0a56d9b19227929057ab3ba950f6274b121f193e32e06e5388781a1cb57317c0ba6305e910961d01002f0") (:stream-nonce-mode-test #h"d5c7f6797b7e7e9c1d7fd2610b2abf2bc5a7885fb3ff78092fb3abe8986d35e2" #h"744e17312b27969d826444640e9c4a378ae334f185369c95" #h"7758298c628eb3a4b6963c5445ef66971222be5d1a4ad839715d1188071739b77cc6e05d5410f963a64167629757" #h"27b8cfe81416a76301fd1eec6a4d99675069b2da2776c360db1bdfea7c0aa613913e10f7a60fec04d11e65f2d64e") (:stream-nonce-mode-test #h"737d7811ce96472efed12258b78122f11deaec8759ccbd71eac6bbefa627785c" #h"6fb2ee3dda6dbd12f1274f126701ec75c35c86607adb3edd" #h"501325fb2645264864df11faa17bbd58312b77cad3d94ac8fb8542f0eb653ad73d7fce932bb874cb89ac39fc47f8267cf0f0c209f204b2d8578a3bdf461cb6a271a468bebaccd9685014ccbc9a73618c6a5e778a21cc8416c60ad24ddc417a130d53eda6dfbfe47d09170a7be1a708b7b5f3ad464310be36d9a2a95dc39e83d38667e842eb6411e8a23712297b165f690c2d7ca1b1346e3c1fccf5cafd4f8be0" #h"6724c372d2e9074da5e27a6c54b2d703dc1d4c9b1f8d90f00c122e692ace7700eadca942544507f1375b6581d5a8fb39981c1c0e6e1ff2140b082e9ec016fce141d5199647d43b0b68bfd0fea5e00f468962c7384dd6129aea6a3fdfe75abb210ed5607cef8fa0e152833d5ac37d52e557b91098a322e76a45bbbcf4899e790618aa3f4c2e5e0fc3de93269a577d77a5502e8ea02f717b1dd2df1ec69d8b61ca") (:stream-nonce-mode-test #h"760158da09f89bbab2c99e6997f9523a95fcef10239bcca2573b7105f6898d34" #h"43636b2cc346fc8b7c85a19bf507bdc3dafe953b88c69dba" #h"d30a6d42dff49f0ed039a306bae9dec8d9e88366cc19e8c3642fd58fa0794ebf8029d949730339b0823a51f0f49f0d2c71f1051c1e0e2c86941f172789cdb1b0107413e70f982ff9761877bb526ef1c3eb1106a948d60ef21bd35d32cfd64f89b79ed63ecc5cca56246af736766f285d8e6b0da9cb1cd21020223ffacc5a32" #h"c815b6b79b64f9369aec8dce8c753df8a50f2bc97c70ce2f014db33a65ac5816bac9e30ac08bdded308c65cb87e28e2e71b677dc25c5a6499c1553555daf1f55270a56959dffa0c66f24e0af00951ec4bb59ccc3a6c5f52e0981647e53e439313a52c40fa7004c855b6e6eb25b212a138e843a9ba46edb2a039ee82a263abe") (:stream-nonce-mode-test #h"27ba7e81e7edd4e71be53c07ce8e633138f287e155c7fa9e84c4ad804b7fa1b9" #h"ea05f4ebcd2fb6b000da0612861ba54ff5c176fb601391aa" #h"e09ff5d2cb050d69b2d42494bde5825238c756d6991d99d7a20d1ef0b83c371c89872690b2fc11d5369f4fc4971b6d3d6c078aef9b0f05c0e61ab89c025168054defeb03fef633858700c58b1262ce011300012673e893e44901dc18eee3105699c44c805897bdaf776af1833162a21a" #h"a23e7ef93c5d0667c96d9e404dcbe6be62026fa98f7a3ff9ba5d458643a16a1cef7272dc6097a9b52f35983557c77a11b314b4f7d5dc2cca15ee47616f861873cbfed1d32372171a61e38e447f3cf362b3abbb2ed4170d89dcb28187b7bfd206a3e026f084a7e0ed63d319de6bc9afc0") (:stream-nonce-mode-test #h"6799d76e5ffb5b4920bc2768bafd3f8c16554e65efcf9a16f4683a7a06927c11" #h"61ab951921e54ff06d9b77f313a4e49df7a057d5fd627989" #h"472766" #h"8fd7df") (:stream-nonce-mode-test #h"f68238c08365bb293d26980a606488d09c2f109edafa0bbae9937b5cc219a49c" #h"5190b51e9b708624820b5abdf4e40fad1fb950ad1adc2d26" #h"47ec6b1f73c4b7ff5274a0bfd7f45f864812c85a12fbcb3c2cf8a3e90cf66ccf2eacb521e748363c77f52eb426ae57a0c6c78f75af71284569e79d1a92f949a9d69c4efc0b69902f1e36d7562765543e2d3942d9f6ff5948d8a312cff72c1afd9ea3088aff7640bfd265f7a9946e606abc77bcedae6bddc75a0dba0bd917d73e3bd1268f727e0096345da1ed25cf553ea7a98fea6b6f285732de37431561ee1b3064887fbcbd71935e02" #h"36160e88d3500529ba4edba17bc24d8cfaca9a0680b3b1fc97cf03f3675b7ac301c883a68c071bc54acdd3b63af4a2d72f985e51f9d60a4c7fd481af10b2fc75e252fdee7ea6b6453190617dcc6e2fe1cd56585fc2f0b0e97c5c3f8ad7eb4f31bc4890c03882aac24cc53acc1982296526690a220271c2f6e326750d3fbda5d5b63512c831f67830f59ac49aae330b3e0e02c9ea0091d19841f1b0e13d69c9fbfe8a12d6f30bb734d9d2") (:stream-nonce-mode-test #h"45b2bd0de4ed9293ec3e26c4840faaf64b7d619d51e9d7a2c7e36c83d584c3df" #h"546c8c5d6be8f90952cab3f36d7c1957baaa7a59abe3d7e5" #h"5007c8cd5b3c40e17d7fe423a87ae0ced86bec1c39dc07a25772f3e96dabd56cd3fd7319f6c9654925f2d87087a700e1b130da796895d1c9b9acd62b266144067d373ed51e787498b03c52faad16bb3826fa511b0ed2a19a8663f5ba2d6ea7c38e7212e9697d91486c49d8a000b9a1935d6a7ff7ef23e720a45855481440463b4ac8c4f6e7062adc1f1e1e25d3d65a31812f58a71160" #h"8eacfba568898b10c0957a7d44100685e8763a71a69a8d16bc7b3f88085bb9a2f09642e4d09a9f0ad09d0aad66b22610c8bd02ff6679bb92c2c026a216bf425c6be35fb8dae7ff0c72b0efd6a18037c70eed0ca90062a49a3c97fdc90a8f9c2ea536bfdc41918a7582c9927fae47efaa3dc87967b7887dee1bf071734c7665901d9105dae2fdf66b4918e51d8f4a48c60d19fbfbbcba") (:stream-nonce-mode-test #h"fe559c9a282beb40814d016d6bfcb2c0c0d8bf077b1110b8703a3ce39d70e0e1" #h"b076200cc7011259805e18b304092754002723ebec5d6200" #h"6db65b9ec8b114a944137c821fd606be75478d928366d5284096cdef782fcff7e8f59cb8ffcda979757902c5ffa6bc477ceaa4cb5d5ea76f94d91e833f823a6bc78f1055dfa6a97bea8965c1cde67a668e001257334a585727d9e0f7c1a06e88d3d25a4e6d9096c968bf138e116a3ebeffd4bb4808adb1fd698164ba0a35c709a47f16f1f4435a2345a9194a00b95abd51851d505809a6077da9baca5831afff31578c487ee68f2767974a98a7e803aac788da98319c4ea8eaa3d394855651f484cef543f537e35158ee29" #h"4dce9c8f97a028051b0727f34e1b9ef21f06f0760f36e71713204027902090ba2bb6b13436ee778d9f50530efbd7a32b0d41443f58ccaee781c7b716d3a96fdec0e3764ed7959f34c3941278591ea033b5cbadc0f1916032e9bebbd1a8395b83fb63b1454bd775bd20b3a2a96f951246ac14daf68166ba62f6cbff8bd121ac9498ff8852fd2be975df52b5daef3829d18eda42e715022dcbf930d0a789ee6a146c2c7088c35773c63c06b4af4559856ac199ced86863e4294707825337c5857970eb7fddeb263781309011") (:stream-nonce-mode-test #h"0ae10012d7e56614b03dcc89b14bae9242ffe630f3d7e35ce8bbb97bbc2c92c3" #h"f96b025d6cf46a8a12ac2af1e2aef1fb83590adadaa5c5ea" #h"ea0f354e96f12bc72bbaa3d12b4a8ed879b042f0689878f46b651cc4116d6f78409b11430b3aaa30b2076891e8e1fa528f2fd169ed93dc9f84e24409eec2101daf4d057be2492d11de640cbd7b355ad29fb70400fffd7cd6d425abeeb732a0eaa4330af4c656252c4173deab653eb85c58462d7ab0f35fd12b613d29d473d330310dc323d3c66348bbdbb68a326324657cae7b77a9e34358f2cec50c85609e73056856796e3be8d62b6e2fe9f953" #h"e8abd48924b54e5b80866be7d4ebe5cf4274cafff08b39cb2d40a8f0b472398aedc776e0793812fbf1f60078635d2ed86b15efcdba60411ee23b07233592a44ec31b1013ce8964236675f8f183aef885e864f2a72edf4215b5338fa2b54653dfa1a8c55ce5d95cc605b9b311527f2e3463ffbec78a9d1d65dabad2f338769c9f43f133a791a11c7eca9af0b771a4ac32963dc8f631a2c11217ac6e1b9430c1aae1ceebe22703f429998a8fb8c641") (:stream-nonce-mode-test #h"082c539bc5b20f97d767cd3f229eda80b2adc4fe49c86329b5cd6250a9877450" #h"845543502e8b64912d8f2c8d9fffb3c69365686587c08d0c" #h"a96bb7e910281a6dfad7c8a9c370674f0ceec1ad8d4f0de32f9ae4a23ed329e3d6bc708f876640a229153ac0e7281a8188dd77695138f01cda5f41d5215fd5c6bdd46d982cb73b1efe2997970a9fdbdb1e768d7e5db712068d8ba1af6067b5753495e23e6e1963af012f9c7ce450bf2de619d3d59542fb55f3" #h"835da74fc6de08cbda277a7966a07c8dcd627e7b17adde6d930b6581e3124b8baad096f693991fedb1572930601fc7709541839b8e3ffd5f033d2060d999c6c6e3048276613e648000acb5212cc632a916afce290e20ebdf612d08a6aa4c79a74b070d3f872a861f8dc6bb07614db515d363349d3a8e3336a3") (:stream-nonce-mode-test #h"3d02bff3375d403027356b94f514203737ee9a85d2052db3e4e5a217c259d18a" #h"74216c95031895f48c1dba651555ebfa3ca326a755237025" #h"0d4b0f54fd09ae39baa5fa4baccf2e6682e61b257e01f42b8f" #h"16c4006c28365190411eb1593814cf15e74c22238f210afc3d") (:stream-nonce-mode-test #h"ad1a5c47688874e6663a0f3fa16fa7efb7ecadc175c468e5432914bdb480ffc6" #h"e489eed440f1aae1fac8fb7a9825635454f8f8f1f52e2fcc" #h"aa6c1e53580f03a9abb73bfdadedfecada4c6b0ebe020ef10db745e54ba861caf65f0e40dfc520203bb54d29e0a8f78f16b3f1aa525d6bfa33c54726e59988cfbec78056" #h"02fe84ce81e178e7aabdd3ba925a766c3c24756eefae33942af75e8b464556b5997e616f3f2dfc7fce91848afd79912d9fb55201b5813a5a074d2c0d4292c1fd441807c5") (:stream-nonce-mode-test #h"053a02bedd6368c1fb8afc7a1b199f7f7ea2220c9a4b642a6850091c9d20ab9c" #h"c713eea5c26dad75ad3f52451e003a9cb0d649f917c89dde" #h"8f0a8a164760426567e388840276de3f95cb5e3fadc6ed3f3e4fe8bc169d9388804dcb94b6587dbb66cb0bd5f87b8e98b52af37ba290629b858e0e2aa7378047a26602" #h"516710e59843e6fbd4f25d0d8ca0ec0d47d39d125e9dad987e0518d49107014cb0ae405e30c2eb3794750bca142ce95e290cf95abe15e822823e2e7d3ab21bc8fbd445") (:stream-nonce-mode-test #h"5b14ab0fbed4c58952548a6cb1e0000cf4481421f41288ea0aa84add9f7deb96" #h"54bf52b911231b952ba1a6af8e45b1c5a29d97e2abad7c83" #h"37fb44a675978b560ff9a4a87011d6f3ad2d37a2c3815b45a3c0e6d1b1d8b1784cd468927c2ee39e1dccd4765e1c3d676a335be1ccd6900a45f5d41a317648315d8a8c24adc64eb285f6aeba05b9029586353d303f17a807658b9ff790474e1737bd5fdc604aeff8dfcaf1427dcc3aacbb0256badcd183ed75a2dc52452f87d3c1ed2aa583472b0ab91cda20614e9b6fdbda3b49b098c95823cc72d8e5b717f2314b0324e9ce" #h"ae6deb5d6ce43d4b09d0e6b1c0e9f46157bcd8ab50eaa3197ff9fa2bf7af649eb52c68544fd3adfe6b1eb316f1f23538d470c30dbfec7e57b60cbcd096c782e7736b669199c8253e70214cf2a098fda8eac5da79a9496a3aae754d03b17c6d70d1027f42bf7f95ce3d1d9c338854e158fcc803e4d6262fb639521e47116ef78a7a437ca9427ba645cd646832feab822a208278e45e93e118d780b988d65397eddfd7a819526e") (:stream-nonce-mode-test #h"d74636e3413a88d85f322ca80fb0bd650bd0bf0134e2329160b69609cd58a4b0" #h"efb606aa1d9d9f0f465eaa7f8165f1ac09f5cb46fecf2a57" #h"f85471b75f6ec81abac2799ec09e98e280b2ffd64ca285e5a0109cfb31ffab2d617b2c2952a2a8a788fc0da2af7f530758f74f1ab56391ab5ff2adbcc5be2d6c7f49fbe8118104c6ff9a23c6dfe52f57954e6a69dcee5db06f514f4a0a572a9a8525d961dae72269b987189d465df6107119c7fa790853e063cba0fab7800ca932e258880fd74c33c784675bedad0e7c09e9cc4d63dd5e9713d5d4a0196e6b562226ac31b4f57c04f90a181973737ddc7e80f364112a9fbb435ebdbcabf7d490ce52" #h"b2b795fe6c1d4c83c1327e015a67d4465fd8e32813575cbab263e20ef05864d2dc17e0e4eb81436adfe9f638dcc1c8d78f6b0306baf938e5d2ab0b3e05e735cc6fff2d6e02e3d60484bea7c7a8e13e23197fea7b04d47d48f4a4e5944174539492800d3ef51e2ee5e4c8a0bdf050c2dd3dd74fce5e7e5c37364f7547a11480a3063b9a0a157b15b10a5a954de2731ced055aa2e2767f0891d4329c426f3808ee867bed0dc75b5922b7cfb895700fda016105a4c7b7f0bb90f029f6bbcb04ac36ac16") (:keystream-test #h"0bd10f382b14fa3af52a8e604824f662650f34423d4752ba478a350c45be3984" #h"90971bb5a9ce4cf433d720eac9318a725fca2f91df1e65b2" #h"59c48b28eb639ffed1c32afb632fcaf1a701702502c9a306493fb1590a333400f5ee3d89f51d06fe601bde70c7fad503adfe592c23f6358dace7fd0012805bc0c1588198a9b00c0dd5f4135b19b0138464869c4dc0a8fb07ff51b60f0af5590d87660a6485ca491216c9c05946dc9fec17ded81c9123db53b31cdc711eeace8d461b4863b662de724e20ee402a8205eb4ac2690994df2661a1d47ed2223008a7a7132882ba85b1d07a9c889dc82a3a3a1c22bf4633990bb120195b25fc0a6d80bef61fef03c489b7e3d8dd1719fb633650ba79024074851ccc1f8d942dccf5a10dc760a1bfdd9ae2c6e444d16c2c9ae996c29f54659a0643d4b00a531f2485c0c4945035813836075acb64ba51ef8aaaa27515d5c9034ae17dba28871351c41a15522deae508b9f1ba42898f3af798cc5058c3fdf08b6d290eea51fad0a679507d75dd0755478637312b6a3dacb63bf9d78510d881061a0d280059bd3b67e52e4e48b57987f6944f276a90f796754363955f3d34d50a680a891c013debb2387c88558f9a819dca0f5105dd70cb0cd8c5095a90f4e9439241935f52c87472a9b18b2fcd51e31e3f4080ece52a50e9abd681f2a80ac18dc17ae85e891a91a3213a26781dcdb3b107ca7212c8f1a11b5a92c2da398740c8c47ef4eb6d8e7b2f7078bdf3743443d1b23d5809ecdd30fd87953bf3dad759009d727a43eb75df2861b91d50ed0335937f7ac76eb2fcbb2697b5d318794174ca85b110e2ce1e24058f567053b2976785503790f7af7fb60285e56aac43141683c174cde8819abccb970fee48faaae1e62784290281b243ad2104c806e74544d90dead6a0a7da6c3726b4aa5fc4171b84c906f5c018a7f5c95499d9ea3f24544d65348ab0ccc2707b8841a556765136dfb1f2ebbf702856727fe42518e7f1ceee186877fe05bc894196589b287b5720a7448afc505b966f530ab522888fb8595bbb773e749f15db1890023037c322723e60a3f48ef4affe77f38bf0e8b93cf40e0c8182f39b0b3014431dd94d9426d5d7e7d3124d7c4fa43b8a93d8c631f40e2a7522c806b1d9432c88cd0c25e2a1cd3ce693b23c2ec2dc89d541ed50f6be5d8e6d2288053d000aec7f2922a6eda18408701d2acd98014699bbfd06a6d42762e3641efa665ccf7c4573b55e11dedee6886f55a7cb3e18b637490bf8e01d270779c346dea0337e2db887103ee0681b87d1fa0082d30f23f26061f78aa2e1c21cf4adfe2657e7e8730d6f843603a95d55f338156efa93f387d97c650979e787896708cef104f4047b2a433585dbfdcd9fc61c2755bf49b0fd5bdeee9d3f448efef9d255eeb226f19ec8b6d07572b38831becef61072012350610ee889af22f168add64afd9705d3860a15271440dfeba4da21ca") ironclad-0.57/testing/test-vectors/xtea.testvec000066400000000000000000001303661420372057600217360ustar00rootroot00000000000000;;; tests for XTEA (:ecb-mode-test #h"80000000000000000000000000000000" #h"0000000000000000" #h"057e8c0550151937") (:ecb-mode-test #h"40000000000000000000000000000000" #h"0000000000000000" #h"89598070902cd40e") (:ecb-mode-test #h"20000000000000000000000000000000" #h"0000000000000000" #h"5fb5b0ad37e48ad6") (:ecb-mode-test #h"10000000000000000000000000000000" #h"0000000000000000" #h"3af684a75a5147fb") (:ecb-mode-test #h"08000000000000000000000000000000" #h"0000000000000000" #h"d2f3b71258e07935") (:ecb-mode-test #h"04000000000000000000000000000000" #h"0000000000000000" #h"bb8712d8971f2da6") (:ecb-mode-test #h"02000000000000000000000000000000" #h"0000000000000000" #h"a38a09d1c9941692") (:ecb-mode-test #h"01000000000000000000000000000000" #h"0000000000000000" #h"ac6176429fe586ce") (:ecb-mode-test #h"00800000000000000000000000000000" #h"0000000000000000" #h"1c2edbad8eb5edf2") (:ecb-mode-test #h"00400000000000000000000000000000" #h"0000000000000000" #h"f6e79333a663e1af") (:ecb-mode-test #h"00200000000000000000000000000000" #h"0000000000000000" #h"0163be481b1fa595") (:ecb-mode-test #h"00100000000000000000000000000000" #h"0000000000000000" #h"55437d3bac4cbc79") (:ecb-mode-test #h"00080000000000000000000000000000" #h"0000000000000000" #h"b37d26c43061fda1") (:ecb-mode-test #h"00040000000000000000000000000000" #h"0000000000000000" #h"9db753bffb7224b2") (:ecb-mode-test #h"00020000000000000000000000000000" #h"0000000000000000" #h"f25051857fbd5653") (:ecb-mode-test #h"00010000000000000000000000000000" #h"0000000000000000" #h"adb76b56de2af0cc") (:ecb-mode-test #h"00008000000000000000000000000000" #h"0000000000000000" #h"a96996d3376b41b0") (:ecb-mode-test #h"00004000000000000000000000000000" #h"0000000000000000" #h"26292aa3168a1c8f") (:ecb-mode-test #h"00002000000000000000000000000000" #h"0000000000000000" #h"2fc8306ecfdb1600") (:ecb-mode-test #h"00001000000000000000000000000000" #h"0000000000000000" #h"1d0e78ea21f98780") (:ecb-mode-test #h"00000800000000000000000000000000" #h"0000000000000000" #h"bbc9e2812b9d2f45") (:ecb-mode-test #h"00000400000000000000000000000000" #h"0000000000000000" #h"a2f55fd5b13e7006") (:ecb-mode-test #h"00000200000000000000000000000000" #h"0000000000000000" #h"17b8f1fa6d93c9e2") (:ecb-mode-test #h"00000100000000000000000000000000" #h"0000000000000000" #h"5dfc2196e32f44e8") (:ecb-mode-test #h"00000080000000000000000000000000" #h"0000000000000000" #h"874a60ac1bc1df62") (:ecb-mode-test #h"00000040000000000000000000000000" #h"0000000000000000" #h"6b6e03497cf13d3f") (:ecb-mode-test #h"00000020000000000000000000000000" #h"0000000000000000" #h"d0b0132855e50656") (:ecb-mode-test #h"00000010000000000000000000000000" #h"0000000000000000" #h"cf06d4a07ac9e646") (:ecb-mode-test #h"00000008000000000000000000000000" #h"0000000000000000" #h"85ff754dd36533c7") (:ecb-mode-test #h"00000004000000000000000000000000" #h"0000000000000000" #h"25c504e6598527c0") (:ecb-mode-test #h"00000002000000000000000000000000" #h"0000000000000000" #h"3060c4d622544b10") (:ecb-mode-test #h"00000001000000000000000000000000" #h"0000000000000000" #h"f6d49f47bebda63a") (:ecb-mode-test #h"00000000800000000000000000000000" #h"0000000000000000" #h"4f190ccfc8deabfc") (:ecb-mode-test #h"00000000400000000000000000000000" #h"0000000000000000" #h"1e92dce665425870") (:ecb-mode-test #h"00000000200000000000000000000000" #h"0000000000000000" #h"3e32351309a4613b") (:ecb-mode-test #h"00000000100000000000000000000000" #h"0000000000000000" #h"723ee378cc8335fe") (:ecb-mode-test #h"00000000080000000000000000000000" #h"0000000000000000" #h"d74b94a6413ddf0a") (:ecb-mode-test #h"00000000040000000000000000000000" #h"0000000000000000" #h"d9c38dcf48c27648") (:ecb-mode-test #h"00000000020000000000000000000000" #h"0000000000000000" #h"6e76fa73e5c1923c") (:ecb-mode-test #h"00000000010000000000000000000000" #h"0000000000000000" #h"2aa2591e2ef2c12c") (:ecb-mode-test #h"00000000008000000000000000000000" #h"0000000000000000" #h"20f3c626ec8deece") (:ecb-mode-test #h"00000000004000000000000000000000" #h"0000000000000000" #h"4c98e9fb0fb19996") (:ecb-mode-test #h"00000000002000000000000000000000" #h"0000000000000000" #h"4b659bc186112260") (:ecb-mode-test #h"00000000001000000000000000000000" #h"0000000000000000" #h"93095547e89c06ae") (:ecb-mode-test #h"00000000000800000000000000000000" #h"0000000000000000" #h"82a1a38474c48472") (:ecb-mode-test #h"00000000000400000000000000000000" #h"0000000000000000" #h"a3571f7ae044856e") (:ecb-mode-test #h"00000000000200000000000000000000" #h"0000000000000000" #h"4f6995f57258d1cd") (:ecb-mode-test #h"00000000000100000000000000000000" #h"0000000000000000" #h"94b95f169726e564") (:ecb-mode-test #h"00000000000080000000000000000000" #h"0000000000000000" #h"56d222c4b3c2c8d6") (:ecb-mode-test #h"00000000000040000000000000000000" #h"0000000000000000" #h"42b01d4123bff6f8") (:ecb-mode-test #h"00000000000020000000000000000000" #h"0000000000000000" #h"f4f916143731bc7a") (:ecb-mode-test #h"00000000000010000000000000000000" #h"0000000000000000" #h"12878f7e038411ed") (:ecb-mode-test #h"00000000000008000000000000000000" #h"0000000000000000" #h"669f06ec05bfb4f3") (:ecb-mode-test #h"00000000000004000000000000000000" #h"0000000000000000" #h"97a286be6e272cbb") (:ecb-mode-test #h"00000000000002000000000000000000" #h"0000000000000000" #h"580c8dc05cf68baf") (:ecb-mode-test #h"00000000000001000000000000000000" #h"0000000000000000" #h"b22b78f250141309") (:ecb-mode-test #h"00000000000000800000000000000000" #h"0000000000000000" #h"751c895707822ef4") (:ecb-mode-test #h"00000000000000400000000000000000" #h"0000000000000000" #h"29fb3245f692f76b") (:ecb-mode-test #h"00000000000000200000000000000000" #h"0000000000000000" #h"781d64ff6e5bc204") (:ecb-mode-test #h"00000000000000100000000000000000" #h"0000000000000000" #h"86bc4e99c3a08e92") (:ecb-mode-test #h"00000000000000080000000000000000" #h"0000000000000000" #h"b7ff2c530c823788") (:ecb-mode-test #h"00000000000000040000000000000000" #h"0000000000000000" #h"313813adbee6108e") (:ecb-mode-test #h"00000000000000020000000000000000" #h"0000000000000000" #h"dbed436ebc8173a0") (:ecb-mode-test #h"00000000000000010000000000000000" #h"0000000000000000" #h"e7c6923ab603ff42") (:ecb-mode-test #h"00000000000000008000000000000000" #h"0000000000000000" #h"70aeb3d7177d9093") (:ecb-mode-test #h"00000000000000004000000000000000" #h"0000000000000000" #h"122bfd56040fb665") (:ecb-mode-test #h"00000000000000002000000000000000" #h"0000000000000000" #h"b61822bfcffdeb8a") (:ecb-mode-test #h"00000000000000001000000000000000" #h"0000000000000000" #h"3aa8cad543c9c29b") (:ecb-mode-test #h"00000000000000000800000000000000" #h"0000000000000000" #h"4db46e34f8cafdaf") (:ecb-mode-test #h"00000000000000000400000000000000" #h"0000000000000000" #h"07fad5cfa9384ae8") (:ecb-mode-test #h"00000000000000000200000000000000" #h"0000000000000000" #h"e380854eaea76a96") (:ecb-mode-test #h"00000000000000000100000000000000" #h"0000000000000000" #h"c071907987323ac4") (:ecb-mode-test #h"00000000000000000080000000000000" #h"0000000000000000" #h"383d0b8bcac923e4") (:ecb-mode-test #h"00000000000000000040000000000000" #h"0000000000000000" #h"0aad1d63c2945f73") (:ecb-mode-test #h"00000000000000000020000000000000" #h"0000000000000000" #h"9f057aaac3acd5c4") (:ecb-mode-test #h"00000000000000000010000000000000" #h"0000000000000000" #h"fa51f81f49ae9d66") (:ecb-mode-test #h"00000000000000000008000000000000" #h"0000000000000000" #h"eea19d0e6e82264b") (:ecb-mode-test #h"00000000000000000004000000000000" #h"0000000000000000" #h"dedf335fcbb234b2") (:ecb-mode-test #h"00000000000000000002000000000000" #h"0000000000000000" #h"e3e532af56830947") (:ecb-mode-test #h"00000000000000000001000000000000" #h"0000000000000000" #h"44a5771dd2537110") (:ecb-mode-test #h"00000000000000000000800000000000" #h"0000000000000000" #h"3eb533413b8e0a86") (:ecb-mode-test #h"00000000000000000000400000000000" #h"0000000000000000" #h"baf9b99b32c96b06") (:ecb-mode-test #h"00000000000000000000200000000000" #h"0000000000000000" #h"9776223f6f90cbce") (:ecb-mode-test #h"00000000000000000000100000000000" #h"0000000000000000" #h"0e4dafd91f7630fa") (:ecb-mode-test #h"00000000000000000000080000000000" #h"0000000000000000" #h"c5c4889f42854948") (:ecb-mode-test #h"00000000000000000000040000000000" #h"0000000000000000" #h"077cec6752fa89ad") (:ecb-mode-test #h"00000000000000000000020000000000" #h"0000000000000000" #h"71f182c8d8a4445a") (:ecb-mode-test #h"00000000000000000000010000000000" #h"0000000000000000" #h"21e76f7295299598") (:ecb-mode-test #h"00000000000000000000008000000000" #h"0000000000000000" #h"413b0f81ac90390c") (:ecb-mode-test #h"00000000000000000000004000000000" #h"0000000000000000" #h"b750eeafa754cec2") (:ecb-mode-test #h"00000000000000000000002000000000" #h"0000000000000000" #h"f0a8d25e6cf62b7c") (:ecb-mode-test #h"00000000000000000000001000000000" #h"0000000000000000" #h"579ddace1b60b3ee") (:ecb-mode-test #h"00000000000000000000000800000000" #h"0000000000000000" #h"cfba07274b8a1f4b") (:ecb-mode-test #h"00000000000000000000000400000000" #h"0000000000000000" #h"03eb0c8af495360f") (:ecb-mode-test #h"00000000000000000000000200000000" #h"0000000000000000" #h"ef1c8c7eaebc9ca7") (:ecb-mode-test #h"00000000000000000000000100000000" #h"0000000000000000" #h"6f50086ea5fac1f8") (:ecb-mode-test #h"00000000000000000000000080000000" #h"0000000000000000" #h"5612980dedc8f6ac") (:ecb-mode-test #h"00000000000000000000000040000000" #h"0000000000000000" #h"218f4ee454732dac") (:ecb-mode-test #h"00000000000000000000000020000000" #h"0000000000000000" #h"1d79d210533d2df5") (:ecb-mode-test #h"00000000000000000000000010000000" #h"0000000000000000" #h"6b6006bce161ca40") (:ecb-mode-test #h"00000000000000000000000008000000" #h"0000000000000000" #h"01d970816e5faab0") (:ecb-mode-test #h"00000000000000000000000004000000" #h"0000000000000000" #h"7829bb13e3beb043") (:ecb-mode-test #h"00000000000000000000000002000000" #h"0000000000000000" #h"ee0a657f83602539") (:ecb-mode-test #h"00000000000000000000000001000000" #h"0000000000000000" #h"a05ee2b67549bed1") (:ecb-mode-test #h"00000000000000000000000000800000" #h"0000000000000000" #h"c4404652e384e446") (:ecb-mode-test #h"00000000000000000000000000400000" #h"0000000000000000" #h"7306d364a6e5ef6d") (:ecb-mode-test #h"00000000000000000000000000200000" #h"0000000000000000" #h"0df4c1f5faeb430f") (:ecb-mode-test #h"00000000000000000000000000100000" #h"0000000000000000" #h"51816e1946ecd779") (:ecb-mode-test #h"00000000000000000000000000080000" #h"0000000000000000" #h"b460a5d685b0b2f2") (:ecb-mode-test #h"00000000000000000000000000040000" #h"0000000000000000" #h"d285ebc617ba85a2") (:ecb-mode-test #h"00000000000000000000000000020000" #h"0000000000000000" #h"6c633518c5a87e47") (:ecb-mode-test #h"00000000000000000000000000010000" #h"0000000000000000" #h"281941f8f60d2639") (:ecb-mode-test #h"00000000000000000000000000008000" #h"0000000000000000" #h"0ba76ebe02f3bac0") (:ecb-mode-test #h"00000000000000000000000000004000" #h"0000000000000000" #h"094b157cdb20be90") (:ecb-mode-test #h"00000000000000000000000000002000" #h"0000000000000000" #h"4fb4a4e2c6128d08") (:ecb-mode-test #h"00000000000000000000000000001000" #h"0000000000000000" #h"2fbe07f7dcfaecc4") (:ecb-mode-test #h"00000000000000000000000000000800" #h"0000000000000000" #h"8685885467b52e5c") (:ecb-mode-test #h"00000000000000000000000000000400" #h"0000000000000000" #h"3bd49dbfb5a5c64d") (:ecb-mode-test #h"00000000000000000000000000000200" #h"0000000000000000" #h"ddf3d83832dcb3a2") (:ecb-mode-test #h"00000000000000000000000000000100" #h"0000000000000000" #h"d818e18f03235cd3") (:ecb-mode-test #h"00000000000000000000000000000080" #h"0000000000000000" #h"d9702927b9edfef5") (:ecb-mode-test #h"00000000000000000000000000000040" #h"0000000000000000" #h"9ccb14f1f3188ca4") (:ecb-mode-test #h"00000000000000000000000000000020" #h"0000000000000000" #h"ba898b48743134de") (:ecb-mode-test #h"00000000000000000000000000000010" #h"0000000000000000" #h"61982e6f0ddeee07") (:ecb-mode-test #h"00000000000000000000000000000008" #h"0000000000000000" #h"c6c77ebf05b0548f") (:ecb-mode-test #h"00000000000000000000000000000004" #h"0000000000000000" #h"1a5a806001580fbf") (:ecb-mode-test #h"00000000000000000000000000000002" #h"0000000000000000" #h"5bed0f1b5a2d1bb0") (:ecb-mode-test #h"00000000000000000000000000000001" #h"0000000000000000" #h"5bac83ce2b9dd3cc") (:ecb-mode-test #h"00000000000000000000000000000000" #h"8000000000000000" #h"37a3cbd9f11c28d5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"4000000000000000" #h"ba13e75ac2a5a822") (:ecb-mode-test #h"00000000000000000000000000000000" #h"2000000000000000" #h"85fc1a1d611eee20") (:ecb-mode-test #h"00000000000000000000000000000000" #h"1000000000000000" #h"5fd951cf2c0ee5b3") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0800000000000000" #h"8f7be95c376b4ae8") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0400000000000000" #h"2e9d3cee86a265a7") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0200000000000000" #h"4da8ae5f1b4c72eb") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0100000000000000" #h"8104f05be73b792f") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0080000000000000" #h"8cc479c5c796bdf5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0040000000000000" #h"db9624e776fbf690") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0020000000000000" #h"0010596e95997cf6") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0010000000000000" #h"1da11bf5eb203169") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0008000000000000" #h"d84c8b01d9b02c98") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0004000000000000" #h"77380f036974aa17") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0002000000000000" #h"5ab58fc6a4611deb") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0001000000000000" #h"1b968322ffccd844") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000800000000000" #h"6cbf0995d3378dbc") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000400000000000" #h"529348cd78d44b7c") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000200000000000" #h"d05a15d62d871060") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000100000000000" #h"332426226a827c15") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000080000000000" #h"939da4f4c06fbb50") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000040000000000" #h"0887e46423672943") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000020000000000" #h"62a7765fb86d6555") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000010000000000" #h"2d1774541561e935") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000008000000000" #h"a387b6cd9d875463") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000004000000000" #h"054bd4ae7eb2ab0b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000002000000000" #h"f8581ece047b514b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000001000000000" #h"9e596c6099197d34") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000800000000" #h"cf1118300b8a2d38") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000400000000" #h"aac63d7962e76615") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000200000000" #h"b063f59ef08dee04") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000100000000" #h"a12e34ee8d374ef5") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000080000000" #h"04a1ea610cbc468b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000040000000" #h"82884825fa40f21a") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000020000000" #h"850438051d12e62b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000010000000" #h"d6091ec280935dea") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000008000000" #h"ef9bf9a02a6b0e4e") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000004000000" #h"ad3b49321dcdf009") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000002000000" #h"f36f98736c04059f") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000001000000" #h"45a1900684ad9ac0") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000800000" #h"665e0411896d342f") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000400000" #h"1c15c6f3bbc1c372") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000200000" #h"b679213660bb0f95") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000100000" #h"4708a5278930fe0d") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000080000" #h"c19f3fc0cbdc242b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000040000" #h"38cbbecf65733670") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000020000" #h"3d285e63feaac3b9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000010000" #h"3560e4c6d544a15c") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000008000" #h"99759a8f624e55e0") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000004000" #h"a576978e82837779") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000002000" #h"554466cdf8677820") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000001000" #h"c32dbb5807791754") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000800" #h"eb4bf9684d3308b9") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000400" #h"1cb0bf5c78304c18") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000200" #h"caab743c19d1b177") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000100" #h"981c81403f0b1487") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000080" #h"2234eefe50cba46b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000040" #h"7b3797fdcfebf074") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000020" #h"47bee85dee699930") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000010" #h"a1eaf7cf0476ac6b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000008" #h"f97364517e73138d") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000004" #h"75177a2a6db3458b") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000002" #h"59bbf3abd6e7b32f") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000001" #h"47186468d1d2343d") (:ecb-mode-test #h"00000000000000000000000000000000" #h"0000000000000000" #h"dee9d4d8f7131ed9") (:ecb-mode-test #h"01010101010101010101010101010101" #h"0101010101010101" #h"c2eca7cec9b7f992") (:ecb-mode-test #h"02020202020202020202020202020202" #h"0202020202020202" #h"6dbba048da4980d5") (:ecb-mode-test #h"03030303030303030303030303030303" #h"0303030303030303" #h"0893c0cef311d09a") (:ecb-mode-test #h"04040404040404040404040404040404" #h"0404040404040404" #h"ac57c2f620bcd81f") (:ecb-mode-test #h"05050505050505050505050505050505" #h"0505050505050505" #h"42961e9b859a8c7d") (:ecb-mode-test #h"06060606060606060606060606060606" #h"0606060606060606" #h"4d15ee81f3212de4") (:ecb-mode-test #h"07070707070707070707070707070707" #h"0707070707070707" #h"7b5c26ce9f0e205f") (:ecb-mode-test #h"08080808080808080808080808080808" #h"0808080808080808" #h"227e75d2e5ed44b7") (:ecb-mode-test #h"09090909090909090909090909090909" #h"0909090909090909" #h"3c372d5cba6ea9b2") (:ecb-mode-test #h"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A" #h"0A0A0A0A0A0A0A0A" #h"2871260d5a71c9ec") (:ecb-mode-test #h"0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B" #h"0B0B0B0B0B0B0B0B" #h"aba81904e6fa6572") (:ecb-mode-test #h"0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C" #h"0C0C0C0C0C0C0C0C" #h"37189cab9c385957") (:ecb-mode-test #h"0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D" #h"0D0D0D0D0D0D0D0D" #h"70d084dcc7211149") (:ecb-mode-test #h"0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E" #h"0E0E0E0E0E0E0E0E" #h"624be0e58157f64c") (:ecb-mode-test #h"0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F" #h"0F0F0F0F0F0F0F0F" #h"a898f219d312c13b") (:ecb-mode-test #h"10101010101010101010101010101010" #h"1010101010101010" #h"0193ee11b7a5cc4d") (:ecb-mode-test #h"11111111111111111111111111111111" #h"1111111111111111" #h"78d8cd024ecddbaa") (:ecb-mode-test #h"12121212121212121212121212121212" #h"1212121212121212" #h"d6ec2b55c9b585dc") (:ecb-mode-test #h"13131313131313131313131313131313" #h"1313131313131313" #h"9fc227635ba55864") (:ecb-mode-test #h"14141414141414141414141414141414" #h"1414141414141414" #h"aa167a02df574cb3") (:ecb-mode-test #h"15151515151515151515151515151515" #h"1515151515151515" #h"76835dfdcc6cd542") (:ecb-mode-test #h"16161616161616161616161616161616" #h"1616161616161616" #h"74f774185ba8fa9b") (:ecb-mode-test #h"17171717171717171717171717171717" #h"1717171717171717" #h"7e195671f5a8e8b8") (:ecb-mode-test #h"18181818181818181818181818181818" #h"1818181818181818" #h"a47d783ec8cdbf28") (:ecb-mode-test #h"19191919191919191919191919191919" #h"1919191919191919" #h"c41faaca8e4d0fb9") (:ecb-mode-test #h"1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A" #h"1A1A1A1A1A1A1A1A" #h"285e17ef2fd2e318") (:ecb-mode-test #h"1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B" #h"1B1B1B1B1B1B1B1B" #h"491cf8d65b10c4d8") (:ecb-mode-test #h"1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C" #h"1C1C1C1C1C1C1C1C" #h"345ee5b9bcad986f") (:ecb-mode-test #h"1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D" #h"1D1D1D1D1D1D1D1D" #h"54442c2bfb68fcae") (:ecb-mode-test #h"1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E" #h"1E1E1E1E1E1E1E1E" #h"f37e1390dbd22d15") (:ecb-mode-test #h"1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F" #h"1F1F1F1F1F1F1F1F" #h"2b12633ecb40162f") (:ecb-mode-test #h"20202020202020202020202020202020" #h"2020202020202020" #h"b63a89e38631c79c") (:ecb-mode-test #h"21212121212121212121212121212121" #h"2121212121212121" #h"b370c52fa21c5c23") (:ecb-mode-test #h"22222222222222222222222222222222" #h"2222222222222222" #h"b4c681eb52aa604f") (:ecb-mode-test #h"23232323232323232323232323232323" #h"2323232323232323" #h"9dcea55b723bc1ec") (:ecb-mode-test #h"24242424242424242424242424242424" #h"2424242424242424" #h"af16e40356be7a26") (:ecb-mode-test #h"25252525252525252525252525252525" #h"2525252525252525" #h"5ed66faaa68fbd6c") (:ecb-mode-test #h"26262626262626262626262626262626" #h"2626262626262626" #h"6cc8babe7be66934") (:ecb-mode-test #h"27272727272727272727272727272727" #h"2727272727272727" #h"edd367fac6ba47c2") (:ecb-mode-test #h"28282828282828282828282828282828" #h"2828282828282828" #h"6f6fba42f179aac0") (:ecb-mode-test #h"29292929292929292929292929292929" #h"2929292929292929" #h"45c2235da9ce20f8") (:ecb-mode-test #h"2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A" #h"2A2A2A2A2A2A2A2A" #h"087988acc74010ae") (:ecb-mode-test #h"2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B" #h"2B2B2B2B2B2B2B2B" #h"fa6e56d6f669a6a3") (:ecb-mode-test #h"2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C" #h"2C2C2C2C2C2C2C2C" #h"b60ac5f2adecb720") (:ecb-mode-test #h"2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D" #h"2D2D2D2D2D2D2D2D" #h"efa8aa336f688d7b") (:ecb-mode-test #h"2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E" #h"2E2E2E2E2E2E2E2E" #h"f52d9003733e0335") (:ecb-mode-test #h"2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F" #h"2F2F2F2F2F2F2F2F" #h"0e28c8467f07bbff") (:ecb-mode-test #h"30303030303030303030303030303030" #h"3030303030303030" #h"ec21033f816d9ffe") (:ecb-mode-test #h"31313131313131313131313131313131" #h"3131313131313131" #h"03f67661c7b98eda") (:ecb-mode-test #h"32323232323232323232323232323232" #h"3232323232323232" #h"b7af74308f740a27") (:ecb-mode-test #h"33333333333333333333333333333333" #h"3333333333333333" #h"3a710681a9d67a71") (:ecb-mode-test #h"34343434343434343434343434343434" #h"3434343434343434" #h"4f3a4a958c96bede") (:ecb-mode-test #h"35353535353535353535353535353535" #h"3535353535353535" #h"b1194aece4145808") (:ecb-mode-test #h"36363636363636363636363636363636" #h"3636363636363636" #h"2e4558bc7f7c3b22") (:ecb-mode-test #h"37373737373737373737373737373737" #h"3737373737373737" #h"babc0f66e692c3ef") (:ecb-mode-test #h"38383838383838383838383838383838" #h"3838383838383838" #h"792b6c335e787154") (:ecb-mode-test #h"39393939393939393939393939393939" #h"3939393939393939" #h"74e2b7cea882a183") (:ecb-mode-test #h"3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A" #h"3A3A3A3A3A3A3A3A" #h"17c9c659e8462fd3") (:ecb-mode-test #h"3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B" #h"3B3B3B3B3B3B3B3B" #h"049e0c0e04d0f705") (:ecb-mode-test #h"3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C" #h"3C3C3C3C3C3C3C3C" #h"e1fdef5c2dd78042") (:ecb-mode-test #h"3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D" #h"3D3D3D3D3D3D3D3D" #h"9b9155fa2be6c82a") (:ecb-mode-test #h"3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E" #h"3E3E3E3E3E3E3E3E" #h"584e6d17646fa958") (:ecb-mode-test #h"3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F" #h"3F3F3F3F3F3F3F3F" #h"ea1954fda380d726") (:ecb-mode-test #h"40404040404040404040404040404040" #h"4040404040404040" #h"4b888e74020282c8") (:ecb-mode-test #h"41414141414141414141414141414141" #h"4141414141414141" #h"1a399dffa67635ca") (:ecb-mode-test #h"42424242424242424242424242424242" #h"4242424242424242" #h"17474646ea434ecd") (:ecb-mode-test #h"43434343434343434343434343434343" #h"4343434343434343" #h"8855bf8c56664d23") (:ecb-mode-test #h"44444444444444444444444444444444" #h"4444444444444444" #h"1c738e2ec4b2b202") (:ecb-mode-test #h"45454545454545454545454545454545" #h"4545454545454545" #h"f6c88d28ed039a67") (:ecb-mode-test #h"46464646464646464646464646464646" #h"4646464646464646" #h"8d5b0d47e3157ca8") (:ecb-mode-test #h"47474747474747474747474747474747" #h"4747474747474747" #h"7acf364c19014cae") (:ecb-mode-test #h"48484848484848484848484848484848" #h"4848484848484848" #h"308d664807ecdae5") (:ecb-mode-test #h"49494949494949494949494949494949" #h"4949494949494949" #h"06a0f3715f80f0d2") (:ecb-mode-test #h"4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A" #h"4A4A4A4A4A4A4A4A" #h"6823886050523984") (:ecb-mode-test #h"4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B" #h"4B4B4B4B4B4B4B4B" #h"7a0dde97bfec5f7c") (:ecb-mode-test #h"4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C" #h"4C4C4C4C4C4C4C4C" #h"d3b87d45698dde3c") (:ecb-mode-test #h"4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D" #h"4D4D4D4D4D4D4D4D" #h"4f5739127ec7c7b2") (:ecb-mode-test #h"4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E" #h"4E4E4E4E4E4E4E4E" #h"2b54d578f851f206") (:ecb-mode-test #h"4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F" #h"4F4F4F4F4F4F4F4F" #h"fecbd598eadebb8a") (:ecb-mode-test #h"50505050505050505050505050505050" #h"5050505050505050" #h"dcc652a8517a5742") (:ecb-mode-test #h"51515151515151515151515151515151" #h"5151515151515151" #h"0e4c2c7dfb441098") (:ecb-mode-test #h"52525252525252525252525252525252" #h"5252525252525252" #h"73fb0d371337eec0") (:ecb-mode-test #h"53535353535353535353535353535353" #h"5353535353535353" #h"bc010eae08cd36e0") (:ecb-mode-test #h"54545454545454545454545454545454" #h"5454545454545454" #h"013aa92050e0a55c") (:ecb-mode-test #h"55555555555555555555555555555555" #h"5555555555555555" #h"18c1c92b4b78e993") (:ecb-mode-test #h"56565656565656565656565656565656" #h"5656565656565656" #h"672c27c1fa9f8fdc") (:ecb-mode-test #h"57575757575757575757575757575757" #h"5757575757575757" #h"f9ba99c220cc1229") (:ecb-mode-test #h"58585858585858585858585858585858" #h"5858585858585858" #h"d4d2d16bbb5301db") (:ecb-mode-test #h"59595959595959595959595959595959" #h"5959595959595959" #h"4c45d27f79844495") (:ecb-mode-test #h"5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A" #h"5A5A5A5A5A5A5A5A" #h"35f54fbab8b763fd") (:ecb-mode-test #h"5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B" #h"5B5B5B5B5B5B5B5B" #h"11ae6a139c88f010") (:ecb-mode-test #h"5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C" #h"5C5C5C5C5C5C5C5C" #h"d879be552b6e615c") (:ecb-mode-test #h"5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D" #h"5D5D5D5D5D5D5D5D" #h"528db83d8d4c0e89") (:ecb-mode-test #h"5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E" #h"5E5E5E5E5E5E5E5E" #h"8f231e99d9ca5335") (:ecb-mode-test #h"5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F" #h"5F5F5F5F5F5F5F5F" #h"c40e41baf5577956") (:ecb-mode-test #h"60606060606060606060606060606060" #h"6060606060606060" #h"8b25118caac69103") (:ecb-mode-test #h"61616161616161616161616161616161" #h"6161616161616161" #h"01abdd1d8d23aa38") (:ecb-mode-test #h"62626262626262626262626262626262" #h"6262626262626262" #h"8f37afebc7074acf") (:ecb-mode-test #h"63636363636363636363636363636363" #h"6363636363636363" #h"350ffefc24336cf5") (:ecb-mode-test #h"64646464646464646464646464646464" #h"6464646464646464" #h"5adf37f7bdfc3c4a") (:ecb-mode-test #h"65656565656565656565656565656565" #h"6565656565656565" #h"cf49b758568c0508") (:ecb-mode-test #h"66666666666666666666666666666666" #h"6666666666666666" #h"cdbf60e70ad3fe21") (:ecb-mode-test #h"67676767676767676767676767676767" #h"6767676767676767" #h"291b711dd184185a") (:ecb-mode-test #h"68686868686868686868686868686868" #h"6868686868686868" #h"f38d8249ba600204") (:ecb-mode-test #h"69696969696969696969696969696969" #h"6969696969696969" #h"89e6926dc2c2c32a") (:ecb-mode-test #h"6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A" #h"6A6A6A6A6A6A6A6A" #h"0df6c1b16396277e") (:ecb-mode-test #h"6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B" #h"6B6B6B6B6B6B6B6B" #h"455ac46c4a828fae") (:ecb-mode-test #h"6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C" #h"6C6C6C6C6C6C6C6C" #h"082fb40fa04b8c4c") (:ecb-mode-test #h"6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D" #h"6D6D6D6D6D6D6D6D" #h"c361bd889bf729f2") (:ecb-mode-test #h"6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E" #h"6E6E6E6E6E6E6E6E" #h"c27e57bbb40979fe") (:ecb-mode-test #h"6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F" #h"6F6F6F6F6F6F6F6F" #h"18b45390097a0c2c") (:ecb-mode-test #h"70707070707070707070707070707070" #h"7070707070707070" #h"bce072cce554df17") (:ecb-mode-test #h"71717171717171717171717171717171" #h"7171717171717171" #h"0a0f408dc52b0826") (:ecb-mode-test #h"72727272727272727272727272727272" #h"7272727272727272" #h"e233e58b1ded3531") (:ecb-mode-test #h"73737373737373737373737373737373" #h"7373737373737373" #h"e323d0aebc98a570") (:ecb-mode-test #h"74747474747474747474747474747474" #h"7474747474747474" #h"350544fb23a531f6") (:ecb-mode-test #h"75757575757575757575757575757575" #h"7575757575757575" #h"1af234e26092cd52") (:ecb-mode-test #h"76767676767676767676767676767676" #h"7676767676767676" #h"25ca08738d2322b4") (:ecb-mode-test #h"77777777777777777777777777777777" #h"7777777777777777" #h"228976a72fa9da56") (:ecb-mode-test #h"78787878787878787878787878787878" #h"7878787878787878" #h"aeb7685a09847972") (:ecb-mode-test #h"79797979797979797979797979797979" #h"7979797979797979" #h"eccfc863027ac218") (:ecb-mode-test #h"7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A" #h"7A7A7A7A7A7A7A7A" #h"ffd67fa25c4d4008") (:ecb-mode-test #h"7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B" #h"7B7B7B7B7B7B7B7B" #h"20320dd3161d16ba") (:ecb-mode-test #h"7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C" #h"7C7C7C7C7C7C7C7C" #h"4d361240de2d78c9") (:ecb-mode-test #h"7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D" #h"7D7D7D7D7D7D7D7D" #h"934f21687967ae69") (:ecb-mode-test #h"7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E" #h"7E7E7E7E7E7E7E7E" #h"0356593b4f4594f9") (:ecb-mode-test #h"7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F" #h"7F7F7F7F7F7F7F7F" #h"a9815d67db9f21f8") (:ecb-mode-test #h"80808080808080808080808080808080" #h"8080808080808080" #h"5a26375c1dcb6eec") (:ecb-mode-test #h"81818181818181818181818181818181" #h"8181818181818181" #h"e3f18c5f8b445616") (:ecb-mode-test #h"82828282828282828282828282828282" #h"8282828282828282" #h"b61ea8a33192fda4") (:ecb-mode-test #h"83838383838383838383838383838383" #h"8383838383838383" #h"7479aa2d845d5af0") (:ecb-mode-test #h"84848484848484848484848484848484" #h"8484848484848484" #h"c09c3ffc31c0b4fa") (:ecb-mode-test #h"85858585858585858585858585858585" #h"8585858585858585" #h"9336d13fea3f9557") (:ecb-mode-test #h"86868686868686868686868686868686" #h"8686868686868686" #h"ad68f180abde3e8c") (:ecb-mode-test #h"87878787878787878787878787878787" #h"8787878787878787" #h"6b55314bbc35aa92") (:ecb-mode-test #h"88888888888888888888888888888888" #h"8888888888888888" #h"0227d9d9ce9036a7") (:ecb-mode-test #h"89898989898989898989898989898989" #h"8989898989898989" #h"af45b52450448eb8") (:ecb-mode-test #h"8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A" #h"8A8A8A8A8A8A8A8A" #h"d3f6b9c4b2a9d02d") (:ecb-mode-test #h"8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B" #h"8B8B8B8B8B8B8B8B" #h"762e5d3664363226") (:ecb-mode-test #h"8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C" #h"8C8C8C8C8C8C8C8C" #h"df4473d3c7150708") (:ecb-mode-test #h"8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D" #h"8D8D8D8D8D8D8D8D" #h"841b3fa419d58f3b") (:ecb-mode-test #h"8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E" #h"8E8E8E8E8E8E8E8E" #h"82de7fb2bd9ae44d") (:ecb-mode-test #h"8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F" #h"8F8F8F8F8F8F8F8F" #h"c166e556ca141bf7") (:ecb-mode-test #h"90909090909090909090909090909090" #h"9090909090909090" #h"e851ea6f934a8c88") (:ecb-mode-test #h"91919191919191919191919191919191" #h"9191919191919191" #h"ebcbdc15d84898e5") (:ecb-mode-test #h"92929292929292929292929292929292" #h"9292929292929292" #h"b857fa7cf30692ce") (:ecb-mode-test #h"93939393939393939393939393939393" #h"9393939393939393" #h"ec2ac2bb08ee9ae2") (:ecb-mode-test #h"94949494949494949494949494949494" #h"9494949494949494" #h"6fd60d673af73e1e") (:ecb-mode-test #h"95959595959595959595959595959595" #h"9595959595959595" #h"f58bc170c372d8d2") (:ecb-mode-test #h"96969696969696969696969696969696" #h"9696969696969696" #h"1a7656ba6057631d") (:ecb-mode-test #h"97979797979797979797979797979797" #h"9797979797979797" #h"2a04ba10c699ea8f") (:ecb-mode-test #h"98989898989898989898989898989898" #h"9898989898989898" #h"a265f8b2998f3ff8") (:ecb-mode-test #h"99999999999999999999999999999999" #h"9999999999999999" #h"4ad47e6a86097852") (:ecb-mode-test #h"9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A" #h"9A9A9A9A9A9A9A9A" #h"0e0397355865c674") (:ecb-mode-test #h"9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B" #h"9B9B9B9B9B9B9B9B" #h"7160de4a01f460e2") (:ecb-mode-test #h"9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C" #h"9C9C9C9C9C9C9C9C" #h"cea8e043bb8ee345") (:ecb-mode-test #h"9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D" #h"9D9D9D9D9D9D9D9D" #h"64ebdcb89cbd3c33") (:ecb-mode-test #h"9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E" #h"9E9E9E9E9E9E9E9E" #h"9446a63870e4bd8a") (:ecb-mode-test #h"9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F" #h"9F9F9F9F9F9F9F9F" #h"a92ec0b09f25f32d") (:ecb-mode-test #h"A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0" #h"A0A0A0A0A0A0A0A0" #h"6abb6055e3378e1b") (:ecb-mode-test #h"A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1A1" #h"A1A1A1A1A1A1A1A1" #h"812a93d73dc1170e") (:ecb-mode-test #h"A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2" #h"A2A2A2A2A2A2A2A2" #h"d0e7686164fbf21e") (:ecb-mode-test #h"A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3" #h"A3A3A3A3A3A3A3A3" #h"9e0dbb606f0a75da") (:ecb-mode-test #h"A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4A4" #h"A4A4A4A4A4A4A4A4" #h"c372d4fd81f3fc61") (:ecb-mode-test #h"A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5A5" #h"A5A5A5A5A5A5A5A5" #h"de89ceeba4bfcaeb") (:ecb-mode-test #h"A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6A6" #h"A6A6A6A6A6A6A6A6" #h"e124a6347d5ef4e2") (:ecb-mode-test #h"A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7" #h"A7A7A7A7A7A7A7A7" #h"3173b314f53f448f") (:ecb-mode-test #h"A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8A8" #h"A8A8A8A8A8A8A8A8" #h"e033b6a3529d0ce5") (:ecb-mode-test #h"A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9A9" #h"A9A9A9A9A9A9A9A9" #h"d1b52825fc10c40c") (:ecb-mode-test #h"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" #h"AAAAAAAAAAAAAAAA" #h"8d340c8420c99ea1") (:ecb-mode-test #h"ABABABABABABABABABABABABABABABAB" #h"ABABABABABABABAB" #h"6e1342722eb8e580") (:ecb-mode-test #h"ACACACACACACACACACACACACACACACAC" #h"ACACACACACACACAC" #h"ca9e906353d4b541") (:ecb-mode-test #h"ADADADADADADADADADADADADADADADAD" #h"ADADADADADADADAD" #h"c84f0fe2b8a77afd") (:ecb-mode-test #h"AEAEAEAEAEAEAEAEAEAEAEAEAEAEAEAE" #h"AEAEAEAEAEAEAEAE" #h"2d3ec4e388043aa1") (:ecb-mode-test #h"AFAFAFAFAFAFAFAFAFAFAFAFAFAFAFAF" #h"AFAFAFAFAFAFAFAF" #h"92ad8597f5eb6d74") (:ecb-mode-test #h"B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0" #h"B0B0B0B0B0B0B0B0" #h"c59fe8645a348de9") (:ecb-mode-test #h"B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1B1" #h"B1B1B1B1B1B1B1B1" #h"9e904fa6b3bc3638") (:ecb-mode-test #h"B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2B2" #h"B2B2B2B2B2B2B2B2" #h"dcc60608158986fc") (:ecb-mode-test #h"B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3B3" #h"B3B3B3B3B3B3B3B3" #h"65df92a21aebba1b") (:ecb-mode-test #h"B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4B4" #h"B4B4B4B4B4B4B4B4" #h"bdb9a96e198fe6cc") (:ecb-mode-test #h"B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5B5" #h"B5B5B5B5B5B5B5B5" #h"c0e5a070cdbab6db") (:ecb-mode-test #h"B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6B6" #h"B6B6B6B6B6B6B6B6" #h"04da8072235f085e") (:ecb-mode-test #h"B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7B7" #h"B7B7B7B7B7B7B7B7" #h"808fc81db3066ca0") (:ecb-mode-test #h"B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" #h"B8B8B8B8B8B8B8B8" #h"ede0990518897ec6") (:ecb-mode-test #h"B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9B9" #h"B9B9B9B9B9B9B9B9" #h"887e42d1fd71715f") (:ecb-mode-test #h"BABABABABABABABABABABABABABABABA" #h"BABABABABABABABA" #h"3a49a43714e5d13d") (:ecb-mode-test #h"BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" #h"BBBBBBBBBBBBBBBB" #h"daa90827c5d4daf6") (:ecb-mode-test #h"BCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBC" #h"BCBCBCBCBCBCBCBC" #h"a0d81f09fa942ad4") (:ecb-mode-test #h"BDBDBDBDBDBDBDBDBDBDBDBDBDBDBDBD" #h"BDBDBDBDBDBDBDBD" #h"23b03ae46bb683a9") (:ecb-mode-test #h"BEBEBEBEBEBEBEBEBEBEBEBEBEBEBEBE" #h"BEBEBEBEBEBEBEBE" #h"f06c0932c8cf54ec") (:ecb-mode-test #h"BFBFBFBFBFBFBFBFBFBFBFBFBFBFBFBF" #h"BFBFBFBFBFBFBFBF" #h"94a9952860c23248") (:ecb-mode-test #h"C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0" #h"C0C0C0C0C0C0C0C0" #h"62004deb3d4f6202") (:ecb-mode-test #h"C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1C1" #h"C1C1C1C1C1C1C1C1" #h"91513792982d5930") (:ecb-mode-test #h"C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2C2" #h"C2C2C2C2C2C2C2C2" #h"8d2c4e9cb086bdd4") (:ecb-mode-test #h"C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3C3" #h"C3C3C3C3C3C3C3C3" #h"de68f3ea0ba5063a") (:ecb-mode-test #h"C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4C4" #h"C4C4C4C4C4C4C4C4" #h"ccbbf408e1940997") (:ecb-mode-test #h"C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5C5" #h"C5C5C5C5C5C5C5C5" #h"9e17ea9cd355733e") (:ecb-mode-test #h"C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6C6" #h"C6C6C6C6C6C6C6C6" #h"d27764f2b359c95e") (:ecb-mode-test #h"C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7C7" #h"C7C7C7C7C7C7C7C7" #h"b9c0536ae8b2aaac") (:ecb-mode-test #h"C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8C8" #h"C8C8C8C8C8C8C8C8" #h"afaad1e807d79eb4") (:ecb-mode-test #h"C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9C9" #h"C9C9C9C9C9C9C9C9" #h"b2b7db49c17a1674") (:ecb-mode-test #h"CACACACACACACACACACACACACACACACA" #h"CACACACACACACACA" #h"314a2dddc25b3b97") (:ecb-mode-test #h"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB" #h"CBCBCBCBCBCBCBCB" #h"39df171efe0bb9a5") (:ecb-mode-test #h"CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC" #h"CCCCCCCCCCCCCCCC" #h"d0b4956e2f5ccbec") (:ecb-mode-test #h"CDCDCDCDCDCDCDCDCDCDCDCDCDCDCDCD" #h"CDCDCDCDCDCDCDCD" #h"7b6bf7cf44b1f0e3") (:ecb-mode-test #h"CECECECECECECECECECECECECECECECE" #h"CECECECECECECECE" #h"e63c9fd15f5e8f96") (:ecb-mode-test #h"CFCFCFCFCFCFCFCFCFCFCFCFCFCFCFCF" #h"CFCFCFCFCFCFCFCF" #h"69d9d95c59285392") (:ecb-mode-test #h"D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0" #h"D0D0D0D0D0D0D0D0" #h"e7430e21c59dfd47") (:ecb-mode-test #h"D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1D1" #h"D1D1D1D1D1D1D1D1" #h"936101d17899d963") (:ecb-mode-test #h"D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2" #h"D2D2D2D2D2D2D2D2" #h"dc1800f0e68d343d") (:ecb-mode-test #h"D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3D3" #h"D3D3D3D3D3D3D3D3" #h"c53ac9225bf06006") (:ecb-mode-test #h"D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4D4" #h"D4D4D4D4D4D4D4D4" #h"1af13c41692c088c") (:ecb-mode-test #h"D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5D5" #h"D5D5D5D5D5D5D5D5" #h"d3218a9862a41b3d") (:ecb-mode-test #h"D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6D6" #h"D6D6D6D6D6D6D6D6" #h"a46dff56e82676cb") (:ecb-mode-test #h"D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7" #h"D7D7D7D7D7D7D7D7" #h"629206d57db55d32") (:ecb-mode-test #h"D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8D8" #h"D8D8D8D8D8D8D8D8" #h"03bcfa756081000f") (:ecb-mode-test #h"D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9D9" #h"D9D9D9D9D9D9D9D9" #h"c038c1b07e235041") (:ecb-mode-test #h"DADADADADADADADADADADADADADADADA" #h"DADADADADADADADA" #h"83451e38d35aaa42") (:ecb-mode-test #h"DBDBDBDBDBDBDBDBDBDBDBDBDBDBDBDB" #h"DBDBDBDBDBDBDBDB" #h"e1434cd917bfe9ca") (:ecb-mode-test #h"DCDCDCDCDCDCDCDCDCDCDCDCDCDCDCDC" #h"DCDCDCDCDCDCDCDC" #h"1cf236e6b08c1cd4") (:ecb-mode-test #h"DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD" #h"DDDDDDDDDDDDDDDD" #h"8b34caeb714e806b") (:ecb-mode-test #h"DEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDE" #h"DEDEDEDEDEDEDEDE" #h"e93d812ef82ac4a8") (:ecb-mode-test #h"DFDFDFDFDFDFDFDFDFDFDFDFDFDFDFDF" #h"DFDFDFDFDFDFDFDF" #h"6d8d00ca3a44363a") (:ecb-mode-test #h"E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0" #h"E0E0E0E0E0E0E0E0" #h"7cb2c51f3c2bc0a9") (:ecb-mode-test #h"E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1" #h"E1E1E1E1E1E1E1E1" #h"23a8bfcac71fcacd") (:ecb-mode-test #h"E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2E2" #h"E2E2E2E2E2E2E2E2" #h"085f381dbecb6808") (:ecb-mode-test #h"E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3E3" #h"E3E3E3E3E3E3E3E3" #h"05c406253b8bd681") (:ecb-mode-test #h"E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4E4" #h"E4E4E4E4E4E4E4E4" #h"ee82b9da81f1092d") (:ecb-mode-test #h"E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5E5" #h"E5E5E5E5E5E5E5E5" #h"a9a8658312ec9e21") (:ecb-mode-test #h"E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6E6" #h"E6E6E6E6E6E6E6E6" #h"304c11bd68ad0141") (:ecb-mode-test #h"E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7E7" #h"E7E7E7E7E7E7E7E7" #h"90af0b1bfda4beac") (:ecb-mode-test #h"E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8E8" #h"E8E8E8E8E8E8E8E8" #h"e465d180be121564") (:ecb-mode-test #h"E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9E9" #h"E9E9E9E9E9E9E9E9" #h"d83ef1e2b0c6bee8") (:ecb-mode-test #h"EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA" #h"EAEAEAEAEAEAEAEA" #h"b88537d3ef1037d9") (:ecb-mode-test #h"EBEBEBEBEBEBEBEBEBEBEBEBEBEBEBEB" #h"EBEBEBEBEBEBEBEB" #h"63619a230e1ae6f3") (:ecb-mode-test #h"ECECECECECECECECECECECECECECECEC" #h"ECECECECECECECEC" #h"6b47005828db0e54") (:ecb-mode-test #h"EDEDEDEDEDEDEDEDEDEDEDEDEDEDEDED" #h"EDEDEDEDEDEDEDED" #h"5f95f4e139358438") (:ecb-mode-test #h"EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE" #h"EEEEEEEEEEEEEEEE" #h"d32ba8e607bd6d4c") (:ecb-mode-test #h"EFEFEFEFEFEFEFEFEFEFEFEFEFEFEFEF" #h"EFEFEFEFEFEFEFEF" #h"14e35cf5013b1085") (:ecb-mode-test #h"F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0" #h"F0F0F0F0F0F0F0F0" #h"6b24b48ce7bc9fb9") (:ecb-mode-test #h"F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1F1" #h"F1F1F1F1F1F1F1F1" #h"995c53eba2ffe670") (:ecb-mode-test #h"F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2F2" #h"F2F2F2F2F2F2F2F2" #h"0009f46ef04206dc") (:ecb-mode-test #h"F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3" #h"F3F3F3F3F3F3F3F3" #h"294403ab0a0f950b") (:ecb-mode-test #h"F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4F4" #h"F4F4F4F4F4F4F4F4" #h"d0b9b490a5d432a9") (:ecb-mode-test #h"F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5F5" #h"F5F5F5F5F5F5F5F5" #h"4f0a863c9af66e64") (:ecb-mode-test #h"F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6F6" #h"F6F6F6F6F6F6F6F6" #h"605c82f308d45d28") (:ecb-mode-test #h"F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7F7" #h"F7F7F7F7F7F7F7F7" #h"844467793e8cef13") (:ecb-mode-test #h"F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8" #h"F8F8F8F8F8F8F8F8" #h"9bfceb92f55477e9") (:ecb-mode-test #h"F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9F9" #h"F9F9F9F9F9F9F9F9" #h"bcb4e1de1f1caec1") (:ecb-mode-test #h"FAFAFAFAFAFAFAFAFAFAFAFAFAFAFAFA" #h"FAFAFAFAFAFAFAFA" #h"839e2276d993d011") (:ecb-mode-test #h"FBFBFBFBFBFBFBFBFBFBFBFBFBFBFBFB" #h"FBFBFBFBFBFBFBFB" #h"d155316adf5753a5") (:ecb-mode-test #h"FCFCFCFCFCFCFCFCFCFCFCFCFCFCFCFC" #h"FCFCFCFCFCFCFCFC" #h"7ba21f967624e072") (:ecb-mode-test #h"FDFDFDFDFDFDFDFDFDFDFDFDFDFDFDFD" #h"FDFDFDFDFDFDFDFD" #h"b397264e7ed29963") (:ecb-mode-test #h"FEFEFEFEFEFEFEFEFEFEFEFEFEFEFEFE" #h"FEFEFEFEFEFEFEFE" #h"c8cd90f1e20846ae") (:ecb-mode-test #h"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" #h"FFFFFFFFFFFFFFFF" #h"28fc2891e623566a") (:ecb-mode-test #h"000102030405060708090A0B0C0D0E0F" #h"0011223344556677" #h"d9a4f870ba1f45d6") (:ecb-mode-test #h"2BD6459F82C5B300952C49104881FF48" #h"EA024714AD5C4D84" #h"67b41e0aa05f593a") (:keystream-test #h"223ef17348f2ab7ddb28cd32ecc7794f" #h"2311d13cdceb87a8" #h"73f7d0695facbc81e617840ca2e12f09e85cf7cefadd5033712bd3b350cbaadeb09f6ca6ee8dc7ea2e99a03bce12942b7ff04e6356736fe8acbbb50c53157f21faef72a0ae7bd8307376c2fb0200dbbea51e6d371547063eca2fd478a1de2327679a68d1dc691628fc830e0b6d1c271bb432df3736ae988fef81f458a717364f3074d9b9a2be94087be629d5eddd40e8c70d3c56f660cdb9fb79f0699767eb70f627c87a79bfce4d4d91bb87e757ae779ad42d42caa6467efc738d8d71b2c09ca612b568ae4e40c2afb1cbf920dfbddfab8296dd7d2a80051b01d85a8514ec343451aa65b06e90e57bd2ed3c77ba6e5d0a59c9efbc692b23122ce936aed05c67ac62b92ff775a180fcc514aef70068227e134e7f92c6ca068461cffd4813db5618ab0ba09d1b129920d86cba8073d3ffb25d98cc05a0df59c742d9356ede3e5ed32cab6ec65a2898efceca816b645ba26c6b6073acb06cb5968ad506b6cc28a969be3df4d88194e9a6935e951eec45bf8c5572328d4e89641fd3703fb3021881086c0e5ac75fba7d2d4e81370363dcfe18af12c104f0f3beb84e7ac3d9c7c7aafbb132c8c34f5bfbf2a5c90aee4f8a47d972e9170089e9d23174192a37b0f2e820699cba6b6f947d3b2b3e07d9869e84cb8d03a43321f8066f4e8593c8ac667bafa2b087b6a0d342296a72ebe24358ad0eb8bf7e1aba72b9ff2b3cc778de54a15322538e6d7b402b34a1dc4abbffa6960c8761199207238e0e4a607d1a37399d82638d50c089687d443a64c0863baf3a02058f83fe9c5ffda6e056ef6990c806f195aca5cf6038bd0ad3c77d9e3db7f0b4581536478c47c6b19551006718b5b8723302a98342421a2ee0707b85e37c1b2d569bfef2ec2cf93d0c81c97c5ab40e34828da37fe4df8d77efae931ee4ab86f03e1f3897882e5034116ec570437de7969b9710693805946f06a632e0d2fc301884d90fc25ddaf6eb29b3db47fbe747b9df0e38f3349b45eedc7e29d68d573e803cc5b3d143cc24c04852f2e3debb7cbcc725a3cf8f5cd009dbd5cef6d64569febe73f800a4d3678d12a32a45e9c883dccf75fa0f063992d8e4b21e1dba94e006335884baab4ecf359766e73718c5d053e6b046514d6be3429fa0d96868179a0a09233ed2a495c35452dbf3db2bb1a4f3d4f239fe2f2e0dd80adc6620a1ac30d3c6e43740c563b4cc2007c41868b71cb5c1a4026e8505cc543c64bd11fd781f8fbb53960083f09cf4d257cb0cd8b57d1659a266168ff716cb8f4aecd3e1cd25013b2858ec3dc8be7a9c7fc0f42ae5f9c8d35d41a2ef90efc91e351016f458c7bc9051e587dd8e4d85167c8a39183a92bdd9816232c39c7a343855ae69a95353b43152ee8bd2587ad4c36f309a75cb18348a5ff78929b0f4") ironclad-0.57/testing/testfuns.lisp000066400000000000000000001161011420372057600174670ustar00rootroot00000000000000;;;; -*- mode: lisp; indent-tabs-mode: nil -*- (in-package :crypto-tests) (defun hex-string-to-byte-array (string &key (start 0) (end nil)) ;; This function disappears from profiles if SBCL can inline the ;; POSITION call, so declare SPEED high enough to trigger that. (declare (type string string) (optimize (speed 2))) (let* ((end (or end (length string))) (length (/ (- end start) 2)) (key (make-array length :element-type '(unsigned-byte 8)))) (declare (type (simple-array (unsigned-byte 8) (*)) key)) (flet ((char-to-digit (char) (declare (type base-char char)) (let ((x (cl:position char #.(coerce "0123456789abcdef" 'simple-base-string) :test #'char-equal))) (or x (error "Invalid hex key ~A specified" string))))) (loop for i from 0 for j from start below end by 2 do (setf (aref key i) (+ (* (char-to-digit (char string j)) 16) (char-to-digit (char string (1+ j))))) finally (return key))))) ;;; test vector files (defun test-vector-filename (ident) (merge-pathnames (make-pathname :directory '(:relative "test-vectors") :name (substitute #\- #\/ (format nil "~(~A~)" ident)) :type "testvec") #.*compile-file-pathname*)) (defun sharp-a (stream sub-char numarg) (declare (ignore sub-char numarg)) (crypto:ascii-string-to-byte-array (read stream t nil t))) (defun sharp-h (stream sub-char numarg) (declare (ignore sub-char numarg)) (hex-string-to-byte-array (read stream t nil t))) (defun run-test-vector-file (name function-map) (let ((filename (test-vector-filename name)) (*readtable* (copy-readtable))) (set-dispatch-macro-character #\# #\a #'sharp-a *readtable*) (set-dispatch-macro-character #\# #\h #'sharp-h *readtable*) (with-open-file (stream filename :direction :input :element-type 'character :if-does-not-exist :error) (loop for form = (read stream nil stream) until (eq form stream) do (cond ((not (listp form)) (error "Invalid form in test vector file ~A: ~A" filename form)) (t (let ((test-function (cdr (assoc (car form) function-map)))) (unless test-function (error "No test function defined for ~A" (car form))) (apply test-function name (cdr form))))) finally (return t))))) ;;; cipher testing (defun cipher-test-guts (cipher-name mode key input output &optional extra-make-cipher-args) (let ((cipher (apply #'crypto:make-cipher cipher-name :key key :mode mode extra-make-cipher-args)) (scratch (copy-seq input))) (crypto:encrypt cipher input scratch) (when (mismatch scratch output) (error "encryption failed for ~A on key ~A, input ~A, output ~A" cipher-name key input output)) (apply #'reinitialize-instance cipher :key key extra-make-cipher-args) (crypto:decrypt cipher output scratch) (when (mismatch scratch input) (error "decryption failed for ~A on key ~A, input ~A, output ~A" cipher-name key output input)))) #+(or lispworks sbcl cmucl openmcl allegro abcl ecl clisp) (defun cipher-stream-test-guts (cipher-name mode key input output &optional extra-args) (let* ((out-stream (crypto:make-octet-output-stream)) (enc-stream (apply #'crypto:make-encrypting-stream out-stream cipher-name mode key extra-args)) (in-stream (crypto:make-octet-input-stream output)) (dec-stream (apply #'crypto:make-decrypting-stream in-stream cipher-name mode key extra-args))) (write-byte (aref input 0) enc-stream) (write-sequence input enc-stream :start 1) (let ((result (crypto:get-output-stream-octets out-stream))) (when (mismatch result output) (error "stream encryption failed for ~A on key ~A, input ~A, output ~A" cipher-name key input output))) (let ((result (copy-seq output))) (setf (aref result 0) (read-byte dec-stream)) (read-sequence result dec-stream :start 1) (when (mismatch result input) (error "stream decryption failed for ~A on key ~A, input ~A, output ~A" cipher-name key output input))))) (defun ecb-mode-test (cipher-name hexkey hexinput hexoutput) (cipher-test-guts cipher-name :ecb hexkey hexinput hexoutput)) (defun ecb-tweak-mode-test (cipher-name hexkey hextweak hexinput hexoutput) (cipher-test-guts cipher-name :ecb hexkey hexinput hexoutput (list :tweak hextweak))) (defun stream-mode-test (cipher-name hexkey hexinput hexoutput) (cipher-test-guts cipher-name :stream hexkey hexinput hexoutput)) (defun stream-nonce-mode-test (cipher-name hexkey hexiv hexinput hexoutput) (cipher-test-guts cipher-name :stream hexkey hexinput hexoutput (list :initialization-vector hexiv))) (defun keystream-test (cipher-name key iv keystream) (let* ((mode (if (= 1 (crypto:block-length cipher-name)) :stream :ctr)) (cipher (crypto:make-cipher cipher-name :key key :mode mode :initialization-vector iv)) (buffer (make-array 1000 :element-type '(unsigned-byte 8) :initial-element 0))) (crypto:keystream-position cipher 100) (crypto:encrypt-in-place cipher buffer :start 100 :end 213) (crypto:keystream-position cipher 500) (crypto:encrypt-in-place cipher buffer :start 500 :end 1000) (crypto:keystream-position cipher 213) (crypto:encrypt-in-place cipher buffer :start 213 :end 500) (crypto:keystream-position cipher 0) (crypto:encrypt-in-place cipher buffer :end 100) (crypto:keystream-position cipher 765) (when (or (/= (crypto:keystream-position cipher) 765) (mismatch buffer keystream)) (error "getting/setting key stream position failed for ~A on key ~A" cipher-name key)))) #+(or lispworks sbcl cmucl openmcl allegro abcl ecl clisp) (defun stream-mode-test/stream (cipher-name hexkey hexinput hexoutput) (cipher-stream-test-guts cipher-name :stream hexkey hexinput hexoutput)) #+(or lispworks sbcl cmucl openmcl allegro abcl ecl clisp) (defun stream-nonce-mode-test/stream (cipher-name hexkey hexiv hexinput hexoutput) (cipher-stream-test-guts cipher-name :stream hexkey hexinput hexoutput (list :initialization-vector hexiv))) (defparameter *cipher-tests* (list (cons :ecb-mode-test 'ecb-mode-test) (cons :ecb-tweak-mode-test 'ecb-tweak-mode-test) (cons :stream-mode-test 'stream-mode-test) (cons :stream-nonce-mode-test 'stream-nonce-mode-test) (cons :keystream-test 'keystream-test))) #+(or lispworks sbcl cmucl openmcl allegro abcl ecl clisp) (defparameter *cipher-stream-tests* (list (cons :ecb-mode-test 'ignore-test) (cons :ecb-tweak-mode-test 'ignore-test) (cons :stream-mode-test 'stream-mode-test/stream) (cons :stream-nonce-mode-test 'stream-nonce-mode-test/stream) (cons :keystream-test 'ignore-test))) ;;; encryption mode consistency checking ;;; tests from NIST (defun mode-test (mode cipher-name key iv input output) (labels ((frob-hex-string (cipher func input) (let ((scratch (copy-seq input))) (funcall func cipher input scratch) scratch)) (cipher-test (cipher func input output) (not (mismatch (frob-hex-string cipher func input) output)))) (let ((cipher (crypto:make-cipher cipher-name :key key :mode mode :initialization-vector iv))) (unless (cipher-test cipher 'crypto:encrypt input output) (error "encryption failed for ~A on key ~A, input ~A, output ~A" cipher-name key input output)) (reinitialize-instance cipher :key key :mode mode :initialization-vector iv) (unless (cipher-test cipher 'crypto:decrypt output input) (error "decryption failed for ~A on key ~A, input ~A, output ~A" cipher-name key output input))))) (defun mode-padding-test (mode cipher-name padding key iv input output) (let ((cipher (crypto:make-cipher cipher-name :key key :mode mode :initialization-vector iv :padding padding)) (buffer1 (make-array (length input) :element-type '(unsigned-byte 8))) (buffer2 (make-array (length output) :element-type '(unsigned-byte 8)))) (crypto:encrypt cipher input buffer2 :handle-final-block t) (when (mismatch buffer2 output) (error "encryption failed for ~A on key ~A, input ~A, output ~A" cipher-name key input output)) (reinitialize-instance cipher :key key :mode mode :initialization-vector iv :padding padding) (crypto:decrypt cipher output buffer1 :handle-final-block t) (when (mismatch buffer1 input) (error "decryption failed for ~A on key ~A, input ~A, output ~A" cipher-name key output input)))) (defparameter *mode-tests* (list (cons :mode-test 'mode-test) (cons :mode-padding-test 'ignore-test))) (defparameter *mode-padding-tests* (list (cons :mode-test 'ignore-test) (cons :mode-padding-test 'mode-padding-test))) ;;; digest testing routines (defun digest-test/base (digest-name input expected-digest) (let ((result (crypto:digest-sequence digest-name input))) (when (mismatch result expected-digest) (error "one-shot ~A digest of ~S failed" digest-name input)))) (defun digest-test/incremental (digest-name input expected-digest) (loop with length = (length input) with digester = (crypto:make-digest digest-name) for i from 0 below length do (crypto:update-digest digester input :start i :end (1+ i)) finally (let ((result (crypto:produce-digest digester))) (when (mismatch result expected-digest) (error "incremental ~A digest of ~S failed" digest-name input))))) (defun digest-test/fill-pointer (digest-name octets expected-digest) (let* ((input (let ((x (make-array (* 2 (length octets)) :fill-pointer 0 :element-type '(unsigned-byte 8)))) (dotimes (i (length octets) x) (vector-push (aref octets i) x)))) (result (crypto:digest-sequence digest-name input))) (when (mismatch result expected-digest) (error "fill-pointer'd ~A digest of ~S failed" digest-name input)))) #+(or lispworks sbcl cmucl openmcl allegro abcl ecl clisp) (defun digest-test/stream (digest-name input expected-digest) (let* ((stream (crypto:make-digesting-stream digest-name))) (when (plusp (length input)) (write-byte (aref input 0) stream) (write-sequence input stream :start 1)) (crypto:produce-digest stream) ; Calling produce-digest twice should not give a wrong hash (when (mismatch (crypto:produce-digest stream) expected-digest) (error "stream-y ~A digest of ~S failed" digest-name input)))) (defun digest-test/reinitialize-instance (digest-name input expected-digest) (let* ((digest (crypto:make-digest digest-name)) (result (progn (crypto:digest-sequence digest input) (crypto:digest-sequence (reinitialize-instance digest) input)))) (when (mismatch result expected-digest) (error "testing reinitialize-instance ~A digest of ~S failed" digest-name input)))) (defun digest-bit-test (digest-name leading byte trailing expected-digest) (let* ((input (let ((vector (make-array (+ 1 leading trailing) :element-type '(unsigned-byte 8) :initial-element 0))) (setf (aref vector leading) byte) vector)) (result (crypto:digest-sequence digest-name input))) (when (mismatch result expected-digest) (error "individual bit test ~A digest of (~D #x~2,'0X ~D) failed" digest-name leading byte trailing)))) (defun xof-digest-test (digest-name output-length input expected-digest) (let* ((digest (crypto:make-digest digest-name :output-length output-length)) (result (crypto:digest-sequence digest input))) (when (mismatch result expected-digest) (error "one-shot ~A xof digest of ~S failed" digest-name input)))) (defparameter *digest-tests* (list (cons :digest-test 'digest-test/base) (cons :digest-bit-test 'digest-bit-test) (cons :xof-digest-test 'xof-digest-test))) (defun ignore-test (&rest args) (declare (ignore args)) nil) (defparameter *digest-incremental-tests* (list (cons :digest-test 'digest-test/incremental) (cons :digest-bit-test 'ignore-test) (cons :xof-digest-test 'ignore-test))) (defparameter *digest-fill-pointer-tests* (list (cons :digest-test 'digest-test/fill-pointer) (cons :digest-bit-test 'ignore-test) (cons :xof-digest-test 'ignore-test))) #+(or lispworks sbcl cmucl openmcl allegro abcl ecl clisp) (defparameter *digest-stream-tests* (list (cons :digest-test 'digest-test/stream) (cons :digest-bit-test 'ignore-test) (cons :xof-digest-test 'ignore-test))) (defparameter *digest-reinitialize-instance-tests* (list (cons :digest-test 'digest-test/reinitialize-instance) (cons :digest-bit-test 'ignore-test) (cons :xof-digest-test 'ignore-test))) ;;; mac testing routines (defun mac-test/base (mac-name key data expected-digest &rest args) (let ((mac (apply #'crypto:make-mac mac-name key args))) (crypto:update-mac mac data) (let ((result (crypto:produce-mac mac))) (when (mismatch result expected-digest) (error "one-shot ~A mac of ~A failed on key ~A, args ~A" mac-name data key args))))) (defun mac-test/incremental (mac-name key data expected-digest &rest args) (loop with length = (length data) with mac = (apply #'crypto:make-mac mac-name key args) for i from 0 below length do (crypto:update-mac mac data :start i :end (1+ i)) finally (let ((result (crypto:produce-mac mac))) (when (mismatch result expected-digest) (error "incremental ~A mac of ~A failed on key ~A, args ~A" mac-name data key args))))) #+(or lispworks sbcl cmucl openmcl allegro abcl ecl clisp) (defun mac-test/stream (mac-name key data expected-digest &rest args) (let ((stream (apply #'crypto:make-authenticating-stream mac-name key args))) (when (plusp (length data)) (write-byte (aref data 0) stream) (write-sequence data stream :start 1)) (crypto:produce-mac stream) ; Calling produce-mac twice should not give a wrong MAC (let ((result (crypto:produce-mac stream))) (when (mismatch result expected-digest) (error "stream ~A mac of ~A failed on key ~A, args ~A" mac-name data key args))))) (defun mac-test/reinitialize-instance (mac-name key data expected-digest &rest args) (let* ((mac (apply #'crypto:make-mac mac-name key args)) (result1 (progn (crypto:update-mac mac data) (crypto:produce-mac mac)))) (declare (ignorable result1)) (cond ((typep mac 'ironclad:gmac) (reinitialize-instance mac :key key :initialization-vector (car (last args)))) (t (reinitialize-instance mac :key key))) (let ((result2 (progn (crypto:update-mac mac data) (crypto:produce-mac mac)))) (when (mismatch result2 expected-digest) (error "testing reinitialize-instance ~A mac of ~A failed on key ~A, args ~A" mac-name data key args))))) (defparameter *mac-tests* (list (cons :mac-test 'mac-test/base))) (defparameter *mac-incremental-tests* (list (cons :mac-test 'mac-test/incremental))) #+(or lispworks sbcl cmucl openmcl allegro abcl ecl clisp) (defparameter *mac-stream-tests* (list (cons :mac-test 'mac-test/stream))) (defparameter *mac-reinitialize-instance-tests* (list (cons :mac-test 'mac-test/reinitialize-instance))) ;;; PRNG testing routines (defun fortuna-test (name seed entropy expected-sequence) (declare (ignore name)) (let ((prng (crypto:make-prng :fortuna :seed (coerce seed 'crypto::simple-octet-vector))) (num-bytes (length expected-sequence))) (loop for (source pool-id event) in entropy do (crypto:add-random-event source pool-id event prng)) (assert (equalp expected-sequence (crypto:random-data num-bytes prng))))) (defun generator-test (name cipher seeds expected-sequences) (declare (ignore name)) (let ((generator (make-instance 'crypto:fortuna-generator :cipher cipher))) (loop for seed in seeds do (crypto:prng-reseed (coerce seed '(vector (unsigned-byte 8))) generator)) (every (lambda (sequence) (assert (zerop (mod (length sequence) 16))) (assert (equalp sequence (crypto:random-data (length sequence) generator)))) expected-sequences))) (defparameter *prng-tests* `((:fortuna-test . ,'fortuna-test) (:generator-test . ,'generator-test))) ;;; Public key testing routines (defun rsa-oaep-encryption-test (name n e d input seed output) ;; Redefine oaep-encode to use a defined seed for the test instead of a random one (setf (symbol-function 'ironclad::oaep-encode) (lambda (digest-name message num-bytes &optional label) (let* ((digest-name (if (eq digest-name t) :sha1 digest-name)) (digest-len (ironclad:digest-length digest-name))) (assert (<= (length message) (- num-bytes (* 2 digest-len) 2))) (let* ((digest (ironclad:make-digest digest-name)) (label (or label (coerce #() '(vector (unsigned-byte 8))))) (padding-len (- num-bytes (length message) (* 2 digest-len) 2)) (padding (make-array padding-len :element-type '(unsigned-byte 8) :initial-element 0)) (l-hash (ironclad:digest-sequence digest label)) (db (concatenate '(vector (unsigned-byte 8)) l-hash padding #(1) message)) (db-mask (ironclad::mgf digest-name seed (- num-bytes digest-len 1))) (masked-db (map '(vector (unsigned-byte 8)) #'logxor db db-mask)) (seed-mask (ironclad::mgf digest-name masked-db digest-len)) (masked-seed (map '(vector (unsigned-byte 8)) #'logxor seed seed-mask))) (concatenate '(vector (unsigned-byte 8)) #(0) masked-seed masked-db))))) (let* ((pk (ironclad:make-public-key :rsa :n n :e e)) (sk (ironclad:make-private-key :rsa :n n :d d)) (c (ironclad:encrypt-message pk input :oaep t)) (m (ironclad:decrypt-message sk output :oaep t))) (when (mismatch c output) (error "encryption failed for ~A on pkey (~A ~A), input ~A, output ~A" name n e input output)) (when (mismatch m input) (error "decryption failed for ~A on skey (~A ~A), input ~A, output ~A" name n d input output)))) (defun elgamal-encryption-test (name p g x y input k output) (let* ((ironclad::*signature-nonce-for-test* k) (pk (ironclad:make-public-key :elgamal :p p :g g :y y)) (sk (ironclad:make-private-key :elgamal :p p :g g :x x :y y)) (c (ironclad:encrypt-message pk input)) (m (ironclad:decrypt-message sk output))) (when (mismatch c output) (error "encryption failed for ~A on pkey (~A ~A ~A), input ~A, output ~A" name p g y input output)) (when (mismatch m input) (error "decryption failed for ~A on skey (~A ~A ~A ~A), input ~A, output ~A" name p g x y input output)))) (defun rsa-pss-signature-test (name n e d input salt signature) ;; Redefine pss-encode to use a defined salt for the test instead of a random one (setf (symbol-function 'ironclad::pss-encode) (lambda (digest-name message num-bytes) (let* ((digest-name (if (eq digest-name t) :sha1 digest-name)) (digest-len (ironclad:digest-length digest-name))) (assert (>= num-bytes (+ (* 2 digest-len) 2))) (let* ((m-hash (ironclad:digest-sequence digest-name message)) (m1 (concatenate '(vector (unsigned-byte 8)) #(0 0 0 0 0 0 0 0) m-hash salt)) (h (ironclad:digest-sequence digest-name m1)) (ps (make-array (- num-bytes (* 2 digest-len) 2) :element-type '(unsigned-byte 8) :initial-element 0)) (db (concatenate '(vector (unsigned-byte 8)) ps #(1) salt)) (db-mask (ironclad::mgf digest-name h (- num-bytes digest-len 1))) (masked-db (map '(vector (unsigned-byte 8)) #'logxor db db-mask))) (setf (ldb (byte 1 7) (elt masked-db 0)) 0) (concatenate '(vector (unsigned-byte 8)) masked-db h #(188)))))) (let* ((pk (ironclad:make-public-key :rsa :n n :e e)) (sk (ironclad:make-private-key :rsa :n n :d d)) (s (ironclad:sign-message sk input :pss t))) (when (mismatch s signature) (error "signature failed for ~A on skey (~A ~A), input ~A, signature ~A" name n d input signature)) (unless (ironclad:verify-signature pk input signature :pss t) (error "signature verification failed for ~A on pkey (~A ~A), input ~A, signature ~A" name n e input signature)))) (defun elgamal-signature-test (name p g x y input k signature) (let* ((ironclad::*signature-nonce-for-test* k) (pk (ironclad:make-public-key :elgamal :p p :g g :y y)) (sk (ironclad:make-private-key :elgamal :p p :g g :x x :y y)) (s (ironclad:sign-message sk input))) (when (mismatch s signature) (error "signature failed for ~A on skey (~A ~A ~A ~A), input ~A, signature ~A" name p g x y input signature)) (unless (ironclad:verify-signature pk input signature) (error "signature verification failed for ~A on pkey (~A ~A ~A), input ~A, signature ~A" name p g y input signature)))) (defun dsa-signature-test (name p q g x y input k signature) (let* ((ironclad::*signature-nonce-for-test* k) (sk (ironclad:make-private-key :dsa :p p :q q :g g :x x :y y)) (pk (ironclad:make-public-key :dsa :p p :q q :g g :y y)) (s (ironclad:sign-message sk input))) (when (mismatch s signature) (error "signature failed for ~A on skey (~A ~A ~A ~A ~A), input ~A, signature ~A" name p q g x y input signature)) (unless (ironclad:verify-signature pk input signature) (error "signature verification failed for ~A on pkey (~A ~A ~A ~A), input ~A, signature ~A" name p q g y input signature)))) (defun ed25519-signature-test (name skey pkey input signature) (let* ((sk (ironclad:make-private-key :ed25519 :x skey :y pkey)) (pk (ironclad:make-public-key :ed25519 :y pkey)) (s (ironclad:sign-message sk input))) (when (mismatch s signature) (error "signature failed for ~A on skey ~A, input ~A, signature ~A" name skey input signature)) (unless (ironclad:verify-signature pk input signature) (error "signature verification failed for ~A on pkey ~A, input ~A, signature ~A" name pkey input signature)))) (defun ed448-signature-test (name skey pkey input signature) (let* ((sk (ironclad:make-private-key :ed448 :x skey :y pkey)) (pk (ironclad:make-public-key :ed448 :y pkey)) (s (ironclad:sign-message sk input))) (when (mismatch s signature) (error "signature failed for ~A on skey ~A, input ~A, signature ~A" name skey input signature)) (unless (ironclad:verify-signature pk input signature) (error "signature verification failed for ~A on pkey ~A, input ~A, signature ~A" name pkey input signature)))) (defun secp256k1-signature-test (name skey pkey input k signature) (let* ((ironclad::*signature-nonce-for-test* k) (sk (ironclad:make-private-key :secp256k1 :x skey :y pkey)) (pk (ironclad:make-public-key :secp256k1 :y pkey)) (s (ironclad:sign-message sk input))) (when (mismatch s signature) (error "signature failed for ~A on skey ~A, input ~A, signature ~A" name skey input signature)) (unless (ironclad:verify-signature pk input signature) (error "signature verification failed for ~A on pkey ~A, input ~A, signature ~A" name pkey input signature)))) (defun secp256r1-signature-test (name skey pkey input k signature) (let* ((ironclad::*signature-nonce-for-test* k) (sk (ironclad:make-private-key :secp256r1 :x skey :y pkey)) (pk (ironclad:make-public-key :secp256r1 :y pkey)) (s (ironclad:sign-message sk input))) (when (mismatch s signature) (error "signature failed for ~A on skey ~A, input ~A, signature ~A" name skey input signature)) (unless (ironclad:verify-signature pk input signature) (error "signature verification failed for ~A on pkey ~A, input ~A, signature ~A" name pkey input signature)))) (defun secp384r1-signature-test (name skey pkey input k signature) (let* ((ironclad::*signature-nonce-for-test* k) (sk (ironclad:make-private-key :secp384r1 :x skey :y pkey)) (pk (ironclad:make-public-key :secp384r1 :y pkey)) (s (ironclad:sign-message sk input))) (when (mismatch s signature) (error "signature failed for ~A on skey ~A, input ~A, signature ~A" name skey input signature)) (unless (ironclad:verify-signature pk input signature) (error "signature verification failed for ~A on pkey ~A, input ~A, signature ~A" name pkey input signature)))) (defun secp521r1-signature-test (name skey pkey input k signature) (let* ((ironclad::*signature-nonce-for-test* k) (sk (ironclad:make-private-key :secp521r1 :x skey :y pkey)) (pk (ironclad:make-public-key :secp521r1 :y pkey)) (s (ironclad:sign-message sk input))) (when (mismatch s signature) (error "signature failed for ~A on skey ~A, input ~A, signature ~A" name skey input signature)) (unless (ironclad:verify-signature pk input signature) (error "signature verification failed for ~A on pkey ~A, input ~A, signature ~A" name pkey input signature)))) (defun curve25519-dh-test (name skey1 pkey1 skey2 pkey2 shared-secret) (let* ((sk1 (ironclad:make-private-key :curve25519 :x skey1 :y pkey1)) (pk1 (ironclad:make-public-key :curve25519 :y pkey1)) (sk2 (ironclad:make-private-key :curve25519 :x skey2 :y pkey2)) (pk2 (ironclad:make-public-key :curve25519 :y pkey2)) (ss1 (ironclad:diffie-hellman sk1 pk2)) (ss2 (ironclad:diffie-hellman sk2 pk1))) (when (mismatch ss1 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey1 pkey2 shared-secret)) (when (mismatch ss2 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey2 pkey1 shared-secret)))) (defun curve448-dh-test (name skey1 pkey1 skey2 pkey2 shared-secret) (let* ((sk1 (ironclad:make-private-key :curve448 :x skey1 :y pkey1)) (pk1 (ironclad:make-public-key :curve448 :y pkey1)) (sk2 (ironclad:make-private-key :curve448 :x skey2 :y pkey2)) (pk2 (ironclad:make-public-key :curve448 :y pkey2)) (ss1 (ironclad:diffie-hellman sk1 pk2)) (ss2 (ironclad:diffie-hellman sk2 pk1))) (when (mismatch ss1 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey1 pkey2 shared-secret)) (when (mismatch ss2 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey2 pkey1 shared-secret)))) (defun elgamal-dh-test (name p g skey1 pkey1 skey2 pkey2 shared-secret) (let* ((sk1 (ironclad:make-private-key :elgamal :p p :g g :x skey1 :y pkey1)) (pk1 (ironclad:make-public-key :elgamal :p p :g g :y pkey1)) (sk2 (ironclad:make-private-key :elgamal :p p :g g :x skey2 :y pkey2)) (pk2 (ironclad:make-public-key :elgamal :p p :g g :y pkey2)) (ss1 (ironclad:diffie-hellman sk1 pk2)) (ss2 (ironclad:diffie-hellman sk2 pk1))) (when (mismatch ss1 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey1 pkey2 shared-secret)) (when (mismatch ss2 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey2 pkey1 shared-secret)))) (defun secp256k1-dh-test (name skey1 pkey1 skey2 pkey2 shared-secret) (let* ((sk1 (ironclad:make-private-key :secp256k1 :x skey1 :y pkey1)) (pk1 (ironclad:make-public-key :secp256k1 :y pkey1)) (sk2 (ironclad:make-private-key :secp256k1 :x skey2 :y pkey2)) (pk2 (ironclad:make-public-key :secp256k1 :y pkey2)) (ss1 (ironclad:diffie-hellman sk1 pk2)) (ss2 (ironclad:diffie-hellman sk2 pk1))) (when (mismatch ss1 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey1 pkey2 shared-secret)) (when (mismatch ss2 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey2 pkey1 shared-secret)))) (defun secp256r1-dh-test (name skey1 pkey1 skey2 pkey2 shared-secret) (let* ((sk1 (ironclad:make-private-key :secp256r1 :x skey1 :y pkey1)) (pk1 (ironclad:make-public-key :secp256r1 :y pkey1)) (sk2 (ironclad:make-private-key :secp256r1 :x skey2 :y pkey2)) (pk2 (ironclad:make-public-key :secp256r1 :y pkey2)) (ss1 (ironclad:diffie-hellman sk1 pk2)) (ss2 (ironclad:diffie-hellman sk2 pk1))) (when (mismatch ss1 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey1 pkey2 shared-secret)) (when (mismatch ss2 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey2 pkey1 shared-secret)))) (defun secp384r1-dh-test (name skey1 pkey1 skey2 pkey2 shared-secret) (let* ((sk1 (ironclad:make-private-key :secp384r1 :x skey1 :y pkey1)) (pk1 (ironclad:make-public-key :secp384r1 :y pkey1)) (sk2 (ironclad:make-private-key :secp384r1 :x skey2 :y pkey2)) (pk2 (ironclad:make-public-key :secp384r1 :y pkey2)) (ss1 (ironclad:diffie-hellman sk1 pk2)) (ss2 (ironclad:diffie-hellman sk2 pk1))) (when (mismatch ss1 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey1 pkey2 shared-secret)) (when (mismatch ss2 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey2 pkey1 shared-secret)))) (defun secp521r1-dh-test (name skey1 pkey1 skey2 pkey2 shared-secret) (let* ((sk1 (ironclad:make-private-key :secp521r1 :x skey1 :y pkey1)) (pk1 (ironclad:make-public-key :secp521r1 :y pkey1)) (sk2 (ironclad:make-private-key :secp521r1 :x skey2 :y pkey2)) (pk2 (ironclad:make-public-key :secp521r1 :y pkey2)) (ss1 (ironclad:diffie-hellman sk1 pk2)) (ss2 (ironclad:diffie-hellman sk2 pk1))) (when (mismatch ss1 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey1 pkey2 shared-secret)) (when (mismatch ss2 shared-secret) (error "shared secret computation failed for ~A on skey ~A, pkey ~A, secret ~A" name skey2 pkey1 shared-secret)))) (defparameter *public-key-encryption-tests* (list (cons :rsa-oaep-encryption-test 'rsa-oaep-encryption-test) (cons :elgamal-encryption-test 'elgamal-encryption-test))) (defparameter *public-key-signature-tests* (list (cons :rsa-pss-signature-test 'rsa-pss-signature-test) (cons :elgamal-signature-test 'elgamal-signature-test) (cons :dsa-signature-test 'dsa-signature-test) (cons :ed25519-signature-test 'ed25519-signature-test) (cons :ed448-signature-test 'ed448-signature-test) (cons :secp256k1-signature-test 'secp256k1-signature-test) (cons :secp256r1-signature-test 'secp256r1-signature-test) (cons :secp384r1-signature-test 'secp384r1-signature-test) (cons :secp521r1-signature-test 'secp521r1-signature-test))) (defparameter *public-key-diffie-hellman-tests* (list (cons :curve25519-dh-test 'curve25519-dh-test) (cons :curve448-dh-test 'curve448-dh-test) (cons :elgamal-dh-test 'elgamal-dh-test) (cons :secp256k1-dh-test 'secp256k1-dh-test) (cons :secp256r1-dh-test 'secp256r1-dh-test) (cons :secp384r1-dh-test 'secp384r1-dh-test) (cons :secp521r1-dh-test 'secp521r1-dh-test))) ;;; authenticated encryption testing routines (defun aead-test (mode-name input ad output tag &rest args) (let* ((parameters (case mode-name ((:gcm gcm crypto:gcm :eax eax crypto:eax) (list :cipher-name (car args) :key (cadr args) :initialization-vector (caddr args))) ((:etm etm crypto:etm) (destructuring-bind (cipher-name ckey mode iv mac-name mkey mparam) args (let ((cipher (crypto:make-cipher cipher-name :key ckey :mode mode :initialization-vector iv)) (mac (if mparam (crypto:make-mac mac-name mkey mparam) (crypto:make-mac mac-name mkey)))) (list :cipher cipher :mac mac)))))) (ae (apply #'crypto:make-authenticated-encryption-mode mode-name parameters)) (ciphertext (crypto:encrypt-message ae input :associated-data ad))) (when (or (mismatch ciphertext output) (mismatch (crypto:produce-tag ae) tag)) (error "encryption failed for ~A, input ~A, output ~A" mode-name input output)) (setf parameters (case mode-name ((:gcm gcm crypto:gcm :eax eax crypto:eax) parameters) ((:etm etm crypto:etm) (destructuring-bind (cipher-name ckey mode iv mac-name mkey mparam) args (let ((cipher (crypto:make-cipher cipher-name :key ckey :mode mode :initialization-vector iv)) (mac (if mparam (crypto:make-mac mac-name mkey mparam) (crypto:make-mac mac-name mkey)))) (list :cipher cipher :mac mac)))))) (apply #'reinitialize-instance ae :tag tag parameters) (let ((plaintext (crypto:decrypt-message ae output :associated-data ad))) (when (or (mismatch plaintext input) (mismatch (crypto:produce-tag ae) tag)) (error "decryption failed for ~A, input ~A, output ~A" mode-name input output))))) (defun aead-test/incremental (mode-name input ad output tag &rest args) (let* ((parameters (case mode-name ((:gcm gcm crypto:gcm :eax eax crypto:eax) (list :cipher-name (car args) :key (cadr args) :initialization-vector (caddr args))) ((:etm etm crypto:etm) (destructuring-bind (cipher-name ckey mode iv mac-name mkey mparam) args (let ((cipher (crypto:make-cipher cipher-name :key ckey :mode mode :initialization-vector iv)) (mac (if mparam (crypto:make-mac mac-name mkey mparam) (crypto:make-mac mac-name mkey)))) (list :cipher cipher :mac mac)))))) (ae (apply #'crypto:make-authenticated-encryption-mode mode-name parameters)) (plaintext (make-array (length input) :element-type '(unsigned-byte 8))) (ciphertext (make-array (length output) :element-type '(unsigned-byte 8)))) (dotimes (i (length ad)) (crypto:process-associated-data ae ad :start i :end (1+ i))) (dotimes (i (length input)) (crypto:encrypt ae input ciphertext :plaintext-start i :plaintext-end (1+ i) :ciphertext-start i :handle-final-block (= i (1- (length input))))) (when (or (mismatch ciphertext output) (mismatch (crypto:produce-tag ae) tag)) (error "encryption failed for ~A, input ~A, output ~A" mode-name input output)) (setf parameters (case mode-name ((:gcm gcm crypto:gcm :eax eax crypto:eax) parameters) ((:etm etm crypto:etm) (destructuring-bind (cipher-name ckey mode iv mac-name mkey mparam) args (let ((cipher (crypto:make-cipher cipher-name :key ckey :mode mode :initialization-vector iv)) (mac (if mparam (crypto:make-mac mac-name mkey mparam) (crypto:make-mac mac-name mkey)))) (list :cipher cipher :mac mac)))))) (apply #'reinitialize-instance ae :tag tag parameters) (dotimes (i (length ad)) (crypto:process-associated-data ae ad :start i :end (1+ i))) (dotimes (i (length output)) (crypto:decrypt ae output plaintext :ciphertext-start i :ciphertext-end (1+ i) :plaintext-start i :handle-final-block (= i (1- (length output))))) (when (or (mismatch plaintext input) (mismatch (crypto:produce-tag ae) tag)) (error "decryption failed for ~A, input ~A, output ~A" mode-name input output)))) (defparameter *authenticated-encryption-tests* (list (cons :aead-test 'aead-test))) (defparameter *authenticated-encryption-incremental-tests* (list (cons :aead-test 'aead-test/incremental)))