diff -urN lin.2.4.3/Documentation/Configure.help int.2.4.3/Documentation/Configure.help --- lin.2.4.3/Documentation/Configure.help Mon Mar 26 04:24:31 2001 +++ int.2.4.3/Documentation/Configure.help Mon Apr 2 18:37:26 2001 @@ -298,8 +298,8 @@ bits of, say, a sound file). This is also safe if the file resides on a remote file server. If you want to do this, you will first have to acquire and install a kernel patch from - ftp://ftp.kerneli.org/pub/kerneli/ , and then you need to - say Y to this option. + ftp://ftp.kernel.org/pub/linux/kernel/crypto/v2.2/ , and then you + need to say Y to this option. Note that alternative ways to use encrypted file systems are provided by the cfs package, which can be gotten from @@ -325,6 +325,364 @@ called loop.o. Most users will answer N here. + +General encryption support (EXPERIMENTAL)' +CONFIG_BLK_DEV_LOOP_GEN + [1998-12-02] + If you answer yes to this option, the loop-driver will support all + crypto algorithms selected in the crypto library (see the 'Crypto' + menu entry in the main menu). + + This loop module will use the ciphers in CBC-mode which is more + secure than ECB-mode. This module will also initialize the CBC-mode + of the cipher with the block-number of the block being encrypted. + +Crypto ciphers +CONFIG_CIPHERS + Ciphers basically help us scramble data so that other people don't + get access to it. Useful applications for this include hiding hard + drive contents or network traffic from unauthorized eyes. Compare a + file encrypted with a cipher with very good safe: The document is in + it, you can carry the document with you (if the safe is not too + heavy), but others can steal it, too. However, they will not be able + to read the document if the safe is any good. + + Mathematically speaking, a cipher is a parameter-dependant function + E(K, ) that takes a fixed-length block M (usually 64 or 128 bits) + and maps it onto another (usually equal-sized) block C=E(K,M) in such + a way that, without knowledge of the "key" K, it is hard to compute + + 1. M, if C and the function E are given, + + 2. C, if M is given and the function E is known. + + M is called the 'plaintext' and C the 'ciphertext'. The above + properties are commonly described as "All the security of the cipher + lies in its key". However, there always exists the inverse function + D(K, ) of E(K, ) such that D(K,E(K,M))=M for any M. The ideal + cipher is one where it is impossible to compute M if you have C, but + not K. In this case, the easiest way to break the cipher is to use + 'brute-force', i.e. try all K in turn until you hit the right + one. With most ciphers in this library, K is a 128-bit number. Here, + brute-force attacks are infeasible since they require testing all + 2^128 possible keys K, which would take far too long on any + conceivable computer (some big multiple of the age of the universe + for example). + + Unfortunately, the ideal cipher has not been found yet, so most + ciphers in this library, or certain 'reduced-round' versions + thereof, can be broken faster than brute-force. A cipher is secure, + if it cannot be broken _much_ faster than brute-force and + brute-force is infeasible. + + If you say 'Y' or 'M' here, you are able to select a variety of + ciphers for the Cipher-API. Ciphers you select below can then be + used by cryptographic kernel modules. If you say 'N' here, those + modules will use their own implementations or even not work at all. + + If unsure, say 'N'. + + +Digest algorithms +CONFIG_DIGEST + A message digest (or 'one-way function' or 'hash') is a function H + that maps an arbitrary-length message M onto a 128-bit or 160-bit + number h=H(M) such that the following conditions are satisfied: + + 1. For a given M, it is easy to compute h=H(M). + + 2. For a given h, it is hard to find M such that h=H(M). + + 3. For a given M, it is hard to find another message M' such that + H(M')=H(M). + + 4. It is hard to find M, M' such that H(M)=H(M'). + + This makes the name 'one-way function' plausible. Hashes are widely + used by cryptographic programs. E.g. the Linux kernel uses a hash to + generate random numbers. + +# Marc Mutz : this will be the help text, once this +# functionality is in place: +# If you say 'Y' here and select the SHA-1 message digest below, +# then the drivers for /dev/random and /dev/urandom will use the +# digest api instead of their own implementation. This will not work +# if you build as modules. +# + If you say 'Y' or 'M' here, cryptographic modules are able to use + the Digest-API if they need a hash function. If you say 'N' here, + they will use their own implementations (which will probably + increase the size of the compiled kernel if there are more than one + such modules). + + If unsure, say 'N'. + +AES cipher (EXPERIMENTAL - Read Help) +CONFIG_CIPHER_AES + [2000-10-04] + DESCRIPTION: + AES (Advanced Encryption Standard) is a proposed Federal Information + Processing Standard (FIPS) of the USA. Nevertheless, it was + conceived by Joan Daemon and Vincent Rijmen, two Belgians, under the + name Rijndael and submitted to the AES selection process in 1997 + (http://www.nist.gov/aes). On Oct 2, 2000 it was announced as being + the selected algorithm for the AES. + + Rijndael is a variable-round iterated block cipher that supports + block and key sizes each ranging from 128 to 256 bits, in steps of + 64. The number of rounds is dependant on the block and key sizes and + varies from 10 for 128/128 to 14 for 256/256 block/key sizes. + + SPPED: N/A + + PATENTS and LICENSING: + Rijndeal/AES is free of patents. As beign AES, NIST will ensure that + this will stay so. + + KNOWN ATTACKS: + None of the following attacks is able to undermine the security of + AES, when used with the round numbers specified by the authors. + + The original Rijndael specification contains a truncated + differential attack on 4,5 resp. 6 round versions ("Square attack") + requiring 2^9, 2^11 resp. 2^32 plaintexts and 2^9, 2^40 resp. 2^72 + work. There is another truncated differential attack that leads to a + collision attack on 7 round 192 and 256 bit keysize Rijndael + requiring 2^32 plaintext encryptions and 2^140 work. Other authors + extend the original Square attack to 7 rounds of 192 and 256 bit + keysize, both with more that 2^184 work. Further improvements of + these techniques result in attacks against 7 and 8 round + variants. But the latter require almost all of the codebook. At + last, there is a related key attack against 9 round, 256 bit keysize + Rijndael that requires 2^77 chosen plaintexts and 2^224 work. + +AES available under the Rijndael name +CONFIG_CIPHER_RIJNDAEL + If you say 'Y' here, AES will be also accessible through its + original name Rijndael. This is mostly for backwards compatibilty. + If you use kernel modules that use Rijndael, but do not know that it + is now called AES, say 'Y' here. + + If unsure, say 'N'. + +DFC encryption (EXPERIMENTAL - Read Help) +CONFIG_CIPHER_DFC + [2000-09-13] + DESCRIPTION: + DFC (The Decorrelated Fast Cipher) from CNRS and France Telecom is a + candidate algorithm for the Advanced Encryption Standard (AES). + It didn't survive the first round of the AES selection, i.e. it is + not one of the five remaining algorithms in AES round two. + + SPEED: N/A + + PATENTS and LICENSING: + It is unknown (to me) whether DFC is covered by patents. + + KNOWN ATTACKS: + I don't know of any attacks, but the problem with this cipher is + that it was thrown out of the AES competition. This may not mean it + is a bad cipher, but it certainly means that therefore it has gotten + _much_ less attention of cryptanalysts. Hence, there may be more + flaws in it than in the AES finalists. + +MARS encryption (EXPERIMENTAL - Read Help) +CONFIG_CIPHER_MARS + [2000-09-13] + DESCRIPTION: + MARS was IBM's candidate algorithm for the Advanded Encryption + Standard (AES). It consists of 16 core rounds and eight pre-mixing + as well as eight post-mixing rounds. + + PATENTS and LICENSING: + Refer to IBM for any copyright, patent or license issues for the + MARS algorithm. (However, if this cipher is elected as AES, it has + to remain/become free for everyone to use) + NOTE: MARS is covered by patents and might be illegal to use in many + cases. + + SPEED: + MARS is a fast algorithm achieving speeds up to 66Mbit on a Pentium + Pro 200. + + KNOWN ATTACKS: + As of the Third AES Candidate Conference (Apr. 2000), the best + attack presented breaks 11 of the 16 core rounds of MARS faster than + brute-force. This does _not_ mean that MARS is insecure, but shows + it has design weaknesses. For more information and pointers see + http://www.counterpane.com/crypto-gram-0004.html#AES-News + + +RC6 encryption (EXPERIMENTAL - Read Help) +CONFIG_CIPHER_RC6 + [2000-09-13] + DESCRIPTION: + RC6 is invented by Ron Rivest and RSA Labs. It was one of the five + candidates in round two for the Advanced Encryption Standard (AES). + + PATENTS and LICENSING: + Refer to RSA Labs and Ron Rivest for any copyright, patent or + license issues for the RC6 algorithm. + NOTE: RC6 is covered by patents and might be illegal to use in many + cases. + + SPEED: + RC6 is a simple and fast algorithm achieving speeds up to 88Mbit on + a Pentium Pro 200. It makes use of multiplication and + data-dependent rotations which reduces the number of rounds + necessary and increases its speed (on processors which have fast + muliplies). + + KNOWN ATTACKS: + As of the Third AES Candidate Conference (Apr. 2000), 15 of the 20 + rounds of RC6 can be broken faster than brute-force. This does _not_ + mean that RC6 is insecure, but shows it has design weaknesses. For + more information and pointers see + http://www.counterpane.com/crypto-gram-0004.html#AES-News + +Serpent encryption +CONFIG_CIPHER_SERPENT + [1998-10-13] + DESCRIPTION: + Serpent is a 128-bit block cipher designed by Ross Anderson, Eli + Biham and Lars Knudsen as a candidate for the Advanced Encryption + Standard (AES, see http://www.nist.gov/aes). It was one of the five + finalists after round two of the AES candidate search. Serpent + provides users with the highest practical level of assurance that no + shortcut attack will be found. To achieve this, the algorithm uses + well understood mechanisms so that its security relies on the wide + experience of block cipher cryptoanalysis. The algorithm uses twice + as many rounds as are necessary to block all currently known + shortcut attacks. The algorithm is designed to have a service life + of 50 years and to continue to protect legacy data for a further 50 + years beyond that. + + SPEED: + Despite these exacting design constraints, Serpent is faster than + DES. Its design supports a very efficient bitslice implementation, + and this implementation runs at almost 25 Mbit/sec on a + 200MHz Pentium (compared with about 15 Mbit/sec for DES). However, + compared to competitors for AES left in round two, it is painfully + slow to implement in software. + + PATENTS and LICENSING: + Serpent is completely in the public domain, and no restrictions are + imposed on its use. + + KNOWN ATTACKS: + As of the Third AES Candidate Conference (Apr. 2000), 9 of the 32 + rounds of Serpent can be broken faster than brute-force. This does + _not_ mean that Serpent is insecure, but shows it has design + weaknesses. For more information and pointers see + http://www.counterpane.com/crypto-gram-0004.html#AES-News + + More information about Serpent: + http://www.cl.cam.ac.uk/~rja14/serpent.html + + More information about the implementation: + http://www.seven77.demon.co.uk/crypto_technology.htm + +CAST 128 encryption +CONFIG_BLK_DEV_LOOP_CAST + This module implements CAST-128. The algorithm + was published in RFC 2144 as a proposed Internet standard, and is + from Entrust (http://www.entrust.com/) a Canadian company. + + This loop module uses the weak ECB-mode which means that it is more + open to certain attacks than CBC-mode ciphers. + +IDEA encryption +CONFIG_CIPHER_IDEA + [2000-09-13] + DESCRIPTION: + IDEA is a 64-bit block cipher designed by Xuejia Lai and James + Massey in 1992. It uses a 128-bit key and eight rounds with a round + function that mixes three---generally incompatible---algebraic + groups: XOR, addition mod 2^16 and multiplication mod 2^16-1. + + SPEED: + IDEA should be quite fast on CPU's that have a fast multiplication + instruction (beware that the Pentium IV processor is quite poorly + equipped in this area w.r.t its predecessors). + + PATENTS and LICENSING: + The IDEA code is mostly from ASCOM (http://www.ascom.com/) and + licensed for non-commercial use. + + This module may contain algorithms which are patented, and/or + require licensing for commerical use. Please read crypto/idea.c for + details. + + KNOWN ATTACKS: + As of 1995, the most successful attack broke two of the eight rounds + of IDEA. Since then, I strongly believe in the existence of better + attacks, but you should search the literature to be sure. + +MD5 digest (EXPERIMENTAL) +CONFIG_DIGEST_MD5 + [2000-09-13] + MD5 once was the most widely used hash function, until it was shown + that MD5 is not collision-resistant, i.e., you can find messages M, + M', such that MD5(M)=MD5(M') faster than brute-force. This is called + a "birthday attack", named after the birthday paradox. Although this + is not a security problem per se, it is still something a + cryptographically strong hash function should not exhibit. + + Don't use MD5 anymore, except to support legacy applications (of + which there should not be too many, since the digest API is + relatively new) and for fingerprinting files, something that was + better done in user space. + +SHA1 digest (EXPERIMENTAL) +CONFIG_DIGEST_SHA1 + [2000-09-13] + SHA-1 is currently the most widely deployed hash function. Although + designed by the NSA it is generally believed to not contain back + doors and be the most secure message digest available today. If you + want to use a cryptographically secure hash function, use SHA-1. + +Twofish encryption (only as module) +CONFIG_BLK_DEV_LOOP_FISH2 + DESCRIPTION: + Twofish is a quite new algorithm invented by Bruce Schneier, Doug + Whiting, John Kelsey, Chris Hall and David Wagner, for more + information see http://www.counterpane.com/twofish.html. It is one of + the remaining five candidates for the Advanced Encryption + Standard (AES). Blowfish is the older algorithm and was also + invented by Bruce Schneier. + + SPEED: N/A + + PATENTS and LICENSING: + Both algorithms are free of licensing charges at the moment. Twofish + must remain so if it is elected as AES winner. + + KNOWN ATTACKS: + to be written + + This module operates twofish in CBC-mode + +Blowfish encryption (EXPERIMENTAL) +CONFIG_CIPHER_BLOWFISH + [2000-09-13] + DESCRIPTION: + Blowfish is an algorithm invented by Bruce Schneier. For more + information about the algorithm see + http://www.counterpane.com/blowfish.html or see Schneier's book + "Applied Cryptography", chapter 13.4. Twofish is the newer algorithm + and was also invented by Bruce Schneier (et al.). + + SPEED: + Blowfish is a very efficient cipher on 32-bit microprocessors. In + fact, I guess it is the fastest available for the Linux Crypto API + as of now. Definitive figures should be added here... + + PATENTS and LICENSEING: + Blowfish is free of patents and licensing charges and Schneier says + it will stay that way. + + KNOWN ATTACKS: + to be written Network Block Device support CONFIG_BLK_DEV_NBD diff -urN lin.2.4.3/Documentation/crypto/00-INDEX int.2.4.3/Documentation/crypto/00-INDEX --- lin.2.4.3/Documentation/crypto/00-INDEX Thu Jan 1 01:00:00 1970 +++ int.2.4.3/Documentation/crypto/00-INDEX Mon Apr 2 18:37:26 2001 @@ -0,0 +1,10 @@ +This directory contains patches and documentation to code in the kernel that +contains crypto + - Alexander Kjeldaas + +util-linux is at 2.10o now and can be found at: + ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/ + +util-linux-2.10o.patch + patch for util-linux adding support for crypto + diff -urN lin.2.4.3/Documentation/crypto/ChangeLog int.2.4.3/Documentation/crypto/ChangeLog --- lin.2.4.3/Documentation/crypto/ChangeLog Thu Jan 1 01:00:00 1970 +++ int.2.4.3/Documentation/crypto/ChangeLog Mon Apr 2 20:04:23 2001 @@ -0,0 +1,745 @@ +2001-04-02 Alexander Kjeldaas + + * International kernel patch 2.4.3.1 released. + +2001-03-31 Herbert Valerio Riedel + + * Added keylength checks in blowfish_set_key. + +2001-03-13 Sebastian Klemke + + * Updated util-linux patch to 2.11a/b. + +2001-02-13 Christoph Hellwig + + * Moved all initialization to the newstyle module_{init,exit} + version. Removed one proc support function from cryptoapi.c that + now exists in 2.2.18. + +2001-??-?? Martin Aumuel + + * gen-cbc.h decrypt didn't honour the atomic flag. + +2001-01-15 Alexander Kjeldaas + + * International kernel patch 2.4.0.3 released. + +w * cbc-decryption is buggy for in-place decryption. Bug identified by + Jari Ruusu . + + * faq.txt updates. + + * man-page updates for util-linux + +2001-01-15 Martin Douda + + * proper null-termination of passwords in util-linux patch. + +2001-01-15 Frank Heckenbach + + * util-linux fixes: + * --keybits didn't work properly + * ioctl invokation bug + * -e none not needed + +2001-01-07 Alexander Kjeldaas + + * International kernel patch 2.4.0.2 released. + + * Bug fixes in util-linux patch. It should now try new-style + ioctl and then fall back to old-style if new-style failed. + +2001-01-05 Alexander Kjeldaas + + * International kernel patch 2.4.0.1 released. + + * All cipher/digest ID stuff is now gone as it doesn't scale + (find_*_by_id, CIPHER_XXX, DIGEST_XXX, LO_CRYPT_XXX). + + * Renamed ciphers. They are now loaded based on their names. + + * New util-linux patch which specifies ciphers using names. + + * --pass-fd feature in the util-linux patch by + Marc Mutz + + * loop_gen.c merged with loop.c. + + * Removed cipe and thenon-cryptoapi loop block device crypto + plugins for the 2.4.x patch. + +2000-10-17 Alexander Kjeldaas + + * International kernel patch 2.2.17.10 released. + + * Changes from 2.4 kernel port by Harald Welte + merged. + + * Added AES-style testvectors "ecb_vk.txt" for all AES finalists. + + * Removed cipher_context->key - nobody was using it. Changed + cipher_context->iv from u32[] to u8[]. + + * In loop_gen.c: IV for cbc-mode initialized in little-endian + manner. NOTE: This breaks old loopback files on big-endian + machines. + + * testing: New option -s to testcip to swab32 the ciphertext + before comparisons. Compile fixes. + +2000-10-16 Alexander Kjeldaas + + * International kernel patch 2.2.17.9 released. + + * loop_gen.c fix. Do not check blocksize of a cipher to decide + whether it supports encrypting a variable-length block. It always + does. + +2000-10-14 Alexander Kjeldaas + + * International kernel patch 2.2.17.8 released. + + * Configure.help updates with the AES results. Patch from Marc + Mutz + + * Cipher list in config organized according to block-size with AES + at the top. Patch from Marc Mutz + + * The set of allowed key-sizes for a cipher is now exported as a + mask in /proc. Constants for allowed key-sizes are defined in + crypto.h. Patch from Marc Mutz + + * Ability to build cryptoapi.c as a module was missing from + Config.in. Fixed. + + * DEFINE_{DIGEST,CIPHER} et. al. removed and replaced by explicit + struct {digest,cipher}_implementation initializations making the + code more readable. + + * API change. Encryp/Decrypt now accepts any input/output byte + count. + + * gen-cbc.h changed to allow any input-size for encryption, or + output-size for decryption. When encrypting large blocks, + gen-cbc.h will now sleep (you can play music while using an + encrypted file-system). Added gen-ecb.h which implements the same + for ECB mode. All ciphers changed to use gen-ecb.h to implement + their ECB mode. + + * Removed old cruft (crypto/cipherapi.c crypto/digestapi.c) + + * crypto/cryptoapi.c implementation made simpler. + + * Crypto API functions are documented in kernel-doc style. + + * crypto/testing updates. digesttest now compiles. A lot of + duplicated functions are now available in misc.c. None of the + programs include glibc headers any more, all necessary functions + are declared in libcfuncs.h. New program "testapi" for testing + that a cipher deals with the new API. + +2000-10-03 Alexander Kjeldaas + + * International kernel patch 2.2.17.7 released. + + * speed.c cleanups. + + * The crypto API now compiles when proc support has been disabled. + + * AES cipher added. The AES cipher is implemented by the rijndael + module, but with a separate cipher id/name. + + * Updated Rijndael implementation from Brian Gladman merged. + + * ECB testvectors for rijndael from the AES submission added. + +2000-09-28 Alexander Kjeldaas + + * International kernel patch 2.2.17.6 released. + + * Twofish implementation added. Patch from Marc Mutz + . + + * loop_gen.c cleanups + plugged memory leak by Marc Mutz + . + + * Configure.help updates. Patch from Marc Mutz + + * New script crypto/testing/aes-test from Marc Mutz tests ciphers + based on the known-answer test values in NIST format. + + * crypto/testing/speed.c used weak DES-keys for speed-testing. + Fixed by patch from Gisle Sælensminde . + +2000-09-25 Alexander Kjeldaas + + * International kernel patch 2.2.17.5 released. + + * Update ChangeLog :-) + + * International kernel patch 2.2.17.4 released. + + * Configure.help updates from Marc Mutz + + * Changed ripe-md160 implementation in the util-linux patch + because of license worries. Now uses GnuPG implementation. Patch + from Marc Mutz . + + * util-linux patch can now create more than 160 bits of enthropy + for the 3des cipher by first hashing the passphrase, and then + hashing the passphrase prepended by the character "A". Patch from + Gisle Sælensminde . + + * rijndael3.c updates from Marc Mutz should get + this cipher working again. + +2000-09-19 Alexander Kjeldaas + + * International kernel patch 2.2.17.3 released. + + * Some changes were made to crypto/testing/speed.c to make it + compile again after the crypto API changes. + + * des_ede3.c updates from Gisle Sælensminde + containing updated docs on weak/semi-weak keys and how they are + handled, some code updates, and testvectors for 3des. + + * Received Configure.help updates from Marc Mutz + including the AES status of various ciphers and their best known + attacks. + +2000-09-15 Alexander Kjeldaas + + * International kernel patch 2.2.17.2 released. + + * Added 3DES (DES_EDE3) cipher from Gisle Sælensminde + . The implementation is based on the + DES-implementation already in kerneli so at this point it's not + very fast. + +2000-09-14 Alexander Kjeldaas + + * International kernel patch 2.2.17.1 released. + + * New util-linux-2.10m.getpass.diff from Hauke Johannknecht + that some might want to use. Adds a -k option + to losetup. Not for the security-conscious, but some might want + to use it. + +2000-08-04 Alexander Kjeldaas + + * International kernel patch 2.2.16.9 released. + + * Fixed gcc 2.9x compile failure of the loop_cast.c module (patch + by Sverker Wiberg ). + +2000-08-02 Alexander Kjeldaas + + * International kernel patch 2.2.16.8 released. + + * Fixed SMP compile bug. + +2000-07-17 Alexander Kjeldaas + + * International kernel patch 2.2.16.7 released. + + * Merged some bug-fixes from 2.4.0test2.1 patch. + +2000-07-10 Alexander Kjeldaas + + * International kernel patch 2.2.16.6 released. + + * Small annoyance when using "make xconfig" fixed by + Andreas Steinmetz + +2000-07-03 Alexander Kjeldaas + + * International kernel patch 2.2.16.5 released. + + * Removed {un,}lock_cipher, {un,}lock_digest functions. Use + {digest,cipher}_implementation->{un,}lock() directly instead. + + * Stopped using linux/lists.h which is depreciated. + + * Merged crypto/cipherapi.c and crypto/digestapi.c into single + interface cryptoapi.c, saving 4k. Cipher- and digest algorithms + are now subclasses of a "transform". The old interface is still + supported for the most part. + + * Changed encrypt/decrypt interfaces to use byte-pointers instead + of int32-pointers. This means that the ciphers should start being + endian-aware. + +2000-06-27 Alexander Kjeldaas + + * International kernel patch 2.2.16.4 released. + * Fixed build bug that prevented digestapi.c from being built for + kernels with modules disabled. Fix by + Andreas Steinmetz + +2000-06-19 Alexander Kjeldaas + + * International kernel patch 2.2.16.3 released. + * Changed generic_rotl and generic_rotr to be macros instead of + inline functions. Gcc uses an extra register with the inline + functions (noted by Gisle Sælensminde). + * Fixed bug in Makefile for SHA1 digest (noted by Walter Hofmann + ). + +2000-06-19 Gisle Sælensminde + + * Further serpent implementation optimization. + +2000-06-14 Alexander Kjeldaas + + * International kernel patch 2.2.16.2 released. + * Fixed bug in md5c.c:Decode for big-endian machines. Noted by + David Kuestler . + +2000-06-14 Gisle Sælensminde + + * Faster serpent implementation based on optimized pentium-sboxes + made by Dag Arne Osvik. + +2000-06-14 Hauke Johannknecht + + * Documentation updates (replay.com -> zedz.com) + * Added util-linux-2.10m.int.patch + +2000-06-14 Alexander Kjeldaas + + * International kernel patch 2.2.16.1 released. + * International kernel patch 2.2.15.1 released. + +2000-02-18 Alexander Kjeldaas + + * International kernel patch 2.2.14.1 released. + +1999-11-23 Alexander Kjeldaas + + * International kernel patch 2.2.13.3 released. + + * Minor tweak to make sure the FreeSWAN 1.1 release patches cleanly. + +1999-11-23 Andrew McDonald + + * SHA1 implementation for the digest API added (based on the + public domain code by Steve Reid and the md5glue code). + + * Added a digest algorithm test program in linux/crypto/testing/ + + * FIX: The blowfish module claimed to have a 128-bit (16 byte) + blocksize and IV. The correct number is of course 64-bit. + + * FIX: The working size for MD5 was wrong (too little memory was + allocated). + +1999-10-25 Alexander Kjeldaas + + * International kernel patch 2.2.13.2 released. + + * Compile fix for MD5 by Hermann Schichl + +1999-10-20 Alexander Kjeldaas + + * International kernel patch 2.2.13.1 released. + + * New upstream kernel release. + +1999-09-15 Alexander Kjeldaas + + * International kernel patch 2.2.12.2 released. + + * Digest API mirroring the cipher API added. Contributed by Alan + Smithee. + + * MD5 digest algorithm added. + +1999-09-08 Alexander Kjeldaas + + * International kernel patch 2.2.12.1 released. + +1999-09-06 Alexander Kjeldaas + + * Updated util-linux patch in Documentation/crypto and removed + some patches that nobody uses. + +1999-08-12 Alexander Kjeldaas + + * International kernel patch 2.2.11.2 released. + + * CIPE can only be built as a module, the make config indicated + otherwise. + + * Upgraded to CIPE 1.3.0 + + * International kernel patch 2.2.11.1 released. + + * New upstream kernel release. + +1999-06-24 Alexander Kjeldaas + + * International kernel patch 2.2.10.4 released. + + * Added new config option for using relative block numbers instead + of absolute ones when calling the loop block device's transfer + function. This should fix the #1 issue with using loopback crypto + filesystems. + + * Updated Documentation/Configure.help which had erroneous + CONFIG_XX variables listed for various ciphers [Thanks to Andrew + Pam for spotting this]. + + * Added LO_CRYPT_RIJNDAEL and LO_CRYPT_RC5 variables to + include/linux/loop.h. + + * Updated the faq to mention rijndael and rc5, as well as how to + convert from the old absolute block number stuff to the new + relative one. + +1999-06-24 Alexander Kjeldaas + + * International kernel patch 2.2.10.3 released. + +1999-06-24 Andrew Pam + + * Updated util-linux patch to cover 2.9s + +1999-06-23 Alexander Kjeldaas + + * International kernel patch 2.2.10.2 released. + * Stuff in linux/crypto/testing didn't compile. + +1999-06-19 Pekka Riikonen + + * Added RC5 cipher. + +1999-06-18 Alexander Kjeldaas + + * International kernel patch 2.2.10.1 released. + * ENskip support didn't compile. + +1999-05-21 Alexander Kjeldaas + + * International kernel patch 2.2.9.1 released. + +1998-12-18 Patrice Lacroix + + * Updates to the faq (Documentation/crypto/faq.txt) + +1999-04-15 Alexander Kjeldaas + + * International kernel patch 2.2.5.1 released. + * Merged with kernel 2.2.5 + * New documentation for loopback crypto in + Documentation/crypto/faq.txt + +1999-03-25 Alexander Kjeldaas + + * International kernel patch 2.2.4.1 released. + * Merged with kernel 2.2.4 + +1999-01-29 Alexander Kjeldaas + + * International kernel patch 2.2.1.1 released. + +1998-01-29 Patrice Lacroix + + * /proc/crypto support. + +1999-01-27 Alexander Kjeldaas + + * International kernel patch 2.2.0.2 released. + + * missing #endif in net/ipv4/ip_output.c in latest patch + fixed. Missing #include fixed in crypto.h + +1999-01-26 Alexander Kjeldaas + + * International kernel patch 2.2.0.1 released. + + * Merged Frank Bernard's latest ENskip patches. + +1999-01-18 Alexander Kjeldaas + + * International kernel patch 2.2.0-pre7.4 released. + + * Added cbc-mode to cast256 cipher. + + * Removed spam on unload from crypto modules. + + * Added updated ENskip patches from Frank Bernard's web site: + http://www.linux-firewall.de/enskip/ + + * International kernel patch 2.2.0-pre7.3 released. + + * Added missing cleanup_module to DES, Blowfish and IDEA ciphers. + + * International kernel patch 2.2.0-pre7.2 released. + + * Cleanup in drivers/block/Config.in. It was possible to create + an invalid .config file. + + * Minor crypto/api.c cleanup. + +1999-01-17 Alexander Kjeldaas + + * International kernel patch 2.2.0-pre7.1 released. + + * Added testcip.c - a general purpose cipher test program. Added + test-vector scripts for Blowfish, DES, Mars, and Serpent. + + * Naming error left users unable to compile loop_gen unless it was + compiled as a module. + + * Updated Serpent implementation. Sam Simpson has been running a + background task on a cluster of high performance servers. After a + search involving around 1000 machine hours improved sboxes were + found. + + * Updated RC6 implementation. Supposedly faster. + + * Updated MARS implementation. Fixes a bug in mars_set_key. + +1999-01-07 Alexander Kjeldaas + + * International kernel patch 2.2.0-pre5.1 released. + * Merged with vanilla 2.2.0-pre5 + +1999-01-05 Herbert Valerio Riedel + + * APX fixes. + +1999-01-04 Alexander Kjeldaas + + * International kernel patch 2.2.0-pre4.1 released. + + * Removed obsolete loop_idea.c and loop_blow.c since IDEA and + blowfish algorithms have been added to the crypto library. + + * drivers/block/ll_rw_blk.c: Added loop_gen_init. loop_gen only + worked as a module. + +1998-12-30 Alexander Kjeldaas + + * crypto/testing/speed.c: i386-specific timer-code removed. + + * crypto configuration added for all architectures (previously + only i386 was supported). However, 64-bit and endian issues needs + to be ironed out for a lot of platforms (maybe even i386). + +1998-12-29 Alexander Kjeldaas + + * International kernel patch 2.2.0-pre1.1 released. + * International kernel patch 2.1.131.8 released. + * DES/IDEA compile fixes. + +1998-12-29 Raimar Falke + + * DES cipher added. crypto/testing/speed.c fixes. + +1998-12-18 Alexander Kjeldaas + + * International kernel patch 2.1.131.7 released. + +1998-12-18 Raimar Falke + + * include-fixes for IDEA cipher. + +1998-12-18 Alexander Kjeldaas + + * International kernel patch 2.1.131.6 released. + +1998-12-18 Raimar Falke + + * IDEA cipher added. + +1998-12-18 Patrice Lacroix + + * My latest patch for modular loop encryption. I think everything + is in there. Ciphers are only requested on LOOP_SET_STATUS. Module + count is always right (for what I have tested) and unloading now + works. + +1998-12-17 Alexander Kjeldaas + + * International kernel patch 2.1.131.5 released. + +1998-12-17 Raimar Falke + + * Extracted the blowfish code from loop_blow and made a + cipher-module of it. + +1998-12-17 Alexander Kjeldaas + + * Removed loop_serpent, loop_mars, loop_dfc and loop_rc6 since + their funcionality is available through loop_gen. + +1998-12-16 Alexander Kjeldaas + + * Removed loop_idea from the configuration menus. It hasn't been + converted to the new API. + +1998-12-14 Alexander Kjeldaas + + * Fixes to the rijndael cipher. It builds, but isn't working + properly so it it disabled for the moment. The cipher is from + Dr. Brian Gladman AES + reimplementation project. More information on rijndael: + http://www.esat.kuleuven.ac.be/~rijmen/rijndael/ Rijndael is free. + +1998-12-14 Patrice Lacroix + + * More modular ciphers/loop patches. Cipher locking fixes. + Autoloading of ciphers. More loop and loop_gen integration. + +1998-12-14 Alexander Kjeldaas + + * International kernel patch 2.1.131.4 released. + + * Added util-linux-2.9e patch to Documentation/crypto that makes + all the loopback ciphers available to the losetup utility. + +1998-12-12 Alexander Kjeldaas + + * International kernel patch 2.1.131.3 released. + + * Added the popular CIPE (crypto IP encapsulation) made by + Olaf Titz + + * Previous patch wouldn't build. International kernel patch + 2.1.131.2 released. + +1998-12-11 Alexander Kjeldaas + + * International kernel patch 2.1.131.1 released. + + * Clear sensitive memory before kfree in generel loop module. New + upstream kernel. + +1998-12-11 Patrice Lacroix + + * Modular ciphers + +1998-11-30 Alexander Kjeldaas + + * International kernel patch 2.1.130.1 released. + + * loop-devices other than loop_gen updated to use new interface. + However, the block-number isn't used for anything yet. + + * loop_gen.c: Now we use the ciphers in cbc-mode only. Also, the + IV of the cipher is initialized based on block-number. + + * Added general cbc-mode that is simply #included into the + ciphers. cbc-mode thus added to serpent, mars, rc6 and dfc. + + * Added ivsize to struct cipher_implementation. + + * Added for_each_cipher function + + * Added X11-like license for the crypto-directory. The code might + be useable for other projects as well in the future. [And GPL is + arguable the wrong license for crypto]. + +1998-11-25 Alexander Kjeldaas + + * The crypto api is useable from modules. + + * Fixed a bunch of bugs in loop_gen. I think the oopses are gone. + +1998-11-23 Alexander Kjeldaas + + * International kernel patch 2.1.129.4 released. + + * Added crypto/testing/speed.c to test the speed of the different + crypto algorithms. + + * cast256, crypton, rijndael, safer, and twofish added, but they + are not yet completely ported to the crypto-library. + + * Updated implementations of MARS, DFC, RC6 and SERPENT. + +1998-11-22 Alexander Kjeldaas + + * International kernel patch 2.1.129.3 released. + + * "loop_gen" - skeleton of general loop crypto driver added + + * Made loop-modules for DFC, MARS, and RC6 + + * Added DFC, MARS, and RC6 to crypto library + + * International kernel patch 2.1.129.2 released. + + * Updated documentation to show which loopback modules are ECB + and which are CBC. + + * Kernel crypto library on its way. Serpent is the first member. + + * Changed memcpy to memset in loop_blow.c to close a possible + plaintext leak. + +1998-11-20 Alexander Kjeldaas + + * New upstream kernel release 2.1.129 + +1998-11-13 Alexander Kjeldaas + + * New upstream kernel release 2.1.128 + +1998-11-09 Alexander Kjeldaas + + * New upstream kernel release 2.1.127 + +1998-10-12 Alexander Kjeldaas + + * drivers/block/loop_serpent.c: Made wrapper-module for the + serpent cipher. + + * crypto/serpent.c crypto/serpent_f_box.h}: Added serpent + implementation from Dr. B R Gladman + AES reimplementation project. + + * drivers/block/Config.in: Loopback crypto flagged experimental + +1998-10-09 Alexander Kjeldaas + + * International kernel patch 2.1.125.1 released. + + * New upstream kernel release 2.1.125 + +1998-10-08 Alexander Kjeldaas + + * International kernel patch 2.1.124.2 released. + + * Added Andi Kleene's loop fixes. Updated twofish, blowfish and + cast128 modules to use the new lock/unlock interface. + +1998-10-07 Alexander Kjeldaas + + * Ported loop_cast.c to the new loopback API interface. + + * Blowfish and Twofish can be compiled in instead of being + modules. + + * Added cast and idea to the config-system. + + * Wrote Configure.help entries for the loop crypto patches. + +1998-10-05 Alexander Kjeldaas + + * International kernel patch 2.1.124.1 released. + + * Added cast128 and idea loopback modules from Andrew E. Mileski's + loop-13.tar.gz package. + + * Added latest ENskip patches from Bob Tracy + +1998-10-05 Ingo Rohloff + + * Fixed bug in loop.c regarding handling of calls to + loop_release_xfer() + + * Added modules for blowfish and twofish to the loopback + filesystem diff -urN lin.2.4.3/Documentation/crypto/faq.txt int.2.4.3/Documentation/crypto/faq.txt --- lin.2.4.3/Documentation/crypto/faq.txt Thu Jan 1 01:00:00 1970 +++ int.2.4.3/Documentation/crypto/faq.txt Mon Apr 2 18:37:26 2001 @@ -0,0 +1,141 @@ +Questions and answers concerning crypto and looppack device +By Patrice Lacroix +Last update: 1999-05-21 + +1) What is the crypto API? + +It allow other parts of the kernel to use crypto in a generic way, +most notably the loopback device driver (loop_gen.c). + + +2) What is loop_gen? + +First, you should already be familiar with basic loopback device. See +losetup(1) for more info. + +Loop_gen is the generic encryption layer for the loopback driver. +It uses the crypto API to do encryption. It works with every ciphers +supported by the crypto API. Not all ciphers in the crypto library +support the API yet. + +Loop_gen (and the crypto api) will eventually replace all other loopback +encryption modules. + +Loop_gen use all supported ciphers in CBC mode. + + +3) What can I do with loop_gen? + +The basic loopback device driver allow you to use a file as a block +device. With loop_gen, data in the file associated with the loopback +block device can be encrypted with strong crypto. + +You can use the result as any other block device. If you create a file +system and mount it, then every file in the file system will be +automaticly encrypted. + + +4) Can I use all this as modules? + +Sure! In make menuconfig (or whatever), under Crypto options, say M to +Crypto ciphers and to the ciphers you want. Under Block Device, say M to +loopback device and to General Encryption Support. Don't select any other +encryption modules unless you can't live without them and they are +no longer suported by the crypto API. + +Build your kernel and modules, make modules_install, reboot, depmod -a + +5) I get "Unsupported encryption type" when I use losetup or mount. What's + wrong? + +You need a version of losetup and mount that understand new encryption +types. To get it, you probably have to apply the util-linux patch you can +find in linux/Documentation/crypto and rebuild mount and losetup. + + +6) Can I stack loop devices and encryption? + +Yes! + + +7) I can't access the content of my encrypted file system since I + moved the backing file to a new partition. Why? + +This is because when a block of data is encrypted with loop_gen, +its IV for CBC encryption is set to the real block where the +file is located on the block device underneath it. So when the +encrypted file system is physically moved on a block device, the +IV used for encryption and decryption change, and data can't be +decrypted correctly. + +As of patch-int-2.2.10.4, you should answer 'Y' to the question 'Use +relative block numbers as basis for transfer functions (RECOMMENDED)' +to avoid this problem. As of patch-int-2.4.0.1, this option is always +on and is not available in the configuration. + +Another solution is to losetup your file once without using crypto and +then losetup again the first loopback block device to add +encryption. Since the encryption will always be from block 0 (inside +the first loopback device), the IV for CBC encryption will be the same +no matter where the original file is located. + +Ex: + +# losetup /dev/loop0 encfs.loop +# losetup -e blowfish /dev/loop1 /dev/loop0 +Password: (not shown) +# mount /dev/loop1 /mnt + +(here you can access the fs under /mnt...) + +(and to destroy loopback devices...) + +# umount /mnt +# losetup -d /dev/loop1 +# losetup -d /dev/loop0 + +With this solution, you can do backup of your encrypted data +(which is a good thing) but it's more complexe and it's probably +less secure (which is a bad thing). + + +8) Since patch-int-2.2.10.4 I can't access my encrypted device. + +As of patch-int-2.2.10.4, the encrypted files will be incompatible +with older files if you answer 'Y' to the question 'Use relative block +numbers as basis for transfer functions (RECOMMENDED)'. As of +patch-int-2.4.0.1, this option is always on and is not available in +the configuration. To be able to back up your encrypted files in the +future, you should convert to the new layout [which uses relative +block numbers as IV to the cipher instead of absolute ones]. This can +be accomplished by doing something like the following: + + +# losetup -e mypreferredcipher /dev/loop0 /myfile + +# dd if=/dev/loop0 of=tmpfile +# losetup -d /dev/loop0 + + +# losetup -e mypreferredcipher /dev/loop0 /myfile + +# dd if=tmpfile of=/dev/loop0 +# dd if=/dev/zero of=tmpfile bs=1k count= +or you could download some of the special software used for wiping +magnetic media such as wipe from +http://gsu.linux.org.tr/wipe/ + +9) I made an encrypted filesystem on my hard-disk and tried to burn it + on a CD. Now I can't get the CD to work properly. + +This is a current limitation in the loop device code. The block size +(the smalles number of bytes that can be read) of a hard-disk is +smaller than the block size of a CD-ROM. This causes problems since +the block size dictates how many bytes are encrypted as a block. + +There is no solution to this problem at this time, but it isn't hard +to fix. Contact me (Alexander Kjeldaas ) if you're +willing to work on this problem. + +UPDATE: You can supposedly get this to work by asking ext2 to use a +2048-byte block size (-b 2048 on command-line of mke2fs). diff -urN lin.2.4.3/Documentation/crypto/util-linux-2.11b.patch int.2.4.3/Documentation/crypto/util-linux-2.11b.patch --- lin.2.4.3/Documentation/crypto/util-linux-2.11b.patch Thu Jan 1 01:00:00 1970 +++ int.2.4.3/Documentation/crypto/util-linux-2.11b.patch Mon Apr 2 19:48:32 2001 @@ -0,0 +1,1471 @@ +diff -urN util-linux-2.11b/MCONFIG util-linux-2.11b.int/MCONFIG +--- util-linux-2.11b/MCONFIG Thu Mar 8 20:43:53 2001 ++++ util-linux-2.11b.int/MCONFIG Mon Apr 2 19:39:50 2001 +@@ -16,7 +16,7 @@ + # If HAVE_PAM is set to "yes", then login, chfn, chsh, and newgrp + # will use PAM for authentication. Additionally, passwd will not be + # installed as it is not PAM aware. +-HAVE_PAM=no ++HAVE_PAM=yes + + # If HAVE_SHADOW is set to "yes", then login, chfn, chsh, newgrp, passwd, + # and vipw will not be built or installed from the login-utils +diff -urN util-linux-2.11b/mount/Makefile util-linux-2.11b.int/mount/Makefile +--- util-linux-2.11b/mount/Makefile Mon Mar 5 01:38:53 2001 ++++ util-linux-2.11b.int/mount/Makefile Mon Apr 2 19:39:50 2001 +@@ -24,7 +24,7 @@ + + MAYBE = pivot_root swapoff + +-LO_OBJS = lomount.o $(LIB)/xstrncpy.o ++LO_OBJS = lomount.o $(LIB)/xstrncpy.o rmd160.o + NFS_OBJS = nfsmount.o nfsmount_xdr.o nfsmount_clnt.o + GEN_FILES = nfsmount.h nfsmount_xdr.c nfsmount_clnt.c + +@@ -57,7 +57,7 @@ + main_losetup.o: lomount.c + $(COMPILE) -DMAIN lomount.c -o $@ + +-losetup: main_losetup.o $(LIB)/xstrncpy.o ++losetup: main_losetup.o $(LIB)/xstrncpy.o rmd160.o + $(LINK) $^ -o $@ + + mount.o umount.o nfsmount.o losetup.o fstab.o realpath.o sundries.o: sundries.h +diff -urN util-linux-2.11b/mount/lomount.c util-linux-2.11b.int/mount/lomount.c +--- util-linux-2.11b/mount/lomount.c Thu Mar 15 11:09:58 2001 ++++ util-linux-2.11b.int/mount/lomount.c Mon Apr 2 19:39:51 2001 +@@ -6,6 +6,11 @@ + * - added Native Language Support + * Sun Mar 21 1999 - Arnaldo Carvalho de Melo + * - fixed strerr(errno) in gettext calls ++ * 2000-09-24 Marc Mutz ++ * - added long option names and the --pass-fd option to pass ++ * passphrases via fd's to losetup/mount. Used for encryption in ++ * non-interactive environments. The idea behind xgetpass() is stolen ++ * from GnuPG, v.1.0.3 (http://www.gnupg.org/). + */ + + #define PROC_DEVICES "/proc/devices" +@@ -21,54 +26,107 @@ + #include + #include + #include ++#include + #include + #include + #include + + #include "loop.h" + #include "lomount.h" ++#include "rmd160.h" + #include "xstrncpy.h" + #include "nls.h" + ++#ifndef LO_CRYPT_CRYPTOAPI ++#define LO_CRYPT_CRYPTOAPI 18 ++#endif ++#ifndef LO_CRYPT_NONE ++#define LO_CRYPT_NONE 0 ++#endif ++#ifndef LO_CRYPT_XOR ++#define LO_CRYPT_XOR 1 ++#endif ++#ifndef LO_CRYPT_DES ++#define LO_CRYPT_DES 2 ++#endif ++#ifndef LO_CRYPT_FISH2 ++#define LO_CRYPT_FISH2 3 ++#endif ++#ifndef LO_CRYPT_BLOW ++#define LO_CRYPT_BLOW 4 ++#endif ++#ifndef LO_CRYPT_CAST128 ++#define LO_CRYPT_CAST128 5 ++#endif ++#ifndef LO_CRYPT_IDEA ++#define LO_CRYPT_IDEA 6 ++#endif ++#ifndef LO_CRYPT_SERPENT ++#define LO_CRYPT_SERPENT 7 ++#endif ++#ifndef LO_CRYPT_MARS ++#define LO_CRYPT_MARS 8 ++#endif ++#ifndef LO_CRYPT_RC6 ++#define LO_CRYPT_RC6 11 ++#endif ++#ifndef LO_CRYPT_3DES ++#define LO_CRYPT_3DES 12 ++#endif ++#ifndef LO_CRYPT_DFC ++#define LO_CRYPT_DFC 15 ++#endif ++#ifndef LO_CRYPT_RIJNDAEL ++#define LO_CRYPT_RIJNDAEL 16 ++#endif ++ ++ + extern int verbose; + extern char *xstrdup (const char *s); /* not: #include "sundries.h" */ + extern void error (const char *fmt, ...); /* idem */ + ++ ++struct cipher_info ++{ ++ const char *name; ++ int blocksize; ++ int keysize_mask; ++ int ivsize; ++ int key_schedule_size; ++}; ++ ++static int set_loop_passwd(struct loop_info *_loopinfo, int pfd, int keysz, ++ const char *encryption, int fd, int ffd); ++static int get_cipher_info(const char *name, struct cipher_info *res); ++static int name_to_id(const char *name); ++#ifdef MAIN ++static char *id_to_name(int id); ++#endif ++ ++ + #ifdef LOOP_SET_FD + struct crypt_type_struct { + int id; + char *name; ++ int keylength; + } crypt_type_tbl[] = { +- { LO_CRYPT_NONE, "no" }, +- { LO_CRYPT_NONE, "none" }, +- { LO_CRYPT_XOR, "xor" }, +- { LO_CRYPT_DES, "DES" }, +- { -1, NULL } ++ { LO_CRYPT_NONE, "none", 0 }, ++ { LO_CRYPT_XOR, "xor", 0 }, ++ { LO_CRYPT_DES, "des", 8 }, ++ { LO_CRYPT_FISH2, "twofish", 20 }, ++ { LO_CRYPT_BLOW, "blowfish", 20 }, ++ { LO_CRYPT_CAST128, "cast", 16 }, ++ { LO_CRYPT_SERPENT, "serpent", 16 }, ++ { LO_CRYPT_MARS, "mars", 16 }, ++ { LO_CRYPT_RC6, "rc6", 16 }, ++ { LO_CRYPT_3DES, "des-ede3", 24 }, ++ { LO_CRYPT_DFC, "dfc", 16 }, ++ { LO_CRYPT_IDEA, "idea", 16 }, ++ { LO_CRYPT_RIJNDAEL, "rijndael", 16 }, ++ { -1, NULL,0 } + }; + +-static int +-crypt_type (const char *name) { +- int i; +- +- if (name) { +- for (i = 0; crypt_type_tbl[i].id != -1; i++) +- if (!strcasecmp (name, crypt_type_tbl[i].name)) +- return crypt_type_tbl[i].id; +- } +- return -1; +-} +- + #ifdef MAIN +-static char * +-crypt_name (int id) { +- int i; +- +- for (i = 0; crypt_type_tbl[i].id != -1; i++) +- if (id == crypt_type_tbl[i].id) +- return crypt_type_tbl[i].name; +- return "undefined"; +-} +- + static int + show_loop (char *device) { + struct loop_info loopinfo; +@@ -90,7 +148,7 @@ + printf (_("%s: [%04x]:%ld (%s) offset %d, %s encryption\n"), + device, loopinfo.lo_device, loopinfo.lo_inode, + loopinfo.lo_name, loopinfo.lo_offset, +- crypt_name (loopinfo.lo_encrypt_type)); ++ id_to_name(loopinfo.lo_encrypt_type)); + close (fd); + + return 0; +@@ -183,24 +241,64 @@ + error(_( + "mount: Could not find any loop device, and, according to %s,\n" + " this kernel does not know about the loop device.\n" +- " (If so, then recompile or `insmod loop.o'.)"), ++ " (If so, then recompile or `modprobe loop'.)"), + PROC_DEVICES); + else + error(_( + "mount: Could not find any loop device. Maybe this kernel does not know\n" +- " about the loop device (then recompile or `insmod loop.o'), or\n" ++ " about the loop device (then recompile or `modprobe loop'), or\n" + " maybe /dev/loop# has the wrong major number?")); + } else + error(_("mount: could not find any free loop device")); + return 0; + } + ++#define HASHLENGTH 20 ++#define PASSWDBUFFLEN 130 /* getpass returns only max. 128 bytes, see man getpass */ ++ ++/* A function to read the passphrase either from the terminal or from ++ * an open file descriptor */ ++static char * ++xgetpass (int pfd, const char *prompt) ++{ ++ if (pfd < 0) /* terminal */ ++ return (getpass(prompt)); ++ else { /* file descriptor */ ++ char *pass = NULL; ++ int buflen, i; ++ ++ buflen=0; ++ for (i=0; ; i++) { ++ if (i >= buflen-1) { ++ /* we're running out of space in the buffer. ++ * Make it bigger: */ ++ char *tmppass = pass; ++ buflen += 128; ++ pass = realloc(tmppass,buflen); ++ if (pass == NULL) { ++ /* realloc failed. Stop reading _now_. */ ++ error("not enough memory while reading passphrase"); ++ pass = tmppass; /* the old buffer hasn't changed */ ++ break; ++ } ++ }; ++ if ( read(pfd,pass+i, 1) != 1 || pass[i] == '\n' ) ++ break; ++ } ++ if (pass == NULL) ++ return ""; ++ else { ++ pass[i] = 0; ++ return pass; ++ } ++ } ++} ++ + int + set_loop (const char *device, const char *file, int offset, +- const char *encryption, int *loopro) { ++ const char *encryption, int pfd, int keysz, int *loopro) { + struct loop_info loopinfo; +- int fd, ffd, mode, i; +- char *pass; ++ int fd, ffd, mode, tried_old; + + mode = (*loopro ? O_RDONLY : O_RDWR); + if ((ffd = open (file, mode)) < 0) { +@@ -218,13 +316,10 @@ + *loopro = (mode == O_RDONLY); + + memset (&loopinfo, 0, sizeof (loopinfo)); +- xstrncpy (loopinfo.lo_name, file, LO_NAME_SIZE); +- if (encryption && (loopinfo.lo_encrypt_type = crypt_type (encryption)) +- < 0) { +- fprintf (stderr, _("Unsupported encryption type %s\n"), +- encryption); +- return 1; +- } ++ snprintf(loopinfo.lo_name, sizeof(loopinfo.lo_name), ++ "%s-cbc", encryption); ++ loopinfo.lo_name[LO_NAME_SIZE - 1] = 0; ++ loopinfo.lo_encrypt_type = LO_CRYPT_CRYPTOAPI; + loopinfo.lo_offset = offset; + + #ifdef MCL_FUTURE +@@ -240,24 +335,73 @@ + } + #endif + +- switch (loopinfo.lo_encrypt_type) { ++ if (ioctl (fd, LOOP_SET_FD, ffd) < 0) { ++ perror ("ioctl: LOOP_SET_FD"); ++ return 1; ++ } ++ ++ tried_old = 0; ++again: ++ set_loop_passwd(&loopinfo, pfd, keysz, encryption, fd, ffd); ++ ++ if (ioctl (fd, LOOP_SET_STATUS, &loopinfo) < 0) { ++ /* Try again with old-style LO_CRYPT_XX if ++ new-style LO_CRYPT_CRYPTOAPI ioctl didn't work */ ++ if (tried_old) { ++ error("The cipher does not exist, or a cipher module " ++ "needs to be loaded into the kernel"); ++ perror ("ioctl: LOOP_SET_STATUS"); ++ goto out_ioctl; ++ } ++ strncpy (loopinfo.lo_name, file, LO_NAME_SIZE); ++ loopinfo.lo_name[LO_NAME_SIZE - 1] = 0; ++ loopinfo.lo_encrypt_type = name_to_id (encryption); ++ tried_old = 1; ++ goto again; ++ } ++ close (fd); ++ close (ffd); ++ if (verbose > 1) ++ printf(_("set_loop(%s,%s,%d): success\n"), ++ device, file, offset); ++ return 0; ++out_ioctl: ++ (void) ioctl (fd, LOOP_CLR_FD, 0); ++ return 1; ++} ++ ++int ++set_loop_passwd(struct loop_info *loopinfo, int pfd, int keysz, ++ const char *encryption, int fd, int ffd) ++{ ++ int i; ++ int keylength; ++ char *pass; ++ char keybits[2*HASHLENGTH]; ++ char passwdbuff[PASSWDBUFFLEN]; ++ struct cipher_info info; ++ ++ switch (loopinfo->lo_encrypt_type) { + case LO_CRYPT_NONE: +- loopinfo.lo_encrypt_key_size = 0; ++ loopinfo->lo_encrypt_key_size = 0; + break; + case LO_CRYPT_XOR: +- pass = getpass (_("Password: ")); +- xstrncpy (loopinfo.lo_encrypt_key, pass, LO_KEY_SIZE); +- loopinfo.lo_encrypt_key_size = strlen(loopinfo.lo_encrypt_key); ++ /* WARNING: xgetpass() can return massive amounts of data, ++ * not only 128 bytes like the original getpass(3) */ ++ pass = xgetpass (pfd,_("Password: ")); ++ xstrncpy (loopinfo->lo_encrypt_key, pass, LO_KEY_SIZE); ++ loopinfo->lo_encrypt_key_size = strlen(loopinfo->lo_encrypt_key); + break; + case LO_CRYPT_DES: +- pass = getpass (_("Password: ")); +- strncpy (loopinfo.lo_encrypt_key, pass, 8); +- loopinfo.lo_encrypt_key[8] = 0; +- loopinfo.lo_encrypt_key_size = 8; ++ printf(_("WARNING: Use of DES is depreciated.\n")); ++ pass = xgetpass (pfd,_("Password: ")); ++ strncpy (loopinfo->lo_encrypt_key, pass, 8); ++ loopinfo->lo_encrypt_key[8] = 0; ++ loopinfo->lo_encrypt_key_size = 8; + pass = getpass (_("Init (up to 16 hex digits): ")); + for (i = 0; i < 16 && pass[i]; i++) + if (isxdigit (pass[i])) { +- loopinfo.lo_init[i >> 3] |= (pass[i] > '9' ? ++ loopinfo->lo_init[i >> 3] |= (pass[i] > '9' ? + (islower (pass[i]) ? toupper (pass[i]) : + pass[i])-'A'+10 : pass[i]-'0') << (i&7) * 4; + } else { +@@ -266,29 +410,88 @@ + return 1; + } + break; ++ case LO_CRYPT_FISH2: ++ case LO_CRYPT_BLOW: ++ case LO_CRYPT_IDEA: ++ case LO_CRYPT_CAST128: ++ case LO_CRYPT_SERPENT: ++ case LO_CRYPT_MARS: ++ case LO_CRYPT_RC6: ++ case LO_CRYPT_3DES: ++ case LO_CRYPT_DFC: ++ case LO_CRYPT_RIJNDAEL: ++ pass = xgetpass(pfd, _("Password :")); ++ strncpy(passwdbuff+1,pass,PASSWDBUFFLEN-1); ++ passwdbuff[PASSWDBUFFLEN-1] = '\0'; ++ passwdbuff[0] = 'A'; ++ rmd160_hash_buffer(keybits,pass,strlen(pass)); ++ rmd160_hash_buffer(keybits+HASHLENGTH,passwdbuff,strlen(pass)+1); ++ memcpy((char*)loopinfo->lo_encrypt_key,keybits,2*HASHLENGTH); ++ keylength=0; ++ for(i=0; crypt_type_tbl[i].id != -1; i++){ ++ if(loopinfo->lo_encrypt_type == crypt_type_tbl[i].id){ ++ keylength = crypt_type_tbl[i].keylength; ++ break; ++ } ++ } ++ loopinfo->lo_encrypt_key_size=keylength; ++ break; ++ case LO_CRYPT_CRYPTOAPI: ++ /* Give the kernel an opportunity to load the cipher */ ++ (void) ioctl (fd, LOOP_SET_STATUS, loopinfo); ++ if (get_cipher_info(loopinfo->lo_name, &info) < 0) { ++ return 1; ++ } ++ if (keysz > 0 && ++ !((1 << ((keysz / 8) - 1)) & info.keysize_mask)) { ++ error("The specified keysize is not supported by " ++ "the selected cipher"); ++ keysz = 0; ++ } ++ ++ while (keysz <= 0 || ++ !((1 << ((keysz / 8) - 1)) & info.keysize_mask)) { ++ int i = 0; ++ int available = 0; ++ char keysize[200]; ++ printf("Available keysizes (bits): "); ++ for (; i < 32; i++) { ++ if (info.keysize_mask & (1 << i)) { ++ printf("%d ", 8*(i+1)); ++ available = 1; ++ } ++ } ++ if (!available) { ++ printf("none"); ++ } ++ printf("\nKeysize: "); ++ fgets(keysize, sizeof(keysize), stdin); ++ keysz = atoi(keysize); ++ } ++ ++ pass = xgetpass(pfd, _("Password :")); ++ strncpy(passwdbuff+1,pass,PASSWDBUFFLEN-1); ++ passwdbuff[PASSWDBUFFLEN-1] = '\0'; ++ passwdbuff[0] = 'A'; ++ rmd160_hash_buffer(keybits,pass,strlen(pass)); ++ rmd160_hash_buffer(keybits+HASHLENGTH,passwdbuff,strlen(pass)+1); ++ memcpy((char*)loopinfo->lo_encrypt_key,keybits,2*HASHLENGTH); ++ ++ loopinfo->lo_encrypt_key_size=keysz/8; ++ ++ break; + default: + fprintf (stderr, + _("Don't know how to get key for encryption system %d\n"), +- loopinfo.lo_encrypt_type); +- return 1; +- } +- if (ioctl (fd, LOOP_SET_FD, ffd) < 0) { +- perror ("ioctl: LOOP_SET_FD"); ++ loopinfo->lo_encrypt_type); + return 1; + } +- if (ioctl (fd, LOOP_SET_STATUS, &loopinfo) < 0) { +- (void) ioctl (fd, LOOP_CLR_FD, 0); +- perror ("ioctl: LOOP_SET_STATUS"); +- return 1; +- } +- close (fd); +- close (ffd); +- if (verbose > 1) +- printf(_("set_loop(%s,%s,%d): success\n"), +- device, file, offset); +- return 0; ++ return 0; + } + ++ ++ ++ + int + del_loop (const char *device) { + int fd; +@@ -319,7 +522,7 @@ + + int + set_loop (const char *device, const char *file, int offset, +- const char *encryption, int *loopro) { ++ const char *encryption, int pfd, int *loopro) { + mutter(); + return 1; + } +@@ -348,13 +551,40 @@ + int verbose = 0; + static char *progname; + ++static struct option longopts[] = { ++ { "delete", 0, 0, 'd' }, ++ { "detach", 0, 0, 'd' }, ++ { "encryption", 1, 0, 'e' }, ++ { "help", 0, 0, 'h' }, ++ { "offset", 1, 0, 'o' }, ++ { "pass-fd", 1, 0, 'p' }, ++ { "verbose", 0, 0, 'v' }, ++ { "keybits", 1, 0, 'k' }, ++ { NULL, 0, 0, 0 } ++}; ++ ++ + static void + usage(void) { + fprintf(stderr, _("usage:\n\ + %s loop_device # give info\n\ + %s -d loop_device # delete\n\ +- %s [ -e encryption ] [ -o offset ] loop_device file # setup\n"), +- progname, progname, progname); ++ %s [ options ] loop_device file # setup\n\ ++ where options include\n\ ++ --offset , -o \n\ ++ start at offset into file.\n\ ++ --pass-fd , -p \n\ ++ read passphrase from file descriptor \n\ ++ instead of the terminal.\n\ ++ --encryption , -e \n\ ++ encrypt with .\n\ ++ Check /proc/cipher for available ciphers.\n\ ++ --keybits , -k \n\ ++ specify number of bits in the hashed key given\n\ ++ to the cipher. Some ciphers support several key\n\ ++ sizes and might be more efficient with a smaller\n\ ++ key size. Key sizes < 128 are generally not\n\ ++ recommended\n"), progname, progname, progname); + exit(1); + } + +@@ -387,19 +617,22 @@ + + int + main(int argc, char **argv) { +- char *offset, *encryption; ++ char *offset, *encryption, *passfd, *keysize; + int delete,off,c; ++ int pfd = -1; + int res = 0; + int ro = 0; ++ int keysz = 0; + + setlocale(LC_ALL, ""); + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); + + delete = off = 0; +- offset = encryption = NULL; ++ offset = encryption = passfd = keysize = NULL; + progname = argv[0]; +- while ((c = getopt(argc,argv,"de:o:v")) != EOF) { ++ while ((c = getopt_long(argc,argv,"de:hk:o:p:v", ++ longopts, NULL)) != EOF) { + switch (c) { + case 'd': + delete = 1; +@@ -407,9 +640,15 @@ + case 'e': + encryption = optarg; + break; ++ case 'k': ++ keysize = optarg; ++ break; + case 'o': + offset = optarg; + break; ++ case 'p': ++ passfd = optarg; ++ break; + case 'v': + verbose = 1; + break; +@@ -418,7 +657,7 @@ + } + } + if (argc == 1) usage(); +- if ((delete && (argc != optind+1 || encryption || offset)) || ++ if ((delete && (argc != optind+1 || encryption || offset || passfd)) || + (!delete && (argc < optind+1 || argc > optind+2))) + usage(); + if (argc == optind+1) { +@@ -429,7 +668,12 @@ + } else { + if (offset && sscanf(offset,"%d",&off) != 1) + usage(); +- res = set_loop(argv[optind],argv[optind+1],off,encryption,&ro); ++ if (passfd && sscanf(passfd,"%d",&pfd) != 1) ++ usage(); ++ if (keysize && sscanf(keysize,"%d",&keysz) != 1) ++ usage(); ++ res = set_loop(argv[optind], argv[optind+1], off, ++ encryption, pfd, keysz, &ro); + } + return res; + } +@@ -445,3 +689,61 @@ + } + #endif + #endif ++ ++static int get_cipher_info(const char *name, struct cipher_info *res) ++{ ++ char path[PATH_MAX]; ++ char buf[2000]; ++ FILE *f; ++ struct { ++ int *out; ++ const char *prefix; ++ } fields[] = {{&res->blocksize, "blocksize:"}, ++ {&res->keysize_mask, "keysize_mask:"}, ++ {&res->ivsize, "ivsize:"}, ++ {&res->key_schedule_size, "key_schedule_size:"}}; ++ snprintf(path, sizeof(path), "/proc/crypto/cipher/%s", name); ++ f = fopen(path, "r"); ++ while(f && fgets(buf, sizeof(buf), f)) { ++ int i; ++ for (i = 0; i < sizeof(fields)/sizeof(fields[0]); i++) { ++ int len = strlen(fields[i].prefix); ++ if (strncmp(buf, fields[i].prefix, len) == 0) { ++ *fields[i].out = strtoul(&buf[len+1], NULL, 0); ++ break; ++ } ++ } ++ ++ } ++ if (!f) ++ return -1; ++ return 0; ++} ++ ++ ++static int ++name_to_id(const char *name) ++{ ++ int i; ++ ++ if (name) { ++ for (i = 0; crypt_type_tbl[i].id != -1; i++) ++ if (!strcasecmp (name, crypt_type_tbl[i].name)) ++ return crypt_type_tbl[i].id; ++ } else ++ return LO_CRYPT_NONE; ++ return LO_CRYPT_CRYPTOAPI; ++} ++ ++#ifdef MAIN ++static char * ++id_to_name(int id) { ++ int i; ++ ++ for (i = 0; crypt_type_tbl[i].id != -1; i++) ++ if (id == crypt_type_tbl[i].id) ++ return crypt_type_tbl[i].name; ++ return "undefined"; ++} ++#endif ++ +diff -urN util-linux-2.11b/mount/lomount.h util-linux-2.11b.int/mount/lomount.h +--- util-linux-2.11b/mount/lomount.h Fri Dec 8 19:08:02 2000 ++++ util-linux-2.11b.int/mount/lomount.h Mon Apr 2 19:39:51 2001 +@@ -1,5 +1,6 @@ + extern int verbose; +-extern int set_loop (const char *, const char *, int, const char *, int *); ++extern int set_loop (const char *, const char *, int, const char *, ++ int, int, int *); + extern int del_loop (const char *); + extern int is_loop_device (const char *); + extern char * find_unused_loop_device (void); +diff -urN util-linux-2.11b/mount/losetup.8 util-linux-2.11b.int/mount/losetup.8 +--- util-linux-2.11b/mount/losetup.8 Fri Aug 11 13:11:30 2000 ++++ util-linux-2.11b.int/mount/losetup.8 Mon Apr 2 19:39:51 2001 +@@ -10,6 +10,9 @@ + ] [ + .B \-o + .I offset ++] [ ++.B \-p ++.I num + ] + .I loop_device file + .br +@@ -26,9 +29,9 @@ + \fIloop_device\fP argument is given, the status of the corresponding loop + device is shown. + .SH OPTIONS +-.IP \fB\-d\fP ++.IP "\fB\-\-delete, \-\-detach, \-d\fP" + detach the file or device associated with the specified loop device. +-.IP "\fB\-e \fIencryption\fP" ++.IP "\fB\-\-encryption, \-e \fIencryption\fP" + .RS + enable data encryption. The following keywords are recognized: + .IP \fBNONE\fP +@@ -36,16 +39,62 @@ + .PD 0 + .IP \fBXOR\fP + use a simple XOR encryption. ++.IP \fBAES\fP ++use Advanced Encryption Standard encryption. AES encryption is only available ++if you are using the international kernel and AES encryption has been enabled ++in the Crypto API. ++enabled in the Crypto API. ++.IP \fBBlowfish\fP ++use Blowfish encryption. Blowfish encryption is only available if you ++are using the international kernel and Blowfish encryption has been ++enabled in the Crypto API. ++.IP \fBTwofish\fP ++use Twofish encryption. Twofish encryption is only available if you ++are using the international kernel and Twofish encryption has been ++enabled in the Crypto API. ++.IP \fBCAST\fP ++use CAST encryption. CAST encryption is only available if you ++are using the international kernel and CAST encryption has been ++enabled in the Crypto API. + .IP \fBDES\fP + use DES encryption. DES encryption is only available if the optional + DES package has been added to the kernel. DES encryption uses an additional + start value that is used to protect passwords against dictionary +-attacks. ++attacks. Use of DES is deprecated. ++.IP \fBDFC\fP ++use DFC encryption. DFC encryption is only available if you ++are using the international kernel and DFC encryption has been ++enabled in the Crypto API. ++.IP \fBIDEA\fP ++use IDEA encryption. IDEA encryption is only available if you ++are using the international kernel and IDEA encryption has been ++enabled in the Crypto API. ++.IP \fBMARS\fP ++use MARS encryption. MARS encryption is only available if you ++are using the international kernel and MARS encryption has been ++enabled in the Crypto API. ++.IP \fBRC5\fP ++use RC5 encryption. RC5 encryption is only available if you ++are using the international kernel and RC5 encryption has been ++enabled in the Crypto API. ++.IP \fBRC6\fP ++use RC6 encryption. RC6 encryption is only available if you ++are using the international kernel and RC6 encryption has been ++enabled in the Crypto API. ++.IP \fBSerpent\fP ++use Serpent encryption. Serpent encryption is only available if you ++are using the international kernel and Serpent encryption has been ++enabled in the Crypto API. + .PD + .RE +-.IP "\fB\-o \fIoffset\fP" ++.IP "\fB\-\-offset, \-o \fIoffset\fP" + the data start is moved \fIoffset\fP bytes into the specified file or + device. ++.IP "\fB\-\-pass-fd, \-p \fInum\fP" ++read the passphrase from file descriptor \fInum\fP instead of the ++terminal. ++.IP "\fB\-\-keybits, \-k \fInum\fP" ++set the number of bits to use in key to \fInum\fP. + .SH RETURN VALUE + .B losetup + returns 0 on success, nonzero on failure. When +@@ -58,6 +107,7 @@ + .SH FILES + .nf + /dev/loop0,/dev/loop1,... loop devices (major=7) ++/proc/cipher/* available ciphers + .fi + .SH EXAMPLE + If you are using the loadable module you must have the module loaded +@@ -69,9 +119,8 @@ + .nf + .IP + dd if=/dev/zero of=/file bs=1k count=100 +-losetup -e des /dev/loop0 /file +-Password: +-Init (up to 16 hex digits): ++losetup -e blowfish /dev/loop0 /file ++Password : + mkfs -t ext2 /dev/loop0 100 + mount -t ext2 /dev/loop0 /mnt + ... +@@ -85,8 +134,12 @@ + # rmmod loop + .LP + .fi +-.SH RESTRICTION +-DES encryption is painfully slow. On the other hand, XOR is terribly weak. ++.SH RESTRICTIONS ++DES encryption is painfully slow. On the other hand, XOR is terribly ++weak. Both are insecure nowadays. Some ciphers require a licence for ++you to be allowed to use them. ++.SH BUGS ++CAST, DES, RC5 and Twofish are currently broken and cannot be used. + .SH AUTHORS + .nf + Original version: Theodore Ts'o +diff -urN util-linux-2.11b/mount/mount.8 util-linux-2.11b.int/mount/mount.8 +--- util-linux-2.11b/mount/mount.8 Mon Mar 19 22:21:28 2001 ++++ util-linux-2.11b.int/mount/mount.8 Mon Apr 2 19:39:51 2001 +@@ -252,6 +252,12 @@ + .B \-v + Verbose mode. + .TP ++.B \-p "\fInum\fP" ++If the mount requires a passphrase to be entered, read it from file ++descriptor ++.IR num\fP ++instead of from the terminal. ++.TP + .B \-a + Mount all filesystems (of the given types) mentioned in + .IR fstab . +@@ -517,6 +523,15 @@ + .BR noexec ", " nosuid ", and " nodev + (unless overridden by subsequent options, as in the option line + .BR user,exec,dev,suid ). ++.TP ++.B encryption ++Specifies an encryption algorithm to use. Used in conjunction with the ++.BR loop " option." ++.TP ++.B keybits ++Specifies the key size to use for an encryption algorithm. Used in conjunction ++with the ++.BR loop " and " encryption " options." + .RE + + .SH "FILESYSTEM SPECIFIC MOUNT OPTIONS" +@@ -1349,7 +1364,10 @@ + .BR loop ", " offset " and " encryption , + that are really options to + .BR losetup (8). +-If no explicit loop device is mentioned ++If the mount requires a passphrase, you will be prompted for one unless ++you specify a file descriptor to read from instead with the ++.BR \-\-pass-fd ++option. If no explicit loop device is mentioned + (but just an option `\fB\-o loop\fP' is given), then + .B mount + will try to find some unused loop device and use that. +diff -urN util-linux-2.11b/mount/mount.c util-linux-2.11b.int/mount/mount.c +--- util-linux-2.11b/mount/mount.c Thu Mar 15 11:09:59 2001 ++++ util-linux-2.11b.int/mount/mount.c Mon Apr 2 19:39:51 2001 +@@ -107,6 +107,12 @@ + /* True if ruid != euid. */ + static int suid = 0; + ++/* Contains the fd no. to read the passphrase from, if any */ ++static int pfd = -1; ++ ++/* Contains the preferred keysize in bits we want to use */ ++static int keysz = 0; ++ + /* Map from -o and fstab option strings to the flag argument to mount(2). */ + struct opt_map { + const char *opt; /* option name */ +@@ -568,7 +574,8 @@ + if (verbose) + printf(_("mount: going to use the loop device %s\n"), *loopdev); + offset = opt_offset ? strtoul(opt_offset, NULL, 0) : 0; +- if (set_loop (*loopdev, *loopfile, offset, opt_encryption, &loopro)) { ++ if (set_loop (*loopdev, *loopfile, offset, opt_encryption, pfd, ++ keysz, &loopro)) { + if (verbose) + printf(_("mount: failed setting up loop device\n")); + return EX_FAIL; +@@ -1281,6 +1288,8 @@ + { "read-write", 0, 0, 'w' }, + { "rw", 0, 0, 'w' }, + { "options", 1, 0, 'o' }, ++ { "pass-fd", 1, 0, 'p' }, ++ { "keybits", 1, 0, 'k' }, + { "types", 1, 0, 't' }, + { "bind", 0, 0, 128 }, + { "replace", 0, 0, 129 }, +@@ -1313,7 +1322,7 @@ + " mount --bind olddir newdir\n" + "A device can be given by name, say /dev/hda1 or /dev/cdrom,\n" + "or by label, using -L label or by uuid, using -U uuid .\n" +- "Other options: [-nfFrsvw] [-o options].\n" ++ "Other options: [-nfFrsvw] [-o options] [-p num].\n" + "For many more details, say man 8 mount .\n" + )); + /* +@@ -1329,6 +1338,8 @@ + int c, result = 0, specseen; + char *options = NULL, *spec, *node; + char *volumelabel = NULL; ++ char *passfd = NULL; ++ char *keysize = NULL; + char *uuid = NULL; + string_list types = NULL; + struct mntentchn *mc; +@@ -1349,7 +1360,7 @@ + initproctitle(argc, argv); + #endif + +- while ((c = getopt_long (argc, argv, "afFhlL:no:rsU:vVwt:", ++ while ((c = getopt_long (argc, argv, "afFhlL:no:p:rsU:vVwt:", + longopts, NULL)) != EOF) { + switch (c) { + case 'a': /* mount everything in fstab */ +@@ -1364,6 +1375,9 @@ + case 'h': /* help */ + usage (stdout, 0); + break; ++ case 'k': ++ keysize = optarg; ++ break; + case 'l': + list_with_volumelabel = 1; + break; +@@ -1379,6 +1393,9 @@ + else + options = xstrdup(optarg); + break; ++ case 'p': /* read passphrase from given fd */ ++ passfd = optarg; ++ break; + case 'r': /* mount readonly */ + readonly = 1; + readwrite = 0; +@@ -1466,6 +1483,11 @@ + printf(_("mount: mounting %s\n"), spec); + } else + spec = NULL; /* just for gcc */ ++ ++ if (passfd && sscanf(passfd,"%d",&pfd) != 1) ++ die (EX_USAGE, _("mount: argument to --pass-fd or -p must be a number")); ++ if (keysize && sscanf(keysize,"%d",&keysz) != 1) ++ die (EX_USAGE, _("mount: argument to --keybits or -k must be a number")); + + switch (argc+specseen) { + case 0: +diff -urN util-linux-2.11b/mount/rmd160.c util-linux-2.11b.int/mount/rmd160.c +--- util-linux-2.11b/mount/rmd160.c Thu Jan 1 01:00:00 1970 ++++ util-linux-2.11b.int/mount/rmd160.c Mon Apr 2 19:39:51 2001 +@@ -0,0 +1,532 @@ ++/* rmd160.c - RIPE-MD160 ++ * Copyright (C) 1998 Free Software Foundation, Inc. ++ */ ++ ++/* This file was part of GnuPG. Modified for use within the Linux ++ * mount utility by Marc Mutz . None of this code is ++ * by myself. I just removed everything that you don't need when all ++ * you want to do is to use rmd160_hash_buffer(). ++ * My comments are marked with (mm). */ ++ ++/* GnuPG is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * GnuPG is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */ ++ ++#include /* (mm) for memcpy */ ++#include /* (mm) for BIG_ENDIAN and BYTE_ORDER */ ++#include "rmd160.h" ++ ++/* (mm) these are used by the original GnuPG file. In order to modify ++ * that file not too much, we keep the notations. maybe it would be ++ * better to include linux/types.h and typedef __u32 to u32 and __u8 ++ * to byte? */ ++typedef unsigned int u32; /* taken from e.g. util-linux's minix.h */ ++typedef unsigned char byte; ++ ++typedef struct { ++ u32 h0,h1,h2,h3,h4; ++ u32 nblocks; ++ byte buf[64]; ++ int count; ++} RMD160_CONTEXT; ++ ++/**************** ++ * Rotate a 32 bit integer by n bytes ++ */ ++#if defined(__GNUC__) && defined(__i386__) ++static inline u32 ++rol( u32 x, int n) ++{ ++ __asm__("roll %%cl,%0" ++ :"=r" (x) ++ :"0" (x),"c" (n)); ++ return x; ++} ++#else ++ #define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) ) ++#endif ++ ++/********************************* ++ * RIPEMD-160 is not patented, see (as of 25.10.97) ++ * http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html ++ * Note that the code uses Little Endian byteorder, which is good for ++ * 386 etc, but we must add some conversion when used on a big endian box. ++ * ++ * ++ * Pseudo-code for RIPEMD-160 ++ * ++ * RIPEMD-160 is an iterative hash function that operates on 32-bit words. ++ * The round function takes as input a 5-word chaining variable and a 16-word ++ * message block and maps this to a new chaining variable. All operations are ++ * defined on 32-bit words. Padding is identical to that of MD4. ++ * ++ * ++ * RIPEMD-160: definitions ++ * ++ * ++ * nonlinear functions at bit level: exor, mux, -, mux, - ++ * ++ * f(j, x, y, z) = x XOR y XOR z (0 <= j <= 15) ++ * f(j, x, y, z) = (x AND y) OR (NOT(x) AND z) (16 <= j <= 31) ++ * f(j, x, y, z) = (x OR NOT(y)) XOR z (32 <= j <= 47) ++ * f(j, x, y, z) = (x AND z) OR (y AND NOT(z)) (48 <= j <= 63) ++ * f(j, x, y, z) = x XOR (y OR NOT(z)) (64 <= j <= 79) ++ * ++ * ++ * added constants (hexadecimal) ++ * ++ * K(j) = 0x00000000 (0 <= j <= 15) ++ * K(j) = 0x5A827999 (16 <= j <= 31) int(2**30 x sqrt(2)) ++ * K(j) = 0x6ED9EBA1 (32 <= j <= 47) int(2**30 x sqrt(3)) ++ * K(j) = 0x8F1BBCDC (48 <= j <= 63) int(2**30 x sqrt(5)) ++ * K(j) = 0xA953FD4E (64 <= j <= 79) int(2**30 x sqrt(7)) ++ * K'(j) = 0x50A28BE6 (0 <= j <= 15) int(2**30 x cbrt(2)) ++ * K'(j) = 0x5C4DD124 (16 <= j <= 31) int(2**30 x cbrt(3)) ++ * K'(j) = 0x6D703EF3 (32 <= j <= 47) int(2**30 x cbrt(5)) ++ * K'(j) = 0x7A6D76E9 (48 <= j <= 63) int(2**30 x cbrt(7)) ++ * K'(j) = 0x00000000 (64 <= j <= 79) ++ * ++ * ++ * selection of message word ++ * ++ * r(j) = j (0 <= j <= 15) ++ * r(16..31) = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 ++ * r(32..47) = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12 ++ * r(48..63) = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2 ++ * r(64..79) = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 ++ * r0(0..15) = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12 ++ * r0(16..31)= 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2 ++ * r0(32..47)= 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13 ++ * r0(48..63)= 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14 ++ * r0(64..79)= 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 ++ * ++ * ++ * amount for rotate left (rol) ++ * ++ * s(0..15) = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8 ++ * s(16..31) = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12 ++ * s(32..47) = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5 ++ * s(48..63) = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12 ++ * s(64..79) = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ++ * s'(0..15) = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6 ++ * s'(16..31)= 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11 ++ * s'(32..47)= 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5 ++ * s'(48..63)= 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8 ++ * s'(64..79)= 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ++ * ++ * ++ * initial value (hexadecimal) ++ * ++ * h0 = 0x67452301; h1 = 0xEFCDAB89; h2 = 0x98BADCFE; h3 = 0x10325476; ++ * h4 = 0xC3D2E1F0; ++ * ++ * ++ * RIPEMD-160: pseudo-code ++ * ++ * It is assumed that the message after padding consists of t 16-word blocks ++ * that will be denoted with X[i][j], with 0 <= i <= t-1 and 0 <= j <= 15. ++ * The symbol [+] denotes addition modulo 2**32 and rol_s denotes cyclic left ++ * shift (rotate) over s positions. ++ * ++ * ++ * for i := 0 to t-1 { ++ * A := h0; B := h1; C := h2; D = h3; E = h4; ++ * A' := h0; B' := h1; C' := h2; D' = h3; E' = h4; ++ * for j := 0 to 79 { ++ * T := rol_s(j)(A [+] f(j, B, C, D) [+] X[i][r(j)] [+] K(j)) [+] E; ++ * A := E; E := D; D := rol_10(C); C := B; B := T; ++ * T := rol_s'(j)(A' [+] f(79-j, B', C', D') [+] X[i][r'(j)] ++ [+] K'(j)) [+] E'; ++ * A' := E'; E' := D'; D' := rol_10(C'); C' := B'; B' := T; ++ * } ++ * T := h1 [+] C [+] D'; h1 := h2 [+] D [+] E'; h2 := h3 [+] E [+] A'; ++ * h3 := h4 [+] A [+] B'; h4 := h0 [+] B [+] C'; h0 := T; ++ * } ++ */ ++ ++/* Some examples: ++ * "" 9c1185a5c5e9fc54612808977ee8f548b2258d31 ++ * "a" 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe ++ * "abc" 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc ++ * "message digest" 5d0689ef49d2fae572b881b123a85ffa21595f36 ++ * "a...z" f71c27109c692c1b56bbdceb5b9d2865b3708dbc ++ * "abcdbcde...nopq" 12a053384a9c0c88e405a06c27dcf49ada62eb2b ++ * "A...Za...z0...9" b0e20b6e3116640286ed3a87a5713079b21f5189 ++ * 8 times "1234567890" 9b752e45573d4b39f4dbd3323cab82bf63326bfb ++ * 1 million times "a" 52783243c1697bdbe16d37f97f68f08325dc1528 ++ */ ++ ++ ++static void ++rmd160_init( RMD160_CONTEXT *hd ) ++{ ++ hd->h0 = 0x67452301; ++ hd->h1 = 0xEFCDAB89; ++ hd->h2 = 0x98BADCFE; ++ hd->h3 = 0x10325476; ++ hd->h4 = 0xC3D2E1F0; ++ hd->nblocks = 0; ++ hd->count = 0; ++} ++ ++ ++ ++/**************** ++ * Transform the message X which consists of 16 32-bit-words ++ */ ++static void ++transform( RMD160_CONTEXT *hd, byte *data ) ++{ ++ u32 a,b,c,d,e,aa,bb,cc,dd,ee,t; ++ #if BYTE_ORDER == BIG_ENDIAN ++ u32 x[16]; ++ { int i; ++ byte *p2, *p1; ++ for(i=0, p1=data, p2=(byte*)x; i < 16; i++, p2 += 4 ) { ++ p2[3] = *p1++; ++ p2[2] = *p1++; ++ p2[1] = *p1++; ++ p2[0] = *p1++; ++ } ++ } ++ #else ++ #if 0 ++ u32 *x =(u32*)data; ++ #else ++ /* this version is better because it is always aligned; ++ * The performance penalty on a 586-100 is about 6% which ++ * is acceptable - because the data is more local it might ++ * also be possible that this is faster on some machines. ++ * This function (when compiled with -02 on gcc 2.7.2) ++ * executes on a 586-100 (39.73 bogomips) at about 1900kb/sec; ++ * [measured with a 4MB data and "gpgm --print-md rmd160"] */ ++ u32 x[16]; ++ memcpy( x, data, 64 ); ++ #endif ++ #endif ++ ++ ++#define K0 0x00000000 ++#define K1 0x5A827999 ++#define K2 0x6ED9EBA1 ++#define K3 0x8F1BBCDC ++#define K4 0xA953FD4E ++#define KK0 0x50A28BE6 ++#define KK1 0x5C4DD124 ++#define KK2 0x6D703EF3 ++#define KK3 0x7A6D76E9 ++#define KK4 0x00000000 ++#define F0(x,y,z) ( (x) ^ (y) ^ (z) ) ++#define F1(x,y,z) ( ((x) & (y)) | (~(x) & (z)) ) ++#define F2(x,y,z) ( ((x) | ~(y)) ^ (z) ) ++#define F3(x,y,z) ( ((x) & (z)) | ((y) & ~(z)) ) ++#define F4(x,y,z) ( (x) ^ ((y) | ~(z)) ) ++#define R(a,b,c,d,e,f,k,r,s) do { t = a + f(b,c,d) + k + x[r]; \ ++ a = rol(t,s) + e; \ ++ c = rol(c,10); \ ++ } while(0) ++ ++ /* left lane */ ++ a = hd->h0; ++ b = hd->h1; ++ c = hd->h2; ++ d = hd->h3; ++ e = hd->h4; ++ R( a, b, c, d, e, F0, K0, 0, 11 ); ++ R( e, a, b, c, d, F0, K0, 1, 14 ); ++ R( d, e, a, b, c, F0, K0, 2, 15 ); ++ R( c, d, e, a, b, F0, K0, 3, 12 ); ++ R( b, c, d, e, a, F0, K0, 4, 5 ); ++ R( a, b, c, d, e, F0, K0, 5, 8 ); ++ R( e, a, b, c, d, F0, K0, 6, 7 ); ++ R( d, e, a, b, c, F0, K0, 7, 9 ); ++ R( c, d, e, a, b, F0, K0, 8, 11 ); ++ R( b, c, d, e, a, F0, K0, 9, 13 ); ++ R( a, b, c, d, e, F0, K0, 10, 14 ); ++ R( e, a, b, c, d, F0, K0, 11, 15 ); ++ R( d, e, a, b, c, F0, K0, 12, 6 ); ++ R( c, d, e, a, b, F0, K0, 13, 7 ); ++ R( b, c, d, e, a, F0, K0, 14, 9 ); ++ R( a, b, c, d, e, F0, K0, 15, 8 ); ++ R( e, a, b, c, d, F1, K1, 7, 7 ); ++ R( d, e, a, b, c, F1, K1, 4, 6 ); ++ R( c, d, e, a, b, F1, K1, 13, 8 ); ++ R( b, c, d, e, a, F1, K1, 1, 13 ); ++ R( a, b, c, d, e, F1, K1, 10, 11 ); ++ R( e, a, b, c, d, F1, K1, 6, 9 ); ++ R( d, e, a, b, c, F1, K1, 15, 7 ); ++ R( c, d, e, a, b, F1, K1, 3, 15 ); ++ R( b, c, d, e, a, F1, K1, 12, 7 ); ++ R( a, b, c, d, e, F1, K1, 0, 12 ); ++ R( e, a, b, c, d, F1, K1, 9, 15 ); ++ R( d, e, a, b, c, F1, K1, 5, 9 ); ++ R( c, d, e, a, b, F1, K1, 2, 11 ); ++ R( b, c, d, e, a, F1, K1, 14, 7 ); ++ R( a, b, c, d, e, F1, K1, 11, 13 ); ++ R( e, a, b, c, d, F1, K1, 8, 12 ); ++ R( d, e, a, b, c, F2, K2, 3, 11 ); ++ R( c, d, e, a, b, F2, K2, 10, 13 ); ++ R( b, c, d, e, a, F2, K2, 14, 6 ); ++ R( a, b, c, d, e, F2, K2, 4, 7 ); ++ R( e, a, b, c, d, F2, K2, 9, 14 ); ++ R( d, e, a, b, c, F2, K2, 15, 9 ); ++ R( c, d, e, a, b, F2, K2, 8, 13 ); ++ R( b, c, d, e, a, F2, K2, 1, 15 ); ++ R( a, b, c, d, e, F2, K2, 2, 14 ); ++ R( e, a, b, c, d, F2, K2, 7, 8 ); ++ R( d, e, a, b, c, F2, K2, 0, 13 ); ++ R( c, d, e, a, b, F2, K2, 6, 6 ); ++ R( b, c, d, e, a, F2, K2, 13, 5 ); ++ R( a, b, c, d, e, F2, K2, 11, 12 ); ++ R( e, a, b, c, d, F2, K2, 5, 7 ); ++ R( d, e, a, b, c, F2, K2, 12, 5 ); ++ R( c, d, e, a, b, F3, K3, 1, 11 ); ++ R( b, c, d, e, a, F3, K3, 9, 12 ); ++ R( a, b, c, d, e, F3, K3, 11, 14 ); ++ R( e, a, b, c, d, F3, K3, 10, 15 ); ++ R( d, e, a, b, c, F3, K3, 0, 14 ); ++ R( c, d, e, a, b, F3, K3, 8, 15 ); ++ R( b, c, d, e, a, F3, K3, 12, 9 ); ++ R( a, b, c, d, e, F3, K3, 4, 8 ); ++ R( e, a, b, c, d, F3, K3, 13, 9 ); ++ R( d, e, a, b, c, F3, K3, 3, 14 ); ++ R( c, d, e, a, b, F3, K3, 7, 5 ); ++ R( b, c, d, e, a, F3, K3, 15, 6 ); ++ R( a, b, c, d, e, F3, K3, 14, 8 ); ++ R( e, a, b, c, d, F3, K3, 5, 6 ); ++ R( d, e, a, b, c, F3, K3, 6, 5 ); ++ R( c, d, e, a, b, F3, K3, 2, 12 ); ++ R( b, c, d, e, a, F4, K4, 4, 9 ); ++ R( a, b, c, d, e, F4, K4, 0, 15 ); ++ R( e, a, b, c, d, F4, K4, 5, 5 ); ++ R( d, e, a, b, c, F4, K4, 9, 11 ); ++ R( c, d, e, a, b, F4, K4, 7, 6 ); ++ R( b, c, d, e, a, F4, K4, 12, 8 ); ++ R( a, b, c, d, e, F4, K4, 2, 13 ); ++ R( e, a, b, c, d, F4, K4, 10, 12 ); ++ R( d, e, a, b, c, F4, K4, 14, 5 ); ++ R( c, d, e, a, b, F4, K4, 1, 12 ); ++ R( b, c, d, e, a, F4, K4, 3, 13 ); ++ R( a, b, c, d, e, F4, K4, 8, 14 ); ++ R( e, a, b, c, d, F4, K4, 11, 11 ); ++ R( d, e, a, b, c, F4, K4, 6, 8 ); ++ R( c, d, e, a, b, F4, K4, 15, 5 ); ++ R( b, c, d, e, a, F4, K4, 13, 6 ); ++ ++ aa = a; bb = b; cc = c; dd = d; ee = e; ++ ++ /* right lane */ ++ a = hd->h0; ++ b = hd->h1; ++ c = hd->h2; ++ d = hd->h3; ++ e = hd->h4; ++ R( a, b, c, d, e, F4, KK0, 5, 8); ++ R( e, a, b, c, d, F4, KK0, 14, 9); ++ R( d, e, a, b, c, F4, KK0, 7, 9); ++ R( c, d, e, a, b, F4, KK0, 0, 11); ++ R( b, c, d, e, a, F4, KK0, 9, 13); ++ R( a, b, c, d, e, F4, KK0, 2, 15); ++ R( e, a, b, c, d, F4, KK0, 11, 15); ++ R( d, e, a, b, c, F4, KK0, 4, 5); ++ R( c, d, e, a, b, F4, KK0, 13, 7); ++ R( b, c, d, e, a, F4, KK0, 6, 7); ++ R( a, b, c, d, e, F4, KK0, 15, 8); ++ R( e, a, b, c, d, F4, KK0, 8, 11); ++ R( d, e, a, b, c, F4, KK0, 1, 14); ++ R( c, d, e, a, b, F4, KK0, 10, 14); ++ R( b, c, d, e, a, F4, KK0, 3, 12); ++ R( a, b, c, d, e, F4, KK0, 12, 6); ++ R( e, a, b, c, d, F3, KK1, 6, 9); ++ R( d, e, a, b, c, F3, KK1, 11, 13); ++ R( c, d, e, a, b, F3, KK1, 3, 15); ++ R( b, c, d, e, a, F3, KK1, 7, 7); ++ R( a, b, c, d, e, F3, KK1, 0, 12); ++ R( e, a, b, c, d, F3, KK1, 13, 8); ++ R( d, e, a, b, c, F3, KK1, 5, 9); ++ R( c, d, e, a, b, F3, KK1, 10, 11); ++ R( b, c, d, e, a, F3, KK1, 14, 7); ++ R( a, b, c, d, e, F3, KK1, 15, 7); ++ R( e, a, b, c, d, F3, KK1, 8, 12); ++ R( d, e, a, b, c, F3, KK1, 12, 7); ++ R( c, d, e, a, b, F3, KK1, 4, 6); ++ R( b, c, d, e, a, F3, KK1, 9, 15); ++ R( a, b, c, d, e, F3, KK1, 1, 13); ++ R( e, a, b, c, d, F3, KK1, 2, 11); ++ R( d, e, a, b, c, F2, KK2, 15, 9); ++ R( c, d, e, a, b, F2, KK2, 5, 7); ++ R( b, c, d, e, a, F2, KK2, 1, 15); ++ R( a, b, c, d, e, F2, KK2, 3, 11); ++ R( e, a, b, c, d, F2, KK2, 7, 8); ++ R( d, e, a, b, c, F2, KK2, 14, 6); ++ R( c, d, e, a, b, F2, KK2, 6, 6); ++ R( b, c, d, e, a, F2, KK2, 9, 14); ++ R( a, b, c, d, e, F2, KK2, 11, 12); ++ R( e, a, b, c, d, F2, KK2, 8, 13); ++ R( d, e, a, b, c, F2, KK2, 12, 5); ++ R( c, d, e, a, b, F2, KK2, 2, 14); ++ R( b, c, d, e, a, F2, KK2, 10, 13); ++ R( a, b, c, d, e, F2, KK2, 0, 13); ++ R( e, a, b, c, d, F2, KK2, 4, 7); ++ R( d, e, a, b, c, F2, KK2, 13, 5); ++ R( c, d, e, a, b, F1, KK3, 8, 15); ++ R( b, c, d, e, a, F1, KK3, 6, 5); ++ R( a, b, c, d, e, F1, KK3, 4, 8); ++ R( e, a, b, c, d, F1, KK3, 1, 11); ++ R( d, e, a, b, c, F1, KK3, 3, 14); ++ R( c, d, e, a, b, F1, KK3, 11, 14); ++ R( b, c, d, e, a, F1, KK3, 15, 6); ++ R( a, b, c, d, e, F1, KK3, 0, 14); ++ R( e, a, b, c, d, F1, KK3, 5, 6); ++ R( d, e, a, b, c, F1, KK3, 12, 9); ++ R( c, d, e, a, b, F1, KK3, 2, 12); ++ R( b, c, d, e, a, F1, KK3, 13, 9); ++ R( a, b, c, d, e, F1, KK3, 9, 12); ++ R( e, a, b, c, d, F1, KK3, 7, 5); ++ R( d, e, a, b, c, F1, KK3, 10, 15); ++ R( c, d, e, a, b, F1, KK3, 14, 8); ++ R( b, c, d, e, a, F0, KK4, 12, 8); ++ R( a, b, c, d, e, F0, KK4, 15, 5); ++ R( e, a, b, c, d, F0, KK4, 10, 12); ++ R( d, e, a, b, c, F0, KK4, 4, 9); ++ R( c, d, e, a, b, F0, KK4, 1, 12); ++ R( b, c, d, e, a, F0, KK4, 5, 5); ++ R( a, b, c, d, e, F0, KK4, 8, 14); ++ R( e, a, b, c, d, F0, KK4, 7, 6); ++ R( d, e, a, b, c, F0, KK4, 6, 8); ++ R( c, d, e, a, b, F0, KK4, 2, 13); ++ R( b, c, d, e, a, F0, KK4, 13, 6); ++ R( a, b, c, d, e, F0, KK4, 14, 5); ++ R( e, a, b, c, d, F0, KK4, 0, 15); ++ R( d, e, a, b, c, F0, KK4, 3, 13); ++ R( c, d, e, a, b, F0, KK4, 9, 11); ++ R( b, c, d, e, a, F0, KK4, 11, 11); ++ ++ ++ t = hd->h1 + d + cc; ++ hd->h1 = hd->h2 + e + dd; ++ hd->h2 = hd->h3 + a + ee; ++ hd->h3 = hd->h4 + b + aa; ++ hd->h4 = hd->h0 + c + bb; ++ hd->h0 = t; ++} ++ ++ ++/* Update the message digest with the contents ++ * of INBUF with length INLEN. ++ */ ++static void ++rmd160_write( RMD160_CONTEXT *hd, byte *inbuf, size_t inlen) ++{ ++ if( hd->count == 64 ) { /* flush the buffer */ ++ transform( hd, hd->buf ); ++ hd->count = 0; ++ hd->nblocks++; ++ } ++ if( !inbuf ) ++ return; ++ if( hd->count ) { ++ for( ; inlen && hd->count < 64; inlen-- ) ++ hd->buf[hd->count++] = *inbuf++; ++ rmd160_write( hd, NULL, 0 ); ++ if( !inlen ) ++ return; ++ } ++ ++ while( inlen >= 64 ) { ++ transform( hd, inbuf ); ++ hd->count = 0; ++ hd->nblocks++; ++ inlen -= 64; ++ inbuf += 64; ++ } ++ for( ; inlen && hd->count < 64; inlen-- ) ++ hd->buf[hd->count++] = *inbuf++; ++} ++ ++/* The routine terminates the computation ++ */ ++ ++static void ++rmd160_final( RMD160_CONTEXT *hd ) ++{ ++ u32 t, msb, lsb; ++ byte *p; ++ ++ rmd160_write(hd, NULL, 0); /* flush */; ++ ++ msb = 0; ++ t = hd->nblocks; ++ if( (lsb = t << 6) < t ) /* multiply by 64 to make a byte count */ ++ msb++; ++ msb += t >> 26; ++ t = lsb; ++ if( (lsb = t + hd->count) < t ) /* add the count */ ++ msb++; ++ t = lsb; ++ if( (lsb = t << 3) < t ) /* multiply by 8 to make a bit count */ ++ msb++; ++ msb += t >> 29; ++ ++ if( hd->count < 56 ) { /* enough room */ ++ hd->buf[hd->count++] = 0x80; /* pad */ ++ while( hd->count < 56 ) ++ hd->buf[hd->count++] = 0; /* pad */ ++ } ++ else { /* need one extra block */ ++ hd->buf[hd->count++] = 0x80; /* pad character */ ++ while( hd->count < 64 ) ++ hd->buf[hd->count++] = 0; ++ rmd160_write(hd, NULL, 0); /* flush */; ++ memset(hd->buf, 0, 56 ); /* fill next block with zeroes */ ++ } ++ /* append the 64 bit count */ ++ hd->buf[56] = lsb ; ++ hd->buf[57] = lsb >> 8; ++ hd->buf[58] = lsb >> 16; ++ hd->buf[59] = lsb >> 24; ++ hd->buf[60] = msb ; ++ hd->buf[61] = msb >> 8; ++ hd->buf[62] = msb >> 16; ++ hd->buf[63] = msb >> 24; ++ transform( hd, hd->buf ); ++ ++ p = hd->buf; ++ #if BYTE_ORDER == BIG_ENDIAN ++ #define X(a) do { *p++ = hd->h##a ; *p++ = hd->h##a >> 8; \ ++ *p++ = hd->h##a >> 16; *p++ = hd->h##a >> 24; } while(0) ++ #else /* little endian */ ++ #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0) ++ #endif ++ X(0); ++ X(1); ++ X(2); ++ X(3); ++ X(4); ++ #undef X ++} ++ ++/**************** ++ * Shortcut functions which puts the hash value of the supplied buffer ++ * into outbuf which must have a size of 20 bytes. ++ */ ++void ++rmd160_hash_buffer( char *outbuf, const char *buffer, size_t length ) ++{ ++ RMD160_CONTEXT hd; ++ ++ rmd160_init( &hd ); ++ rmd160_write( &hd, (byte*)buffer, length ); ++ rmd160_final( &hd ); ++ memcpy( outbuf, hd.buf, 20 ); ++} +diff -urN util-linux-2.11b/mount/rmd160.h util-linux-2.11b.int/mount/rmd160.h +--- util-linux-2.11b/mount/rmd160.h Thu Jan 1 01:00:00 1970 ++++ util-linux-2.11b.int/mount/rmd160.h Mon Apr 2 19:39:51 2001 +@@ -0,0 +1,9 @@ ++#ifndef RMD160_H ++#define RMD160_H ++ ++void ++rmd160_hash_buffer( char *outbuf, const char *buffer, size_t length ); ++ ++#endif /*RMD160_H*/ ++ ++ diff -urN lin.2.4.3/Documentation/crypto/utils/freeswan-import.sh int.2.4.3/Documentation/crypto/utils/freeswan-import.sh --- lin.2.4.3/Documentation/crypto/utils/freeswan-import.sh Thu Jan 1 01:00:00 1970 +++ int.2.4.3/Documentation/crypto/utils/freeswan-import.sh Mon Apr 2 18:37:26 2001 @@ -0,0 +1,63 @@ +#!/bin/bash +# +# Import updates from the somewhat excentric freeswan distribution. +# +# Freeswan patches the kernel with a "smart" patch script. This +# script cleans up after freeswan's "smart" patching. +# +# import-freeswan.sh +# +# int-kernel-dir is the full path to a directory patched with the international # kernel patch, but without the freeswan patches. freeswan-dir is where the +# freeswan distribution is located. + +INT=$1 +FREESWAN=$2 +# strip trailing slashes +INT=${INT%/} +FREESWAN=${FREESWAN%/} + +if [ ! -e $INT -o ! -e $FREESWAN ]; then + echo "Either $INT or $FREESWAN are missing!" +fi + +mkdir -p $INT.freeswan +(cd $INT.freeswan; lndir ../`basename $INT` .) + +(cd $FREESWAN; make patches KERNELSRC=$INT.freeswan) +find $INT.freeswan \( \( -name '*.ipsecmd5' \) -o \( -name '*.preipsec' \) \ + -o \( -name '*.wipsec' \) -o \( -name '*.mangled' \) \) -print | + while read a; do + echo "Removing $a ..." + rm $a; + done + + +#(cd $FREESWAN; make klink KERNELSRC=$INT.freeswan) +cp -R $FREESWAN/klips/net/ipsec $INT.freeswan/net/ipsec + + +# The kernel part of freeswan is referring to ../../../lib/freeswan.h +# which is something we have to fix. +# Also the Makefile is referring to ../../../lib/libkernel.a and +# ../../../libdes.a +# We have to move the lib directory from the freeswan distribution +# into the kernel distribution and fix the references. +cp -R $FREESWAN/lib $INT.freeswan/net/ipsec/ +find $INT.freeswan/net/ipsec -follow -iname '*.[ch]' -o -name Makefile | + while read a; do + perl -pi -e 's/\.\.\/\.\.\/\.\.\/lib/lib/' $a + done + +# Now the makefile in net/ipsec is extremely flawed. It depends on +# ../../../lib/libdes.a (now lib/libdes.a), but it has no rule to make +# that library. So we patch the Makefile somewhat. +perl -pi -e 'if (m/DESLIB=lib/) { print "$_\n\$(DESLIB):\n\t( cd lib; \$(MAKE) libdes.a )\n\n" }' $INT.freeswan/net/ipsec/Makefile + +# Fix another bug in the freeswan-1.1/lib/Makefile file. Inadequate +# quoting of the $(CC) variable. +perl -pi -e 's/\$\(CC\)/\"\$\(CC\)\"/' $INT.freeswan/net/ipsec/lib/Makefile + + +# references to ../../../lib to point to lib + +diff -urN $INT $INT.freeswan > $INT/../`basename $INT`.freeswan.patch diff -urN lin.2.4.3/MAINTAINERS int.2.4.3/MAINTAINERS --- lin.2.4.3/MAINTAINERS Mon Mar 26 04:14:20 2001 +++ int.2.4.3/MAINTAINERS Mon Apr 2 18:37:26 2001 @@ -651,6 +651,13 @@ M: tigran@veritas.com S: Maintained +INTERNATIONAL KERNEL PATCH (CRYPTO) +P: Alexander Kjeldaas +M: astor@fast.no +W: http://www.kerneli.org/ +L: linux-kernel@vger.rutgers.edu +S: Maintained + IP MASQUERADING: P: Juanjo Ciarlante M: jjciarla@raiz.uncu.edu.ar diff -urN lin.2.4.3/Makefile int.2.4.3/Makefile --- lin.2.4.3/Makefile Fri Mar 30 06:13:15 2001 +++ int.2.4.3/Makefile Mon Apr 2 18:37:26 2001 @@ -118,13 +118,14 @@ CORE_FILES =kernel/kernel.o mm/mm.o fs/fs.o ipc/ipc.o NETWORKS =net/network.o +CRYPTO =crypto/crypto.o DRIVERS =drivers/block/block.o \ drivers/char/char.o \ drivers/misc/misc.o \ drivers/net/net.o \ drivers/media/media.o LIBS =$(TOPDIR)/lib/lib.a -SUBDIRS =kernel drivers mm fs net ipc lib +SUBDIRS =kernel drivers mm fs net ipc lib crypto DRIVERS-n := DRIVERS-y := @@ -230,7 +231,7 @@ export CPPFLAGS CFLAGS AFLAGS -export NETWORKS DRIVERS LIBS HEAD LDFLAGS LINKFLAGS MAKEBOOT ASFLAGS +export NETWORKS CRYPTO DRIVERS LIBS HEAD LDFLAGS LINKFLAGS MAKEBOOT ASFLAGS .S.s: $(CPP) $(AFLAGS) -traditional -o $*.s $< @@ -249,6 +250,7 @@ $(CORE_FILES) \ $(DRIVERS) \ $(NETWORKS) \ + $(CRYPTO) \ $(LIBS) \ --end-group \ -o vmlinux diff -urN lin.2.4.3/arch/alpha/config.in int.2.4.3/arch/alpha/config.in --- lin.2.4.3/arch/alpha/config.in Fri Dec 29 23:07:19 2000 +++ int.2.4.3/arch/alpha/config.in Mon Apr 2 18:37:26 2001 @@ -255,6 +255,8 @@ source net/Config.in fi +source crypto/Config.in + mainmenu_option next_comment comment 'ATA/IDE/MFM/RLL support' diff -urN lin.2.4.3/arch/arm/config.in int.2.4.3/arch/arm/config.in --- lin.2.4.3/arch/arm/config.in Fri Feb 9 20:38:27 2001 +++ int.2.4.3/arch/arm/config.in Mon Apr 2 18:37:26 2001 @@ -310,6 +310,8 @@ source drivers/acorn/block/Config.in fi +source crypto/Config.in + if [ "$CONFIG_NET" = "y" ]; then source net/Config.in diff -urN lin.2.4.3/arch/i386/config.in int.2.4.3/arch/i386/config.in --- lin.2.4.3/arch/i386/config.in Mon Jan 8 22:27:56 2001 +++ int.2.4.3/arch/i386/config.in Mon Apr 2 18:37:26 2001 @@ -250,6 +250,8 @@ source drivers/parport/Config.in +source crypto/Config.in + source drivers/pnp/Config.in source drivers/block/Config.in diff -urN lin.2.4.3/arch/i386/defconfig int.2.4.3/arch/i386/defconfig --- lin.2.4.3/arch/i386/defconfig Sat Mar 24 01:05:44 2001 +++ int.2.4.3/arch/i386/defconfig Mon Apr 2 18:37:26 2001 @@ -119,6 +119,8 @@ # CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_LOOP_CAST is not set +# CONFIG_BLK_DEV_LOOP_IDEA is not set # CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_RAM is not set # CONFIG_BLK_DEV_INITRD is not set diff -urN lin.2.4.3/arch/m68k/config.in int.2.4.3/arch/m68k/config.in --- lin.2.4.3/arch/m68k/config.in Thu Jan 4 22:00:55 2001 +++ int.2.4.3/arch/m68k/config.in Mon Apr 2 18:37:26 2001 @@ -163,6 +163,8 @@ source drivers/input/Config.in fi +source crypto/Config.in + mainmenu_option next_comment comment 'ATA/IDE/MFM/RLL support' diff -urN lin.2.4.3/arch/mips/config.in int.2.4.3/arch/mips/config.in --- lin.2.4.3/arch/mips/config.in Thu Nov 16 21:51:28 2000 +++ int.2.4.3/arch/mips/config.in Mon Apr 2 18:37:26 2001 @@ -221,6 +221,8 @@ endmenu fi +source crypto/Config.in + mainmenu_option next_comment comment 'SCSI support' diff -urN lin.2.4.3/arch/ppc/config.in int.2.4.3/arch/ppc/config.in --- lin.2.4.3/arch/ppc/config.in Sat Mar 3 19:52:13 2001 +++ int.2.4.3/arch/ppc/config.in Mon Apr 2 18:37:26 2001 @@ -112,6 +112,8 @@ endmenu +source crypto/Config.in + mainmenu_option next_comment comment 'General setup' diff -urN lin.2.4.3/arch/sparc/config.in int.2.4.3/arch/sparc/config.in --- lin.2.4.3/arch/sparc/config.in Mon Feb 19 04:49:44 2001 +++ int.2.4.3/arch/sparc/config.in Mon Apr 2 18:37:26 2001 @@ -135,6 +135,8 @@ define_bool CONFIG_BLK_DEV_HD n fi +source crypto/Config.in + mainmenu_option next_comment comment 'ISDN subsystem' diff -urN lin.2.4.3/arch/sparc64/config.in int.2.4.3/arch/sparc64/config.in --- lin.2.4.3/arch/sparc64/config.in Mon Mar 26 04:14:21 2001 +++ int.2.4.3/arch/sparc64/config.in Mon Apr 2 18:37:26 2001 @@ -126,6 +126,8 @@ fi endmenu +source crypto/Config.in + mainmenu_option next_comment comment 'SCSI support' diff -urN lin.2.4.3/crypto/2fish_tables.h int.2.4.3/crypto/2fish_tables.h --- lin.2.4.3/crypto/2fish_tables.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/2fish_tables.h Mon Apr 2 18:51:43 2001 @@ -0,0 +1,427 @@ +/* The large precomputed tables for the Twofish cipher (twofish.c) + * Taken from the same source as twofish.c + * Marc Mutz + */ + +/* These two tables are the q0 and q1 permutations, exactly as described in + * the Twofish paper. */ + +#ifndef _2FISH_TABLES_H +#define _2FISH_TABLES_H + +#include + +static const u8 q0[256] = { + 0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76, 0x9A, 0x92, 0x80, 0x78, + 0xE4, 0xDD, 0xD1, 0x38, 0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C, + 0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48, 0xF2, 0xD0, 0x8B, 0x30, + 0x84, 0x54, 0xDF, 0x23, 0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82, + 0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C, 0xA6, 0xEB, 0xA5, 0xBE, + 0x16, 0x0C, 0xE3, 0x61, 0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B, + 0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1, 0xE1, 0xE6, 0xBD, 0x45, + 0xE2, 0xF4, 0xB6, 0x66, 0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7, + 0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA, 0xEA, 0x77, 0x39, 0xAF, + 0x33, 0xC9, 0x62, 0x71, 0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8, + 0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7, 0xA1, 0x1D, 0xAA, 0xED, + 0x06, 0x70, 0xB2, 0xD2, 0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90, + 0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB, 0x9E, 0x9C, 0x52, 0x1B, + 0x5F, 0x93, 0x0A, 0xEF, 0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B, + 0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64, 0x2A, 0xCE, 0xCB, 0x2F, + 0xFC, 0x97, 0x05, 0x7A, 0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A, + 0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02, 0xB8, 0xDA, 0xB0, 0x17, + 0x55, 0x1F, 0x8A, 0x7D, 0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72, + 0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, 0x6E, 0x50, 0xDE, 0x68, + 0x65, 0xBC, 0xDB, 0xF8, 0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4, + 0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00, 0x6F, 0x9D, 0x36, 0x42, + 0x4A, 0x5E, 0xC1, 0xE0 +}; + +static const u8 q1[256] = { + 0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8, 0x4A, 0xD3, 0xE6, 0x6B, + 0x45, 0x7D, 0xE8, 0x4B, 0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1, + 0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F, 0x5E, 0xBA, 0xAE, 0x5B, + 0x8A, 0x00, 0xBC, 0x9D, 0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5, + 0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3, 0xB2, 0x73, 0x4C, 0x54, + 0x92, 0x74, 0x36, 0x51, 0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96, + 0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C, 0x13, 0x95, 0x9C, 0xC7, + 0x24, 0x46, 0x3B, 0x70, 0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8, + 0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC, 0x03, 0x6F, 0x08, 0xBF, + 0x40, 0xE7, 0x2B, 0xE2, 0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9, + 0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17, 0x66, 0x94, 0xA1, 0x1D, + 0x3D, 0xF0, 0xDE, 0xB3, 0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E, + 0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49, 0x81, 0x88, 0xEE, 0x21, + 0xC4, 0x1A, 0xEB, 0xD9, 0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01, + 0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48, 0x4F, 0xF2, 0x65, 0x8E, + 0x78, 0x5C, 0x58, 0x19, 0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64, + 0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5, 0xCE, 0xE9, 0x68, 0x44, + 0xE0, 0x4D, 0x43, 0x69, 0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E, + 0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC, 0x22, 0xC9, 0xC0, 0x9B, + 0x89, 0xD4, 0xED, 0xAB, 0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9, + 0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2, 0x16, 0x25, 0x86, 0x56, + 0x55, 0x09, 0xBE, 0x91 +}; + +/* These MDS tables are actually tables of MDS composed with q0 and q1, + * because it is only ever used that way and we can save some time by + * precomputing. Of course the main saving comes from precomputing the + * GF(2^8) multiplication involved in the MDS matrix multiply; by looking + * things up in these tables we reduce the matrix multiply to four lookups + * and three XORs. Semi-formally, the definition of these tables is: + * mds[0][i] = MDS (q1[i] 0 0 0)^T mds[1][i] = MDS (0 q0[i] 0 0)^T + * mds[2][i] = MDS (0 0 q1[i] 0)^T mds[3][i] = MDS (0 0 0 q0[i])^T + * where ^T means "transpose", the matrix multiply is performed in GF(2^8) + * represented as GF(2)[x]/v(x) where v(x)=x^8+x^6+x^5+x^3+1 as described + * by Schneier et al, and I'm casually glossing over the byte/word + * conversion issues. */ + +static const u32 mds[4][256] = { + {0xBCBC3275, 0xECEC21F3, 0x202043C6, 0xB3B3C9F4, 0xDADA03DB, 0x02028B7B, + 0xE2E22BFB, 0x9E9EFAC8, 0xC9C9EC4A, 0xD4D409D3, 0x18186BE6, 0x1E1E9F6B, + 0x98980E45, 0xB2B2387D, 0xA6A6D2E8, 0x2626B74B, 0x3C3C57D6, 0x93938A32, + 0x8282EED8, 0x525298FD, 0x7B7BD437, 0xBBBB3771, 0x5B5B97F1, 0x474783E1, + 0x24243C30, 0x5151E20F, 0xBABAC6F8, 0x4A4AF31B, 0xBFBF4887, 0x0D0D70FA, + 0xB0B0B306, 0x7575DE3F, 0xD2D2FD5E, 0x7D7D20BA, 0x666631AE, 0x3A3AA35B, + 0x59591C8A, 0x00000000, 0xCDCD93BC, 0x1A1AE09D, 0xAEAE2C6D, 0x7F7FABC1, + 0x2B2BC7B1, 0xBEBEB90E, 0xE0E0A080, 0x8A8A105D, 0x3B3B52D2, 0x6464BAD5, + 0xD8D888A0, 0xE7E7A584, 0x5F5FE807, 0x1B1B1114, 0x2C2CC2B5, 0xFCFCB490, + 0x3131272C, 0x808065A3, 0x73732AB2, 0x0C0C8173, 0x79795F4C, 0x6B6B4154, + 0x4B4B0292, 0x53536974, 0x94948F36, 0x83831F51, 0x2A2A3638, 0xC4C49CB0, + 0x2222C8BD, 0xD5D5F85A, 0xBDBDC3FC, 0x48487860, 0xFFFFCE62, 0x4C4C0796, + 0x4141776C, 0xC7C7E642, 0xEBEB24F7, 0x1C1C1410, 0x5D5D637C, 0x36362228, + 0x6767C027, 0xE9E9AF8C, 0x4444F913, 0x1414EA95, 0xF5F5BB9C, 0xCFCF18C7, + 0x3F3F2D24, 0xC0C0E346, 0x7272DB3B, 0x54546C70, 0x29294CCA, 0xF0F035E3, + 0x0808FE85, 0xC6C617CB, 0xF3F34F11, 0x8C8CE4D0, 0xA4A45993, 0xCACA96B8, + 0x68683BA6, 0xB8B84D83, 0x38382820, 0xE5E52EFF, 0xADAD569F, 0x0B0B8477, + 0xC8C81DC3, 0x9999FFCC, 0x5858ED03, 0x19199A6F, 0x0E0E0A08, 0x95957EBF, + 0x70705040, 0xF7F730E7, 0x6E6ECF2B, 0x1F1F6EE2, 0xB5B53D79, 0x09090F0C, + 0x616134AA, 0x57571682, 0x9F9F0B41, 0x9D9D803A, 0x111164EA, 0x2525CDB9, + 0xAFAFDDE4, 0x4545089A, 0xDFDF8DA4, 0xA3A35C97, 0xEAEAD57E, 0x353558DA, + 0xEDEDD07A, 0x4343FC17, 0xF8F8CB66, 0xFBFBB194, 0x3737D3A1, 0xFAFA401D, + 0xC2C2683D, 0xB4B4CCF0, 0x32325DDE, 0x9C9C71B3, 0x5656E70B, 0xE3E3DA72, + 0x878760A7, 0x15151B1C, 0xF9F93AEF, 0x6363BFD1, 0x3434A953, 0x9A9A853E, + 0xB1B1428F, 0x7C7CD133, 0x88889B26, 0x3D3DA65F, 0xA1A1D7EC, 0xE4E4DF76, + 0x8181942A, 0x91910149, 0x0F0FFB81, 0xEEEEAA88, 0x161661EE, 0xD7D77321, + 0x9797F5C4, 0xA5A5A81A, 0xFEFE3FEB, 0x6D6DB5D9, 0x7878AEC5, 0xC5C56D39, + 0x1D1DE599, 0x7676A4CD, 0x3E3EDCAD, 0xCBCB6731, 0xB6B6478B, 0xEFEF5B01, + 0x12121E18, 0x6060C523, 0x6A6AB0DD, 0x4D4DF61F, 0xCECEE94E, 0xDEDE7C2D, + 0x55559DF9, 0x7E7E5A48, 0x2121B24F, 0x03037AF2, 0xA0A02665, 0x5E5E198E, + 0x5A5A6678, 0x65654B5C, 0x62624E58, 0xFDFD4519, 0x0606F48D, 0x404086E5, + 0xF2F2BE98, 0x3333AC57, 0x17179067, 0x05058E7F, 0xE8E85E05, 0x4F4F7D64, + 0x89896AAF, 0x10109563, 0x74742FB6, 0x0A0A75FE, 0x5C5C92F5, 0x9B9B74B7, + 0x2D2D333C, 0x3030D6A5, 0x2E2E49CE, 0x494989E9, 0x46467268, 0x77775544, + 0xA8A8D8E0, 0x9696044D, 0x2828BD43, 0xA9A92969, 0xD9D97929, 0x8686912E, + 0xD1D187AC, 0xF4F44A15, 0x8D8D1559, 0xD6D682A8, 0xB9B9BC0A, 0x42420D9E, + 0xF6F6C16E, 0x2F2FB847, 0xDDDD06DF, 0x23233934, 0xCCCC6235, 0xF1F1C46A, + 0xC1C112CF, 0x8585EBDC, 0x8F8F9E22, 0x7171A1C9, 0x9090F0C0, 0xAAAA539B, + 0x0101F189, 0x8B8BE1D4, 0x4E4E8CED, 0x8E8E6FAB, 0xABABA212, 0x6F6F3EA2, + 0xE6E6540D, 0xDBDBF252, 0x92927BBB, 0xB7B7B602, 0x6969CA2F, 0x3939D9A9, + 0xD3D30CD7, 0xA7A72361, 0xA2A2AD1E, 0xC3C399B4, 0x6C6C4450, 0x07070504, + 0x04047FF6, 0x272746C2, 0xACACA716, 0xD0D07625, 0x50501386, 0xDCDCF756, + 0x84841A55, 0xE1E15109, 0x7A7A25BE, 0x1313EF91}, + + {0xA9D93939, 0x67901717, 0xB3719C9C, 0xE8D2A6A6, 0x04050707, 0xFD985252, + 0xA3658080, 0x76DFE4E4, 0x9A084545, 0x92024B4B, 0x80A0E0E0, 0x78665A5A, + 0xE4DDAFAF, 0xDDB06A6A, 0xD1BF6363, 0x38362A2A, 0x0D54E6E6, 0xC6432020, + 0x3562CCCC, 0x98BEF2F2, 0x181E1212, 0xF724EBEB, 0xECD7A1A1, 0x6C774141, + 0x43BD2828, 0x7532BCBC, 0x37D47B7B, 0x269B8888, 0xFA700D0D, 0x13F94444, + 0x94B1FBFB, 0x485A7E7E, 0xF27A0303, 0xD0E48C8C, 0x8B47B6B6, 0x303C2424, + 0x84A5E7E7, 0x54416B6B, 0xDF06DDDD, 0x23C56060, 0x1945FDFD, 0x5BA33A3A, + 0x3D68C2C2, 0x59158D8D, 0xF321ECEC, 0xAE316666, 0xA23E6F6F, 0x82165757, + 0x63951010, 0x015BEFEF, 0x834DB8B8, 0x2E918686, 0xD9B56D6D, 0x511F8383, + 0x9B53AAAA, 0x7C635D5D, 0xA63B6868, 0xEB3FFEFE, 0xA5D63030, 0xBE257A7A, + 0x16A7ACAC, 0x0C0F0909, 0xE335F0F0, 0x6123A7A7, 0xC0F09090, 0x8CAFE9E9, + 0x3A809D9D, 0xF5925C5C, 0x73810C0C, 0x2C273131, 0x2576D0D0, 0x0BE75656, + 0xBB7B9292, 0x4EE9CECE, 0x89F10101, 0x6B9F1E1E, 0x53A93434, 0x6AC4F1F1, + 0xB499C3C3, 0xF1975B5B, 0xE1834747, 0xE66B1818, 0xBDC82222, 0x450E9898, + 0xE26E1F1F, 0xF4C9B3B3, 0xB62F7474, 0x66CBF8F8, 0xCCFF9999, 0x95EA1414, + 0x03ED5858, 0x56F7DCDC, 0xD4E18B8B, 0x1C1B1515, 0x1EADA2A2, 0xD70CD3D3, + 0xFB2BE2E2, 0xC31DC8C8, 0x8E195E5E, 0xB5C22C2C, 0xE9894949, 0xCF12C1C1, + 0xBF7E9595, 0xBA207D7D, 0xEA641111, 0x77840B0B, 0x396DC5C5, 0xAF6A8989, + 0x33D17C7C, 0xC9A17171, 0x62CEFFFF, 0x7137BBBB, 0x81FB0F0F, 0x793DB5B5, + 0x0951E1E1, 0xADDC3E3E, 0x242D3F3F, 0xCDA47676, 0xF99D5555, 0xD8EE8282, + 0xE5864040, 0xC5AE7878, 0xB9CD2525, 0x4D049696, 0x44557777, 0x080A0E0E, + 0x86135050, 0xE730F7F7, 0xA1D33737, 0x1D40FAFA, 0xAA346161, 0xED8C4E4E, + 0x06B3B0B0, 0x706C5454, 0xB22A7373, 0xD2523B3B, 0x410B9F9F, 0x7B8B0202, + 0xA088D8D8, 0x114FF3F3, 0x3167CBCB, 0xC2462727, 0x27C06767, 0x90B4FCFC, + 0x20283838, 0xF67F0404, 0x60784848, 0xFF2EE5E5, 0x96074C4C, 0x5C4B6565, + 0xB1C72B2B, 0xAB6F8E8E, 0x9E0D4242, 0x9CBBF5F5, 0x52F2DBDB, 0x1BF34A4A, + 0x5FA63D3D, 0x9359A4A4, 0x0ABCB9B9, 0xEF3AF9F9, 0x91EF1313, 0x85FE0808, + 0x49019191, 0xEE611616, 0x2D7CDEDE, 0x4FB22121, 0x8F42B1B1, 0x3BDB7272, + 0x47B82F2F, 0x8748BFBF, 0x6D2CAEAE, 0x46E3C0C0, 0xD6573C3C, 0x3E859A9A, + 0x6929A9A9, 0x647D4F4F, 0x2A948181, 0xCE492E2E, 0xCB17C6C6, 0x2FCA6969, + 0xFCC3BDBD, 0x975CA3A3, 0x055EE8E8, 0x7AD0EDED, 0xAC87D1D1, 0x7F8E0505, + 0xD5BA6464, 0x1AA8A5A5, 0x4BB72626, 0x0EB9BEBE, 0xA7608787, 0x5AF8D5D5, + 0x28223636, 0x14111B1B, 0x3FDE7575, 0x2979D9D9, 0x88AAEEEE, 0x3C332D2D, + 0x4C5F7979, 0x02B6B7B7, 0xB896CACA, 0xDA583535, 0xB09CC4C4, 0x17FC4343, + 0x551A8484, 0x1FF64D4D, 0x8A1C5959, 0x7D38B2B2, 0x57AC3333, 0xC718CFCF, + 0x8DF40606, 0x74695353, 0xB7749B9B, 0xC4F59797, 0x9F56ADAD, 0x72DAE3E3, + 0x7ED5EAEA, 0x154AF4F4, 0x229E8F8F, 0x12A2ABAB, 0x584E6262, 0x07E85F5F, + 0x99E51D1D, 0x34392323, 0x6EC1F6F6, 0x50446C6C, 0xDE5D3232, 0x68724646, + 0x6526A0A0, 0xBC93CDCD, 0xDB03DADA, 0xF8C6BABA, 0xC8FA9E9E, 0xA882D6D6, + 0x2BCF6E6E, 0x40507070, 0xDCEB8585, 0xFE750A0A, 0x328A9393, 0xA48DDFDF, + 0xCA4C2929, 0x10141C1C, 0x2173D7D7, 0xF0CCB4B4, 0xD309D4D4, 0x5D108A8A, + 0x0FE25151, 0x00000000, 0x6F9A1919, 0x9DE01A1A, 0x368F9494, 0x42E6C7C7, + 0x4AECC9C9, 0x5EFDD2D2, 0xC1AB7F7F, 0xE0D8A8A8}, + + {0xBC75BC32, 0xECF3EC21, 0x20C62043, 0xB3F4B3C9, 0xDADBDA03, 0x027B028B, + 0xE2FBE22B, 0x9EC89EFA, 0xC94AC9EC, 0xD4D3D409, 0x18E6186B, 0x1E6B1E9F, + 0x9845980E, 0xB27DB238, 0xA6E8A6D2, 0x264B26B7, 0x3CD63C57, 0x9332938A, + 0x82D882EE, 0x52FD5298, 0x7B377BD4, 0xBB71BB37, 0x5BF15B97, 0x47E14783, + 0x2430243C, 0x510F51E2, 0xBAF8BAC6, 0x4A1B4AF3, 0xBF87BF48, 0x0DFA0D70, + 0xB006B0B3, 0x753F75DE, 0xD25ED2FD, 0x7DBA7D20, 0x66AE6631, 0x3A5B3AA3, + 0x598A591C, 0x00000000, 0xCDBCCD93, 0x1A9D1AE0, 0xAE6DAE2C, 0x7FC17FAB, + 0x2BB12BC7, 0xBE0EBEB9, 0xE080E0A0, 0x8A5D8A10, 0x3BD23B52, 0x64D564BA, + 0xD8A0D888, 0xE784E7A5, 0x5F075FE8, 0x1B141B11, 0x2CB52CC2, 0xFC90FCB4, + 0x312C3127, 0x80A38065, 0x73B2732A, 0x0C730C81, 0x794C795F, 0x6B546B41, + 0x4B924B02, 0x53745369, 0x9436948F, 0x8351831F, 0x2A382A36, 0xC4B0C49C, + 0x22BD22C8, 0xD55AD5F8, 0xBDFCBDC3, 0x48604878, 0xFF62FFCE, 0x4C964C07, + 0x416C4177, 0xC742C7E6, 0xEBF7EB24, 0x1C101C14, 0x5D7C5D63, 0x36283622, + 0x672767C0, 0xE98CE9AF, 0x441344F9, 0x149514EA, 0xF59CF5BB, 0xCFC7CF18, + 0x3F243F2D, 0xC046C0E3, 0x723B72DB, 0x5470546C, 0x29CA294C, 0xF0E3F035, + 0x088508FE, 0xC6CBC617, 0xF311F34F, 0x8CD08CE4, 0xA493A459, 0xCAB8CA96, + 0x68A6683B, 0xB883B84D, 0x38203828, 0xE5FFE52E, 0xAD9FAD56, 0x0B770B84, + 0xC8C3C81D, 0x99CC99FF, 0x580358ED, 0x196F199A, 0x0E080E0A, 0x95BF957E, + 0x70407050, 0xF7E7F730, 0x6E2B6ECF, 0x1FE21F6E, 0xB579B53D, 0x090C090F, + 0x61AA6134, 0x57825716, 0x9F419F0B, 0x9D3A9D80, 0x11EA1164, 0x25B925CD, + 0xAFE4AFDD, 0x459A4508, 0xDFA4DF8D, 0xA397A35C, 0xEA7EEAD5, 0x35DA3558, + 0xED7AEDD0, 0x431743FC, 0xF866F8CB, 0xFB94FBB1, 0x37A137D3, 0xFA1DFA40, + 0xC23DC268, 0xB4F0B4CC, 0x32DE325D, 0x9CB39C71, 0x560B56E7, 0xE372E3DA, + 0x87A78760, 0x151C151B, 0xF9EFF93A, 0x63D163BF, 0x345334A9, 0x9A3E9A85, + 0xB18FB142, 0x7C337CD1, 0x8826889B, 0x3D5F3DA6, 0xA1ECA1D7, 0xE476E4DF, + 0x812A8194, 0x91499101, 0x0F810FFB, 0xEE88EEAA, 0x16EE1661, 0xD721D773, + 0x97C497F5, 0xA51AA5A8, 0xFEEBFE3F, 0x6DD96DB5, 0x78C578AE, 0xC539C56D, + 0x1D991DE5, 0x76CD76A4, 0x3EAD3EDC, 0xCB31CB67, 0xB68BB647, 0xEF01EF5B, + 0x1218121E, 0x602360C5, 0x6ADD6AB0, 0x4D1F4DF6, 0xCE4ECEE9, 0xDE2DDE7C, + 0x55F9559D, 0x7E487E5A, 0x214F21B2, 0x03F2037A, 0xA065A026, 0x5E8E5E19, + 0x5A785A66, 0x655C654B, 0x6258624E, 0xFD19FD45, 0x068D06F4, 0x40E54086, + 0xF298F2BE, 0x335733AC, 0x17671790, 0x057F058E, 0xE805E85E, 0x4F644F7D, + 0x89AF896A, 0x10631095, 0x74B6742F, 0x0AFE0A75, 0x5CF55C92, 0x9BB79B74, + 0x2D3C2D33, 0x30A530D6, 0x2ECE2E49, 0x49E94989, 0x46684672, 0x77447755, + 0xA8E0A8D8, 0x964D9604, 0x284328BD, 0xA969A929, 0xD929D979, 0x862E8691, + 0xD1ACD187, 0xF415F44A, 0x8D598D15, 0xD6A8D682, 0xB90AB9BC, 0x429E420D, + 0xF66EF6C1, 0x2F472FB8, 0xDDDFDD06, 0x23342339, 0xCC35CC62, 0xF16AF1C4, + 0xC1CFC112, 0x85DC85EB, 0x8F228F9E, 0x71C971A1, 0x90C090F0, 0xAA9BAA53, + 0x018901F1, 0x8BD48BE1, 0x4EED4E8C, 0x8EAB8E6F, 0xAB12ABA2, 0x6FA26F3E, + 0xE60DE654, 0xDB52DBF2, 0x92BB927B, 0xB702B7B6, 0x692F69CA, 0x39A939D9, + 0xD3D7D30C, 0xA761A723, 0xA21EA2AD, 0xC3B4C399, 0x6C506C44, 0x07040705, + 0x04F6047F, 0x27C22746, 0xAC16ACA7, 0xD025D076, 0x50865013, 0xDC56DCF7, + 0x8455841A, 0xE109E151, 0x7ABE7A25, 0x139113EF}, + + {0xD939A9D9, 0x90176790, 0x719CB371, 0xD2A6E8D2, 0x05070405, 0x9852FD98, + 0x6580A365, 0xDFE476DF, 0x08459A08, 0x024B9202, 0xA0E080A0, 0x665A7866, + 0xDDAFE4DD, 0xB06ADDB0, 0xBF63D1BF, 0x362A3836, 0x54E60D54, 0x4320C643, + 0x62CC3562, 0xBEF298BE, 0x1E12181E, 0x24EBF724, 0xD7A1ECD7, 0x77416C77, + 0xBD2843BD, 0x32BC7532, 0xD47B37D4, 0x9B88269B, 0x700DFA70, 0xF94413F9, + 0xB1FB94B1, 0x5A7E485A, 0x7A03F27A, 0xE48CD0E4, 0x47B68B47, 0x3C24303C, + 0xA5E784A5, 0x416B5441, 0x06DDDF06, 0xC56023C5, 0x45FD1945, 0xA33A5BA3, + 0x68C23D68, 0x158D5915, 0x21ECF321, 0x3166AE31, 0x3E6FA23E, 0x16578216, + 0x95106395, 0x5BEF015B, 0x4DB8834D, 0x91862E91, 0xB56DD9B5, 0x1F83511F, + 0x53AA9B53, 0x635D7C63, 0x3B68A63B, 0x3FFEEB3F, 0xD630A5D6, 0x257ABE25, + 0xA7AC16A7, 0x0F090C0F, 0x35F0E335, 0x23A76123, 0xF090C0F0, 0xAFE98CAF, + 0x809D3A80, 0x925CF592, 0x810C7381, 0x27312C27, 0x76D02576, 0xE7560BE7, + 0x7B92BB7B, 0xE9CE4EE9, 0xF10189F1, 0x9F1E6B9F, 0xA93453A9, 0xC4F16AC4, + 0x99C3B499, 0x975BF197, 0x8347E183, 0x6B18E66B, 0xC822BDC8, 0x0E98450E, + 0x6E1FE26E, 0xC9B3F4C9, 0x2F74B62F, 0xCBF866CB, 0xFF99CCFF, 0xEA1495EA, + 0xED5803ED, 0xF7DC56F7, 0xE18BD4E1, 0x1B151C1B, 0xADA21EAD, 0x0CD3D70C, + 0x2BE2FB2B, 0x1DC8C31D, 0x195E8E19, 0xC22CB5C2, 0x8949E989, 0x12C1CF12, + 0x7E95BF7E, 0x207DBA20, 0x6411EA64, 0x840B7784, 0x6DC5396D, 0x6A89AF6A, + 0xD17C33D1, 0xA171C9A1, 0xCEFF62CE, 0x37BB7137, 0xFB0F81FB, 0x3DB5793D, + 0x51E10951, 0xDC3EADDC, 0x2D3F242D, 0xA476CDA4, 0x9D55F99D, 0xEE82D8EE, + 0x8640E586, 0xAE78C5AE, 0xCD25B9CD, 0x04964D04, 0x55774455, 0x0A0E080A, + 0x13508613, 0x30F7E730, 0xD337A1D3, 0x40FA1D40, 0x3461AA34, 0x8C4EED8C, + 0xB3B006B3, 0x6C54706C, 0x2A73B22A, 0x523BD252, 0x0B9F410B, 0x8B027B8B, + 0x88D8A088, 0x4FF3114F, 0x67CB3167, 0x4627C246, 0xC06727C0, 0xB4FC90B4, + 0x28382028, 0x7F04F67F, 0x78486078, 0x2EE5FF2E, 0x074C9607, 0x4B655C4B, + 0xC72BB1C7, 0x6F8EAB6F, 0x0D429E0D, 0xBBF59CBB, 0xF2DB52F2, 0xF34A1BF3, + 0xA63D5FA6, 0x59A49359, 0xBCB90ABC, 0x3AF9EF3A, 0xEF1391EF, 0xFE0885FE, + 0x01914901, 0x6116EE61, 0x7CDE2D7C, 0xB2214FB2, 0x42B18F42, 0xDB723BDB, + 0xB82F47B8, 0x48BF8748, 0x2CAE6D2C, 0xE3C046E3, 0x573CD657, 0x859A3E85, + 0x29A96929, 0x7D4F647D, 0x94812A94, 0x492ECE49, 0x17C6CB17, 0xCA692FCA, + 0xC3BDFCC3, 0x5CA3975C, 0x5EE8055E, 0xD0ED7AD0, 0x87D1AC87, 0x8E057F8E, + 0xBA64D5BA, 0xA8A51AA8, 0xB7264BB7, 0xB9BE0EB9, 0x6087A760, 0xF8D55AF8, + 0x22362822, 0x111B1411, 0xDE753FDE, 0x79D92979, 0xAAEE88AA, 0x332D3C33, + 0x5F794C5F, 0xB6B702B6, 0x96CAB896, 0x5835DA58, 0x9CC4B09C, 0xFC4317FC, + 0x1A84551A, 0xF64D1FF6, 0x1C598A1C, 0x38B27D38, 0xAC3357AC, 0x18CFC718, + 0xF4068DF4, 0x69537469, 0x749BB774, 0xF597C4F5, 0x56AD9F56, 0xDAE372DA, + 0xD5EA7ED5, 0x4AF4154A, 0x9E8F229E, 0xA2AB12A2, 0x4E62584E, 0xE85F07E8, + 0xE51D99E5, 0x39233439, 0xC1F66EC1, 0x446C5044, 0x5D32DE5D, 0x72466872, + 0x26A06526, 0x93CDBC93, 0x03DADB03, 0xC6BAF8C6, 0xFA9EC8FA, 0x82D6A882, + 0xCF6E2BCF, 0x50704050, 0xEB85DCEB, 0x750AFE75, 0x8A93328A, 0x8DDFA48D, + 0x4C29CA4C, 0x141C1014, 0x73D72173, 0xCCB4F0CC, 0x09D4D309, 0x108A5D10, + 0xE2510FE2, 0x00000000, 0x9A196F9A, 0xE01A9DE0, 0x8F94368F, 0xE6C742E6, + 0xECC94AEC, 0xFDD25EFD, 0xAB7FC1AB, 0xD8A8E0D8} +}; + +/* The exp_to_poly and poly_to_exp tables are used to perform efficient + * operations in GF(2^8) represented as GF(2)[x]/w(x) where + * w(x)=x^8+x^6+x^3+x^2+1. We care about doing that because it's part of the + * definition of the RS matrix in the key schedule. Elements of that field + * are polynomials of degree not greater than 7 and all coefficients 0 or 1, + * which can be represented naturally by bytes (just substitute x=2). In that + * form, GF(2^8) addition is the same as bitwise XOR, but GF(2^8) + * multiplication is inefficient without hardware support. To multiply + * faster, I make use of the fact x is a generator for the nonzero elements, + * so that every element p of GF(2)[x]/w(x) is either 0 or equal to (x)^n for + * some n in 0..254. Note that that caret is exponentiation in GF(2^8), + * *not* polynomial notation. So if I want to compute pq where p and q are + * in GF(2^8), I can just say: + * 1. if p=0 or q=0 then pq=0 + * 2. otherwise, find m and n such that p=x^m and q=x^n + * 3. pq=(x^m)(x^n)=x^(m+n), so add m and n and find pq + * The translations in steps 2 and 3 are looked up in the tables + * poly_to_exp (for step 2) and exp_to_poly (for step 3). To see this + * in action, look at the CALC_S macro. As additional wrinkles, note that + * one of my operands is always a constant, so the poly_to_exp lookup on it + * is done in advance; I included the original values in the comments so + * readers can have some chance of recognizing that this *is* the RS matrix + * from the Twofish paper. I've only included the table entries I actually + * need; I never do a lookup on a variable input of zero and the biggest + * exponents I'll ever see are 254 (variable) and 237 (constant), so they'll + * never sum to more than 491. I'm repeating part of the exp_to_poly table + * so that I don't have to do mod-255 reduction in the exponent arithmetic. + * Since I know my constant operands are never zero, I only have to worry + * about zero values in the variable operand, and I do it with a simple + * conditional branch. I know conditionals are expensive, but I couldn't + * see a non-horrible way of avoiding them, and I did manage to group the + * statements so that each if covers four group multiplications. */ + +static const u8 poly_to_exp[255] = { + 0x00, 0x01, 0x17, 0x02, 0x2E, 0x18, 0x53, 0x03, 0x6A, 0x2F, 0x93, 0x19, + 0x34, 0x54, 0x45, 0x04, 0x5C, 0x6B, 0xB6, 0x30, 0xA6, 0x94, 0x4B, 0x1A, + 0x8C, 0x35, 0x81, 0x55, 0xAA, 0x46, 0x0D, 0x05, 0x24, 0x5D, 0x87, 0x6C, + 0x9B, 0xB7, 0xC1, 0x31, 0x2B, 0xA7, 0xA3, 0x95, 0x98, 0x4C, 0xCA, 0x1B, + 0xE6, 0x8D, 0x73, 0x36, 0xCD, 0x82, 0x12, 0x56, 0x62, 0xAB, 0xF0, 0x47, + 0x4F, 0x0E, 0xBD, 0x06, 0xD4, 0x25, 0xD2, 0x5E, 0x27, 0x88, 0x66, 0x6D, + 0xD6, 0x9C, 0x79, 0xB8, 0x08, 0xC2, 0xDF, 0x32, 0x68, 0x2C, 0xFD, 0xA8, + 0x8A, 0xA4, 0x5A, 0x96, 0x29, 0x99, 0x22, 0x4D, 0x60, 0xCB, 0xE4, 0x1C, + 0x7B, 0xE7, 0x3B, 0x8E, 0x9E, 0x74, 0xF4, 0x37, 0xD8, 0xCE, 0xF9, 0x83, + 0x6F, 0x13, 0xB2, 0x57, 0xE1, 0x63, 0xDC, 0xAC, 0xC4, 0xF1, 0xAF, 0x48, + 0x0A, 0x50, 0x42, 0x0F, 0xBA, 0xBE, 0xC7, 0x07, 0xDE, 0xD5, 0x78, 0x26, + 0x65, 0xD3, 0xD1, 0x5F, 0xE3, 0x28, 0x21, 0x89, 0x59, 0x67, 0xFC, 0x6E, + 0xB1, 0xD7, 0xF8, 0x9D, 0xF3, 0x7A, 0x3A, 0xB9, 0xC6, 0x09, 0x41, 0xC3, + 0xAE, 0xE0, 0xDB, 0x33, 0x44, 0x69, 0x92, 0x2D, 0x52, 0xFE, 0x16, 0xA9, + 0x0C, 0x8B, 0x80, 0xA5, 0x4A, 0x5B, 0xB5, 0x97, 0xC9, 0x2A, 0xA2, 0x9A, + 0xC0, 0x23, 0x86, 0x4E, 0xBC, 0x61, 0xEF, 0xCC, 0x11, 0xE5, 0x72, 0x1D, + 0x3D, 0x7C, 0xEB, 0xE8, 0xE9, 0x3C, 0xEA, 0x8F, 0x7D, 0x9F, 0xEC, 0x75, + 0x1E, 0xF5, 0x3E, 0x38, 0xF6, 0xD9, 0x3F, 0xCF, 0x76, 0xFA, 0x1F, 0x84, + 0xA0, 0x70, 0xED, 0x14, 0x90, 0xB3, 0x7E, 0x58, 0xFB, 0xE2, 0x20, 0x64, + 0xD0, 0xDD, 0x77, 0xAD, 0xDA, 0xC5, 0x40, 0xF2, 0x39, 0xB0, 0xF7, 0x49, + 0xB4, 0x0B, 0x7F, 0x51, 0x15, 0x43, 0x91, 0x10, 0x71, 0xBB, 0xEE, 0xBF, + 0x85, 0xC8, 0xA1 +}; + +static const u8 exp_to_poly[492] = { + 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x4D, 0x9A, 0x79, 0xF2, + 0xA9, 0x1F, 0x3E, 0x7C, 0xF8, 0xBD, 0x37, 0x6E, 0xDC, 0xF5, 0xA7, 0x03, + 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xCD, 0xD7, 0xE3, 0x8B, 0x5B, 0xB6, + 0x21, 0x42, 0x84, 0x45, 0x8A, 0x59, 0xB2, 0x29, 0x52, 0xA4, 0x05, 0x0A, + 0x14, 0x28, 0x50, 0xA0, 0x0D, 0x1A, 0x34, 0x68, 0xD0, 0xED, 0x97, 0x63, + 0xC6, 0xC1, 0xCF, 0xD3, 0xEB, 0x9B, 0x7B, 0xF6, 0xA1, 0x0F, 0x1E, 0x3C, + 0x78, 0xF0, 0xAD, 0x17, 0x2E, 0x5C, 0xB8, 0x3D, 0x7A, 0xF4, 0xA5, 0x07, + 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x8D, 0x57, 0xAE, 0x11, 0x22, 0x44, 0x88, + 0x5D, 0xBA, 0x39, 0x72, 0xE4, 0x85, 0x47, 0x8E, 0x51, 0xA2, 0x09, 0x12, + 0x24, 0x48, 0x90, 0x6D, 0xDA, 0xF9, 0xBF, 0x33, 0x66, 0xCC, 0xD5, 0xE7, + 0x83, 0x4B, 0x96, 0x61, 0xC2, 0xC9, 0xDF, 0xF3, 0xAB, 0x1B, 0x36, 0x6C, + 0xD8, 0xFD, 0xB7, 0x23, 0x46, 0x8C, 0x55, 0xAA, 0x19, 0x32, 0x64, 0xC8, + 0xDD, 0xF7, 0xA3, 0x0B, 0x16, 0x2C, 0x58, 0xB0, 0x2D, 0x5A, 0xB4, 0x25, + 0x4A, 0x94, 0x65, 0xCA, 0xD9, 0xFF, 0xB3, 0x2B, 0x56, 0xAC, 0x15, 0x2A, + 0x54, 0xA8, 0x1D, 0x3A, 0x74, 0xE8, 0x9D, 0x77, 0xEE, 0x91, 0x6F, 0xDE, + 0xF1, 0xAF, 0x13, 0x26, 0x4C, 0x98, 0x7D, 0xFA, 0xB9, 0x3F, 0x7E, 0xFC, + 0xB5, 0x27, 0x4E, 0x9C, 0x75, 0xEA, 0x99, 0x7F, 0xFE, 0xB1, 0x2F, 0x5E, + 0xBC, 0x35, 0x6A, 0xD4, 0xE5, 0x87, 0x43, 0x86, 0x41, 0x82, 0x49, 0x92, + 0x69, 0xD2, 0xE9, 0x9F, 0x73, 0xE6, 0x81, 0x4F, 0x9E, 0x71, 0xE2, 0x89, + 0x5F, 0xBE, 0x31, 0x62, 0xC4, 0xC5, 0xC7, 0xC3, 0xCB, 0xDB, 0xFB, 0xBB, + 0x3B, 0x76, 0xEC, 0x95, 0x67, 0xCE, 0xD1, 0xEF, 0x93, 0x6B, 0xD6, 0xE1, + 0x8F, 0x53, 0xA6, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x4D, + 0x9A, 0x79, 0xF2, 0xA9, 0x1F, 0x3E, 0x7C, 0xF8, 0xBD, 0x37, 0x6E, 0xDC, + 0xF5, 0xA7, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xCD, 0xD7, 0xE3, + 0x8B, 0x5B, 0xB6, 0x21, 0x42, 0x84, 0x45, 0x8A, 0x59, 0xB2, 0x29, 0x52, + 0xA4, 0x05, 0x0A, 0x14, 0x28, 0x50, 0xA0, 0x0D, 0x1A, 0x34, 0x68, 0xD0, + 0xED, 0x97, 0x63, 0xC6, 0xC1, 0xCF, 0xD3, 0xEB, 0x9B, 0x7B, 0xF6, 0xA1, + 0x0F, 0x1E, 0x3C, 0x78, 0xF0, 0xAD, 0x17, 0x2E, 0x5C, 0xB8, 0x3D, 0x7A, + 0xF4, 0xA5, 0x07, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x8D, 0x57, 0xAE, 0x11, + 0x22, 0x44, 0x88, 0x5D, 0xBA, 0x39, 0x72, 0xE4, 0x85, 0x47, 0x8E, 0x51, + 0xA2, 0x09, 0x12, 0x24, 0x48, 0x90, 0x6D, 0xDA, 0xF9, 0xBF, 0x33, 0x66, + 0xCC, 0xD5, 0xE7, 0x83, 0x4B, 0x96, 0x61, 0xC2, 0xC9, 0xDF, 0xF3, 0xAB, + 0x1B, 0x36, 0x6C, 0xD8, 0xFD, 0xB7, 0x23, 0x46, 0x8C, 0x55, 0xAA, 0x19, + 0x32, 0x64, 0xC8, 0xDD, 0xF7, 0xA3, 0x0B, 0x16, 0x2C, 0x58, 0xB0, 0x2D, + 0x5A, 0xB4, 0x25, 0x4A, 0x94, 0x65, 0xCA, 0xD9, 0xFF, 0xB3, 0x2B, 0x56, + 0xAC, 0x15, 0x2A, 0x54, 0xA8, 0x1D, 0x3A, 0x74, 0xE8, 0x9D, 0x77, 0xEE, + 0x91, 0x6F, 0xDE, 0xF1, 0xAF, 0x13, 0x26, 0x4C, 0x98, 0x7D, 0xFA, 0xB9, + 0x3F, 0x7E, 0xFC, 0xB5, 0x27, 0x4E, 0x9C, 0x75, 0xEA, 0x99, 0x7F, 0xFE, + 0xB1, 0x2F, 0x5E, 0xBC, 0x35, 0x6A, 0xD4, 0xE5, 0x87, 0x43, 0x86, 0x41, + 0x82, 0x49, 0x92, 0x69, 0xD2, 0xE9, 0x9F, 0x73, 0xE6, 0x81, 0x4F, 0x9E, + 0x71, 0xE2, 0x89, 0x5F, 0xBE, 0x31, 0x62, 0xC4, 0xC5, 0xC7, 0xC3, 0xCB +}; + + +/* The table constants are indices of + * S-box entries, preprocessed through q0 and q1. */ +static u8 calc_sb_tbl[512] = { + 0xA9, 0x75, 0x67, 0xF3, 0xB3, 0xC6, 0xE8, 0xF4, + 0x04, 0xDB, 0xFD, 0x7B, 0xA3, 0xFB, 0x76, 0xC8, + 0x9A, 0x4A, 0x92, 0xD3, 0x80, 0xE6, 0x78, 0x6B, + 0xE4, 0x45, 0xDD, 0x7D, 0xD1, 0xE8, 0x38, 0x4B, + 0x0D, 0xD6, 0xC6, 0x32, 0x35, 0xD8, 0x98, 0xFD, + 0x18, 0x37, 0xF7, 0x71, 0xEC, 0xF1, 0x6C, 0xE1, + 0x43, 0x30, 0x75, 0x0F, 0x37, 0xF8, 0x26, 0x1B, + 0xFA, 0x87, 0x13, 0xFA, 0x94, 0x06, 0x48, 0x3F, + 0xF2, 0x5E, 0xD0, 0xBA, 0x8B, 0xAE, 0x30, 0x5B, + 0x84, 0x8A, 0x54, 0x00, 0xDF, 0xBC, 0x23, 0x9D, + 0x19, 0x6D, 0x5B, 0xC1, 0x3D, 0xB1, 0x59, 0x0E, + 0xF3, 0x80, 0xAE, 0x5D, 0xA2, 0xD2, 0x82, 0xD5, + 0x63, 0xA0, 0x01, 0x84, 0x83, 0x07, 0x2E, 0x14, + 0xD9, 0xB5, 0x51, 0x90, 0x9B, 0x2C, 0x7C, 0xA3, + 0xA6, 0xB2, 0xEB, 0x73, 0xA5, 0x4C, 0xBE, 0x54, + 0x16, 0x92, 0x0C, 0x74, 0xE3, 0x36, 0x61, 0x51, + 0xC0, 0x38, 0x8C, 0xB0, 0x3A, 0xBD, 0xF5, 0x5A, + 0x73, 0xFC, 0x2C, 0x60, 0x25, 0x62, 0x0B, 0x96, + 0xBB, 0x6C, 0x4E, 0x42, 0x89, 0xF7, 0x6B, 0x10, + 0x53, 0x7C, 0x6A, 0x28, 0xB4, 0x27, 0xF1, 0x8C, + 0xE1, 0x13, 0xE6, 0x95, 0xBD, 0x9C, 0x45, 0xC7, + 0xE2, 0x24, 0xF4, 0x46, 0xB6, 0x3B, 0x66, 0x70, + 0xCC, 0xCA, 0x95, 0xE3, 0x03, 0x85, 0x56, 0xCB, + 0xD4, 0x11, 0x1C, 0xD0, 0x1E, 0x93, 0xD7, 0xB8, + 0xFB, 0xA6, 0xC3, 0x83, 0x8E, 0x20, 0xB5, 0xFF, + 0xE9, 0x9F, 0xCF, 0x77, 0xBF, 0xC3, 0xBA, 0xCC, + 0xEA, 0x03, 0x77, 0x6F, 0x39, 0x08, 0xAF, 0xBF, + 0x33, 0x40, 0xC9, 0xE7, 0x62, 0x2B, 0x71, 0xE2, + 0x81, 0x79, 0x79, 0x0C, 0x09, 0xAA, 0xAD, 0x82, + 0x24, 0x41, 0xCD, 0x3A, 0xF9, 0xEA, 0xD8, 0xB9, + 0xE5, 0xE4, 0xC5, 0x9A, 0xB9, 0xA4, 0x4D, 0x97, + 0x44, 0x7E, 0x08, 0xDA, 0x86, 0x7A, 0xE7, 0x17, + 0xA1, 0x66, 0x1D, 0x94, 0xAA, 0xA1, 0xED, 0x1D, + 0x06, 0x3D, 0x70, 0xF0, 0xB2, 0xDE, 0xD2, 0xB3, + 0x41, 0x0B, 0x7B, 0x72, 0xA0, 0xA7, 0x11, 0x1C, + 0x31, 0xEF, 0xC2, 0xD1, 0x27, 0x53, 0x90, 0x3E, + 0x20, 0x8F, 0xF6, 0x33, 0x60, 0x26, 0xFF, 0x5F, + 0x96, 0xEC, 0x5C, 0x76, 0xB1, 0x2A, 0xAB, 0x49, + 0x9E, 0x81, 0x9C, 0x88, 0x52, 0xEE, 0x1B, 0x21, + 0x5F, 0xC4, 0x93, 0x1A, 0x0A, 0xEB, 0xEF, 0xD9, + 0x91, 0xC5, 0x85, 0x39, 0x49, 0x99, 0xEE, 0xCD, + 0x2D, 0xAD, 0x4F, 0x31, 0x8F, 0x8B, 0x3B, 0x01, + 0x47, 0x18, 0x87, 0x23, 0x6D, 0xDD, 0x46, 0x1F, + 0xD6, 0x4E, 0x3E, 0x2D, 0x69, 0xF9, 0x64, 0x48, + 0x2A, 0x4F, 0xCE, 0xF2, 0xCB, 0x65, 0x2F, 0x8E, + 0xFC, 0x78, 0x97, 0x5C, 0x05, 0x58, 0x7A, 0x19, + 0xAC, 0x8D, 0x7F, 0xE5, 0xD5, 0x98, 0x1A, 0x57, + 0x4B, 0x67, 0x0E, 0x7F, 0xA7, 0x05, 0x5A, 0x64, + 0x28, 0xAF, 0x14, 0x63, 0x3F, 0xB6, 0x29, 0xFE, + 0x88, 0xF5, 0x3C, 0xB7, 0x4C, 0x3C, 0x02, 0xA5, + 0xB8, 0xCE, 0xDA, 0xE9, 0xB0, 0x68, 0x17, 0x44, + 0x55, 0xE0, 0x1F, 0x4D, 0x8A, 0x43, 0x7D, 0x69, + 0x57, 0x29, 0xC7, 0x2E, 0x8D, 0xAC, 0x74, 0x15, + 0xB7, 0x59, 0xC4, 0xA8, 0x9F, 0x0A, 0x72, 0x9E, + 0x7E, 0x6E, 0x15, 0x47, 0x22, 0xDF, 0x12, 0x34, + 0x58, 0x35, 0x07, 0x6A, 0x99, 0xCF, 0x34, 0xDC, + 0x6E, 0x22, 0x50, 0xC9, 0xDE, 0xC0, 0x68, 0x9B, + 0x65, 0x89, 0xBC, 0xD4, 0xDB, 0xED, 0xF8, 0xAB, + 0xC8, 0x12, 0xA8, 0xA2, 0x2B, 0x0D, 0x40, 0x52, + 0xDC, 0xBB, 0xFE, 0x02, 0x32, 0x2F, 0xA4, 0xA9, + 0xCA, 0xD7, 0x10, 0x61, 0x21, 0x1E, 0xF0, 0xB4, + 0xD3, 0x50, 0x5D, 0x04, 0x0F, 0xF6, 0x00, 0xC2, + 0x6F, 0x16, 0x9D, 0x25, 0x36, 0x86, 0x42, 0x56, + 0x4A, 0x55, 0x5E, 0x09, 0xC1, 0xBE, 0xE0, 0x91 +}; + +#endif /* _2FISH_TABLES_H */ diff -urN lin.2.4.3/crypto/Config.in int.2.4.3/crypto/Config.in --- lin.2.4.3/crypto/Config.in Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/Config.in Mon Apr 2 18:37:26 2001 @@ -0,0 +1,30 @@ +# +# Crypto Library Configuration +# +mainmenu_option next_comment +comment 'Crypto options' +tristate 'Crypto support' CONFIG_CRYPTO +dep_tristate 'Crypto ciphers' CONFIG_CIPHERS $CONFIG_CRYPTO +if [ "$CONFIG_CIPHERS" != "n" ]; then + dep_tristate 'AES cipher (EXPERIMENTAL)' CONFIG_CIPHER_AES $CONFIG_CIPHERS + dep_bool 'AES available under the Rijndael name' CONFIG_CIPHER_RIJNDAEL $CONFIG_CIPHER_AES + comment 'AES Finalist Ciphers (128 bit blocksize)' + dep_tristate 'Twofish cipher (EXPERIMENTAL)' CONFIG_CIPHER_TWOFISH $CONFIG_CIPHERS + dep_tristate 'MARS cipher (EXPERIMENTAL)' CONFIG_CIPHER_MARS $CONFIG_CIPHERS + dep_tristate 'RC6 cipher (EXPERIMENTAL)' CONFIG_CIPHER_RC6 $CONFIG_CIPHERS + dep_tristate 'Serpent cipher (EXPERIMENTAL)' CONFIG_CIPHER_SERPENT $CONFIG_CIPHERS + comment 'Other Ciphers submitted as AES Candidates:' + dep_tristate 'DFC cipher (EXPERIMENTAL)' CONFIG_CIPHER_DFC $CONFIG_CIPHERS + comment 'Other ciphers (64 bit blocksize)' + dep_tristate 'Blowfish cipher (EXPERIMENTAL)' CONFIG_CIPHER_BLOWFISH $CONFIG_CIPHERS + dep_tristate 'IDEA cipher (EXPERIMENTAL)' CONFIG_CIPHER_IDEA $CONFIG_CIPHERS + dep_tristate 'RC5 cipher (EXPERIMENTAL)' CONFIG_CIPHER_RC5 $CONFIG_CIPHERS + dep_tristate 'DES EDE3 cipher (3DES, EXPERIMENTAL)' CONFIG_CIPHER_DES_EDE3 $CONFIG_CIPHERS + dep_tristate 'DES cipher (DEPRECATED)' CONFIG_CIPHER_DES $CONFIG_CIPHERS +fi +dep_tristate 'Digest algorithms' CONFIG_DIGEST $CONFIG_CRYPTO +if [ "$CONFIG_DIGEST" != "n" ]; then + dep_tristate 'MD5 digest (EXPERIMENTAL)' CONFIG_DIGEST_MD5 $CONFIG_DIGEST + dep_tristate 'SHA1 digest (EXPERIMENTAL)' CONFIG_DIGEST_SHA1 $CONFIG_DIGEST +fi +endmenu diff -urN lin.2.4.3/crypto/LICENSE.crypto int.2.4.3/crypto/LICENSE.crypto --- lin.2.4.3/crypto/LICENSE.crypto Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/LICENSE.crypto Mon Apr 2 18:37:26 2001 @@ -0,0 +1,28 @@ + +For those files not covered by other licenses, the following license +applies + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, dis- +tribute, sublicense, and/or sell copies of the Software, and to permit +persons to whom the Software is furnished to do so, subject to the fol- +lowing conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- +ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT +SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABIL- +ITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +Except as contained in this notice, the name of the authors shall +not be used in advertising or otherwise to promote the sale, use or +other dealings in this Software without prior written authorization from +the authors. + diff -urN lin.2.4.3/crypto/Makefile int.2.4.3/crypto/Makefile --- lin.2.4.3/crypto/Makefile Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/Makefile Mon Apr 2 18:37:26 2001 @@ -0,0 +1,29 @@ +# +# Makefile for the Linux kernel crypto library. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (not a .c file). +# +# Note 2! The CFLAGS definitions are now in the main makefile. + +O_TARGET := crypto.o + +export-objs = cryptoapi.o + +obj-$(CONFIG_CRYPTO) += cryptoapi.o +obj-$(CONFIG_CIPHER_SERPENT) += cipher-serpent.o +obj-$(CONFIG_CIPHER_MARS) += cipher-mars.o +obj-$(CONFIG_CIPHER_RC5) += cipher-rc5.o +obj-$(CONFIG_CIPHER_RC6) += cipher-rc6.o +obj-$(CONFIG_CIPHER_DFC) += cipher-dfc.o +obj-$(CONFIG_CIPHER_AES) += cipher-aes.o +obj-$(CONFIG_CIPHER_BLOWFISH) += cipher-blowfish.o +obj-$(CONFIG_CIPHER_TWOFISH) += cipher-twofish.o +obj-$(CONFIG_CIPHER_IDEA) += cipher-idea.o +obj-$(CONFIG_CIPHER_DES) += cipher-des.o +obj-$(CONFIG_CIPHER_DES_EDE3) += cipher-des-ede3.o +obj-$(CONFIG_DIGEST_MD5) += digest-md5.o +obj-$(CONFIG_DIGEST_SHA1) += digest-sha1.o + +include $(TOPDIR)/Rules.make diff -urN lin.2.4.3/crypto/Makefile.kernel int.2.4.3/crypto/Makefile.kernel --- lin.2.4.3/crypto/Makefile.kernel Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/Makefile.kernel Mon Apr 2 18:37:26 2001 @@ -0,0 +1,32 @@ +# +# Makefile for the linux kernel. +# +# Note! Dependencies are done automagically by 'make dep', which also +# removes any old dependencies. DON'T put your own dependencies here +# unless it's something special (ie not a .c file). +# +# Note 2! The CFLAGS definitions are now in the main makefile... + +O_TARGET := kernel.o + +export-objs = signal.o sys.o kmod.o context.o ksyms.o pm.o + +obj-y = sched.o dma.o fork.o exec_domain.o panic.o printk.o \ + module.o exit.o itimer.o info.o time.o softirq.o resource.o \ + sysctl.o acct.o capability.o ptrace.o timer.o user.o \ + signal.o sys.o kmod.o context.o + +obj-$(CONFIG_UID16) += uid16.o +obj-$(CONFIG_MODULES) += ksyms.o +obj-$(CONFIG_PM) += pm.o + +ifneq ($(CONFIG_IA64),y) +# According to Alan Modra , the -fno-omit-frame-pointer is +# needed for x86 only. Why this used to be enabled for all architectures is beyond +# me. I suspect most platforms don't need this, but until we know that for sure +# I turn this off for IA-64 only. Andreas Schwab says it's also needed on m68k +# to get a correct value for the wait-channel (WCHAN in ps). --davidm +CFLAGS_sched.o := $(PROFILING) -fno-omit-frame-pointer +endif + +include $(TOPDIR)/Rules.make diff -urN lin.2.4.3/crypto/attic/cast0.c int.2.4.3/crypto/attic/cast0.c --- lin.2.4.3/crypto/attic/cast0.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/attic/cast0.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,436 @@ +/* NOTE: This implementation has been changed from the original + source. See ChangeLog for more information. + Maintained by Alexander Kjeldaas + */ + +/* This is an independent implementation of the CAST-256 encryption */ +/* algorithm designed by Carlisle Adams of Entrust and offered as a */ +/* candidate algorithm for the US NIST Advanced Encryption Standard */ +/* (AES) effort. */ +/* */ +/* Copyright in this implementation is held by Dr B R Gladman but */ +/* I hereby give permission for its free direct or derivative use */ +/* subject to acknowledgment of its origin and compliance with any */ +/* conditions that the originators of CAST-256 place on its use. */ +/* */ +/* Dr Brian Gladman (gladman@seven77.demon.co.uk) 19th October 1998 */ +/* */ +/* Timing data: + +Algorithm: cast256 (cast0.c) +128 bit key: +Key Setup: 4279 cycles +Encrypt: 659 cycles = 38.9 mbits/sec +Decrypt: 667 cycles = 38.4 mbits/sec +Mean: 663 cycles = 38.6 mbits/sec +192 bit key: +Key Setup: 4337 cycles +Encrypt: 663 cycles = 38.6 mbits/sec +Decrypt: 672 cycles = 38.1 mbits/sec +Mean: 668 cycles = 38.4 mbits/sec +256 bit key: +Key Setup: 4304 cycles +Encrypt: 655 cycles = 39.1 mbits/sec +Decrypt: 663 cycles = 38.6 mbits/sec +Mean: 659 cycles = 38.8 mbits/sec + +*/ + +#include +#include +#include +#include +#include + +#if 0 +#define rotl rotl32 +#define rotr rotr32 +#else +#define rotl generic_rotl32 +#define rotr generic_rotr32 +#endif + +u4byte s_box[4][256] = +{ { + 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9C004dd3, + 0x6003e540, 0xcf9fc949, 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, + 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e, 0x28683b6f, 0xc07fd059, + 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d, + 0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, + 0x22568e3a, 0xa2d341d0, 0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, + 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7, 0xb82cbaef, 0xd751d159, + 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935, + 0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, + 0xb48ee411, 0x4bff345d, 0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, + 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0C50, 0x882240f2, 0x0c6e4f38, + 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe, + 0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, + 0xe63d37e0, 0x2a54f6b3, 0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, + 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167, 0x38901091, 0xc6b505eb, + 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291, + 0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, + 0xa0bebc3c, 0x54623779, 0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, + 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6C2, 0x81383f05, 0x6963c5c8, + 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511, + 0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, + 0xaa573b04, 0x4a805d8d, 0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, + 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5, 0x6b54bfab, 0x2b0b1426, + 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324, + 0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, + 0xe31231b2, 0x2ad5ad6c, 0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, + 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc, 0x7b5a41f0, 0xd37cfbad, + 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d, + 0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, + 0x5ad328d8, 0xb347cc96, 0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, + 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a, 0x3f04442f, 0x6188b153, + 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d, + 0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, + 0xdd24cb9e, 0x7e1c54bd, 0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, + 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6, 0x580304f0, 0xca042cf1, + 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9, + 0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, + 0xd5ea50f1, 0x85a92872, 0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, + 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814C, 0x474d6ad7, 0x7c0c5e5c, + 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e, + 0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, + 0xb141ab08, 0x7cca89b9, 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, + 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf + }, + { + 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, + 0x55889c94, 0x72fc0651, 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, + 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3, 0xa0b52f7b, 0x59e83605, + 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb, + 0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, + 0x25a1ff41, 0xe180f806, 0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, + 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b, 0xe113c85b, 0xacc40083, + 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359, + 0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, + 0x361e3084, 0xe4eb573b, 0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, + 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c, 0x10843094, 0x2537a95e, + 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34, + 0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, + 0x721d9bfd, 0xa58684bb, 0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, + 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd, 0xc5d655dd, 0xeb667064, + 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860, + 0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, + 0x83ca6b94, 0x2d6ed23b, 0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, + 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304, 0x81ed6f61, 0x20e74364, + 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b, + 0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, + 0xa4b09f6b, 0x1ca815cf, 0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, + 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c, 0xee41e729, 0x6e1d2d7c, + 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13, + 0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, + 0x7cbad9a2, 0x2180036f, 0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, + 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6, 0xcdf0b680, 0x17844d3b, + 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6, + 0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, + 0xef8579cc, 0xd152de58, 0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, + 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906, 0xb8da230c, 0x80823028, + 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d, + 0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, + 0x273be979, 0xb0ffeaa6, 0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, + 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4, 0xdc8637a0, 0x16a7d3b1, + 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6, + 0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, + 0x145892f5, 0x91584f7f, 0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, + 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249, 0xb284600c, 0xd835731d, + 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa, + 0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, + 0x5c038323, 0x3e5d3bb9, 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, + 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1 + }, + { + 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, + 0x8c1fc644, 0xaececa90, 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, + 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5, 0x11107d9f, 0x07647db9, + 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e, + 0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, + 0x9255c5ed, 0x1257a240, 0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, + 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5, 0xa8c01db7, 0x579fc264, + 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b, + 0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, + 0xc5884a28, 0xccc36f71, 0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, + 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04, 0xa747d2d0, 0x1651192e, + 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82, + 0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, + 0x796fb449, 0x8252dc15, 0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, + 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2, 0x23efe941, 0xa903f12e, + 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176, + 0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, + 0x96bbb682, 0x93b4b148, 0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, + 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc, 0x8b907cee, 0xb51fd240, + 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341, + 0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, + 0x127dadaa, 0x438a074e, 0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, + 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51, 0x68cc7bfb, 0xd90f2788, + 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f, + 0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, + 0x27627545, 0x825cf47a, 0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, + 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b, 0x285ba1c8, 0x3c62f44f, + 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b, + 0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, + 0x12deca4d, 0x2c3f8cc5, 0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, + 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45, 0x3a609437, 0xec00c9a9, + 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536, + 0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, + 0xa2e53f55, 0xb9e6d4bc, 0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, + 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0, 0x947b0001, 0x570075d2, + 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69, + 0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, + 0xf1ac2571, 0xcc8239c2, 0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, + 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49, 0x5727c148, 0x2be98a1d, + 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d, + 0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, + 0x52bce688, 0x1b03588a, 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, + 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783 + }, + { + 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, + 0x85510443, 0xfa020ed1, 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, + 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf, 0x28147f5f, 0x4fa2b8cd, + 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15, + 0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, + 0x081b08ca, 0x05170121, 0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, + 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25, 0xce84ffdf, 0xf5718801, + 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5, + 0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, + 0x72500e03, 0xf80eb2bb, 0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, + 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5, 0x4d351805, 0x7f3d5ce3, + 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d, + 0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, + 0x18f8931e, 0x281658e6, 0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, + 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23, 0x69dead38, 0x1574ca16, + 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003, + 0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, + 0x0ce5c2ec, 0x4db4bba6, 0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, + 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119, 0x6e85cb75, 0xbe07c002, + 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24, + 0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, + 0x041afa32, 0x1d16625a, 0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, + 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79, 0x026a4ceb, 0x52437eff, + 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df, + 0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, + 0x213d42f6, 0x2c1c7c26, 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, + 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab, 0x63315c21, 0x5e0a72ec, + 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7, + 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, + 0xcfcbd12f, 0xc1de8417, 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, + 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2, 0x6f7de532, 0x58fd7eb6, + 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2, + 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, + 0xaf9eb3db, 0x29c9ed2a, 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, + 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, 0x77079103, 0xdea03af6, + 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef, + 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, + 0xf3e0eb5b, 0xd6cc9876, 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, + 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, 0xb5676e69, 0x9bd3ddda, + 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04, + 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, + 0xb657c34d, 0x4edfd282, 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, + 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2 + } +}; + +#define f1(y,x,kr,km) \ + t = rotl(km + x, kr); \ + u = s_box[0][byte(t,3)]; \ + u ^= s_box[1][byte(t,2)]; \ + u -= s_box[2][byte(t,1)]; \ + u += s_box[3][byte(t,0)]; \ + y ^= u + +#define f2(y,x,kr,km) \ + t = rotl(km ^ x, kr); \ + u = s_box[0][byte(t,3)]; \ + u -= s_box[1][byte(t,2)]; \ + u += s_box[2][byte(t,1)]; \ + u ^= s_box[3][byte(t,0)]; \ + y ^= u + +#define f3(y,x,kr,km) \ + t = rotl(km - x, kr); \ + u = s_box[0][byte(t,3)]; \ + u += s_box[1][byte(t,2)]; \ + u ^= s_box[2][byte(t,1)]; \ + u -= s_box[3][byte(t,0)]; \ + y ^= u + +#define f_rnd(x,n) \ + f1(x[2],x[3],l_key[n], l_key[n + 4]); \ + f2(x[1],x[2],l_key[n + 1],l_key[n + 5]); \ + f3(x[0],x[1],l_key[n + 2],l_key[n + 6]); \ + f1(x[3],x[0],l_key[n + 3],l_key[n + 7]) + +#define i_rnd(x, n) \ + f1(x[3],x[0],l_key[n + 3],l_key[n + 7]); \ + f3(x[0],x[1],l_key[n + 2],l_key[n + 6]); \ + f2(x[1],x[2],l_key[n + 1],l_key[n + 5]); \ + f1(x[2],x[3],l_key[n], l_key[n + 4]) + +#define k_rnd(k,tr,tm) \ + f1(k[6],k[7],tr[0],tm[0]); \ + f2(k[5],k[6],tr[1],tm[1]); \ + f3(k[4],k[5],tr[2],tm[2]); \ + f1(k[3],k[4],tr[3],tm[3]); \ + f2(k[2],k[3],tr[4],tm[4]); \ + f3(k[1],k[2],tr[5],tm[5]); \ + f1(k[0],k[1],tr[6],tm[6]); \ + f2(k[7],k[0],tr[7],tm[7]) + +/* initialise the key schedule from the user supplied key */ + +int cast256_set_key(struct cipher_context *cx, unsigned char *key, int key_len) +{ u4byte *key_blk = (u4byte *)key; + /* l_key - storage for the key schedule */ + u4byte *l_key = cx->keyinfo; + u4byte i, j, t, u, cm, cr, lk[8], tm[8], tr[8]; + key_len *= 8; + + for(i = 0; i < key_len / 32; ++i) + + lk[i] = bswap(in_key[i]); + + for(; i < 8; ++i) + + lk[i] = 0; + + cm = 0x5a827999; cr = 19; + + for(i = 0; i < 96; i += 8) + { + for(j = 0; j < 8; ++j) + { + tm[j] = cm; cm += 0x6ed9eba1; + tr[j] = cr; cr += 17; + } + + k_rnd(lk, tr, tm); + + for(j = 0; j < 8; ++j) + { + tm[j] = cm; cm += 0x6ed9eba1; + tr[j] = cr; cr += 17; + } + + k_rnd(lk, tr, tm); + + l_key[i + 0] = lk[0]; l_key[i + 1] = lk[2]; + l_key[i + 2] = lk[4]; l_key[i + 3] = lk[6]; + l_key[i + 4] = lk[7]; l_key[i + 5] = lk[5]; + l_key[i + 6] = lk[3]; l_key[i + 7] = lk[1]; + } + + return 0; +}; + +/* encrypt a block of text */ + +int cast256_encrypt(struct cipher_context *cx, const u8 *in, u8 *out, int size) +{ u4byte *l_key = cx->keyinfo; + u4byte *in_blk = (u4byte *)in; + u4byte *out_blk = (u4byte *)out; + u4byte t, u, blk[4]; + + blk[0] = bswap(in_blk[0]); blk[1] = bswap(in_blk[1]); + blk[2] = bswap(in_blk[2]); blk[3] = bswap(in_blk[3]); + + f_rnd(blk, 0); f_rnd(blk, 8); + f_rnd(blk, 16); f_rnd(blk, 24); + f_rnd(blk, 32); f_rnd(blk, 40); + i_rnd(blk, 48); i_rnd(blk, 56); + i_rnd(blk, 64); i_rnd(blk, 72); + i_rnd(blk, 80); i_rnd(blk, 88); + + out_blk[0] = bswap(blk[0]); out_blk[1] = bswap(blk[1]); + out_blk[2] = bswap(blk[2]); out_blk[3] = bswap(blk[3]); + return 0; +}; + +/* decrypt a block of text */ + +int cast256_decrypt(struct cipher_context *cx, const u8 *in, u8 *out, int size) +{ u4byte *l_key = cx->keyinfo; + u4byte *in_blk = (u4byte *)in; + u4byte *out_blk = (u4byte *)out; + u4byte t, u, blk[4]; + + blk[0] = bswap(in_blk[0]); blk[1] = bswap(in_blk[1]); + blk[2] = bswap(in_blk[2]); blk[3] = bswap(in_blk[3]); + + f_rnd(blk, 88); f_rnd(blk, 80); + f_rnd(blk, 72); f_rnd(blk, 64); + f_rnd(blk, 56); f_rnd(blk, 48); + i_rnd(blk, 40); i_rnd(blk, 32); + i_rnd(blk, 24); i_rnd(blk, 16); + i_rnd(blk, 8); i_rnd(blk, 0); + + out_blk[0] = bswap(blk[0]); out_blk[1] = bswap(blk[1]); + out_blk[2] = bswap(blk[2]); out_blk[3] = bswap(blk[3]); + return 0; +}; + +static void cast256_lock() +{ + MOD_INC_USE_COUNT; +} + +static void cast256_unlock() +{ + MOD_DEC_USE_COUNT; +} + +#define CIPHER_BITS_128 +#define CIPHER_NAME(x) cast256##x +#include "gen-cbc.h" +#include "gen-ecb.h" + +#define CAST256_KEY_SCHEDULE_SIZE (96*sizeof(u32)) + +static struct cipher_implementation cast256_ecb = { + {{NULL,NULL},CIPHER_CAST256 | CIPHER_MODE_ECB, "cast256-ecb"}, + blocksize: 8, + ivsize: 0, + key_schedule_size: CAST256_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(cast256_ecb), + INIT_CIPHER_OPS(cast256) +}; + +static struct cipher_implementation cast256_cbc = { + {{NULL,NULL},CIPHER_CAST256 | CIPHER_MODE_CBC, "cast256-cbc"}, + blocksize: 8, + ivsize: 8, + key_schedule_size: CAST256_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(cast256_cbc), + INIT_CIPHER_OPS(cast256) +}; + + +#ifdef MODULE +int __init init_module(void) +#else +int __init init_cast256(void) +#endif +{ + if (register_cipher(&cast256_ecb)) + printk(KERN_WARNING "Couldn't register cast256-ecb encryption\n"); + if (register_cipher(&cast256_cbc)) + printk(KERN_WARNING "Couldn't register cast256-cbc encryption\n"); + return 0; +} + +#ifdef MODULE +void cleanup_module(void) +{ + if (unregister_cipher(&cast256_ecb)) + printk(KERN_WARNING "Couldn't unregister cast256-ecb encryption\n"); + if (unregister_cipher(&cast256_cbc)) + printk(KERN_WARNING "Couldn't unregister cast256-cbc encryption\n"); +} +#endif + diff -urN lin.2.4.3/crypto/attic/crypton2.c int.2.4.3/crypto/attic/crypton2.c --- lin.2.4.3/crypto/attic/crypton2.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/attic/crypton2.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,364 @@ +/* NOTE: This implementation has been changed from the original + source. See ChangeLog for more information. + Maintained by Alexander Kjeldaas + */ + +/* This is an independent implementation of the CRYPTON algorithm */ +/* designed by Chae Hoon Lim of Future Systms Inc and submitted as */ +/* a candidate for the NIST AES activity. */ +/* */ +/* Copyright in this implementation is held by Dr B R Gladman but */ +/* I hereby give permission for its free direct or derivative use */ +/* subject to acknowledgment of its origin and compliance with any */ +/* conditions that the algorithm originators place on its use. */ +/* */ +/* Dr Brian Gladman (gladman@seven77.demon.co.uk) October 1998 */ +/* Timing data: + +Algorithm: crypton (crypton2.c) +128 bit key: +Key Setup: 1386 cycles +Encrypt: 472 cycles = 54.2 mbits/sec +Decrypt: 486 cycles = 52.7 mbits/sec +Mean: 479 cycles = 53.5 mbits/sec +192 bit key: +Key Setup: 1408 cycles +Encrypt: 476 cycles = 53.8 mbits/sec +Decrypt: 493 cycles = 52.0 mbits/sec +Mean: 484 cycles = 52.8 mbits/sec +256 bit key: +Key Setup: 1412 cycles +Encrypt: 468 cycles = 54.7 mbits/sec +Decrypt: 479 cycles = 53.4 mbits/sec +Mean: 474 cycles = 54.1 mbits/sec + +*/ + +#include +#include +#include +#include +#include + +#if 0 +#define rotl rotl32 +#define rotr rotr32 +#else +#define rotl generic_rotl32 +#define rotr generic_rotr32 +#endif + +#define gamma(x,p,q) \ + (x) = (((u4byte)s_box[p][byte((x),0)] ) | \ + ((u4byte)s_box[q][byte((x),1)] << 8) | \ + ((u4byte)s_box[p][byte((x),2)] << 16) | \ + ((u4byte)s_box[q][byte((x),3)] << 24)) + +#define gamma_tau(x,b,m,p,q) \ + (x) = (((u4byte)s_box[p][byte(b[0],m)] ) | \ + ((u4byte)s_box[q][byte(b[1],m)] << 8) | \ + ((u4byte)s_box[p][byte(b[2],m)] << 16) | \ + ((u4byte)s_box[q][byte(b[3],m)] << 24)) + +#define ma_0 0x3fcff3fc +#define ma_1 0xfc3fcff3 +#define ma_2 0xf3fc3fcf +#define ma_3 0xcff3fc3f + +#define mb_0 0xcffccffc +#define mb_1 0xf33ff33f +#define mb_2 0xfccffccf +#define mb_3 0x3ff33ff3 + +#define pi(b,n0,n1,n2,n3) \ + (((b)[0] & ma_##n0) ^ \ + ((b)[1] & ma_##n1) ^ \ + ((b)[2] & ma_##n2) ^ \ + ((b)[3] & ma_##n3)) + +#define phi_n(x,n0,n1,n2,n3) \ + ( (x) & mb_##n0) ^ \ + (rotl((x), 8) & mb_##n1) ^ \ + (rotl((x), 16) & mb_##n2) ^ \ + (rotl((x), 24) & mb_##n3) + +#define phi_00(x) phi_n(x,0,1,2,3) +#define phi_01(x) phi_n(x,3,0,1,2) +#define phi_02(x) phi_n(x,2,3,0,1) +#define phi_03(x) phi_n(x,1,2,3,0) + +#define phi_10(x) phi_n(x,3,0,1,2) +#define phi_11(x) phi_n(x,2,3,0,1) +#define phi_12(x) phi_n(x,1,2,3,0) +#define phi_13(x) phi_n(x,0,1,2,3) + +#define phi0(x,y) \ + (y)[0] = phi_00((x)[0]); \ + (y)[1] = phi_01((x)[1]); \ + (y)[2] = phi_02((x)[2]); \ + (y)[3] = phi_03((x)[3]) + +#define phi1(x,y) \ + (y)[0] = phi_10((x)[0]); \ + (y)[1] = phi_11((x)[1]); \ + (y)[2] = phi_12((x)[2]); \ + (y)[3] = phi_13((x)[3]) + +u1byte p_box[3][16] = +{ { 15, 9, 6, 8, 9, 9, 4, 12, 6, 2, 6, 10, 1, 3, 5, 15 }, + { 10, 15, 4, 7, 5, 2, 14, 6, 9, 3, 12, 8, 13, 1, 11, 0 }, + { 0, 4, 8, 4, 2, 15, 8, 13, 1, 1, 15, 7, 2, 11, 14, 15 } +}; + +u4byte tab_gen = 0; +u1byte s_box[2][256]; +u4byte s_tab[4][256]; + +u4byte l_key[104]; +u4byte *e_key = l_key + 52; +u4byte *d_key = l_key; + +void gen_tab(void) +{ u4byte i, xl, xr, yl, yr; + + for(i = 0; i < 256; ++i) + { + xl = (i & 0xf0) >> 4; xr = i & 15; + + yr = xr ^ p_box[1][xl ^ p_box[0][xr]]; + yl = xl ^ p_box[0][xr] ^ p_box[2][yr]; + + yr |= (yl << 4); s_box[0][i] = yr; s_box[1][yr] = i; + + xr = yr * 0x01010101; xl = i * 0x01010101; + + s_tab[0][ i] = xr & 0x3fcff3fc; + s_tab[1][yr] = xl & 0xfc3fcff3; + s_tab[2][ i] = xr & 0xf3fc3fcf; + s_tab[3][yr] = xl & 0xcff3fc3f; + } +}; + +/* initialise the key schedule from the user supplied key */ + +u4byte kp[4] = { 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f }; +u4byte kq[4] = { 0x9b05688c, 0x1f83d9ab, 0x5be0cd19, 0xcbbb9d5d }; + +#define h0_block(n,r0,r1) \ + e_key[4 * n + 8] = rotl(e_key[4 * n + 0], r0); \ + e_key[4 * n + 9] = rc ^ e_key[4 * n + 1]; \ + e_key[4 * n + 10] = rotl(e_key[4 * n + 2], r1); \ + e_key[4 * n + 11] = rc ^ e_key[4 * n + 3] + +#define h1_block(n,r0,r1) \ + e_key[4 * n + 8] = rc ^ e_key[4 * n + 0]; \ + e_key[4 * n + 9] = rotl(e_key[4 * n + 1], r0); \ + e_key[4 * n + 10] = rc ^ e_key[4 * n + 2]; \ + e_key[4 * n + 11] = rotl(e_key[4 * n + 3], r1) + +int crypton_set_key(struct cipher_context *cx, unsigned char *key, int key_len) +{ u4byte *key_blk = (u4byte *)key; + /* l_key - storage for the key schedule */ + u4byte *l_key = cx->keyinfo; + u4byte i, rc, t0, t1, tmp[4]; + key_len *= 8; + + if(!tab_gen) + { + gen_tab(); tab_gen = 1; + } + + e_key[2] = e_key[3] = e_key[6] = e_key[7] = 0; + + switch((key_len + 63) / 64) + { + case 4: e_key[3] = in_key[6]; e_key[7] = in_key[7]; + case 3: e_key[2] = in_key[4]; e_key[6] = in_key[5]; + case 2: e_key[0] = in_key[0]; e_key[4] = in_key[1]; + e_key[1] = in_key[2]; e_key[5] = in_key[3]; + } + + tmp[0] = pi(e_key, 0, 1, 2, 3) ^ kp[0]; + tmp[1] = pi(e_key, 1, 2, 3, 0) ^ kp[1]; + tmp[2] = pi(e_key, 2, 3, 0, 1) ^ kp[2]; + tmp[3] = pi(e_key, 3, 0, 1, 2) ^ kp[3]; + + gamma_tau(e_key[0], tmp, 0, 0, 1); + gamma_tau(e_key[1], tmp, 1, 1, 0); + gamma_tau(e_key[2], tmp, 2, 0, 1); + gamma_tau(e_key[3], tmp, 3, 1, 0); + + tmp[0] = pi(e_key + 4, 1, 2, 3, 0) ^ kq[0]; + tmp[1] = pi(e_key + 4, 2, 3, 0, 1) ^ kq[1]; + tmp[2] = pi(e_key + 4, 3, 0, 1, 2) ^ kq[2]; + tmp[3] = pi(e_key + 4, 0, 1, 2, 3) ^ kq[3]; + + gamma_tau(e_key[4], tmp, 0, 1, 0); + gamma_tau(e_key[5], tmp, 1, 0, 1); + gamma_tau(e_key[6], tmp, 2, 1, 0); + gamma_tau(e_key[7], tmp, 3, 0, 1); + + t0 = e_key[0] ^ e_key[1] ^ e_key[2] ^ e_key[3]; + t1 = e_key[4] ^ e_key[5] ^ e_key[6] ^ e_key[7]; + + e_key[0] ^= t1; e_key[1] ^= t1; + e_key[2] ^= t1; e_key[3] ^= t1; + e_key[4] ^= t0; e_key[5] ^= t0; + e_key[6] ^= t0; e_key[7] ^= t0; + + rc = 0x01010101; + h0_block( 0, 8, 16); h1_block(1, 16, 24); rc <<= 1; + h1_block( 2, 24, 8); h0_block(3, 8, 16); rc <<= 1; + h0_block( 4, 16, 24); h1_block(5, 24, 8); rc <<= 1; + h1_block( 6, 8, 16); h0_block(7, 16, 24); rc <<= 1; + h0_block( 8, 24, 8); h1_block(9, 8, 16); rc <<= 1; + h1_block(10, 16, 24); + + for(i = 0; i < 13; ++i) + { + if(i & 1) + { + phi0(e_key + 4 * i, d_key + 48 - 4 * i); + } + else + { + phi1(e_key + 4 * i, d_key + 48 - 4 * i); + } + } + + phi1(e_key + 48, e_key + 48); + phi1(d_key + 48, d_key + 48); + + return 0; +}; + +/* encrypt a block of text */ + +#define fr0(i,k) \ + b1[i] = s_tab[ (i) ][byte(b0[0],i)] ^ \ + s_tab[((i) + 1) & 3][byte(b0[1],i)] ^ \ + s_tab[((i) + 2) & 3][byte(b0[2],i)] ^ \ + s_tab[((i) + 3) & 3][byte(b0[3],i)] ^ (k) + +#define fr1(i,k) \ + b0[i] = s_tab[((i) + 1) & 3][byte(b1[0],i)] ^ \ + s_tab[((i) + 2) & 3][byte(b1[1],i)] ^ \ + s_tab[((i) + 3) & 3][byte(b1[2],i)] ^ \ + s_tab[(i) ][byte(b1[3],i)] ^ (k) + +#define f0_rnd(kp) \ + fr0(0,(kp)[0]); fr0(1,(kp)[1]); \ + fr0(2,(kp)[2]); fr0(3,(kp)[3]) + +#define f1_rnd(kp) \ + fr1(0,(kp)[0]); fr1(1,(kp)[1]); \ + fr1(2,(kp)[2]); fr1(3,(kp)[3]) + +int crypton_encrypt(struct cipher_context *cx, u4byte *in_blk, u4byte *out_blk) +{ u4byte *l_key = cx->keyinfo; + u4byte b0[4], b1[4]; + + b0[0] = in_blk[0] ^ e_key[0]; + b0[1] = in_blk[1] ^ e_key[1]; + b0[2] = in_blk[2] ^ e_key[2]; + b0[3] = in_blk[3] ^ e_key[3]; + + f0_rnd(e_key + 4); f1_rnd(e_key + 8); + f0_rnd(e_key + 12); f1_rnd(e_key + 16); + f0_rnd(e_key + 20); f1_rnd(e_key + 24); + f0_rnd(e_key + 28); f1_rnd(e_key + 32); + f0_rnd(e_key + 36); f1_rnd(e_key + 40); + f0_rnd(e_key + 44); + + gamma_tau(b0[0], b1, 0, 1, 0); + gamma_tau(b0[1], b1, 1, 0, 1); + gamma_tau(b0[2], b1, 2, 1, 0); + gamma_tau(b0[3], b1, 3, 0, 1); + + out_blk[0] = b0[0] ^ e_key[48]; + out_blk[1] = b0[1] ^ e_key[49]; + out_blk[2] = b0[2] ^ e_key[50]; + out_blk[3] = b0[3] ^ e_key[51]; + return 0; +}; + +/* decrypt a block of text */ + +int crypton_decrypt(struct cipher_context *cx, u32 *in_blk, u32 *out_blk) +{ u4byte *l_key = cx->keyinfo; + u4byte b0[4], b1[4]; + + b0[0] = in_blk[0] ^ d_key[0]; + b0[1] = in_blk[1] ^ d_key[1]; + b0[2] = in_blk[2] ^ d_key[2]; + b0[3] = in_blk[3] ^ d_key[3]; + + f0_rnd(d_key + 4); f1_rnd(d_key + 8); + f0_rnd(d_key + 12); f1_rnd(d_key + 16); + f0_rnd(d_key + 20); f1_rnd(d_key + 24); + f0_rnd(d_key + 28); f1_rnd(d_key + 32); + f0_rnd(d_key + 36); f1_rnd(d_key + 40); + f0_rnd(d_key + 44); + + gamma_tau(b0[0], b1, 0, 1, 0); + gamma_tau(b0[1], b1, 1, 0, 1); + gamma_tau(b0[2], b1, 2, 1, 0); + gamma_tau(b0[3], b1, 3, 0, 1); + + out_blk[0] = b0[0] ^ d_key[48]; + out_blk[1] = b0[1] ^ d_key[49]; + out_blk[2] = b0[2] ^ d_key[50]; + out_blk[3] = b0[3] ^ d_key[51]; + return 0; +}; + +static void crypton_lock() +{ + MOD_INC_USE_COUNT; +} + +static void crypton_unlock() +{ + MOD_DEC_USE_COUNT; +} + +#define CRYPTON_KEY_SCHEDULE_SIZE (104*sizeof(u32)) + +static struct cipher_implementation crypton_ecb = +{ + DNODE_NULL, + CIPHER_CRYPTON | CIPHER_MODE_ECB, + "crypton-ecb", + 16, + CRYPTON_KEY_SCHEDULE_SIZE, + ATOMIC_INIT(0), + crypton_encrypt, + crypton_decrypt, + crypton_set_key, + crypton_lock, + crypton_unlock +}; + + +#ifdef MODULE + int __init init_module(void) +#else + int __init init_crypton(void) +#endif +{ + if (register_cipher(&crypton_ecb)) + printk(KERN_WARNING "Couldn't register crypton-ecb encryption\n"); + + return 0; +} + +#ifdef MODULE +void cleanup_module(void) +{ + if (unregister_cipher(&crypton_ecb)) + printk(KERN_WARNING "Couldn't unregister crypton-ecb encryption\n"); + /*if (unregister_cipher(&cbc_crypton)) + printk(KERN_WARNING "Couldn't unregister crypton-cbc encryption\n");*/ +} +#endif + diff -urN lin.2.4.3/crypto/attic/safer3.c int.2.4.3/crypto/attic/safer3.c --- lin.2.4.3/crypto/attic/safer3.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/attic/safer3.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,354 @@ + +/* This is an independent implementation of the SAFER+ encryption */ +/* algorithm submitted by Cylink as a candidate in the US NIST */ +/* Advanced Encryption Standard (AES) programme. This algorithm */ +/* has not been patented and is freely available for use without */ +/* the need for licensing. */ +/* */ +/* Copyright in this implementation is held by Dr B R Gladman but */ +/* I hereby give permission for its free direct or derivative use */ +/* subject to acknowledgment of its origin. */ +/* */ +/* Dr Brian Gladman (gladman@seven77.demon.co.uk) 24th July 1998 */ +/* +/* Timing data: + +Algorithm: safer (safer3.c) +128 bit key: +Key Setup: 3973 cycles +Encrypt: 1769 cycles = 14.5 mbits/sec +Decrypt: 1764 cycles = 14.5 mbits/sec +Mean: 1766 cycles = 14.5 mbits/sec +192 bit key: +Key Setup: 6507 cycles +Encrypt: 2608 cycles = 9.8 mbits/sec +Decrypt: 2601 cycles = 9.8 mbits/sec +Mean: 2605 cycles = 9.8 mbits/sec +256 bit key: +Key Setup: 9479 cycles +Encrypt: 3459 cycles = 7.4 mbits/sec +Decrypt: 3425 cycles = 7.5 mbits/sec +Mean: 3442 cycles = 7.4 mbits/sec + +*/ + +#define BYTE_SWAP +#define WORD_SWAP + +#include "../std_defs.h" + +static char *alg_name[] = { "safer", "safer3.c" }; + +char **cipher_name() +{ + return alg_name; +}; + +u1byte expf[256] = +{ 1, 45, 226, 147, 190, 69, 21, 174, 120, 3, 135, 164, 184, 56, 207, 63, + 8, 103, 9, 148, 235, 38, 168, 107, 189, 24, 52, 27, 187, 191, 114, 247, + 64, 53, 72, 156, 81, 47, 59, 85, 227, 192, 159, 216, 211, 243, 141, 177, + 255, 167, 62, 220, 134, 119, 215, 166, 17, 251, 244, 186, 146, 145, 100, 131, + 241, 51, 239, 218, 44, 181, 178, 43, 136, 209, 153, 203, 140, 132, 29, 20, + 129, 151, 113, 202, 95, 163, 139, 87, 60, 130, 196, 82, 92, 28, 232, 160, + 4, 180, 133, 74, 246, 19, 84, 182, 223, 12, 26, 142, 222, 224, 57, 252, + 32, 155, 36, 78, 169, 152, 158, 171, 242, 96, 208, 108, 234, 250, 199, 217, + 0, 212, 31, 110, 67, 188, 236, 83, 137, 254, 122, 93, 73, 201, 50, 194, + 249, 154, 248, 109, 22, 219, 89, 150, 68, 233, 205, 230, 70, 66, 143, 10, + 193, 204, 185, 101, 176, 210, 198, 172, 30, 65, 98, 41, 46, 14, 116, 80, + 2, 90, 195, 37, 123, 138, 42, 91, 240, 6, 13, 71, 111, 112, 157, 126, + 16, 206, 18, 39, 213, 76, 79, 214, 121, 48, 104, 54, 117, 125, 228, 237, + 128, 106, 144, 55, 162, 94, 118, 170, 197, 127, 61, 175, 165, 229, 25, 97, + 253, 77, 124, 183, 11, 238, 173, 75, 34, 245, 231, 115, 35, 33, 200, 5, + 225, 102, 221, 179, 88, 105, 99, 86, 15, 161, 49, 149, 23, 7, 58, 40 +}; + +u1byte logf[512] = +{ + 128, 0, 176, 9, 96, 239, 185, 253, 16, 18, 159, 228, 105, 186, 173, 248, + 192, 56, 194, 101, 79, 6, 148, 252, 25, 222, 106, 27, 93, 78, 168, 130, + 112, 237, 232, 236, 114, 179, 21, 195, 255, 171, 182, 71, 68, 1, 172, 37, + 201, 250, 142, 65, 26, 33, 203, 211, 13, 110, 254, 38, 88, 218, 50, 15, + 32, 169, 157, 132, 152, 5, 156, 187, 34, 140, 99, 231, 197, 225, 115, 198, + 175, 36, 91, 135, 102, 39, 247, 87, 244, 150, 177, 183, 92, 139, 213, 84, + 121, 223, 170, 246, 62, 163, 241, 17, 202, 245, 209, 23, 123, 147, 131, 188, + 189, 82, 30, 235, 174, 204, 214, 53, 8, 200, 138, 180, 226, 205, 191, 217, + 208, 80, 89, 63, 77, 98, 52, 10, 72, 136, 181, 86, 76, 46, 107, 158, + 210, 61, 60, 3, 19, 251, 151, 81, 117, 74, 145, 113, 35, 190, 118, 42, + 95, 249, 212, 85, 11, 220, 55, 49, 22, 116, 215, 119, 167, 230, 7, 219, + 164, 47, 70, 243, 97, 69, 103, 227, 12, 162, 59, 28, 133, 24, 4, 29, + 41, 160, 143, 178, 90, 216, 166, 126, 238, 141, 83, 75, 161, 154, 193, 14, + 122, 73, 165, 44, 129, 196, 199, 54, 43, 127, 67, 149, 51, 242, 108, 104, + 109, 240, 2, 40, 206, 221, 155, 234, 94, 153, 124, 20, 134, 207, 229, 66, + 184, 64, 120, 45, 58, 233, 100, 31, 146, 144, 125, 57, 111, 224, 137, 48, + + 128, 0, 176, 9, 96, 239, 185, 253, 16, 18, 159, 228, 105, 186, 173, 248, + 192, 56, 194, 101, 79, 6, 148, 252, 25, 222, 106, 27, 93, 78, 168, 130, + 112, 237, 232, 236, 114, 179, 21, 195, 255, 171, 182, 71, 68, 1, 172, 37, + 201, 250, 142, 65, 26, 33, 203, 211, 13, 110, 254, 38, 88, 218, 50, 15, + 32, 169, 157, 132, 152, 5, 156, 187, 34, 140, 99, 231, 197, 225, 115, 198, + 175, 36, 91, 135, 102, 39, 247, 87, 244, 150, 177, 183, 92, 139, 213, 84, + 121, 223, 170, 246, 62, 163, 241, 17, 202, 245, 209, 23, 123, 147, 131, 188, + 189, 82, 30, 235, 174, 204, 214, 53, 8, 200, 138, 180, 226, 205, 191, 217, + 208, 80, 89, 63, 77, 98, 52, 10, 72, 136, 181, 86, 76, 46, 107, 158, + 210, 61, 60, 3, 19, 251, 151, 81, 117, 74, 145, 113, 35, 190, 118, 42, + 95, 249, 212, 85, 11, 220, 55, 49, 22, 116, 215, 119, 167, 230, 7, 219, + 164, 47, 70, 243, 97, 69, 103, 227, 12, 162, 59, 28, 133, 24, 4, 29, + 41, 160, 143, 178, 90, 216, 166, 126, 238, 141, 83, 75, 161, 154, 193, 14, + 122, 73, 165, 44, 129, 196, 199, 54, 43, 127, 67, 149, 51, 242, 108, 104, + 109, 240, 2, 40, 206, 221, 155, 234, 94, 153, 124, 20, 134, 207, 229, 66, + 184, 64, 120, 45, 58, 233, 100, 31, 146, 144, 125, 57, 111, 224, 137, 48 +}; + +u1byte l_key[33 * 16]; +u4byte k_bytes; + +u4byte *set_key(const u4byte in_key[], const u4byte key_len) +{ u1byte by, lk[33]; + u4byte i, j, k, l, m; + + get_key(lk, key_len); + + k_bytes = key_len / 8; lk[k_bytes] = 0; + + for(i = 0; i < k_bytes; ++i) + { + lk[k_bytes] ^= lk[i]; l_key[i] = lk[i]; + } + + for(i = 0; i < k_bytes; ++i) + { + for(j = 0; j <= k_bytes; ++j) + { + by = lk[j]; lk[j] = by << 3 | by >> 5; + } + + k = 17 * i + 35; l = 16 * i + 16; m = i + 1; + + if(i < 16) + { + for(j = 0; j < 16; ++j) + { + l_key[l + j] = lk[m] + expf[expf[(k + j) & 255]]; + + m = (m == k_bytes ? 0 : m + 1); + } + } + else + { + for(j = 0; j < 16; ++j) + { + l_key[l + j] = lk[m] + expf[(k + j) & 255]; + + m = (m == k_bytes ? 0 : m + 1); + } + } + } + return (u4byte*)l_key; +}; + +void do_fr(u1byte x[16], u1byte *kp) +{ u1byte t; + + x[ 0] = expf[x[ 0] ^ kp[ 0]] + kp[16]; + x[ 1] = logf[x[ 1] + kp[ 1]] ^ kp[17]; + x[ 2] = logf[x[ 2] + kp[ 2]] ^ kp[18]; + x[ 3] = expf[x[ 3] ^ kp[ 3]] + kp[19]; + + x[ 4] = expf[x[ 4] ^ kp[ 4]] + kp[20]; + x[ 5] = logf[x[ 5] + kp[ 5]] ^ kp[21]; + x[ 6] = logf[x[ 6] + kp[ 6]] ^ kp[22]; + x[ 7] = expf[x[ 7] ^ kp[ 7]] + kp[23]; + + x[ 8] = expf[x[ 8] ^ kp[ 8]] + kp[24]; + x[ 9] = logf[x[ 9] + kp[ 9]] ^ kp[25]; + x[10] = logf[x[10] + kp[10]] ^ kp[26]; + x[11] = expf[x[11] ^ kp[11]] + kp[27]; + + x[12] = expf[x[12] ^ kp[12]] + kp[28]; + x[13] = logf[x[13] + kp[13]] ^ kp[29]; + x[14] = logf[x[14] + kp[14]] ^ kp[30]; + x[15] = expf[x[15] ^ kp[15]] + kp[31]; + + x[ 1] += x[ 0]; x[ 0] += x[ 1]; + x[ 3] += x[ 2]; x[ 2] += x[ 3]; + x[ 5] += x[ 4]; x[ 4] += x[ 5]; + x[ 7] += x[ 6]; x[ 6] += x[ 7]; + x[ 9] += x[ 8]; x[ 8] += x[ 9]; + x[11] += x[10]; x[10] += x[11]; + x[13] += x[12]; x[12] += x[13]; + x[15] += x[14]; x[14] += x[15]; + + x[ 7] += x[ 0]; x[ 0] += x[ 7]; + x[ 1] += x[ 2]; x[ 2] += x[ 1]; + x[ 3] += x[ 4]; x[ 4] += x[ 3]; + x[ 5] += x[ 6]; x[ 6] += x[ 5]; + x[11] += x[ 8]; x[ 8] += x[11]; + x[ 9] += x[10]; x[10] += x[ 9]; + x[15] += x[12]; x[12] += x[15]; + x[13] += x[14]; x[14] += x[13]; + + x[ 3] += x[ 0]; x[ 0] += x[ 3]; + x[15] += x[ 2]; x[ 2] += x[15]; + x[ 7] += x[ 4]; x[ 4] += x[ 7]; + x[ 1] += x[ 6]; x[ 6] += x[ 1]; + x[ 5] += x[ 8]; x[ 8] += x[ 5]; + x[13] += x[10]; x[10] += x[13]; + x[11] += x[12]; x[12] += x[11]; + x[ 9] += x[14]; x[14] += x[ 9]; + + x[13] += x[ 0]; x[ 0] += x[13]; + x[ 5] += x[ 2]; x[ 2] += x[ 5]; + x[ 9] += x[ 4]; x[ 4] += x[ 9]; + x[11] += x[ 6]; x[ 6] += x[11]; + x[15] += x[ 8]; x[ 8] += x[15]; + x[ 1] += x[10]; x[10] += x[ 1]; + x[ 3] += x[12]; x[12] += x[ 3]; + x[ 7] += x[14]; x[14] += x[ 7]; + + t = x[0]; x[0] = x[14]; x[14] = x[12]; x[12] = x[10]; x[10] = x[2]; + x[2] = x[8]; x[8] = x[4]; x[4] = t; + + t = x[1]; x[1] = x[7]; x[7] = x[11]; x[11] = x[5]; x[5] = x[13]; x[13] = t; + + t = x[15]; x[15] = x[3]; x[3] = t; +}; + +void do_ir(u1byte x[16], u1byte *kp) +{ u1byte t; + + t = x[3]; x[3] = x[15]; x[15] = t; + + t = x[13]; x[13] = x[5]; x[5] = x[11]; x[11] = x[7]; x[7] = x[1]; x[1] = t; + + t = x[4]; x[4] = x[8]; x[8] = x[2]; x[2] = x[10]; + x[10] = x[12]; x[12] = x[14]; x[14] = x[0]; x[0] = t; + + x[14] -= x[ 7]; x[ 7] -= x[14]; + x[12] -= x[ 3]; x[ 3] -= x[12]; + x[10] -= x[ 1]; x[ 1] -= x[10]; + x[ 8] -= x[15]; x[15] -= x[ 8]; + x[ 6] -= x[11]; x[11] -= x[ 6]; + x[ 4] -= x[ 9]; x[ 9] -= x[ 4]; + x[ 2] -= x[ 5]; x[ 5] -= x[ 2]; + x[ 0] -= x[13]; x[13] -= x[ 0]; + + x[14] -= x[ 9]; x[ 9] -= x[14]; + x[12] -= x[11]; x[11] -= x[12]; + x[10] -= x[13]; x[13] -= x[10]; + x[ 8] -= x[ 5]; x[ 5] -= x[ 8]; + x[ 6] -= x[ 1]; x[ 1] -= x[ 6]; + x[ 4] -= x[ 7]; x[ 7] -= x[ 4]; + x[ 2] -= x[15]; x[15] -= x[ 2]; + x[ 0] -= x[ 3]; x[ 3] -= x[ 0]; + + x[14] -= x[13]; x[13] -= x[14]; + x[12] -= x[15]; x[15] -= x[12]; + x[10] -= x[ 9]; x[ 9] -= x[10]; + x[ 8] -= x[11]; x[11] -= x[ 8]; + x[ 6] -= x[ 5]; x[ 5] -= x[ 6]; + x[ 4] -= x[ 3]; x[ 3] -= x[ 4]; + x[ 2] -= x[ 1]; x[ 1] -= x[ 2]; + x[ 0] -= x[ 7]; x[ 7] -= x[ 0]; + + x[14] -= x[15]; x[15] -= x[14]; + x[12] -= x[13]; x[13] -= x[12]; + x[10] -= x[11]; x[11] -= x[10]; + x[ 8] -= x[ 9]; x[ 9] -= x[ 8]; + x[ 6] -= x[ 7]; x[ 7] -= x[ 6]; + x[ 4] -= x[ 5]; x[ 5] -= x[ 4]; + x[ 2] -= x[ 3]; x[ 3] -= x[ 2]; + x[ 0] -= x[ 1]; x[ 1] -= x[ 0]; + + x[ 0] = logf[x[ 0] - kp[16] + 256] ^ kp[ 0]; + x[ 1] = expf[x[ 1] ^ kp[17]] - kp[ 1]; + x[ 2] = expf[x[ 2] ^ kp[18]] - kp[ 2]; + x[ 3] = logf[x[ 3] - kp[19] + 256] ^ kp[ 3]; + + x[ 4] = logf[x[ 4] - kp[20] + 256] ^ kp[ 4]; + x[ 5] = expf[x[ 5] ^ kp[21]] - kp[ 5]; + x[ 6] = expf[x[ 6] ^ kp[22]] - kp[ 6]; + x[ 7] = logf[x[ 7] - kp[23] + 256] ^ kp[ 7]; + + x[ 8] = logf[x[ 8] - kp[24] + 256] ^ kp[ 8]; + x[ 9] = expf[x[ 9] ^ kp[25]] - kp[ 9]; + x[10] = expf[x[10] ^ kp[26]] - kp[10]; + x[11] = logf[x[11] - kp[27] + 256] ^ kp[11]; + + x[12] = logf[x[12] - kp[28] + 256] ^ kp[12]; + x[13] = expf[x[13] ^ kp[29]] - kp[13]; + x[14] = expf[x[14] ^ kp[30]] - kp[14]; + x[15] = logf[x[15] - kp[31] + 256] ^ kp[15]; +}; + +void encrypt(const u4byte in_blk[4], u4byte out_blk[4]) +{ u1byte blk[16], *kp; + + get_block(blk); + + do_fr(blk, l_key); do_fr(blk, l_key + 32); + do_fr(blk, l_key + 64); do_fr(blk, l_key + 96); + do_fr(blk, l_key + 128); do_fr(blk, l_key + 160); + do_fr(blk, l_key + 192); do_fr(blk, l_key + 224); + + if(k_bytes > 16) + { + do_fr(blk, l_key + 256); do_fr(blk, l_key + 288); + do_fr(blk, l_key + 320); do_fr(blk, l_key + 352); + } + + if(k_bytes > 24) + { + do_fr(blk, l_key + 384); do_fr(blk, l_key + 416); + do_fr(blk, l_key + 448); do_fr(blk, l_key + 480); + } + + kp = l_key + 16 * k_bytes; + + blk[ 0] ^= kp[ 0]; blk[ 1] += kp[ 1]; + blk[ 2] += kp[ 2]; blk[ 3] ^= kp[ 3]; + blk[ 4] ^= kp[ 4]; blk[ 5] += kp[ 5]; + blk[ 6] += kp[ 6]; blk[ 7] ^= kp[ 7]; + blk[ 8] ^= kp[ 8]; blk[ 9] += kp[ 9]; + blk[10] += kp[10]; blk[11] ^= kp[11]; + blk[12] ^= kp[12]; blk[13] += kp[13]; + blk[14] += kp[14]; blk[15] ^= kp[15]; + + put_block(blk); +}; + +void decrypt(const u4byte in_blk[4], u4byte out_blk[4]) +{ u1byte blk[16], *kp; + + get_block(blk); + + kp = l_key + 16 * k_bytes; + + blk[ 0] ^= kp[ 0]; blk[ 1] -= kp[ 1]; + blk[ 2] -= kp[ 2]; blk[ 3] ^= kp[ 3]; + blk[ 4] ^= kp[ 4]; blk[ 5] -= kp[ 5]; + blk[ 6] -= kp[ 6]; blk[ 7] ^= kp[ 7]; + blk[ 8] ^= kp[ 8]; blk[ 9] -= kp[ 9]; + blk[10] -= kp[10]; blk[11] ^= kp[11]; + blk[12] ^= kp[12]; blk[13] -= kp[13]; + blk[14] -= kp[14]; blk[15] ^= kp[15]; + + if(k_bytes > 24) + { + do_ir(blk, l_key + 480); do_ir(blk, l_key + 448); + do_ir(blk, l_key + 416); do_ir(blk, l_key + 384); + } + + if(k_bytes > 16) + { + do_ir(blk, l_key + 352); do_ir(blk, l_key + 320); + do_ir(blk, l_key + 288); do_ir(blk, l_key + 256); + } + + do_ir(blk, l_key + 224); do_ir(blk, l_key + 192); + do_ir(blk, l_key + 160); do_ir(blk, l_key + 128); + do_ir(blk, l_key + 96); do_ir(blk, l_key + 64); + do_ir(blk, l_key + 32); do_ir(blk, l_key); + + put_block(blk); +}; diff -urN lin.2.4.3/crypto/attic/twofish3.c int.2.4.3/crypto/attic/twofish3.c --- lin.2.4.3/crypto/attic/twofish3.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/attic/twofish3.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,437 @@ +/* NOTE: This implementation has been changed from the original + source. See ChangeLog for more information. + Maintained by Alexander Kjeldaas + */ + +/* This is an independent implementation of the Twofish encryption */ +/* algorithm designed by Bruce Schneier and colleagues and offered */ +/* as a candidate algorithm for the US NIST Advanced Encryption */ +/* Standard (AES) effort. */ +/* */ +/* Copyright in this implementation is held by Dr B R Gladman but */ +/* I hereby give permission for its free direct or derivative use */ +/* subject to acknowledgment of its origin. */ +/* */ +/* My thanks to Niels Ferguson and the Twofish team for suggesting */ +/* an additional optimisation for this code */ +/* */ +/* Dr Brian Gladman (gladman@seven77.demon.co.uk) 18th October 1998 */ +/* */ +/* Timing data: + +Algorithm: twofish (twofish3.c) +128 bit key: +Key Setup: 16333 cycles +Encrypt: 396 cycles = 64.6 mbits/sec +Decrypt: 397 cycles = 64.5 mbits/sec +Mean: 396 cycles = 64.6 mbits/sec +192 bit key: +Key Setup: 23378 cycles +Encrypt: 396 cycles = 64.6 mbits/sec +Decrypt: 398 cycles = 64.3 mbits/sec +Mean: 397 cycles = 64.5 mbits/sec +256 bit key: +Key Setup: 24791 cycles +Encrypt: 396 cycles = 64.6 mbits/sec +Decrypt: 395 cycles = 64.8 mbits/sec +Mean: 396 cycles = 64.7 mbits/sec + + +*/ + +#include +#include +#include + +#if 0 +#define rotl rotl32 +#define rotr rotr32 +#else +#define rotl generic_rotl32 +#define rotr generic_rotr32 +#endif + +#define Q_TABLES +#define M_TABLE +#define MK_TABLE +#define ONE_STEP + +u4byte k_len; +u4byte l_key[40]; +u4byte s_key[4]; + +/* finite field arithmetic for GF(2**8) with the modular */ +/* polynomial x**8 + x**6 + x**5 + x**3 + 1 (0x169) */ + +#define G_M 0x0169 + +u1byte tab_5b[4] = { 0, G_M >> 2, G_M >> 1, (G_M >> 1) ^ (G_M >> 2) }; +u1byte tab_ef[4] = { 0, (G_M >> 1) ^ (G_M >> 2), G_M >> 1, G_M >> 2 }; + +#define ffm_01(x) (x) +#define ffm_5b(x) ((x) ^ ((x) >> 2) ^ tab_5b[(x) & 3]) +#define ffm_ef(x) ((x) ^ ((x) >> 1) ^ ((x) >> 2) ^ tab_ef[(x) & 3]) + +u1byte ror4[16] = { 0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15 }; +u1byte ashx[16] = { 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 5, 14, 7 }; + +u1byte qt0[2][16] = +{ { 8, 1, 7, 13, 6, 15, 3, 2, 0, 11, 5, 9, 14, 12, 10, 4 }, + { 2, 8, 11, 13, 15, 7, 6, 14, 3, 1, 9, 4, 0, 10, 12, 5 } +}; + +u1byte qt1[2][16] = +{ { 14, 12, 11, 8, 1, 2, 3, 5, 15, 4, 10, 6, 7, 0, 9, 13 }, + { 1, 14, 2, 11, 4, 12, 3, 7, 6, 13, 10, 5, 15, 9, 0, 8 } +}; + +u1byte qt2[2][16] = +{ { 11, 10, 5, 14, 6, 13, 9, 0, 12, 8, 15, 3, 2, 4, 7, 1 }, + { 4, 12, 7, 5, 1, 6, 9, 10, 0, 14, 13, 8, 2, 11, 3, 15 } +}; + +u1byte qt3[2][16] = +{ { 13, 7, 15, 4, 1, 2, 6, 14, 9, 11, 3, 0, 8, 5, 12, 10 }, + { 11, 9, 5, 1, 12, 3, 13, 14, 6, 4, 7, 15, 2, 0, 8, 10 } +}; + +u1byte qp(const u4byte n, const u1byte x) +{ u1byte a0, a1, a2, a3, a4, b0, b1, b2, b3, b4; + + a0 = x >> 4; b0 = x & 15; + a1 = a0 ^ b0; b1 = ror4[b0] ^ ashx[a0]; + a2 = qt0[n][a1]; b2 = qt1[n][b1]; + a3 = a2 ^ b2; b3 = ror4[b2] ^ ashx[a2]; + a4 = qt2[n][a3]; b4 = qt3[n][b3]; + return (b4 << 4) | a4; +}; + +#ifdef Q_TABLES + +u4byte qt_gen = 0; +u1byte q_tab[2][256]; + +#define q(n,x) q_tab[n][x] + +void gen_qtab(void) +{ u4byte i; + + for(i = 0; i < 256; ++i) + { + q(0,i) = qp(0, (u1byte)i); + q(1,i) = qp(1, (u1byte)i); + } +}; + +#else + +#define q(n,x) qp(n, x) + +#endif + +#ifdef M_TABLE + +u4byte mt_gen = 0; +u4byte m_tab[4][256]; + +void gen_mtab(void) +{ u4byte i, f01, f5b, fef; + + for(i = 0; i < 256; ++i) + { + f01 = q(1,i); f5b = ffm_5b(f01); fef = ffm_ef(f01); + m_tab[0][i] = f01 + (f5b << 8) + (fef << 16) + (fef << 24); + m_tab[2][i] = f5b + (fef << 8) + (f01 << 16) + (fef << 24); + + f01 = q(0,i); f5b = ffm_5b(f01); fef = ffm_ef(f01); + m_tab[1][i] = fef + (fef << 8) + (f5b << 16) + (f01 << 24); + m_tab[3][i] = f5b + (f01 << 8) + (fef << 16) + (f5b << 24); + } +}; + +#define mds(n,x) m_tab[n][x] + +#else + +#define fm_00 ffm_01 +#define fm_10 ffm_5b +#define fm_20 ffm_ef +#define fm_30 ffm_ef +#define q_0(x) q(1,x) + +#define fm_01 ffm_ef +#define fm_11 ffm_ef +#define fm_21 ffm_5b +#define fm_31 ffm_01 +#define q_1(x) q(0,x) + +#define fm_02 ffm_5b +#define fm_12 ffm_ef +#define fm_22 ffm_01 +#define fm_32 ffm_ef +#define q_2(x) q(1,x) + +#define fm_03 ffm_5b +#define fm_13 ffm_01 +#define fm_23 ffm_ef +#define fm_33 ffm_5b +#define q_3(x) q(0,x) + +#define f_0(n,x) ((u4byte)fm_0##n(x)) +#define f_1(n,x) ((u4byte)fm_1##n(x) << 8) +#define f_2(n,x) ((u4byte)fm_2##n(x) << 16) +#define f_3(n,x) ((u4byte)fm_3##n(x) << 24) + +#define mds(n,x) f_0(n,q_##n(x)) ^ f_1(n,q_##n(x)) ^ f_2(n,q_##n(x)) ^ f_3(n,q_##n(x)) + +#endif + +u4byte h_fun(const u4byte x, const u1byte key[]) +{ u1byte b0, b1, b2, b3; + + b0 = byte(x, 0); b1 = byte(x, 1); b2 = byte(x, 2); b3 = byte(x, 3); + + switch(k_len) + { + case 4: + b0 = q(1,b0) ^ key[12]; + b1 = q(0,b1) ^ key[13]; + b2 = q(0,b2) ^ key[14]; + b3 = q(1,b3) ^ key[15]; + case 3: /* fall through */ + b0 = q(1,b0) ^ key[ 8]; + b1 = q(1,b1) ^ key[ 9]; + b2 = q(0,b2) ^ key[10]; + b3 = q(0,b3) ^ key[11]; + case 2: /* fall through */ + b0 = q(0,q(0,b0) ^ key[4]) ^ key[0]; + b1 = q(0,q(1,b1) ^ key[5]) ^ key[1]; + b2 = q(1,q(0,b2) ^ key[6]) ^ key[2]; + b3 = q(1,q(1,b3) ^ key[7]) ^ key[3]; + } + +#ifdef M_TABLE + + return mds(0, b0) ^ mds(1, b1) ^ mds(2, b2) ^ mds(3, b3); + +#else + + b0 = q(1,b0); b1 = q(0,b1); b2 = q(1,b2); b3 = q(0,b3); + + return (u4byte)( b0 ^ ffm_ef(b1) ^ ffm_5b(b2) ^ ffm_5b(b3)) ^ + (u4byte)(ffm_5b(b0) ^ ffm_ef(b1) ^ ffm_ef(b2) ^ b3 ) << 8 ^ + (u4byte)(ffm_ef(b0) ^ ffm_5b(b1) ^ b2 ^ ffm_ef(b3)) << 16 ^ + (u4byte)(ffm_ef(b0) ^ b1 ^ ffm_ef(b2) ^ ffm_5b(b3)) << 24; +#endif +}; + +#ifdef MK_TABLE + +#ifdef ONE_STEP +u4byte mk_tab[4][256]; +#else +u1byte sb[4][256]; +#endif + +gen_mk_tab(u1byte key[]) +{ u1byte b0, b1, b2, b3; + u4byte i; + + for(i = 0; i < 256; ++i) + { + b0 = b1 = b2 = b3 = i; + + switch(k_len) + { + case 4: + b0 = q(1,b0) ^ key[12]; b1 = q(0,b1) ^ key[13]; + b2 = q(0,b2) ^ key[14]; b3 = q(1,b3) ^ key[15]; + case 3: /* fall through */ + b0 = q(1,b0) ^ key[ 8]; b1 = q(1,b1) ^ key[ 9]; + b2 = q(0,b2) ^ key[10]; b3 = q(0,b3) ^ key[11]; + case 2: /* fall through */ + b0 = q(0,q(0,b0) ^ key[4]) ^ key[0]; + b1 = q(0,q(1,b1) ^ key[5]) ^ key[1]; + b2 = q(1,q(0,b2) ^ key[6]) ^ key[2]; + b3 = q(1,q(1,b3) ^ key[7]) ^ key[3]; + } +#ifdef ONE_STEP + mk_tab[0][i] = mds(0, b0); + mk_tab[1][i] = mds(1, b1); + mk_tab[2][i] = mds(2, b2); + mk_tab[3][i] = mds(3, b3); +#else + sb[0][i] = b0; + sb[1][i] = b1; + sb[2][i] = b2; + sb[3][i] = b3; +#endif + } +}; + +# ifdef ONE_STEP +# define g0_fun(x) mk_tab[0][byte(x,0)] ^ mk_tab[1][byte(x,1)] \ + ^ mk_tab[2][byte(x,2)] ^ mk_tab[3][byte(x,3)] +# define g1_fun(x) mk_tab[0][byte(x,3)] ^ mk_tab[1][byte(x,0)] \ + ^ mk_tab[2][byte(x,1)] ^ mk_tab[3][byte(x,2)] +# else +# define g0_fun(x) mds(0, sb[0][byte(x,0)]) ^ mds(1, sb[1][byte(x,1)]) \ + ^ mds(2, sb[2][byte(x,2)]) ^ mds(3, sb[3][byte(x,3)]) +# define g1_fun(x) mds(0, sb[0][byte(x,3)]) ^ mds(1, sb[1][byte(x,0)]) \ + ^ mds(2, sb[2][byte(x,1)]) ^ mds(3, sb[3][byte(x,2)]) +# endif + +#else + +#define g0_fun(x) h_fun(x,(u1byte*)s_key) +#define g1_fun(x) h_fun(rotl(x,8),(u1byte*)s_key) + +#endif + +/* The (12,8) Reed Soloman code has the generator polynomial + + g(x) = x**4 + (a + 1/a) * x**3 + a * x**2 + (a + 1/a) * x + 1 + +where the coefficients are in the finite field GF(2**8) with a +modular polynomial a**8 + a**6 + a**3 + a**2 + 1. To generate the +remainder we have to start with a 12th order polynomial with our +eight input bytes as the coefficients of the 4th to 11th terms. +That is: + + m[7] * x**11 + m[6] * x**10 ... + m[0] * x**4 + 0 * x**3 +... + 0 + +We then multiply the generator polynomial by m[7] * x**7 and subtract +it - xor in GF(2**8) - from the above to eliminate the x**7 term (the +artihmetic on the coefficients is done in GF(2**8). We then multiply +the generator polynomial by x**6 * coeff(x**10) and use this to remove +the x**10 term. We carry on in this way until the x**4 term is removed +so that we are left with: + + r[3] * x**3 + r[2] * x**2 + r[1] 8 x**1 + r[0] + +which give the resulting 4 bytes of the remainder. This is equivalent +to the matrix multiplication in the Twofish description but much faster +to implement. + +*/ + +#define G_MOD 0x0000014d + +u4byte mds_rem(u4byte p0, u4byte p1) +{ u4byte i, t, u; + + for(i = 0; i < 8; ++i) + { + t = p1 >> 24; + + p1 = (p1 << 8) | (p0 >> 24); p0 <<= 8; + + u = (t << 1) ^ (t & 0x80 ? G_MOD : 0); + + p1 ^= t ^ (u << 16); + + u ^= (t >> 1) ^ (t & 0x01 ? G_MOD >> 1 : 0); + + p1 ^= (u << 8) | (u << 24); + } + + return p1; +}; + +/* initialise the key schedule from the user supplied key */ + +u4byte *set_key(const u4byte in_key[], const u4byte key_len) +{ u4byte i, a, b, me_key[4], mo_key[4]; + +#ifdef Q_TABLES + if(!qt_gen) + { + gen_qtab(); qt_gen = 1; + } +#endif + +#ifdef M_TABLE + if(!mt_gen) + { + gen_mtab(); mt_gen = 1; + } +#endif + + k_len = key_len / 64; /* 2, 3 or 4 */ + + for(i = 0; i < k_len; ++i) + { + a = in_key[i + i]; me_key[i] = a; + b = in_key[i + i + 1]; mo_key[i] = b; + s_key[k_len - i - 1] = mds_rem(a, b); + } + + for(i = 0; i < 40; i += 2) + { + a = 0x01010101 * i; b = a + 0x01010101; + a = h_fun(a, (u1byte*)me_key); + b = rotl(h_fun(b, (u1byte*)mo_key), 8); + l_key[i] = a + b; + l_key[i + 1] = rotl(a + 2 * b, 9); + } + +#ifdef MK_TABLE + gen_mk_tab((u1byte*)s_key); +#endif + + return l_key; +}; + +/* encrypt a block of text */ + +#define f_rnd(i) \ + t0 = g0_fun(blk[0]); t1 = g1_fun(blk[1]); \ + blk[2] = rotr(blk[2] ^ (t0 + t1 + l_key[4 * (i) + 8]), 1); \ + blk[3] = rotl(blk[3], 1) ^ (t0 + 2 * t1 + l_key[4 * (i) + 9]); \ + t0 = g0_fun(blk[2]); t1 = g1_fun(blk[3]); \ + blk[0] = rotr(blk[0] ^ (t0 + t1 + l_key[4 * (i) + 10]), 1); \ + blk[1] = rotl(blk[1], 1) ^ (t0 + 2 * t1 + l_key[4 * (i) + 11]) + +void encrypt(const u4byte in_blk[4], u4byte out_blk[]) +{ u4byte t0, t1, blk[4]; + + blk[0] = in_blk[0] ^ l_key[0]; + blk[1] = in_blk[1] ^ l_key[1]; + blk[2] = in_blk[2] ^ l_key[2]; + blk[3] = in_blk[3] ^ l_key[3]; + + f_rnd(0); f_rnd(1); f_rnd(2); f_rnd(3); + f_rnd(4); f_rnd(5); f_rnd(6); f_rnd(7); + + out_blk[0] = blk[2] ^ l_key[4]; + out_blk[1] = blk[3] ^ l_key[5]; + out_blk[2] = blk[0] ^ l_key[6]; + out_blk[3] = blk[1] ^ l_key[7]; +}; + +/* decrypt a block of text */ + +#define i_rnd(i) \ + t0 = g0_fun(blk[0]); t1 = g1_fun(blk[1]); \ + blk[2] = rotl(blk[2], 1) ^ (t0 + t1 + l_key[4 * (i) + 10]); \ + blk[3] = rotr(blk[3] ^ (t0 + 2 * t1 + l_key[4 * (i) + 11]), 1); \ + t0 = g0_fun(blk[2]); t1 = g1_fun(blk[3]); \ + blk[0] = rotl(blk[0], 1) ^ (t0 + t1 + l_key[4 * (i) + 8]); \ + blk[1] = rotr(blk[1] ^ (t0 + 2 * t1 + l_key[4 * (i) + 9]), 1) + +void decrypt(const u4byte in_blk[4], u4byte out_blk[4]) +{ u4byte t0, t1, blk[4]; + + blk[0] = in_blk[0] ^ l_key[4]; + blk[1] = in_blk[1] ^ l_key[5]; + blk[2] = in_blk[2] ^ l_key[6]; + blk[3] = in_blk[3] ^ l_key[7]; + + i_rnd(7); i_rnd(6); i_rnd(5); i_rnd(4); + i_rnd(3); i_rnd(2); i_rnd(1); i_rnd(0); + + out_blk[0] = blk[2] ^ l_key[0]; + out_blk[1] = blk[3] ^ l_key[1]; + out_blk[2] = blk[0] ^ l_key[2]; + out_blk[3] = blk[1] ^ l_key[3]; +}; diff -urN lin.2.4.3/crypto/cipher-aes.c int.2.4.3/crypto/cipher-aes.c --- lin.2.4.3/crypto/cipher-aes.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/cipher-aes.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,463 @@ +/* NOTE: This implementation has been changed from the original + source. See ChangeLog for more information. + Maintained by Alexander Kjeldaas + */ + +// Copyright in this code is held by Dr B.R. Gladman but free direct or +// derivative use is permitted subject to acknowledgement of its origin +// and subject to any constraints placed on the use of the algorithm by +// its designers (if such constraints may exist, this will be indicated +// below). +// +// Dr. B. R. Gladman (brian.gladman@btinternet.com). 25th January 2000. +// +// This is an implementation of Rijndael, an encryption algorithm designed +// by Daemen and Rijmen and submitted as a candidate algorithm for the +// Advanced Encryption Standard programme of the US National Institute of +// Standards and Technology. +// +// The designers of Rijndael have not placed any constraints on the use of +// this algorithm. + +/* Some changes from the Gladman version: + s/RIJNDAEL(e_key)/E_KEY/g + s/RIJNDAEL(d_key)/D_KEY/g +*/ + +#include +#include +#include +#include +#include +#include + +#if 0 +#define rotl rotl32 +#define rotr rotr32 +#else +#define rotl generic_rotl32 +#define rotr generic_rotr32 +#endif + + +#define STATIC static +#define u4byte_in(x) le32_to_cpu(*(u32 *)(x)) +#define u4byte_out(to, from) (*(u32 *)(to) = cpu_to_le32(from)) + +#define E_KEY ((u4byte *)cx->keyinfo) +#define D_KEY ((u4byte *)(cx->keyinfo + 60)) + + +STATIC u1byte pow_tab[256]; +STATIC u1byte log_tab[256]; +STATIC u1byte sbx_tab[256]; +STATIC u1byte isb_tab[256]; +STATIC u4byte rco_tab[ 10]; +STATIC u4byte ft_tab[4][256]; +STATIC u4byte it_tab[4][256]; + +STATIC u4byte fl_tab[4][256]; +STATIC u4byte il_tab[4][256]; + +STATIC u4byte tab_gen = 0; + +inline u1byte f_mult(u1byte a, u1byte b) +{ u1byte aa = log_tab[a], cc = aa + log_tab[b]; + + return pow_tab[cc + (cc < aa ? 1 : 0)]; + +} + +#define ff_mult(a,b) (a && b ? f_mult(a, b) : 0) + +#define f_rn(bo, bi, n, k) \ + bo[n] = ft_tab[0][byte(bi[n],0)] ^ \ + ft_tab[1][byte(bi[(n + 1) & 3],1)] ^ \ + ft_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ + ft_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n) + +#define i_rn(bo, bi, n, k) \ + bo[n] = it_tab[0][byte(bi[n],0)] ^ \ + it_tab[1][byte(bi[(n + 3) & 3],1)] ^ \ + it_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ + it_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n) + +#define ls_box(x) \ + ( fl_tab[0][byte(x, 0)] ^ \ + fl_tab[1][byte(x, 1)] ^ \ + fl_tab[2][byte(x, 2)] ^ \ + fl_tab[3][byte(x, 3)] ) + +#define f_rl(bo, bi, n, k) \ + bo[n] = fl_tab[0][byte(bi[n],0)] ^ \ + fl_tab[1][byte(bi[(n + 1) & 3],1)] ^ \ + fl_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ + fl_tab[3][byte(bi[(n + 3) & 3],3)] ^ *(k + n) + +#define i_rl(bo, bi, n, k) \ + bo[n] = il_tab[0][byte(bi[n],0)] ^ \ + il_tab[1][byte(bi[(n + 3) & 3],1)] ^ \ + il_tab[2][byte(bi[(n + 2) & 3],2)] ^ \ + il_tab[3][byte(bi[(n + 1) & 3],3)] ^ *(k + n) + +STATIC void gen_tabs(void) +{ u4byte i, t; + u1byte p, q; + + // log and power tables for GF(2**8) finite field with + // 0x011b as modular polynomial - the simplest prmitive + // root is 0x03, used here to generate the tables + + for(i = 0,p = 1; i < 256; ++i) + { + pow_tab[i] = (u1byte)p; log_tab[p] = (u1byte)i; + + p ^= (p << 1) ^ (p & 0x80 ? 0x01b : 0); + } + + log_tab[1] = 0; + + for(i = 0,p = 1; i < 10; ++i) + { + rco_tab[i] = p; + + p = (p << 1) ^ (p & 0x80 ? 0x01b : 0); + } + + for(i = 0; i < 256; ++i) + { + p = (i ? pow_tab[255 - log_tab[i]] : 0); + q = ((p >> 7) | (p << 1)) ^ ((p >> 6) | (p << 2)); + p ^= 0x63 ^ q ^ ((q >> 6) | (q << 2)); + sbx_tab[i] = p; isb_tab[p] = (u1byte)i; + } + + for(i = 0; i < 256; ++i) + { + p = sbx_tab[i]; + + + t = p; fl_tab[0][i] = t; + fl_tab[1][i] = rotl(t, 8); + fl_tab[2][i] = rotl(t, 16); + fl_tab[3][i] = rotl(t, 24); + + t = ((u4byte)ff_mult(2, p)) | + ((u4byte)p << 8) | + ((u4byte)p << 16) | + ((u4byte)ff_mult(3, p) << 24); + + ft_tab[0][i] = t; + ft_tab[1][i] = rotl(t, 8); + ft_tab[2][i] = rotl(t, 16); + ft_tab[3][i] = rotl(t, 24); + + p = isb_tab[i]; + + t = p; il_tab[0][i] = t; + il_tab[1][i] = rotl(t, 8); + il_tab[2][i] = rotl(t, 16); + il_tab[3][i] = rotl(t, 24); + + t = ((u4byte)ff_mult(14, p)) | + ((u4byte)ff_mult( 9, p) << 8) | + ((u4byte)ff_mult(13, p) << 16) | + ((u4byte)ff_mult(11, p) << 24); + + it_tab[0][i] = t; + it_tab[1][i] = rotl(t, 8); + it_tab[2][i] = rotl(t, 16); + it_tab[3][i] = rotl(t, 24); + } + + tab_gen = 1; +} + +#define star_x(x) (((x) & 0x7f7f7f7f) << 1) ^ ((((x) & 0x80808080) >> 7) * 0x1b) + +#define imix_col(y,x) \ + u = star_x(x); \ + v = star_x(u); \ + w = star_x(v); \ + t = w ^ (x); \ + (y) = u ^ v ^ w; \ + (y) ^= rotr(u ^ t, 8) ^ \ + rotr(v ^ t, 16) ^ \ + rotr(t,24) + +// initialise the key schedule from the user supplied key + +#define loop4(i) \ +{ t = rotr(t, 8); t = ls_box(t) ^ rco_tab[i]; \ + t ^= E_KEY[4 * i]; E_KEY[4 * i + 4] = t; \ + t ^= E_KEY[4 * i + 1]; E_KEY[4 * i + 5] = t; \ + t ^= E_KEY[4 * i + 2]; E_KEY[4 * i + 6] = t; \ + t ^= E_KEY[4 * i + 3]; E_KEY[4 * i + 7] = t; \ +} + +#define loop6(i) \ +{ t = rotr(t, 8); t = ls_box(t) ^ rco_tab[i]; \ + t ^= E_KEY[6 * i]; E_KEY[6 * i + 6] = t; \ + t ^= E_KEY[6 * i + 1]; E_KEY[6 * i + 7] = t; \ + t ^= E_KEY[6 * i + 2]; E_KEY[6 * i + 8] = t; \ + t ^= E_KEY[6 * i + 3]; E_KEY[6 * i + 9] = t; \ + t ^= E_KEY[6 * i + 4]; E_KEY[6 * i + 10] = t; \ + t ^= E_KEY[6 * i + 5]; E_KEY[6 * i + 11] = t; \ +} + +#define loop8(i) \ +{ t = rotr(t, 8); ; t = ls_box(t) ^ rco_tab[i]; \ + t ^= E_KEY[8 * i]; E_KEY[8 * i + 8] = t; \ + t ^= E_KEY[8 * i + 1]; E_KEY[8 * i + 9] = t; \ + t ^= E_KEY[8 * i + 2]; E_KEY[8 * i + 10] = t; \ + t ^= E_KEY[8 * i + 3]; E_KEY[8 * i + 11] = t; \ + t = E_KEY[8 * i + 4] ^ ls_box(t); \ + E_KEY[8 * i + 12] = t; \ + t ^= E_KEY[8 * i + 5]; E_KEY[8 * i + 13] = t; \ + t ^= E_KEY[8 * i + 6]; E_KEY[8 * i + 14] = t; \ + t ^= E_KEY[8 * i + 7]; E_KEY[8 * i + 15] = t; \ +} + +int rijndael_set_key(struct cipher_context *cx, unsigned char *in_key, + int key_len, int atomic) +{ + u4byte i, t, u, v, w; + u4byte k_len; + +#if 0 + mode = f; +#endif + + k_len = (key_len*8 + 31) / 32; + cx->key_length = k_len * 4; + + E_KEY[0] = u4byte_in(in_key ); + E_KEY[1] = u4byte_in(in_key + 4); + E_KEY[2] = u4byte_in(in_key + 8); + E_KEY[3] = u4byte_in(in_key + 12); + + switch(k_len) + { + case 4: t = E_KEY[3]; + for(i = 0; i < 10; ++i) + loop4(i); + break; + + case 6: E_KEY[4] = u4byte_in(in_key + 16); + t = E_KEY[5] = u4byte_in(in_key + 20); + for(i = 0; i < 8; ++i) + loop6(i); + break; + + case 8: E_KEY[4] = u4byte_in(in_key + 16); + E_KEY[5] = u4byte_in(in_key + 20); + E_KEY[6] = u4byte_in(in_key + 24); + t = E_KEY[7] = u4byte_in(in_key + 28); + for(i = 0; i < 7; ++i) + loop8(i); + break; + } + +#if 0 + if(mode != enc) + { +#endif + D_KEY[0] = E_KEY[0]; D_KEY[1] = E_KEY[1]; + D_KEY[2] = E_KEY[2]; D_KEY[3] = E_KEY[3]; + + for(i = 4; i < 4 * k_len + 24; ++i) + { + imix_col(D_KEY[i], E_KEY[i]); + } +#if 0 + } +#endif + + return 0; +} + +// encrypt a block of text + +#define f_nround(bo, bi, k) \ + f_rn(bo, bi, 0, k); \ + f_rn(bo, bi, 1, k); \ + f_rn(bo, bi, 2, k); \ + f_rn(bo, bi, 3, k); \ + k += 4 + +#define f_lround(bo, bi, k) \ + f_rl(bo, bi, 0, k); \ + f_rl(bo, bi, 1, k); \ + f_rl(bo, bi, 2, k); \ + f_rl(bo, bi, 3, k) + + +int rijndael_encrypt(struct cipher_context *cx, + const u8 *in, u8 *out, int size, int atomic) +{ + u4byte b0[4], b1[4], *kp; + u4byte k_len = cx->key_length >> 2; + + b0[0] = u4byte_in(in ) ^ E_KEY[0]; + b0[1] = u4byte_in(in + 4) ^ E_KEY[1]; + b0[2] = u4byte_in(in + 8) ^ E_KEY[2]; + b0[3] = u4byte_in(in + 12) ^ E_KEY[3]; + + kp = E_KEY + 4; + + if(k_len > 6) + { + f_nround(b1, b0, kp); f_nround(b0, b1, kp); + } + + if(k_len > 4) + { + f_nround(b1, b0, kp); f_nround(b0, b1, kp); + } + + f_nround(b1, b0, kp); f_nround(b0, b1, kp); + f_nround(b1, b0, kp); f_nround(b0, b1, kp); + f_nround(b1, b0, kp); f_nround(b0, b1, kp); + f_nround(b1, b0, kp); f_nround(b0, b1, kp); + f_nround(b1, b0, kp); f_lround(b0, b1, kp); + + u4byte_out(out, b0[0]); u4byte_out(out + 4, b0[1]); + u4byte_out(out + 8, b0[2]); u4byte_out(out + 12, b0[3]); + + return 0; +} + +// decrypt a block of text + +#define i_nround(bo, bi, k) \ + i_rn(bo, bi, 0, k); \ + i_rn(bo, bi, 1, k); \ + i_rn(bo, bi, 2, k); \ + i_rn(bo, bi, 3, k); \ + k -= 4 + +#define i_lround(bo, bi, k) \ + i_rl(bo, bi, 0, k); \ + i_rl(bo, bi, 1, k); \ + i_rl(bo, bi, 2, k); \ + i_rl(bo, bi, 3, k) + +int rijndael_decrypt(struct cipher_context *cx, + const u8 *in, u8 *out, int size, int atomic) +{ + u4byte b0[4], b1[4], *kp; + u4byte k_len = cx->key_length >> 2; + + b0[0] = u4byte_in(in ) ^ E_KEY[4*k_len + 24]; + b0[1] = u4byte_in(in + 4) ^ E_KEY[4*k_len + 25]; + b0[2] = u4byte_in(in + 8) ^ E_KEY[4*k_len + 26]; + b0[3] = u4byte_in(in + 12) ^ E_KEY[4*k_len + 27]; + + kp = D_KEY + 4 * (k_len + 5); + + if(k_len > 6) + { + i_nround(b1, b0, kp); i_nround(b0, b1, kp); + } + + if(k_len > 4) + { + i_nround(b1, b0, kp); i_nround(b0, b1, kp); + } + + i_nround(b1, b0, kp); i_nround(b0, b1, kp); + i_nround(b1, b0, kp); i_nround(b0, b1, kp); + i_nround(b1, b0, kp); i_nround(b0, b1, kp); + i_nround(b1, b0, kp); i_nround(b0, b1, kp); + i_nround(b1, b0, kp); i_lround(b0, b1, kp); + + u4byte_out(out, b0[0]); u4byte_out(out + 4, b0[1]); + u4byte_out(out + 8, b0[2]); u4byte_out(out + 12, b0[3]); + + return 0; +} + + + +static void rijndael_lock(void) +{ + MOD_INC_USE_COUNT; +} + +static void rijndael_unlock(void) +{ + MOD_DEC_USE_COUNT; +} + +#define CIPHER_BITS_128 +#define CIPHER_NAME(x) rijndael##x +#include "gen-cbc.h" +#include "gen-ecb.h" + +#define RIJNDAEL_KEY_SCHEDULE_SIZE ((60+60)*sizeof(u32)) + + +static struct cipher_implementation rijndael_ecb = { + {{NULL,NULL}, CIPHER_MODE_ECB, "rijndael-ecb"}, + blocksize: 16, + ivsize: 0, + key_schedule_size: RIJNDAEL_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(rijndael_ecb), + INIT_CIPHER_OPS(rijndael) +}; + +static struct cipher_implementation rijndael_cbc = { + {{NULL,NULL}, CIPHER_MODE_CBC, "rijndael-cbc"}, + blocksize: 16, + ivsize: 16, + key_schedule_size: RIJNDAEL_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(rijndael_cbc), + INIT_CIPHER_OPS(rijndael) +}; + + +struct cipher_implementation aes_ecb; +struct cipher_implementation aes_cbc; + + +static int __init init_rijndael(void) +{ + gen_tabs(); + memcpy(&aes_ecb, &rijndael_ecb, sizeof(struct cipher_implementation)); + memcpy(&aes_cbc, &rijndael_cbc, sizeof(struct cipher_implementation)); + aes_ecb.trans.t_name = "aes-ecb"; + aes_cbc.trans.t_name = "aes-cbc"; +#ifdef CONFIG_CIPHER_RIJNDAEL + if (register_cipher(&rijndael_ecb)) + printk(KERN_WARNING "Couldn't register rijndael-ecb encryption\n"); + if (register_cipher(&rijndael_cbc)) + printk(KERN_WARNING "Couldn't register rijndael-cbc encryption\n"); +#endif + if (register_cipher(&aes_ecb)) + printk(KERN_WARNING "Couldn't register aes-ecb encryption\n"); + if (register_cipher(&aes_cbc)) + printk(KERN_WARNING "Couldn't register aes-cbc encryption\n"); + + return 0; +} + +static void __exit cleanup_rijndael(void) +{ +#ifdef CONFIG_CIPHER_RIJNDAEL + if (unregister_cipher(&rijndael_ecb)) + printk(KERN_WARNING "Couldn't unregister rijndael-ecb encryption\n"); + if (unregister_cipher(&rijndael_cbc)) + printk(KERN_WARNING "Couldn't unregister rijndael-cbc encryption\n"); +#endif + if (unregister_cipher(&aes_ecb)) + printk(KERN_WARNING "Couldn't unregister aes-ecb encryption\n"); + if (unregister_cipher(&aes_cbc)) + printk(KERN_WARNING "Couldn't unregister aes-cbc encryption\n"); +} + +module_init(init_rijndael); +module_exit(cleanup_rijndael); diff -urN lin.2.4.3/crypto/cipher-blowfish.c int.2.4.3/crypto/cipher-blowfish.c --- lin.2.4.3/crypto/cipher-blowfish.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/cipher-blowfish.c Mon Apr 2 18:43:53 2001 @@ -0,0 +1,524 @@ +#include +#include +#include +#include +#include + +/* what shall blowfish_set_key() return on wrong key lengths, resp. who + * checks for correct keysizes? */ +#define BLOWFISH_WRONG_KEYLENGTH 1 + +#define Bswap(x) __le32_to_cpu(x) + +static u32 bf_pbox[16 + 2] = { + 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, + 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, + 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, + 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, + 0x9216d5d9, 0x8979fb1b, +}; + +static u32 bf_sbox[256 * 4] = { + 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, + 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, + 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, + 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, + 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, + 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013, + 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, + 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, + 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, + 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, + 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, + 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a, + 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, + 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, + 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, + 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, + 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, + 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239, + 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, + 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, + 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, + 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, + 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, + 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe, + 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, + 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, + 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, + 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, + 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, + 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463, + 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, + 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, + 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, + 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, + 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, + 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8, + 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, + 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, + 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, + 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, + 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, + 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b, + 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, + 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, + 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, + 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, + 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, + 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c, + 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, + 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, + 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, + 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, + 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, + 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf, + 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, + 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, + 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, + 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, + 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, + 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915, + 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, + 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, + 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, + 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, + 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, + 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266, + 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, + 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, + 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, + 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, + 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, + 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1, + 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, + 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, + 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, + 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, + 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, + 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7, + 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, + 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, + 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, + 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, + 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, + 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87, + 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, + 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, + 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, + 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, + 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, + 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509, + 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, + 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, + 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, + 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, + 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, + 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960, + 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, + 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, + 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, + 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, + 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, + 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf, + 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, + 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, + 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, + 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, + 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, + 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281, + 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, + 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, + 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, + 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, + 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, + 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0, + 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, + 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, + 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, + 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, + 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, + 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061, + 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, + 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, + 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, + 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, + 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, + 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340, + 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, + 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, + 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, + 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, + 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, + 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840, + 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, + 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, + 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, + 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, + 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, + 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6, + 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, + 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, + 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, + 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, + 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, + 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b, + 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, + 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, + 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, + 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, + 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, + 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564, + 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, + 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, + 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, + 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, + 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, + 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e, + 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, + 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, + 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, + 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, + 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, + 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb, + 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, + 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, + 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, + 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, + 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, + 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe, + 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, + 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, + 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, + 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, + 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, + 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9, + 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, + 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, + 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, + 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, + 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, + 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169, + 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, + 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, + 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, + 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, + 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, + 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76, + 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, + 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, + 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, + 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, + 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, + 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0, + 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, + 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, + 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, + 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, + 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, + 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6, + 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, + 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, + 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, + 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, + 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, + 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59, + 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, + 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, + 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, + 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, + 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, + 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28, + 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, + 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, + 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, + 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, + 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, + 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f, + 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, + 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, + 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, + 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, + 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, + 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb, + 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, + 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, + 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, + 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, + 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, + 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048, + 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, + 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, + 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, + 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, + 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, + 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f, + 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, + 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, + 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, + 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, + 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, + 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e, + 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, + 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, + 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, + 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, + 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, + 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc, + 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, + 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, + 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, + 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, + 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, + 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060, + 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, + 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, + 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, + 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6, +}; + +typedef struct blow_key { + u32 P[18]; + u32 S[1024]; +} blow_key; + +/* + * Round loop unrolling macros, S is a pointer to a S-Box array + * organized in 4 unsigned longs at a row. + */ + +#define GET32_3(x) (((x) & 0xff)) +#define GET32_2(x) (((x) >> (8)) & (0xff)) +#define GET32_1(x) (((x) >> (16)) & (0xff)) +#define GET32_0(x) (((x) >> (24)) & (0xff)) + +#define bf_F(x) (((S[GET32_0(x)] + S[256 + GET32_1(x)]) ^ \ + S[512 + GET32_2(x)]) + S[768 + GET32_3(x)]) + +#define ROUND(a, b, n) b^=P[n];a ^= bf_F(b) + +/* + * The blowfish encipher, processes 64-bit blocks. + * NOTE: This function MUSTN'T respect endianess + */ + +int +blowfish_encrypt (struct cipher_context *cx, + const u8 * in8, u8 * out8, int size, int atomic) +{ + blow_key *key = (blow_key *) cx->keyinfo; + u32 *in_blk = (u32 *) in8; + u32 *out_blk = (u32 *) out8; + + u32 yl, yr; + + u32 *P = key->P; + u32 *S = key->S; + + for (; size >= 8; size -= 8) { + yl = *(in_blk++); + yr = *(in_blk++); + + ROUND (yr, yl, 0); + ROUND (yl, yr, 1); + ROUND (yr, yl, 2); + ROUND (yl, yr, 3); + ROUND (yr, yl, 4); + ROUND (yl, yr, 5); + ROUND (yr, yl, 6); + ROUND (yl, yr, 7); + ROUND (yr, yl, 8); + ROUND (yl, yr, 9); + ROUND (yr, yl, 10); + ROUND (yl, yr, 11); + ROUND (yr, yl, 12); + ROUND (yl, yr, 13); + ROUND (yr, yl, 14); + ROUND (yl, yr, 15); + + /* yl and yr are switched */ + yl ^= P[16]; + yr ^= P[17]; + + *(out_blk++) = yr; + *(out_blk++) = yl; + } + return 0; +} + +int +blowfish_decrypt (struct cipher_context *cx, + const u8 * in8, u8 * out8, int size, int atomic) +{ + blow_key *key = (blow_key *) cx->keyinfo; + u32 *in_blk = (u32 *) in8; + u32 *out_blk = (u32 *) out8; + + u32 yl, yr; + + u32 *P = key->P; + u32 *S = key->S; + + for (; size >= 8; size -= 8) { + yl = *(in_blk++); + yr = *(in_blk++); + + ROUND (yr, yl, 17); + ROUND (yl, yr, 16); + ROUND (yr, yl, 15); + ROUND (yl, yr, 14); + ROUND (yr, yl, 13); + ROUND (yl, yr, 12); + ROUND (yr, yl, 11); + ROUND (yl, yr, 10); + ROUND (yr, yl, 9); + ROUND (yl, yr, 8); + ROUND (yr, yl, 7); + ROUND (yl, yr, 6); + ROUND (yr, yl, 5); + ROUND (yl, yr, 4); + ROUND (yr, yl, 3); + ROUND (yl, yr, 2); + + /* yl and yr are switched */ + yl ^= P[1]; + yr ^= P[0]; + + *(out_blk++) = yr; + *(out_blk++) = yl; + } + return 0; +} + +/* Sets the blowfish S and P boxes for encryption and decryption. */ + +int +blowfish_set_key (struct cipher_context *cx, + unsigned char *key, int keybytes, int atomic) +{ + blow_key *key2 = (blow_key *) cx->keyinfo; + short i; + short j; + short count; + u32 data[2]; + u32 temp; + u32 *P = key2->P; + u32 *S = key2->S; + + /* Check key length. */ + + if (keybytes != 8 && keybytes != 16 && keybytes != 24 && keybytes != 32) + return BLOWFISH_WRONG_KEYLENGTH; + + /* Copy the initialization s-boxes */ + + for (i = 0, count = 0; i < 256; i++) + for (j = 0; j < 4; j++, count++) + S[count] = bf_sbox[count]; + + /* Set the p-boxes */ + + for (i = 0; i < 16 + 2; i++) + P[i] = bf_pbox[i]; + + /* Actual subkey generation */ + + for (j = 0, i = 0; i < 16 + 2; i++) { + temp = (((u32) key[j] << 24) | + ((u32) key[(j + 1) % keybytes] << 16) | + ((u32) key[(j + 2) % keybytes] << 8) | + ((u32) key[(j + 3) % keybytes])); + + P[i] = P[i] ^ temp; + j = (j + 4) % keybytes; + } + + data[0] = 0x00000000; + data[1] = 0x00000000; + + for (i = 0; i < 16 + 2; i += 2) { + blowfish_encrypt (cx, (u8 *) data, (u8 *) data, 8, atomic); + + P[i] = data[0]; + P[i + 1] = data[1]; + } + + for (i = 0; i < 4; i++) { + for (j = 0, count = i * 256; j < 256; j += 2, count += 2) { + blowfish_encrypt (cx, (u8 *) data, (u8 *) data, 8, + atomic); + + S[count] = data[0]; + S[count + 1] = data[1]; + } + } + return 0; +} + +static void +blowfish_lock (void) +{ + MOD_INC_USE_COUNT; +} + +static void +blowfish_unlock (void) +{ + MOD_DEC_USE_COUNT; +} + +#define CIPHER_BITS_64 +#define CIPHER_NAME(x) blowfish##x +#include "gen-cbc.h" +#include "gen-ecb.h" + +#define BLOWFISH_KEY_SCHEDULE_SIZE ((18+1024)*sizeof(u32)) + +static struct cipher_implementation blowfish_ecb = { + {{NULL, NULL}, CIPHER_MODE_ECB, "blowfish-ecb"}, + blocksize:8, + ivsize:0, + key_schedule_size:sizeof (blow_key), + key_size_mask:CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_160 | + CIPHER_KEYSIZE_192 | CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS (blowfish_ecb), + INIT_CIPHER_OPS (blowfish) +}; + +static struct cipher_implementation blowfish_cbc = { + {{NULL, NULL}, CIPHER_MODE_CBC, "blowfish-cbc"}, + blocksize:8, + ivsize:8, + key_schedule_size:sizeof (blow_key), + key_size_mask:CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_160 | + CIPHER_KEYSIZE_192 | CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS (blowfish_cbc), + INIT_CIPHER_OPS (blowfish) +}; + +static int __init +init_blowfish (void) +{ + if (register_cipher (&blowfish_ecb)) + printk (KERN_WARNING + "Couldn't register blowfish-ecb encryption\n"); + if (register_cipher (&blowfish_cbc)) + printk (KERN_WARNING + "Couldn't register blowfish-cbc encryption\n"); + + return 0; +} + +static void __exit +cleanup_blowfish (void) +{ + if (unregister_cipher (&blowfish_ecb)) + printk (KERN_WARNING + "Couldn't unregister blowfish-ecb encryption\n"); + if (unregister_cipher (&blowfish_cbc)) + printk (KERN_WARNING + "Couldn't unregister blowfish-cbc encryption\n"); +} + +module_init (init_blowfish); +module_exit (cleanup_blowfish); diff -urN lin.2.4.3/crypto/cipher-des-ede3.c int.2.4.3/crypto/cipher-des-ede3.c --- lin.2.4.3/crypto/cipher-des-ede3.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/cipher-des-ede3.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,1325 @@ + +/* + * triple DES (DES EDE3) created from kerneli DES implementation by + * Gisle Sælensminde . Original DES sourcecode created + * by descore. Descore is under GPL and made by Dana L. How + * , and modified by Raimar Falke + * for the Linux-Kernel. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License + * as published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This implementation accept 24, 16 or 8 byte keys for 3-key 3DES, + * 2-key 3DES or DES compatibility mode respectivly. Other key lengths + * are rejected. The parity bits, which is the least significant bit + * of each byte are always set to the correct value. + * + * In DES there are four weak and six pairs of semi-weak keys. For 3DES + * none of the keys should be weak, and no pair of semi-weak keys should + * appear among the three DES subkeys. If the key is (pseudo)random, the + * chance of selecting a weak key is negligtable, and the test can safly + * be omited. Such (pseudo)random keys are usually the result of a key + * exchange protocol or the output of a cryptographic hash function. If + * the key is selected by the user, the key can not be expected to be + * random, and it can be desirable to check the keys. Since it's + * possible for a user to directly select the key bits in some + * applications of kerneli crypto API, we do check for weak keys. + * + * More specifically, a key is rejected if any of the DES subkeys are + * weak or semi-weak. This is done because we reuse the check from the + * original kerneli DES implementation. This function reject any key if + * it is weak or semi-weak. As a result we may unnecessarily reject some + * strong keys. In future releases this test should be improved, or + * better; we should not let the user select the exact key bits, and + * remove the need for checking. + * + * A DES_EDE3 key degenerates to DES if any of the DES subkeys K1 and + * K2 or K2 and K3 are equal, even we have 112 key bits. This should be + * avoided, unless we operate in DES compatibility mode. Again such keys + * are unlikely if the key is random. To have K1 = K3 is 2-key 3DES, + * which not have such security problems. An exception from this policy + * is done for DES compatibility mode, where all three keys are equal. + */ + +#include +#include +#include +#include +#include +#include + +#define ROR(d,c,o) d = d >> c | d << o + +typedef u8 DesData[8]; +typedef u32 DesKeys[32]; + +static u32 des_keymap[] = { + 0x02080008, 0x02082000, 0x00002008, 0x00000000, + 0x02002000, 0x00080008, 0x02080000, 0x02082008, + 0x00000008, 0x02000000, 0x00082000, 0x00002008, + 0x00082008, 0x02002008, 0x02000008, 0x02080000, + 0x00002000, 0x00082008, 0x00080008, 0x02002000, + 0x02082008, 0x02000008, 0x00000000, 0x00082000, + 0x02000000, 0x00080000, 0x02002008, 0x02080008, + 0x00080000, 0x00002000, 0x02082000, 0x00000008, + 0x00080000, 0x00002000, 0x02000008, 0x02082008, + 0x00002008, 0x02000000, 0x00000000, 0x00082000, + 0x02080008, 0x02002008, 0x02002000, 0x00080008, + 0x02082000, 0x00000008, 0x00080008, 0x02002000, + 0x02082008, 0x00080000, 0x02080000, 0x02000008, + 0x00082000, 0x00002008, 0x02002008, 0x02080000, + 0x00000008, 0x02082000, 0x00082008, 0x00000000, + 0x02000000, 0x02080008, 0x00002000, 0x00082008, + + 0x08000004, 0x00020004, 0x00000000, 0x08020200, + 0x00020004, 0x00000200, 0x08000204, 0x00020000, + 0x00000204, 0x08020204, 0x00020200, 0x08000000, + 0x08000200, 0x08000004, 0x08020000, 0x00020204, + 0x00020000, 0x08000204, 0x08020004, 0x00000000, + 0x00000200, 0x00000004, 0x08020200, 0x08020004, + 0x08020204, 0x08020000, 0x08000000, 0x00000204, + 0x00000004, 0x00020200, 0x00020204, 0x08000200, + 0x00000204, 0x08000000, 0x08000200, 0x00020204, + 0x08020200, 0x00020004, 0x00000000, 0x08000200, + 0x08000000, 0x00000200, 0x08020004, 0x00020000, + 0x00020004, 0x08020204, 0x00020200, 0x00000004, + 0x08020204, 0x00020200, 0x00020000, 0x08000204, + 0x08000004, 0x08020000, 0x00020204, 0x00000000, + 0x00000200, 0x08000004, 0x08000204, 0x08020200, + 0x08020000, 0x00000204, 0x00000004, 0x08020004, + + 0x80040100, 0x01000100, 0x80000000, 0x81040100, + 0x00000000, 0x01040000, 0x81000100, 0x80040000, + 0x01040100, 0x81000000, 0x01000000, 0x80000100, + 0x81000000, 0x80040100, 0x00040000, 0x01000000, + 0x81040000, 0x00040100, 0x00000100, 0x80000000, + 0x00040100, 0x81000100, 0x01040000, 0x00000100, + 0x80000100, 0x00000000, 0x80040000, 0x01040100, + 0x01000100, 0x81040000, 0x81040100, 0x00040000, + 0x81040000, 0x80000100, 0x00040000, 0x81000000, + 0x00040100, 0x01000100, 0x80000000, 0x01040000, + 0x81000100, 0x00000000, 0x00000100, 0x80040000, + 0x00000000, 0x81040000, 0x01040100, 0x00000100, + 0x01000000, 0x81040100, 0x80040100, 0x00040000, + 0x81040100, 0x80000000, 0x01000100, 0x80040100, + 0x80040000, 0x00040100, 0x01040000, 0x81000100, + 0x80000100, 0x01000000, 0x81000000, 0x01040100, + + 0x04010801, 0x00000000, 0x00010800, 0x04010000, + 0x04000001, 0x00000801, 0x04000800, 0x00010800, + 0x00000800, 0x04010001, 0x00000001, 0x04000800, + 0x00010001, 0x04010800, 0x04010000, 0x00000001, + 0x00010000, 0x04000801, 0x04010001, 0x00000800, + 0x00010801, 0x04000000, 0x00000000, 0x00010001, + 0x04000801, 0x00010801, 0x04010800, 0x04000001, + 0x04000000, 0x00010000, 0x00000801, 0x04010801, + 0x00010001, 0x04010800, 0x04000800, 0x00010801, + 0x04010801, 0x00010001, 0x04000001, 0x00000000, + 0x04000000, 0x00000801, 0x00010000, 0x04010001, + 0x00000800, 0x04000000, 0x00010801, 0x04000801, + 0x04010800, 0x00000800, 0x00000000, 0x04000001, + 0x00000001, 0x04010801, 0x00010800, 0x04010000, + 0x04010001, 0x00010000, 0x00000801, 0x04000800, + 0x04000801, 0x00000001, 0x04010000, 0x00010800, + + 0x00000400, 0x00000020, 0x00100020, 0x40100000, + 0x40100420, 0x40000400, 0x00000420, 0x00000000, + 0x00100000, 0x40100020, 0x40000020, 0x00100400, + 0x40000000, 0x00100420, 0x00100400, 0x40000020, + 0x40100020, 0x00000400, 0x40000400, 0x40100420, + 0x00000000, 0x00100020, 0x40100000, 0x00000420, + 0x40100400, 0x40000420, 0x00100420, 0x40000000, + 0x40000420, 0x40100400, 0x00000020, 0x00100000, + 0x40000420, 0x00100400, 0x40100400, 0x40000020, + 0x00000400, 0x00000020, 0x00100000, 0x40100400, + 0x40100020, 0x40000420, 0x00000420, 0x00000000, + 0x00000020, 0x40100000, 0x40000000, 0x00100020, + 0x00000000, 0x40100020, 0x00100020, 0x00000420, + 0x40000020, 0x00000400, 0x40100420, 0x00100000, + 0x00100420, 0x40000000, 0x40000400, 0x40100420, + 0x40100000, 0x00100420, 0x00100400, 0x40000400, + + 0x00800000, 0x00001000, 0x00000040, 0x00801042, + 0x00801002, 0x00800040, 0x00001042, 0x00801000, + 0x00001000, 0x00000002, 0x00800002, 0x00001040, + 0x00800042, 0x00801002, 0x00801040, 0x00000000, + 0x00001040, 0x00800000, 0x00001002, 0x00000042, + 0x00800040, 0x00001042, 0x00000000, 0x00800002, + 0x00000002, 0x00800042, 0x00801042, 0x00001002, + 0x00801000, 0x00000040, 0x00000042, 0x00801040, + 0x00801040, 0x00800042, 0x00001002, 0x00801000, + 0x00001000, 0x00000002, 0x00800002, 0x00800040, + 0x00800000, 0x00001040, 0x00801042, 0x00000000, + 0x00001042, 0x00800000, 0x00000040, 0x00001002, + 0x00800042, 0x00000040, 0x00000000, 0x00801042, + 0x00801002, 0x00801040, 0x00000042, 0x00001000, + 0x00001040, 0x00801002, 0x00800040, 0x00000042, + 0x00000002, 0x00001042, 0x00801000, 0x00800002, + + 0x10400000, 0x00404010, 0x00000010, 0x10400010, + 0x10004000, 0x00400000, 0x10400010, 0x00004010, + 0x00400010, 0x00004000, 0x00404000, 0x10000000, + 0x10404010, 0x10000010, 0x10000000, 0x10404000, + 0x00000000, 0x10004000, 0x00404010, 0x00000010, + 0x10000010, 0x10404010, 0x00004000, 0x10400000, + 0x10404000, 0x00400010, 0x10004010, 0x00404000, + 0x00004010, 0x00000000, 0x00400000, 0x10004010, + 0x00404010, 0x00000010, 0x10000000, 0x00004000, + 0x10000010, 0x10004000, 0x00404000, 0x10400010, + 0x00000000, 0x00404010, 0x00004010, 0x10404000, + 0x10004000, 0x00400000, 0x10404010, 0x10000000, + 0x10004010, 0x10400000, 0x00400000, 0x10404010, + 0x00004000, 0x00400010, 0x10400010, 0x00004010, + 0x00400010, 0x00000000, 0x10404000, 0x10000010, + 0x10400000, 0x10004010, 0x00000010, 0x00404000, + + 0x00208080, 0x00008000, 0x20200000, 0x20208080, + 0x00200000, 0x20008080, 0x20008000, 0x20200000, + 0x20008080, 0x00208080, 0x00208000, 0x20000080, + 0x20200080, 0x00200000, 0x00000000, 0x20008000, + 0x00008000, 0x20000000, 0x00200080, 0x00008080, + 0x20208080, 0x00208000, 0x20000080, 0x00200080, + 0x20000000, 0x00000080, 0x00008080, 0x20208000, + 0x00000080, 0x20200080, 0x20208000, 0x00000000, + 0x00000000, 0x20208080, 0x00200080, 0x20008000, + 0x00208080, 0x00008000, 0x20000080, 0x00200080, + 0x20208000, 0x00000080, 0x00008080, 0x20200000, + 0x20008080, 0x20000000, 0x20200000, 0x00208000, + 0x20208080, 0x00008080, 0x00208000, 0x20200080, + 0x00200000, 0x20000080, 0x20008000, 0x00000000, + 0x00008000, 0x00200000, 0x20200080, 0x00208080, + 0x20000000, 0x20208000, 0x00000080, 0x20008080, +}; + +static u8 rotors[] = { + 34, 13, 5, 46, 47, 18, 32, 41, 11, 53, 33, 20, + 14, 36, 30, 24, 49, 2, 15, 37, 42, 50, 0, 21, + 38, 48, 6, 26, 39, 4, 52, 25, 12, 27, 31, 40, + 1, 17, 28, 29, 23, 51, 35, 7, 3, 22, 9, 43, + + 41, 20, 12, 53, 54, 25, 39, 48, 18, 31, 40, 27, + 21, 43, 37, 0, 1, 9, 22, 44, 49, 2, 7, 28, + 45, 55, 13, 33, 46, 11, 6, 32, 19, 34, 38, 47, + 8, 24, 35, 36, 30, 3, 42, 14, 10, 29, 16, 50, + + 55, 34, 26, 38, 11, 39, 53, 5, 32, 45, 54, 41, + 35, 2, 51, 14, 15, 23, 36, 3, 8, 16, 21, 42, + 6, 12, 27, 47, 31, 25, 20, 46, 33, 48, 52, 4, + 22, 7, 49, 50, 44, 17, 1, 28, 24, 43, 30, 9, + + 12, 48, 40, 52, 25, 53, 38, 19, 46, 6, 11, 55, + 49, 16, 10, 28, 29, 37, 50, 17, 22, 30, 35, 1, + 20, 26, 41, 4, 45, 39, 34, 31, 47, 5, 13, 18, + 36, 21, 8, 9, 3, 0, 15, 42, 7, 2, 44, 23, + + 26, 5, 54, 13, 39, 38, 52, 33, 31, 20, 25, 12, + 8, 30, 24, 42, 43, 51, 9, 0, 36, 44, 49, 15, + 34, 40, 55, 18, 6, 53, 48, 45, 4, 19, 27, 32, + 50, 35, 22, 23, 17, 14, 29, 1, 21, 16, 3, 37, + + 40, 19, 11, 27, 53, 52, 13, 47, 45, 34, 39, 26, + 22, 44, 7, 1, 2, 10, 23, 14, 50, 3, 8, 29, + 48, 54, 12, 32, 20, 38, 5, 6, 18, 33, 41, 46, + 9, 49, 36, 37, 0, 28, 43, 15, 35, 30, 17, 51, + + 54, 33, 25, 41, 38, 13, 27, 4, 6, 48, 53, 40, + 36, 3, 21, 15, 16, 24, 37, 28, 9, 17, 22, 43, + 5, 11, 26, 46, 34, 52, 19, 20, 32, 47, 55, 31, + 23, 8, 50, 51, 14, 42, 2, 29, 49, 44, 0, 10, + + 11, 47, 39, 55, 52, 27, 41, 18, 20, 5, 38, 54, + 50, 17, 35, 29, 30, 7, 51, 42, 23, 0, 36, 2, + 19, 25, 40, 31, 48, 13, 33, 34, 46, 4, 12, 45, + 37, 22, 9, 10, 28, 1, 16, 43, 8, 3, 14, 24, + + 18, 54, 46, 5, 6, 34, 48, 25, 27, 12, 45, 4, + 2, 24, 42, 36, 37, 14, 3, 49, 30, 7, 43, 9, + 26, 32, 47, 38, 55, 20, 40, 41, 53, 11, 19, 52, + 44, 29, 16, 17, 35, 8, 23, 50, 15, 10, 21, 0, + + 32, 11, 31, 19, 20, 48, 5, 39, 41, 26, 6, 18, + 16, 7, 1, 50, 51, 28, 17, 8, 44, 21, 2, 23, + 40, 46, 4, 52, 12, 34, 54, 55, 38, 25, 33, 13, + 3, 43, 30, 0, 49, 22, 37, 9, 29, 24, 35, 14, + + 46, 25, 45, 33, 34, 5, 19, 53, 55, 40, 20, 32, + 30, 21, 15, 9, 10, 42, 0, 22, 3, 35, 16, 37, + 54, 31, 18, 13, 26, 48, 11, 12, 52, 39, 47, 27, + 17, 2, 44, 14, 8, 36, 51, 23, 43, 7, 49, 28, + + 31, 39, 6, 47, 48, 19, 33, 38, 12, 54, 34, 46, + 44, 35, 29, 23, 24, 1, 14, 36, 17, 49, 30, 51, + 11, 45, 32, 27, 40, 5, 25, 26, 13, 53, 4, 41, + 0, 16, 3, 28, 22, 50, 10, 37, 2, 21, 8, 42, + + 45, 53, 20, 4, 5, 33, 47, 52, 26, 11, 48, 31, + 3, 49, 43, 37, 7, 15, 28, 50, 0, 8, 44, 10, + 25, 6, 46, 41, 54, 19, 39, 40, 27, 38, 18, 55, + 14, 30, 17, 42, 36, 9, 24, 51, 16, 35, 22, 1, + + 6, 38, 34, 18, 19, 47, 4, 13, 40, 25, 5, 45, + 17, 8, 2, 51, 21, 29, 42, 9, 14, 22, 3, 24, + 39, 20, 31, 55, 11, 33, 53, 54, 41, 52, 32, 12, + 28, 44, 0, 1, 50, 23, 7, 10, 30, 49, 36, 15, + + 20, 52, 48, 32, 33, 4, 18, 27, 54, 39, 19, 6, + 0, 22, 16, 10, 35, 43, 1, 23, 28, 36, 17, 7, + 53, 34, 45, 12, 25, 47, 38, 11, 55, 13, 46, 26, + 42, 3, 14, 15, 9, 37, 21, 24, 44, 8, 50, 29, + + 27, 6, 55, 39, 40, 11, 25, 34, 4, 46, 26, 13, + 7, 29, 23, 17, 42, 50, 8, 30, 35, 43, 24, 14, + 31, 41, 52, 19, 32, 54, 45, 18, 5, 20, 53, 33, + 49, 10, 21, 22, 16, 44, 28, 0, 51, 15, 2, 36, +}; + +static char parity[] = { +8,1,0,8,0,8,8,0,0,8,8,0,8,0,2,8,0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,3, +0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8, +0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8, +8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8,0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0, +0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8, +8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8,0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0, +8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8,0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0, +4,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,8,5,0,8,0,8,8,0,0,8,8,0,8,0,6,8, +}; + +static int des_part_set_key(u32 *method, unsigned char *key); + +static int des_ede3_set_key(struct cipher_context *cx, + unsigned char *key, int keybytes, int atomic) +{ + u32 *method; + int status,i; + unsigned char lkey[24]; + unsigned char n1, n2; + method=(u32 *)cx->keyinfo; + + /* asign keybits based on keylength */ + switch(keybytes) { + case 24: + memcpy(lkey,key,24); + break; + case 16: + memcpy(lkey,key,16); + memcpy(lkey+16,key,8); + break; + case 8: + memcpy(lkey,key,8); + memcpy(lkey+8,key,8); + memcpy(lkey+16,key,8); + break; + default: + return -EINVAL; + } + + /* set the correct parity bit for each byte in the key*/ + for(i=0; i<24; i++){ + n1 = lkey[i] & 0xfe; + n2 = n1 ^ (n1 >> 4); + n2 ^= (n2 >> 2); + n2 ^= (n2 >> 1); + lkey[i] = n1 | (~n2 & 0x01); + } + + /* check for degenerate keys */ + if(keybytes > 8 && + (memcmp(lkey,lkey+8,8)==0 || memcmp(lkey+8,lkey+16,8)==0)) + return -2; + + if((status = des_part_set_key(method, lkey)) != 0) + return status; + if((status = des_part_set_key(method+32, lkey+8)) != 0) + return status; + if((status = des_part_set_key(method+64, lkey+16)) != 0) + return status; + + return 0; +} + +static int des_part_set_key(u32 *method, unsigned char *key) +{ + register u32 n, w; + register char * b0, * b1; + char bits0[56], bits1[56]; + + /* check for weak keys */ + b0 = parity; + n = b0[key[0]]; n <<= 4; + n |= b0[key[1]]; n <<= 4; + n |= b0[key[2]]; n <<= 4; + n |= b0[key[3]]; n <<= 4; + n |= b0[key[4]]; n <<= 4; + n |= b0[key[5]]; n <<= 4; + n |= b0[key[6]]; n <<= 4; + n |= b0[key[7]]; + w = 0X88888888L; + if ( !((n - (w >> 3)) & w) ) { /* 1 in 10^10 keys passes this test */ + if ( n < 0X41415151 ) { + if ( n < 0X31312121 ) { + if ( n < 0X14141515 ) { + /* 01 01 01 01 01 01 01 01 */ + if ( n == 0X11111111 ) return -2; + /* 01 1F 01 1F 01 0E 01 0E */ + if ( n == 0X13131212 ) return -2; + } else { + /* 01 E0 01 E0 01 F1 01 F1 */ + if ( n == 0X14141515 ) return -2; + /* 01 FE 01 FE 01 FE 01 FE */ + if ( n == 0X16161616 ) return -2; + } + } else { + if ( n < 0X34342525 ) { + /* 1F 01 1F 01 0E 01 0E 01 */ + if ( n == 0X31312121 ) return -2; + /* 1F 1F 1F 1F 0E 0E 0E 0E */ /* ? */ + if ( n == 0X33332222 ) return -2; + } else { + /* 1F E0 1F E0 0E F1 0E F1 */ + if ( n == 0X34342525 ) return -2; + /* 1F FE 1F FE 0E FE 0E FE */ + if ( n == 0X36362626 ) return -2; + } + } + } else { + if ( n < 0X61616161 ) { + if ( n < 0X44445555 ) { + /* E0 01 E0 01 F1 01 F1 01 */ + if ( n == 0X41415151 ) return -2; + /* E0 1F E0 1F F1 0E F1 0E */ + if ( n == 0X43435252 ) return -2; + } else { + /* E0 E0 E0 E0 F1 F1 F1 F1 */ /* ? */ + if ( n == 0X44445555 ) return -2; + /* E0 FE E0 FE F1 FE F1 FE */ + if ( n == 0X46465656 ) return -2; + } + } else { + if ( n < 0X64646565 ) { + /* FE 01 FE 01 FE 01 FE 01 */ + if ( n == 0X61616161 ) return -2; + /* FE 1F FE 1F FE 0E FE 0E */ + if ( n == 0X63636262 ) return -2; + } else { + /* FE E0 FE E0 FE F1 FE F1 */ + if ( n == 0X64646565 ) return -2; + /* FE FE FE FE FE FE FE FE */ + if ( n == 0X66666666 ) return -2; + } + } + } + } + + /* explode the bits */ + n = 56; + b0 = bits0; + b1 = bits1; + do { + w = (256 | *key++) << 2; + do { + --n; + b1[n] = 8 & w; + w >>= 1; + b0[n] = 4 & w; + } while ( w >= 16 ); + } while ( n ); + + /* put the bits in the correct places */ + n = 16; + key = rotors; + do { + w = (b1[key[ 0 ]] | b0[key[ 1 ]]) << 4; + w |= (b1[key[ 2 ]] | b0[key[ 3 ]]) << 2; + w |= b1[key[ 4 ]] | b0[key[ 5 ]]; + w <<= 8; + w |= (b1[key[ 6 ]] | b0[key[ 7 ]]) << 4; + w |= (b1[key[ 8 ]] | b0[key[ 9 ]]) << 2; + w |= b1[key[10 ]] | b0[key[11 ]]; + w <<= 8; + w |= (b1[key[12 ]] | b0[key[13 ]]) << 4; + w |= (b1[key[14 ]] | b0[key[15 ]]) << 2; + w |= b1[key[16 ]] | b0[key[17 ]]; + w <<= 8; + w |= (b1[key[18 ]] | b0[key[19 ]]) << 4; + w |= (b1[key[20 ]] | b0[key[21 ]]) << 2; + w |= b1[key[22 ]] | b0[key[23 ]]; + + method[0] = w; + + w = (b1[key[ 0+24]] | b0[key[ 1+24]]) << 4; + w |= (b1[key[ 2+24]] | b0[key[ 3+24]]) << 2; + w |= b1[key[ 4+24]] | b0[key[ 5+24]]; + w <<= 8; + w |= (b1[key[ 6+24]] | b0[key[ 7+24]]) << 4; + w |= (b1[key[ 8+24]] | b0[key[ 9+24]]) << 2; + w |= b1[key[10+24]] | b0[key[11+24]]; + w <<= 8; + w |= (b1[key[12+24]] | b0[key[13+24]]) << 4; + w |= (b1[key[14+24]] | b0[key[15+24]]) << 2; + w |= b1[key[16+24]] | b0[key[17+24]]; + w <<= 8; + w |= (b1[key[18+24]] | b0[key[19+24]]) << 4; + w |= (b1[key[20+24]] | b0[key[21+24]]) << 2; + w |= b1[key[22+24]] | b0[key[23+24]]; + + ROR(w, 4, 28); /* could be eliminated */ + method[1] = w; + + key += 48; + method += 2; + } while ( --n ); + return 0; +} + +static void DesSmallFipsEncrypt (DesData d, DesKeys r, DesData s) +{ + register u32 x, y, z; + + x = s [7]; + x <<= 8; + x |= s [6]; + x <<= 8; + x |= s [5]; + x <<= 8; + x |= s [4]; + y = s [3]; + y <<= 8; + y |= s [2]; + y <<= 8; + y |= s [1]; + y <<= 8; + y |= s [0]; + z = ((x >> 004) ^ y) & 0X0F0F0F0FL; + x ^= z << 004; + y ^= z; + z = ((y >> 020) ^ x) & 0X0000FFFFL; + y ^= z << 020; + x ^= z; + z = ((x >> 002) ^ y) & 0X33333333L; + x ^= z << 002; + y ^= z; + z = ((y >> 010) ^ x) & 0X00FF00FFL; + y ^= z << 010; + x ^= z; + x = x >> 1 | x << 31; + z = (x ^ y) & 0X55555555L; + y ^= z; + x ^= z; + y = y >> 1 | y << 31; + z = r [0]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [1]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [2]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [3]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [4]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [5]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [6]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [7]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [8]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [9]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [10]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [11]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [12]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [13]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [14]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [15]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [16]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [17]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [18]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [19]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [20]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [21]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [22]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [23]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [24]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [25]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [26]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [27]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [28]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [29]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [30]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [31]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + x = x << 1 | x >> 31; + z = (x ^ y) & 0X55555555L; + y ^= z; + x ^= z; + y = y << 1 | y >> 31; + z = ((x >> 010) ^ y) & 0X00FF00FFL; + x ^= z << 010; + y ^= z; + z = ((y >> 002) ^ x) & 0X33333333L; + y ^= z << 002; + x ^= z; + z = ((x >> 020) ^ y) & 0X0000FFFFL; + x ^= z << 020; + y ^= z; + z = ((y >> 004) ^ x) & 0X0F0F0F0FL; + y ^= z << 004; + x ^= z; + d [0] = x; + x >>= 8; + d [1] = x; + x >>= 8; + d [2] = x; + x >>= 8; + d [3] = x; + d [4] = y; + y >>= 8; + d [5] = y; + y >>= 8; + d [6] = y; + y >>= 8; + d [7] = y; + return; +} + +static void DesSmallFipsDecrypt (u8 *d, u32 *r, u8 *s) +{ + register u32 x, y, z; + x = s [7]; + x <<= 8; + x |= s [6]; + x <<= 8; + x |= s [5]; + x <<= 8; + x |= s [4]; + y = s [3]; + y <<= 8; + y |= s [2]; + y <<= 8; + y |= s [1]; + y <<= 8; + y |= s [0]; + z = ((x >> 004) ^ y) & 0X0F0F0F0FL; + x ^= z << 004; + y ^= z; + z = ((y >> 020) ^ x) & 0X0000FFFFL; + y ^= z << 020; + x ^= z; + z = ((x >> 002) ^ y) & 0X33333333L; + x ^= z << 002; + y ^= z; + z = ((y >> 010) ^ x) & 0X00FF00FFL; + y ^= z << 010; + x ^= z; + x = x >> 1 | x << 31; + z = (x ^ y) & 0X55555555L; + y ^= z; + x ^= z; + y = y >> 1 | y << 31; + z = r [31]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [30]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [29]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [28]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [27]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [26]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [25]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [24]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [23]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [22]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [21]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [20]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [19]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [18]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [17]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [16]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [15]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [14]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [13]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [12]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [11]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [10]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [9]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [8]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [7]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [6]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [5]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [4]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [3]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [2]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [1]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [0]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + x = x << 1 | x >> 31; + z = (x ^ y) & 0X55555555L; + y ^= z; + x ^= z; + y = y << 1 | y >> 31; + z = ((x >> 010) ^ y) & 0X00FF00FFL; + x ^= z << 010; + y ^= z; + z = ((y >> 002) ^ x) & 0X33333333L; + y ^= z << 002; + x ^= z; + z = ((x >> 020) ^ y) & 0X0000FFFFL; + x ^= z << 020; + y ^= z; + z = ((y >> 004) ^ x) & 0X0F0F0F0FL; + y ^= z << 004; + x ^= z; + d [0] = x; + x >>= 8; + d [1] = x; + x >>= 8; + d [2] = x; + x >>= 8; + d [3] = x; + d [4] = y; + y >>= 8; + d [5] = y; + y >>= 8; + d [6] = y; + y >>= 8; + d [7] = y; + return; +} + + +static int des_ede3_encrypt(struct cipher_context *cx, + const u8 *in, u8 *out, int size, int atomic) +{ + u8 input_buffer[8], trans_buffer1[8]; + u8 trans_buffer2[8], output_buffer[8]; + + u32 *key_sched; + + key_sched = cx->keyinfo; + + for (; size >= 8; size -= 8) { + memcpy(&input_buffer, in, 8); + in += 8; + DesSmallFipsEncrypt(trans_buffer1,key_sched,input_buffer); + DesSmallFipsDecrypt(trans_buffer2,key_sched+32,trans_buffer1); + DesSmallFipsEncrypt(output_buffer,key_sched+64,trans_buffer2); + memcpy(out, &output_buffer, 8); + out += 8; + } + return 0; +} + +static int des_ede3_decrypt(struct cipher_context *cx, + const u8 *in, u8 *out, int size, int atomic) +{ + u8 input_buffer[8], trans_buffer1[8]; + u8 trans_buffer2[8], output_buffer[8]; + + u32 *key_sched; + + key_sched = cx->keyinfo; + + for (; size >= 8; size -= 8) { + memcpy(&input_buffer, in, 8); + in += 8; + DesSmallFipsDecrypt(trans_buffer1,key_sched+64,input_buffer); + DesSmallFipsEncrypt(trans_buffer2,key_sched+32,trans_buffer1); + DesSmallFipsDecrypt(output_buffer,key_sched,trans_buffer2); + memcpy(out, &output_buffer, 8); + out += 8; + } + return 0; +} + + +static void des_ede3_lock(void) +{ + MOD_INC_USE_COUNT; +} + +static void des_ede3_unlock(void) +{ + MOD_DEC_USE_COUNT; +} + + +#define CIPHER_BITS_64 +#define CIPHER_NAME(x) des_ede3##x +#include "gen-cbc.h" +#include "gen-ecb.h" + +#define DES_EDE3_KEY_SCHEDULE_SIZE (3*32*sizeof(u32)) + +static struct cipher_implementation des_ede3_ecb = { + {{NULL,NULL}, CIPHER_MODE_ECB, "des_ede3-ecb"}, + blocksize: 8, + ivsize: 0, + key_schedule_size: DES_EDE3_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_64, + INIT_CIPHER_BLKOPS(des_ede3_ecb), + INIT_CIPHER_OPS(des_ede3) +}; + +static struct cipher_implementation des_ede3_cbc = { + {{NULL,NULL}, CIPHER_MODE_CBC, "des_ede3-cbc"}, + blocksize: 8, + ivsize: 8, + key_schedule_size: DES_EDE3_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_64 | CIPHER_KEYSIZE_128 | + CIPHER_KEYSIZE_192, + INIT_CIPHER_BLKOPS(des_ede3_cbc), + INIT_CIPHER_OPS(des_ede3) +}; + +static int __init init_des_ede3(void) +{ + if (register_cipher(&des_ede3_ecb)) + printk(KERN_WARNING "Couldn't register des_ede3-ecb encryption\n"); + if (register_cipher(&des_ede3_cbc)) + printk(KERN_WARNING "Couldn't register des_ede3-cbc encryption\n"); + + return 0; +} + +static void __exit cleanup_des_ede3(void) +{ + if (unregister_cipher(&des_ede3_ecb)) + printk(KERN_WARNING "Couldn't unregister des_ede3-ecb encryption\n"); + if (unregister_cipher(&des_ede3_cbc)) + printk(KERN_WARNING "Couldn't unregister des_ede3-cbc encryption\n"); +} + +module_init(init_des_ede3); +module_exit(cleanup_des_ede3); diff -urN lin.2.4.3/crypto/cipher-des.c int.2.4.3/crypto/cipher-des.c --- lin.2.4.3/crypto/cipher-des.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/cipher-des.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,1238 @@ +/* + * Sourcecode created by descore. Descore is under GPL and from + * Dana L. How . + * + * Modified by Raimar Falke for the Linux-Kernel. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License + * as published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + */ + +#include +#include +#include +#include +#include +#include + +#define ROR(d,c,o) d = d >> c | d << o + +typedef u8 DesData[8]; +typedef u32 DesKeys[32]; + +u32 des_keymap[] = { + 0x02080008, 0x02082000, 0x00002008, 0x00000000, + 0x02002000, 0x00080008, 0x02080000, 0x02082008, + 0x00000008, 0x02000000, 0x00082000, 0x00002008, + 0x00082008, 0x02002008, 0x02000008, 0x02080000, + 0x00002000, 0x00082008, 0x00080008, 0x02002000, + 0x02082008, 0x02000008, 0x00000000, 0x00082000, + 0x02000000, 0x00080000, 0x02002008, 0x02080008, + 0x00080000, 0x00002000, 0x02082000, 0x00000008, + 0x00080000, 0x00002000, 0x02000008, 0x02082008, + 0x00002008, 0x02000000, 0x00000000, 0x00082000, + 0x02080008, 0x02002008, 0x02002000, 0x00080008, + 0x02082000, 0x00000008, 0x00080008, 0x02002000, + 0x02082008, 0x00080000, 0x02080000, 0x02000008, + 0x00082000, 0x00002008, 0x02002008, 0x02080000, + 0x00000008, 0x02082000, 0x00082008, 0x00000000, + 0x02000000, 0x02080008, 0x00002000, 0x00082008, + + 0x08000004, 0x00020004, 0x00000000, 0x08020200, + 0x00020004, 0x00000200, 0x08000204, 0x00020000, + 0x00000204, 0x08020204, 0x00020200, 0x08000000, + 0x08000200, 0x08000004, 0x08020000, 0x00020204, + 0x00020000, 0x08000204, 0x08020004, 0x00000000, + 0x00000200, 0x00000004, 0x08020200, 0x08020004, + 0x08020204, 0x08020000, 0x08000000, 0x00000204, + 0x00000004, 0x00020200, 0x00020204, 0x08000200, + 0x00000204, 0x08000000, 0x08000200, 0x00020204, + 0x08020200, 0x00020004, 0x00000000, 0x08000200, + 0x08000000, 0x00000200, 0x08020004, 0x00020000, + 0x00020004, 0x08020204, 0x00020200, 0x00000004, + 0x08020204, 0x00020200, 0x00020000, 0x08000204, + 0x08000004, 0x08020000, 0x00020204, 0x00000000, + 0x00000200, 0x08000004, 0x08000204, 0x08020200, + 0x08020000, 0x00000204, 0x00000004, 0x08020004, + + 0x80040100, 0x01000100, 0x80000000, 0x81040100, + 0x00000000, 0x01040000, 0x81000100, 0x80040000, + 0x01040100, 0x81000000, 0x01000000, 0x80000100, + 0x81000000, 0x80040100, 0x00040000, 0x01000000, + 0x81040000, 0x00040100, 0x00000100, 0x80000000, + 0x00040100, 0x81000100, 0x01040000, 0x00000100, + 0x80000100, 0x00000000, 0x80040000, 0x01040100, + 0x01000100, 0x81040000, 0x81040100, 0x00040000, + 0x81040000, 0x80000100, 0x00040000, 0x81000000, + 0x00040100, 0x01000100, 0x80000000, 0x01040000, + 0x81000100, 0x00000000, 0x00000100, 0x80040000, + 0x00000000, 0x81040000, 0x01040100, 0x00000100, + 0x01000000, 0x81040100, 0x80040100, 0x00040000, + 0x81040100, 0x80000000, 0x01000100, 0x80040100, + 0x80040000, 0x00040100, 0x01040000, 0x81000100, + 0x80000100, 0x01000000, 0x81000000, 0x01040100, + + 0x04010801, 0x00000000, 0x00010800, 0x04010000, + 0x04000001, 0x00000801, 0x04000800, 0x00010800, + 0x00000800, 0x04010001, 0x00000001, 0x04000800, + 0x00010001, 0x04010800, 0x04010000, 0x00000001, + 0x00010000, 0x04000801, 0x04010001, 0x00000800, + 0x00010801, 0x04000000, 0x00000000, 0x00010001, + 0x04000801, 0x00010801, 0x04010800, 0x04000001, + 0x04000000, 0x00010000, 0x00000801, 0x04010801, + 0x00010001, 0x04010800, 0x04000800, 0x00010801, + 0x04010801, 0x00010001, 0x04000001, 0x00000000, + 0x04000000, 0x00000801, 0x00010000, 0x04010001, + 0x00000800, 0x04000000, 0x00010801, 0x04000801, + 0x04010800, 0x00000800, 0x00000000, 0x04000001, + 0x00000001, 0x04010801, 0x00010800, 0x04010000, + 0x04010001, 0x00010000, 0x00000801, 0x04000800, + 0x04000801, 0x00000001, 0x04010000, 0x00010800, + + 0x00000400, 0x00000020, 0x00100020, 0x40100000, + 0x40100420, 0x40000400, 0x00000420, 0x00000000, + 0x00100000, 0x40100020, 0x40000020, 0x00100400, + 0x40000000, 0x00100420, 0x00100400, 0x40000020, + 0x40100020, 0x00000400, 0x40000400, 0x40100420, + 0x00000000, 0x00100020, 0x40100000, 0x00000420, + 0x40100400, 0x40000420, 0x00100420, 0x40000000, + 0x40000420, 0x40100400, 0x00000020, 0x00100000, + 0x40000420, 0x00100400, 0x40100400, 0x40000020, + 0x00000400, 0x00000020, 0x00100000, 0x40100400, + 0x40100020, 0x40000420, 0x00000420, 0x00000000, + 0x00000020, 0x40100000, 0x40000000, 0x00100020, + 0x00000000, 0x40100020, 0x00100020, 0x00000420, + 0x40000020, 0x00000400, 0x40100420, 0x00100000, + 0x00100420, 0x40000000, 0x40000400, 0x40100420, + 0x40100000, 0x00100420, 0x00100400, 0x40000400, + + 0x00800000, 0x00001000, 0x00000040, 0x00801042, + 0x00801002, 0x00800040, 0x00001042, 0x00801000, + 0x00001000, 0x00000002, 0x00800002, 0x00001040, + 0x00800042, 0x00801002, 0x00801040, 0x00000000, + 0x00001040, 0x00800000, 0x00001002, 0x00000042, + 0x00800040, 0x00001042, 0x00000000, 0x00800002, + 0x00000002, 0x00800042, 0x00801042, 0x00001002, + 0x00801000, 0x00000040, 0x00000042, 0x00801040, + 0x00801040, 0x00800042, 0x00001002, 0x00801000, + 0x00001000, 0x00000002, 0x00800002, 0x00800040, + 0x00800000, 0x00001040, 0x00801042, 0x00000000, + 0x00001042, 0x00800000, 0x00000040, 0x00001002, + 0x00800042, 0x00000040, 0x00000000, 0x00801042, + 0x00801002, 0x00801040, 0x00000042, 0x00001000, + 0x00001040, 0x00801002, 0x00800040, 0x00000042, + 0x00000002, 0x00001042, 0x00801000, 0x00800002, + + 0x10400000, 0x00404010, 0x00000010, 0x10400010, + 0x10004000, 0x00400000, 0x10400010, 0x00004010, + 0x00400010, 0x00004000, 0x00404000, 0x10000000, + 0x10404010, 0x10000010, 0x10000000, 0x10404000, + 0x00000000, 0x10004000, 0x00404010, 0x00000010, + 0x10000010, 0x10404010, 0x00004000, 0x10400000, + 0x10404000, 0x00400010, 0x10004010, 0x00404000, + 0x00004010, 0x00000000, 0x00400000, 0x10004010, + 0x00404010, 0x00000010, 0x10000000, 0x00004000, + 0x10000010, 0x10004000, 0x00404000, 0x10400010, + 0x00000000, 0x00404010, 0x00004010, 0x10404000, + 0x10004000, 0x00400000, 0x10404010, 0x10000000, + 0x10004010, 0x10400000, 0x00400000, 0x10404010, + 0x00004000, 0x00400010, 0x10400010, 0x00004010, + 0x00400010, 0x00000000, 0x10404000, 0x10000010, + 0x10400000, 0x10004010, 0x00000010, 0x00404000, + + 0x00208080, 0x00008000, 0x20200000, 0x20208080, + 0x00200000, 0x20008080, 0x20008000, 0x20200000, + 0x20008080, 0x00208080, 0x00208000, 0x20000080, + 0x20200080, 0x00200000, 0x00000000, 0x20008000, + 0x00008000, 0x20000000, 0x00200080, 0x00008080, + 0x20208080, 0x00208000, 0x20000080, 0x00200080, + 0x20000000, 0x00000080, 0x00008080, 0x20208000, + 0x00000080, 0x20200080, 0x20208000, 0x00000000, + 0x00000000, 0x20208080, 0x00200080, 0x20008000, + 0x00208080, 0x00008000, 0x20000080, 0x00200080, + 0x20208000, 0x00000080, 0x00008080, 0x20200000, + 0x20008080, 0x20000000, 0x20200000, 0x00208000, + 0x20208080, 0x00008080, 0x00208000, 0x20200080, + 0x00200000, 0x20000080, 0x20008000, 0x00000000, + 0x00008000, 0x00200000, 0x20200080, 0x00208080, + 0x20000000, 0x20208000, 0x00000080, 0x20008080, +}; + +static u8 rotors[] = { + 34, 13, 5, 46, 47, 18, 32, 41, 11, 53, 33, 20, + 14, 36, 30, 24, 49, 2, 15, 37, 42, 50, 0, 21, + 38, 48, 6, 26, 39, 4, 52, 25, 12, 27, 31, 40, + 1, 17, 28, 29, 23, 51, 35, 7, 3, 22, 9, 43, + + 41, 20, 12, 53, 54, 25, 39, 48, 18, 31, 40, 27, + 21, 43, 37, 0, 1, 9, 22, 44, 49, 2, 7, 28, + 45, 55, 13, 33, 46, 11, 6, 32, 19, 34, 38, 47, + 8, 24, 35, 36, 30, 3, 42, 14, 10, 29, 16, 50, + + 55, 34, 26, 38, 11, 39, 53, 5, 32, 45, 54, 41, + 35, 2, 51, 14, 15, 23, 36, 3, 8, 16, 21, 42, + 6, 12, 27, 47, 31, 25, 20, 46, 33, 48, 52, 4, + 22, 7, 49, 50, 44, 17, 1, 28, 24, 43, 30, 9, + + 12, 48, 40, 52, 25, 53, 38, 19, 46, 6, 11, 55, + 49, 16, 10, 28, 29, 37, 50, 17, 22, 30, 35, 1, + 20, 26, 41, 4, 45, 39, 34, 31, 47, 5, 13, 18, + 36, 21, 8, 9, 3, 0, 15, 42, 7, 2, 44, 23, + + 26, 5, 54, 13, 39, 38, 52, 33, 31, 20, 25, 12, + 8, 30, 24, 42, 43, 51, 9, 0, 36, 44, 49, 15, + 34, 40, 55, 18, 6, 53, 48, 45, 4, 19, 27, 32, + 50, 35, 22, 23, 17, 14, 29, 1, 21, 16, 3, 37, + + 40, 19, 11, 27, 53, 52, 13, 47, 45, 34, 39, 26, + 22, 44, 7, 1, 2, 10, 23, 14, 50, 3, 8, 29, + 48, 54, 12, 32, 20, 38, 5, 6, 18, 33, 41, 46, + 9, 49, 36, 37, 0, 28, 43, 15, 35, 30, 17, 51, + + 54, 33, 25, 41, 38, 13, 27, 4, 6, 48, 53, 40, + 36, 3, 21, 15, 16, 24, 37, 28, 9, 17, 22, 43, + 5, 11, 26, 46, 34, 52, 19, 20, 32, 47, 55, 31, + 23, 8, 50, 51, 14, 42, 2, 29, 49, 44, 0, 10, + + 11, 47, 39, 55, 52, 27, 41, 18, 20, 5, 38, 54, + 50, 17, 35, 29, 30, 7, 51, 42, 23, 0, 36, 2, + 19, 25, 40, 31, 48, 13, 33, 34, 46, 4, 12, 45, + 37, 22, 9, 10, 28, 1, 16, 43, 8, 3, 14, 24, + + 18, 54, 46, 5, 6, 34, 48, 25, 27, 12, 45, 4, + 2, 24, 42, 36, 37, 14, 3, 49, 30, 7, 43, 9, + 26, 32, 47, 38, 55, 20, 40, 41, 53, 11, 19, 52, + 44, 29, 16, 17, 35, 8, 23, 50, 15, 10, 21, 0, + + 32, 11, 31, 19, 20, 48, 5, 39, 41, 26, 6, 18, + 16, 7, 1, 50, 51, 28, 17, 8, 44, 21, 2, 23, + 40, 46, 4, 52, 12, 34, 54, 55, 38, 25, 33, 13, + 3, 43, 30, 0, 49, 22, 37, 9, 29, 24, 35, 14, + + 46, 25, 45, 33, 34, 5, 19, 53, 55, 40, 20, 32, + 30, 21, 15, 9, 10, 42, 0, 22, 3, 35, 16, 37, + 54, 31, 18, 13, 26, 48, 11, 12, 52, 39, 47, 27, + 17, 2, 44, 14, 8, 36, 51, 23, 43, 7, 49, 28, + + 31, 39, 6, 47, 48, 19, 33, 38, 12, 54, 34, 46, + 44, 35, 29, 23, 24, 1, 14, 36, 17, 49, 30, 51, + 11, 45, 32, 27, 40, 5, 25, 26, 13, 53, 4, 41, + 0, 16, 3, 28, 22, 50, 10, 37, 2, 21, 8, 42, + + 45, 53, 20, 4, 5, 33, 47, 52, 26, 11, 48, 31, + 3, 49, 43, 37, 7, 15, 28, 50, 0, 8, 44, 10, + 25, 6, 46, 41, 54, 19, 39, 40, 27, 38, 18, 55, + 14, 30, 17, 42, 36, 9, 24, 51, 16, 35, 22, 1, + + 6, 38, 34, 18, 19, 47, 4, 13, 40, 25, 5, 45, + 17, 8, 2, 51, 21, 29, 42, 9, 14, 22, 3, 24, + 39, 20, 31, 55, 11, 33, 53, 54, 41, 52, 32, 12, + 28, 44, 0, 1, 50, 23, 7, 10, 30, 49, 36, 15, + + 20, 52, 48, 32, 33, 4, 18, 27, 54, 39, 19, 6, + 0, 22, 16, 10, 35, 43, 1, 23, 28, 36, 17, 7, + 53, 34, 45, 12, 25, 47, 38, 11, 55, 13, 46, 26, + 42, 3, 14, 15, 9, 37, 21, 24, 44, 8, 50, 29, + + 27, 6, 55, 39, 40, 11, 25, 34, 4, 46, 26, 13, + 7, 29, 23, 17, 42, 50, 8, 30, 35, 43, 24, 14, + 31, 41, 52, 19, 32, 54, 45, 18, 5, 20, 53, 33, + 49, 10, 21, 22, 16, 44, 28, 0, 51, 15, 2, 36, +}; + +static char parity[] = { +8,1,0,8,0,8,8,0,0,8,8,0,8,0,2,8,0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,3, +0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8, +0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8, +8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8,0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0, +0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8, +8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8,0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0, +8,0,0,8,0,8,8,0,0,8,8,0,8,0,0,8,0,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0, +4,8,8,0,8,0,0,8,8,0,0,8,0,8,8,0,8,5,0,8,0,8,8,0,0,8,8,0,8,0,6,8, +}; + +/* set up the method list from the key */ + +static int des_set_key(struct cipher_context *cx, + unsigned char *key, int keybytes, int atomic) +{ + register u32 n, w; + register char * b0, * b1; + char bits0[56], bits1[56]; + u32 *method; + + method=(u32 *)cx->keyinfo; + + if(keybytes<8) + return -EINVAL; + + /* check for bad parity and weak keys */ + b0 = parity; + n = b0[key[0]]; n <<= 4; + n |= b0[key[1]]; n <<= 4; + n |= b0[key[2]]; n <<= 4; + n |= b0[key[3]]; n <<= 4; + n |= b0[key[4]]; n <<= 4; + n |= b0[key[5]]; n <<= 4; + n |= b0[key[6]]; n <<= 4; + n |= b0[key[7]]; + w = 0X88888888L; + /* report bad parity in key */ + if ( n & w ) + return -1; + /* report a weak or semi-weak key */ + if ( !((n - (w >> 3)) & w) ) { /* 1 in 10^10 keys passes this test */ + if ( n < 0X41415151 ) { + if ( n < 0X31312121 ) { + if ( n < 0X14141515 ) { + /* 01 01 01 01 01 01 01 01 */ + if ( n == 0X11111111 ) return -2; + /* 01 1F 01 1F 01 0E 01 0E */ + if ( n == 0X13131212 ) return -2; + } else { + /* 01 E0 01 E0 01 F1 01 F1 */ + if ( n == 0X14141515 ) return -2; + /* 01 FE 01 FE 01 FE 01 FE */ + if ( n == 0X16161616 ) return -2; + } + } else { + if ( n < 0X34342525 ) { + /* 1F 01 1F 01 0E 01 0E 01 */ + if ( n == 0X31312121 ) return -2; + /* 1F 1F 1F 1F 0E 0E 0E 0E */ /* ? */ + if ( n == 0X33332222 ) return -2; + } else { + /* 1F E0 1F E0 0E F1 0E F1 */ + if ( n == 0X34342525 ) return -2; + /* 1F FE 1F FE 0E FE 0E FE */ + if ( n == 0X36362626 ) return -2; + } + } + } else { + if ( n < 0X61616161 ) { + if ( n < 0X44445555 ) { + /* E0 01 E0 01 F1 01 F1 01 */ + if ( n == 0X41415151 ) return -2; + /* E0 1F E0 1F F1 0E F1 0E */ + if ( n == 0X43435252 ) return -2; + } else { + /* E0 E0 E0 E0 F1 F1 F1 F1 */ /* ? */ + if ( n == 0X44445555 ) return -2; + /* E0 FE E0 FE F1 FE F1 FE */ + if ( n == 0X46465656 ) return -2; + } + } else { + if ( n < 0X64646565 ) { + /* FE 01 FE 01 FE 01 FE 01 */ + if ( n == 0X61616161 ) return -2; + /* FE 1F FE 1F FE 0E FE 0E */ + if ( n == 0X63636262 ) return -2; + } else { + /* FE E0 FE E0 FE F1 FE F1 */ + if ( n == 0X64646565 ) return -2; + /* FE FE FE FE FE FE FE FE */ + if ( n == 0X66666666 ) return -2; + } + } + } + } + + /* explode the bits */ + n = 56; + b0 = bits0; + b1 = bits1; + do { + w = (256 | *key++) << 2; + do { + --n; + b1[n] = 8 & w; + w >>= 1; + b0[n] = 4 & w; + } while ( w >= 16 ); + } while ( n ); + + /* put the bits in the correct places */ + n = 16; + key = rotors; + do { + w = (b1[key[ 0 ]] | b0[key[ 1 ]]) << 4; + w |= (b1[key[ 2 ]] | b0[key[ 3 ]]) << 2; + w |= b1[key[ 4 ]] | b0[key[ 5 ]]; + w <<= 8; + w |= (b1[key[ 6 ]] | b0[key[ 7 ]]) << 4; + w |= (b1[key[ 8 ]] | b0[key[ 9 ]]) << 2; + w |= b1[key[10 ]] | b0[key[11 ]]; + w <<= 8; + w |= (b1[key[12 ]] | b0[key[13 ]]) << 4; + w |= (b1[key[14 ]] | b0[key[15 ]]) << 2; + w |= b1[key[16 ]] | b0[key[17 ]]; + w <<= 8; + w |= (b1[key[18 ]] | b0[key[19 ]]) << 4; + w |= (b1[key[20 ]] | b0[key[21 ]]) << 2; + w |= b1[key[22 ]] | b0[key[23 ]]; + + method[0] = w; + + w = (b1[key[ 0+24]] | b0[key[ 1+24]]) << 4; + w |= (b1[key[ 2+24]] | b0[key[ 3+24]]) << 2; + w |= b1[key[ 4+24]] | b0[key[ 5+24]]; + w <<= 8; + w |= (b1[key[ 6+24]] | b0[key[ 7+24]]) << 4; + w |= (b1[key[ 8+24]] | b0[key[ 9+24]]) << 2; + w |= b1[key[10+24]] | b0[key[11+24]]; + w <<= 8; + w |= (b1[key[12+24]] | b0[key[13+24]]) << 4; + w |= (b1[key[14+24]] | b0[key[15+24]]) << 2; + w |= b1[key[16+24]] | b0[key[17+24]]; + w <<= 8; + w |= (b1[key[18+24]] | b0[key[19+24]]) << 4; + w |= (b1[key[20+24]] | b0[key[21+24]]) << 2; + w |= b1[key[22+24]] | b0[key[23+24]]; + + ROR(w, 4, 28); /* could be eliminated */ + method[1] = w; + + key += 48; + method += 2; + } while ( --n ); + return 0; +} + + +static void DesSmallFipsEncrypt (DesData d, DesKeys r, DesData s) +{ + register u32 x, y, z; + + x = s [7]; + x <<= 8; + x |= s [6]; + x <<= 8; + x |= s [5]; + x <<= 8; + x |= s [4]; + y = s [3]; + y <<= 8; + y |= s [2]; + y <<= 8; + y |= s [1]; + y <<= 8; + y |= s [0]; + z = ((x >> 004) ^ y) & 0X0F0F0F0FL; + x ^= z << 004; + y ^= z; + z = ((y >> 020) ^ x) & 0X0000FFFFL; + y ^= z << 020; + x ^= z; + z = ((x >> 002) ^ y) & 0X33333333L; + x ^= z << 002; + y ^= z; + z = ((y >> 010) ^ x) & 0X00FF00FFL; + y ^= z << 010; + x ^= z; + x = x >> 1 | x << 31; + z = (x ^ y) & 0X55555555L; + y ^= z; + x ^= z; + y = y >> 1 | y << 31; + z = r [0]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [1]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [2]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [3]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [4]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [5]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [6]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [7]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [8]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [9]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [10]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [11]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [12]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [13]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [14]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [15]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [16]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [17]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [18]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [19]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [20]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [21]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [22]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [23]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [24]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [25]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [26]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [27]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [28]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [29]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [30]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [31]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + x = x << 1 | x >> 31; + z = (x ^ y) & 0X55555555L; + y ^= z; + x ^= z; + y = y << 1 | y >> 31; + z = ((x >> 010) ^ y) & 0X00FF00FFL; + x ^= z << 010; + y ^= z; + z = ((y >> 002) ^ x) & 0X33333333L; + y ^= z << 002; + x ^= z; + z = ((x >> 020) ^ y) & 0X0000FFFFL; + x ^= z << 020; + y ^= z; + z = ((y >> 004) ^ x) & 0X0F0F0F0FL; + y ^= z << 004; + x ^= z; + d [0] = x; + x >>= 8; + d [1] = x; + x >>= 8; + d [2] = x; + x >>= 8; + d [3] = x; + d [4] = y; + y >>= 8; + d [5] = y; + y >>= 8; + d [6] = y; + y >>= 8; + d [7] = y; + return; +} + +static void DesSmallFipsDecrypt (u8 *d, u32 *r, u8 *s) +{ + register u32 x, y, z; + x = s [7]; + x <<= 8; + x |= s [6]; + x <<= 8; + x |= s [5]; + x <<= 8; + x |= s [4]; + y = s [3]; + y <<= 8; + y |= s [2]; + y <<= 8; + y |= s [1]; + y <<= 8; + y |= s [0]; + z = ((x >> 004) ^ y) & 0X0F0F0F0FL; + x ^= z << 004; + y ^= z; + z = ((y >> 020) ^ x) & 0X0000FFFFL; + y ^= z << 020; + x ^= z; + z = ((x >> 002) ^ y) & 0X33333333L; + x ^= z << 002; + y ^= z; + z = ((y >> 010) ^ x) & 0X00FF00FFL; + y ^= z << 010; + x ^= z; + x = x >> 1 | x << 31; + z = (x ^ y) & 0X55555555L; + y ^= z; + x ^= z; + y = y >> 1 | y << 31; + z = r [31]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [30]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [29]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [28]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [27]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [26]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [25]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [24]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [23]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [22]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [21]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [20]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [19]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [18]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [17]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [16]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [15]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [14]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [13]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [12]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [11]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [10]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [9]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [8]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [7]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [6]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [5]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [4]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [3]; + z ^= y; + z = z << 4 | z >> 28; + x ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [2]; + z ^= y; + x ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + x ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + z = r [1]; + z ^= x; + z = z << 4 | z >> 28; + y ^= * (u32 *) ((u8 *) (des_keymap + 448) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 384) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 320) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 256) + (0XFC & z)); + z = r [0]; + z ^= x; + y ^= * (u32 *) ((u8 *) (des_keymap + 192) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 128) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) (des_keymap + 64) + (0XFC & z)); + z >>= 8; + y ^= * (u32 *) ((u8 *) des_keymap + (0XFC & z)); + x = x << 1 | x >> 31; + z = (x ^ y) & 0X55555555L; + y ^= z; + x ^= z; + y = y << 1 | y >> 31; + z = ((x >> 010) ^ y) & 0X00FF00FFL; + x ^= z << 010; + y ^= z; + z = ((y >> 002) ^ x) & 0X33333333L; + y ^= z << 002; + x ^= z; + z = ((x >> 020) ^ y) & 0X0000FFFFL; + x ^= z << 020; + y ^= z; + z = ((y >> 004) ^ x) & 0X0F0F0F0FL; + y ^= z << 004; + x ^= z; + d [0] = x; + x >>= 8; + d [1] = x; + x >>= 8; + d [2] = x; + x >>= 8; + d [3] = x; + d [4] = y; + y >>= 8; + d [5] = y; + y >>= 8; + d [6] = y; + y >>= 8; + d [7] = y; + return; +} + +static int des_encrypt(struct cipher_context *cx, + const u8 *in, u8 *out, int size, int atomic) +{ + u8 input_buffer[8]; + u8 output_buffer[8]; + + for (; size >= 8; size -= 8) { + memcpy(&input_buffer, in, 8); + in += 8; + DesSmallFipsEncrypt(output_buffer,cx->keyinfo,input_buffer); + memcpy(out, &output_buffer, 8); + out += 8; + } + return 0; +} + +static int des_decrypt(struct cipher_context *cx, + const u8 *in, u8 *out, int size, int atomic) +{ + u8 input_buffer[8]; + u8 output_buffer[8]; + + for (; size >= 8; size -= 8) { + memcpy(&input_buffer, in, 8); + in += 8; + DesSmallFipsDecrypt(output_buffer,cx->keyinfo,input_buffer); + memcpy(out, &output_buffer, 8); + out += 8; + } + return 0; +} + +static void des_lock(void) +{ + MOD_INC_USE_COUNT; +} + +static void des_unlock(void) +{ + MOD_DEC_USE_COUNT; +} + + +#define CIPHER_BITS_64 +#define CIPHER_NAME(x) des##x +#include "gen-cbc.h" +#include "gen-ecb.h" + +#define DES_KEY_SCHEDULE_SIZE (32*sizeof(u32)) + +static struct cipher_implementation des_ecb = { + {{NULL,NULL}, CIPHER_MODE_ECB, "des-ecb"}, + blocksize: 8, + ivsize: 0, + key_schedule_size: DES_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_64, + INIT_CIPHER_BLKOPS(des_ecb), + INIT_CIPHER_OPS(des) +}; + +static struct cipher_implementation des_cbc = { + {{NULL,NULL}, CIPHER_MODE_CBC, "des-cbc"}, + blocksize: 8, + ivsize: 8, + key_schedule_size: DES_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_64, + INIT_CIPHER_BLKOPS(des_cbc), + INIT_CIPHER_OPS(des) +}; + +static int __init init_des(void) +{ + if (register_cipher(&des_ecb)) + printk(KERN_WARNING "Couldn't register des-ecb encryption\n"); + if (register_cipher(&des_cbc)) + printk(KERN_WARNING "Couldn't register des-cbc encryption\n"); + + return 0; +} + +static void __exit cleanup_des(void) +{ + if (unregister_cipher(&des_ecb)) + printk(KERN_WARNING "Couldn't unregister des-ecb encryption\n"); + if (unregister_cipher(&des_cbc)) + printk(KERN_WARNING "Couldn't unregister des-cbc encryption\n"); +} + +module_init(init_des); +module_exit(cleanup_des); diff -urN lin.2.4.3/crypto/cipher-dfc.c int.2.4.3/crypto/cipher-dfc.c --- lin.2.4.3/crypto/cipher-dfc.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/cipher-dfc.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,486 @@ +/* NOTE: This implementation has been changed from the original + source. See ChangeLog for more information. + Maintained by Alexander Kjeldaas + */ + +/* This is an independent implementation of the DFC encryption */ +/* algorithm designed by a team at CNRS and France Telecom and */ +/* submitted as a candidate in the US NIST Advanced Encryption */ +/* Standard (AES) programme. */ +/* */ +/* Copyright in this implementation is held by Dr B R Gladman but */ +/* I hereby give permission for its free direct or derivative use */ +/* subject to acknowledgment of its origin and compliance with any */ +/* conditions that the originators of DFC place on its use. */ +/* */ +/* My thanks go to Serge Vaudenay of the Ecole Normale Superieure */ +/* for providing test vectors. This implementation has also been */ +/* tested with an independent implementation by Dr Russell Bradford */ +/* (Department of Mathematical Sciences, University of Bath, Bath, */ +/* UK) and checks out. My thanks go to Russell for his help in */ +/* comparing our implementations and finding bugs (and for help in */ +/* resolving 'endian' issues before test vectors became available). */ +/* */ +/* Dr Brian Gladman (gladman@seven77.demon.co.uk) 27th July 1998 */ +/* */ + +/* The EES string is as follows (the abstract contains an error in + the last line of this sequence which changes KC and KD): + + 0xb7e15162, 0x8aed2a6a, 0xbf715880, 0x9cf4f3c7, + 0x62e7160f, 0x38b4da56, 0xa784d904, 0x5190cfef, + 0x324e7738, 0x926cfbe5, 0xf4bf8d8d, 0x8c31d763, + 0xda06c80a, 0xbb1185eb, 0x4f7c7b57, 0x57f59584, + + 0x90cfd47d, 0x7c19bb42, 0x158d9554, 0xf7b46bce, + 0xd55c4d79, 0xfd5f24d6, 0x613c31c3, 0x839a2ddf, + 0x8a9a276b, 0xcfbfa1c8, 0x77c56284, 0xdab79cd4, + 0xc2b3293d, 0x20e9e5ea, 0xf02ac60a, 0xcc93ed87, + + 0x4422a52e, 0xcb238fee, 0xe5ab6add, 0x835fd1a0, + 0x753d0a8f, 0x78e537d2, 0xb95bb79d, 0x8dcaec64, + 0x2c1e9f23, 0xb829b5c2, 0x780bf387, 0x37df8bb3, + 0x00d01334, 0xa0d0bd86, 0x45cbfa73, 0xa6160ffe, + + 0x393c48cb, 0xbbca060f, 0x0ff8ec6d, 0x31beb5cc, + 0xeed7f2f0, 0xbb088017, 0x163bc60d, 0xf45a0ecb, + 0x1bcd289b, 0x06cbbfea, 0x21ad08e1, 0x847f3f73, + 0x78d56ced, 0x94640d6e, 0xf0d3d37b, 0xe67008e1, + + 0x86d1bf27, 0x5b9b241d, 0xeb64749a, 0x47dfdfb9, + + Where: + + EES = RT(0) | RT(1) | ... | RT(63) | KD | KC + + Note that the abstract describing DFC is written + in big endian notation with the most significant + digits of a sequence of digits placed at the low + index positions in arrays. This format is used + here and is only converted to machine format at + the point that maths is done on any numbers in + the round function. + + The key input is thus treated as an array of 32 + bit words numbered from 0..3, 0..5 or 0..7 + depending on key length. The first (leftmost) + bit of this key string as defined in the DFC + abstract is the most significant bit of word 0 + and the rightmost bit of this string is the least + signicant bit of the highest numbered key word. + + The input and output blocks for the cipher are + also treated as arrays of 32 bit words numbered + from 0..3. The most significant bit of word 0 is + the 1st (leftmost) bit of the 128 bit input string + and the least significant bit of word 3 is the + last (rightmost) bit. + + Note that the inputs, the output and the key are + in Intel little endian format when BYTE_SWAP is + defined + +Timing data: + +Algorithm: dfc (dfc2.c) +128 bit key: +Key Setup: 7373 cycles +Encrypt: 1748 cycles = 14.6 mbits/sec +Decrypt: 1755 cycles = 14.6 mbits/sec +Mean: 1752 cycles = 14.6 mbits/sec +192 bit key: +Key Setup: 7359 cycles +Encrypt: 1757 cycles = 14.6 mbits/sec +Decrypt: 1765 cycles = 14.5 mbits/sec +Mean: 1761 cycles = 14.5 mbits/sec +256 bit key: +Key Setup: 7320 cycles +Encrypt: 1750 cycles = 14.6 mbits/sec +Decrypt: 1749 cycles = 14.6 mbits/sec +Mean: 1749 cycles = 14.6 mbits/sec + +*/ + +#include +#include +#include +#include +#include + +#include + +#if 0 +#define rotl rotl32 +#define rotr rotr32 +#else +#define rotl generic_rotl32 +#define rotr generic_rotr32 +#endif + +#define bswap(x) __be32_to_cpu(x) +#define io_swap(x) __cpu_to_be32(x) + +#define BYTE_SWAP + +/* The following arrays are all stored in big endian */ +/* format with 32 bit words at lower array positions */ +/* being more significant in multi-word values */ + +u4byte rt64[64] = +{ + 0xb7e15162, 0x8aed2a6a, 0xbf715880, 0x9cf4f3c7, + 0x62e7160f, 0x38b4da56, 0xa784d904, 0x5190cfef, + 0x324e7738, 0x926cfbe5, 0xf4bf8d8d, 0x8c31d763, + 0xda06c80a, 0xbb1185eb, 0x4f7c7b57, 0x57f59584, + + 0x90cfd47d, 0x7c19bb42, 0x158d9554, 0xf7b46bce, + 0xd55c4d79, 0xfd5f24d6, 0x613c31c3, 0x839a2ddf, + 0x8a9a276b, 0xcfbfa1c8, 0x77c56284, 0xdab79cd4, + 0xc2b3293d, 0x20e9e5ea, 0xf02ac60a, 0xcc93ed87, + + 0x4422a52e, 0xcb238fee, 0xe5ab6add, 0x835fd1a0, + 0x753d0a8f, 0x78e537d2, 0xb95bb79d, 0x8dcaec64, + 0x2c1e9f23, 0xb829b5c2, 0x780bf387, 0x37df8bb3, + 0x00d01334, 0xa0d0bd86, 0x45cbfa73, 0xa6160ffe, + + 0x393c48cb, 0xbbca060f, 0x0ff8ec6d, 0x31beb5cc, + 0xeed7f2f0, 0xbb088017, 0x163bc60d, 0xf45a0ecb, + 0x1bcd289b, 0x06cbbfea, 0x21ad08e1, 0x847f3f73, + 0x78d56ced, 0x94640d6e, 0xf0d3d37b, 0xe67008e1, +}; + +u4byte kc = 0xeb64749a; + +u4byte kd2[2] = +{ + 0x86d1bf27, 0x5b9b241d +}; + +u4byte ka2[6] = +{ + 0xb7e15162, 0x8aed2a6a, + 0xbf715880, 0x9cf4f3c7, + 0x62e7160f, 0x38b4da56, +}; + +u4byte kb2[6] = +{ + 0xa784d904, 0x5190cfef, + 0x324e7738, 0x926cfbe5, + 0xf4bf8d8d, 0x8c31d763, +}; + +u4byte ks8[8] = +{ 0xda06c80a, 0xbb1185eb, 0x4f7c7b57, 0x57f59584, + 0x90cfd47d, 0x7c19bb42, 0x158d9554, 0xf7b46bce, +}; + +#define lo(x) ((x) & 0x0000ffff) +#define hi(x) ((x) >> 16) + +void mult_64(u4byte r[4], const u4byte x[2], const u4byte y[2]) +{ u4byte x0, x1, x2, x3, y0, y1, y2, y3, t0, t1, t2, t3, c; + + x0 = lo(x[1]); x1 = hi(x[1]); x2 = lo(x[0]); x3 = hi(x[0]); + y0 = lo(y[1]); y1 = hi(y[1]); y2 = lo(y[0]); y3 = hi(y[0]); + + t0 = x0 * y0; r[0] = lo(t0); c = hi(t0); + + t0 = x0 * y1; t1 = x1 * y0; c += lo(t0) + lo(t1); + r[0] += (c << 16); c = hi(c) + hi(t0) + hi(t1); + + t0 = x0 * y2; t1 = x1 * y1; t2 = x2 * y0; + c += lo(t0) + lo(t1) + lo(t2); r[1] = lo(c); + c = hi(c) + hi(t0) + hi(t1) + hi(t2); + + t0 = x0 * y3; t1 = x1 * y2; t2 = x2 * y1; t3 = x3 * y0; + c += lo(t0) + lo(t1) + lo(t2) + lo(t3); r[1] += (c << 16); + c = hi(c) + hi(t0) + hi(t1) + hi(t2) + hi(t3); + + t0 = x1 * y3; t1 = x2 * y2; t2 = x3 * y1; + c += lo(t0) + lo(t1) + lo(t2); r[2] = lo(c); + c = hi(c) + hi(t0) + hi(t1) + hi(t2); + + t0 = x2 * y3; t1 = x3 * y2; c += lo(t0) + lo(t1); + r[2] += (c << 16); c = hi(c) + hi(t0) + hi(t1); + + r[3] = c + x3 * y3; +}; + +void add_64(u4byte r[4], const u4byte hi, const u4byte lo) +{ + if((r[0] += lo) < lo) + if(!++r[1]) + if(!++r[2]) + ++r[3]; + + if((r[1] += hi) < hi) + if(!++r[2]) + ++r[3]; +}; + +void mult_13(u4byte r[3]) +{ u4byte c, d; + + c = 13 * lo(r[0]); + d = hi(r[0]); + r[0] = lo(c); + c = hi(c) + 13 * d; + r[0] += (c << 16); + c = hi(c) + 13 * lo(r[1]); + d = hi(r[1]); + r[1] = lo(c); + c = hi(c) + 13 * d; + r[1] += (c << 16); + r[2] = hi(c); +}; + +/* Where necessary this is where conversion from big endian to */ +/* little endian format is performed. Since all the maths is */ +/* little endian care is needed when 64 bit blocks are being */ +/* used to get them in the right order by reversing the order */ +/* in which these are stored. This applies to the key array */ +/* which gives the two values A and B and to the constant KD. */ +/* Since the input and output blocks are big endian we also */ +/* have to invert the order of the 32 bit words in the 64 bit */ +/* blocks being processed. */ + +void r_fun(u4byte outp[2], const u4byte inp[2], const u4byte key[4]) +{ u4byte acc[5], b, t; + + mult_64(acc, inp, key); add_64(acc, key[2], key[3]); + + /* we need the value in the accumulator mod 2^64 + 13 so if */ + /* the accumulator value is hi * 2^64 + lo we need to find */ + /* a k value such that r = hi * 2^64 + lo - k * (2^64 + 13) */ + /* is 0 <= r < 2^64 + 13. We can see that k will be close */ + /* to hi in value - it may equal hi but will not be greater */ + /* and we can let k = hi - e with e >= 0 so that r is given */ + /* by r = e * (2^64 + 13) + lo - 13 * hi. If we compute the */ + /* lo - 13 * hi value, the overflow into the top 64 bits of */ + /* the accumulator has to be 'zeroed' by the e * (2^64 + 13)*/ + /* term and this sets the e value (in fact such an overlow */ + /* is only removed when the lower word is higher than 12). */ + + mult_13(&acc[2]); /* multiply top of accumulator by 13 */ + + /* calculate lo - 13 * hi in acc[0] and acc[1] with any */ + /* overflow into top 64 bits in b */ + + t = acc[0]; acc[0] -= acc[2]; b = (acc[0] > t ? 1 : 0); + + t = acc[1]; acc[1] -= acc[3] + b; + b = (acc[1] > t ? 1 : (acc[1] == t ? b : 0)); + + b = 13 * (acc[4] + b); /* overflow into top 64 bits of acc */ + + if(((acc[0] += b) < b) && !(++acc[1])) + { + if(acc[0] > 12) + + acc[0] -= 13; + } + + /* do the confusion permutation */ + + t = acc[1] ^ kc; b = acc[0] ^ rt64[acc[1] >> 26]; + + b += kd2[0] + ((t += kd2[1]) < kd2[1] ? 1 : 0); + + outp[0] ^= b; outp[1] ^= t; +}; + +int dfc_set_key(struct cipher_context *cx, unsigned char *key, + int key_len, int atomic) +{ u4byte *in_key = (u32 *)key; + /* l_key - storage for the key schedule */ + u4byte *l_key = cx->keyinfo; + u4byte i, lk[32], rk[4]; + key_len *= 8; + + for(i = 0; i < key_len / 32; ++i) + + lk[i] = io_swap(in_key[i]); + + /* pad the key with the KS array */ + + for(i = 0; i < 8 - key_len / 32; ++i) /* K|KS */ + + lk[i + key_len / 32] = ks8[i]; + + /* do the reordering of the key parameters */ + /* the OAP[1]|OBP[1]|OAP[2]... sequence is */ + /* at lk[0]... and the other at lk[16]... */ + + lk[18] = lk[5]; lk[19] = lk[2]; /* EBP */ + lk[16] = lk[1]; lk[17] = lk[6]; /* EAP */ + lk[ 2] = lk[4]; lk[ 3] = lk[3]; /* OBP */ + lk[ 0] = lk[0]; lk[ 1] = lk[7]; /* OAP */ + + /* create other elements using KA and KB */ + + for(i = 0; i < 6; i += 2) + { + lk[i + i + 4] = lk[ 0] ^ ka2[i]; /* OAP[i] ms */ + lk[i + i + 5] = lk[ 1] ^ ka2[i + 1]; /* OAP[i] ls */ + lk[i + i + 6] = lk[ 2] ^ kb2[i]; /* OBP[i] ms */ + lk[i + i + 7] = lk[ 3] ^ kb2[i + 1]; /* OBP[i] ls */ + lk[i + i + 20] = lk[16] ^ ka2[i]; /* EAP[i] ms */ + lk[i + i + 21] = lk[17] ^ ka2[i + 1]; /* EAP[i] ls */ + lk[i + i + 22] = lk[18] ^ kb2[i]; /* EBP[i] ms */ + lk[i + i + 23] = lk[19] ^ kb2[i + 1]; /* EBP[i] ls */ + } + + rk[0] = rk[1] = rk[2] = rk[3] = 0; + + /* do the 4 round key mixing encryption */ + + for(i = 0; i < 32; i += 8) + { + r_fun(rk, rk + 2, lk); /* R2|R1 */ + r_fun(rk + 2, rk, lk + 4); /* R2|R3 */ + r_fun(rk, rk + 2, lk + 8); /* R4|R3 */ + r_fun(rk + 2, rk, lk + 12); /* R4|R5 */ + + /* keep key in big endian format with */ + /* the most significant 32 bit words */ + /* first (lowest) in the key schedule */ + /* - note that the upper and lower 64 */ + /* bit blocks are in inverse order at */ + /* this point in the loop */ + + l_key[i + 0] = rk[2]; l_key[i + 1] = rk[3]; + l_key[i + 2] = rk[0]; l_key[i + 3] = rk[1]; + + r_fun(rk + 2, rk, lk + 16); /* R1|R2 */ + r_fun(rk, rk + 2, lk + 20); /* R3|R2 */ + r_fun(rk + 2, rk, lk + 24); /* R3|R4 */ + r_fun(rk, rk + 2, lk + 28); /* R5|R4 */ + + l_key[i + 4] = rk[0]; l_key[i + 5] = rk[1]; + l_key[i + 6] = rk[2]; l_key[i + 7] = rk[3]; + } + + return 0; +}; + +int dfc_encrypt(struct cipher_context *cx, const u8 *in, u8 *out, + int size, int atomic) +{ u4byte *l_key = cx->keyinfo; + u32 *in_blk = (u32 *)in; + u32 *out_blk = (u32 *)out; + u4byte blk[4]; + + /* the input/output format is big endian - */ + /* any reversals needed are performed when */ + /* maths is done in the round function */ + + blk[0] = io_swap(in_blk[0]); blk[1] = io_swap(in_blk[1]); + blk[2] = io_swap(in_blk[2]); blk[3] = io_swap(in_blk[3]); + + r_fun(blk, blk + 2, l_key + 0); /* R2|R1 */ + r_fun(blk + 2, blk, l_key + 4); /* R2|R3 */ + r_fun(blk, blk + 2, l_key + 8); /* R4|R3 */ + r_fun(blk + 2, blk, l_key + 12); /* R4|R5 */ + r_fun(blk, blk + 2, l_key + 16); /* R6|R5 */ + r_fun(blk + 2, blk, l_key + 20); /* R6|R7 */ + r_fun(blk, blk + 2, l_key + 24); /* R8|R7 */ + r_fun(blk + 2, blk, l_key + 28); /* R8|R9 */ + + /* swap order to obtain the result R9|R8 */ + + out_blk[0] = io_swap(blk[2]); out_blk[1] = io_swap(blk[3]); + out_blk[2] = io_swap(blk[0]); out_blk[3] = io_swap(blk[1]); + return 0; +}; + +int dfc_decrypt(struct cipher_context *cx, const u8 *in, u8 *out, + int size, int atomic) +{ u4byte *l_key = cx->keyinfo; + u32 *in_blk = (u32 *)in; + u32 *out_blk = (u32 *)out; + u4byte blk[4]; + + /* the input/output format is big endian - */ + /* any reversals needed are performed when */ + /* maths is done in the round function */ + + blk[0] = io_swap(in_blk[0]); blk[1] = io_swap(in_blk[1]); + blk[2] = io_swap(in_blk[2]); blk[3] = io_swap(in_blk[3]); + + r_fun(blk, blk + 2, l_key + 28); /* R7|R8 */ + r_fun(blk + 2, blk, l_key + 24); /* R7|R6 */ + r_fun(blk, blk + 2, l_key + 20); /* R5|R6 */ + r_fun(blk + 2, blk, l_key + 16); /* R5|R4 */ + r_fun(blk, blk + 2, l_key + 12); /* R3|R4 */ + r_fun(blk + 2, blk, l_key + 8); /* R3|R2 */ + r_fun(blk, blk + 2, l_key + 4); /* R1|R2 */ + r_fun(blk + 2, blk, l_key ); /* R1|R0 */ + + /* swap order to obtain the result R1|R0 */ + + out_blk[0] = io_swap(blk[2]); out_blk[1] = io_swap(blk[3]); + out_blk[2] = io_swap(blk[0]); out_blk[3] = io_swap(blk[1]); + return 0; +}; + +static void dfc_lock(void) +{ + MOD_INC_USE_COUNT; +} + +static void dfc_unlock(void) +{ + MOD_DEC_USE_COUNT; +} + +#define CIPHER_BITS_128 +#define CIPHER_NAME(x) dfc##x +#include "gen-cbc.h" +#include "gen-ecb.h" + +#define DFC_KEY_SCHEDULE_SIZE (32*sizeof(u32)) + +static struct cipher_implementation dfc_ecb = { + {{NULL,NULL}, CIPHER_MODE_ECB, "dfc-ecb"}, + blocksize: 16, + ivsize: 0, + key_schedule_size: DFC_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(dfc_ecb), + INIT_CIPHER_OPS(dfc) +}; + +static struct cipher_implementation dfc_cbc = { + {{NULL,NULL}, CIPHER_MODE_CBC, "dfc-cbc"}, + blocksize: 16, + ivsize: 16, + key_schedule_size: DFC_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(dfc_cbc), + INIT_CIPHER_OPS(dfc) +}; + + +static int __init init_dfc(void) +{ + if (register_cipher(&dfc_ecb)) + printk(KERN_WARNING "Couldn't register dfc-ecb encryption\n"); + if (register_cipher(&dfc_cbc)) + printk(KERN_WARNING "Couldn't register dfc-cbc encryption\n"); + + return 0; +} + +static void __exit cleanup_dfc(void) +{ + if (unregister_cipher(&dfc_ecb)) + printk(KERN_WARNING "Couldn't unregister dfc-ecb encryption\n"); + if (unregister_cipher(&dfc_cbc)) + printk(KERN_WARNING "Couldn't unregister dfc-cbc encryption\n"); +} + +module_init(init_dfc); +module_exit(cleanup_dfc); diff -urN lin.2.4.3/crypto/cipher-idea.c int.2.4.3/crypto/cipher-idea.c --- lin.2.4.3/crypto/cipher-idea.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/cipher-idea.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,412 @@ +/* + * idea.c - C source code for IDEA block cipher. + * IDEA (International Data Encryption Algorithm), formerly known as + * IPES (Improved Proposed Encryption Standard). + * Algorithm developed by Xuejia Lai and James L. Massey, of ETH Zurich. + * This implementation modified and derived from original C code + * developed by Xuejia Lai. + * Zero-based indexing added, names changed from IPES to IDEA. + * CFB functions added. Random number routines added. + * + * Extensively optimized and restructured by Colin Plumb. + * + * There are two adjustments that can be made to this code to + * speed it up. Defaults may be used for PCs. Only the -DIDEA32 + * pays off significantly if selectively set or not set. + * Experiment to see what works best for your machine. + * + * Multiplication: default is inline, -DAVOID_JUMPS uses a + * different version that does not do any conditional + * jumps (a few percent worse on a SPARC), while + * -DSMALL_CACHE takes it out of line to stay + * within a small on-chip code cache. + * Variables: normally, 16-bit variables are used, but some + * machines (notably RISCs) do not have 16-bit registers, + * so they do a great deal of masking. -DIDEA32 uses "int" + * register variables and masks explicitly only where + * necessary. On a SPARC, for example, this boosts + * performace by 30%. + * + * The IDEA(tm) block cipher is covered by patents held by ETH and a + * Swiss company called Ascom-Tech AG. The Swiss patent number is + * PCT/CH91/00117, the European patent number is EP 0 482 154 B1, and + * the U.S. patent number is US005214703. IDEA(tm) is a trademark of + * Ascom-Tech AG. There is no license fee required for noncommercial + * use. Commercial users may obtain licensing details from Dieter + * Profos, Ascom Tech AG, Solothurn Lab, Postfach 151, 4502 Solothurn, + * Switzerland, Tel +41 65 242885, Fax +41 65 235761. + * + * The IDEA block cipher uses a 64-bit block size, and a 128-bit key + * size. It breaks the 64-bit cipher block into four 16-bit words + * because all of the primitive inner operations are done with 16-bit + * arithmetic. It likewise breaks the 128-bit cipher key into eight + * 16-bit words. + * + * For further information on the IDEA cipher, see the book: + * Xuejia Lai, "On the Design and Security of Block Ciphers", + * ETH Series on Information Processing (ed. J.L. Massey) Vol 1, + * Hartung-Gorre Verlag, Konstanz, Switzerland, 1992. ISBN + * 3-89191-573-X. + * + * This code runs on arrays of bytes by taking pairs in big-endian + * order to make the 16-bit words that IDEA uses internally. This + * produces the same result regardless of the byte order of the + * native CPU. + */ + +#include +#include +#include +#include +#include +#include + +#define IDEAKEYSIZE 16 +#define IDEABLOCKSIZE 8 + +#define IDEAROUNDS 8 +#define IDEAKEYLEN (6*IDEAROUNDS+4) + +#define low16(x) ((x) & 0xFFFF) +typedef unsigned char byte; + +typedef struct { + u16 ek[IDEAKEYLEN]; + u16 dk[IDEAKEYLEN]; +} IDEA_context; + +#if defined(__mc68000__) || defined (__sparc__) || defined (__PPC__) \ + || (defined(__mips__) && (defined(MIPSEB) || defined (__MIPSEB__)) ) +#define BIG_ENDIAN_HOST 1 +#else +#define LITTLE_ENDIAN_HOST 1 +#endif + +/* + * Compute the multiplicative inverse of x, modulo 65537, using + * Euclid's algorithm. It is unrolled twice to avoid swapping the + * registers each iteration, and some subtracts of t have been changed + * to adds. + */ +static u16 mulInv(u16 x) +{ + u16 t0, t1; + u16 q, y; + + if (x <= 1) + return x; /* 0 and 1 are self-inverse */ + t1 = 0x10001L / x; /* Since x >= 2, this fits into 16 bits */ + y = 0x10001L % x; + if (y == 1) + return low16(1 - t1); + t0 = 1; + do { + q = x / y; + x = x % y; + t0 += q * t1; + if (x == 1) + return t0; + q = y / x; + y = y % x; + t1 += q * t0; + } while (y != 1); + return low16(1 - t1); +} + +/* + * Expand a 128-bit user key to a working encryption key ek + */ +static void ideaExpandKey(byte const *userkey, u16 * ek) +{ + int i, j; + + for (j = 0; j < 8; j++) { + ek[j] = (userkey[0] << 8) + userkey[1]; + userkey += 2; + } + for (i = 0; j < IDEAKEYLEN; j++) { + i++; + ek[i + 7] = ek[i & 7] << 9 | ek[(i + 1) & 7] >> 7; + ek += i & 8; + i &= 7; + } +} + +/* + * Compute IDEA decryption key dk from an expanded IDEA encryption key + * ek Note that the input and output may be the same. Thus, the key + * is inverted into an internal buffer, and then copied to the output. + */ +static void ideaInvertKey(u16 const *ek, u16 dk[IDEAKEYLEN]) +{ + int i; + u16 t1, t2, t3; + u16 temp[IDEAKEYLEN]; + u16 *p = temp + IDEAKEYLEN; + + t1 = mulInv(*ek++); + t2 = -*ek++; + t3 = -*ek++; + *--p = mulInv(*ek++); + *--p = t3; + *--p = t2; + *--p = t1; + + for (i = 0; i < IDEAROUNDS - 1; i++) { + t1 = *ek++; + *--p = *ek++; + *--p = t1; + + t1 = mulInv(*ek++); + t2 = -*ek++; + t3 = -*ek++; + *--p = mulInv(*ek++); + *--p = t2; + *--p = t3; + *--p = t1; + } + t1 = *ek++; + *--p = *ek++; + *--p = t1; + + t1 = mulInv(*ek++); + t2 = -*ek++; + t3 = -*ek++; + *--p = mulInv(*ek++); + *--p = t3; + *--p = t2; + *--p = t1; + /* Copy and destroy temp copy */ + memcpy(dk, temp, sizeof(temp)); + memset(&temp,0,sizeof(temp)); +} + +/* IDEA encryption/decryption algorithm */ +/* Note that in and out can be the same buffer */ +static void ideaCipher(u16 const inbuf[4], u16 outbuf[4], + u16 const *key) +{ + register u16 x1, x2, x3, x4, s2, s3; + u16 *in, *out; + register u16 t16; /* Temporaries needed by MUL macro */ + register u32 t32; + int r = IDEAROUNDS; +#define MUL(x,y) \ + ((t16 = (y)) ? \ + (x=low16(x)) ? \ + t32 = (u32)x*t16, \ + x = low16(t32), \ + t16 = t32>>16, \ + x = (x-t16)+(x> 8) | (x1 << 8); + x2 = (x2 >> 8) | (x2 << 8); + x3 = (x3 >> 8) | (x3 << 8); + x4 = (x4 >> 8) | (x4 << 8); +#endif + do { + MUL(x1, *key++); + x2 += *key++; + x3 += *key++; + MUL(x4, *key++); + + s3 = x3; + x3 ^= x1; + MUL(x3, *key++); + s2 = x2; + x2 ^= x4; + x2 += x3; + MUL(x2, *key++); + x3 += x2; + + x1 ^= x2; + x4 ^= x3; + + x2 ^= s3; + x3 ^= s2; + } while (--r); + MUL(x1, *key++); + x3 += *key++; + x2 += *key++; + MUL(x4, *key); + + out = (u16 *) outbuf; +#ifdef LITTLE_ENDIAN_HOST + *out++ = x1; + *out++ = x3; + *out++ = x2; + *out = x4; +#else + x1 = low16(x1); + x2 = low16(x2); + x3 = low16(x3); + x4 = low16(x4); + *out++ = (x1 >> 8) | (x1 << 8); + *out++ = (x3 >> 8) | (x3 << 8); + *out++ = (x2 >> 8) | (x2 << 8); + *out = (x4 >> 8) | (x4 << 8); +#endif +} + +int idea_encrypt(struct cipher_context *cx, + const u8 *in, u8 *out, int size, int atomic) +{ + IDEA_context *c=(IDEA_context *)cx->keyinfo; + + u16 input_buffer[4]; + u16 output_buffer[4]; + u32 *in_blk = (u32 *)in; + u32 *out_blk = (u32 *)out; + u32 n; + + for (; size >= 8; size -= 8) + { + n=*in_blk++; + input_buffer[0]=n & 0xffff; + n=n>>16; + input_buffer[1]=n & 0xffff; + + n=*in_blk++; + input_buffer[2]=n & 0xffff; + n=n>>16; + input_buffer[3]=n & 0xffff; + + ideaCipher( input_buffer,output_buffer, c->ek ); + + n=0; + n|=output_buffer[1]; + n=n<<16; + n|=output_buffer[0]; + + *out_blk++=n; + + n=0; + n|=output_buffer[3]; + n=n<<16; + n|=output_buffer[2]; + + *out_blk++=n; + } + return 0; +} + +int idea_decrypt(struct cipher_context *cx, + const u8 *in, u8 *out, int size, int atomic) +{ + IDEA_context *c=(IDEA_context *)cx->keyinfo; + + u16 input_buffer[8]; + u16 output_buffer[8]; + u32 *in_blk = (u32 *)in; + u32 *out_blk = (u32 *)out; + u32 n; + + for (; size >= 8; size -= 8) + { + n=*in_blk++; + input_buffer[0]=n & 0xffff; + n=n>>16; + input_buffer[1]=n & 0xffff; + + n=*in_blk++; + input_buffer[2]=n & 0xffff; + n=n>>16; + input_buffer[3]=n & 0xffff; + + ideaCipher( input_buffer,output_buffer, c->dk ); + + n=0; + n|=output_buffer[1]; + n=n<<16; + n|=output_buffer[0]; + + *out_blk++=n; + + n=0; + n|=output_buffer[3]; + n=n<<16; + n|=output_buffer[2]; + + *out_blk++=n; + } + return 0; +} + +int idea_set_key(struct cipher_context *cx, + unsigned char *key, int keybytes, int atomic) +{ + IDEA_context *c=(IDEA_context *)cx->keyinfo; + + if(keybytes != 16) + return -EINVAL; + + ideaExpandKey(key, c->ek); + ideaInvertKey(c->ek, c->dk); + return 0; +} + +static void idea_lock(void) +{ + MOD_INC_USE_COUNT; +} + +static void idea_unlock(void) +{ + MOD_DEC_USE_COUNT; +} + +#define CIPHER_BITS_64 +#define CIPHER_NAME(x) idea##x +#include "gen-cbc.h" +#include "gen-ecb.h" + + +static struct cipher_implementation idea_ecb = { + {{NULL,NULL}, CIPHER_MODE_ECB, "idea-ecb"}, + blocksize: 8, + ivsize: 0, + key_schedule_size: sizeof(IDEA_context), + key_size_mask: CIPHER_KEYSIZE_128, + INIT_CIPHER_BLKOPS(idea_ecb), + INIT_CIPHER_OPS(idea) +}; + +static struct cipher_implementation idea_cbc = { + {{NULL,NULL}, CIPHER_MODE_CBC, "idea-cbc"}, + blocksize: 8, + ivsize: 8, + key_schedule_size: sizeof(IDEA_context), + key_size_mask: CIPHER_KEYSIZE_128, + INIT_CIPHER_BLKOPS(idea_cbc), + INIT_CIPHER_OPS(idea) +}; + +static int __init init_idea(void) +{ + if (register_cipher(&idea_ecb)) + printk(KERN_WARNING "Couldn't register idea-ecb encryption\n"); + if (register_cipher(&idea_cbc)) + printk(KERN_WARNING "Couldn't register idea-cbc encryption\n"); + return 0; +} + +static void __exit cleanup_idea(void) +{ + if (unregister_cipher(&idea_ecb)) + printk(KERN_WARNING "Couldn't unregister idea-ecb encryption\n"); + if (unregister_cipher(&idea_cbc)) + printk(KERN_WARNING "Couldn't unregister idea-cbc encryption\n"); +} + +module_init(init_idea); +module_exit(cleanup_idea); diff -urN lin.2.4.3/crypto/cipher-mars.c int.2.4.3/crypto/cipher-mars.c --- lin.2.4.3/crypto/cipher-mars.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/cipher-mars.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,476 @@ +/* NOTE: This implementation has been changed from the original + source. See ChangeLog for more information. + Maintained by Alexander Kjeldaas + Oops.. this isn't reentrant yet. + */ + +/* This is an independent implementation of the MARS encryption */ +/* algorithm designed by a team at IBM as a candidate for the US */ +/* NIST Advanced Encryption Standard (AES) effort. The algorithm */ +/* is subject to Patent action by IBM, who intend to offer royalty */ +/* free use if a Patent is granted. */ +/* */ +/* Copyright in this implementation is held by Dr B R Gladman but */ +/* I hereby give permission for its free direct or derivative use */ +/* subject to acknowledgment of its origin and compliance with any */ +/* constraints that IBM place on the use of the MARS algorithm. */ +/* */ +/* Dr Brian Gladman (gladman@seven77.demon.co.uk) 4th October 1998 */ +/* */ +/* Timing data: + +Algorithm: mars (mars6.c) +128 bit key: +Key Setup: 4329 cycles +Encrypt: 383 cycles = 66.8 mbits/sec +Decrypt: 374 cycles = 68.4 mbits/sec +Mean: 379 cycles = 67.6 mbits/sec +192 bit key: +Key Setup: 4414 cycles +Encrypt: 379 cycles = 67.5 mbits/sec +Decrypt: 382 cycles = 67.0 mbits/sec +Mean: 381 cycles = 67.3 mbits/sec +256 bit key: +Key Setup: 4351 cycles +Encrypt: 387 cycles = 66.2 mbits/sec +Decrypt: 367 cycles = 69.8 mbits/sec +Mean: 377 cycles = 68.0 mbits/sec + +*/ + +#include +#include +#include +#include +#include + +#if 0 +#define rotl rotl32 +#define rotr rotr32 +#else +#define rotl generic_rotl32 +#define rotr generic_rotr32 +#endif + +static u4byte s_box[] = +{ + 0x09d0c479, 0x28c8ffe0, 0x84aa6c39, 0x9dad7287, /* 0x000 */ + 0x7dff9be3, 0xd4268361, 0xc96da1d4, 0x7974cc93, + 0x85d0582e, 0x2a4b5705, 0x1ca16a62, 0xc3bd279d, + 0x0f1f25e5, 0x5160372f, 0xc695c1fb, 0x4d7ff1e4, + 0xae5f6bf4, 0x0d72ee46, 0xff23de8a, 0xb1cf8e83, /* 0x010 */ + 0xf14902e2, 0x3e981e42, 0x8bf53eb6, 0x7f4bf8ac, + 0x83631f83, 0x25970205, 0x76afe784, 0x3a7931d4, + 0x4f846450, 0x5c64c3f6, 0x210a5f18, 0xc6986a26, + 0x28f4e826, 0x3a60a81c, 0xd340a664, 0x7ea820c4, /* 0x020 */ + 0x526687c5, 0x7eddd12b, 0x32a11d1d, 0x9c9ef086, + 0x80f6e831, 0xab6f04ad, 0x56fb9b53, 0x8b2e095c, + 0xb68556ae, 0xd2250b0d, 0x294a7721, 0xe21fb253, + 0xae136749, 0xe82aae86, 0x93365104, 0x99404a66, /* 0x030 */ + 0x78a784dc, 0xb69ba84b, 0x04046793, 0x23db5c1e, + 0x46cae1d6, 0x2fe28134, 0x5a223942, 0x1863cd5b, + 0xc190c6e3, 0x07dfb846, 0x6eb88816, 0x2d0dcc4a, + 0xa4ccae59, 0x3798670d, 0xcbfa9493, 0x4f481d45, /* 0x040 */ + 0xeafc8ca8, 0xdb1129d6, 0xb0449e20, 0x0f5407fb, + 0x6167d9a8, 0xd1f45763, 0x4daa96c3, 0x3bec5958, + 0xababa014, 0xb6ccd201, 0x38d6279f, 0x02682215, + 0x8f376cd5, 0x092c237e, 0xbfc56593, 0x32889d2c, /* 0x050 */ + 0x854b3e95, 0x05bb9b43, 0x7dcd5dcd, 0xa02e926c, + 0xfae527e5, 0x36a1c330, 0x3412e1ae, 0xf257f462, + 0x3c4f1d71, 0x30a2e809, 0x68e5f551, 0x9c61ba44, + 0x5ded0ab8, 0x75ce09c8, 0x9654f93e, 0x698c0cca, /* 0x060 */ + 0x243cb3e4, 0x2b062b97, 0x0f3b8d9e, 0x00e050df, + 0xfc5d6166, 0xe35f9288, 0xc079550d, 0x0591aee8, + 0x8e531e74, 0x75fe3578, 0x2f6d829a, 0xf60b21ae, + 0x95e8eb8d, 0x6699486b, 0x901d7d9b, 0xfd6d6e31, /* 0x070 */ + 0x1090acef, 0xe0670dd8, 0xdab2e692, 0xcd6d4365, + 0xe5393514, 0x3af345f0, 0x6241fc4d, 0x460da3a3, + 0x7bcf3729, 0x8bf1d1e0, 0x14aac070, 0x1587ed55, + 0x3afd7d3e, 0xd2f29e01, 0x29a9d1f6, 0xefb10c53, /* 0x080 */ + 0xcf3b870f, 0xb414935c, 0x664465ed, 0x024acac7, + 0x59a744c1, 0x1d2936a7, 0xdc580aa6, 0xcf574ca8, + 0x040a7a10, 0x6cd81807, 0x8a98be4c, 0xaccea063, + 0xc33e92b5, 0xd1e0e03d, 0xb322517e, 0x2092bd13, /* 0x090 */ + 0x386b2c4a, 0x52e8dd58, 0x58656dfb, 0x50820371, + 0x41811896, 0xe337ef7e, 0xd39fb119, 0xc97f0df6, + 0x68fea01b, 0xa150a6e5, 0x55258962, 0xeb6ff41b, + 0xd7c9cd7a, 0xa619cd9e, 0xbcf09576, 0x2672c073, /* 0x0a0 */ + 0xf003fb3c, 0x4ab7a50b, 0x1484126a, 0x487ba9b1, + 0xa64fc9c6, 0xf6957d49, 0x38b06a75, 0xdd805fcd, + 0x63d094cf, 0xf51c999e, 0x1aa4d343, 0xb8495294, + 0xce9f8e99, 0xbffcd770, 0xc7c275cc, 0x378453a7, /* 0x0b0 */ + 0x7b21be33, 0x397f41bd, 0x4e94d131, 0x92cc1f98, + 0x5915ea51, 0x99f861b7, 0xc9980a88, 0x1d74fd5f, + 0xb0a495f8, 0x614deed0, 0xb5778eea, 0x5941792d, + 0xfa90c1f8, 0x33f824b4, 0xc4965372, 0x3ff6d550, /* 0x0c0 */ + 0x4ca5fec0, 0x8630e964, 0x5b3fbbd6, 0x7da26a48, + 0xb203231a, 0x04297514, 0x2d639306, 0x2eb13149, + 0x16a45272, 0x532459a0, 0x8e5f4872, 0xf966c7d9, + 0x07128dc0, 0x0d44db62, 0xafc8d52d, 0x06316131, /* 0x0d0 */ + 0xd838e7ce, 0x1bc41d00, 0x3a2e8c0f, 0xea83837e, + 0xb984737d, 0x13ba4891, 0xc4f8b949, 0xa6d6acb3, + 0xa215cdce, 0x8359838b, 0x6bd1aa31, 0xf579dd52, + 0x21b93f93, 0xf5176781, 0x187dfdde, 0xe94aeb76, /* 0x0e0 */ + 0x2b38fd54, 0x431de1da, 0xab394825, 0x9ad3048f, + 0xdfea32aa, 0x659473e3, 0x623f7863, 0xf3346c59, + 0xab3ab685, 0x3346a90b, 0x6b56443e, 0xc6de01f8, + 0x8d421fc0, 0x9b0ed10c, 0x88f1a1e9, 0x54c1f029, /* 0x0f0 */ + 0x7dead57b, 0x8d7ba426, 0x4cf5178a, 0x551a7cca, + 0x1a9a5f08, 0xfcd651b9, 0x25605182, 0xe11fc6c3, + 0xb6fd9676, 0x337b3027, 0xb7c8eb14, 0x9e5fd030, + + 0x6b57e354, 0xad913cf7, 0x7e16688d, 0x58872a69, /* 0x100 */ + 0x2c2fc7df, 0xe389ccc6, 0x30738df1, 0x0824a734, + 0xe1797a8b, 0xa4a8d57b, 0x5b5d193b, 0xc8a8309b, + 0x73f9a978, 0x73398d32, 0x0f59573e, 0xe9df2b03, + 0xe8a5b6c8, 0x848d0704, 0x98df93c2, 0x720a1dc3, /* 0x110 */ + 0x684f259a, 0x943ba848, 0xa6370152, 0x863b5ea3, + 0xd17b978b, 0x6d9b58ef, 0x0a700dd4, 0xa73d36bf, + 0x8e6a0829, 0x8695bc14, 0xe35b3447, 0x933ac568, + 0x8894b022, 0x2f511c27, 0xddfbcc3c, 0x006662b6, /* 0x120 */ + 0x117c83fe, 0x4e12b414, 0xc2bca766, 0x3a2fec10, + 0xf4562420, 0x55792e2a, 0x46f5d857, 0xceda25ce, + 0xc3601d3b, 0x6c00ab46, 0xefac9c28, 0xb3c35047, + 0x611dfee3, 0x257c3207, 0xfdd58482, 0x3b14d84f, /* 0x130 */ + 0x23becb64, 0xa075f3a3, 0x088f8ead, 0x07adf158, + 0x7796943c, 0xfacabf3d, 0xc09730cd, 0xf7679969, + 0xda44e9ed, 0x2c854c12, 0x35935fa3, 0x2f057d9f, + 0x690624f8, 0x1cb0bafd, 0x7b0dbdc6, 0x810f23bb, /* 0x140 */ + 0xfa929a1a, 0x6d969a17, 0x6742979b, 0x74ac7d05, + 0x010e65c4, 0x86a3d963, 0xf907b5a0, 0xd0042bd3, + 0x158d7d03, 0x287a8255, 0xbba8366f, 0x096edc33, + 0x21916a7b, 0x77b56b86, 0x951622f9, 0xa6c5e650, /* 0x150 */ + 0x8cea17d1, 0xcd8c62bc, 0xa3d63433, 0x358a68fd, + 0x0f9b9d3c, 0xd6aa295b, 0xfe33384a, 0xc000738e, + 0xcd67eb2f, 0xe2eb6dc2, 0x97338b02, 0x06c9f246, + 0x419cf1ad, 0x2b83c045, 0x3723f18a, 0xcb5b3089, /* 0x160 */ + 0x160bead7, 0x5d494656, 0x35f8a74b, 0x1e4e6c9e, + 0x000399bd, 0x67466880, 0xb4174831, 0xacf423b2, + 0xca815ab3, 0x5a6395e7, 0x302a67c5, 0x8bdb446b, + 0x108f8fa4, 0x10223eda, 0x92b8b48b, 0x7f38d0ee, /* 0x170 */ + 0xab2701d4, 0x0262d415, 0xaf224a30, 0xb3d88aba, + 0xf8b2c3af, 0xdaf7ef70, 0xcc97d3b7, 0xe9614b6c, + 0x2baebff4, 0x70f687cf, 0x386c9156, 0xce092ee5, + 0x01e87da6, 0x6ce91e6a, 0xbb7bcc84, 0xc7922c20, /* 0x180 */ + 0x9d3b71fd, 0x060e41c6, 0xd7590f15, 0x4e03bb47, + 0x183c198e, 0x63eeb240, 0x2ddbf49a, 0x6d5cba54, + 0x923750af, 0xf9e14236, 0x7838162b, 0x59726c72, + 0x81b66760, 0xbb2926c1, 0x48a0ce0d, 0xa6c0496d, /* 0x190 */ + 0xad43507b, 0x718d496a, 0x9df057af, 0x44b1bde6, + 0x054356dc, 0xde7ced35, 0xd51a138b, 0x62088cc9, + 0x35830311, 0xc96efca2, 0x686f86ec, 0x8e77cb68, + 0x63e1d6b8, 0xc80f9778, 0x79c491fd, 0x1b4c67f2, /* 0x1a0 */ + 0x72698d7d, 0x5e368c31, 0xf7d95e2e, 0xa1d3493f, + 0xdcd9433e, 0x896f1552, 0x4bc4ca7a, 0xa6d1baf4, + 0xa5a96dcc, 0x0bef8b46, 0xa169fda7, 0x74df40b7, + 0x4e208804, 0x9a756607, 0x038e87c8, 0x20211e44, /* 0x1b0 */ + 0x8b7ad4bf, 0xc6403f35, 0x1848e36d, 0x80bdb038, + 0x1e62891c, 0x643d2107, 0xbf04d6f8, 0x21092c8c, + 0xf644f389, 0x0778404e, 0x7b78adb8, 0xa2c52d53, + 0x42157abe, 0xa2253e2e, 0x7bf3f4ae, 0x80f594f9, /* 0x1c0 */ + 0x953194e7, 0x77eb92ed, 0xb3816930, 0xda8d9336, + 0xbf447469, 0xf26d9483, 0xee6faed5, 0x71371235, + 0xde425f73, 0xb4e59f43, 0x7dbe2d4e, 0x2d37b185, + 0x49dc9a63, 0x98c39d98, 0x1301c9a2, 0x389b1bbf, /* 0x1d0 */ + 0x0c18588d, 0xa421c1ba, 0x7aa3865c, 0x71e08558, + 0x3c5cfcaa, 0x7d239ca4, 0x0297d9dd, 0xd7dc2830, + 0x4b37802b, 0x7428ab54, 0xaeee0347, 0x4b3fbb85, + 0x692f2f08, 0x134e578e, 0x36d9e0bf, 0xae8b5fcf, /* 0x1e0 */ + 0xedb93ecf, 0x2b27248e, 0x170eb1ef, 0x7dc57fd6, + 0x1e760f16, 0xb1136601, 0x864e1b9b, 0xd7ea7319, + 0x3ab871bd, 0xcfa4d76f, 0xe31bd782, 0x0dbeb469, + 0xabb96061, 0x5370f85d, 0xffb07e37, 0xda30d0fb, /* 0x1f0 */ + 0xebc977b6, 0x0b98b40f, 0x3a4d0fe6, 0xdf4fc26b, + 0x159cf22a, 0xc298d6e2, 0x2b78ef6a, 0x61a94ac0, + 0xab561187, 0x14eea0f0, 0xdf0d4164, 0x19af70ee +}; + +static u4byte vk[47] = +{ + 0x09d0c479, 0x28c8ffe0, 0x84aa6c39, 0x9dad7287, 0x7dff9be3, 0xd4268361, + 0xc96da1d4 +}; + +#define f_mix(a,b,c,d) \ + r = rotr(a, 8); \ + b ^= s_box[a & 255]; \ + b += s_box[(r & 255) + 256]; \ + r = rotr(a, 16); \ + a = rotr(a, 24); \ + c += s_box[r & 255]; \ + d ^= s_box[(a & 255) + 256] + +#define b_mix(a,b,c,d) \ + r = rotl(a, 8); \ + b ^= s_box[(a & 255) + 256]; \ + c -= s_box[r & 255]; \ + r = rotl(a, 16); \ + a = rotl(a, 24); \ + d -= s_box[(r & 255) + 256]; \ + d ^= s_box[a & 255] + +#define f_ktr(a,b,c,d,i) \ + m = a + l_key[i]; \ + a = rotl(a, 13); \ + r = a * l_key[i + 1]; \ + l = s_box[m & 511]; \ + r = rotl(r, 5); \ + c += rotl(m, r); \ + l ^= r; \ + r = rotl(r, 5); \ + l ^= r; \ + d ^= r; \ + b += rotl(l, r) + +#define r_ktr(a,b,c,d,i) \ + r = a * l_key[i + 1]; \ + a = rotr(a, 13); \ + m = a + l_key[i]; \ + l = s_box[m & 511]; \ + r = rotl(r, 5); \ + l ^= r; \ + c -= rotl(m, r); \ + r = rotl(r, 5); \ + l ^= r; \ + d ^= r; \ + b -= rotl(l, r) + +/* For a 32 bit word (x) generate a mask (m) such that a bit in */ +/* m is set to 1 if and only if the corresponding bit in x is: */ +/* */ +/* 1. in a sequence of 10 or more adjacent '0' bits */ +/* 2. in a sequence of 10 or more adjacent '1' bits */ +/* 3. but is not either endpoint of such a sequence unless such */ +/* an endpoint is at the top bit (bit 31) of a word and is */ +/* in a sequence of '0' bits. */ +/* */ +/* The only situation in which a sequence endpoint is included */ +/* in the mask is hence when the endpoint is at bit 31 and is */ +/* the endpoint of a sequence of '0' bits. My thanks go to Shai */ +/* Halevi of IBM for the neat trick (which I missed) of finding */ +/* the '0' and '1' sequences at the same time. */ + +u4byte gen_mask(u4byte x) +{ u4byte m; + + /* if m{bn} stands for bit number bn of m, set m{bn} = 1 if */ + /* x{bn} == x{bn+1} for 0 <= bn <= 30. That is, set a bit */ + /* in m if the corresponding bit and the next higher bit in */ + /* x are equal in value (set m{31} = 0). */ + + m = (~x ^ (x >> 1)) & 0x7fffffff; + + /* Sequences of 9 '1' bits in m now correspond to sequences */ + /* of 10 '0's or 10 '1' bits in x. Shift and 'and' bits in */ + /* m to find sequences of 9 or more '1' bits. As a result */ + /* bits in m are set if they are at the bottom of sequences */ + /* of 10 adjacent '0's or 10 adjacent '1's in x. */ + + m &= (m >> 1) & (m >> 2); m &= (m >> 3) & (m >> 6); + + if(!m) /* return if mask is empty - no key fixing needed */ + /* is this early return worthwhile? */ + return 0; + + /* We need the internal bits in each continuous sequence of */ + /* matching bits (that is the bits less the two endpoints). */ + /* We thus propagate each set bit into the 8 internal bits */ + /* that it represents, starting 1 left and finsihing 8 left */ + /* of its position. */ + + m <<= 1; m |= (m << 1); m |= (m << 2); m |= (m << 4); + + /* m is now correct except for the odd behaviour of bit 31, */ + /* that is, it will be set if it is in a sequence of 10 or */ + /* more '0's and clear otherwise. */ + + m |= (m << 1) & ~x & 0x80000000; + + return m & 0xfffffffc; +}; + + +/* My thanks to Louis Granboulan for spotting an error in the */ +/* previous version of set_key. */ + +int mars_set_key(struct cipher_context *cx, unsigned char *key, int key_len, + int atomic) +{ + u4byte *in_key = (u32 *)key; + u4byte *l_key = cx->keyinfo; + u4byte i, j, m, u, w; + key_len *= 8; + + m = key_len / 32 - 1; + + for(i = j = 0; i < 39; ++i) + { + vk[i + 7] = rotl(vk[i] ^ vk[i + 5], 3) ^ in_key[j] ^ i; + j = (j == m ? 0 : j + 1); + } + + vk[46] = key_len / 32; + + for(j = 0; j < 7; ++j) + { + for(i = 1; i < 40; ++i) + vk[i+7] = rotl(vk[i + 7] + s_box[vk[i + 6] & 511], 9); + + vk[7] = rotl(vk[7] + s_box[vk[46] & 511], 9); + } + + for(i = j = 0; i < 40; ++i) + { + l_key[j] = vk[i + 7]; + + j = (j < 33 ? j + 7 : j - 33); + } + + for(i = 5; i < 37; i += 2) + { + w = l_key[i] | 3; + + if((m = gen_mask(w))) + w ^= (rotl(s_box[265 + (l_key[i] & 3)], l_key[i + 3] & 31) & m); + l_key[i] = w; + } + + return 0; +}; + +int mars_encrypt(struct cipher_context *cx, const u8 *in, u8 *out, int size, + int atomic) +{ u4byte *l_key = cx->keyinfo; + u4byte *in_blk = (u4byte *)in; + u4byte *out_blk = (u4byte *)out; + u4byte a, b, c, d, l, m, r; + + a = in_blk[0] + l_key[0]; b = in_blk[1] + l_key[1]; + c = in_blk[2] + l_key[2]; d = in_blk[3] + l_key[3]; + + f_mix(a,b,c,d); a += d; + f_mix(b,c,d,a); b += c; + f_mix(c,d,a,b); + f_mix(d,a,b,c); + f_mix(a,b,c,d); a += d; + f_mix(b,c,d,a); b += c; + f_mix(c,d,a,b); + f_mix(d,a,b,c); + + f_ktr(a,b,c,d, 4); f_ktr(b,c,d,a, 6); f_ktr(c,d,a,b, 8); f_ktr(d,a,b,c,10); + f_ktr(a,b,c,d,12); f_ktr(b,c,d,a,14); f_ktr(c,d,a,b,16); f_ktr(d,a,b,c,18); + f_ktr(a,d,c,b,20); f_ktr(b,a,d,c,22); f_ktr(c,b,a,d,24); f_ktr(d,c,b,a,26); + f_ktr(a,d,c,b,28); f_ktr(b,a,d,c,30); f_ktr(c,b,a,d,32); f_ktr(d,c,b,a,34); + + b_mix(a,b,c,d); + b_mix(b,c,d,a); c -= b; + b_mix(c,d,a,b); d -= a; + b_mix(d,a,b,c); + b_mix(a,b,c,d); + b_mix(b,c,d,a); c -= b; + b_mix(c,d,a,b); d -= a; + b_mix(d,a,b,c); + + out_blk[0] = a - l_key[36]; out_blk[1] = b - l_key[37]; + out_blk[2] = c - l_key[38]; out_blk[3] = d - l_key[39]; + return 0; +}; + +int mars_decrypt(struct cipher_context *cx, const u8 *in, u8 *out, int size, + int atomic) +{ u4byte *l_key = cx->keyinfo; + u4byte *in_blk = (u4byte *)in; + u4byte *out_blk = (u4byte *)out; + u4byte a, b, c, d, l, m, r; + + d = in_blk[0] + l_key[36]; c = in_blk[1] + l_key[37]; + b = in_blk[2] + l_key[38]; a = in_blk[3] + l_key[39]; + + f_mix(a,b,c,d); a += d; + f_mix(b,c,d,a); b += c; + f_mix(c,d,a,b); + f_mix(d,a,b,c); + f_mix(a,b,c,d); a += d; + f_mix(b,c,d,a); b += c; + f_mix(c,d,a,b); + f_mix(d,a,b,c); + + r_ktr(a,b,c,d,34); r_ktr(b,c,d,a,32); r_ktr(c,d,a,b,30); r_ktr(d,a,b,c,28); + r_ktr(a,b,c,d,26); r_ktr(b,c,d,a,24); r_ktr(c,d,a,b,22); r_ktr(d,a,b,c,20); + r_ktr(a,d,c,b,18); r_ktr(b,a,d,c,16); r_ktr(c,b,a,d,14); r_ktr(d,c,b,a,12); + r_ktr(a,d,c,b,10); r_ktr(b,a,d,c, 8); r_ktr(c,b,a,d, 6); r_ktr(d,c,b,a, 4); + + b_mix(a,b,c,d); + b_mix(b,c,d,a); c -= b; + b_mix(c,d,a,b); d -= a; + b_mix(d,a,b,c); + b_mix(a,b,c,d); + b_mix(b,c,d,a); c -= b; + b_mix(c,d,a,b); d -= a; + b_mix(d,a,b,c); + + out_blk[0] = d - l_key[0]; out_blk[1] = c - l_key[1]; + out_blk[2] = b - l_key[2]; out_blk[3] = a - l_key[3]; + return 0; +} + +static void mars_lock(void) +{ + MOD_INC_USE_COUNT; +} + +static void mars_unlock(void) +{ + MOD_DEC_USE_COUNT; +} + +#define CIPHER_BITS_128 +#define CIPHER_NAME(x) mars##x +#include "gen-cbc.h" +#include "gen-ecb.h" + +#define MARS_KEY_SCHEDULE_SIZE (40*sizeof(u32)) + +static struct cipher_implementation mars_ecb = { + {{NULL,NULL}, CIPHER_MODE_ECB, "mars-ecb"}, + blocksize: 16, + ivsize: 0, + key_schedule_size: MARS_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(mars_ecb), + INIT_CIPHER_OPS(mars) +}; + +static struct cipher_implementation mars_cbc = { + {{NULL,NULL}, CIPHER_MODE_CBC, "mars-cbc"}, + blocksize: 16, + ivsize: 16, + key_schedule_size: MARS_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(mars_cbc), + INIT_CIPHER_OPS(mars) +}; + + +static int __init init_mars(void) +{ + if (register_cipher(&mars_ecb)) + printk(KERN_WARNING "Couldn't register mars-ecb encryption\n"); + if (register_cipher(&mars_cbc)) + printk(KERN_WARNING "Couldn't register mars-cbc encryption\n"); + + return 0; +} + +static void __exit cleanup_mars(void) +{ + if (unregister_cipher(&mars_ecb)) + printk(KERN_WARNING "Couldn't unregister mars-ecb encryption\n"); + if (unregister_cipher(&mars_cbc)) + printk(KERN_WARNING "Couldn't unregister mars-cbc encryption\n"); +} + +module_init(init_mars); +module_exit(cleanup_mars); diff -urN lin.2.4.3/crypto/cipher-rc5.c int.2.4.3/crypto/cipher-rc5.c --- lin.2.4.3/crypto/cipher-rc5.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/cipher-rc5.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,231 @@ +/* + * rc5.c RC5-32/16/b + * + * Copyright (c) 1999 Pekka Riikonen + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, dis- + * tribute, sublicense, and/or sell copies of the Software, and to permit + * persons to whom the Software is furnished to do so, subject to the fol- + * lowing conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- + * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT + * SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABIL- + * ITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + * Except as contained in this notice, the name of the authors shall + * not be used in advertising or otherwise to promote the sale, use or + * other dealings in this Software without prior written authorization from + * the authors. + * + */ + +/* + * Based on RC5 reference code and on description of Bruce Schneier's + * Applied Cryptography. + * + * This implementation has a word size of 32 bits, a rounds of 16 and + * variable key length from 128 and 192 up to 256 bits. + * + */ + +#include +#include +#include +#include +#include +#include + +/* RC5 definitions */ +#define w 32 /* word size, in bits */ +#define r 16 /* rounds */ +#define b 16 /* minimum key size in bytes */ +#define c 8 /* same for 128, 192 and 256 bits key */ +#define t 34 /* size of table S, t = 2 * (r + 1) */ + +/* RC5 encryption */ +#define RC5E(i, A, B) \ + A = A ^ B; \ + A = rotl(A, B) + S[i]; \ + B = B ^ A; \ + B = rotl(B, A) + S[i + 1]; + +/* RC5 decryption */ +#define RC5D(i, A, B) \ + B = B - S[i + 1]; \ + B = rotr(B, A) ^ A; \ + A = A - S[i]; \ + A = rotr(A, B) ^ B; + +#if 0 +#define rotl rotl32 +#define rotr rotr32 +#else +#define rotl generic_rotl32 +#define rotr generic_rotr32 +#endif + +/* Sets RC5 key */ + +int rc5_set_key(struct cipher_context *cx, unsigned char *key, int key_len, + int atomic) +{ + u4byte *in_key = (u32 *)key; + u4byte *out_key = cx->keyinfo; /* S */ + u32 i, j, k, A, B, L[c]; + + if (key_len < b || key_len > (2 * b)) + return -1; + + key_len *= 8; + + /* init L */ + for (i = 0; i < key_len / w; i++) + L[i] = in_key[i]; + + /* init key array (S) */ + out_key[0] = 0xb7e15163; + for (i = 1; i < t; i++) + out_key[i] = out_key[i - 1] + 0x9e3779b9; + + /* mix L and key array (S) */ + A = B = 0; + for (k = i = j = 0; k < (3 * t); k++) { + A = rotl(out_key[i] + (A + B), 3); + B += A; + B = rotl(L[j] + B, B); + out_key[i] = A; + L[j] = B; + i = (i + 1) % t; + j = (j + 1) % c; + } + + return 0; +} + +/* Encrypts *one* block at a time. */ + +int rc5_encrypt(struct cipher_context *cx, + const u8 *in8, u8 *out8, int size, int atomic) +{ + u32 A, B; + u32 *in = (u32 *)in8; + u32 *out = (u32 *)out8; + + u32 *S = cx->keyinfo; + A = in[0] + S[0]; + B = in[1] + S[1]; + + RC5E(2, A, B); RC5E(4, A, B); + RC5E(6, A, B); RC5E(8, A, B); + RC5E(10, A, B); RC5E(12, A, B); + RC5E(14, A, B); RC5E(16, A, B); + RC5E(18, A, B); RC5E(20, A, B); + RC5E(22, A, B); RC5E(24, A, B); + RC5E(26, A, B); RC5E(28, A, B); + RC5E(30, A, B); RC5E(32, A, B); + + out[0] = A; + out[1] = B; + + return 0; +} + +/* Decrypts *one* block at a time. */ + +int rc5_decrypt(struct cipher_context *cx, + const u8 *in8, u8 *out8, int size, int atomic) +{ + u32 A, B; + u32 *in = (u32 *)in8; + u32 *out = (u32 *)out8; + + u32 *S = cx->keyinfo; + A = in[0]; + B = in[1]; + + RC5D(32, A, B); RC5D(30, A, B); + RC5D(28, A, B); RC5D(26, A, B); + RC5D(24, A, B); RC5D(22, A, B); + RC5D(20, A, B); RC5D(18, A, B); + RC5D(16, A, B); RC5D(14, A, B); + RC5D(12, A, B); RC5D(10, A, B); + RC5D(8, A, B); RC5D(6, A, B); + RC5D(4, A, B); RC5D(2, A, B); + + out[0] = A - S[0]; + out[1] = B - S[1]; + + return 0; +} + +static void rc5_lock(void) +{ + MOD_INC_USE_COUNT; +} + +static void rc5_unlock(void) +{ + MOD_DEC_USE_COUNT; +} + + +#define CIPHER_BITS_64 +#define CIPHER_NAME(x) rc5##x +#include "gen-cbc.h" +#include "gen-ecb.h" + +#define RC5_KEY_SCHEDULE_SIZE (34*sizeof(u32)) + +static struct cipher_implementation rc5_ecb = { + {{NULL,NULL}, CIPHER_MODE_ECB, "rc5-ecb"}, + blocksize: 8, + ivsize: 0, + key_schedule_size: RC5_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(rc5_ecb), + INIT_CIPHER_OPS(rc5) +}; + +static struct cipher_implementation rc5_cbc = { + {{NULL,NULL}, CIPHER_MODE_CBC, "rc5-cbc"}, + blocksize: 8, + ivsize: 8, + key_schedule_size: RC5_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(rc5_cbc), + INIT_CIPHER_OPS(rc5) +}; + + +static int __init init_rc5(void) +{ + if (register_cipher(&rc5_ecb)) + printk(KERN_WARNING "Couldn't register RC5-ecb encryption\n"); + if (register_cipher(&rc5_cbc)) + printk(KERN_WARNING "Couldn't register RC5-cbc encryption\n"); + + return 0; +} + +static void __exit cleanup_rc5(void) +{ + if (unregister_cipher(&rc5_ecb)) + printk(KERN_WARNING "Couldn't unregister RC5_ecb encryption\n"); + if (unregister_cipher(&rc5_cbc)) + printk(KERN_WARNING "Couldn't unregister RC5-cbc encryption\n"); +} + +module_init(init_rc5); +module_exit(cleanup_rc5); diff -urN lin.2.4.3/crypto/cipher-rc6.c int.2.4.3/crypto/cipher-rc6.c --- lin.2.4.3/crypto/cipher-rc6.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/cipher-rc6.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,215 @@ +/* NOTE: This implementation has been changed from the original + source. See ChangeLog for more information. + Maintained by Alexander Kjeldaas + */ + +/* This is an independent implementation of the RC6 algorithm that */ +/* Ron Rivest and RSA Labs have submitted as a candidate for the */ +/* NIST AES activity. Refer to RSA Labs and Ron Rivest for any */ +/* copyright, patent or license issues for the RC6 algorithm. */ +/* */ +/* Copyright in this implementation is held by Dr B R Gladman but */ +/* I hereby give permission for its free direct or derivative use */ +/* subject to acknowledgment of its origin and compliance with any */ +/* constraints that are placed on the exploitation of RC6 by its */ +/* designers. */ +/* */ +/* Dr Brian Gladman (gladman@seven77.demon.co.uk) 18th July 1998 */ +/* + Timing data: + +Algorithm: rc6 (rc62.c) +128 bit key: +Key Setup: 1580 cycles +Encrypt: 286 cycles = 89.6 mbits/sec +Decrypt: 236 cycles = 108.6 mbits/sec +Mean: 261 cycles = 98.2 mbits/sec +192 bit key: +Key Setup: 1882 cycles +Encrypt: 286 cycles = 89.5 mbits/sec +Decrypt: 235 cycles = 108.9 mbits/sec +Mean: 261 cycles = 98.3 mbits/sec +256 bit key: +Key Setup: 1774 cycles +Encrypt: 285 cycles = 89.7 mbits/sec +Decrypt: 236 cycles = 108.3 mbits/sec +Mean: 261 cycles = 98.1 mbits/sec + +*/ + +#include +#include +#include +#include +#include + +#if 0 +#define rotl rotl32 +#define rotr rotr32 +#else +#define rotl generic_rotl32 +#define rotr generic_rotr32 +#endif + +#define f_rnd(i,a,b,c,d) \ + u = rotl(d * (d + d + 1), 5); \ + t = rotl(b * (b + b + 1), 5); \ + a = rotl(a ^ t, u) + l_key[i]; \ + c = rotl(c ^ u, t) + l_key[i + 1] + +#define i_rnd(i,a,b,c,d) \ + u = rotl(d * (d + d + 1), 5); \ + t = rotl(b * (b + b + 1), 5); \ + c = rotr(c - l_key[i + 1], t) ^ u; \ + a = rotr(a - l_key[i], u) ^ t + +/* initialise the key schedule from the user supplied key */ + +int rc6_set_key(struct cipher_context *cx, unsigned char *key, int key_len, + int atomic) +{ u4byte *in_key = (u32 *)key; + /* l_key - storage for the key schedule */ + u4byte *l_key = cx->keyinfo; + u4byte i, j, k, a, b, l[8], t; + key_len *= 8; + + l_key[0] = 0xb7e15163; + + for(k = 1; k < 44; ++k) + + l_key[k] = l_key[k - 1] + 0x9e3779b9; + + for(k = 0; k < key_len / 32; ++k) + + l[k] = in_key[k]; + + t = (key_len / 32) - 1; + + a = b = i = j = 0; + + for(k = 0; k < 132; ++k) + { a = rotl(l_key[i] + a + b, 3); b += a; + b = rotl(l[j] + b, b); + l_key[i] = a; l[j] = b; + i = (i == 43 ? 0 : i + 1); + j = (j == t ? 0 : j + 1); + } + + return 0; +}; + +/* encrypt a block of text */ + +int rc6_encrypt(struct cipher_context *cx, + const u8 *in, u8 *out, int size, int atomic) +{ u32 *l_key = cx->keyinfo; + u32 *in_blk = (u32 *)in; + u32 *out_blk = (u32 *)out; + u4byte a,b,c,d,t,u; + + a = in_blk[0]; b = in_blk[1] + l_key[0]; + c = in_blk[2]; d = in_blk[3] + l_key[1]; + + f_rnd( 2,a,b,c,d); f_rnd( 4,b,c,d,a); + f_rnd( 6,c,d,a,b); f_rnd( 8,d,a,b,c); + f_rnd(10,a,b,c,d); f_rnd(12,b,c,d,a); + f_rnd(14,c,d,a,b); f_rnd(16,d,a,b,c); + f_rnd(18,a,b,c,d); f_rnd(20,b,c,d,a); + f_rnd(22,c,d,a,b); f_rnd(24,d,a,b,c); + f_rnd(26,a,b,c,d); f_rnd(28,b,c,d,a); + f_rnd(30,c,d,a,b); f_rnd(32,d,a,b,c); + f_rnd(34,a,b,c,d); f_rnd(36,b,c,d,a); + f_rnd(38,c,d,a,b); f_rnd(40,d,a,b,c); + + out_blk[0] = a + l_key[42]; out_blk[1] = b; + out_blk[2] = c + l_key[43]; out_blk[3] = d; + return 0; +}; + +/* decrypt a block of text */ + +int rc6_decrypt(struct cipher_context *cx, const u8 *in, u8 *out, int size, + int atomic) +{ u4byte *l_key = cx->keyinfo; + u32 *in_blk = (u32 *)in; + u32 *out_blk = (u32 *)out; + u4byte a,b,c,d,t,u; + + d = in_blk[3]; c = in_blk[2] - l_key[43]; + b = in_blk[1]; a = in_blk[0] - l_key[42]; + + i_rnd(40,d,a,b,c); i_rnd(38,c,d,a,b); + i_rnd(36,b,c,d,a); i_rnd(34,a,b,c,d); + i_rnd(32,d,a,b,c); i_rnd(30,c,d,a,b); + i_rnd(28,b,c,d,a); i_rnd(26,a,b,c,d); + i_rnd(24,d,a,b,c); i_rnd(22,c,d,a,b); + i_rnd(20,b,c,d,a); i_rnd(18,a,b,c,d); + i_rnd(16,d,a,b,c); i_rnd(14,c,d,a,b); + i_rnd(12,b,c,d,a); i_rnd(10,a,b,c,d); + i_rnd( 8,d,a,b,c); i_rnd( 6,c,d,a,b); + i_rnd( 4,b,c,d,a); i_rnd( 2,a,b,c,d); + + out_blk[3] = d - l_key[1]; out_blk[2] = c; + out_blk[1] = b - l_key[0]; out_blk[0] = a; + return 0; +}; + +static void rc6_lock(void) +{ + MOD_INC_USE_COUNT; +} + +static void rc6_unlock(void) +{ + MOD_DEC_USE_COUNT; +} + +#define CIPHER_BITS_128 +#define CIPHER_NAME(x) rc6##x +#include "gen-cbc.h" +#include "gen-ecb.h" + +#define RC6_KEY_SCHEDULE_SIZE (44*sizeof(u32)) + +static struct cipher_implementation rc6_ecb = { + {{NULL,NULL}, CIPHER_MODE_ECB, "rc6-ecb"}, + blocksize: 16, + ivsize: 0, + key_schedule_size: RC6_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(rc6), + INIT_CIPHER_OPS(rc6) +}; + +static struct cipher_implementation rc6_cbc = { + {{NULL,NULL}, CIPHER_MODE_CBC, "rc6-cbc"}, + blocksize: 16, + ivsize: 16, + key_schedule_size: RC6_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(rc6_cbc), + INIT_CIPHER_OPS(rc6) +}; + +static int __init init_rc6(void) +{ + if (register_cipher(&rc6_ecb)) + printk(KERN_WARNING "Couldn't register rc6-ecb encryption\n"); + if (register_cipher(&rc6_cbc)) + printk(KERN_WARNING "Couldn't register rc6-cbc encryption\n"); + + return 0; +} + +static void __exit cleanup_rc6(void) +{ + if (unregister_cipher(&rc6_ecb)) + printk(KERN_WARNING "Couldn't unregister rc6-ecb encryption\n"); + if (unregister_cipher(&rc6_cbc)) + printk(KERN_WARNING "Couldn't unregister rc6-cbc encryption\n"); +} + +module_init(init_rc6); +module_exit(cleanup_rc6); diff -urN lin.2.4.3/crypto/cipher-serpent.c int.2.4.3/crypto/cipher-serpent.c --- lin.2.4.3/crypto/cipher-serpent.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/cipher-serpent.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,1049 @@ + +/* Optimized implementation of the Serpent AES candidate algorithm + * Designed by Anderson, Biham and Knudsen and Implemented by + * Gisle Sælensminde 2000. + * + * The implementation is based on the pentium optimised sboxes of + * Dag Arne Osvik. Even these sboxes are designed to be optimal for x86 + * processors they are efficient on other processors as well, but the speedup + * isn't so impressive compared to other implementations. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public License + * as published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + */ + +#include +#include +#include +#include +#include + +#include + +#define rotl(reg, val) ((reg << val) | (reg >> (32 - val))) +#define rotr(reg, val) ((reg >> val) | (reg << (32 - val))) + +#define io_swap(x) __cpu_to_be32(x) + +#define BLOCK_SWAP + +/* The sbox functions. The first four parameters is the input bits, and + * the last is a tempoary. These parameters are also used for output, but + * the bit order is permuted. The output bit order from S0 is + * (1 4 2 0 3), where 3 is the (now useless) tempoary. + */ + +#define S0(r0,r1,r2,r3,r4) \ + r3 = r3 ^ r0; \ + r4 = r1; \ + r1 = r1 & r3; \ + r4 = r4 ^ r2; \ + r1 = r1 ^ r0; \ + r0 = r0 | r3; \ + r0 = r0 ^ r4; \ + r4 = r4 ^ r3; \ + r3 = r3 ^ r2; \ + r2 = r2 | r1; \ + r2 = r2 ^ r4; \ + r4 = -1 ^ r4; \ + r4 = r4 | r1; \ + r1 = r1 ^ r3; \ + r1 = r1 ^ r4; \ + r3 = r3 | r0; \ + r1 = r1 ^ r3; \ + r4 = r4 ^ r3; + +#define S1(r0,r1,r2,r3,r4) \ + r1 = -1 ^ r1; \ + r4 = r0; \ + r0 = r0 ^ r1; \ + r4 = r4 | r1; \ + r4 = r4 ^ r3; \ + r3 = r3 & r0; \ + r2 = r2 ^ r4; \ + r3 = r3 ^ r1; \ + r3 = r3 | r2; \ + r0 = r0 ^ r4; \ + r3 = r3 ^ r0; \ + r1 = r1 & r2; \ + r0 = r0 | r1; \ + r1 = r1 ^ r4; \ + r0 = r0 ^ r2; \ + r4 = r4 | r3; \ + r0 = r0 ^ r4; \ + r4 = -1 ^ r4; \ + r1 = r1 ^ r3; \ + r4 = r4 & r2; \ + r1 = -1 ^ r1; \ + r4 = r4 ^ r0; \ + r1 = r1 ^ r4; + +#define S2(r0,r1,r2,r3,r4) \ + r4 = r0; \ + r0 = r0 & r2; \ + r0 = r0 ^ r3; \ + r2 = r2 ^ r1; \ + r2 = r2 ^ r0; \ + r3 = r3 | r4; \ + r3 = r3 ^ r1; \ + r4 = r4 ^ r2; \ + r1 = r3; \ + r3 = r3 | r4; \ + r3 = r3 ^ r0; \ + r0 = r0 & r1; \ + r4 = r4 ^ r0; \ + r1 = r1 ^ r3; \ + r1 = r1 ^ r4; \ + r4 = -1 ^ r4; + +#define S3(r0,r1,r2,r3,r4) \ + r4 = r0 ; \ + r0 = r0 | r3; \ + r3 = r3 ^ r1; \ + r1 = r1 & r4; \ + r4 = r4 ^ r2; \ + r2 = r2 ^ r3; \ + r3 = r3 & r0; \ + r4 = r4 | r1; \ + r3 = r3 ^ r4; \ + r0 = r0 ^ r1; \ + r4 = r4 & r0; \ + r1 = r1 ^ r3; \ + r4 = r4 ^ r2; \ + r1 = r1 | r0; \ + r1 = r1 ^ r2; \ + r0 = r0 ^ r3; \ + r2 = r1; \ + r1 = r1 | r3; \ + r1 = r1 ^ r0; + +#define S4(r0,r1,r2,r3,r4) \ + r1 = r1 ^ r3; \ + r3 = -1 ^ r3; \ + r2 = r2 ^ r3; \ + r3 = r3 ^ r0; \ + r4 = r1; \ + r1 = r1 & r3; \ + r1 = r1 ^ r2; \ + r4 = r4 ^ r3; \ + r0 = r0 ^ r4; \ + r2 = r2 & r4; \ + r2 = r2 ^ r0; \ + r0 = r0 & r1; \ + r3 = r3 ^ r0; \ + r4 = r4 | r1; \ + r4 = r4 ^ r0; \ + r0 = r0 | r3; \ + r0 = r0 ^ r2; \ + r2 = r2 & r3; \ + r0 = -1 ^ r0; \ + r4 = r4 ^ r2; + +#define S5(r0,r1,r2,r3,r4) \ + r0 = r0 ^ r1; \ + r1 = r1 ^ r3; \ + r3 = -1 ^ r3; \ + r4 = r1; \ + r1 = r1 & r0; \ + r2 = r2 ^ r3; \ + r1 = r1 ^ r2; \ + r2 = r2 | r4; \ + r4 = r4 ^ r3; \ + r3 = r3 & r1; \ + r3 = r3 ^ r0; \ + r4 = r4 ^ r1; \ + r4 = r4 ^ r2; \ + r2 = r2 ^ r0; \ + r0 = r0 & r3; \ + r2 = -1 ^ r2; \ + r0 = r0 ^ r4; \ + r4 = r4 | r3; \ + r2 = r2 ^ r4; + +#define S6(r0,r1,r2,r3,r4) \ + r2 = -1 ^ r2; \ + r4 = r3; \ + r3 = r3 & r0; \ + r0 = r0 ^ r4; \ + r3 = r3 ^ r2; \ + r2 = r2 | r4; \ + r1 = r1 ^ r3; \ + r2 = r2 ^ r0; \ + r0 = r0 | r1; \ + r2 = r2 ^ r1; \ + r4 = r4 ^ r0; \ + r0 = r0 | r3; \ + r0 = r0 ^ r2; \ + r4 = r4 ^ r3; \ + r4 = r4 ^ r0; \ + r3 = -1 ^ r3; \ + r2 = r2 & r4; \ + r2 = r2 ^ r3; + +#define S7(r0,r1,r2,r3,r4) \ + r4 = r2; \ + r2 = r2 & r1; \ + r2 = r2 ^ r3; \ + r3 = r3 & r1; \ + r4 = r4 ^ r2; \ + r2 = r2 ^ r1; \ + r1 = r1 ^ r0; \ + r0 = r0 | r4; \ + r0 = r0 ^ r2; \ + r3 = r3 ^ r1; \ + r2 = r2 ^ r3; \ + r3 = r3 & r0; \ + r3 = r3 ^ r4; \ + r4 = r4 ^ r2; \ + r2 = r2 & r0; \ + r4 = -1 ^ r4; \ + r2 = r2 ^ r4; \ + r4 = r4 & r0; \ + r1 = r1 ^ r3; \ + r4 = r4 ^ r1; + +/* The inverse sboxes */ + +#define I0(r0,r1,r2,r3,r4) \ + r2 = r2 ^ -1; \ + r4 = r1; \ + r1 = r1 | r0; \ + r4 = r4 ^ -1; \ + r1 = r1 ^ r2; \ + r2 = r2 | r4; \ + r1 = r1 ^ r3; \ + r0 = r0 ^ r4; \ + r2 = r2 ^ r0; \ + r0 = r0 & r3; \ + r4 = r4 ^ r0; \ + r0 = r0 | r1; \ + r0 = r0 ^ r2; \ + r3 = r3 ^ r4; \ + r2 = r2 ^ r1; \ + r3 = r3 ^ r0; \ + r3 = r3 ^ r1; \ + r2 = r2 & r3; \ + r4 = r4 ^ r2; + +#define I1(r0,r1,r2,r3,r4) \ + r4 = r1; \ + r1 = r1 ^ r3; \ + r3 = r3 & r1; \ + r4 = r4 ^ r2; \ + r3 = r3 ^ r0; \ + r0 = r0 | r1; \ + r2 = r2 ^ r3; \ + r0 = r0 ^ r4; \ + r0 = r0 | r2; \ + r1 = r1 ^ r3; \ + r0 = r0 ^ r1; \ + r1 = r1 | r3; \ + r1 = r1 ^ r0; \ + r4 = r4 ^ -1; \ + r4 = r4 ^ r1; \ + r1 = r1 | r0; \ + r1 = r1 ^ r0; \ + r1 = r1 | r4; \ + r3 = r3 ^ r1; + +#define I2(r0,r1,r2,r3,r4) \ + r2 = r2 ^ r3; \ + r3 = r3 ^ r0; \ + r4 = r3; \ + r3 = r3 & r2; \ + r3 = r3 ^ r1; \ + r1 = r1 | r2; \ + r1 = r1 ^ r4; \ + r4 = r4 & r3; \ + r2 = r2 ^ r3; \ + r4 = r4 & r0; \ + r4 = r4 ^ r2; \ + r2 = r2 & r1; \ + r2 = r2 | r0; \ + r3 = r3 ^ -1; \ + r2 = r2 ^ r3; \ + r0 = r0 ^ r3; \ + r0 = r0 & r1; \ + r3 = r3 ^ r4; \ + r3 = r3 ^ r0; + +#define I3(r0,r1,r2,r3,r4) \ + r4 = r2; \ + r2 = r2 ^ r1; \ + r0 = r0 ^ r2; \ + r4 = r4 & r2; \ + r4 = r4 ^ r0; \ + r0 = r0 & r1; \ + r1 = r1 ^ r3; \ + r3 = r3 | r4; \ + r2 = r2 ^ r3; \ + r0 = r0 ^ r3; \ + r1 = r1 ^ r4; \ + r3 = r3 & r2; \ + r3 = r3 ^ r1; \ + r1 = r1 ^ r0; \ + r1 = r1 | r2; \ + r0 = r0 ^ r3; \ + r1 = r1 ^ r4; \ + r0 = r0 ^ r1; + +#define I4(r0,r1,r2,r3,r4) \ + r4 = r2; \ + r2 = r2 & r3; \ + r2 = r2 ^ r1; \ + r1 = r1 | r3; \ + r1 = r1 & r0; \ + r4 = r4 ^ r2; \ + r4 = r4 ^ r1; \ + r1 = r1 & r2; \ + r0 = r0 ^ -1; \ + r3 = r3 ^ r4; \ + r1 = r1 ^ r3; \ + r3 = r3 & r0; \ + r3 = r3 ^ r2; \ + r0 = r0 ^ r1; \ + r2 = r2 & r0; \ + r3 = r3 ^ r0; \ + r2 = r2 ^ r4; \ + r2 = r2 | r3; \ + r3 = r3 ^ r0; \ + r2 = r2 ^ r1; + +#define I5(r0,r1,r2,r3,r4) \ + r1 = r1 ^ -1; \ + r4 = r3; \ + r2 = r2 ^ r1; \ + r3 = r3 | r0; \ + r3 = r3 ^ r2; \ + r2 = r2 | r1; \ + r2 = r2 & r0; \ + r4 = r4 ^ r3; \ + r2 = r2 ^ r4; \ + r4 = r4 | r0; \ + r4 = r4 ^ r1; \ + r1 = r1 & r2; \ + r1 = r1 ^ r3; \ + r4 = r4 ^ r2; \ + r3 = r3 & r4; \ + r4 = r4 ^ r1; \ + r3 = r3 ^ r0; \ + r3 = r3 ^ r4; \ + r4 = r4 ^ -1; + + +#define I6(r0,r1,r2,r3,r4) \ + r0 = r0 ^ r2; \ + r4 = r2; \ + r2 = r2 & r0; \ + r4 = r4 ^ r3; \ + r2 = r2 ^ -1; \ + r3 = r3 ^ r1; \ + r2 = r2 ^ r3; \ + r4 = r4 | r0; \ + r0 = r0 ^ r2; \ + r3 = r3 ^ r4; \ + r4 = r4 ^ r1; \ + r1 = r1 & r3; \ + r1 = r1 ^ r0; \ + r0 = r0 ^ r3; \ + r0 = r0 | r2; \ + r3 = r3 ^ r1; \ + r4 = r4 ^ r0; + +#define I7(r0,r1,r2,r3,r4) \ + r4 = r2; \ + r2 = r2 ^ r0; \ + r0 = r0 & r3; \ + r4 = r4 | r3; \ + r2 = r2 ^ -1; \ + r3 = r3 ^ r1; \ + r1 = r1 | r0; \ + r0 = r0 ^ r2; \ + r2 = r2 & r4; \ + r3 = r3 & r4; \ + r1 = r1 ^ r2; \ + r2 = r2 ^ r0; \ + r0 = r0 | r2; \ + r4 = r4 ^ r1; \ + r0 = r0 ^ r3; \ + r3 = r3 ^ r4; \ + r4 = r4 | r0; \ + r3 = r3 ^ r2; \ + r4 = r4 ^ r2; + +/* forward and inverse linear transformations */ + +#define LINTRANS(r0,r1,r2,r3,r4) \ + r0 = rotl(r0, 13); \ + r2 = rotl(r2, 3); \ + r3 = r3 ^ r2; \ + r4 = r0 << 3; \ + r1 = r1 ^ r0; \ + r3 = r3 ^ r4; \ + r1 = r1 ^ r2; \ + r3 = rotl(r3, 7); \ + r1 = rotl(r1, 1); \ + r2 = r2 ^ r3; \ + r4 = r1 << 7; \ + r0 = r0 ^ r1; \ + r2 = r2 ^ r4; \ + r0 = r0 ^ r3; \ + r2 = rotl(r2, 22); \ + r0 = rotl(r0, 5); + +#define ILINTRANS(r0,r1,r2,r3,r4) \ + r2 = rotr(r2, 22); \ + r0 = rotr(r0, 5); \ + r2 = r2 ^ r3; \ + r4 = r1 << 7; \ + r0 = r0 ^ r1; \ + r2 = r2 ^ r4; \ + r0 = r0 ^ r3; \ + r3 = rotr(r3, 7); \ + r1 = rotr(r1, 1); \ + r3 = r3 ^ r2; \ + r4 = r0 << 3; \ + r1 = r1 ^ r0; \ + r3 = r3 ^ r4; \ + r1 = r1 ^ r2; \ + r2 = rotr(r2, 3); \ + r0 = rotr(r0, 13); + + +#define KEYMIX(r0,r1,r2,r3,r4,IN) \ + r0 = r0 ^ l_key[IN+8]; \ + r1 = r1 ^ l_key[IN+9]; \ + r2 = r2 ^ l_key[IN+10]; \ + r3 = r3 ^ l_key[IN+11]; + +#define GETKEY(r0, r1, r2, r3, IN) \ + r0 = l_key[IN+8]; \ + r1 = l_key[IN+9]; \ + r2 = l_key[IN+10]; \ + r3 = l_key[IN+11]; + +#define SETKEY(r0, r1, r2, r3, IN) \ + l_key[IN+8] = r0; \ + l_key[IN+9] = r1; \ + l_key[IN+10] = r2; \ + l_key[IN+11] = r3; + +/* initialise the key schedule from the user supplied key */ + +int serpent_set_key(struct cipher_context *cx, unsigned char *key, int key_len, + int atomic) +{ u32 *in_key = (u32 *)key; + /* l_key - storage for the key schedule */ + u32 *l_key = cx->keyinfo; + u32 i,lk,r0,r1,r2,r3,r4; + + key_len *= 8; + + if(key_len < 0 || key_len > 256) + + return 1; + + i = 0; lk = (key_len + 31) / 32; + + while(i < lk) + { +#ifdef BLOCK_SWAP + l_key[i] = io_swap(in_key[lk - i - 1]); +#else + l_key[i] = in_key[i]; +#endif + i++; + } + + if(key_len < 256) + { + while(i < 8) + + l_key[i++] = 0; + + i = key_len / 32; lk = 1 << key_len % 32; + + l_key[i] = l_key[i] & (lk - 1) | lk; + } + + for(i = 0; i < 132; ++i) + { + lk = l_key[i] ^ l_key[i + 3] ^ l_key[i + 5] + ^ l_key[i + 7] ^ 0x9e3779b9 ^ i; + + l_key[i + 8] = (lk << 11) | (lk >> 21); + } + + GETKEY(r0, r1, r2, r3, 0); + S3(r0,r1,r2,r3,r4); + SETKEY(r1, r2, r3, r4, 0) + + GETKEY(r0, r1, r2, r3, 4); + S2(r0,r1,r2,r3,r4); + SETKEY(r2, r3, r1, r4, 4) + + GETKEY(r0, r1, r2, r3, 8); + S1(r0,r1,r2,r3,r4); + SETKEY(r3, r1, r2, r0, 8) + + GETKEY(r0, r1, r2, r3, 12); + S0(r0,r1,r2,r3,r4); + SETKEY(r1, r4, r2, r0, 12) + + GETKEY(r0, r1, r2, r3, 16); + S7(r0,r1,r2,r3,r4); + SETKEY(r2, r4, r3, r0, 16) + + GETKEY(r0, r1, r2, r3, 20); + S6(r0,r1,r2,r3,r4) + SETKEY(r0, r1, r4, r2, 20) + + GETKEY(r0, r1, r2, r3, 24); + S5(r0,r1,r2,r3,r4); + SETKEY(r1, r3, r0, r2, 24) + + GETKEY(r0, r1, r2, r3, 28); + S4(r0,r1,r2,r3,r4) + SETKEY(r1, r4, r0, r3, 28) + + GETKEY(r0, r1, r2, r3, 32); + S3(r0,r1,r2,r3,r4); + SETKEY(r1, r2, r3, r4, 32) + + GETKEY(r0, r1, r2, r3, 36); + S2(r0,r1,r2,r3,r4); + SETKEY(r2, r3, r1, r4, 36) + + GETKEY(r0, r1, r2, r3, 40); + S1(r0,r1,r2,r3,r4); + SETKEY(r3, r1, r2, r0, 40) + + GETKEY(r0, r1, r2, r3, 44); + S0(r0,r1,r2,r3,r4); + SETKEY(r1, r4, r2, r0, 44) + + GETKEY(r0, r1, r2, r3, 48); + S7(r0,r1,r2,r3,r4); + SETKEY(r2, r4, r3, r0, 48) + + GETKEY(r0, r1, r2, r3, 52); + S6(r0,r1,r2,r3,r4) + SETKEY(r0, r1, r4, r2, 52) + + GETKEY(r0, r1, r2, r3, 56); + S5(r0,r1,r2,r3,r4); + SETKEY(r1, r3, r0, r2, 56) + + GETKEY(r0, r1, r2, r3, 60); + S4(r0,r1,r2,r3,r4) + SETKEY(r1, r4, r0, r3, 60) + + GETKEY(r0, r1, r2, r3, 64); + S3(r0,r1,r2,r3,r4); + SETKEY(r1, r2, r3, r4, 64) + + GETKEY(r0, r1, r2, r3, 68); + S2(r0,r1,r2,r3,r4); + SETKEY(r2, r3, r1, r4, 68) + + GETKEY(r0, r1, r2, r3, 72); + S1(r0,r1,r2,r3,r4); + SETKEY(r3, r1, r2, r0, 72) + + GETKEY(r0, r1, r2, r3, 76); + S0(r0,r1,r2,r3,r4); + SETKEY(r1, r4, r2, r0, 76) + + GETKEY(r0, r1, r2, r3, 80); + S7(r0,r1,r2,r3,r4); + SETKEY(r2, r4, r3, r0, 80) + + GETKEY(r0, r1, r2, r3, 84); + S6(r0,r1,r2,r3,r4) + SETKEY(r0, r1, r4, r2, 84) + + GETKEY(r0, r1, r2, r3, 88); + S5(r0,r1,r2,r3,r4); + SETKEY(r1, r3, r0, r2, 88) + + GETKEY(r0, r1, r2, r3, 92); + S4(r0,r1,r2,r3,r4) + SETKEY(r1, r4, r0, r3, 92) + + GETKEY(r0, r1, r2, r3, 96); + S3(r0,r1,r2,r3,r4); + SETKEY(r1, r2, r3, r4, 96) + + GETKEY(r0, r1, r2, r3, 100); + S2(r0,r1,r2,r3,r4); + SETKEY(r2, r3, r1, r4, 100) + + GETKEY(r0, r1, r2, r3, 104); + S1(r0,r1,r2,r3,r4); + SETKEY(r3, r1, r2, r0, 104) + + GETKEY(r0, r1, r2, r3, 108); + S0(r0,r1,r2,r3,r4); + SETKEY(r1, r4, r2, r0, 108) + + GETKEY(r0, r1, r2, r3, 112); + S7(r0,r1,r2,r3,r4); + SETKEY(r2, r4, r3, r0, 112) + + GETKEY(r0, r1, r2, r3, 116); + S6(r0,r1,r2,r3,r4) + SETKEY(r0, r1, r4, r2, 116) + + GETKEY(r0, r1, r2, r3, 120); + S5(r0,r1,r2,r3,r4); + SETKEY(r1, r3, r0, r2, 120) + + GETKEY(r0, r1, r2, r3, 124); + S4(r0,r1,r2,r3,r4) + SETKEY(r1, r4, r0, r3, 124) + + GETKEY(r0, r1, r2, r3, 128); + S3(r0,r1,r2,r3,r4); + SETKEY(r1, r2, r3, r4, 128) + + return 0; +}; + +/* Encryption and decryption functions. The rounds are fully inlined. + * The sboxes alters the bit order of the output, and the altered + * bit ordrer is used progressivly. */ + +/* encrypt a block of text */ + +int serpent_encrypt(struct cipher_context *cx, const u8 *in, + u8 *out, int size, int atomic) +{ u32 *l_key = cx->keyinfo; + const u32 *in_blk = (u32 *) in; + u32 *out_blk = (u32 *) out; + u32 r0,r1,r2,r3,r4; + +#ifdef BLOCK_SWAP + r0 = io_swap(in_blk[3]); r1 = io_swap(in_blk[2]); + r2 = io_swap(in_blk[1]); r3 = io_swap(in_blk[0]); +#else + r0 = in_blk[0]; r1 = in_blk[1]; r2 = in_blk[2]; r3 = in_blk[3]; +#endif + + /* round 1 */ + KEYMIX(r0,r1,r2,r3,r4,0); + S0(r0,r1,r2,r3,r4); + LINTRANS(r1,r4,r2,r0,r3); + + /* round 2 */ + KEYMIX(r1,r4,r2,r0,r3,4); + S1(r1,r4,r2,r0,r3); + LINTRANS(r0,r4,r2,r1,r3); + + /* round 3 */ + KEYMIX(r0,r4,r2,r1,r3,8); + S2(r0,r4,r2,r1,r3); + LINTRANS(r2,r1,r4,r3,r0); + + /* round 4 */ + KEYMIX(r2,r1,r4,r3,r0,12); + S3(r2,r1,r4,r3,r0); + LINTRANS(r1,r4,r3,r0,r2); + + /* round 5 */ + KEYMIX(r1,r4,r3,r0,r2,16); + S4(r1,r4,r3,r0,r2) + LINTRANS(r4,r2,r1,r0,r3); + + /* round 6 */ + KEYMIX(r4,r2,r1,r0,r3,20); + S5(r4,r2,r1,r0,r3); + LINTRANS(r2,r0,r4,r1,r3); + + /* round 7 */ + KEYMIX(r2,r0,r4,r1,r3,24); + S6(r2,r0,r4,r1,r3) + LINTRANS(r2,r0,r3,r4,r1); + + /* round 8 */ + KEYMIX(r2,r0,r3,r4,r1,28); + S7(r2,r0,r3,r4,r1); + LINTRANS(r3,r1,r4,r2,r0); + + /* round 9 */ + KEYMIX(r3,r1,r4,r2,r0,32); + S0(r3,r1,r4,r2,r0); + LINTRANS(r1,r0,r4,r3,r2); + + /* round 10 */ + KEYMIX(r1,r0,r4,r3,r2,36); + S1(r1,r0,r4,r3,r2); + LINTRANS(r3,r0,r4,r1,r2); + + /* round 11 */ + KEYMIX(r3,r0,r4,r1,r2,40); + S2(r3,r0,r4,r1,r2); + LINTRANS(r4,r1,r0,r2,r3); + + /* round 12 */ + KEYMIX(r4,r1,r0,r2,r3,44); + S3(r4,r1,r0,r2,r3); + LINTRANS(r1,r0,r2,r3,r4); + + /* round 13 */ + KEYMIX(r1,r0,r2,r3,r4,48); + S4(r1,r0,r2,r3,r4) + LINTRANS(r0,r4,r1,r3,r2); + + /* round 14 */ + KEYMIX(r0,r4,r1,r3,r2,52); + S5(r0,r4,r1,r3,r2); + LINTRANS(r4,r3,r0,r1,r2); + + /* round 15 */ + KEYMIX(r4,r3,r0,r1,r2,56); + S6(r4,r3,r0,r1,r2) + LINTRANS(r4,r3,r2,r0,r1); + + /* round 16 */ + KEYMIX(r4,r3,r2,r0,r1,60); + S7(r4,r3,r2,r0,r1); + LINTRANS(r2,r1,r0,r4,r3); + + /* round 17 */ + KEYMIX(r2,r1,r0,r4,r3,64); + S0(r2,r1,r0,r4,r3); + LINTRANS(r1,r3,r0,r2,r4); + + /* round 18 */ + KEYMIX(r1,r3,r0,r2,r4,68); + S1(r1,r3,r0,r2,r4); + LINTRANS(r2,r3,r0,r1,r4); + + /* round 19 */ + KEYMIX(r2,r3,r0,r1,r4,72); + S2(r2,r3,r0,r1,r4); + LINTRANS(r0,r1,r3,r4,r2); + + /* round 20 */ + KEYMIX(r0,r1,r3,r4,r2,76); + S3(r0,r1,r3,r4,r2); + LINTRANS(r1,r3,r4,r2,r0); + + /* round 21 */ + KEYMIX(r1,r3,r4,r2,r0,80); + S4(r1,r3,r4,r2,r0) + LINTRANS(r3,r0,r1,r2,r4); + + /* round 22 */ + KEYMIX(r3,r0,r1,r2,r4,84); + S5(r3,r0,r1,r2,r4); + LINTRANS(r0,r2,r3,r1,r4); + + /* round 23 */ + KEYMIX(r0,r2,r3,r1,r4,88); + S6(r0,r2,r3,r1,r4) + LINTRANS(r0,r2,r4,r3,r1); + + /* round 24 */ + KEYMIX(r0,r2,r4,r3,r1,92); + S7(r0,r2,r4,r3,r1); + LINTRANS(r4,r1,r3,r0,r2); + + /* round 25 */ + KEYMIX(r4,r1,r3,r0,r2,96); + S0(r4,r1,r3,r0,r2); + LINTRANS(r1,r2,r3,r4,r0); + + /* round 26 */ + KEYMIX(r1,r2,r3,r4,r0,100); + S1(r1,r2,r3,r4,r0); + LINTRANS(r4,r2,r3,r1,r0); + + /* round 27 */ + KEYMIX(r4,r2,r3,r1,r0,104); + S2(r4,r2,r3,r1,r0); + LINTRANS(r3,r1,r2,r0,r4); + + /* round 28 */ + KEYMIX(r3,r1,r2,r0,r4,108); + S3(r3,r1,r2,r0,r4); + LINTRANS(r1,r2,r0,r4,r3); + + /* round 29 */ + KEYMIX(r1,r2,r0,r4,r3,112); + S4(r1,r2,r0,r4,r3) + LINTRANS(r2,r3,r1,r4,r0); + + /* round 30 */ + KEYMIX(r2,r3,r1,r4,r0,116); + S5(r2,r3,r1,r4,r0); + LINTRANS(r3,r4,r2,r1,r0); + + /* round 31 */ + KEYMIX(r3,r4,r2,r1,r0,120); + S6(r3,r4,r2,r1,r0) + LINTRANS(r3,r4,r0,r2,r1); + + /* round 32 */ + KEYMIX(r3,r4,r0,r2,r1,124); + S7(r3,r4,r0,r2,r1); + KEYMIX(r0,r1,r2,r3,r4,128); + + +#ifdef BLOCK_SWAP + out_blk[3] = io_swap(r0); out_blk[2] = io_swap(r1); + out_blk[1] = io_swap(r2); out_blk[0] = io_swap(r3); +#else + out_blk[0] = r0; out_blk[1] = r1; out_blk[2] = r2; out_blk[3] = r3; +#endif + return 0; +}; + +/* decrypt a block of text */ + +int serpent_decrypt(struct cipher_context *cx, const u8 *in, + u8 *out, int size, int atomic) +{ u32 *l_key = cx->keyinfo; + const u32 *in_blk = (const u32 *)in; + u32 *out_blk = (u32 *)out; + u32 r0,r1,r2,r3,r4; + +#ifdef BLOCK_SWAP + r0 = io_swap(in_blk[3]); r1 = io_swap(in_blk[2]); + r2 = io_swap(in_blk[1]); r3 = io_swap(in_blk[0]); +#else + r0 = in_blk[0]; r1 = in_blk[1]; r2 = in_blk[2]; r3 = in_blk[3]; +#endif + + /* round 1 */ + KEYMIX(r0,r1,r2,r3,r4,128); + I7(r0,r1,r2,r3,r4); + KEYMIX(r3,r0,r1,r4,r2,124); + + /* round 2 */ + ILINTRANS(r3,r0,r1,r4,r2); + I6(r3,r0,r1,r4,r2); + KEYMIX(r0,r1,r2,r4,r3,120); + + /* round 3 */ + ILINTRANS(r0,r1,r2,r4,r3); + I5(r0,r1,r2,r4,r3); + KEYMIX(r1,r3,r4,r2,r0,116); + + /* round 4 */ + ILINTRANS(r1,r3,r4,r2,r0); + I4(r1,r3,r4,r2,r0); + KEYMIX(r1,r2,r4,r0,r3,112); + + /* round 5 */ + ILINTRANS(r1,r2,r4,r0,r3); + I3(r1,r2,r4,r0,r3); + KEYMIX(r4,r2,r0,r1,r3,108); + + /* round 6 */ + ILINTRANS(r4,r2,r0,r1,r3); + I2(r4,r2,r0,r1,r3); + KEYMIX(r2,r3,r0,r1,r4,104); + + /* round 7 */ + ILINTRANS(r2,r3,r0,r1,r4); + I1(r2,r3,r0,r1,r4); + KEYMIX(r4,r2,r1,r0,r3,100); + + /* round 8 */ + ILINTRANS(r4,r2,r1,r0,r3); + I0(r4,r2,r1,r0,r3); + KEYMIX(r4,r3,r2,r0,r1,96); + + /* round 9 */ + ILINTRANS(r4,r3,r2,r0,r1); + I7(r4,r3,r2,r0,r1); + KEYMIX(r0,r4,r3,r1,r2,92); + + /* round 10 */ + ILINTRANS(r0,r4,r3,r1,r2); + I6(r0,r4,r3,r1,r2); + KEYMIX(r4,r3,r2,r1,r0,88); + + /* round 11 */ + ILINTRANS(r4,r3,r2,r1,r0); + I5(r4,r3,r2,r1,r0); + KEYMIX(r3,r0,r1,r2,r4,84); + + /* round 12 */ + ILINTRANS(r3,r0,r1,r2,r4); + I4(r3,r0,r1,r2,r4); + KEYMIX(r3,r2,r1,r4,r0,80); + + /* round 13 */ + ILINTRANS(r3,r2,r1,r4,r0); + I3(r3,r2,r1,r4,r0); + KEYMIX(r1,r2,r4,r3,r0,76); + + /* round 14 */ + ILINTRANS(r1,r2,r4,r3,r0); + I2(r1,r2,r4,r3,r0); + KEYMIX(r2,r0,r4,r3,r1,72); + + /* round 15 */ + ILINTRANS(r2,r0,r4,r3,r1); + I1(r2,r0,r4,r3,r1); + KEYMIX(r1,r2,r3,r4,r0,68); + + /* round 16 */ + ILINTRANS(r1,r2,r3,r4,r0); + I0(r1,r2,r3,r4,r0); + KEYMIX(r1,r0,r2,r4,r3,64); + + /* round 17 */ + ILINTRANS(r1,r0,r2,r4,r3); + I7(r1,r0,r2,r4,r3); + KEYMIX(r4,r1,r0,r3,r2,60); + + /* round 18 */ + ILINTRANS(r4,r1,r0,r3,r2); + I6(r4,r1,r0,r3,r2); + KEYMIX(r1,r0,r2,r3,r4,56); + + /* round 19 */ + ILINTRANS(r1,r0,r2,r3,r4); + I5(r1,r0,r2,r3,r4); + KEYMIX(r0,r4,r3,r2,r1,52); + + /* round 20 */ + ILINTRANS(r0,r4,r3,r2,r1); + I4(r0,r4,r3,r2,r1); + KEYMIX(r0,r2,r3,r1,r4,48); + + /* round 21 */ + ILINTRANS(r0,r2,r3,r1,r4); + I3(r0,r2,r3,r1,r4); + KEYMIX(r3,r2,r1,r0,r4,44); + + /* round 22 */ + ILINTRANS(r3,r2,r1,r0,r4); + I2(r3,r2,r1,r0,r4); + KEYMIX(r2,r4,r1,r0,r3,40); + + /* round 23 */ + ILINTRANS(r2,r4,r1,r0,r3); + I1(r2,r4,r1,r0,r3); + KEYMIX(r3,r2,r0,r1,r4,36); + + /* round 24 */ + ILINTRANS(r3,r2,r0,r1,r4); + I0(r3,r2,r0,r1,r4); + KEYMIX(r3,r4,r2,r1,r0,32); + + /* round 25 */ + ILINTRANS(r3,r4,r2,r1,r0); + I7(r3,r4,r2,r1,r0); + KEYMIX(r1,r3,r4,r0,r2,28); + + /* round 26 */ + ILINTRANS(r1,r3,r4,r0,r2); + I6(r1,r3,r4,r0,r2); + KEYMIX(r3,r4,r2,r0,r1,24); + + /* round 27 */ + ILINTRANS(r3,r4,r2,r0,r1); + I5(r3,r4,r2,r0,r1); + KEYMIX(r4,r1,r0,r2,r3,20); + + /* round 28 */ + ILINTRANS(r4,r1,r0,r2,r3); + I4(r4,r1,r0,r2,r3); + KEYMIX(r4,r2,r0,r3,r1,16); + + /* round 29 */ + ILINTRANS(r4,r2,r0,r3,r1); + I3(r4,r2,r0,r3,r1); + KEYMIX(r0,r2,r3,r4,r1,12); + + /* round 30 */ + ILINTRANS(r0,r2,r3,r4,r1); + I2(r0,r2,r3,r4,r1); + KEYMIX(r2,r1,r3,r4,r0,8); + + /* round 31 */ + ILINTRANS(r2,r1,r3,r4,r0); + I1(r2,r1,r3,r4,r0); + KEYMIX(r0,r2,r4,r3,r1,4); + + /* round 32 */ + ILINTRANS(r0,r2,r4,r3,r1); + I0(r0,r2,r4,r3,r1); + KEYMIX(r0,r1,r2,r3,r4,0); + +#ifdef BLOCK_SWAP + out_blk[3] = io_swap(r0); out_blk[2] = io_swap(r1); + out_blk[1] = io_swap(r2); out_blk[0] = io_swap(r3); +#else + out_blk[0] = r0; out_blk[1] = r1; out_blk[2] = r2; out_blk[3] = r3; +#endif + return 0; +}; + + +static void serpent_lock(void) +{ + MOD_INC_USE_COUNT; +} + +static void serpent_unlock(void) +{ + MOD_DEC_USE_COUNT; +} + + +#define CIPHER_BITS_128 +#define CIPHER_NAME(x) serpent##x +#include "gen-cbc.h" +#include "gen-ecb.h" + +#define SERPENT_KEY_SCHEDULE_SIZE (140*sizeof(u32)) + +static struct cipher_implementation serpent_ecb = { + {{NULL,NULL}, CIPHER_MODE_ECB, "serpent-ecb"}, + blocksize: 16, + ivsize: 0, + key_schedule_size: SERPENT_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(serpent_ecb), + INIT_CIPHER_OPS(serpent) +}; + +static struct cipher_implementation serpent_cbc = { + {{NULL,NULL}, CIPHER_MODE_CBC, "serpent-cbc"}, + blocksize: 16, + ivsize: 16, + key_schedule_size: SERPENT_KEY_SCHEDULE_SIZE, + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(serpent_cbc), + INIT_CIPHER_OPS(serpent) +}; + +static int __init init_serpent(void) +{ + if (register_cipher(&serpent_ecb)) + printk(KERN_WARNING "Couldn't register serpent-ecb encryption\n"); + if (register_cipher(&serpent_cbc)) + printk(KERN_WARNING "Couldn't register serpent-cbc encryption\n"); + + return 0; +} + +static void __exit cleanup_serpent(void) +{ + if (unregister_cipher(&serpent_ecb)) + printk(KERN_WARNING "Couldn't unregister serpent-ecb encryption\n"); + if (unregister_cipher(&serpent_cbc)) + printk(KERN_WARNING "Couldn't unregister serpent-cbc encryption\n"); +} + +module_init(init_serpent); +module_exit(cleanup_serpent); diff -urN lin.2.4.3/crypto/cipher-twofish.c int.2.4.3/crypto/cipher-twofish.c --- lin.2.4.3/crypto/cipher-twofish.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/cipher-twofish.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,464 @@ +/* NOTE: This implementation has been changed from the original + * source. See ChangeLog for more information. + * Maintained by Marc Mutz + */ + +/* Twofish for GPG + * By Matthew Skala , July 26, 1998 + * 256-bit key length added March 20, 1999 + * Some modifications to reduce the text size by Werner Koch, April, 1998 + * + * The original author has disclaimed all copyright interest in this + * code and thus putting it in the public domain. + * + * This code is a "clean room" implementation, written from the paper + * _Twofish: A 128-Bit Block Cipher_ by Bruce Schneier, John Kelsey, + * Doug Whiting, David Wagner, Chris Hall, and Niels Ferguson, available + * through http://www.counterpane.com/twofish.html + * + * For background information on multiplication in finite fields, used for + * the matrix operations in the key schedule, see the book _Contemporary + * Abstract Algebra_ by Joseph A. Gallian, especially chapter 22 in the + * Third Edition. + * + * Only the 128- and 256-bit key sizes are supported. This code is intended + * for GNU C on a 32-bit system, but it should work almost anywhere. Loops + * are unrolled, precomputation tables are used, etc., for maximum speed at + * some cost in memory consumption. */ + +#include +#include +#include +#include +#include + +/* what shall twofish_set_key() return on wrong key lengths, resp. who + * checks for correct keysizes? */ +#define TWOFISH_WRONG_KEYLENGTH 1 + +#if 0 /* shouldn't this be #ifdef rotl32 ? + * Look at wordops.h: It includes asm/wordops.h. + * Anyway, we have to search in the macros for rot's, + * since they seem to be defined in a generic way. */ +#define rotl rotl32 +#define rotr rotr32 +#else +#define rotl generic_rotl32 +#define rotr generic_rotr32 +#endif + +/* Structure for an expanded Twofish key. s contains the key-dependent + * S-boxes composed with the MDS matrix; w contains the eight "whitening" + * subkeys, K[0] through K[7]. k holds the remaining, "round" subkeys. Note + * that k[i] corresponds to what the Twofish paper calls K[i+8]. */ +typedef struct { + u32 s[4][256], w[8], k[32]; +} TWOFISH_context; + +#include "2fish_tables.h" + +/* Macro to perform one column of the RS matrix multiplication. The + * parameters a, b, c, and d are the four bytes of output; i is the index + * of the key bytes, and w, x, y, and z, are the column of constants from + * the RS matrix, preprocessed through the poly_to_exp table. */ + +#define CALC_S(a, b, c, d, i, w, x, y, z) \ + if (key[i]) { \ + tmp = poly_to_exp[key[i] - 1]; \ + (a) ^= exp_to_poly[tmp + (w)]; \ + (b) ^= exp_to_poly[tmp + (x)]; \ + (c) ^= exp_to_poly[tmp + (y)]; \ + (d) ^= exp_to_poly[tmp + (z)]; \ + } + +/* Macros to calculate the key-dependent S-boxes for a 128-bit key using + * the S vector from CALC_S. CALC_SB_2 computes a single entry in all + * four S-boxes, where i is the index of the entry to compute, and a and b + * are the index numbers preprocessed through the q0 and q1 tables + * respectively. CALC_SB is simply a convenience to make the code shorter; + * it calls CALC_SB_2 four times with consecutive indices from i to i+3, + * using the remaining parameters two by two. */ + +#define CALC_SB_2(i, a, b) \ + ctx->s[0][i] = mds[0][q0[(a) ^ sa] ^ se]; \ + ctx->s[1][i] = mds[1][q0[(b) ^ sb] ^ sf]; \ + ctx->s[2][i] = mds[2][q1[(a) ^ sc] ^ sg]; \ + ctx->s[3][i] = mds[3][q1[(b) ^ sd] ^ sh] + +#define CALC_SB(i, a, b, c, d, e, f, g, h) \ + CALC_SB_2 (i, a, b); CALC_SB_2 ((i)+1, c, d); \ + CALC_SB_2 ((i)+2, e, f); CALC_SB_2 ((i)+3, g, h) + +/* Macros exactly like CALC_SB and CALC_SB_2, but for 256-bit keys. */ + +#define CALC_SB256_2(i, a, b) \ + ctx->s[0][i] = mds[0][q0[q0[q1[(b) ^ sa] ^ se] ^ si] ^ sm]; \ + ctx->s[1][i] = mds[1][q0[q1[q1[(a) ^ sb] ^ sf] ^ sj] ^ sn]; \ + ctx->s[2][i] = mds[2][q1[q0[q0[(a) ^ sc] ^ sg] ^ sk] ^ so]; \ + ctx->s[3][i] = mds[3][q1[q1[q0[(b) ^ sd] ^ sh] ^ sl] ^ sp]; + +#define CALC_SB256(i, a, b, c, d, e, f, g, h) \ + CALC_SB256_2 (i, a, b); CALC_SB256_2 ((i)+1, c, d); \ + CALC_SB256_2 ((i)+2, e, f); CALC_SB256_2 ((i)+3, g, h) + +/* Macros to calculate the whitening and round subkeys. CALC_K_2 computes the + * last two stages of the h() function for a given index (either 2i or 2i+1). + * a, b, c, and d are the four bytes going into the last two stages. For + * 128-bit keys, this is the entire h() function and a and c are the index + * preprocessed through q0 and q1 respectively; for longer keys they are the + * output of previous stages. j is the index of the first key byte to use. + * CALC_K computes a pair of subkeys for 128-bit Twofish, by calling CALC_K_2 + * twice, doing the Psuedo-Hadamard Transform, and doing the necessary + * rotations. Its parameters are: a, the array to write the results into, + * j, the index of the first output entry, k and l, the preprocessed indices + * for index 2i, and m and n, the preprocessed indices for index 2i+1. + * CALC_K256_2 expands CALC_K_2 to handle 256-bit keys, by doing two + * additional lookup-and-XOR stages. The parameters a and b are the index + * preprocessed through q0 and q1 respectively; j is the index of the first + * key byte to use. CALC_K256 is identical to CALC_K but for using the + * CALC_K256_2 macro instead of CALC_K_2. */ + +#define CALC_K_2(a, b, c, d, j) \ + mds[0][q0[a ^ key[(j) + 8]] ^ key[j]] \ + ^ mds[1][q0[b ^ key[(j) + 9]] ^ key[(j) + 1]] \ + ^ mds[2][q1[c ^ key[(j) + 10]] ^ key[(j) + 2]] \ + ^ mds[3][q1[d ^ key[(j) + 11]] ^ key[(j) + 3]] + +#define CALC_K(a, j, k, l, m, n) \ + x = CALC_K_2 (k, l, k, l, 0); \ + y = CALC_K_2 (m, n, m, n, 4); \ + y = (y << 8) + (y >> 24); \ + x += y; y += x; ctx->a[j] = x; \ + ctx->a[(j) + 1] = (y << 9) + (y >> 23) + +#define CALC_K256_2(a, b, j) \ + CALC_K_2 (q0[q1[b ^ key[(j) + 24]] ^ key[(j) + 16]], \ + q1[q1[a ^ key[(j) + 25]] ^ key[(j) + 17]], \ + q0[q0[a ^ key[(j) + 26]] ^ key[(j) + 18]], \ + q1[q0[b ^ key[(j) + 27]] ^ key[(j) + 19]], j) + +#define CALC_K256(a, j, k, l, m, n) \ + x = CALC_K256_2 (k, l, 0); \ + y = CALC_K256_2 (m, n, 4); \ + y = (y << 8) + (y >> 24); \ + x += y; y += x; ctx->a[j] = x; \ + ctx->a[(j) + 1] = (y << 9) + (y >> 23) + +/* Perform the key setup. Note that this works only with 128- and 256-bit + * keys, despite the API that looks like it might support other sizes. */ + +int twofish_set_key (struct cipher_context *cx, + unsigned char *key, int key_len, int atomic) +{ + TWOFISH_context *ctx = (TWOFISH_context *)cx->keyinfo; + + int i, j, k; + + /* Temporaries for CALC_K. */ + u32 x, y; + + /* The S vector used to key the S-boxes, split up into individual bytes. + * 128-bit keys use only sa through sh; 256-bit use all of them. */ + u8 sa = 0, sb = 0, sc = 0, sd = 0, se = 0, sf = 0, sg = 0, sh = 0; + u8 si = 0, sj = 0, sk = 0, sl = 0, sm = 0, sn = 0, so = 0, sp = 0; + + /* Temporary for CALC_S. */ + u8 tmp; + + /* Check key length. */ + if( ( ( (unsigned int)key_len - 16 ) | 16 ) != 16 ) + return TWOFISH_WRONG_KEYLENGTH; + + + /* Compute the first two words of the S vector. The magic numbers are + * the entries of the RS matrix, preprocessed through poly_to_exp. The + * numbers in the comments are the original (polynomial form) matrix + * entries. */ + CALC_S (sa, sb, sc, sd, 0, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */ + CALC_S (sa, sb, sc, sd, 1, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */ + CALC_S (sa, sb, sc, sd, 2, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */ + CALC_S (sa, sb, sc, sd, 3, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */ + CALC_S (sa, sb, sc, sd, 4, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */ + CALC_S (sa, sb, sc, sd, 5, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */ + CALC_S (sa, sb, sc, sd, 6, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */ + CALC_S (sa, sb, sc, sd, 7, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */ + CALC_S (se, sf, sg, sh, 8, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */ + CALC_S (se, sf, sg, sh, 9, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */ + CALC_S (se, sf, sg, sh, 10, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */ + CALC_S (se, sf, sg, sh, 11, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */ + CALC_S (se, sf, sg, sh, 12, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */ + CALC_S (se, sf, sg, sh, 13, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */ + CALC_S (se, sf, sg, sh, 14, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */ + CALC_S (se, sf, sg, sh, 15, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */ + + if (key_len == 32) { /* 256-bit key */ + /* Calculate the remaining two words of the S vector */ + CALC_S (si, sj, sk, sl, 16, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */ + CALC_S (si, sj, sk, sl, 17, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */ + CALC_S (si, sj, sk, sl, 18, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */ + CALC_S (si, sj, sk, sl, 19, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */ + CALC_S (si, sj, sk, sl, 20, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */ + CALC_S (si, sj, sk, sl, 21, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */ + CALC_S (si, sj, sk, sl, 22, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */ + CALC_S (si, sj, sk, sl, 23, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */ + CALC_S (sm, sn, so, sp, 24, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */ + CALC_S (sm, sn, so, sp, 25, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */ + CALC_S (sm, sn, so, sp, 26, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */ + CALC_S (sm, sn, so, sp, 27, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */ + CALC_S (sm, sn, so, sp, 28, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */ + CALC_S (sm, sn, so, sp, 29, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */ + CALC_S (sm, sn, so, sp, 30, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */ + CALC_S (sm, sn, so, sp, 31, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */ + + /* Compute the S-boxes. */ + for(i=j=0,k=1; i < 256; i++, j += 2, k += 2 ) { + CALC_SB256_2( i, calc_sb_tbl[j], calc_sb_tbl[k] ); + } + + /* Calculate whitening and round subkeys. The constants are + * indices of subkeys, preprocessed through q0 and q1. */ + CALC_K256 (w, 0, 0xA9, 0x75, 0x67, 0xF3); + CALC_K256 (w, 2, 0xB3, 0xC6, 0xE8, 0xF4); + CALC_K256 (w, 4, 0x04, 0xDB, 0xFD, 0x7B); + CALC_K256 (w, 6, 0xA3, 0xFB, 0x76, 0xC8); + CALC_K256 (k, 0, 0x9A, 0x4A, 0x92, 0xD3); + CALC_K256 (k, 2, 0x80, 0xE6, 0x78, 0x6B); + CALC_K256 (k, 4, 0xE4, 0x45, 0xDD, 0x7D); + CALC_K256 (k, 6, 0xD1, 0xE8, 0x38, 0x4B); + CALC_K256 (k, 8, 0x0D, 0xD6, 0xC6, 0x32); + CALC_K256 (k, 10, 0x35, 0xD8, 0x98, 0xFD); + CALC_K256 (k, 12, 0x18, 0x37, 0xF7, 0x71); + CALC_K256 (k, 14, 0xEC, 0xF1, 0x6C, 0xE1); + CALC_K256 (k, 16, 0x43, 0x30, 0x75, 0x0F); + CALC_K256 (k, 18, 0x37, 0xF8, 0x26, 0x1B); + CALC_K256 (k, 20, 0xFA, 0x87, 0x13, 0xFA); + CALC_K256 (k, 22, 0x94, 0x06, 0x48, 0x3F); + CALC_K256 (k, 24, 0xF2, 0x5E, 0xD0, 0xBA); + CALC_K256 (k, 26, 0x8B, 0xAE, 0x30, 0x5B); + CALC_K256 (k, 28, 0x84, 0x8A, 0x54, 0x00); + CALC_K256 (k, 30, 0xDF, 0xBC, 0x23, 0x9D); + } else { + /* Compute the S-boxes. */ + for(i=j=0,k=1; i < 256; i++, j += 2, k += 2 ) { + CALC_SB_2( i, calc_sb_tbl[j], calc_sb_tbl[k] ); + } + + /* Calculate whitening and round subkeys. The constants are + * indices of subkeys, preprocessed through q0 and q1. */ + CALC_K (w, 0, 0xA9, 0x75, 0x67, 0xF3); + CALC_K (w, 2, 0xB3, 0xC6, 0xE8, 0xF4); + CALC_K (w, 4, 0x04, 0xDB, 0xFD, 0x7B); + CALC_K (w, 6, 0xA3, 0xFB, 0x76, 0xC8); + CALC_K (k, 0, 0x9A, 0x4A, 0x92, 0xD3); + CALC_K (k, 2, 0x80, 0xE6, 0x78, 0x6B); + CALC_K (k, 4, 0xE4, 0x45, 0xDD, 0x7D); + CALC_K (k, 6, 0xD1, 0xE8, 0x38, 0x4B); + CALC_K (k, 8, 0x0D, 0xD6, 0xC6, 0x32); + CALC_K (k, 10, 0x35, 0xD8, 0x98, 0xFD); + CALC_K (k, 12, 0x18, 0x37, 0xF7, 0x71); + CALC_K (k, 14, 0xEC, 0xF1, 0x6C, 0xE1); + CALC_K (k, 16, 0x43, 0x30, 0x75, 0x0F); + CALC_K (k, 18, 0x37, 0xF8, 0x26, 0x1B); + CALC_K (k, 20, 0xFA, 0x87, 0x13, 0xFA); + CALC_K (k, 22, 0x94, 0x06, 0x48, 0x3F); + CALC_K (k, 24, 0xF2, 0x5E, 0xD0, 0xBA); + CALC_K (k, 26, 0x8B, 0xAE, 0x30, 0x5B); + CALC_K (k, 28, 0x84, 0x8A, 0x54, 0x00); + CALC_K (k, 30, 0xDF, 0xBC, 0x23, 0x9D); + } + + return 0; +} + +/* Macros to compute the g() function in the encryption and decryption + * rounds. G1 is the straight g() function; G2 includes the 8-bit + * rotation for the high 32-bit word. */ + +#define G1(a) \ + (ctx->s[0][(a) & 0xFF]) ^ (ctx->s[1][((a) >> 8) & 0xFF]) \ + ^ (ctx->s[2][((a) >> 16) & 0xFF]) ^ (ctx->s[3][(a) >> 24]) + +#define G2(b) \ + (ctx->s[1][(b) & 0xFF]) ^ (ctx->s[2][((b) >> 8) & 0xFF]) \ + ^ (ctx->s[3][((b) >> 16) & 0xFF]) ^ (ctx->s[0][(b) >> 24]) + +/* Encryption and decryption Feistel rounds. Each one calls the two g() + * macros, does the PHT, and performs the XOR and the appropriate bit + * rotations. The parameters are the round number (used to select subkeys), + * and the four 32-bit chunks of the text. */ + +#define ENCROUND(n, a, b, c, d) \ + x = G1 (a); y = G2 (b); \ + x += y; y += x + ctx->k[2 * (n) + 1]; \ + (c) ^= x + ctx->k[2 * (n)]; \ + (c) = ((c) >> 1) + ((c) << 31); \ + (d) = (((d) << 1)+((d) >> 31)) ^ y + +#define DECROUND(n, a, b, c, d) \ + x = G1 (a); y = G2 (b); \ + x += y; y += x; \ + (d) ^= y + ctx->k[2 * (n) + 1]; \ + (d) = ((d) >> 1) + ((d) << 31); \ + (c) = (((c) << 1)+((c) >> 31)); \ + (c) ^= (x + ctx->k[2 * (n)]) + +/* Encryption and decryption cycles; each one is simply two Feistel rounds + * with the 32-bit chunks re-ordered to simulate the "swap" */ + +#define ENCCYCLE(n) \ + ENCROUND (2 * (n), a, b, c, d); \ + ENCROUND (2 * (n) + 1, c, d, a, b) + +#define DECCYCLE(n) \ + DECROUND (2 * (n) + 1, c, d, a, b); \ + DECROUND (2 * (n), a, b, c, d) + +/* Macros to convert the input and output bytes into 32-bit words, + * and simultaneously perform the whitening step. INPACK packs word + * number n into the variable named by x, using whitening subkey number m. + * OUTUNPACK unpacks word number n from the variable named by x, using + * whitening subkey number m. */ + +#define INPACK(n, x, m) \ + x = in[4 * (n)] ^ (in[4 * (n) + 1] << 8) \ + ^ (in[4 * (n) + 2] << 16) ^ (in[4 * (n) + 3] << 24) ^ ctx->w[m] + +#define OUTUNPACK(n, x, m) \ + x ^= ctx->w[m]; \ + out[4 * (n)] = x; out[4 * (n) + 1] = x >> 8; \ + out[4 * (n) + 2] = x >> 16; out[4 * (n) + 3] = x >> 24 + +/* Encrypt one block. in and out may be the same. */ + +int twofish_encrypt (struct cipher_context *cx, + const u8 *in, u8 *out, int size, int atomic) +{ + TWOFISH_context *ctx = (TWOFISH_context *)cx->keyinfo; + + /* The four 32-bit chunks of the text. */ + u32 a, b, c, d; + + /* Temporaries used by the round function. */ + u32 x, y; + + /* Input whitening and packing. */ + INPACK (0, a, 0); + INPACK (1, b, 1); + INPACK (2, c, 2); + INPACK (3, d, 3); + + /* Encryption Feistel cycles. */ + ENCCYCLE (0); + ENCCYCLE (1); + ENCCYCLE (2); + ENCCYCLE (3); + ENCCYCLE (4); + ENCCYCLE (5); + ENCCYCLE (6); + ENCCYCLE (7); + + /* Output whitening and unpacking. */ + OUTUNPACK (0, c, 4); + OUTUNPACK (1, d, 5); + OUTUNPACK (2, a, 6); + OUTUNPACK (3, b, 7); + + return 0; +} + +/* Decrypt one block. in and out may be the same. */ + +int twofish_decrypt (struct cipher_context *cx, + const u8 *in, u8 *out, int size, int atomic) +{ + TWOFISH_context *ctx = (TWOFISH_context *)cx->keyinfo; + + /* The four 32-bit chunks of the text. */ + u32 a, b, c, d; + + /* Temporaries used by the round function. */ + u32 x, y; + + /* Input whitening and packing. */ + INPACK (0, c, 4); + INPACK (1, d, 5); + INPACK (2, a, 6); + INPACK (3, b, 7); + + /* Encryption Feistel cycles. */ + DECCYCLE (7); + DECCYCLE (6); + DECCYCLE (5); + DECCYCLE (4); + DECCYCLE (3); + DECCYCLE (2); + DECCYCLE (1); + DECCYCLE (0); + + /* Output whitening and unpacking. */ + OUTUNPACK (0, a, 0); + OUTUNPACK (1, b, 1); + OUTUNPACK (2, c, 2); + OUTUNPACK (3, d, 3); + + return 0; +} + +static void twofish_lock(void) +{ + MOD_INC_USE_COUNT; +} + +static void twofish_unlock(void) +{ + MOD_DEC_USE_COUNT; +} + +#define CIPHER_BITS_128 +#define CIPHER_NAME(x) twofish##x +#include "gen-cbc.h" +#include "gen-ecb.h" + + +static struct cipher_implementation twofish_ecb = { + {{NULL,NULL}, CIPHER_MODE_ECB, "twofish-ecb"}, + blocksize: 16, + ivsize: 0, + key_schedule_size: sizeof(TWOFISH_context), + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(twofish_ecb), + INIT_CIPHER_OPS(twofish) +}; + +static struct cipher_implementation twofish_cbc = { + {{NULL,NULL}, CIPHER_MODE_CBC, "twofish-cbc"}, + blocksize: 16, + ivsize: 16, + key_schedule_size: sizeof(TWOFISH_context), + key_size_mask: CIPHER_KEYSIZE_128 | CIPHER_KEYSIZE_192 | + CIPHER_KEYSIZE_256, + INIT_CIPHER_BLKOPS(twofish_cbc), + INIT_CIPHER_OPS(twofish) +}; + +static int __init init_twofish(void) +{ + if (register_cipher(&twofish_ecb)) + printk(KERN_WARNING "Couldn't register twofish-ecb encryption\n"); + if (register_cipher(&twofish_cbc)) + printk(KERN_WARNING "Couldn't register twofish-cbc encryption\n"); + + return 0; +} + +static void cleanup_twofish(void) +{ + if (unregister_cipher(&twofish_ecb)) + printk(KERN_WARNING "Couldn't unregister twofish-ecb encryption\n"); + if (unregister_cipher(&twofish_cbc)) + printk(KERN_WARNING "Couldn't unregister twofish-cbc encryption\n"); +} + +module_init(init_twofish); +module_exit(cleanup_twofish); diff -urN lin.2.4.3/crypto/cryptoapi.c int.2.4.3/crypto/cryptoapi.c --- lin.2.4.3/crypto/cryptoapi.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/cryptoapi.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,466 @@ +/* + * crypto/cryptoapi.c + * + * Written by Alexander Kjeldaas 1998-11-15 + * + * 2000-10-15 Harald Welte + * - ported to Linux 2.4 + * + * Copyright 1998 by Alexander Kjeldaas. Redistribution of this file + * is permitted under the GNU Public License. + */ + +#include +#include + +#ifdef CONFIG_KMOD +#include +#endif + +#include +#include +#include +#include +#include + + +static struct proc_dir_entry *proc_crypto; + +static struct cipher_context * +default_realloc_context(struct cipher_context *old_cx, + struct cipher_implementation *, + int max_key_len); +static void default_wipe_context(struct cipher_context *cx); +static void default_free_context(struct cipher_context *cx); +static void default_lock(void); +static void default_unlock(void); +static int default_encrypt(struct cipher_context *cx, + const u8 *in, u8 *out, int size); +static int default_encrypt_atomic(struct cipher_context *cx, + const u8 *in, u8 *out, int size); +static int default_decrypt(struct cipher_context *cx, + const u8 *in, u8 *out, int size); +static int default_decrypt_atomic(struct cipher_context *cx, + const u8 *in, u8 *out, int size); +static int default_set_key(struct cipher_context *cx, + unsigned char *key, int key_len); +static int default_set_key_atomic(struct cipher_context *cx, + unsigned char *key, int key_len); + + +#ifdef CONFIG_PROC_FS +static int cipher_read_proc(char *page, char **start, off_t off, + int count, int *eof, void *data); +static int digest_read_proc(char *page, char **start, off_t off, + int count, int *eof, void *data); +#endif + +static LIST_HEAD(ciphers); +static LIST_HEAD(digests); + +static struct transform_group transforms[MAX_TRANSFORM] = { + /* digest */ + { TRANSFORM_DIGEST, "digest", RW_LOCK_UNLOCKED, &digests, +#ifdef CONFIG_PROC_FS + NULL, &digest_read_proc +#endif + }, + /* cipher */ + { TRANSFORM_CIPHER, "cipher", RW_LOCK_UNLOCKED, &ciphers, +#ifdef CONFIG_PROC_FS + NULL, &cipher_read_proc +#endif + } +}; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) && defined(CONFIG_PROC_FS) +static struct proc_dir_entry * +create_proc_read_entry(const char *name, + mode_t mode, struct proc_dir_entry *base, + read_proc_t *read_proc, void * data) +{ + struct proc_dir_entry *res=create_proc_entry(name,mode,base); + if (res) { + res->read_proc=read_proc; + res->data=data; + } + return res; +} + +#endif + + +/** + * find_transform_by_name - Find transform implementation + * @name: The name of the transform. + * @tgroup: The identifier for the transform group the transform belongs to. + * + * Returns a ptr to the transform on success, NULL on failure. + * Valid tgroup values are: + * + * %TRANSFORM_CIPHER - When looking for ciphers + * + * %TRANSFORM_DIGEST - When looking for digests + * + * You might want to use the wrapper-functions + * find_cipher_by_name(const char *name), and + * find_digest_by_name(const char *name) instead of this one. + */ +struct transform_implementation * +find_transform_by_name(const char *name, int tgroup, int atomicapi) +{ + struct list_head *tmp; + struct transform_group *tg; +#ifdef CONFIG_KMOD + int mod_try = 0; + char module_name[200]; + char *p; +retry: +#endif + + if (tgroup >= MAX_TRANSFORM) + return NULL; + tg = &transforms[tgroup]; + + read_lock(&tg->tg_lock); + for (tmp = tg->tg_head->next; tmp != tg->tg_head; tmp = tmp->next) { + struct transform_implementation *t; + t = list_entry(tmp, struct transform_implementation, t_list); + if (strcmp(t->t_name, name) == 0) { + if (!atomicapi || t->t_atomicapi) { + read_unlock(&tg->tg_lock); + return t; + } + } + } + read_unlock(&tg->tg_lock); +#ifdef CONFIG_KMOD + if (mod_try == 0) { + mod_try = 1; + sprintf(module_name, "%s-%s", tg->tg_name, name); + printk(module_name); + request_module(module_name); + goto retry; + } + /* We try loading more and more general modules in succession. + * For example, if the module_name initially is set to + * "cipher-blowfish-cbc", we first try a module called + * "cipher-blowfish-cbc", then "cipher-blowfish" */ + if ((p = strrchr(module_name, '-')) != NULL) { + *p = 0; + printk(module_name); + request_module(module_name); + goto retry; + } +#endif + return NULL; +} + +/** + * register_transform - Register new transform. + * @ti: Initialized transform implementation struct. + * @tgroup: The identifier for the transform group the transform should belong to. + * + * Adds a transform from the crypto API. ti->t_group is set to point + * to the correct transform group according to tgroup, the transform + * is added to the group's transform-list, and a /proc files are + * created if CONFIG_PROC_FS=y Returns 0 on success. Valid tgroup + * values are: + * + * %TRANSFORM_CIPHER - When adding ciphers + * + * %TRANSFORM_DIGEST - When adding digests + * + */ +int +register_transform(struct transform_implementation *ti, int tgroup) +{ + int err = 0; + struct transform_group *tg; + + if (tgroup >= MAX_TRANSFORM) { + return -1; + } + INIT_LIST_HEAD(&ti->t_list); + tg = ti->t_group = &transforms[tgroup]; + write_lock(&ti->t_group->tg_lock); + list_add(&ti->t_list, ti->t_group->tg_head); + write_unlock(&ti->t_group->tg_lock); + if (!err) { + MOD_INC_USE_COUNT; + printk(KERN_INFO "cryptoapi: Registered %s (%d)\n", + ti->t_name, ti->t_flags); + ti->t_proc = create_proc_read_entry(ti->t_name, + S_IFREG|S_IRUGO, + tg->tg_proc_parent_dir, + tg->read_proc, (void *)ti); + } + return err; +} + +/** + * unregister_transform - Unregister new transform. + * @ti: Initialized transform implementation struct. + * + * Removes a transform from the crypto API. Returns 0 on success, + * non-zero on failure to remove /proc entry. + * + */ +int +unregister_transform(struct transform_implementation *ti) +{ + int ret = 0; + + if (!list_empty(&ti->t_list)) { + write_lock(&ti->t_group->tg_lock); + list_del(&ti->t_list); + write_unlock(&ti->t_group->tg_lock); + ret = 0; + } + +#ifdef CONFIG_PROC_FS + if (ti->t_proc) { + ti->t_proc = NULL; + remove_proc_entry(ti->t_name, ti->t_group->tg_proc_parent_dir); + } +#endif + + if (!ret) + MOD_DEC_USE_COUNT; + + return ret; +} + + +int +register_cipher(struct cipher_implementation *ci) +{ + if (!ci->realloc_context) { + ci->realloc_context = default_realloc_context; + } + if (!ci->wipe_context) { + ci->wipe_context = default_wipe_context; + } + if (!ci->free_context) { + ci->free_context = default_free_context; + } + if (!ci->lock) { + ci->lock = default_lock; + } + if (!ci->unlock) { + ci->unlock = default_unlock; + } + + if (ci->_encrypt && ci->_decrypt && ci->_set_key) { + ci->encrypt = default_encrypt; + ci->encrypt_atomic = default_encrypt_atomic; + ci->decrypt = default_decrypt; + ci->decrypt_atomic = default_decrypt_atomic; + ci->set_key = default_set_key; + ci->set_key_atomic = default_set_key_atomic; + ci->trans.t_atomicapi = 1; + } + + if (!ci->encrypt || !ci->decrypt || !ci->set_key) { + return -EINVAL; + } + return register_transform((struct transform_implementation *)ci, + TRANSFORM_CIPHER); +} + +int +register_digest(struct digest_implementation *di) +{ + return register_transform((struct transform_implementation *)di, + TRANSFORM_DIGEST); +} + +int +unregister_cipher(struct cipher_implementation *ci) +{ + return unregister_transform((struct transform_implementation *)ci); +} + +int +unregister_digest(struct digest_implementation *ci) +{ + return unregister_transform((struct transform_implementation *)ci); +} + + +struct cipher_context * +default_realloc_context(struct cipher_context *old_cx, + struct cipher_implementation *ci, + int max_key_len) +{ + struct cipher_context *cx; + /* Default ciphers need the same amount of memory for any key + size */ + if (old_cx) { + return old_cx; + } + cx = kmalloc(sizeof(struct cipher_context) + + ci->key_schedule_size, GFP_KERNEL); + if (!cx) { + return NULL; + } + cx->keyinfo = (void *)((char *)cx)+sizeof(struct cipher_context); + (void) max_key_len; /* Make gcc happy */ + return cx; +} + +void +default_wipe_context(struct cipher_context *cx) +{ + struct cipher_implementation *ci = cx->ci; + u32 *keyinfo = cx->keyinfo; + memset(cx->keyinfo, 0, ci->key_schedule_size); + memset(cx, 0, sizeof(struct cipher_context)); + cx->ci = ci; + cx->keyinfo = keyinfo; +} + +void +default_free_context(struct cipher_context *cx) +{ + kfree(cx); +} + +void +default_lock(void) +{ +} + +void +default_unlock(void) +{ +} + + +static int +default_encrypt(struct cipher_context *cx, const u8 *in, u8 *out, int size) +{ + return cx->ci->_encrypt(cx, in, out, size, 0); +} + +static int +default_encrypt_atomic(struct cipher_context *cx, const u8 *in, u8 *out, + int size) +{ + return cx->ci->_encrypt(cx, in, out, size, 1); +} + + +static int +default_decrypt(struct cipher_context *cx, const u8 *in, u8 *out, int size) +{ + return cx->ci->_decrypt(cx, in, out, size, 0); +} + +static int +default_decrypt_atomic(struct cipher_context *cx, const u8 *in, u8 *out, + int size) +{ + return cx->ci->_decrypt(cx, in, out, size, 1); +} + +static int +default_set_key(struct cipher_context *cx, unsigned char *key, int key_len) +{ + return cx->ci->_set_key(cx, key, key_len, 0); +} + +static int +default_set_key_atomic(struct cipher_context *cx, unsigned char *key, + int key_len) +{ + return cx->ci->_set_key(cx, key, key_len, 1); +} + +#ifdef CONFIG_PROC_FS +static int cipher_read_proc(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + struct cipher_implementation *ci; + int len = 0; + + ci = (struct cipher_implementation *)data; + + len = sprintf(page, + "cipher_name: %s\n" + "cipher_flags: %d\n" + "blocksize: %d\n" + "keysize_mask: 0x%08x\n" + "ivsize: %d\n" + "key_schedule_size: %d\n", + ci->trans.t_name, ci->trans.t_flags, + ci->blocksize, ci->key_size_mask, + ci->ivsize, ci->key_schedule_size); + *eof=1; + + return len; +} + +static int digest_read_proc(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + struct digest_implementation *ci; + int len = 0; + + ci = (struct digest_implementation *)data; + + len = sprintf(page, "digest_name: %s\n" + "digest_flags: %d\n" + "blocksize: %d\n" + "working_size: %d\n", + ci->trans.t_name, ci->trans.t_flags, + ci->blocksize, ci->working_size); + *eof=1; + + return len; +} +#endif + + +static int __init +init_cryptoapi(void) +{ + int i; + +#ifdef CONFIG_PROC_FS + proc_crypto = proc_mkdir("crypto", NULL); + + for (i = 0; i +#include +#include +#include +#include +#include "md5.h" +#include "md5c.c" + +static int +md5_open (struct digest_context *cx) +{ + if (!cx || !cx->digest_info) + return -EINVAL; + + MD5Init ((struct MD5_CTX *) cx->digest_info); + + return 0; +} + +static int +md5_update (struct digest_context *cx, u8 *in, int size) +{ + if (!cx || !in || !cx->digest_info) + return -EINVAL; + + MD5Update ((struct MD5_CTX *) cx->digest_info, in, size); + + return 0; +} + +static int +md5_digest (struct digest_context *cx, u8 *out) +{ + struct MD5_CTX tmp; + + if (!cx || !out || !cx->digest_info) + return -EINVAL; + + memcpy (&tmp, (struct MD5_CTX *) cx->digest_info, + sizeof (struct MD5_CTX)); + MD5Final (out, &tmp); + + return 0; +} + +static int +md5_close (struct digest_context *cx, u8 *out) +{ + u8 tmp[16]; + + if (!cx || !cx->digest_info) + return -EINVAL; + + if (out == 0) + out = tmp; + + MD5Final (out, (struct MD5_CTX *) cx->digest_info); + + return 0; +} + +static void md5_lock (void) +{ + MOD_INC_USE_COUNT; +} + +static void md5_unlock(void) +{ + MOD_DEC_USE_COUNT; +} + +static struct digest_implementation md5 = { + {{NULL,NULL}, 0, "md5"}, + blocksize: 16, + working_size: sizeof(MD5_CTX), + INIT_DIGEST_OPS(md5) +}; + +static int __init init_md5 (void) +{ + printk ("MD5 Message Digest Algorithm (c) RSA Systems, Inc\n"); + register_digest (&md5); + return 0; +} + +static void __exit cleanup_md5 (void) +{ + unregister_digest (&md5); +} + +module_init(init_md5); +module_exit(cleanup_md5); diff -urN lin.2.4.3/crypto/digest-sha1.c int.2.4.3/crypto/digest-sha1.c --- lin.2.4.3/crypto/digest-sha1.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/digest-sha1.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,99 @@ +/* + * Modified by Andrew McDonald from md5glue + * by Alan Smithee, mailed to maintainer on pulped trees. + * + * Glue that ties the standard SHA1 code to the rest of the system. + * Everything below this line is GPL. + * + */ + +#include +#include +#include +#include +#include +#include "sha1c.c" + +static int +sha1_open (struct digest_context *cx) +{ + if (!cx || !cx->digest_info) + return -EINVAL; + + SHA1Init ((struct SHA1_CTX *) cx->digest_info); + + return 0; +} + +static int +sha1_update (struct digest_context *cx, u8 *in, int size) +{ + if (!cx || !in || !cx->digest_info) + return -EINVAL; + + SHA1Update ((struct SHA1_CTX *) cx->digest_info, in, size); + + return 0; +} + +static int +sha1_digest (struct digest_context *cx, u8 *out) +{ + struct SHA1_CTX tmp; + + if (!cx || !out || !cx->digest_info) + return -EINVAL; + + memcpy (&tmp, (struct SHA1_CTX *) cx->digest_info, + sizeof (struct SHA1_CTX)); + SHA1Final (out, &tmp); + + return 0; +} + +static int +sha1_close (struct digest_context *cx, u8 *out) +{ + u8 tmp[16]; + + if (!cx || !cx->digest_info) + return -EINVAL; + + if (out == 0) + out = tmp; + + SHA1Final (out, (struct SHA1_CTX *) cx->digest_info); + + return 0; +} + +static void sha1_lock (void) +{ + MOD_INC_USE_COUNT; +} + +static void sha1_unlock(void) +{ + MOD_DEC_USE_COUNT; +} + +static struct digest_implementation sha1 = { + {{NULL,NULL}, 0, "sha1"}, + blocksize: 20, + working_size: sizeof(struct SHA1_CTX), + INIT_DIGEST_OPS(sha1) +}; + +static int __init init_sha1 (void) +{ + register_digest (&sha1); + return 0; +} + +static void __exit cleanup_sha1 (void) +{ + unregister_digest (&sha1); +} + +module_init(init_sha1); +module_exit(cleanup_sha1); diff -urN lin.2.4.3/crypto/gen-cbc.h int.2.4.3/crypto/gen-cbc.h --- lin.2.4.3/crypto/gen-cbc.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/gen-cbc.h Mon Apr 2 18:51:33 2001 @@ -0,0 +1,93 @@ + +#include + +#if defined(CIPHER_BITS_128) +# define BS 16 +#else +# define BS 8 +#endif + +/* + * These functions only use the XOR operator on the data, so no + * endianness problems should occur. + */ + +int CIPHER_NAME(_cbc_encrypt)(struct cipher_context *cx, const u8 *in_blk, + u8 *out_blk, int size, int atomic) +{ + u8 tmp[BS]; + ((u32 *)tmp)[0] = ((u32 *)cx->iv)[0]; + ((u32 *)tmp)[1] = ((u32 *)cx->iv)[1]; +#ifdef CIPHER_BITS_128 + ((u32 *)tmp)[2] = ((u32 *)cx->iv)[2]; + ((u32 *)tmp)[3] = ((u32 *)cx->iv)[3]; +#endif + for (size -= BS; size >= 0; size -= BS) { + ((u32 *)tmp)[0] ^= ((u32 *)in_blk)[0]; + ((u32 *)tmp)[1] ^= ((u32 *)in_blk)[1]; +#ifdef CIPHER_BITS_128 + ((u32 *)tmp)[2] ^= ((u32 *)in_blk)[2]; + ((u32 *)tmp)[3] ^= ((u32 *)in_blk)[3]; +#endif + CIPHER_NAME(_encrypt)(cx, tmp, tmp, BS, atomic); + memcpy(out_blk, tmp, sizeof(tmp)); + in_blk += BS; out_blk += BS; + if (!atomic && current->need_resched) { + schedule(); + } + } + if (size != -BS) { + memset(tmp, 0, sizeof(tmp)); + memcpy(tmp, in_blk, size+BS); + ((u32 *)tmp)[0] ^= ((u32 *)out_blk)[0 - BS/4]; + ((u32 *)tmp)[1] ^= ((u32 *)out_blk)[1 - BS/4]; +#ifdef CIPHER_BITS_128 + ((u32 *)tmp)[2] ^= ((u32 *)out_blk)[2 - BS/4]; + ((u32 *)tmp)[3] ^= ((u32 *)out_blk)[3 - BS/4]; +#endif + CIPHER_NAME(_encrypt)(cx, tmp, out_blk, BS, atomic); + } + return 0; +} + +int CIPHER_NAME(_cbc_decrypt)(struct cipher_context *cx, const u8 *in_blk, + u8 *out_blk, int size, int atomic) +{ + u8 tmp[BS], tmp2[BS]; + ((u32 *)tmp)[0] = ((u32 *)cx->iv)[0]; + ((u32 *)tmp)[1] = ((u32 *)cx->iv)[1]; +#ifdef CIPHER_BITS_128 + ((u32 *)tmp)[2] = ((u32 *)cx->iv)[2]; + ((u32 *)tmp)[3] = ((u32 *)cx->iv)[3]; +#endif + for (size -= BS; size >= 0; size -= BS) { + CIPHER_NAME(_decrypt)(cx, in_blk, tmp2, BS, atomic); + ((u32 *)tmp2)[0] ^= ((u32 *)tmp)[0]; + ((u32 *)tmp2)[1] ^= ((u32 *)tmp)[1]; +#ifdef CIPHER_BITS_128 + ((u32 *)tmp2)[2] ^= ((u32 *)tmp)[2]; + ((u32 *)tmp2)[3] ^= ((u32 *)tmp)[3]; +#endif + memcpy(tmp, in_blk, sizeof(tmp)); + memcpy(out_blk, tmp2, BS); + in_blk += BS; out_blk += BS; + if (!atomic && current->need_resched) { + schedule(); + } + } + + if (size != -BS) { + CIPHER_NAME(_decrypt)(cx, in_blk, tmp2, BS, atomic); + ((u32 *)tmp2)[0] ^= ((u32 *)tmp)[0]; + ((u32 *)tmp2)[1] ^= ((u32 *)tmp)[1]; +#ifdef CIPHER_BITS_128 + ((u32 *)tmp2)[2] ^= ((u32 *)tmp)[2]; + ((u32 *)tmp2)[3] ^= ((u32 *)tmp)[3]; +#endif + memcpy(out_blk, tmp2, size+BS); + } + return 0; +} + + +#undef BS diff -urN lin.2.4.3/crypto/gen-ecb.h int.2.4.3/crypto/gen-ecb.h --- lin.2.4.3/crypto/gen-ecb.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/gen-ecb.h Mon Apr 2 18:51:33 2001 @@ -0,0 +1,48 @@ + +#include + +#if defined(CIPHER_BITS_128) +# define BS 16 +#else +# define BS 8 +#endif + +int CIPHER_NAME(_ecb_encrypt)(struct cipher_context *cx, const u8 *in_blk, + u8 *out_blk, int size, int atomic) +{ + u8 tmp[BS]; + for (size -= BS; size >= 0; size -= BS) { + CIPHER_NAME(_encrypt)(cx, in_blk, out_blk, BS, atomic); + in_blk += BS; out_blk += BS; + if (!atomic && current->need_resched) { + schedule(); + } + } + if (size != -BS) { + memset(tmp, 0, sizeof(tmp)); + memcpy(tmp, in_blk, size+BS); + CIPHER_NAME(_encrypt)(cx, tmp, out_blk, BS, atomic); + } + return 0; +} + +int CIPHER_NAME(_ecb_decrypt)(struct cipher_context *cx, const u8 *in_blk, + u8 *out_blk, int size, int atomic) +{ + u8 tmp[BS]; + for (size -= BS; size >= 0; size -= BS) { + CIPHER_NAME(_decrypt)(cx, in_blk, out_blk, BS, atomic); + in_blk += BS; out_blk += BS; + if (!atomic && current->need_resched) { + schedule(); + } + } + if (size != -BS) { + CIPHER_NAME(_decrypt)(cx, in_blk, tmp, BS, atomic); + memcpy(out_blk, tmp, size+BS); + } + return 0; +} + + +#undef BS diff -urN lin.2.4.3/crypto/md5.h int.2.4.3/crypto/md5.h --- lin.2.4.3/crypto/md5.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/md5.h Mon Apr 2 18:37:26 2001 @@ -0,0 +1,56 @@ +/* md5.h - header file for md5c.c + */ + +/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All + rights reserved. + + License to copy and use this software is granted provided that it + is identified as the "RSA Data Security, Inc. MD5 Message-Digest + Algorithm" in all material mentioning or referencing this software + or this function. + + License is also granted to make and use derivative works provided + that such works are identified as "derived from the RSA Data + Security, Inc. MD5 Message-Digest Algorithm" in all material + mentioning or referencing the derived work. + + RSA Data Security, Inc. makes no representations concerning either + the merchantability of this software or the suitability of this + software for any particular purpose. It is provided "as is" without + express or implied warranty of any kind. + + These notices must be retained in any copies of any part of this + documentation and/or software. +*/ + + +#ifndef _CRYPTO_MD5_H +#define _CRYPTO_MD5_H + +/* MD5 context. */ +struct MD5_CTX { + u32 state[4]; /* state (ABCD) */ + u32 count[2]; /* number of bits, modulo 2^64 (lsb first) */ + unsigned char buffer[64]; /* input buffer */ +}; + +typedef struct MD5_CTX MD5_CTX; + +void MD5Init (struct MD5_CTX *); +void MD5Update (struct MD5_CTX *, unsigned char *, unsigned int); +void MD5Final (unsigned char x[16], struct MD5_CTX *); + +#endif /* _CRYPTO_MD5_H */ + + + + + + + + + + + + + diff -urN lin.2.4.3/crypto/md5c.c int.2.4.3/crypto/md5c.c --- lin.2.4.3/crypto/md5c.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/md5c.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,320 @@ +/* The MD5 implementation below was modified by Alexander Kjeldaas + 1999-09-15 for readability purposes, and for + inclusion into the Linux kernel */ + +/* MD5C.C - RSA Data Security, Inc., MD5 message-digest algorithm + */ + +/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All +rights reserved. + +License to copy and use this software is granted provided that it +is identified as the "RSA Data Security, Inc. MD5 Message-Digest +Algorithm" in all material mentioning or referencing this software +or this function. + +License is also granted to make and use derivative works provided +that such works are identified as "derived from the RSA Data +Security, Inc. MD5 Message-Digest Algorithm" in all material +mentioning or referencing the derived work. + +RSA Data Security, Inc. makes no representations concerning either +the merchantability of this software or the suitability of this +software for any particular purpose. It is provided "as is" +without express or implied warranty of any kind. + +These notices must be retained in any copies of any part of this +documentation and/or software. + */ + +#include +#include +#include +#include +#include "md5.h" + + +/* Start of Linux Kernel port */ +typedef u32 UINT4; +typedef u8 *POINTER; +#define PROTO_LIST(x) x +#define MD5_memcpy memcpy +#define MD5_memset memset + +/* Encodes input (UINT4) into output (unsigned char). Assumes len is + a multiple of 4. + */ +#ifdef __LITTLE_ENDIAN +#define Encode memcpy +#define Decode memcpy +#else +static void Encode (unsigned char *output, + UINT4 *input, + unsigned int len) +{ + unsigned int i; + UINT4 *out = (UINT4 *)output; + len <<= 2; + + for (i = 0; i < len; i++) { + out[i] = cpu_to_le32(input[i]); + } +} + +/* Decodes input (unsigned char) into output (UINT4). Assumes len is + a multiple of 4. + */ +static void Decode (UINT4 *output, + unsigned char *input, + unsigned int len) +{ + unsigned int i; + UINT4 *in = (UINT4 *)input; + len <<= 2; + + for (i = 0; i < len; i++) { + output[i] = le32_to_cpu(in[i]); + } +} + +#endif /* __LITTLE_ENDIAN */ +/* End of Linux Kernel port */ + + +/* Constants for MD5Transform routine. + */ +#define S11 7 +#define S12 12 +#define S13 17 +#define S14 22 +#define S21 5 +#define S22 9 +#define S23 14 +#define S24 20 +#define S31 4 +#define S32 11 +#define S33 16 +#define S34 23 +#define S41 6 +#define S42 10 +#define S43 15 +#define S44 21 + +static void MD5Transform PROTO_LIST ((UINT4 [4], unsigned char [64])); + +static unsigned char PADDING[64] = { + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/* F, G, H and I are basic MD5 functions. + */ +#define F(x, y, z) (((x) & (y)) | ((~x) & (z))) +#define G(x, y, z) (((x) & (z)) | ((y) & (~z))) +#define H(x, y, z) ((x) ^ (y) ^ (z)) +#define I(x, y, z) ((y) ^ ((x) | (~z))) + +/* ROTATE_LEFT rotates x left n bits. + */ +#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) + +/* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. +Rotation is separate from addition to prevent recomputation. + */ +#define FF(a, b, c, d, x, s, ac) { \ + (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define GG(a, b, c, d, x, s, ac) { \ + (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define HH(a, b, c, d, x, s, ac) { \ + (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } +#define II(a, b, c, d, x, s, ac) { \ + (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ + (a) = ROTATE_LEFT ((a), (s)); \ + (a) += (b); \ + } + +/* MD5 initialization. Begins an MD5 operation, writing a new context. + */ +static void MD5Init (MD5_CTX *context) /* context */ +{ + context->count[0] = context->count[1] = 0; + /* Load magic initialization constants. +*/ + context->state[0] = 0x67452301; + context->state[1] = 0xefcdab89; + context->state[2] = 0x98badcfe; + context->state[3] = 0x10325476; +} + +/* MD5 block update operation. Continues an MD5 message-digest + operation, processing another message block, and updating the + context. + */ +static void MD5Update (MD5_CTX *context, /* context */ + unsigned char *input, /* input block */ + unsigned int inputLen) /* length of input block */ +{ + unsigned int i, index, partLen; + + /* Compute number of bytes mod 64 */ + index = (unsigned int)((context->count[0] >> 3) & 0x3F); + + /* Update number of bits */ + if ((context->count[0] += ((UINT4)inputLen << 3)) + < ((UINT4)inputLen << 3)) + context->count[1]++; + context->count[1] += ((UINT4)inputLen >> 29); + + partLen = 64 - index; + + /* Transform as many times as possible. +*/ + if (inputLen >= partLen) { + MD5_memcpy + ((POINTER)&context->buffer[index], (POINTER)input, partLen); + MD5Transform (context->state, context->buffer); + + for (i = partLen; i + 63 < inputLen; i += 64) + MD5Transform (context->state, &input[i]); + + index = 0; + } + else + i = 0; + + /* Buffer remaining input */ + MD5_memcpy + ((POINTER)&context->buffer[index], (POINTER)&input[i], + inputLen-i); +} + +/* MD5 finalization. Ends an MD5 message-digest operation, writing the + the message digest and zeroizing the context. + */ +static void MD5Final (unsigned char digest[16], /* message digest */ + MD5_CTX *context) /* context */ +{ + unsigned char bits[8]; + unsigned int index, padLen; + + /* Save number of bits */ + Encode (bits, context->count, 8); + + /* Pad out to 56 mod 64. +*/ + index = (unsigned int)((context->count[0] >> 3) & 0x3f); + padLen = (index < 56) ? (56 - index) : (120 - index); + MD5Update (context, PADDING, padLen); + + /* Append length (before padding) */ + MD5Update (context, bits, 8); + /* Store state in digest */ + Encode (digest, context->state, 16); + + /* Zeroize sensitive information. +*/ + MD5_memset ((POINTER)context, 0, sizeof (*context)); +} + +/* MD5 basic transformation. Transforms state based on block. + */ +static void MD5Transform (UINT4 state[4], + unsigned char block[64]) +{ + UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; + + Decode (x, block, 64); + + /* Round 1 */ + FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ + FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ + FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ + FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ + FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ + FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ + FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ + FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ + FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ + FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ + FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ + FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ + FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ + FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ + FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ + FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ + + /* Round 2 */ + GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ + GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ + GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ + GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ + GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ + GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ + GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ + GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ + GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ + GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ + GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ + GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ + GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ + GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ + GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ + GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ + + /* Round 3 */ + HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ + HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ + HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ + HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ + HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ + HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ + HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ + HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ + HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ + HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ + HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ + HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ + HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ + HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ + HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ + HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ + + /* Round 4 */ + II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ + II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ + II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ + II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ + II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ + II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ + II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ + II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ + II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ + II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ + II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ + II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ + II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ + II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ + II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ + II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ + + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + + /* Zeroize sensitive information. +*/ + MD5_memset ((POINTER)x, 0, sizeof (x)); +} + + diff -urN lin.2.4.3/crypto/sha1c.c int.2.4.3/crypto/sha1c.c --- lin.2.4.3/crypto/sha1c.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/sha1c.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,183 @@ +/* +Modified for kerneli by Andrew McDonald +from: + +SHA-1 in C +By Steve Reid +100% Public Domain +Available from: +ftp://ftp.zedz.net/pub/crypto/crypto/HASH/sha/sha1.c + +Test Vectors (from FIPS PUB 180-1) +"abc" + A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D +"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 +A million repetitions of "a" + 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F +*/ + +#define SHA1HANDSOFF /* Copies data before messing with it. */ + +#include + +struct SHA1_CTX { + unsigned long state[5]; + unsigned long count[2]; + unsigned char buffer[64]; +}; + +static void SHA1Transform(unsigned long state[5], unsigned char buffer[64]); +static void SHA1Init(struct SHA1_CTX* context); +static void SHA1Update(struct SHA1_CTX* context, unsigned char* data, + unsigned int len); +static void SHA1Final(unsigned char digest[20], struct SHA1_CTX* context); + +#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits)))) + +/* blk0() and blk() perform the initial expand. */ +/* I got the idea of expanding during the round function from SSLeay */ +#ifdef __LITTLE_ENDIAN +#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \ + |(rol(block->l[i],8)&0x00FF00FF)) +#else +#define blk0(i) block->l[i] +#endif /* __LITTLE_ENDIAN */ +#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \ + ^block->l[(i+2)&15]^block->l[i&15],1)) + +/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */ +#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30); +#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30); +#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30); +#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30); +#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30); + + +/* Hash a single 512-bit block. This is the core of the algorithm. */ + +void SHA1Transform(unsigned long state[5], unsigned char buffer[64]) +{ + unsigned long a, b, c, d, e; + typedef union { + unsigned char c[64]; + unsigned long l[16]; + } CHAR64LONG16; + CHAR64LONG16* block; +#ifdef SHA1HANDSOFF + static unsigned char workspace[64]; + block = (CHAR64LONG16*)workspace; + memcpy(block, buffer, 64); +#else + block = (CHAR64LONG16*)buffer; +#endif + /* Copy context->state[] to working vars */ + a = state[0]; + b = state[1]; + c = state[2]; + d = state[3]; + e = state[4]; + /* 4 rounds of 20 operations each. Loop unrolled. */ + R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3); + R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7); + R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11); + R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15); + R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19); + R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23); + R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27); + R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31); + R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35); + R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39); + R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43); + R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47); + R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51); + R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55); + R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59); + R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63); + R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67); + R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71); + R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75); + R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79); + /* Add the working vars back into context.state[] */ + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; + state[4] += e; + /* Wipe variables */ + a = b = c = d = e = 0; +} + + +/* SHA1Init - Initialize new context */ + +void SHA1Init(struct SHA1_CTX* context) +{ + /* SHA1 initialization constants */ + context->state[0] = 0x67452301; + context->state[1] = 0xEFCDAB89; + context->state[2] = 0x98BADCFE; + context->state[3] = 0x10325476; + context->state[4] = 0xC3D2E1F0; + context->count[0] = context->count[1] = 0; +} + + +/* Run your data through this. */ + +void SHA1Update(struct SHA1_CTX* context, unsigned char* data, unsigned int len) +{ + unsigned int i, j; + + j = (context->count[0] >> 3) & 63; + if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++; + context->count[1] += (len >> 29); + if ((j + len) > 63) { + memcpy(&context->buffer[j], data, (i = 64-j)); + SHA1Transform(context->state, context->buffer); + for ( ; i + 63 < len; i += 64) { + SHA1Transform(context->state, &data[i]); + } + j = 0; + } + else i = 0; + memcpy(&context->buffer[j], &data[i], len - i); +} + + +/* Add padding and return the message digest. */ + +void SHA1Final(unsigned char digest[20], struct SHA1_CTX* context) +{ + unsigned long i, j; + unsigned char finalcount[8]; + + for (i = 0; i < 8; i++) { + finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)] + >> ((3-(i & 3)) * 8) ) & 255); + /* Endian independent */ + } + SHA1Update(context, (unsigned char *)"\200", 1); + while ((context->count[0] & 504) != 448) { + SHA1Update(context, (unsigned char *)"\0", 1); + } + SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */ + for (i = 0; i < 20; i++) { + digest[i] = (unsigned char) + ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); + } + /* Wipe variables */ + i = j = 0; + memset(context->buffer, 0, 64); + memset(context->state, 0, 20); + memset(context->count, 0, 8); + memset(&finalcount, 0, 8); +#ifdef SHA1HANDSOFF /* make SHA1Transform overwrite it's own static vars */ + SHA1Transform(context->state, context->buffer); +#endif +} + + + + + diff -urN lin.2.4.3/crypto/testing/Makefile int.2.4.3/crypto/testing/Makefile --- lin.2.4.3/crypto/testing/Makefile Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/Makefile Mon Apr 2 18:37:26 2001 @@ -0,0 +1,28 @@ + +obj = ../crypto.o + +all: ${obj} testcip speed test_blowfish digesttest + +%.o : %.c + gcc -O2 -Wall -g -c -I../../include $(CFLAGS) $(CPPFLAGS) $< -o $@ + +speed: ${obj} stubs.o speed.o misc.o + gcc -g -o speed speed.c -I../../include/ ${obj} stubs.o misc.o + +test_blowfish: ${obj} stubs.o test_blowfish.o misc.o + gcc -g -o test_blowfish test_blowfish.c -I../../include/ ${obj} stubs.o misc.o + +stubs.o: stubs.c + gcc -O2 -g -Wall -D__KERNEL__ -c -o stubs.o -I../../include/ stubs.c + +testcip: testcip.c stubs.o misc.o + gcc -O2 -g -Wall -o testcip testcip.c -I../../include/ ${obj} stubs.o misc.o + +testapi: testapi.c stubs.o misc.o + gcc -O2 -g -Wall -o testapi testapi.c -I../../include/ ${obj} stubs.o misc.o + +digesttest: ${obj} stubs.o digesttest.o + gcc -g -o digesttest digesttest.c -I../../include/ ${obj} stubs.o misc.o + +clean: + rm -f speed test_blowfish testcip digesttest *.o diff -urN lin.2.4.3/crypto/testing/aes-test int.2.4.3/crypto/testing/aes-test --- lin.2.4.3/crypto/testing/aes-test Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/aes-test Mon Apr 2 18:37:26 2001 @@ -0,0 +1,48 @@ +#!/bin/bash + +CIPHER="$1" # cipher to use +KATFILE="$2" # file with known-answer-test values in NIST's + # ecb_tbl.txt format should be given on stdin. + + +[ "$#" -ne 2 ] && cat < 1999-11-16 + * with bits from speed.c: + * written by Alexander Kjeldaas 1998-11-23 + * + * Copyright 1999 by Andrew McDonald. + * Some code, Copyright 1998 by Alexander Kjeldaas. + * Redistribution of this file is permitted under the GNU Public License. + */ + +#define __KERNEL__ + +#define printk printk_dummy + +#include + +#undef memcpy +#undef memset +#undef printk + +#include "libcfuncs.h" +#include "misc.h" + + +int digest_test(struct digest_implementation *di, FILE *file); + + +int main(int argc, char* argv[]) +{ + int digest; + struct digest_implementation *di; + FILE *file; + + if (argc < 2 || argc > 3) { + printf("Usage:\n"); + printf("digesttest digestnum [filename]\n"); + exit(1); + } + + cryptoapi_init(); + digest = atoi(argv[1]); + di = find_digest_by_id(digest); + if (!di) + exit(1); + PRINTF("Testing digest %s, number %d...\n", di->trans.t_name, + di->trans.t_id); + + if (argc < 3) + file = stdin; + else { + if (!(file = fopen(argv[2], "rb"))) { + fprintf(stderr, "Can't open file %s", argv[2]); + exit(1); + } + } + + digest_test(di, file); + exit(0); +} + +int digest_test(struct digest_implementation *di, FILE *file) +{ + struct digest_context* cx; + u8* output; + u8 buf[16384]; + int i, j; + + cx = (struct digest_context *) malloc(sizeof(struct digest_context)); + cx->di = di; + cx->digest_info = (u32 *) malloc(di->working_size); + output = (unsigned char *) malloc(di->blocksize); + di->open(cx); + + while (!feof(file)) { + i = fread(buf, 1, 16384, file); + di->update(cx, buf, i); + } + + di->close(cx, output); + + fclose(file); + + for (i = 0; i < (di->blocksize / sizeof(unsigned int)); i++) { + for (j = 0; j < sizeof(unsigned int); j++) { + printf("%02X", output[i*4+j]); + } + printf(" "); + } + printf("\n"); + return 0; +} diff -urN lin.2.4.3/crypto/testing/libcfuncs.h int.2.4.3/crypto/testing/libcfuncs.h --- lin.2.4.3/crypto/testing/libcfuncs.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/libcfuncs.h Mon Apr 2 18:37:26 2001 @@ -0,0 +1,39 @@ + +/* Mixing kernel header-files and GNU libc header files does not work, + * so we define what we need from libc here + * + */ + +#define EOF (-1) +typedef void *FILE; +extern int fprintf (FILE *, const char *format, ...); +extern int fflush (FILE *); +extern FILE stdout, stdin, stderr; +extern int printf (const char *format, ...); +extern int vprintf(const char *format, va_list ap); +extern int open(const char *pathname, int flags); +extern int gettimeofday(struct timeval *tv, void *); +extern void *malloc(size_t size); +extern int errno; +extern int close(int fd); +extern void perror(const char *s); +extern ssize_t read(int fd, void *buf, size_t count); +extern int getopt(int argc, char * const argv[], + const char *optstring); +extern char *optarg; +extern int optind, opterr, optopt; +extern int fsync(int fd); +extern int toupper (int c); +extern int tolower (int c); +extern int atoi(const char *nptr); +extern FILE *fopen (const char *path, const char *mode); +extern int feof( FILE *stream); +extern size_t fread( void *ptr, size_t size, size_t nmemb, FILE + *stream); + +extern size_t fwrite( const void *ptr, size_t size, size_t nmemb, + FILE *stream); +extern int fclose( FILE *stream); +extern int rand(void); +extern char *strdup(const char *s); + diff -urN lin.2.4.3/crypto/testing/mars_ecb_vk.txt int.2.4.3/crypto/testing/mars_ecb_vk.txt --- lin.2.4.3/crypto/testing/mars_ecb_vk.txt Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/mars_ecb_vk.txt Mon Apr 2 18:37:26 2001 @@ -0,0 +1,2332 @@ +========================= + +FILENAME: "ecb_vk.txt" + +Electronic Codebook (ECB) Mode +Variable Key Known Answer Tests + +Algorithm Name: Mars +Principle Submitter: IBM + +========== + +KEYSIZE=128 + +PT=00000000000000000000000000000000 + +I=1 +KEY=80000000000000000000000000000000 +CT=B3E2AD5608AC1B6733A7CB4FDF8F9952 + +I=2 +KEY=40000000000000000000000000000000 +CT=8655D5CCAF76A3A8AA09841F04689465 + +I=3 +KEY=20000000000000000000000000000000 +CT=F611F21A70C0AB5FB3D52AD5E8196E09 + +I=4 +KEY=10000000000000000000000000000000 +CT=6676D02EAE3EE58FA396BE40A3A6A234 + +I=5 +KEY=08000000000000000000000000000000 +CT=786E147E5D66764A16DFE1DCB10F3F13 + +I=6 +KEY=04000000000000000000000000000000 +CT=FDDBC84DA51496AD1CA2B7013B93FFA8 + +I=7 +KEY=02000000000000000000000000000000 +CT=B5A0BB3A8E7FEAC192B7BF8080E2CC81 + +I=8 +KEY=01000000000000000000000000000000 +CT=9A4802E8BF4426467617E9A44072EB76 + +I=9 +KEY=00800000000000000000000000000000 +CT=BE279F4EE696EC5B07820A1066F110CD + +I=10 +KEY=00400000000000000000000000000000 +CT=4BBB919E52C258960549FAE9DD5FF524 + +I=11 +KEY=00200000000000000000000000000000 +CT=6B077B5DE4C9961DC6E11053662E3CFB + +I=12 +KEY=00100000000000000000000000000000 +CT=755358499858F166C9DEAF2E79B3EDA3 + +I=13 +KEY=00080000000000000000000000000000 +CT=632644AA2ACB4FB3214E9E5BFF57D4D8 + +I=14 +KEY=00040000000000000000000000000000 +CT=DD3F06DD5A90BD7EA3F4B1BFB56E4ABB + +I=15 +KEY=00020000000000000000000000000000 +CT=B2FB07551FD5B549C857020356B99D45 + +I=16 +KEY=00010000000000000000000000000000 +CT=5DE9EF4627A3EB6FD3920C322ECE9FAB + +I=17 +KEY=00008000000000000000000000000000 +CT=A8D37D0254E1C908AAD02631B614A0C6 + +I=18 +KEY=00004000000000000000000000000000 +CT=91372C769C1E64DE0FDDC1C63436B623 + +I=19 +KEY=00002000000000000000000000000000 +CT=4F8FF5063FFF638497733E1526EE27BD + +I=20 +KEY=00001000000000000000000000000000 +CT=5157ECB5597AC6A8D761E97517C65C0F + +I=21 +KEY=00000800000000000000000000000000 +CT=117B9349CFFD2066452CC0FE204C18A5 + +I=22 +KEY=00000400000000000000000000000000 +CT=AE0AF51926529A3F354F7585578F6439 + +I=23 +KEY=00000200000000000000000000000000 +CT=B2723B8D2D61497DBF44FF9D70E48C0E + +I=24 +KEY=00000100000000000000000000000000 +CT=464B3EB2A0F8A394DA239E0D0D62EDE2 + +I=25 +KEY=00000080000000000000000000000000 +CT=AA03D30E1CE0E91DC360B1E538017F05 + +I=26 +KEY=00000040000000000000000000000000 +CT=B1EDF5E18160BF8E16F386D999BF65BE + +I=27 +KEY=00000020000000000000000000000000 +CT=85F1BDD358B23675328841103F1DCE65 + +I=28 +KEY=00000010000000000000000000000000 +CT=38DEA42C35E5758C7C5CCF451936DFCB + +I=29 +KEY=00000008000000000000000000000000 +CT=E484E7CB2D35D5AE92939B06864A0E6B + +I=30 +KEY=00000004000000000000000000000000 +CT=53B7E22F63F4D8AAC66D148619A7691D + +I=31 +KEY=00000002000000000000000000000000 +CT=0042A8EDB756329533D82ED13386E648 + +I=32 +KEY=00000001000000000000000000000000 +CT=44BBDB223AFCC69EB69C5D07AF10E5D8 + +I=33 +KEY=00000000800000000000000000000000 +CT=C5B1739AF4C0AE459BF11144132D0979 + +I=34 +KEY=00000000400000000000000000000000 +CT=151BBFAECB027BAB90C8DA3E4743F033 + +I=35 +KEY=00000000200000000000000000000000 +CT=376786816F319B96A19B134143952FE5 + +I=36 +KEY=00000000100000000000000000000000 +CT=3E94AC897203461EFD9EED441F66AE9F + +I=37 +KEY=00000000080000000000000000000000 +CT=61A93766162F0B01EDC84D47B1D4ECAA + +I=38 +KEY=00000000040000000000000000000000 +CT=B21FA9D0AC731750F15B47FFF2BC4030 + +I=39 +KEY=00000000020000000000000000000000 +CT=BDE8813E0E4EAE6CECCBC4C6BD10C610 + +I=40 +KEY=00000000010000000000000000000000 +CT=50A5AE30DC3432F3060EE3628B274FFB + +I=41 +KEY=00000000008000000000000000000000 +CT=E3DA95B76AD9E29F0B3F14DD33C670AC + +I=42 +KEY=00000000004000000000000000000000 +CT=969DC8A583DED13E53042450FA4BE8FA + +I=43 +KEY=00000000002000000000000000000000 +CT=D7CB0D2F9BFF048CBD8CBD8452361611 + +I=44 +KEY=00000000001000000000000000000000 +CT=E056677749114108153C6AC262EC0396 + +I=45 +KEY=00000000000800000000000000000000 +CT=E5572F1812044977D4309B8D675CAE48 + +I=46 +KEY=00000000000400000000000000000000 +CT=F00C1AB95B5CE3D3ACC2162E7A7F0262 + +I=47 +KEY=00000000000200000000000000000000 +CT=AB33C3682E0C1BFA627F4932AE4AAD94 + +I=48 +KEY=00000000000100000000000000000000 +CT=EE5B68820CB978CAACA22B1D590E31CF + +I=49 +KEY=00000000000080000000000000000000 +CT=8ACACFB9E872873E315D84657613756B + +I=50 +KEY=00000000000040000000000000000000 +CT=75CD1E528E5B6DB21BC8E44E70E5ECFA + +I=51 +KEY=00000000000020000000000000000000 +CT=3195CE6F460654E6FC00672755A5B7C3 + +I=52 +KEY=00000000000010000000000000000000 +CT=8ACC17F3EDF59AA02DBBA93F27AD11D0 + +I=53 +KEY=00000000000008000000000000000000 +CT=DD82C41281BE711F7E5DCDCDC6CBBF6F + +I=54 +KEY=00000000000004000000000000000000 +CT=971ABFC0649C9ABE7DE583799F31DD9D + +I=55 +KEY=00000000000002000000000000000000 +CT=9CD8E45DE9909A8146956F2B581AE664 + +I=56 +KEY=00000000000001000000000000000000 +CT=095314A316B4DB9CE6F2CDDEC59ECE89 + +I=57 +KEY=00000000000000800000000000000000 +CT=B626E1C40D644E2E72370CA4A3528576 + +I=58 +KEY=00000000000000400000000000000000 +CT=002E4294BD6DDE3E3BFFB0CF5A5A7D4B + +I=59 +KEY=00000000000000200000000000000000 +CT=DA89C327F041BEBDB09E835ED2A2DDBE + +I=60 +KEY=00000000000000100000000000000000 +CT=9BC999880C14C9358CA89C435B1FDB00 + +I=61 +KEY=00000000000000080000000000000000 +CT=D0C92CFF98EB228C6C19B405E6EFEE77 + +I=62 +KEY=00000000000000040000000000000000 +CT=FAE5C83332BB176704F0E73B27442C0C + +I=63 +KEY=00000000000000020000000000000000 +CT=DC9FB83F80E56CAF1DB807B5921927E8 + +I=64 +KEY=00000000000000010000000000000000 +CT=6FBB39934CC2627EE4F93343F50EB9D4 + +I=65 +KEY=00000000000000008000000000000000 +CT=02A31EDEF8DEA2DE3307748BF4DC1C54 + +I=66 +KEY=00000000000000004000000000000000 +CT=8C433C3D2005B30996ADA41F896436AC + +I=67 +KEY=00000000000000002000000000000000 +CT=ED04C68D4D73C6EE193E0FC9E2CBD1B0 + +I=68 +KEY=00000000000000001000000000000000 +CT=515E01A6F25A4F1B2B57B27DECBFF195 + +I=69 +KEY=00000000000000000800000000000000 +CT=30A07996E5C40C41786FC75B9C56325B + +I=70 +KEY=00000000000000000400000000000000 +CT=279C94707B0732D210DA7B619158825A + +I=71 +KEY=00000000000000000200000000000000 +CT=07552A95AC44BB11CD34428C858FD19F + +I=72 +KEY=00000000000000000100000000000000 +CT=BA67FC2E51DA92EA19079B237B42C9D8 + +I=73 +KEY=00000000000000000080000000000000 +CT=40387C974070B484E0DBAAFD5ADA0243 + +I=74 +KEY=00000000000000000040000000000000 +CT=3BF99A29B17D84BE5F8DC315616061F8 + +I=75 +KEY=00000000000000000020000000000000 +CT=D4EF00C794D337961FD9E3B5AF7A67A5 + +I=76 +KEY=00000000000000000010000000000000 +CT=1C77C28A6CBF3CBB24F2686ED3A408E2 + +I=77 +KEY=00000000000000000008000000000000 +CT=F93568CD7CBA7A6E9B9DD7144F1D4ABB + +I=78 +KEY=00000000000000000004000000000000 +CT=C3BCD1F7F268E2806CCF0498C85D2E3E + +I=79 +KEY=00000000000000000002000000000000 +CT=2FD2F0DEB5DBF7EB3B9050042E56A9A9 + +I=80 +KEY=00000000000000000001000000000000 +CT=2150DEB8C7C6327227A772031FF64047 + +I=81 +KEY=00000000000000000000800000000000 +CT=3E8B4B1CBB877B6F612BFB391043CFC3 + +I=82 +KEY=00000000000000000000400000000000 +CT=2376F56DFEB40C9348D758CA068C2127 + +I=83 +KEY=00000000000000000000200000000000 +CT=AABB351CA9BDCDACCD8E966766FF1C59 + +I=84 +KEY=00000000000000000000100000000000 +CT=212EF966B6CEECC65B5B0AE6A9DAA099 + +I=85 +KEY=00000000000000000000080000000000 +CT=99C95AC67935AE473E2EF3907DDCE5B3 + +I=86 +KEY=00000000000000000000040000000000 +CT=125DC68286DB1F81E6CD3D0C9EF8B922 + +I=87 +KEY=00000000000000000000020000000000 +CT=CC55D94C0102A12D87454DB8BA8E654C + +I=88 +KEY=00000000000000000000010000000000 +CT=3F1E089ACAD719F7DB9292A770038475 + +I=89 +KEY=00000000000000000000008000000000 +CT=EC4D155D404F72B4BE88D1E17C345822 + +I=90 +KEY=00000000000000000000004000000000 +CT=276F8AECA95C7F65CD95B77680955548 + +I=91 +KEY=00000000000000000000002000000000 +CT=7D78CE850C26BB18B8631CDFF0A5E597 + +I=92 +KEY=00000000000000000000001000000000 +CT=6345692D62E879A058F342D5226A036D + +I=93 +KEY=00000000000000000000000800000000 +CT=E19D5A2899061B7B5537EA6DF0390FE8 + +I=94 +KEY=00000000000000000000000400000000 +CT=4FAB8BB80E979853052BA0B19EF8521D + +I=95 +KEY=00000000000000000000000200000000 +CT=E84EE11321AF1C0AE6430C4F600270B4 + +I=96 +KEY=00000000000000000000000100000000 +CT=73048F29C44F0953DFCC6B5380D36977 + +I=97 +KEY=00000000000000000000000080000000 +CT=16280B84B187AE90E25121AB297620FA + +I=98 +KEY=00000000000000000000000040000000 +CT=FAAE881E9FA9DCA876B668CCAFA12B6A + +I=99 +KEY=00000000000000000000000020000000 +CT=46A73C4A4516E1E0BE2140E175A7225F + +I=100 +KEY=00000000000000000000000010000000 +CT=01C71A7B0BD6410894C9234A4250ABB4 + +I=101 +KEY=00000000000000000000000008000000 +CT=EA8CEF3C1E8EF94D4A17A4D4C1C28C32 + +I=102 +KEY=00000000000000000000000004000000 +CT=13BB356657B36C0D023047B324443468 + +I=103 +KEY=00000000000000000000000002000000 +CT=B14DCC5250036260131B3D92B1B26C18 + +I=104 +KEY=00000000000000000000000001000000 +CT=261E07BADC6E4BBB0EAD9ECCAE179821 + +I=105 +KEY=00000000000000000000000000800000 +CT=1D40D508EB8878251EC5C01D8E9949BB + +I=106 +KEY=00000000000000000000000000400000 +CT=735BDCA8DF0C58679161E99BED3B8D3E + +I=107 +KEY=00000000000000000000000000200000 +CT=49C907F757494623F8E8519F4A5D13A0 + +I=108 +KEY=00000000000000000000000000100000 +CT=AB858C224E5A3ADDF5A7549A98EEAF94 + +I=109 +KEY=00000000000000000000000000080000 +CT=7C7A62A1DBF206572A323682E0441458 + +I=110 +KEY=00000000000000000000000000040000 +CT=7461D6F4D609F8BCA9CAB4EB559C71C3 + +I=111 +KEY=00000000000000000000000000020000 +CT=2F646495150F4F9CA06B77281C1150FD + +I=112 +KEY=00000000000000000000000000010000 +CT=A0C27498F797D6A9F513640AFE6CC316 + +I=113 +KEY=00000000000000000000000000008000 +CT=8D511A840453125335AB8DF8C64FA8E8 + +I=114 +KEY=00000000000000000000000000004000 +CT=9E64465740D81CCB74713A144F636985 + +I=115 +KEY=00000000000000000000000000002000 +CT=804499E6C6E8790988747009D3B3C66D + +I=116 +KEY=00000000000000000000000000001000 +CT=59EBC223BAC60B13198C9AF47066274E + +I=117 +KEY=00000000000000000000000000000800 +CT=CCA216CC095954AFD3DE594C91A26310 + +I=118 +KEY=00000000000000000000000000000400 +CT=06FF525F42EFF20A548DA1B7DCD1FFF8 + +I=119 +KEY=00000000000000000000000000000200 +CT=B2F1FD473FCA588111E6EB9DCE82CFA9 + +I=120 +KEY=00000000000000000000000000000100 +CT=557307573D2E5225AD6EDADDF1FCAB68 + +I=121 +KEY=00000000000000000000000000000080 +CT=CA159F81D155071BDCA701174C69184D + +I=122 +KEY=00000000000000000000000000000040 +CT=41491AE31AB75E3ACA41B1A2CB75C1D9 + +I=123 +KEY=00000000000000000000000000000020 +CT=C3B4B9419C0E19D4A851C2DAD2954268 + +I=124 +KEY=00000000000000000000000000000010 +CT=6E3DD6DF183B80A0FF5D2D0A4B25A2C8 + +I=125 +KEY=00000000000000000000000000000008 +CT=EC69E1BD0815AE6C83876B75E58A7EB6 + +I=126 +KEY=00000000000000000000000000000004 +CT=8F5766DE11517F63A60459B1EDC32D44 + +I=127 +KEY=00000000000000000000000000000002 +CT=8A74C64985345925D8A6AB8E6A0D3589 + +I=128 +KEY=00000000000000000000000000000001 +CT=F65B8E5EAF04B33AD5FCF1B14874E059 + +========== + +KEYSIZE=192 + +PT=00000000000000000000000000000000 + +I=1 +KEY=800000000000000000000000000000000000000000000000 +CT=FD04E0B77403BBDC72A370240B45B92D + +I=2 +KEY=400000000000000000000000000000000000000000000000 +CT=CB0B4AC08E20385D31CF468B52B356E2 + +I=3 +KEY=200000000000000000000000000000000000000000000000 +CT=C39B63B4A8F7BF5C3CC61141584DE462 + +I=4 +KEY=100000000000000000000000000000000000000000000000 +CT=C63F433FF98BEE849D75D0F0402C9273 + +I=5 +KEY=080000000000000000000000000000000000000000000000 +CT=9433992C094CDBEC06199B0517970B5D + +I=6 +KEY=040000000000000000000000000000000000000000000000 +CT=FA8B068AD3C2C32F99EF1A4F76C409AF + +I=7 +KEY=020000000000000000000000000000000000000000000000 +CT=014617D6109068C39137EE0CC522163E + +I=8 +KEY=010000000000000000000000000000000000000000000000 +CT=41B87685C649AD72C32D9390C23CF34B + +I=9 +KEY=008000000000000000000000000000000000000000000000 +CT=6836281F31AA9120DC144E26074491EC + +I=10 +KEY=004000000000000000000000000000000000000000000000 +CT=C4163CB0CA1315C3D0115D495E0FF701 + +I=11 +KEY=002000000000000000000000000000000000000000000000 +CT=F0B8F3585636D2785FF619523C4365B9 + +I=12 +KEY=001000000000000000000000000000000000000000000000 +CT=6E1740E818B450955C6B7612DBBA0DAE + +I=13 +KEY=000800000000000000000000000000000000000000000000 +CT=192A2FAAC85794EB20E43645E2E1B749 + +I=14 +KEY=000400000000000000000000000000000000000000000000 +CT=5CA4011E7024A4978B58E1DFA9278625 + +I=15 +KEY=000200000000000000000000000000000000000000000000 +CT=498152C714A2CEFD692AC99DB90CDDBD + +I=16 +KEY=000100000000000000000000000000000000000000000000 +CT=DEB3A9FEB22886C511A057AB858BB4DD + +I=17 +KEY=000080000000000000000000000000000000000000000000 +CT=D60466B1EA5C1C7A5DDFDA049A685B50 + +I=18 +KEY=000040000000000000000000000000000000000000000000 +CT=62A0EE49A6333815350E9C9CD7CB24D2 + +I=19 +KEY=000020000000000000000000000000000000000000000000 +CT=3AE70846AFDCC299B32EB9DE118070B8 + +I=20 +KEY=000010000000000000000000000000000000000000000000 +CT=5118414720E424364E15B5EDC8E64559 + +I=21 +KEY=000008000000000000000000000000000000000000000000 +CT=42F9E38F7FB493D6048C63F804F5AD62 + +I=22 +KEY=000004000000000000000000000000000000000000000000 +CT=71043DAA3CF78997D9965DE84B150FA6 + +I=23 +KEY=000002000000000000000000000000000000000000000000 +CT=55B0DF5816DD16D2EB5CDDC5478D0652 + +I=24 +KEY=000001000000000000000000000000000000000000000000 +CT=CA853E905496251FF856259149FB5CCA + +I=25 +KEY=000000800000000000000000000000000000000000000000 +CT=BEF7C892708F0369378EA80C0EB9DD4A + +I=26 +KEY=000000400000000000000000000000000000000000000000 +CT=3E7D986D91BEE75E597999C3E7372F06 + +I=27 +KEY=000000200000000000000000000000000000000000000000 +CT=8877D8DAF98680C7EC03C870BAFB66F9 + +I=28 +KEY=000000100000000000000000000000000000000000000000 +CT=493B8E5D02D01A6C98DDF4D016F4932D + +I=29 +KEY=000000080000000000000000000000000000000000000000 +CT=E372455C9A44DCD5AEA803A276B2C5C3 + +I=30 +KEY=000000040000000000000000000000000000000000000000 +CT=92FCA63F71BCD0C950231E104D833246 + +I=31 +KEY=000000020000000000000000000000000000000000000000 +CT=1630F75A2F31B1998725D849CC2ADA9A + +I=32 +KEY=000000010000000000000000000000000000000000000000 +CT=E3B636FC5BE0F05A036AEDF4DE7154BD + +I=33 +KEY=000000008000000000000000000000000000000000000000 +CT=DBC8BD2D128A11715152306E19C9D1F9 + +I=34 +KEY=000000004000000000000000000000000000000000000000 +CT=AEFB45876EE3B0025A2D26A7A20E2A72 + +I=35 +KEY=000000002000000000000000000000000000000000000000 +CT=C7F1370CD98539026B8FD0968F7A8247 + +I=36 +KEY=000000001000000000000000000000000000000000000000 +CT=6D09CC037CDFD06ECAC142630A599C4F + +I=37 +KEY=000000000800000000000000000000000000000000000000 +CT=94C29805153DB7FE4834BD261F0CA87E + +I=38 +KEY=000000000400000000000000000000000000000000000000 +CT=B509BAF1EAB92764F8085764968CD111 + +I=39 +KEY=000000000200000000000000000000000000000000000000 +CT=E6ECD9CCAF93F302250A90E3C083C22E + +I=40 +KEY=000000000100000000000000000000000000000000000000 +CT=1419D2C7A7A8F7AB5D78B327770EE8F7 + +I=41 +KEY=000000000080000000000000000000000000000000000000 +CT=984FA23C883200CFA802FCBF1DE752A2 + +I=42 +KEY=000000000040000000000000000000000000000000000000 +CT=003BFBA6334DEDFF7A3652DFDC73D04A + +I=43 +KEY=000000000020000000000000000000000000000000000000 +CT=B21EC3CCD1303B81744348C64B5E5984 + +I=44 +KEY=000000000010000000000000000000000000000000000000 +CT=58557001247E8AFE91399042E723751B + +I=45 +KEY=000000000008000000000000000000000000000000000000 +CT=0EF33C5A09600898D9FFE6AF5A06C2B6 + +I=46 +KEY=000000000004000000000000000000000000000000000000 +CT=AA0E866FEE8227BF6A8FDA4B318920AB + +I=47 +KEY=000000000002000000000000000000000000000000000000 +CT=839A0DA3DB2718EEBB917B4CE37D23BF + +I=48 +KEY=000000000001000000000000000000000000000000000000 +CT=BA3292A8130B2708EEBC5B2478B52C17 + +I=49 +KEY=000000000000800000000000000000000000000000000000 +CT=49B2A8F2FC9639B5918176993D96646A + +I=50 +KEY=000000000000400000000000000000000000000000000000 +CT=21967CDE8F85ED1600F359F376CD18CA + +I=51 +KEY=000000000000200000000000000000000000000000000000 +CT=6CCA94D43AB4B3A82FA4E514D928E644 + +I=52 +KEY=000000000000100000000000000000000000000000000000 +CT=3C76EAC404CF1E23B0A159C919A60206 + +I=53 +KEY=000000000000080000000000000000000000000000000000 +CT=F9DE0E78E8CC16D3A99D7642DEA13DB0 + +I=54 +KEY=000000000000040000000000000000000000000000000000 +CT=5B74643F1DEA8CA49078E4BF54B856CA + +I=55 +KEY=000000000000020000000000000000000000000000000000 +CT=0E07FE27FBFAB005FF7EF334C3320736 + +I=56 +KEY=000000000000010000000000000000000000000000000000 +CT=477810CB11FC7E68144960AAD5372A64 + +I=57 +KEY=000000000000008000000000000000000000000000000000 +CT=A638D2171A231AFF384C97A7E9EFF6B6 + +I=58 +KEY=000000000000004000000000000000000000000000000000 +CT=9EA186F9AA6BE6D395E92474CCB9CAA3 + +I=59 +KEY=000000000000002000000000000000000000000000000000 +CT=7F6A295094E5512EDEA0B7206B977270 + +I=60 +KEY=000000000000001000000000000000000000000000000000 +CT=2DD07726A9333391A6EB41F4859A1627 + +I=61 +KEY=000000000000000800000000000000000000000000000000 +CT=515847FB17843E42C936A6201DF28563 + +I=62 +KEY=000000000000000400000000000000000000000000000000 +CT=35B29379EABD877B458FC4A4FB532931 + +I=63 +KEY=000000000000000200000000000000000000000000000000 +CT=B986149A6E871ACD8E3E1E5F5928C889 + +I=64 +KEY=000000000000000100000000000000000000000000000000 +CT=84D0A488FB56ADB915B553B2EDDBCC41 + +I=65 +KEY=000000000000000080000000000000000000000000000000 +CT=63B2B5A4D51E076D673044C71DC68B02 + +I=66 +KEY=000000000000000040000000000000000000000000000000 +CT=F388AD195E35B2892E586B830D728440 + +I=67 +KEY=000000000000000020000000000000000000000000000000 +CT=8FA923E8949678F76205CF4CBE07FF2F + +I=68 +KEY=000000000000000010000000000000000000000000000000 +CT=ACCF2708E75B4CF48E45B641B81C1F41 + +I=69 +KEY=000000000000000008000000000000000000000000000000 +CT=0A7C295579AD4296447B7E56EB719ED3 + +I=70 +KEY=000000000000000004000000000000000000000000000000 +CT=06572AAB88739B2BDEE8E1E9CCA22883 + +I=71 +KEY=000000000000000002000000000000000000000000000000 +CT=2CF0CA3DB58CDC62890D386B07A4145F + +I=72 +KEY=000000000000000001000000000000000000000000000000 +CT=CEFAEB3CEAA5959FAB15E884D46E9F09 + +I=73 +KEY=000000000000000000800000000000000000000000000000 +CT=57EB477F0573D6C75E45EE8606B5A2B6 + +I=74 +KEY=000000000000000000400000000000000000000000000000 +CT=C55F45149DE0FD18F2588B2B9F54CC22 + +I=75 +KEY=000000000000000000200000000000000000000000000000 +CT=ABCA7BE4CCC597AD8783C24EAB8BF17D + +I=76 +KEY=000000000000000000100000000000000000000000000000 +CT=702F3D046E8651BF40D6A5914D8AC8B5 + +I=77 +KEY=000000000000000000080000000000000000000000000000 +CT=2C6424E1EF097C8FB44138C8A5160AE7 + +I=78 +KEY=000000000000000000040000000000000000000000000000 +CT=3F0E8296D93C233CBBE22623CCB66A52 + +I=79 +KEY=000000000000000000020000000000000000000000000000 +CT=D828348AFD520F98ED31F0B9FA4C48B1 + +I=80 +KEY=000000000000000000010000000000000000000000000000 +CT=BA7A4AA5F32D16DF08ABAA63E72F8BAD + +I=81 +KEY=000000000000000000008000000000000000000000000000 +CT=9211FA0B1161E094BE702157D4CAFC73 + +I=82 +KEY=000000000000000000004000000000000000000000000000 +CT=1A4D5C52FDDEE81374295341F950055D + +I=83 +KEY=000000000000000000002000000000000000000000000000 +CT=9544A653B635734B0FBC84E6C64B1AD5 + +I=84 +KEY=000000000000000000001000000000000000000000000000 +CT=8B7E7EE1A74570F35183E15D05114BD0 + +I=85 +KEY=000000000000000000000800000000000000000000000000 +CT=6567CE30F21EE879D60359CEE9AD3EC0 + +I=86 +KEY=000000000000000000000400000000000000000000000000 +CT=E5078C9B9B7572A60822A44150C6A4F4 + +I=87 +KEY=000000000000000000000200000000000000000000000000 +CT=51DFF3FE97481F08F6D5B66480AEE6D5 + +I=88 +KEY=000000000000000000000100000000000000000000000000 +CT=E84E478B15FB1BCD50E3CA9936FE9E01 + +I=89 +KEY=000000000000000000000080000000000000000000000000 +CT=FC614E54348A78E28ADB5DFB11130ADC + +I=90 +KEY=000000000000000000000040000000000000000000000000 +CT=0F872CF9F54CE981ED17E41B23ED616C + +I=91 +KEY=000000000000000000000020000000000000000000000000 +CT=AFCC9646ED78283BD19092853223F347 + +I=92 +KEY=000000000000000000000010000000000000000000000000 +CT=35D5A827B175D776F8F90F30F41A1C4B + +I=93 +KEY=000000000000000000000008000000000000000000000000 +CT=B55980544140E694FCDFCE7C251C121C + +I=94 +KEY=000000000000000000000004000000000000000000000000 +CT=244C4A55D5EEC8BD55C4F0D295ED2541 + +I=95 +KEY=000000000000000000000002000000000000000000000000 +CT=B3700314BD37894991C2FD4355B26845 + +I=96 +KEY=000000000000000000000001000000000000000000000000 +CT=43F3C6FFB517CD6E8EE1AEFCAA6FDE06 + +I=97 +KEY=000000000000000000000000800000000000000000000000 +CT=0F1A3E34821335E4EC22D404155192C2 + +I=98 +KEY=000000000000000000000000400000000000000000000000 +CT=22C59B22CC6A1E0EA313346F461324CD + +I=99 +KEY=000000000000000000000000200000000000000000000000 +CT=2A90EF00D977A82EBDF6681F33D7DC1C + +I=100 +KEY=000000000000000000000000100000000000000000000000 +CT=4B36176A8C174A635BF96A5B46BCF54C + +I=101 +KEY=000000000000000000000000080000000000000000000000 +CT=E344C5213246712CAA2A056A6EE1868F + +I=102 +KEY=000000000000000000000000040000000000000000000000 +CT=8F75D3C2ABBF84F3AA5E1734D6CC76A6 + +I=103 +KEY=000000000000000000000000020000000000000000000000 +CT=2258F75A5FC2B667DD0B28039CEA784C + +I=104 +KEY=000000000000000000000000010000000000000000000000 +CT=D74F3EA90D02FC4908FDDCBE5849152E + +I=105 +KEY=000000000000000000000000008000000000000000000000 +CT=0DCD8607E57390DD609717338591B205 + +I=106 +KEY=000000000000000000000000004000000000000000000000 +CT=594419C26F408B721F82ACCAC2DF1D5B + +I=107 +KEY=000000000000000000000000002000000000000000000000 +CT=12D0F6A150858F64F0C88061CE592C11 + +I=108 +KEY=000000000000000000000000001000000000000000000000 +CT=5351E750DE5C9322AFA2885FB83C623B + +I=109 +KEY=000000000000000000000000000800000000000000000000 +CT=7C120675A918C2C728149D332A196586 + +I=110 +KEY=000000000000000000000000000400000000000000000000 +CT=CDCA42B4E3ED64C2D37812847D7377CC + +I=111 +KEY=000000000000000000000000000200000000000000000000 +CT=E4B73F8C0D9A40A67ACB9837CF8006DB + +I=112 +KEY=000000000000000000000000000100000000000000000000 +CT=A863A13ED52E8BFD6652FEE291837B1D + +I=113 +KEY=000000000000000000000000000080000000000000000000 +CT=64F9790C0BBD5C234FFADF0037485BB1 + +I=114 +KEY=000000000000000000000000000040000000000000000000 +CT=37A8AA3E38B937D92E1E41EC5E157FE0 + +I=115 +KEY=000000000000000000000000000020000000000000000000 +CT=F84D2A60A99BA9C17848BFBFBFEA0271 + +I=116 +KEY=000000000000000000000000000010000000000000000000 +CT=01AD547F2E1A713AC0B3D3E332A044A6 + +I=117 +KEY=000000000000000000000000000008000000000000000000 +CT=ED06A9B6EB5E24DF2CDA83564080AE93 + +I=118 +KEY=000000000000000000000000000004000000000000000000 +CT=3682650D35D3247471F3EB10A173479D + +I=119 +KEY=000000000000000000000000000002000000000000000000 +CT=E3BD985B5B7C83F841F2F2A37A2974B3 + +I=120 +KEY=000000000000000000000000000001000000000000000000 +CT=EEA30254CF0FD6379A7203FC2328EEB6 + +I=121 +KEY=000000000000000000000000000000800000000000000000 +CT=4F2C052C360DA20FF826DFA98429AAA5 + +I=122 +KEY=000000000000000000000000000000400000000000000000 +CT=5F4CE32E4D55F0EB15799A3C46E1C40A + +I=123 +KEY=000000000000000000000000000000200000000000000000 +CT=2EBE1C941F8247BBA3E85A04BA10B27C + +I=124 +KEY=000000000000000000000000000000100000000000000000 +CT=9F41738ADB0CD8B4DD048527FCCFC23B + +I=125 +KEY=000000000000000000000000000000080000000000000000 +CT=0E9F502FEE59A16CC5CEEDC82FD98E1A + +I=126 +KEY=000000000000000000000000000000040000000000000000 +CT=56DC540BBAFB42B9817B4D464993DBCE + +I=127 +KEY=000000000000000000000000000000020000000000000000 +CT=7421D3EB41769680565DD67683FE6737 + +I=128 +KEY=000000000000000000000000000000010000000000000000 +CT=777D08A4999E79A97CDBAFA5B6C33D12 + +I=129 +KEY=000000000000000000000000000000008000000000000000 +CT=4F3145690B092FAEDEBC672FE0ABC1EC + +I=130 +KEY=000000000000000000000000000000004000000000000000 +CT=C221E4ABE2DD5ABA26DC29B6F3E421C6 + +I=131 +KEY=000000000000000000000000000000002000000000000000 +CT=EC48948223D3086FA730F6F81C103E8B + +I=132 +KEY=000000000000000000000000000000001000000000000000 +CT=38B03357B1A0719A4E04FC3725B66400 + +I=133 +KEY=000000000000000000000000000000000800000000000000 +CT=A9458E67FD55DFB7F5D43344D7B8D994 + +I=134 +KEY=000000000000000000000000000000000400000000000000 +CT=C82BBCFE8E647A4915E578BB6BB410EC + +I=135 +KEY=000000000000000000000000000000000200000000000000 +CT=27DA68521E57EFBC401640232896ABC7 + +I=136 +KEY=000000000000000000000000000000000100000000000000 +CT=DD6C4A6784C293F1D6B334731298C043 + +I=137 +KEY=000000000000000000000000000000000080000000000000 +CT=C2C4A691BD77C60869E6C030E357B7DF + +I=138 +KEY=000000000000000000000000000000000040000000000000 +CT=EDA41EF6E7863F1A7D718E31A7D0AB0F + +I=139 +KEY=000000000000000000000000000000000020000000000000 +CT=7915CF01D36808B875E1561FB88ECF2D + +I=140 +KEY=000000000000000000000000000000000010000000000000 +CT=033826639ABFCBA709DEECD8F32306D5 + +I=141 +KEY=000000000000000000000000000000000008000000000000 +CT=B7CE1348B2832FABD58542A59319C947 + +I=142 +KEY=000000000000000000000000000000000004000000000000 +CT=479E3B195B3F9BE75AA2D0931F179495 + +I=143 +KEY=000000000000000000000000000000000002000000000000 +CT=6B9E7F0C5050E8CD232722C33261135D + +I=144 +KEY=000000000000000000000000000000000001000000000000 +CT=063F64EDD05343702B76BE045A9D1DDD + +I=145 +KEY=000000000000000000000000000000000000800000000000 +CT=E1AE2D5667E440C0A44EF9CC91AA10CC + +I=146 +KEY=000000000000000000000000000000000000400000000000 +CT=A64A692A55AF5D1C99794707BA00E670 + +I=147 +KEY=000000000000000000000000000000000000200000000000 +CT=B975AC5AFA03D77D7361AACFF32E1B39 + +I=148 +KEY=000000000000000000000000000000000000100000000000 +CT=267A1379C257776BE4CA75C8B1A59EF6 + +I=149 +KEY=000000000000000000000000000000000000080000000000 +CT=ED392DDA2AD879B58405B41FAA7A56A1 + +I=150 +KEY=000000000000000000000000000000000000040000000000 +CT=4DECF57B85B75F1A78431A972CC873F6 + +I=151 +KEY=000000000000000000000000000000000000020000000000 +CT=5F9D95B7F415376A6665BDF645E5C6AC + +I=152 +KEY=000000000000000000000000000000000000010000000000 +CT=5929FF53CC9876F923C6D19D3D101F18 + +I=153 +KEY=000000000000000000000000000000000000008000000000 +CT=D6CF5F18474D3A44D0BE029EE879E6FA + +I=154 +KEY=000000000000000000000000000000000000004000000000 +CT=8860A98873A8DBFFDC4D7835F3D59BB7 + +I=155 +KEY=000000000000000000000000000000000000002000000000 +CT=4B506DF2FF9DA5672F55624AFE5374E8 + +I=156 +KEY=000000000000000000000000000000000000001000000000 +CT=B4D6692D5AAE39519C0AAB97597A5521 + +I=157 +KEY=000000000000000000000000000000000000000800000000 +CT=7185FA267D3926EA0804F07A91398C37 + +I=158 +KEY=000000000000000000000000000000000000000400000000 +CT=8C3BD232227C1C1B214186A603D85115 + +I=159 +KEY=000000000000000000000000000000000000000200000000 +CT=5300AFD8D507A60ACB0907B4D3E3D2B0 + +I=160 +KEY=000000000000000000000000000000000000000100000000 +CT=D8A16D32AE71F991EE2C1C19153B146D + +I=161 +KEY=000000000000000000000000000000000000000080000000 +CT=32B3F26C1415BF7F82B6A637843F4C21 + +I=162 +KEY=000000000000000000000000000000000000000040000000 +CT=E416420B5F736F39328D36181992A720 + +I=163 +KEY=000000000000000000000000000000000000000020000000 +CT=619918287897135AD5516BA12A0FC6D7 + +I=164 +KEY=000000000000000000000000000000000000000010000000 +CT=69830C559F08DDCEEB6F83900DC14626 + +I=165 +KEY=000000000000000000000000000000000000000008000000 +CT=BB451FB76A7B1FE65E0332DE6E6712A3 + +I=166 +KEY=000000000000000000000000000000000000000004000000 +CT=AF2DE55E1EFFAF00EBF4EAEE45B29A4C + +I=167 +KEY=000000000000000000000000000000000000000002000000 +CT=CA31B9A81450A198A073A299C7DF14C9 + +I=168 +KEY=000000000000000000000000000000000000000001000000 +CT=4FF7E9FADFCFFBB2DD3F23214B407180 + +I=169 +KEY=000000000000000000000000000000000000000000800000 +CT=B8BC9344751D34B0BFE353E5F3A9E309 + +I=170 +KEY=000000000000000000000000000000000000000000400000 +CT=4589951B936D1948299548D199E0612F + +I=171 +KEY=000000000000000000000000000000000000000000200000 +CT=61B33E9A6A14F21B12D00832385F9BCA + +I=172 +KEY=000000000000000000000000000000000000000000100000 +CT=652B66FBC2B192ACA177D4C16ACB1E3F + +I=173 +KEY=000000000000000000000000000000000000000000080000 +CT=81A252288A18D4E4EC1F919FE34BD4C8 + +I=174 +KEY=000000000000000000000000000000000000000000040000 +CT=4D38323769C7AEFBF838F51A57E21C0E + +I=175 +KEY=000000000000000000000000000000000000000000020000 +CT=C07D35D5788A04FEEBA6A337453DEFCA + +I=176 +KEY=000000000000000000000000000000000000000000010000 +CT=6692591964FF5304D877DDE631E55AC2 + +I=177 +KEY=000000000000000000000000000000000000000000008000 +CT=1792F89A673DFE67A04BAC230317BFD3 + +I=178 +KEY=000000000000000000000000000000000000000000004000 +CT=0EC45273FAA59A4C6AA56C0BDF9DC1C4 + +I=179 +KEY=000000000000000000000000000000000000000000002000 +CT=273575F8DB870005ED51F0F1FB962A35 + +I=180 +KEY=000000000000000000000000000000000000000000001000 +CT=D9EDC0E324D69F3CAB465E3F63AC4CD3 + +I=181 +KEY=000000000000000000000000000000000000000000000800 +CT=647B9C834502295B5D46AE962ABD9059 + +I=182 +KEY=000000000000000000000000000000000000000000000400 +CT=3C8B932E1E8C1E9FD4629AF03D16D717 + +I=183 +KEY=000000000000000000000000000000000000000000000200 +CT=9FD433DAE0C3B5C35C7CA5468B4AF8DE + +I=184 +KEY=000000000000000000000000000000000000000000000100 +CT=916E8226F1925A4C7E0056E8951B4609 + +I=185 +KEY=000000000000000000000000000000000000000000000080 +CT=A53FCF269CF194C323B2C2A5B82571E2 + +I=186 +KEY=000000000000000000000000000000000000000000000040 +CT=51C6D510F3053D502D141C99FBB28618 + +I=187 +KEY=000000000000000000000000000000000000000000000020 +CT=040E54E63CCF8E5D6EE6A27EEDCC02AB + +I=188 +KEY=000000000000000000000000000000000000000000000010 +CT=DE90BD5F4C96E4F52EC9200D9E298DCD + +I=189 +KEY=000000000000000000000000000000000000000000000008 +CT=87233EAEFC125F7C6E1FE329CC415520 + +I=190 +KEY=000000000000000000000000000000000000000000000004 +CT=71B61DD72D4FBD96542E73A5E5BD7CA5 + +I=191 +KEY=000000000000000000000000000000000000000000000002 +CT=F5F6E1B6215062A2547C1A7C84EB8E86 + +I=192 +KEY=000000000000000000000000000000000000000000000001 +CT=2DD740E5E0E0CBE72EBDF2808410D55F + +========== + +KEYSIZE=256 + +PT=00000000000000000000000000000000 + +I=1 +KEY=8000000000000000000000000000000000000000000000000000000000000000 +CT=EA4FCDBA1EB0C533938AA9FA32B740F3 + +I=2 +KEY=4000000000000000000000000000000000000000000000000000000000000000 +CT=B8E6D5134AB08E553AD5785B33D66111 + +I=3 +KEY=2000000000000000000000000000000000000000000000000000000000000000 +CT=2D7805B2B86764E8FC3DD6E2EFB1532D + +I=4 +KEY=1000000000000000000000000000000000000000000000000000000000000000 +CT=B9449A4D8C53639D0A6751DB3695B325 + +I=5 +KEY=0800000000000000000000000000000000000000000000000000000000000000 +CT=B2C6850F1AAAF7CD2E9B3FC1F5433FDC + +I=6 +KEY=0400000000000000000000000000000000000000000000000000000000000000 +CT=7D124E20CE475B66BEA88399FF95C8C0 + +I=7 +KEY=0200000000000000000000000000000000000000000000000000000000000000 +CT=D5F5ED2CDEC8D3043BD0C58238AF2820 + +I=8 +KEY=0100000000000000000000000000000000000000000000000000000000000000 +CT=051135A86EADA21353CB5FFD7A58408E + +I=9 +KEY=0080000000000000000000000000000000000000000000000000000000000000 +CT=FEF406FC9C405AFB959C796E4ED0AF0D + +I=10 +KEY=0040000000000000000000000000000000000000000000000000000000000000 +CT=52DA5222BB9974AE66CC9BB77E1F15E8 + +I=11 +KEY=0020000000000000000000000000000000000000000000000000000000000000 +CT=F5DC2C5F98AF6CF4BCC23ECEEAF213AD + +I=12 +KEY=0010000000000000000000000000000000000000000000000000000000000000 +CT=09DF90DE791250ACBE170DC643780CF2 + +I=13 +KEY=0008000000000000000000000000000000000000000000000000000000000000 +CT=3FA812132A21BEB83162C33B28CC242C + +I=14 +KEY=0004000000000000000000000000000000000000000000000000000000000000 +CT=CEE571785850DD567A75D9E244660C66 + +I=15 +KEY=0002000000000000000000000000000000000000000000000000000000000000 +CT=642BB005B38790E518E53A53373C2474 + +I=16 +KEY=0001000000000000000000000000000000000000000000000000000000000000 +CT=E3EBE5FA1C748BCB125602F8B7911FAE + +I=17 +KEY=0000800000000000000000000000000000000000000000000000000000000000 +CT=C863C98E1C09C28B4A05B5FBCE64DF28 + +I=18 +KEY=0000400000000000000000000000000000000000000000000000000000000000 +CT=B4BAB3A731F8CCD8A09A5D3AFF77BE60 + +I=19 +KEY=0000200000000000000000000000000000000000000000000000000000000000 +CT=1A3FC4F1DE42F1AC5DA5F88701E6F292 + +I=20 +KEY=0000100000000000000000000000000000000000000000000000000000000000 +CT=FF43862813E9F1CFEF044F4B8CFED265 + +I=21 +KEY=0000080000000000000000000000000000000000000000000000000000000000 +CT=8F2785A7E28C1910580BBFD989A7F0D3 + +I=22 +KEY=0000040000000000000000000000000000000000000000000000000000000000 +CT=26059027035B43615A7996D19FED9D42 + +I=23 +KEY=0000020000000000000000000000000000000000000000000000000000000000 +CT=8CD8416F37E3BA1B5D6D0838F6B6E604 + +I=24 +KEY=0000010000000000000000000000000000000000000000000000000000000000 +CT=BB0BD60CD950DE5E0B9AAF78FF9A30DB + +I=25 +KEY=0000008000000000000000000000000000000000000000000000000000000000 +CT=B99C1D4F98B68E8CD7495D16F3260D7D + +I=26 +KEY=0000004000000000000000000000000000000000000000000000000000000000 +CT=4F1A4F8D20456CFE0EF0E39DE6C71B9C + +I=27 +KEY=0000002000000000000000000000000000000000000000000000000000000000 +CT=F453DB1AB45A6F5834F9908E1A15D4F7 + +I=28 +KEY=0000001000000000000000000000000000000000000000000000000000000000 +CT=DA25287B7CD050E9B3E2074ED3B49FCF + +I=29 +KEY=0000000800000000000000000000000000000000000000000000000000000000 +CT=BAB2AE0FF7C4902697DE88ED7F2FA06C + +I=30 +KEY=0000000400000000000000000000000000000000000000000000000000000000 +CT=ABE6F6C9D29A58B985A91782EE28CF3E + +I=31 +KEY=0000000200000000000000000000000000000000000000000000000000000000 +CT=5C59FBE090DB3D75D7A5A8FD76F8A3DB + +I=32 +KEY=0000000100000000000000000000000000000000000000000000000000000000 +CT=DCA806B1D0BAFCEAB015EC19A3E5C7FA + +I=33 +KEY=0000000080000000000000000000000000000000000000000000000000000000 +CT=1BA870E6D62FEB16E6C2AA1128AE5ABA + +I=34 +KEY=0000000040000000000000000000000000000000000000000000000000000000 +CT=0FE91367D4C178DD313C6AB7F3D5149A + +I=35 +KEY=0000000020000000000000000000000000000000000000000000000000000000 +CT=BFE27CB1B52150E0636A81473148B018 + +I=36 +KEY=0000000010000000000000000000000000000000000000000000000000000000 +CT=F79BE17022979D01E3AFFB3499556DC4 + +I=37 +KEY=0000000008000000000000000000000000000000000000000000000000000000 +CT=A2F2B772060C53A539B5A3FE4C935171 + +I=38 +KEY=0000000004000000000000000000000000000000000000000000000000000000 +CT=DB97947A8B14B3E3859068A0288285F6 + +I=39 +KEY=0000000002000000000000000000000000000000000000000000000000000000 +CT=1FD086FE698C5E092A8E0C9EE527714A + +I=40 +KEY=0000000001000000000000000000000000000000000000000000000000000000 +CT=8ADAB79B444DDDF86B8D53D2A9112881 + +I=41 +KEY=0000000000800000000000000000000000000000000000000000000000000000 +CT=C36CEC9730A74CE94CF2EA5C7B0EC3ED + +I=42 +KEY=0000000000400000000000000000000000000000000000000000000000000000 +CT=033629A0675A45A11BE7924137D711EC + +I=43 +KEY=0000000000200000000000000000000000000000000000000000000000000000 +CT=D5C22EF288E7D2D04BC04B57B702A03F + +I=44 +KEY=0000000000100000000000000000000000000000000000000000000000000000 +CT=1FD290A5EB2E278C6396625034EB268C + +I=45 +KEY=0000000000080000000000000000000000000000000000000000000000000000 +CT=05C35E0CB6D27E6E9D680368B2ABA9B5 + +I=46 +KEY=0000000000040000000000000000000000000000000000000000000000000000 +CT=B0194CDF7510FE98EDF9464259378FAF + +I=47 +KEY=0000000000020000000000000000000000000000000000000000000000000000 +CT=043729754E5B1F63408F62742E5F2765 + +I=48 +KEY=0000000000010000000000000000000000000000000000000000000000000000 +CT=24A2746042EC7970E8AB59589AD63775 + +I=49 +KEY=0000000000008000000000000000000000000000000000000000000000000000 +CT=7BDEF0A2EF8B637C4C3C5D001BAB5F85 + +I=50 +KEY=0000000000004000000000000000000000000000000000000000000000000000 +CT=0221B515A1559D96E9C3CBFB929E96A9 + +I=51 +KEY=0000000000002000000000000000000000000000000000000000000000000000 +CT=7E975026E5771D90EDA081B72C0BC77C + +I=52 +KEY=0000000000001000000000000000000000000000000000000000000000000000 +CT=7C7F9F98B4739C9774F84E75E5B30A95 + +I=53 +KEY=0000000000000800000000000000000000000000000000000000000000000000 +CT=A4E176B7C98D76BC6662BBB3E606BA9C + +I=54 +KEY=0000000000000400000000000000000000000000000000000000000000000000 +CT=7FDBDA5910B26D8D3FE42987B09430C0 + +I=55 +KEY=0000000000000200000000000000000000000000000000000000000000000000 +CT=7B134F40F8E10D8287B8E6FC0BDE45E8 + +I=56 +KEY=0000000000000100000000000000000000000000000000000000000000000000 +CT=CF3C98CC0CAFB2935385C0B5D8F07857 + +I=57 +KEY=0000000000000080000000000000000000000000000000000000000000000000 +CT=FB71BA47019735DA4082D68A1A587BDB + +I=58 +KEY=0000000000000040000000000000000000000000000000000000000000000000 +CT=E9D45576FC1A56DAFB48ABFB90A1DE4B + +I=59 +KEY=0000000000000020000000000000000000000000000000000000000000000000 +CT=AE9408DC1A007CA9C13F2F9D12FC4F71 + +I=60 +KEY=0000000000000010000000000000000000000000000000000000000000000000 +CT=B407201A6A44CB236468709B181BCA23 + +I=61 +KEY=0000000000000008000000000000000000000000000000000000000000000000 +CT=06E1A40D4F7534E24538D26802AF9E98 + +I=62 +KEY=0000000000000004000000000000000000000000000000000000000000000000 +CT=3468992A9D6F274286611D1E5DB327BA + +I=63 +KEY=0000000000000002000000000000000000000000000000000000000000000000 +CT=635748DEDCB4E65B76E818D09994D19A + +I=64 +KEY=0000000000000001000000000000000000000000000000000000000000000000 +CT=C2A0DACC741E90029F16CDA81BEB8D0C + +I=65 +KEY=0000000000000000800000000000000000000000000000000000000000000000 +CT=D20B9853FC98ED3FCFA4C3B9781352D3 + +I=66 +KEY=0000000000000000400000000000000000000000000000000000000000000000 +CT=869B106388046F6F5F9AE5ADC1F23BC2 + +I=67 +KEY=0000000000000000200000000000000000000000000000000000000000000000 +CT=4F9BF7227D943B80C97B2FED132098FE + +I=68 +KEY=0000000000000000100000000000000000000000000000000000000000000000 +CT=7232A96D275C409349A0382BAE576274 + +I=69 +KEY=0000000000000000080000000000000000000000000000000000000000000000 +CT=ADAF9B3E14B8CC101A2F143B373517B7 + +I=70 +KEY=0000000000000000040000000000000000000000000000000000000000000000 +CT=813E38DF25E4356EAFC7ECEB75270FD4 + +I=71 +KEY=0000000000000000020000000000000000000000000000000000000000000000 +CT=46D6957C76223046E232EEBB661CCE59 + +I=72 +KEY=0000000000000000010000000000000000000000000000000000000000000000 +CT=1714E3EDD2A7BFE4FC35D4B6034E4184 + +I=73 +KEY=0000000000000000008000000000000000000000000000000000000000000000 +CT=445ED35901D4608FAC3BCD59E685E77C + +I=74 +KEY=0000000000000000004000000000000000000000000000000000000000000000 +CT=236F86A3A59F563611C9A1A9C8DF045C + +I=75 +KEY=0000000000000000002000000000000000000000000000000000000000000000 +CT=FC0739E82EF130E533C77FA15BD85B57 + +I=76 +KEY=0000000000000000001000000000000000000000000000000000000000000000 +CT=EDC81185A966066433F1B19BE7659080 + +I=77 +KEY=0000000000000000000800000000000000000000000000000000000000000000 +CT=9D0ED59542D4851F7812B29640739765 + +I=78 +KEY=0000000000000000000400000000000000000000000000000000000000000000 +CT=4BA903B83FD4A443564723403BD7D431 + +I=79 +KEY=0000000000000000000200000000000000000000000000000000000000000000 +CT=5DA2CD3D64EDCB29588F02BFED3D575B + +I=80 +KEY=0000000000000000000100000000000000000000000000000000000000000000 +CT=E66697B697E8881555F5B358A2EB7628 + +I=81 +KEY=0000000000000000000080000000000000000000000000000000000000000000 +CT=7DE9B3320A7872088B1417AAC4E841ED + +I=82 +KEY=0000000000000000000040000000000000000000000000000000000000000000 +CT=236D82828CE9A9471B51DDCDA350C542 + +I=83 +KEY=0000000000000000000020000000000000000000000000000000000000000000 +CT=CF250F09887F0B9300FF865810A2E03F + +I=84 +KEY=0000000000000000000010000000000000000000000000000000000000000000 +CT=0103157DB999DF64D6C6DACB16F15F78 + +I=85 +KEY=0000000000000000000008000000000000000000000000000000000000000000 +CT=EA918B3C7929C992E6F0D7B0DD6B8A59 + +I=86 +KEY=0000000000000000000004000000000000000000000000000000000000000000 +CT=FB853888B1D95F9C7BB7630231C9108E + +I=87 +KEY=0000000000000000000002000000000000000000000000000000000000000000 +CT=46E63459DCC0514DD200BF82B6AEEA0B + +I=88 +KEY=0000000000000000000001000000000000000000000000000000000000000000 +CT=19051C0A056D4B56DFF08C52FBBD4547 + +I=89 +KEY=0000000000000000000000800000000000000000000000000000000000000000 +CT=055240C320AC09978BE4EC0EE9E40123 + +I=90 +KEY=0000000000000000000000400000000000000000000000000000000000000000 +CT=E0D04118BAD95366416C6D715507646B + +I=91 +KEY=0000000000000000000000200000000000000000000000000000000000000000 +CT=888C70E963419AA6446123CD9685252C + +I=92 +KEY=0000000000000000000000100000000000000000000000000000000000000000 +CT=E060A32AF3CD8A525C60A8EB4BEB5B24 + +I=93 +KEY=0000000000000000000000080000000000000000000000000000000000000000 +CT=36A235722A72A5BD05896B74EBB39E35 + +I=94 +KEY=0000000000000000000000040000000000000000000000000000000000000000 +CT=665A781CF1F7839FA4E7EF66F5B47D45 + +I=95 +KEY=0000000000000000000000020000000000000000000000000000000000000000 +CT=8156E976338FB48ED3E469F1485EAA06 + +I=96 +KEY=0000000000000000000000010000000000000000000000000000000000000000 +CT=BA853DF1B7622D17A549624B234082F8 + +I=97 +KEY=0000000000000000000000008000000000000000000000000000000000000000 +CT=3A411EF75149822F0C4E998587BA0CAD + +I=98 +KEY=0000000000000000000000004000000000000000000000000000000000000000 +CT=EA33525A7CC7C74340773389A764513E + +I=99 +KEY=0000000000000000000000002000000000000000000000000000000000000000 +CT=E007DDE8158568CF80C470745E455EEE + +I=100 +KEY=0000000000000000000000001000000000000000000000000000000000000000 +CT=C140AE31D6B8AB675539344B9D857A89 + +I=101 +KEY=0000000000000000000000000800000000000000000000000000000000000000 +CT=8C86266079ABCEE926A5EF6F80F50308 + +I=102 +KEY=0000000000000000000000000400000000000000000000000000000000000000 +CT=CD77B23315E31DF96FABD6E427184F9F + +I=103 +KEY=0000000000000000000000000200000000000000000000000000000000000000 +CT=A72E93628614A603E59ECC5C766A639B + +I=104 +KEY=0000000000000000000000000100000000000000000000000000000000000000 +CT=00EE192F18F06F5799B9593DE71B2FBE + +I=105 +KEY=0000000000000000000000000080000000000000000000000000000000000000 +CT=A79378A27F39485A2A6757A953DE8D63 + +I=106 +KEY=0000000000000000000000000040000000000000000000000000000000000000 +CT=38353F1349680DF284CF7D59272D435B + +I=107 +KEY=0000000000000000000000000020000000000000000000000000000000000000 +CT=0960EF878BE3F63CB8A25AFDEE9272F8 + +I=108 +KEY=0000000000000000000000000010000000000000000000000000000000000000 +CT=CB52EEC84DD320FB74A13DF2D4AF5B64 + +I=109 +KEY=0000000000000000000000000008000000000000000000000000000000000000 +CT=89525CFDCCC1A572987EEEC44507942D + +I=110 +KEY=0000000000000000000000000004000000000000000000000000000000000000 +CT=894183826F3CD163F2BDCE8FD123BCBD + +I=111 +KEY=0000000000000000000000000002000000000000000000000000000000000000 +CT=152FAB85782DD050EF29C8C7E95C5941 + +I=112 +KEY=0000000000000000000000000001000000000000000000000000000000000000 +CT=6C8CC544D1E6B9B8ACEB723A6E903710 + +I=113 +KEY=0000000000000000000000000000800000000000000000000000000000000000 +CT=9D1DCFEFD9CAEB5934AA93278F8E0988 + +I=114 +KEY=0000000000000000000000000000400000000000000000000000000000000000 +CT=86473616CFE39825E9F93B4A5D1518F0 + +I=115 +KEY=0000000000000000000000000000200000000000000000000000000000000000 +CT=3EC955C39DC4442411A578115482A331 + +I=116 +KEY=0000000000000000000000000000100000000000000000000000000000000000 +CT=117C11E5DAFA73A4CBA2E599582DF463 + +I=117 +KEY=0000000000000000000000000000080000000000000000000000000000000000 +CT=371B4F0F917CDC7F028CF90072EA6C0C + +I=118 +KEY=0000000000000000000000000000040000000000000000000000000000000000 +CT=F6EAC5AC916431427022EE688D4E8248 + +I=119 +KEY=0000000000000000000000000000020000000000000000000000000000000000 +CT=5E7787153D1C5E94A860600D0FE0F695 + +I=120 +KEY=0000000000000000000000000000010000000000000000000000000000000000 +CT=44888E6DD958A843AF2143DA81986196 + +I=121 +KEY=0000000000000000000000000000008000000000000000000000000000000000 +CT=F3B940BFEFF393BFDAF0C435D262961C + +I=122 +KEY=0000000000000000000000000000004000000000000000000000000000000000 +CT=40781DABC58A81B11FAA4039E6F73345 + +I=123 +KEY=0000000000000000000000000000002000000000000000000000000000000000 +CT=7685B120BD850BD6D7A618E023D42BA0 + +I=124 +KEY=0000000000000000000000000000001000000000000000000000000000000000 +CT=8088416E7FEDB30B1883DF50E29CD4D1 + +I=125 +KEY=0000000000000000000000000000000800000000000000000000000000000000 +CT=B0C9ED5257B103131AB5DBECC16D1547 + +I=126 +KEY=0000000000000000000000000000000400000000000000000000000000000000 +CT=01C8B821C4683B586CD8096A0DC4FDAA + +I=127 +KEY=0000000000000000000000000000000200000000000000000000000000000000 +CT=4CA16F058B3AE1E2B3774E3DF99087CA + +I=128 +KEY=0000000000000000000000000000000100000000000000000000000000000000 +CT=620D06B8EFBFDD1EE274D5EAE42B8F0E + +I=129 +KEY=0000000000000000000000000000000080000000000000000000000000000000 +CT=34CF934F88C0D631B3D80BE0A5671B11 + +I=130 +KEY=0000000000000000000000000000000040000000000000000000000000000000 +CT=F8AB4045BD0CD95486B921B7430E74A0 + +I=131 +KEY=0000000000000000000000000000000020000000000000000000000000000000 +CT=96ECEC4088D81E2EF27D74A96E2614DC + +I=132 +KEY=0000000000000000000000000000000010000000000000000000000000000000 +CT=EB0152474310B99F0F8F0DFD6D67962C + +I=133 +KEY=0000000000000000000000000000000008000000000000000000000000000000 +CT=74DA68DA599D7DD37918F24F7654DC4D + +I=134 +KEY=0000000000000000000000000000000004000000000000000000000000000000 +CT=F766AD686EB2BAF2950974F78968F510 + +I=135 +KEY=0000000000000000000000000000000002000000000000000000000000000000 +CT=A2D18CF5C770587E19DBD6FFEBD52FAE + +I=136 +KEY=0000000000000000000000000000000001000000000000000000000000000000 +CT=DDADE16C2B9E78715FC281197149E4F0 + +I=137 +KEY=0000000000000000000000000000000000800000000000000000000000000000 +CT=79931CFAC3FD4F540E53905538B5E122 + +I=138 +KEY=0000000000000000000000000000000000400000000000000000000000000000 +CT=93F88DDDE5004BD8998CDB7A1BD1EE4D + +I=139 +KEY=0000000000000000000000000000000000200000000000000000000000000000 +CT=011A413B2CC8E56A94A5C6D3932B3C3B + +I=140 +KEY=0000000000000000000000000000000000100000000000000000000000000000 +CT=C509B737BBC749EE466ADF8142F52B28 + +I=141 +KEY=0000000000000000000000000000000000080000000000000000000000000000 +CT=514332276B9E9299F9F722B63752B0A8 + +I=142 +KEY=0000000000000000000000000000000000040000000000000000000000000000 +CT=D9F3A75F94986D0A1AB14258934C21D1 + +I=143 +KEY=0000000000000000000000000000000000020000000000000000000000000000 +CT=6FE84CDC49C9A8A55D85EA1A1D5C0DD9 + +I=144 +KEY=0000000000000000000000000000000000010000000000000000000000000000 +CT=0C85C65BD9DE393D2FEA3BE5AC7BAB67 + +I=145 +KEY=0000000000000000000000000000000000008000000000000000000000000000 +CT=904C7F2E8084FC10D59480C3DE1CB1A4 + +I=146 +KEY=0000000000000000000000000000000000004000000000000000000000000000 +CT=52C696236B4B7EE6B03B8876DEA8DD45 + +I=147 +KEY=0000000000000000000000000000000000002000000000000000000000000000 +CT=A0D46DAEA95CB4968F62BD9B3F8075A8 + +I=148 +KEY=0000000000000000000000000000000000001000000000000000000000000000 +CT=51BE75B32A05384D2A2E08CB1EAB5F63 + +I=149 +KEY=0000000000000000000000000000000000000800000000000000000000000000 +CT=1123151EB432831D2C65A90ED1D0A429 + +I=150 +KEY=0000000000000000000000000000000000000400000000000000000000000000 +CT=A26350A8FF6C10FCBA736D46FC26BF69 + +I=151 +KEY=0000000000000000000000000000000000000200000000000000000000000000 +CT=FF85BEF6CF6674FA5EE40EC9FB9052FF + +I=152 +KEY=0000000000000000000000000000000000000100000000000000000000000000 +CT=6ED96DB33AB981AF27894AC436CB4D62 + +I=153 +KEY=0000000000000000000000000000000000000080000000000000000000000000 +CT=B38DE9B3C4D6D128101B02FDD05E3BF8 + +I=154 +KEY=0000000000000000000000000000000000000040000000000000000000000000 +CT=11E05766EBB66AB211E2D9653EF3144D + +I=155 +KEY=0000000000000000000000000000000000000020000000000000000000000000 +CT=F6A196E085116E5BC21732A2EF9ACAF4 + +I=156 +KEY=0000000000000000000000000000000000000010000000000000000000000000 +CT=BC2A6753CA41E306A0500E97B38D8A9A + +I=157 +KEY=0000000000000000000000000000000000000008000000000000000000000000 +CT=773A687B1FC97918943C1B66EF693354 + +I=158 +KEY=0000000000000000000000000000000000000004000000000000000000000000 +CT=C6E2112CCDBD821D2B9068B285C5192B + +I=159 +KEY=0000000000000000000000000000000000000002000000000000000000000000 +CT=EA69C8E28021801EE9A14809848D781F + +I=160 +KEY=0000000000000000000000000000000000000001000000000000000000000000 +CT=6290745CD4CB62DE172F8AB30966EB57 + +I=161 +KEY=0000000000000000000000000000000000000000800000000000000000000000 +CT=1051EE4C389B96B1365B417C74EFBF10 + +I=162 +KEY=0000000000000000000000000000000000000000400000000000000000000000 +CT=52B6F3EE6655128999EEE3831E708D76 + +I=163 +KEY=0000000000000000000000000000000000000000200000000000000000000000 +CT=5BDE19A1D741ECE40CE98CD02F02AD75 + +I=164 +KEY=0000000000000000000000000000000000000000100000000000000000000000 +CT=36EF5E803A68F6AC20D92FB14E2AFDF5 + +I=165 +KEY=0000000000000000000000000000000000000000080000000000000000000000 +CT=B3E1E30B78FBBCA07F065A422D33410B + +I=166 +KEY=0000000000000000000000000000000000000000040000000000000000000000 +CT=5FA0E6C8E6C1FCD613975A18348484CB + +I=167 +KEY=0000000000000000000000000000000000000000020000000000000000000000 +CT=B74E4A2406EEB2AB836AED857754A612 + +I=168 +KEY=0000000000000000000000000000000000000000010000000000000000000000 +CT=52EBF44DB69347A22DF8CA0ABAE3D668 + +I=169 +KEY=0000000000000000000000000000000000000000008000000000000000000000 +CT=986B7B05D1E9639779D034047FC3B780 + +I=170 +KEY=0000000000000000000000000000000000000000004000000000000000000000 +CT=1846AF7EB612C5C356DAF4FE42108444 + +I=171 +KEY=0000000000000000000000000000000000000000002000000000000000000000 +CT=22AD41F78567C6D5C2266486404168DC + +I=172 +KEY=0000000000000000000000000000000000000000001000000000000000000000 +CT=73409A5B03D08BCEE496F7255417DEC5 + +I=173 +KEY=0000000000000000000000000000000000000000000800000000000000000000 +CT=32C47FAEB48DA7847B3C5B063153B049 + +I=174 +KEY=0000000000000000000000000000000000000000000400000000000000000000 +CT=5514F66B91C06AD15BE581AA99F5961B + +I=175 +KEY=0000000000000000000000000000000000000000000200000000000000000000 +CT=38AF52E0648030498BA94D0BBF819B8A + +I=176 +KEY=0000000000000000000000000000000000000000000100000000000000000000 +CT=91D48EEE9A769F0753C6A6DC1037405D + +I=177 +KEY=0000000000000000000000000000000000000000000080000000000000000000 +CT=2CA3F3F2BB2332984A97E5274462E7AF + +I=178 +KEY=0000000000000000000000000000000000000000000040000000000000000000 +CT=806EE4C1C6432102E40A21F03222B0E1 + +I=179 +KEY=0000000000000000000000000000000000000000000020000000000000000000 +CT=E8BBDC90505FE81AB2024274BB2FA258 + +I=180 +KEY=0000000000000000000000000000000000000000000010000000000000000000 +CT=307920977ADAD0EEDEBA2CB8AF83D3CE + +I=181 +KEY=0000000000000000000000000000000000000000000008000000000000000000 +CT=6B0A17013DFAAD05442FA8B298043438 + +I=182 +KEY=0000000000000000000000000000000000000000000004000000000000000000 +CT=BA6EC60065FA6C9679D7E47FC1B85479 + +I=183 +KEY=0000000000000000000000000000000000000000000002000000000000000000 +CT=F1AA580B5E904BED235ACE85C0E009D0 + +I=184 +KEY=0000000000000000000000000000000000000000000001000000000000000000 +CT=9092A797F7024CC218B4A3575F4F7D63 + +I=185 +KEY=0000000000000000000000000000000000000000000000800000000000000000 +CT=CF404B154F2A8388DA9ED1E93AC78894 + +I=186 +KEY=0000000000000000000000000000000000000000000000400000000000000000 +CT=1B32215E25E3EB15FE4BED2F2F31281E + +I=187 +KEY=0000000000000000000000000000000000000000000000200000000000000000 +CT=999B92E27EC161089F45DB53D036C8F0 + +I=188 +KEY=0000000000000000000000000000000000000000000000100000000000000000 +CT=B2F7DBFD67DBC260A7CFCD9C90FEF16F + +I=189 +KEY=0000000000000000000000000000000000000000000000080000000000000000 +CT=7BD9AA3B08F103C796EE8023EF474F0A + +I=190 +KEY=0000000000000000000000000000000000000000000000040000000000000000 +CT=483121AF85F36EA159BE2EB5802FBF21 + +I=191 +KEY=0000000000000000000000000000000000000000000000020000000000000000 +CT=AE2788C2115CB466713687AB06FE5E46 + +I=192 +KEY=0000000000000000000000000000000000000000000000010000000000000000 +CT=ADE758D100ABEEB7BA80BF257781494D + +I=193 +KEY=0000000000000000000000000000000000000000000000008000000000000000 +CT=6DF30205652926EB339833F2EDD8472E + +I=194 +KEY=0000000000000000000000000000000000000000000000004000000000000000 +CT=031E86B2AD4D83A4A19BCAF191F9B65A + +I=195 +KEY=0000000000000000000000000000000000000000000000002000000000000000 +CT=F605CCC9E46B1792EA2F0B4124924F42 + +I=196 +KEY=0000000000000000000000000000000000000000000000001000000000000000 +CT=A70E3286C50B8DD8306109AB59119510 + +I=197 +KEY=0000000000000000000000000000000000000000000000000800000000000000 +CT=6922EEA4B8AE7BFECE899009848A33DA + +I=198 +KEY=0000000000000000000000000000000000000000000000000400000000000000 +CT=1DD856F5453D1D61860E48035BFDADC7 + +I=199 +KEY=0000000000000000000000000000000000000000000000000200000000000000 +CT=9AE9BEC5D195B32BD52623EF21CF2AA3 + +I=200 +KEY=0000000000000000000000000000000000000000000000000100000000000000 +CT=C89ADA0E7DF448DE2155DB7C3E3EAAF2 + +I=201 +KEY=0000000000000000000000000000000000000000000000000080000000000000 +CT=0D176C6E373B2A3B3408AD24BE258365 + +I=202 +KEY=0000000000000000000000000000000000000000000000000040000000000000 +CT=8C2E48AF6FE6305B58EF5B950061E93C + +I=203 +KEY=0000000000000000000000000000000000000000000000000020000000000000 +CT=2E81D19464919FFB1886E81C46AEDE37 + +I=204 +KEY=0000000000000000000000000000000000000000000000000010000000000000 +CT=7169BEE79D4DCC57F771A43AA0A80EF1 + +I=205 +KEY=0000000000000000000000000000000000000000000000000008000000000000 +CT=425223474892BA95538DAFF58F3DD0D3 + +I=206 +KEY=0000000000000000000000000000000000000000000000000004000000000000 +CT=B2650BF17E26E9A4F6484DD2992517D9 + +I=207 +KEY=0000000000000000000000000000000000000000000000000002000000000000 +CT=71936A21362F80ECCED8FC955FF159F3 + +I=208 +KEY=0000000000000000000000000000000000000000000000000001000000000000 +CT=E09665C274E582FFD6BCD0663BD6EA12 + +I=209 +KEY=0000000000000000000000000000000000000000000000000000800000000000 +CT=3E8D36D10E6AB4454154A226B7D6E50E + +I=210 +KEY=0000000000000000000000000000000000000000000000000000400000000000 +CT=5D008338DDD66164591A9B98B23323CA + +I=211 +KEY=0000000000000000000000000000000000000000000000000000200000000000 +CT=6BC5ACE2FA017CCC5CD0A8E88AF73B28 + +I=212 +KEY=0000000000000000000000000000000000000000000000000000100000000000 +CT=C115E4646FC054C50C2BBEC7C20C94F7 + +I=213 +KEY=0000000000000000000000000000000000000000000000000000080000000000 +CT=2CEB602F3C61BE94AF96FD012BB3190C + +I=214 +KEY=0000000000000000000000000000000000000000000000000000040000000000 +CT=5A04F68F56580702891E4ECF6C600C92 + +I=215 +KEY=0000000000000000000000000000000000000000000000000000020000000000 +CT=D6A0DC0D5FB91B6478B9A1AAA586431B + +I=216 +KEY=0000000000000000000000000000000000000000000000000000010000000000 +CT=E38BB33BF982D61BB2CD980BFCE4C2BF + +I=217 +KEY=0000000000000000000000000000000000000000000000000000008000000000 +CT=B47BF164959077E378396A175020AC95 + +I=218 +KEY=0000000000000000000000000000000000000000000000000000004000000000 +CT=CC5CEE68ABBFDC2DFE32FD3A1E433932 + +I=219 +KEY=0000000000000000000000000000000000000000000000000000002000000000 +CT=A8180BBB689F29A560296FF24C785DC4 + +I=220 +KEY=0000000000000000000000000000000000000000000000000000001000000000 +CT=DCCBE0BB943D3B772010A08C11E82763 + +I=221 +KEY=0000000000000000000000000000000000000000000000000000000800000000 +CT=0439C5D8BB8BDD7FCB3A3281BD8A3A3F + +I=222 +KEY=0000000000000000000000000000000000000000000000000000000400000000 +CT=2864CEAE94E09933190479BEA2515040 + +I=223 +KEY=0000000000000000000000000000000000000000000000000000000200000000 +CT=2AFF33A00C93057FE56EDCBBB65987BB + +I=224 +KEY=0000000000000000000000000000000000000000000000000000000100000000 +CT=38C6B37E80EC873DE0A0ABEB9803438F + +I=225 +KEY=0000000000000000000000000000000000000000000000000000000080000000 +CT=1D9428E92329672C0E902F6AA6AFC874 + +I=226 +KEY=0000000000000000000000000000000000000000000000000000000040000000 +CT=2AB8CC1998977DF208C97B2D0DC86C54 + +I=227 +KEY=0000000000000000000000000000000000000000000000000000000020000000 +CT=2E42C343E7E489916E2F2C0AD2AFFFB1 + +I=228 +KEY=0000000000000000000000000000000000000000000000000000000010000000 +CT=571C17477C9FB6C334718983E0B25859 + +I=229 +KEY=0000000000000000000000000000000000000000000000000000000008000000 +CT=3ABAD289F84A4B75412C82D8AD9BD739 + +I=230 +KEY=0000000000000000000000000000000000000000000000000000000004000000 +CT=E91C1A5E57DD295A7F4AC1687F6B8DB6 + +I=231 +KEY=0000000000000000000000000000000000000000000000000000000002000000 +CT=60CEAEC342165320652D7ED13FDAC05A + +I=232 +KEY=0000000000000000000000000000000000000000000000000000000001000000 +CT=DA854CEC00C19BB97F7D8292ABAEB5BB + +I=233 +KEY=0000000000000000000000000000000000000000000000000000000000800000 +CT=6BC45EBD7172512E5F6D51C60E271ACF + +I=234 +KEY=0000000000000000000000000000000000000000000000000000000000400000 +CT=6604FAE8ECBC741D0F46D90AA235CAF6 + +I=235 +KEY=0000000000000000000000000000000000000000000000000000000000200000 +CT=5F95FA50CF7CDD4B619DCB8D6E0B7873 + +I=236 +KEY=0000000000000000000000000000000000000000000000000000000000100000 +CT=C98C198A5A988E2911302C22BFDC4890 + +I=237 +KEY=0000000000000000000000000000000000000000000000000000000000080000 +CT=4B5818505B80DA67A206BF3107DF2B4C + +I=238 +KEY=0000000000000000000000000000000000000000000000000000000000040000 +CT=B2EA813634A26DC5894BFC4BB070E147 + +I=239 +KEY=0000000000000000000000000000000000000000000000000000000000020000 +CT=B6DDED10D2E8B13D7C758692C844017B + +I=240 +KEY=0000000000000000000000000000000000000000000000000000000000010000 +CT=F2DC2468DF800E237C026F968CC3AAE2 + +I=241 +KEY=0000000000000000000000000000000000000000000000000000000000008000 +CT=EBCCE81109DCF1B9793AB60BD062F033 + +I=242 +KEY=0000000000000000000000000000000000000000000000000000000000004000 +CT=1BC015DC9E1B9DBB68293EB93D65088F + +I=243 +KEY=0000000000000000000000000000000000000000000000000000000000002000 +CT=F718F0FC2A276D6CBB7A2BD59BBC3DB0 + +I=244 +KEY=0000000000000000000000000000000000000000000000000000000000001000 +CT=D89BE6BDD07222EF8297FDD246C3DA09 + +I=245 +KEY=0000000000000000000000000000000000000000000000000000000000000800 +CT=7013B55968A743157C4959DE2068AC57 + +I=246 +KEY=0000000000000000000000000000000000000000000000000000000000000400 +CT=758199FCB16B8ADF9B1350A02B10B735 + +I=247 +KEY=0000000000000000000000000000000000000000000000000000000000000200 +CT=29D38DC5215AA1F3CAEC044C8B472696 + +I=248 +KEY=0000000000000000000000000000000000000000000000000000000000000100 +CT=F5E1BCA4497ED2B1D871B5877C5BE3A8 + +I=249 +KEY=0000000000000000000000000000000000000000000000000000000000000080 +CT=C7388535D265CBFCEDE6423CC29F33A4 + +I=250 +KEY=0000000000000000000000000000000000000000000000000000000000000040 +CT=84992BD0280C4CDF8B1587D42AA63605 + +I=251 +KEY=0000000000000000000000000000000000000000000000000000000000000020 +CT=197E91D0F0261D975BA1F6FAA7983E51 + +I=252 +KEY=0000000000000000000000000000000000000000000000000000000000000010 +CT=644BDF2B1508CFF2E8D791DADC5D4BD6 + +I=253 +KEY=0000000000000000000000000000000000000000000000000000000000000008 +CT=D7BB8C6C07F21F648CE87A17A0589334 + +I=254 +KEY=0000000000000000000000000000000000000000000000000000000000000004 +CT=B6718CB65E557AF3C25D03770AD6B1FA + +I=255 +KEY=0000000000000000000000000000000000000000000000000000000000000002 +CT=F32E30ADD384B71F7254A15B4042E1F6 + +I=256 +KEY=0000000000000000000000000000000000000000000000000000000000000001 +CT=B5C218F26198EE763B863EDA24446609 +========== diff -urN lin.2.4.3/crypto/testing/misc.c int.2.4.3/crypto/testing/misc.c --- lin.2.4.3/crypto/testing/misc.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/misc.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,187 @@ +/* + * crypto/testing/misc.c + * + * Written by Alexander Kjeldaas 2000-10-08 + * + * Copyright 2000 by Alexander Kjeldaas. Redistribution of this file + * is permitted under the GNU Public License. + */ + +/* Misc. functions */ + +#define __KERNEL__ + +#define printk printk_dummy + +#include +#undef memcpy +#undef memset +#undef printk + +#include "libcfuncs.h" +#include "misc.h" + + +int h2int(char c) +{ + c = tolower(c); + if (c >= '0' && c <= '9') + return c - '0'; + return c - 'a' + 10; +} + +char int2h(int h) +{ + if (h >= 0 && h <= 9) + return (char)(h + '0'); + return (char)h - 10 + 'a'; +} + +int parsehex(char *h, char *b) +{ + int size = 0; + /* int i; */ + char *hex = h, *buf = b; + if ((strlen(hex) & 1) == 1) { + *buf = h2int(*hex); + buf++; hex++; + size++; + } + for (; *hex; hex+=2, buf++, size++) { + *buf = (h2int(hex[0]) << 4) + h2int(hex[1]); + } + /* net2host(b, size); */ + return size; +} + +void net2host(char *x, int size) +{ + int *y = (int *)x; + size /= sizeof(int); + for (; size >= 0; size--) + y[size] = ntohl(y[size]); +} + +asmlinkage int printk(const char * fmt, va_list args) +{ + return vprintf(fmt, args); +} + + +void dump_buffer(unsigned char *buf, int size) +{ + int i; + /* net2host(buf, size); */ + for (i = 0; i < size; i++, buf++) { + PRINTF("%c", int2h((*buf) >> 4)); + PRINTF("%c", int2h((*buf) & 0xf)); + } + + PRINTF("\n"); +} + +int make_random_buf(char *buf, int size) +{ + int i; + for (i = 0; i < size; i++) { + buf[i] = rand(); + } + return 0; +} + +int my_memcmp(char *buf1, char *buf2, int size) +{ + int i; + int *b1 = (int *)buf1; + int *b2 = (int *)buf2; + for (i = 0; i < size; i+=sizeof(int)) { + if (*b1 != *b2) { + PRINTF("Error at offset %d: buf1=%0x, buf2=%0x\n", + i, *b1, *b2); + return 1; + } + b1++;b2++; + } + return memcmp(buf1, buf2, size); +} + + +void dump_u8_buffer(u8 *buf, int number) +{ + int i; + + for(i=0;itv_sec - (tv1)->tv_sec)*1000*1000 + \ + ((tv2)->tv_usec - (tv1)->tv_usec)) + +void dump_u8_buffer(u8 *buf, int number); +void dump_u16_buffer(u16 *buf, int number); +void dump_u32_buffer(u32 *buf, int number); +void dump_buffer (unsigned char *buf, int size); +int my_memcmp(char *buf1, char *buf2, int size); +int parsehex(char *hex, char *buf); +void net2host(char *x, int size); +int make_random_buf(char *buf, int size); +int swab32_buf(char *buf, int size); +asmlinkage int printk(const char * fmt, va_list args); + +#define ALL_CIPHERS = \ +{"serpent-ecb", "serpent-cbc", "mars-ecb", "mars-cbc", \ + "rc5-ecb", "rc5-cbc", "rc6-ecb", "rc6-cbc", "dfc-ecb", "dfc-cbc", \ + "aes-ecb", "aes-cbc", "blowfish-ecb", "blowfish-cbc", \ + "twofish-ecb", "twofish-cbc", "idea-ecb", "idea-cbc", \ + "des-ecb", "des-cbc", "des-ede3-ecb", "des-ede3-cbc" \ + } + + + +int init_mars(); +int init_rc5(); +extern int init_rc6(); +extern int init_dfc(); +extern int init_rijndael(); +extern int init_blowfish(); +extern int init_twofish(); +extern int init_idea(); +extern int init_des(); +extern int init_des_ede3(); +extern int init_md5(); +extern int init_sha1(); + + +void init_ciphers_and_digests(); + + diff -urN lin.2.4.3/crypto/testing/rc6_ecb_vk.txt int.2.4.3/crypto/testing/rc6_ecb_vk.txt --- lin.2.4.3/crypto/testing/rc6_ecb_vk.txt Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/rc6_ecb_vk.txt Mon Apr 2 18:37:26 2001 @@ -0,0 +1,2333 @@ +========================= + +FILENAME: "ecb_vk.txt" + +Electronic Codebook (ECB) Mode +Variable Key Known Answer Tests + +Algorithm Name: RC6 (TM) +Principal Submitter: RSA Laboratories + +========== + +KEYSIZE=128 + +PT=00000000000000000000000000000000 + +I=1 +KEY=80000000000000000000000000000000 +CT=1ad578a02a08162850a15a1552a17ad4 + +I=2 +KEY=40000000000000000000000000000000 +CT=912e9cf1473035a8443a82495c0730d3 + +I=3 +KEY=20000000000000000000000000000000 +CT=3d3e851a80abaf221761931747473048 + +I=4 +KEY=10000000000000000000000000000000 +CT=96cfc0510819eeb7fcdf2cc7beabef77 + +I=5 +KEY=08000000000000000000000000000000 +CT=fb787268ec3c583a3685973b861aef8d + +I=6 +KEY=04000000000000000000000000000000 +CT=2ae927525c73250d954b619edac718be + +I=7 +KEY=02000000000000000000000000000000 +CT=00298d1db6c6da02e28e49c63b4a5795 + +I=8 +KEY=01000000000000000000000000000000 +CT=7e32f418910c9ac8701292b5f96346f3 + +I=9 +KEY=00800000000000000000000000000000 +CT=9fc6c21a562a049ad320eaa0d43c1998 + +I=10 +KEY=00400000000000000000000000000000 +CT=7a0bd66c361d641dfd313cbe23f69a57 + +I=11 +KEY=00200000000000000000000000000000 +CT=c2e2cad226964597a98c388b27127ea1 + +I=12 +KEY=00100000000000000000000000000000 +CT=b7f4837ac6f1f808d8ebbf1d08077fb4 + +I=13 +KEY=00080000000000000000000000000000 +CT=0495e1aeda7a9ec9acbf38fe41cb08fa + +I=14 +KEY=00040000000000000000000000000000 +CT=e001020e1d0c05be072695f3f48f07b2 + +I=15 +KEY=00020000000000000000000000000000 +CT=608ce7a12c9eec348ff674fb9f8d1972 + +I=16 +KEY=00010000000000000000000000000000 +CT=916bec60955c1a3540b4c245f4d3b94b + +I=17 +KEY=00008000000000000000000000000000 +CT=b2b91ec4efe12cd4edda71ed52b278b1 + +I=18 +KEY=00004000000000000000000000000000 +CT=0ca46cf5275313ab3d9494a5bb7d786a + +I=19 +KEY=00002000000000000000000000000000 +CT=e679b7c6f661ae52ba5199ec24d4e542 + +I=20 +KEY=00001000000000000000000000000000 +CT=043fab3a991b3fec872ac747640731cb + +I=21 +KEY=00000800000000000000000000000000 +CT=ef8c38151a67b9a51e0935bba14d9e22 + +I=22 +KEY=00000400000000000000000000000000 +CT=2d4515423cfcf372b5632c2879a71267 + +I=23 +KEY=00000200000000000000000000000000 +CT=2420a9327b9d2426c19f755bc3d8bd88 + +I=24 +KEY=00000100000000000000000000000000 +CT=2151d88643ee81d8d23b44d22e2b0d65 + +I=25 +KEY=00000080000000000000000000000000 +CT=aefa6f32e963cb2d4d89e673b503ddac + +I=26 +KEY=00000040000000000000000000000000 +CT=43dbe4d6b1ba3f05f16d73b2f80a12df + +I=27 +KEY=00000020000000000000000000000000 +CT=ed8c9b25558cad4ef9469364be97ca30 + +I=28 +KEY=00000010000000000000000000000000 +CT=bde5b1dc5053f94670599cbe6845604b + +I=29 +KEY=00000008000000000000000000000000 +CT=4529434499884be7c4e6d009f3d5353e + +I=30 +KEY=00000004000000000000000000000000 +CT=b3d4c642173189b9295912e860cf6880 + +I=31 +KEY=00000002000000000000000000000000 +CT=651f1b1629535ad03d5c296d560fde1f + +I=32 +KEY=00000001000000000000000000000000 +CT=8a380594d7396453771a1dfbe2914c8e + +I=33 +KEY=00000000800000000000000000000000 +CT=395fe0214ac536428c86737514b6237f + +I=34 +KEY=00000000400000000000000000000000 +CT=acefac47a7ab6e635ea9f85ef74deff3 + +I=35 +KEY=00000000200000000000000000000000 +CT=8c208e26e96d9dfa248010d8c1cfdb3b + +I=36 +KEY=00000000100000000000000000000000 +CT=d3ae8ae99b3a84c3721eaa57c8eb17b1 + +I=37 +KEY=00000000080000000000000000000000 +CT=40d8da37a8a6591a203f2a38ab05a08d + +I=38 +KEY=00000000040000000000000000000000 +CT=f0580d0b864e8c03638a33499b36c9a5 + +I=39 +KEY=00000000020000000000000000000000 +CT=10f19634c2d1006b0c208aa303065b0f + +I=40 +KEY=00000000010000000000000000000000 +CT=7d43298935d0af6db498542752666c99 + +I=41 +KEY=00000000008000000000000000000000 +CT=456ad1f19d18900b4f85eb64e06df643 + +I=42 +KEY=00000000004000000000000000000000 +CT=08c83a53955102f6e60c2cb0f6c02443 + +I=43 +KEY=00000000002000000000000000000000 +CT=351c1035006bc7475df60694859bb491 + +I=44 +KEY=00000000001000000000000000000000 +CT=bb47464dff62381ad4a93684d00a817f + +I=45 +KEY=00000000000800000000000000000000 +CT=514ac91b28081bd0e0cae22d766257df + +I=46 +KEY=00000000000400000000000000000000 +CT=7758c19b083a62e6f2caad2b4c3df4dc + +I=47 +KEY=00000000000200000000000000000000 +CT=46b352eac71542e417619e0360221673 + +I=48 +KEY=00000000000100000000000000000000 +CT=648d51c6f9522fe38108bbfd34015f22 + +I=49 +KEY=00000000000080000000000000000000 +CT=dcd800cc104b9c098ab4b931c7538f00 + +I=50 +KEY=00000000000040000000000000000000 +CT=e40601c1632937fa769c58be63deb056 + +I=51 +KEY=00000000000020000000000000000000 +CT=bc968175089f3864c81124a55aa445ec + +I=52 +KEY=00000000000010000000000000000000 +CT=05479acfa5a7c6bc89fe432d8d25a366 + +I=53 +KEY=00000000000008000000000000000000 +CT=8ddf91e221b4c2043c079f5f0ed63ea7 + +I=54 +KEY=00000000000004000000000000000000 +CT=66c47e3e339ffd404a61547e54ed0f7f + +I=55 +KEY=00000000000002000000000000000000 +CT=3d622a36a3375d2efff3b49363f25755 + +I=56 +KEY=00000000000001000000000000000000 +CT=c2e42ddc662f226d09908e2cfdd03d32 + +I=57 +KEY=00000000000000800000000000000000 +CT=3221bc8032e72e0de7580480a99dfd7d + +I=58 +KEY=00000000000000400000000000000000 +CT=c65a142d036e99d1a4da370d964a8a44 + +I=59 +KEY=00000000000000200000000000000000 +CT=e9c03f4840645726563582aa30464d1e + +I=60 +KEY=00000000000000100000000000000000 +CT=93c2f8237d526e910f007fa0cf0608a8 + +I=61 +KEY=00000000000000080000000000000000 +CT=6f3a45184b87581e98b7b0d873f8b315 + +I=62 +KEY=00000000000000040000000000000000 +CT=d3569bab0fdd360451e113895b39d0e2 + +I=63 +KEY=00000000000000020000000000000000 +CT=4002ff10ddb6fcb6669ae3fed696b2ec + +I=64 +KEY=00000000000000010000000000000000 +CT=b265c44f675800a3b498ffa91c440654 + +I=65 +KEY=00000000000000008000000000000000 +CT=092e77f2537ee742d627ea8628e473e9 + +I=66 +KEY=00000000000000004000000000000000 +CT=441859995f05e1c06d118cffb389c9ce + +I=67 +KEY=00000000000000002000000000000000 +CT=844480bb205810808dc1f87c2b5281e9 + +I=68 +KEY=00000000000000001000000000000000 +CT=4b2e7c3b31cfc0ca5b51ea589dffc9ac + +I=69 +KEY=00000000000000000800000000000000 +CT=d55d552ea89c267ff3b0af688cf00d78 + +I=70 +KEY=00000000000000000400000000000000 +CT=6ad19e9dd39381c8a02f3cc6f60c8048 + +I=71 +KEY=00000000000000000200000000000000 +CT=271ed37db771414743eb781b2b315841 + +I=72 +KEY=00000000000000000100000000000000 +CT=ed0a833c87fe6cdc56e021bcd3099508 + +I=73 +KEY=00000000000000000080000000000000 +CT=6dbe8feeb66cf747ffec4e6d3d2d6bb0 + +I=74 +KEY=00000000000000000040000000000000 +CT=79460469efea89fa576b526b17709d4e + +I=75 +KEY=00000000000000000020000000000000 +CT=5c3c35ec3d15cfae719221549293a6ac + +I=76 +KEY=00000000000000000010000000000000 +CT=607106e18f8c8a6e725af44a491d891a + +I=77 +KEY=00000000000000000008000000000000 +CT=1c22a5627309a238e2ce5a39be370243 + +I=78 +KEY=00000000000000000004000000000000 +CT=fb6d4f017d84e9b74c2a59204a2ea0d6 + +I=79 +KEY=00000000000000000002000000000000 +CT=b66a30712db3bd6b580678bda72cc5b5 + +I=80 +KEY=00000000000000000001000000000000 +CT=59c93b2a53be699840e29d78acf05de0 + +I=81 +KEY=00000000000000000000800000000000 +CT=ad37dfe5dcbb5a50228537bf24ed0159 + +I=82 +KEY=00000000000000000000400000000000 +CT=c9fab85dcb8da12a7c9416b267f21486 + +I=83 +KEY=00000000000000000000200000000000 +CT=ec797a0f6ebed4c257bc7fc1d7bd0100 + +I=84 +KEY=00000000000000000000100000000000 +CT=629d633d7a7c345a3a3cf66565e298e1 + +I=85 +KEY=00000000000000000000080000000000 +CT=859d400cc95f29e7131561f4d7e4dd12 + +I=86 +KEY=00000000000000000000040000000000 +CT=932cff2e8a828c61ba537e186f559e93 + +I=87 +KEY=00000000000000000000020000000000 +CT=62fa5692938cb84279c7e399ba10e08d + +I=88 +KEY=00000000000000000000010000000000 +CT=50321207b2a375b12f4630f3f1909b08 + +I=89 +KEY=00000000000000000000008000000000 +CT=63978a72d0acaf85676eaa2d1ee01f3c + +I=90 +KEY=00000000000000000000004000000000 +CT=20721cca68ae0451687d82534a360173 + +I=91 +KEY=00000000000000000000002000000000 +CT=9223a844eab1ca5d3a43ebc4c5cf01c8 + +I=92 +KEY=00000000000000000000001000000000 +CT=70e162cc61ac398cf4d9dbe62fd653ce + +I=93 +KEY=00000000000000000000000800000000 +CT=082ced7a4969fd3c8131bf9ae57754db + +I=94 +KEY=00000000000000000000000400000000 +CT=169070d4658d94c12041d14ec60a2b0a + +I=95 +KEY=00000000000000000000000200000000 +CT=960e45070b5ba767f1a3117851ecf9da + +I=96 +KEY=00000000000000000000000100000000 +CT=4aaaa999c2421953e3607ca202d4c1de + +I=97 +KEY=00000000000000000000000080000000 +CT=e4b97e5b2ba83d2038b5d08eb792f92f + +I=98 +KEY=00000000000000000000000040000000 +CT=ecbc7f9c422fc676152cc7e40391d730 + +I=99 +KEY=00000000000000000000000020000000 +CT=55ebabc43a33305fb82b39a88a737fff + +I=100 +KEY=00000000000000000000000010000000 +CT=c1bda064749b2b7a9e9378137462f800 + +I=101 +KEY=00000000000000000000000008000000 +CT=bddd0163e4ceac2c614abda9ebe15f3d + +I=102 +KEY=00000000000000000000000004000000 +CT=b767cf0e6717b409743ae41c56a2054d + +I=103 +KEY=00000000000000000000000002000000 +CT=ad897cfaed8fbbd9a3006f7eb2a7c601 + +I=104 +KEY=00000000000000000000000001000000 +CT=2929929d821d010a1a30e9cf4415f809 + +I=105 +KEY=00000000000000000000000000800000 +CT=0c861d39741060051855648b385708b5 + +I=106 +KEY=00000000000000000000000000400000 +CT=4ba018ea1aff5c0a9cf368592b08fd34 + +I=107 +KEY=00000000000000000000000000200000 +CT=4377cd44b655a0abc40e5b9d3a480ec6 + +I=108 +KEY=00000000000000000000000000100000 +CT=2f604e94c9cd1dcb730ab0af407fedbd + +I=109 +KEY=00000000000000000000000000080000 +CT=44a3514094941b7e497bcfe0d746ba48 + +I=110 +KEY=00000000000000000000000000040000 +CT=1235a968a7d12ba7042e7e63a897dbed + +I=111 +KEY=00000000000000000000000000020000 +CT=0ba061c7ad274e004b2e06d3d5fc784d + +I=112 +KEY=00000000000000000000000000010000 +CT=e0db8ce28d1c2f6b692b230a7ab0cb44 + +I=113 +KEY=00000000000000000000000000008000 +CT=ed4bbd535080655af3f4d71709b1b8d5 + +I=114 +KEY=00000000000000000000000000004000 +CT=92d183fbe0bd07a0884ebd1963a193be + +I=115 +KEY=00000000000000000000000000002000 +CT=995bb9e75386c99da3038c3c6340c838 + +I=116 +KEY=00000000000000000000000000001000 +CT=4914da6c7a8e1ab8297a9d280de576f9 + +I=117 +KEY=00000000000000000000000000000800 +CT=6415185d85078ce80f46c6e09edb8b78 + +I=118 +KEY=00000000000000000000000000000400 +CT=8b2908466f8bd3c1c3a4a5eafcc0ff92 + +I=119 +KEY=00000000000000000000000000000200 +CT=425bf2fcf5dd8b0013773f9a0dc09b0d + +I=120 +KEY=00000000000000000000000000000100 +CT=9ac35220be56e453b73cd887b299d06e + +I=121 +KEY=00000000000000000000000000000080 +CT=41900ef8223d019f1bc3e8ea68fc763c + +I=122 +KEY=00000000000000000000000000000040 +CT=9d294a574144109a9c6de8e90ee517b6 + +I=123 +KEY=00000000000000000000000000000020 +CT=4146d6bb7ae455d93eaf43753c7ae693 + +I=124 +KEY=00000000000000000000000000000010 +CT=4155b7d12fd12f96fd39c576fdd41422 + +I=125 +KEY=00000000000000000000000000000008 +CT=1af1e634b06211668ce2410d5edca968 + +I=126 +KEY=00000000000000000000000000000004 +CT=815739510622bfe08eee06b772368524 + +I=127 +KEY=00000000000000000000000000000002 +CT=e2f7d8411181a21b02c1466e750056c2 + +I=128 +KEY=00000000000000000000000000000001 +CT=13095792d8b1d771378839c912ca3c41 + +========== + +KEYSIZE=192 + +PT=00000000000000000000000000000000 + +I=1 +KEY=800000000000000000000000000000000000000000000000 +CT=8301730c7d5fefc416beec1104c51e36 + +I=2 +KEY=400000000000000000000000000000000000000000000000 +CT=f7ef83bdd4c3d5b30e805c351db87200 + +I=3 +KEY=200000000000000000000000000000000000000000000000 +CT=a236eb8595fdf9239c658d58342ef566 + +I=4 +KEY=100000000000000000000000000000000000000000000000 +CT=236397eb9eeda5ea8bf4a42864a5a39f + +I=5 +KEY=080000000000000000000000000000000000000000000000 +CT=21c3dd416d64f6055c8c3977eefb4652 + +I=6 +KEY=040000000000000000000000000000000000000000000000 +CT=59128f63bd9d834c3eeca5a5299417d1 + +I=7 +KEY=020000000000000000000000000000000000000000000000 +CT=0f95fa4c48de95391b45a460b92b22bf + +I=8 +KEY=010000000000000000000000000000000000000000000000 +CT=5073fabd5fa03d153108b9a5f2128c78 + +I=9 +KEY=008000000000000000000000000000000000000000000000 +CT=b83872427919126f2c976d45872b7596 + +I=10 +KEY=004000000000000000000000000000000000000000000000 +CT=73f8e6c4181758afa29945e970c8f854 + +I=11 +KEY=002000000000000000000000000000000000000000000000 +CT=b72dc39b9a72effa047e3657b1f02b1b + +I=12 +KEY=001000000000000000000000000000000000000000000000 +CT=081f1c50bf964ccc01949363a1a1c76c + +I=13 +KEY=000800000000000000000000000000000000000000000000 +CT=d4a2ab8b904be542386cc2342ac354d6 + +I=14 +KEY=000400000000000000000000000000000000000000000000 +CT=bc94c45b53bb5281bff16f7bc7ccd26e + +I=15 +KEY=000200000000000000000000000000000000000000000000 +CT=7d976240134d43279ab809a3ec1bab8e + +I=16 +KEY=000100000000000000000000000000000000000000000000 +CT=be18d342080322dbbcedbb83c7f11ca5 + +I=17 +KEY=000080000000000000000000000000000000000000000000 +CT=d1359d29060e0003c78066a900c90c00 + +I=18 +KEY=000040000000000000000000000000000000000000000000 +CT=fd0a7e670b7e9b57c913d38e4649715e + +I=19 +KEY=000020000000000000000000000000000000000000000000 +CT=c9dfb5b1cb3e079cfc027e67da61ec2a + +I=20 +KEY=000010000000000000000000000000000000000000000000 +CT=10fdd69900fbc470499edf0aff655430 + +I=21 +KEY=000008000000000000000000000000000000000000000000 +CT=565721a361f5f0eb44366dec1d6841be + +I=22 +KEY=000004000000000000000000000000000000000000000000 +CT=07ad173e39a769d345277f4cfd16bba8 + +I=23 +KEY=000002000000000000000000000000000000000000000000 +CT=8e89b6b70a10d1866ed4d139a0e6565c + +I=24 +KEY=000001000000000000000000000000000000000000000000 +CT=88a431dd4cbbd94778ae53a36ee246de + +I=25 +KEY=000000800000000000000000000000000000000000000000 +CT=f4c8e31b64506e9bde6bb682dbcef50a + +I=26 +KEY=000000400000000000000000000000000000000000000000 +CT=5b0e256e4eab25aec08cd2ce5547334d + +I=27 +KEY=000000200000000000000000000000000000000000000000 +CT=edbaa578c13d7d215057ead4f03b9e1c + +I=28 +KEY=000000100000000000000000000000000000000000000000 +CT=7ea37db8eb1b362e370a43df1adb2f0a + +I=29 +KEY=000000080000000000000000000000000000000000000000 +CT=8b7c67ae8f749c4efb7418788d369dec + +I=30 +KEY=000000040000000000000000000000000000000000000000 +CT=34d3a7e87a4b1b3fac60672a3d82f40d + +I=31 +KEY=000000020000000000000000000000000000000000000000 +CT=4fe628152a1d46cf6da78d5f17255877 + +I=32 +KEY=000000010000000000000000000000000000000000000000 +CT=3460a571d035b6da52aa8e59702b79c0 + +I=33 +KEY=000000008000000000000000000000000000000000000000 +CT=ca2375e2e96ab28c7fc3e61b6561b07c + +I=34 +KEY=000000004000000000000000000000000000000000000000 +CT=7e33319a69017428ddbd979d3f6982c6 + +I=35 +KEY=000000002000000000000000000000000000000000000000 +CT=49da8b8ad80a6bba1003ff6b8d06e3d8 + +I=36 +KEY=000000001000000000000000000000000000000000000000 +CT=cce4c841b39187943dcca5eb8bbf1221 + +I=37 +KEY=000000000800000000000000000000000000000000000000 +CT=3b42fa9129bf36f87e445589460a19bd + +I=38 +KEY=000000000400000000000000000000000000000000000000 +CT=3e397a22c64a8c09b5b59a9d397b0a96 + +I=39 +KEY=000000000200000000000000000000000000000000000000 +CT=159ab9c871fb3eb373a94721e9f0743a + +I=40 +KEY=000000000100000000000000000000000000000000000000 +CT=9c2deceefedf2475c26effea3a0e2920 + +I=41 +KEY=000000000080000000000000000000000000000000000000 +CT=0fcc4399113e6bf62a23f657bef97224 + +I=42 +KEY=000000000040000000000000000000000000000000000000 +CT=2fca4167b034d9edac4e12828b911600 + +I=43 +KEY=000000000020000000000000000000000000000000000000 +CT=3f9434872c4e49eb8718edb8896cff2e + +I=44 +KEY=000000000010000000000000000000000000000000000000 +CT=8168025815d16028078007c9e1370331 + +I=45 +KEY=000000000008000000000000000000000000000000000000 +CT=f0fbf790b49553ec3963805cc2f6aa7e + +I=46 +KEY=000000000004000000000000000000000000000000000000 +CT=951c45d26a548a9a6152ccbc00d3c6fa + +I=47 +KEY=000000000002000000000000000000000000000000000000 +CT=845dcc97b1f8cd3254d2b29a59c7ae41 + +I=48 +KEY=000000000001000000000000000000000000000000000000 +CT=6694a168d387e4fb3291a376b938136d + +I=49 +KEY=000000000000800000000000000000000000000000000000 +CT=9569359a00659b9645565857398c982f + +I=50 +KEY=000000000000400000000000000000000000000000000000 +CT=417c97d7f56216ffebe64a73f8d81168 + +I=51 +KEY=000000000000200000000000000000000000000000000000 +CT=8c46288b3314b9e1bc91e3c901c784a8 + +I=52 +KEY=000000000000100000000000000000000000000000000000 +CT=8eb78926977246f186274d88a4b0e6b3 + +I=53 +KEY=000000000000080000000000000000000000000000000000 +CT=51e819059ab0325a2df7f8cf49a54353 + +I=54 +KEY=000000000000040000000000000000000000000000000000 +CT=56a59894fc1972b03d66d6c43688138b + +I=55 +KEY=000000000000020000000000000000000000000000000000 +CT=cb772637b59ad2330acc8cc2fa7a338b + +I=56 +KEY=000000000000010000000000000000000000000000000000 +CT=1e3759e5bbe19ea0f66fbb0702f07440 + +I=57 +KEY=000000000000008000000000000000000000000000000000 +CT=2112cfd246447d95f1a6bff65a044121 + +I=58 +KEY=000000000000004000000000000000000000000000000000 +CT=8a7e580bac4406b297e12b472c2748e3 + +I=59 +KEY=000000000000002000000000000000000000000000000000 +CT=349abe7c34357c7c719bd48ab62df95c + +I=60 +KEY=000000000000001000000000000000000000000000000000 +CT=5edb9089b865dac899854dace9dbbdbc + +I=61 +KEY=000000000000000800000000000000000000000000000000 +CT=c82372837c0b459699779683785ce09c + +I=62 +KEY=000000000000000400000000000000000000000000000000 +CT=b26532f7c0fdff76bfadd7178e7a2a7a + +I=63 +KEY=000000000000000200000000000000000000000000000000 +CT=965f80c599bf6aa85ca2199c785edaf1 + +I=64 +KEY=000000000000000100000000000000000000000000000000 +CT=8434dfe0c8717514fb0f8a4ff46930b6 + +I=65 +KEY=000000000000000080000000000000000000000000000000 +CT=10d701937e2944c7b48baa32da64c6a5 + +I=66 +KEY=000000000000000040000000000000000000000000000000 +CT=9a401e466c3686609b7b92fc6c57ea3b + +I=67 +KEY=000000000000000020000000000000000000000000000000 +CT=e3442053c50265aebefd327633e449b1 + +I=68 +KEY=000000000000000010000000000000000000000000000000 +CT=7df5ec480defa928687a35116989a7e2 + +I=69 +KEY=000000000000000008000000000000000000000000000000 +CT=eb2d38038a867146e3999d3e4dace2bd + +I=70 +KEY=000000000000000004000000000000000000000000000000 +CT=ae420a68558a2a50085331d8c46d7685 + +I=71 +KEY=000000000000000002000000000000000000000000000000 +CT=049b78384de81bb815c48cc565dc1029 + +I=72 +KEY=000000000000000001000000000000000000000000000000 +CT=38edcb5d37e043621f1eb80c78e40657 + +I=73 +KEY=000000000000000000800000000000000000000000000000 +CT=928c462d2ae8b7b45c252d0cae80b34c + +I=74 +KEY=000000000000000000400000000000000000000000000000 +CT=b3ad5d661d6dacfd57c214fdb9384491 + +I=75 +KEY=000000000000000000200000000000000000000000000000 +CT=9785657218402c1f3d1a40e73b015359 + +I=76 +KEY=000000000000000000100000000000000000000000000000 +CT=302355f21d129456a3ec58cd4c74d334 + +I=77 +KEY=000000000000000000080000000000000000000000000000 +CT=7322a935e1f65e2f341f778d0a55dac0 + +I=78 +KEY=000000000000000000040000000000000000000000000000 +CT=7eeef0009743f18e1e08f5cb02cfa104 + +I=79 +KEY=000000000000000000020000000000000000000000000000 +CT=82fa95b00ba5c8d71cb372895e91f7ad + +I=80 +KEY=000000000000000000010000000000000000000000000000 +CT=44e308a9bae6315936931c0d6f3472a4 + +I=81 +KEY=000000000000000000008000000000000000000000000000 +CT=a0f7760cb5f12b2f7f7451688dcc6db3 + +I=82 +KEY=000000000000000000004000000000000000000000000000 +CT=249cbf1a9027a9d4a049dcc61c100631 + +I=83 +KEY=000000000000000000002000000000000000000000000000 +CT=ae5191679db49836ebd11781e1a9e809 + +I=84 +KEY=000000000000000000001000000000000000000000000000 +CT=6f0f72e56952895f7425a34eb97d0d41 + +I=85 +KEY=000000000000000000000800000000000000000000000000 +CT=e4c8937ea026250290e85a2aa4b3a338 + +I=86 +KEY=000000000000000000000400000000000000000000000000 +CT=0d1b7815f62d8c6db79e9755eb5cc047 + +I=87 +KEY=000000000000000000000200000000000000000000000000 +CT=3b8da219500f670d2d32c753f613e646 + +I=88 +KEY=000000000000000000000100000000000000000000000000 +CT=dc16f91f486975c2762aaef8e4c66543 + +I=89 +KEY=000000000000000000000080000000000000000000000000 +CT=7cc222b3c5866ac0f27a60c9d9713981 + +I=90 +KEY=000000000000000000000040000000000000000000000000 +CT=b7f625fc185b3acef820af59570370fd + +I=91 +KEY=000000000000000000000020000000000000000000000000 +CT=8aa59ea7476afe267d7745a2a5e1d0cb + +I=92 +KEY=000000000000000000000010000000000000000000000000 +CT=ddb9e4aa397029e10ed5f1984513280b + +I=93 +KEY=000000000000000000000008000000000000000000000000 +CT=c92b81f3061a4abc6c35d1b0af2ba410 + +I=94 +KEY=000000000000000000000004000000000000000000000000 +CT=05f510ba96377001a23093980c02fbcd + +I=95 +KEY=000000000000000000000002000000000000000000000000 +CT=a22d14ebc78b338735ca0aad155b0114 + +I=96 +KEY=000000000000000000000001000000000000000000000000 +CT=c562318b01d5235ccd4dc3d3a8b10da0 + +I=97 +KEY=000000000000000000000000800000000000000000000000 +CT=fa248caa2f7c4b029054a31917be9b47 + +I=98 +KEY=000000000000000000000000400000000000000000000000 +CT=fcc4e2e3c6e5db8decbf2493e3a52b9a + +I=99 +KEY=000000000000000000000000200000000000000000000000 +CT=c5d23718f33adc9f8b3b35263e47248a + +I=100 +KEY=000000000000000000000000100000000000000000000000 +CT=773e59c9ca8efd081e1cfd4f3df4bc16 + +I=101 +KEY=000000000000000000000000080000000000000000000000 +CT=9a5e5ab516ecea600952d25684dff5e9 + +I=102 +KEY=000000000000000000000000040000000000000000000000 +CT=4eb9b9cc17e48f68423c884d64091022 + +I=103 +KEY=000000000000000000000000020000000000000000000000 +CT=0ccd75beca8406ebf53cb0abb1b46b23 + +I=104 +KEY=000000000000000000000000010000000000000000000000 +CT=0242108dabd2ed9886e8abd70aa97b29 + +I=105 +KEY=000000000000000000000000008000000000000000000000 +CT=c52a6eb2958c995465c4f870f1a8269e + +I=106 +KEY=000000000000000000000000004000000000000000000000 +CT=5fd2c7f3c81b013b96ec3acbb0688175 + +I=107 +KEY=000000000000000000000000002000000000000000000000 +CT=1e63a0b10b0293a8572fd7749acb9a53 + +I=108 +KEY=000000000000000000000000001000000000000000000000 +CT=9e1d466fa752c13af4296cffb8566db2 + +I=109 +KEY=000000000000000000000000000800000000000000000000 +CT=ba1a69d7ad2869734a4954553d4ef249 + +I=110 +KEY=000000000000000000000000000400000000000000000000 +CT=ec2e7d615474b0b08d47afcbe4fd8402 + +I=111 +KEY=000000000000000000000000000200000000000000000000 +CT=5c295aa2183b5fb9498094db774244d1 + +I=112 +KEY=000000000000000000000000000100000000000000000000 +CT=1c5a17d1be0d9edcf339db3d2631f236 + +I=113 +KEY=000000000000000000000000000080000000000000000000 +CT=cf6e9758b39149e3e29fb66cd58d0976 + +I=114 +KEY=000000000000000000000000000040000000000000000000 +CT=4f3ff2cab95f678d85207691bfdab811 + +I=115 +KEY=000000000000000000000000000020000000000000000000 +CT=463f1fcdf4a918300a93d7bed72f788b + +I=116 +KEY=000000000000000000000000000010000000000000000000 +CT=ca5c88802cf0520c6521b106f4a58977 + +I=117 +KEY=000000000000000000000000000008000000000000000000 +CT=95c83d16f101b16e82d9df9108a6805a + +I=118 +KEY=000000000000000000000000000004000000000000000000 +CT=f98e0be43f35a4cd52f93fd0877c1638 + +I=119 +KEY=000000000000000000000000000002000000000000000000 +CT=3b0d41f3a12de6bdacfca225f1344d77 + +I=120 +KEY=000000000000000000000000000001000000000000000000 +CT=bcb6197992a90a62497b53ec8e7e5857 + +I=121 +KEY=000000000000000000000000000000800000000000000000 +CT=9ca86b881701310c33f6cb2911ed777e + +I=122 +KEY=000000000000000000000000000000400000000000000000 +CT=ddf4ebc89b16643e7b4f0b43ab3fc443 + +I=123 +KEY=000000000000000000000000000000200000000000000000 +CT=650aa74cdf7c5e92720e02a87eca8fb2 + +I=124 +KEY=000000000000000000000000000000100000000000000000 +CT=f44e947b2a18f15189884e55eac372cd + +I=125 +KEY=000000000000000000000000000000080000000000000000 +CT=a4cc79ab8f6aba941d400b45c32da248 + +I=126 +KEY=000000000000000000000000000000040000000000000000 +CT=3c49ee1d3e4d8fd1e5ce9c793511f2e7 + +I=127 +KEY=000000000000000000000000000000020000000000000000 +CT=49199a91a32424357890f5c8e08e168c + +I=128 +KEY=000000000000000000000000000000010000000000000000 +CT=438ebcc76304c4231dcdbdf85a876a85 + +I=129 +KEY=000000000000000000000000000000008000000000000000 +CT=dd04c176440bbc6686c90aee775bd368 + +I=130 +KEY=000000000000000000000000000000004000000000000000 +CT=1dbae21df9d10630d8e9ba704aa3a6e2 + +I=131 +KEY=000000000000000000000000000000002000000000000000 +CT=f46b5df361ff1a58ad233a2884e9b73b + +I=132 +KEY=000000000000000000000000000000001000000000000000 +CT=dbd49c75b6cca6ccef0423ff3941922a + +I=133 +KEY=000000000000000000000000000000000800000000000000 +CT=2c62774d20d574a487057a24280ebbc9 + +I=134 +KEY=000000000000000000000000000000000400000000000000 +CT=a6e24fff68df51b5613692d4098f7e22 + +I=135 +KEY=000000000000000000000000000000000200000000000000 +CT=a961b427d5fcd129ee29830dbd2952dd + +I=136 +KEY=000000000000000000000000000000000100000000000000 +CT=7f637c136f8a57358dd5229b5e3bc38c + +I=137 +KEY=000000000000000000000000000000000080000000000000 +CT=6fc5a39b35d2ef01b808e20c05db9dde + +I=138 +KEY=000000000000000000000000000000000040000000000000 +CT=95e085e82a0883c8f6c1c83d6f4df270 + +I=139 +KEY=000000000000000000000000000000000020000000000000 +CT=bdee30731d4cd3593e46d9a8222485cc + +I=140 +KEY=000000000000000000000000000000000010000000000000 +CT=508b5bb4ecce303014d5a9abb47dd30d + +I=141 +KEY=000000000000000000000000000000000008000000000000 +CT=047832614b07aeabc28a39d5e72007c9 + +I=142 +KEY=000000000000000000000000000000000004000000000000 +CT=c1d4b662ee239a6db9262b23c561b677 + +I=143 +KEY=000000000000000000000000000000000002000000000000 +CT=e567714df47d43f1505d318c8d553062 + +I=144 +KEY=000000000000000000000000000000000001000000000000 +CT=cdf70f29afd13ec6820d2c126d053dc4 + +I=145 +KEY=000000000000000000000000000000000000800000000000 +CT=182f2fd0adc68d8dc72b08ac17e642c1 + +I=146 +KEY=000000000000000000000000000000000000400000000000 +CT=5daa43afbcd59026c0c410072a263673 + +I=147 +KEY=000000000000000000000000000000000000200000000000 +CT=e0c6dd7a8971a7d21afae153f115d658 + +I=148 +KEY=000000000000000000000000000000000000100000000000 +CT=4ed2daa970922690d8cdf6cdfda2e8d3 + +I=149 +KEY=000000000000000000000000000000000000080000000000 +CT=c1f929b679e007b1ddbbe896ce91c8c5 + +I=150 +KEY=000000000000000000000000000000000000040000000000 +CT=2323f5569ba740e14e05e0fb0914ce44 + +I=151 +KEY=000000000000000000000000000000000000020000000000 +CT=875afce0522e00712ab29e0e77ba57d2 + +I=152 +KEY=000000000000000000000000000000000000010000000000 +CT=a6185ecbdefeb900335bab38d95d7583 + +I=153 +KEY=000000000000000000000000000000000000008000000000 +CT=1331b89b377ea2a88a181907300bc50c + +I=154 +KEY=000000000000000000000000000000000000004000000000 +CT=fc9d177c5b5d072e041d6c2f9ee6b536 + +I=155 +KEY=000000000000000000000000000000000000002000000000 +CT=5bce1ea4fd0cc1ede325dceb55790565 + +I=156 +KEY=000000000000000000000000000000000000001000000000 +CT=937fe02d20fcb72f0f57201012b88ba4 + +I=157 +KEY=000000000000000000000000000000000000000800000000 +CT=5280e7768e573dc74db90abdc10422fe + +I=158 +KEY=000000000000000000000000000000000000000400000000 +CT=0995e2d8e83c853c58ecf916e8067c3a + +I=159 +KEY=000000000000000000000000000000000000000200000000 +CT=98df44d404b5bd54ca5d55d08e7f1b12 + +I=160 +KEY=000000000000000000000000000000000000000100000000 +CT=9fd5f1165cd60fa5229cf03080428664 + +I=161 +KEY=000000000000000000000000000000000000000080000000 +CT=b4ae95212e3e8ffd6b27d4f0cc079cca + +I=162 +KEY=000000000000000000000000000000000000000040000000 +CT=878bd051874ab0bac12ea94c60cc2671 + +I=163 +KEY=000000000000000000000000000000000000000020000000 +CT=3b0f2ef2a0849425063f49e65df4d3ab + +I=164 +KEY=000000000000000000000000000000000000000010000000 +CT=07d4297668485ebbf0f9266c203407e2 + +I=165 +KEY=000000000000000000000000000000000000000008000000 +CT=c2ecfb79c073bd453bdd2323c77ff80d + +I=166 +KEY=000000000000000000000000000000000000000004000000 +CT=5173b04fc7c211ca17161164b79d0ae7 + +I=167 +KEY=000000000000000000000000000000000000000002000000 +CT=5135a445a721783aacd06930d39f72c4 + +I=168 +KEY=000000000000000000000000000000000000000001000000 +CT=a511e849b1b75dc94b1d73d957b53d78 + +I=169 +KEY=000000000000000000000000000000000000000000800000 +CT=42312b67f192d72b73689c712d60eab7 + +I=170 +KEY=000000000000000000000000000000000000000000400000 +CT=30c89a160855bc3f339a170b715dd482 + +I=171 +KEY=000000000000000000000000000000000000000000200000 +CT=8dc19a7a97319a3309b98797a59954fa + +I=172 +KEY=000000000000000000000000000000000000000000100000 +CT=d0aa5a8b9dff98e18281e5ff20cca3de + +I=173 +KEY=000000000000000000000000000000000000000000080000 +CT=afa70ef4b45ea22e90108b834019120a + +I=174 +KEY=000000000000000000000000000000000000000000040000 +CT=2801c6a5c0547cb988a2137a559d12b0 + +I=175 +KEY=000000000000000000000000000000000000000000020000 +CT=d791f5709d4afe0642955f1b072f144e + +I=176 +KEY=000000000000000000000000000000000000000000010000 +CT=35bb50e6d59a693709de9b88cc8581f6 + +I=177 +KEY=000000000000000000000000000000000000000000008000 +CT=9b58cc95279539c1af0bbc274a62f5c8 + +I=178 +KEY=000000000000000000000000000000000000000000004000 +CT=f51803ff4ea1b0f0aff1c68c5c98cb3a + +I=179 +KEY=000000000000000000000000000000000000000000002000 +CT=975b5309f1d3ace9ba08b3d2d3fcb43e + +I=180 +KEY=000000000000000000000000000000000000000000001000 +CT=d53cd9381ea85b0c106c22da611f7336 + +I=181 +KEY=000000000000000000000000000000000000000000000800 +CT=393270b47546f1bfe35690accac0febd + +I=182 +KEY=000000000000000000000000000000000000000000000400 +CT=53e21284948996fc03ed9bcc34b45b61 + +I=183 +KEY=000000000000000000000000000000000000000000000200 +CT=ad9ca2740670da740c75703a8859382b + +I=184 +KEY=000000000000000000000000000000000000000000000100 +CT=ac9c2960e3061e56d8b9a1cdd3eed010 + +I=185 +KEY=000000000000000000000000000000000000000000000080 +CT=e5f68b122d15823f131dea0468977d70 + +I=186 +KEY=000000000000000000000000000000000000000000000040 +CT=7eb7c6460fe9885bc96afd4d4b65e90e + +I=187 +KEY=000000000000000000000000000000000000000000000020 +CT=409147483adc22592ca41224d35bb323 + +I=188 +KEY=000000000000000000000000000000000000000000000010 +CT=ab61745316651f61f4e2cc1dfbf8135c + +I=189 +KEY=000000000000000000000000000000000000000000000008 +CT=88977ead91ecf9c83f33ebe41fb7410c + +I=190 +KEY=000000000000000000000000000000000000000000000004 +CT=9dc923136a1882d73cb412c986103481 + +I=191 +KEY=000000000000000000000000000000000000000000000002 +CT=9914219ed77b8fa772b4b8c53f9ad2fc + +I=192 +KEY=000000000000000000000000000000000000000000000001 +CT=b9a0fa2324625650a2052d691e7de9c3 + +========== + +KEYSIZE=256 + +PT=00000000000000000000000000000000 + +I=1 +KEY=8000000000000000000000000000000000000000000000000000000000000000 +CT=5172978a58543de597060983fd799f1b + +I=2 +KEY=4000000000000000000000000000000000000000000000000000000000000000 +CT=0f86aece7ace09a8eac0345c935be91a + +I=3 +KEY=2000000000000000000000000000000000000000000000000000000000000000 +CT=8c8d6acdb23ae4b5bee4e2c15273286f + +I=4 +KEY=1000000000000000000000000000000000000000000000000000000000000000 +CT=11395d4bfe4c8258979ee2bf2d24dff4 + +I=5 +KEY=0800000000000000000000000000000000000000000000000000000000000000 +CT=d50183337fd8b3faef06c78b2ecfc40f + +I=6 +KEY=0400000000000000000000000000000000000000000000000000000000000000 +CT=f3969970b4e37d9ffd9bd886200d7c0f + +I=7 +KEY=0200000000000000000000000000000000000000000000000000000000000000 +CT=ff101a14ccb71863e0b51e8583d22760 + +I=8 +KEY=0100000000000000000000000000000000000000000000000000000000000000 +CT=0cacb5ab8a51226134656220dbf23228 + +I=9 +KEY=0080000000000000000000000000000000000000000000000000000000000000 +CT=bf75c54f53a3f374dc549be280f6c6e0 + +I=10 +KEY=0040000000000000000000000000000000000000000000000000000000000000 +CT=1dc755ed6128dc50826e65632c7672d6 + +I=11 +KEY=0020000000000000000000000000000000000000000000000000000000000000 +CT=d7a46c3a378db6a9c041d7db1835de3f + +I=12 +KEY=0010000000000000000000000000000000000000000000000000000000000000 +CT=175fdb12efb7e7d950777fe12baac953 + +I=13 +KEY=0008000000000000000000000000000000000000000000000000000000000000 +CT=1a5c489cb6e0608eadaf3dbfa8b5fd1b + +I=14 +KEY=0004000000000000000000000000000000000000000000000000000000000000 +CT=7fd567fb07007a65ca8d98d4bf66f7f1 + +I=15 +KEY=0002000000000000000000000000000000000000000000000000000000000000 +CT=3256e4481641ed28938ad6471414cd04 + +I=16 +KEY=0001000000000000000000000000000000000000000000000000000000000000 +CT=a2ad960b437dcd0669681bbbc30f0cf1 + +I=17 +KEY=0000800000000000000000000000000000000000000000000000000000000000 +CT=fb04b658fa923ea9cd5fb98be54989de + +I=18 +KEY=0000400000000000000000000000000000000000000000000000000000000000 +CT=f3f43741881655cf074e36bd655f420b + +I=19 +KEY=0000200000000000000000000000000000000000000000000000000000000000 +CT=637dcf9d891ead8d85a842be0dc8261f + +I=20 +KEY=0000100000000000000000000000000000000000000000000000000000000000 +CT=e663749a2786e3ba3833348a9ce5e7f0 + +I=21 +KEY=0000080000000000000000000000000000000000000000000000000000000000 +CT=76f0f7c439e25c54a9bc7aea05640882 + +I=22 +KEY=0000040000000000000000000000000000000000000000000000000000000000 +CT=2cde682fc40895f1e2464739fad230dd + +I=23 +KEY=0000020000000000000000000000000000000000000000000000000000000000 +CT=3242fe919adfdce04f163ebe772ad51d + +I=24 +KEY=0000010000000000000000000000000000000000000000000000000000000000 +CT=ce05f79a80b2947b13bd22ee37fb3f79 + +I=25 +KEY=0000008000000000000000000000000000000000000000000000000000000000 +CT=5345bde33281a0cb4a899a4f18c57563 + +I=26 +KEY=0000004000000000000000000000000000000000000000000000000000000000 +CT=2e971691ddfd33d36738c08a517b0b44 + +I=27 +KEY=0000002000000000000000000000000000000000000000000000000000000000 +CT=ee144813e2194b18f1593c44932f170f + +I=28 +KEY=0000001000000000000000000000000000000000000000000000000000000000 +CT=f626c435e30aba4fa6f6dca30cc08833 + +I=29 +KEY=0000000800000000000000000000000000000000000000000000000000000000 +CT=8ad30f69bd7446793c36676755d05f57 + +I=30 +KEY=0000000400000000000000000000000000000000000000000000000000000000 +CT=56851cb7277cbe4ae9aff86e5bd49f90 + +I=31 +KEY=0000000200000000000000000000000000000000000000000000000000000000 +CT=ca864ac764d6b9b9141a08146cfa7f56 + +I=32 +KEY=0000000100000000000000000000000000000000000000000000000000000000 +CT=484518d9a3c6cf7b7b92393dbbf78e42 + +I=33 +KEY=0000000080000000000000000000000000000000000000000000000000000000 +CT=093f44542b0e41e300c11ae77a48c6c4 + +I=34 +KEY=0000000040000000000000000000000000000000000000000000000000000000 +CT=6d9856adc56605f70ef069d639c9d977 + +I=35 +KEY=0000000020000000000000000000000000000000000000000000000000000000 +CT=3ffb2ff7c5457744cabdfb89c0bba7e8 + +I=36 +KEY=0000000010000000000000000000000000000000000000000000000000000000 +CT=6d8254191931be754d64f70fe3e226c7 + +I=37 +KEY=0000000008000000000000000000000000000000000000000000000000000000 +CT=23f3cc55c460ee949a9934c7e5c06ccb + +I=38 +KEY=0000000004000000000000000000000000000000000000000000000000000000 +CT=8739da7f4a9d821eaa7a349e25741daa + +I=39 +KEY=0000000002000000000000000000000000000000000000000000000000000000 +CT=73e724c08890501275a0559621526948 + +I=40 +KEY=0000000001000000000000000000000000000000000000000000000000000000 +CT=4cc6569d4f6207ddb03b232bfa8aa481 + +I=41 +KEY=0000000000800000000000000000000000000000000000000000000000000000 +CT=52a6d921aef99205822b361d8d9dd998 + +I=42 +KEY=0000000000400000000000000000000000000000000000000000000000000000 +CT=970e1899aeeeb7ccd26f854ca25214e2 + +I=43 +KEY=0000000000200000000000000000000000000000000000000000000000000000 +CT=d1defc8ac21c95160cf71612aac55a8c + +I=44 +KEY=0000000000100000000000000000000000000000000000000000000000000000 +CT=d8c2a3ad65f16024265714c21b8a70c5 + +I=45 +KEY=0000000000080000000000000000000000000000000000000000000000000000 +CT=55de20482fae35a03f0d57b7546eb980 + +I=46 +KEY=0000000000040000000000000000000000000000000000000000000000000000 +CT=81bca41f11d12ee26326e042e74961af + +I=47 +KEY=0000000000020000000000000000000000000000000000000000000000000000 +CT=6d8d5c30a508436401396224d4e417b5 + +I=48 +KEY=0000000000010000000000000000000000000000000000000000000000000000 +CT=0fa1ecab0b3c598c51372a5aaf6e1315 + +I=49 +KEY=0000000000008000000000000000000000000000000000000000000000000000 +CT=945bf2690a9ce9ed8009004039e1e743 + +I=50 +KEY=0000000000004000000000000000000000000000000000000000000000000000 +CT=73618ad5fd3a9740cb92c3f870c772b9 + +I=51 +KEY=0000000000002000000000000000000000000000000000000000000000000000 +CT=a7bab4d0765d66f06fcb85a42d4cf0ee + +I=52 +KEY=0000000000001000000000000000000000000000000000000000000000000000 +CT=2a659ea8bf9ea163976c33a0b7463a56 + +I=53 +KEY=0000000000000800000000000000000000000000000000000000000000000000 +CT=4d9d5cc19bf1b2d48ef2cf4cd313d3e3 + +I=54 +KEY=0000000000000400000000000000000000000000000000000000000000000000 +CT=0d7a26f850bdd2a633689367901bc2a4 + +I=55 +KEY=0000000000000200000000000000000000000000000000000000000000000000 +CT=1a1235352ec6cd1a7a1913e77ef7ce4d + +I=56 +KEY=0000000000000100000000000000000000000000000000000000000000000000 +CT=5fdc541376baf15d5ac011b9c0b74e75 + +I=57 +KEY=0000000000000080000000000000000000000000000000000000000000000000 +CT=cb8dcb7ad04598e8337747e02a8df16e + +I=58 +KEY=0000000000000040000000000000000000000000000000000000000000000000 +CT=2855a6eea8b20b8b25edee37a7d7e976 + +I=59 +KEY=0000000000000020000000000000000000000000000000000000000000000000 +CT=58b5cd00d833233e718dbeaabcc48e8f + +I=60 +KEY=0000000000000010000000000000000000000000000000000000000000000000 +CT=6df58a11f96b67c330ed10fffb1e6d74 + +I=61 +KEY=0000000000000008000000000000000000000000000000000000000000000000 +CT=8fd74aab8d136dcf1b398d1174aa343b + +I=62 +KEY=0000000000000004000000000000000000000000000000000000000000000000 +CT=a81e2f57e80761e361db1008ac1abdd8 + +I=63 +KEY=0000000000000002000000000000000000000000000000000000000000000000 +CT=bdd939e7a93f6fecc762e2e3321dfec7 + +I=64 +KEY=0000000000000001000000000000000000000000000000000000000000000000 +CT=c281060452693278b48ad9076911ec39 + +I=65 +KEY=0000000000000000800000000000000000000000000000000000000000000000 +CT=c06c159eeaff3cb4b509db604060f537 + +I=66 +KEY=0000000000000000400000000000000000000000000000000000000000000000 +CT=757ced2216a9912b5fbfa1e623077e5d + +I=67 +KEY=0000000000000000200000000000000000000000000000000000000000000000 +CT=9606edc198f44f955f510fa525e9c80c + +I=68 +KEY=0000000000000000100000000000000000000000000000000000000000000000 +CT=ade8d3fae7a4651855e053f42fff7905 + +I=69 +KEY=0000000000000000080000000000000000000000000000000000000000000000 +CT=398ba679b6c0a63479f0c6fe25614f01 + +I=70 +KEY=0000000000000000040000000000000000000000000000000000000000000000 +CT=fb77eca9def62902240e4bf3806f3a64 + +I=71 +KEY=0000000000000000020000000000000000000000000000000000000000000000 +CT=b4313d0a9d34b21f69021a5458680579 + +I=72 +KEY=0000000000000000010000000000000000000000000000000000000000000000 +CT=bdc7c4ed3b989bf8288e8b4acde3feea + +I=73 +KEY=0000000000000000008000000000000000000000000000000000000000000000 +CT=430a2daffa822532fd4843df9cbaf824 + +I=74 +KEY=0000000000000000004000000000000000000000000000000000000000000000 +CT=16a2deba266577150b6dc34995902c99 + +I=75 +KEY=0000000000000000002000000000000000000000000000000000000000000000 +CT=5902382c7675af5c52a6adf349454276 + +I=76 +KEY=0000000000000000001000000000000000000000000000000000000000000000 +CT=0d912aa37cfb56223c6ed9e04b3d563f + +I=77 +KEY=0000000000000000000800000000000000000000000000000000000000000000 +CT=1fd8880be6a6e51c0c0e9c2866127f7d + +I=78 +KEY=0000000000000000000400000000000000000000000000000000000000000000 +CT=bc4079ee5cdb86bdd8fae650e2931d98 + +I=79 +KEY=0000000000000000000200000000000000000000000000000000000000000000 +CT=c52e414fc84c978fad8cfa103844c306 + +I=80 +KEY=0000000000000000000100000000000000000000000000000000000000000000 +CT=df6291b74ef77e82a8fb7c207213125f + +I=81 +KEY=0000000000000000000080000000000000000000000000000000000000000000 +CT=530424a0f23cd90074f2d672a4ff3a96 + +I=82 +KEY=0000000000000000000040000000000000000000000000000000000000000000 +CT=83ed777537f5ee3e5769b8a07476a6ab + +I=83 +KEY=0000000000000000000020000000000000000000000000000000000000000000 +CT=5357341784eab13f104fbaefc69b726b + +I=84 +KEY=0000000000000000000010000000000000000000000000000000000000000000 +CT=6dbaca4c68ad93373cbeb1db0963f33f + +I=85 +KEY=0000000000000000000008000000000000000000000000000000000000000000 +CT=efa128916df70d852574ec8507625cc8 + +I=86 +KEY=0000000000000000000004000000000000000000000000000000000000000000 +CT=0bd55284ac672e1a2f248fb89c22b514 + +I=87 +KEY=0000000000000000000002000000000000000000000000000000000000000000 +CT=e3222e0e2770496c443ed562ecbfc368 + +I=88 +KEY=0000000000000000000001000000000000000000000000000000000000000000 +CT=6b689b6db9374e072b45a7807daab132 + +I=89 +KEY=0000000000000000000000800000000000000000000000000000000000000000 +CT=3215a725bcfbb120926f8bbce41fc3ec + +I=90 +KEY=0000000000000000000000400000000000000000000000000000000000000000 +CT=f2475fe25bef963862cf66c91da0250b + +I=91 +KEY=0000000000000000000000200000000000000000000000000000000000000000 +CT=5e1cc549bb39348529fd279dfe5e1ffc + +I=92 +KEY=0000000000000000000000100000000000000000000000000000000000000000 +CT=1a8edd22aa0fe906267df710de8db007 + +I=93 +KEY=0000000000000000000000080000000000000000000000000000000000000000 +CT=ee139ce12f8205d4eecce6d7fd23b01f + +I=94 +KEY=0000000000000000000000040000000000000000000000000000000000000000 +CT=fd84d87207d7be3a79272cc9df65e1e6 + +I=95 +KEY=0000000000000000000000020000000000000000000000000000000000000000 +CT=ce01b0eea6bf6d981affb07fe1dd164e + +I=96 +KEY=0000000000000000000000010000000000000000000000000000000000000000 +CT=1bcca9bd22179b1c941947643fb01f0f + +I=97 +KEY=0000000000000000000000008000000000000000000000000000000000000000 +CT=87a581347df02ff9973a0622df673804 + +I=98 +KEY=0000000000000000000000004000000000000000000000000000000000000000 +CT=1edeb75b65b365582ab5aa265037fa55 + +I=99 +KEY=0000000000000000000000002000000000000000000000000000000000000000 +CT=807dd7e0418803258ef677ba9345cf51 + +I=100 +KEY=0000000000000000000000001000000000000000000000000000000000000000 +CT=70ce90d345621481a99dc8ee1a62dcd5 + +I=101 +KEY=0000000000000000000000000800000000000000000000000000000000000000 +CT=bb51e835284e0f7b74c053151f07d207 + +I=102 +KEY=0000000000000000000000000400000000000000000000000000000000000000 +CT=0240317ec3afa5d4610c545c0d507367 + +I=103 +KEY=0000000000000000000000000200000000000000000000000000000000000000 +CT=9b77b76ca91662a9cb067267f0560c65 + +I=104 +KEY=0000000000000000000000000100000000000000000000000000000000000000 +CT=2219ed37d533b05cdc20b16f45d3dbd9 + +I=105 +KEY=0000000000000000000000000080000000000000000000000000000000000000 +CT=bc5a33af9e4591bd4cf53b20728c3f85 + +I=106 +KEY=0000000000000000000000000040000000000000000000000000000000000000 +CT=68628b89f58c20e5195db795c0a41489 + +I=107 +KEY=0000000000000000000000000020000000000000000000000000000000000000 +CT=5d177de234b6288510163f2351750215 + +I=108 +KEY=0000000000000000000000000010000000000000000000000000000000000000 +CT=6015d7ba2f33b88b2be0016e022e05fe + +I=109 +KEY=0000000000000000000000000008000000000000000000000000000000000000 +CT=2d203e35b97e3b315c17d9f0f80acda0 + +I=110 +KEY=0000000000000000000000000004000000000000000000000000000000000000 +CT=e5800af9bf96d6b7ed3a2aed899ca456 + +I=111 +KEY=0000000000000000000000000002000000000000000000000000000000000000 +CT=1163e6f8f1de919686c138089efa7986 + +I=112 +KEY=0000000000000000000000000001000000000000000000000000000000000000 +CT=2180b46e9eac63a165be63dae17889a4 + +I=113 +KEY=0000000000000000000000000000800000000000000000000000000000000000 +CT=3d751dc36b1046ac808d8275b48697ac + +I=114 +KEY=0000000000000000000000000000400000000000000000000000000000000000 +CT=df022c5efceb5d3fe7e72ddf11d16ea3 + +I=115 +KEY=0000000000000000000000000000200000000000000000000000000000000000 +CT=c706ab7a20e0d038143b78d9d12ec1a4 + +I=116 +KEY=0000000000000000000000000000100000000000000000000000000000000000 +CT=8afb006f196b00dae7f0b36c9e88a3b9 + +I=117 +KEY=0000000000000000000000000000080000000000000000000000000000000000 +CT=bed70262ed524a5c6a495092e2543993 + +I=118 +KEY=0000000000000000000000000000040000000000000000000000000000000000 +CT=088a58a7351c7a7af594035514de0757 + +I=119 +KEY=0000000000000000000000000000020000000000000000000000000000000000 +CT=f5df0bb68ab377b12321365c05480ea8 + +I=120 +KEY=0000000000000000000000000000010000000000000000000000000000000000 +CT=512dc8d603a7e4c8031d3566f141b233 + +I=121 +KEY=0000000000000000000000000000008000000000000000000000000000000000 +CT=50342ea0e9e81ec53e3683c8c1471602 + +I=122 +KEY=0000000000000000000000000000004000000000000000000000000000000000 +CT=8aab01e320b17fd9945d725f5ea904ba + +I=123 +KEY=0000000000000000000000000000002000000000000000000000000000000000 +CT=76fb320065713c165decbe5dafdd79bd + +I=124 +KEY=0000000000000000000000000000001000000000000000000000000000000000 +CT=a8ad014d22cd8fcc9557438b8228253a + +I=125 +KEY=0000000000000000000000000000000800000000000000000000000000000000 +CT=6017a9eb6f3336882fccedec746c62f6 + +I=126 +KEY=0000000000000000000000000000000400000000000000000000000000000000 +CT=2edf94990eb0f4bafe1f5903102fe874 + +I=127 +KEY=0000000000000000000000000000000200000000000000000000000000000000 +CT=4ec81b0fa8fae0025af09d26f1f200ea + +I=128 +KEY=0000000000000000000000000000000100000000000000000000000000000000 +CT=af7f474333e74691e5d01a3a841f8096 + +I=129 +KEY=0000000000000000000000000000000080000000000000000000000000000000 +CT=28fce531836f2a255ca19de6f53841e8 + +I=130 +KEY=0000000000000000000000000000000040000000000000000000000000000000 +CT=6282a41053316b1a4027488e6f747003 + +I=131 +KEY=0000000000000000000000000000000020000000000000000000000000000000 +CT=3668527987ac38a3f7c052a20b668f24 + +I=132 +KEY=0000000000000000000000000000000010000000000000000000000000000000 +CT=4c3473fe666072653e29354f07ef02b5 + +I=133 +KEY=0000000000000000000000000000000008000000000000000000000000000000 +CT=0a51d7a5b347225798ede5663940f32f + +I=134 +KEY=0000000000000000000000000000000004000000000000000000000000000000 +CT=d3ca3a8821a3d094cf63cf12136a1249 + +I=135 +KEY=0000000000000000000000000000000002000000000000000000000000000000 +CT=fbc5e4b37a69ad5f21e53f88e55ab95d + +I=136 +KEY=0000000000000000000000000000000001000000000000000000000000000000 +CT=cccaaa0a2defd357ee31c2cfec9d0e8e + +I=137 +KEY=0000000000000000000000000000000000800000000000000000000000000000 +CT=93348b5393560aa416c6e6f0c99a58f7 + +I=138 +KEY=0000000000000000000000000000000000400000000000000000000000000000 +CT=13ac66e49e23a8d3582aa7117f7a8f2f + +I=139 +KEY=0000000000000000000000000000000000200000000000000000000000000000 +CT=c403ad02f23055cee08281e7d0c7eb2a + +I=140 +KEY=0000000000000000000000000000000000100000000000000000000000000000 +CT=65dfd53b699b191ce7a6610a405083dc + +I=141 +KEY=0000000000000000000000000000000000080000000000000000000000000000 +CT=3d6f7e99f6512553bb983e8f75672b97 + +I=142 +KEY=0000000000000000000000000000000000040000000000000000000000000000 +CT=92ba0d580a954f8c8494a840f0252aef + +I=143 +KEY=0000000000000000000000000000000000020000000000000000000000000000 +CT=958d8c9141ce21dbd69e19ba1e4f67aa + +I=144 +KEY=0000000000000000000000000000000000010000000000000000000000000000 +CT=e508796197f539fcdc917ecab19507e0 + +I=145 +KEY=0000000000000000000000000000000000008000000000000000000000000000 +CT=2200a6914a2050e99a55fb3bf20315e4 + +I=146 +KEY=0000000000000000000000000000000000004000000000000000000000000000 +CT=627c0b2401ee6c095404cd7aa59ea67e + +I=147 +KEY=0000000000000000000000000000000000002000000000000000000000000000 +CT=75159b707278dfe6fd8a024b9ff0d5a8 + +I=148 +KEY=0000000000000000000000000000000000001000000000000000000000000000 +CT=f47982be40c39306acf25a120bc1b4e0 + +I=149 +KEY=0000000000000000000000000000000000000800000000000000000000000000 +CT=01caabef85a1e081ea6983079a90ea34 + +I=150 +KEY=0000000000000000000000000000000000000400000000000000000000000000 +CT=7f473cd21a453bf74cc76184d6f5496f + +I=151 +KEY=0000000000000000000000000000000000000200000000000000000000000000 +CT=659442fd57b94862529d3e4c530826fe + +I=152 +KEY=0000000000000000000000000000000000000100000000000000000000000000 +CT=88a9140c094a695716a2966b1a8078a0 + +I=153 +KEY=0000000000000000000000000000000000000080000000000000000000000000 +CT=28ccfc1bb6180aa7373da1f5a54e47ea + +I=154 +KEY=0000000000000000000000000000000000000040000000000000000000000000 +CT=53dfd8cb845fd279b337b52dbba3cf4c + +I=155 +KEY=0000000000000000000000000000000000000020000000000000000000000000 +CT=1bb5b100dfe6ba16983ad4a0f09fd50b + +I=156 +KEY=0000000000000000000000000000000000000010000000000000000000000000 +CT=a896ae30d529d4acffcf5b763309cd28 + +I=157 +KEY=0000000000000000000000000000000000000008000000000000000000000000 +CT=f40a1b359a9b6b1197276c71222371f4 + +I=158 +KEY=0000000000000000000000000000000000000004000000000000000000000000 +CT=9fde11c9e6cf9a1e9089820fd928767c + +I=159 +KEY=0000000000000000000000000000000000000002000000000000000000000000 +CT=7771a5a99b099a2c861d084e790958a2 + +I=160 +KEY=0000000000000000000000000000000000000001000000000000000000000000 +CT=be1907aa5ca148a0282850401c48af71 + +I=161 +KEY=0000000000000000000000000000000000000000800000000000000000000000 +CT=8e47d50827fd36b62c0d3bd36f863198 + +I=162 +KEY=0000000000000000000000000000000000000000400000000000000000000000 +CT=81aa1751209f9173258cd1625db65e07 + +I=163 +KEY=0000000000000000000000000000000000000000200000000000000000000000 +CT=1ee8fe72574bd819c97a0dea2a5e0b64 + +I=164 +KEY=0000000000000000000000000000000000000000100000000000000000000000 +CT=031ba0b3efcae9b08793c8107c277a27 + +I=165 +KEY=0000000000000000000000000000000000000000080000000000000000000000 +CT=34c8dfd0dc4ba5240ca21bf4959eef6b + +I=166 +KEY=0000000000000000000000000000000000000000040000000000000000000000 +CT=c7a4da0d5892a185d35447db904511b5 + +I=167 +KEY=0000000000000000000000000000000000000000020000000000000000000000 +CT=7a8b9982b6c8ae1b5dc02fc1d9afa2e0 + +I=168 +KEY=0000000000000000000000000000000000000000010000000000000000000000 +CT=c77e0dfb29402c587c6dd97e0bd09aba + +I=169 +KEY=0000000000000000000000000000000000000000008000000000000000000000 +CT=1aa2fd990bd0b0715b18482088de0844 + +I=170 +KEY=0000000000000000000000000000000000000000004000000000000000000000 +CT=31c2d486fda54bab4286a02d260918ac + +I=171 +KEY=0000000000000000000000000000000000000000002000000000000000000000 +CT=545f5a95e159b5f0ddf544b60f9c28c3 + +I=172 +KEY=0000000000000000000000000000000000000000001000000000000000000000 +CT=45c84895af0393588c67d9cdd5e4d7e2 + +I=173 +KEY=0000000000000000000000000000000000000000000800000000000000000000 +CT=745bf4af94a92d32ffe44b41aef39320 + +I=174 +KEY=0000000000000000000000000000000000000000000400000000000000000000 +CT=13c47c2f92f91d72f34381ac9a81473d + +I=175 +KEY=0000000000000000000000000000000000000000000200000000000000000000 +CT=8836d5aa076110fcd5bd66f3becb39f6 + +I=176 +KEY=0000000000000000000000000000000000000000000100000000000000000000 +CT=11ede6f221e96c7515b1256df055fbc3 + +I=177 +KEY=0000000000000000000000000000000000000000000080000000000000000000 +CT=4e3be7d6830703a6185cf0bdbe7f5be4 + +I=178 +KEY=0000000000000000000000000000000000000000000040000000000000000000 +CT=6a1abda47972cff536946a1c7d380810 + +I=179 +KEY=0000000000000000000000000000000000000000000020000000000000000000 +CT=74031db865d2fc8319a320ffac4694d8 + +I=180 +KEY=0000000000000000000000000000000000000000000010000000000000000000 +CT=e1f751f11027548c057075e8d8f880ea + +I=181 +KEY=0000000000000000000000000000000000000000000008000000000000000000 +CT=af24fa74ca96d89088c9018aa60e1d53 + +I=182 +KEY=0000000000000000000000000000000000000000000004000000000000000000 +CT=0e5214d31b2c9219f6c9686a35f210ff + +I=183 +KEY=0000000000000000000000000000000000000000000002000000000000000000 +CT=2a72e2e692463ee8846c94a483c27e25 + +I=184 +KEY=0000000000000000000000000000000000000000000001000000000000000000 +CT=2b9c3298626f11072d7b1d80b47a841f + +I=185 +KEY=0000000000000000000000000000000000000000000000800000000000000000 +CT=7468caa1a5ffc828be5a752c33132e90 + +I=186 +KEY=0000000000000000000000000000000000000000000000400000000000000000 +CT=29c75add5ede2680c169ff9fd9177331 + +I=187 +KEY=0000000000000000000000000000000000000000000000200000000000000000 +CT=9ba78930cdd3357a2d84a49725902e8f + +I=188 +KEY=0000000000000000000000000000000000000000000000100000000000000000 +CT=f190ac4c43e202f925b5fd1e4ca62dd6 + +I=189 +KEY=0000000000000000000000000000000000000000000000080000000000000000 +CT=5716fb34a1a6b40c35b2ba860f12163e + +I=190 +KEY=0000000000000000000000000000000000000000000000040000000000000000 +CT=43b90548889a171e85515ab05ec76856 + +I=191 +KEY=0000000000000000000000000000000000000000000000020000000000000000 +CT=b4de6f86875147f5276d584cec11afb4 + +I=192 +KEY=0000000000000000000000000000000000000000000000010000000000000000 +CT=3da6c1a8937583bf6491b2e9c52081e6 + +I=193 +KEY=0000000000000000000000000000000000000000000000008000000000000000 +CT=9a54fcd26d9754add5f8967ef551eab0 + +I=194 +KEY=0000000000000000000000000000000000000000000000004000000000000000 +CT=f0dcfa56a7e41a859276a6f8927b561d + +I=195 +KEY=0000000000000000000000000000000000000000000000002000000000000000 +CT=5881a8ae181f16b64cd0c455389f511c + +I=196 +KEY=0000000000000000000000000000000000000000000000001000000000000000 +CT=e9f7ad45d9ea9aa4c830b89eec61c1b5 + +I=197 +KEY=0000000000000000000000000000000000000000000000000800000000000000 +CT=9118b623a63bfc69a9aab868d752460b + +I=198 +KEY=0000000000000000000000000000000000000000000000000400000000000000 +CT=2d208d46fb2177c243c539fccd4a1e9d + +I=199 +KEY=0000000000000000000000000000000000000000000000000200000000000000 +CT=2a4f52a297f20e428222008d9be4a23b + +I=200 +KEY=0000000000000000000000000000000000000000000000000100000000000000 +CT=ebcfdd28550c9654374590ec4bfd1cdc + +I=201 +KEY=0000000000000000000000000000000000000000000000000080000000000000 +CT=fabb99266fc741241f6cfc0ced776a11 + +I=202 +KEY=0000000000000000000000000000000000000000000000000040000000000000 +CT=fbdec944b2303e3a08a964e24130d10d + +I=203 +KEY=0000000000000000000000000000000000000000000000000020000000000000 +CT=9897e33e6052aba1f07233bcef531e32 + +I=204 +KEY=0000000000000000000000000000000000000000000000000010000000000000 +CT=509dca41b038225b30d8b7880d52999d + +I=205 +KEY=0000000000000000000000000000000000000000000000000008000000000000 +CT=3f70238f99f2af394c31308d68f1707c + +I=206 +KEY=0000000000000000000000000000000000000000000000000004000000000000 +CT=e6ff6426e9025dd6519837f71a6c3636 + +I=207 +KEY=0000000000000000000000000000000000000000000000000002000000000000 +CT=f222502aef77c1f21db79b08f7ab8ca2 + +I=208 +KEY=0000000000000000000000000000000000000000000000000001000000000000 +CT=c17d2c00477c1aa20b539be8174e7202 + +I=209 +KEY=0000000000000000000000000000000000000000000000000000800000000000 +CT=0f7b12ae962af9c0c8cdcaa288fc6e12 + +I=210 +KEY=0000000000000000000000000000000000000000000000000000400000000000 +CT=0e740ee58431521a622122aefb163ce2 + +I=211 +KEY=0000000000000000000000000000000000000000000000000000200000000000 +CT=cf0b94fecac6f67070306654fe198449 + +I=212 +KEY=0000000000000000000000000000000000000000000000000000100000000000 +CT=604ea1d0711acb8e545c0a88976008f9 + +I=213 +KEY=0000000000000000000000000000000000000000000000000000080000000000 +CT=71d03d8f6f917fdf5b612180454f3699 + +I=214 +KEY=0000000000000000000000000000000000000000000000000000040000000000 +CT=a6bcfe7b73edce71db36af00b01c37ec + +I=215 +KEY=0000000000000000000000000000000000000000000000000000020000000000 +CT=93d761851bb991221ae77968459787dd + +I=216 +KEY=0000000000000000000000000000000000000000000000000000010000000000 +CT=f117e4d5c88cc1c067c88ae38a5bf1d5 + +I=217 +KEY=0000000000000000000000000000000000000000000000000000008000000000 +CT=b534328da555a9b69ac2a5b08e3ce47e + +I=218 +KEY=0000000000000000000000000000000000000000000000000000004000000000 +CT=7bdfb785d866b6487790b9f6164f5ebd + +I=219 +KEY=0000000000000000000000000000000000000000000000000000002000000000 +CT=5b3bb41e43d02901f5a0231768347b38 + +I=220 +KEY=0000000000000000000000000000000000000000000000000000001000000000 +CT=917216669db1600015f2fe7cbdda0ff4 + +I=221 +KEY=0000000000000000000000000000000000000000000000000000000800000000 +CT=c79b582fc430c0187d7b1d7b1e79bdb9 + +I=222 +KEY=0000000000000000000000000000000000000000000000000000000400000000 +CT=b9a43998aed6bb7b79c91bb4c2530f4e + +I=223 +KEY=0000000000000000000000000000000000000000000000000000000200000000 +CT=0b24ebdf9a1d129f5e8397ab7412bc74 + +I=224 +KEY=0000000000000000000000000000000000000000000000000000000100000000 +CT=96d523e4ef1c888c72460deba8d58b78 + +I=225 +KEY=0000000000000000000000000000000000000000000000000000000080000000 +CT=85708c4539c8b06dd787afdd06a3fe24 + +I=226 +KEY=0000000000000000000000000000000000000000000000000000000040000000 +CT=67a106762d2f46b7880750bcf987054c + +I=227 +KEY=0000000000000000000000000000000000000000000000000000000020000000 +CT=8f46e37371e81c389ca94a8272a14fc8 + +I=228 +KEY=0000000000000000000000000000000000000000000000000000000010000000 +CT=92dc700c11bbe46da9559caa7ba662f0 + +I=229 +KEY=0000000000000000000000000000000000000000000000000000000008000000 +CT=90d2b52984da214f392ef4eac26a04fe + +I=230 +KEY=0000000000000000000000000000000000000000000000000000000004000000 +CT=832d440d62996c5bfcb7faa08deb4d2c + +I=231 +KEY=0000000000000000000000000000000000000000000000000000000002000000 +CT=69b7f725ba2b0539f6b45f2c8495d571 + +I=232 +KEY=0000000000000000000000000000000000000000000000000000000001000000 +CT=ce78a2aa25f818d87c46367579fae698 + +I=233 +KEY=0000000000000000000000000000000000000000000000000000000000800000 +CT=f5e3e4da4fc90f25f7d6679f076ca32e + +I=234 +KEY=0000000000000000000000000000000000000000000000000000000000400000 +CT=f7618b001bc19f0195bd21021d9545b6 + +I=235 +KEY=0000000000000000000000000000000000000000000000000000000000200000 +CT=d84e1e36e1100913c7afdbfe5009edea + +I=236 +KEY=0000000000000000000000000000000000000000000000000000000000100000 +CT=9db2838e3903829913d2aee6465202fd + +I=237 +KEY=0000000000000000000000000000000000000000000000000000000000080000 +CT=361afbf61bdb378ccf2b76c01469baa2 + +I=238 +KEY=0000000000000000000000000000000000000000000000000000000000040000 +CT=dc4c998046574b4cc447154f663e8ebd + +I=239 +KEY=0000000000000000000000000000000000000000000000000000000000020000 +CT=0d890efa71666be0a38b423bad47c90f + +I=240 +KEY=0000000000000000000000000000000000000000000000000000000000010000 +CT=f39c444538e646a2bd59b443f68c51d5 + +I=241 +KEY=0000000000000000000000000000000000000000000000000000000000008000 +CT=9c6d37340e8f5ea22213e17a9f720238 + +I=242 +KEY=0000000000000000000000000000000000000000000000000000000000004000 +CT=3a23813329f978c1c6c3be1715011283 + +I=243 +KEY=0000000000000000000000000000000000000000000000000000000000002000 +CT=ce24d63afa37e2a659a21cf770109bb4 + +I=244 +KEY=0000000000000000000000000000000000000000000000000000000000001000 +CT=df329017478d86b2c360d55bc2b2adcf + +I=245 +KEY=0000000000000000000000000000000000000000000000000000000000000800 +CT=bc5efa1fbf848776746fd7826656e25c + +I=246 +KEY=0000000000000000000000000000000000000000000000000000000000000400 +CT=a3e4185241c566dd2cf8117d4d7699f4 + +I=247 +KEY=0000000000000000000000000000000000000000000000000000000000000200 +CT=ef7bbdeb18879c11e2979dcc601cb620 + +I=248 +KEY=0000000000000000000000000000000000000000000000000000000000000100 +CT=fdc76a95f9c87e394f82a787d7406d40 + +I=249 +KEY=0000000000000000000000000000000000000000000000000000000000000080 +CT=b224e2becacf6773b9941516195ed06b + +I=250 +KEY=0000000000000000000000000000000000000000000000000000000000000040 +CT=b3951d0cf640bb7bd8f3d9948745ff9e + +I=251 +KEY=0000000000000000000000000000000000000000000000000000000000000020 +CT=f9c8966e2874f736765b89da10ef4611 + +I=252 +KEY=0000000000000000000000000000000000000000000000000000000000000010 +CT=3750f26bab98833ab30444c0821a594c + +I=253 +KEY=0000000000000000000000000000000000000000000000000000000000000008 +CT=d369c2b7c2337d67a87cd5b4eb45d290 + +I=254 +KEY=0000000000000000000000000000000000000000000000000000000000000004 +CT=f3a44b0f53dcc9f79e1afa8abb022c84 + +I=255 +KEY=0000000000000000000000000000000000000000000000000000000000000002 +CT=6e47c47f3940d369ec703e974ab350b6 + +I=256 +KEY=0000000000000000000000000000000000000000000000000000000000000001 +CT=1100de2a57c47c2eb63277537ade5716 + +========== diff -urN lin.2.4.3/crypto/testing/rijndael_ecb_vk.txt int.2.4.3/crypto/testing/rijndael_ecb_vk.txt --- lin.2.4.3/crypto/testing/rijndael_ecb_vk.txt Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/rijndael_ecb_vk.txt Mon Apr 2 18:37:26 2001 @@ -0,0 +1,2334 @@ + +========================= + +FILENAME: "ecb_vk.txt" + +Electronic Codebook (ECB) Mode +Variable Key Known Answer Tests + +Algorithm Name: Rijndael +Principal Submitter: Joan Daemen + +========== + +KEYSIZE=128 + +PT=00000000000000000000000000000000 + +I=1 +KEY=80000000000000000000000000000000 +CT=0EDD33D3C621E546455BD8BA1418BEC8 + +I=2 +KEY=40000000000000000000000000000000 +CT=C0CC0C5DA5BD63ACD44A80774FAD5222 + +I=3 +KEY=20000000000000000000000000000000 +CT=2F0B4B71BC77851B9CA56D42EB8FF080 + +I=4 +KEY=10000000000000000000000000000000 +CT=6B1E2FFFE8A114009D8FE22F6DB5F876 + +I=5 +KEY=08000000000000000000000000000000 +CT=9AA042C315F94CBB97B62202F83358F5 + +I=6 +KEY=04000000000000000000000000000000 +CT=DBE01DE67E346A800C4C4B4880311DE4 + +I=7 +KEY=02000000000000000000000000000000 +CT=C117D2238D53836ACD92DDCDB85D6A21 + +I=8 +KEY=01000000000000000000000000000000 +CT=DC0ED85DF9611ABB7249CDD168C5467E + +I=9 +KEY=00800000000000000000000000000000 +CT=807D678FFF1F56FA92DE3381904842F2 + +I=10 +KEY=00400000000000000000000000000000 +CT=0E53B3FCAD8E4B130EF73AEB957FB402 + +I=11 +KEY=00200000000000000000000000000000 +CT=969FFD3B7C35439417E7BDE923035D65 + +I=12 +KEY=00100000000000000000000000000000 +CT=A99B512C19CA56070491166A1503BF15 + +I=13 +KEY=00080000000000000000000000000000 +CT=6E9985252126EE344D26AE369D2327E3 + +I=14 +KEY=00040000000000000000000000000000 +CT=B85F4809F904C275491FCDCD1610387E + +I=15 +KEY=00020000000000000000000000000000 +CT=ED365B8D7D20C1F5D53FB94DD211DF7B + +I=16 +KEY=00010000000000000000000000000000 +CT=B3A575E86A8DB4A7135D604C43304896 + +I=17 +KEY=00008000000000000000000000000000 +CT=89704BCB8E69F846259EB0ACCBC7F8A2 + +I=18 +KEY=00004000000000000000000000000000 +CT=C56EE7C92197861F10D7A92B90882055 + +I=19 +KEY=00002000000000000000000000000000 +CT=92F296F6846E0EAF9422A5A24A08B069 + +I=20 +KEY=00001000000000000000000000000000 +CT=E67E32BB8F11DEB8699318BEE9E91A60 + +I=21 +KEY=00000800000000000000000000000000 +CT=B08EEF85EAF626DD91B65C4C3A97D92B + +I=22 +KEY=00000400000000000000000000000000 +CT=661083A6ADDCE79BB4E0859AB5538013 + +I=23 +KEY=00000200000000000000000000000000 +CT=55DFE2941E0EB10AFC0B333BD34DE1FE + +I=24 +KEY=00000100000000000000000000000000 +CT=6BFE5945E715C9662609770F8846087A + +I=25 +KEY=00000080000000000000000000000000 +CT=79848E9C30C2F8CDA8B325F7FED2B139 + +I=26 +KEY=00000040000000000000000000000000 +CT=7A713A53B99FEF34AC04DEEF80965BD0 + +I=27 +KEY=00000020000000000000000000000000 +CT=18144A2B46620D32C3C32CE52D49257F + +I=28 +KEY=00000010000000000000000000000000 +CT=872E827C70887C80749F7B8BB1847C7E + +I=29 +KEY=00000008000000000000000000000000 +CT=6B86C6A4FE6A60C59B1A3102F8DE49F3 + +I=30 +KEY=00000004000000000000000000000000 +CT=9848BB3DFDF6F532F094679A4C231A20 + +I=31 +KEY=00000002000000000000000000000000 +CT=925AD528E852E329B2091CD3F1C2BCEE + +I=32 +KEY=00000001000000000000000000000000 +CT=80DF436544B0DD596722E46792A40CD8 + +I=33 +KEY=00000000800000000000000000000000 +CT=525DAF18F93E83E1E74BBBDDE4263BBA + +I=34 +KEY=00000000400000000000000000000000 +CT=F65C9D2EE485D24701FFA3313B9D5BE6 + +I=35 +KEY=00000000200000000000000000000000 +CT=E4FC8D8BCA06425BDF94AFA40FCC14BA + +I=36 +KEY=00000000100000000000000000000000 +CT=A53F0A5CA1E4E6440BB975FF320DE6F8 + +I=37 +KEY=00000000080000000000000000000000 +CT=D55313B9394080462E87E02899B553F0 + +I=38 +KEY=00000000040000000000000000000000 +CT=34A71D761F71BCD344384C7F97D27906 + +I=39 +KEY=00000000020000000000000000000000 +CT=233F3D819599612EBC89580245C996A8 + +I=40 +KEY=00000000010000000000000000000000 +CT=B4F1374E5268DBCB676E447529E53F89 + +I=41 +KEY=00000000008000000000000000000000 +CT=0816BD27861D2BA891D1044E39951E96 + +I=42 +KEY=00000000004000000000000000000000 +CT=F3BE9EA3F10C73CA64FDE5DB13A951D1 + +I=43 +KEY=00000000002000000000000000000000 +CT=2448086A8106FBD03048DDF857D3F1C8 + +I=44 +KEY=00000000001000000000000000000000 +CT=670756E65BEC8B68F03D77CDCDCE7B91 + +I=45 +KEY=00000000000800000000000000000000 +CT=EF968CF0D36FD6C6EFFD225F6FB44CA9 + +I=46 +KEY=00000000000400000000000000000000 +CT=2E8767157922E3826DDCEC1B0CC1E105 + +I=47 +KEY=00000000000200000000000000000000 +CT=78CE7EEC670E45A967BAB17E26A1AD36 + +I=48 +KEY=00000000000100000000000000000000 +CT=3C5CEE825655F098F6E81A2F417DA3FB + +I=49 +KEY=00000000000080000000000000000000 +CT=67BFDB431DCE1292200BC6F5207ADB12 + +I=50 +KEY=00000000000040000000000000000000 +CT=7540FD38E447C0779228548747843A6F + +I=51 +KEY=00000000000020000000000000000000 +CT=B85E513301F8A936EA9EC8A21A85B5E6 + +I=52 +KEY=00000000000010000000000000000000 +CT=04C67DBF16C11427D507A455DE2C9BC5 + +I=53 +KEY=00000000000008000000000000000000 +CT=03F75EB8959E55079CFFB4FF149A37B6 + +I=54 +KEY=00000000000004000000000000000000 +CT=74550287F666C63BB9BC7838433434B0 + +I=55 +KEY=00000000000002000000000000000000 +CT=7D537200195EBC3AEFD1EAAB1C385221 + +I=56 +KEY=00000000000001000000000000000000 +CT=CE24E4D40C68A82B535CBD3C8E21652A + +I=57 +KEY=00000000000000800000000000000000 +CT=AB20072405AA8FC40265C6F1F3DC8BC0 + +I=58 +KEY=00000000000000400000000000000000 +CT=6CFD2CF688F566B093F67B9B3839E80A + +I=59 +KEY=00000000000000200000000000000000 +CT=BD95977E6B7239D407A012C5544BF584 + +I=60 +KEY=00000000000000100000000000000000 +CT=DF9C0130AC77E7C72C997F587B46DBE0 + +I=61 +KEY=00000000000000080000000000000000 +CT=E7F1B82CADC53A648798945B34EFEFF2 + +I=62 +KEY=00000000000000040000000000000000 +CT=932C6DBF69255CF13EDCDB72233ACEA3 + +I=63 +KEY=00000000000000020000000000000000 +CT=5C76002BC7206560EFE550C80B8F12CC + +I=64 +KEY=00000000000000010000000000000000 +CT=F6B7BDD1CAEEBAB574683893C4475484 + +I=65 +KEY=00000000000000008000000000000000 +CT=A920E37CC6DC6B31DA8C0169569F5034 + +I=66 +KEY=00000000000000004000000000000000 +CT=919380ECD9C778BC513148B0C28D65FD + +I=67 +KEY=00000000000000002000000000000000 +CT=EE67308DD3F2D9E6C2170755E5784BE1 + +I=68 +KEY=00000000000000001000000000000000 +CT=3CC73E53B85609023A05E149B223AE09 + +I=69 +KEY=00000000000000000800000000000000 +CT=983E8AF7CF05EBB28D71EB841C9406E6 + +I=70 +KEY=00000000000000000400000000000000 +CT=0F3099B2D31FA5299EE5BF43193287FC + +I=71 +KEY=00000000000000000200000000000000 +CT=B763D84F38C27FE6931DCEB6715D4DB6 + +I=72 +KEY=00000000000000000100000000000000 +CT=5AE3C9B0E3CC29C0C61565CD01F8A248 + +I=73 +KEY=00000000000000000080000000000000 +CT=F58083572CD90981958565D48D2DEE25 + +I=74 +KEY=00000000000000000040000000000000 +CT=7E6255EEF8F70C0EF10337AAB1CCCEF8 + +I=75 +KEY=00000000000000000020000000000000 +CT=AAD4BAC34DB22821841CE2F631961902 + +I=76 +KEY=00000000000000000010000000000000 +CT=D7431C0409BB1441BA9C6858DC7D4E81 + +I=77 +KEY=00000000000000000008000000000000 +CT=EF9298C65E339F6E801A59C626456993 + +I=78 +KEY=00000000000000000004000000000000 +CT=53FE29F68FF541ABC3F0EF3350B72F7E + +I=79 +KEY=00000000000000000002000000000000 +CT=F6BBA5C10DB02529E2C2DA3FB582CC14 + +I=80 +KEY=00000000000000000001000000000000 +CT=E4239AA37FC531A386DAD1126FC0E9CD + +I=81 +KEY=00000000000000000000800000000000 +CT=8F7758F857D15BBE7BFD0E416404C365 + +I=82 +KEY=00000000000000000000400000000000 +CT=D273EB57C687BCD1B4EA7218A509E7B8 + +I=83 +KEY=00000000000000000000200000000000 +CT=65D64F8D76E8B3423FA25C4EB58A210A + +I=84 +KEY=00000000000000000000100000000000 +CT=623D802B4EC450D66A16625702FCDBE0 + +I=85 +KEY=00000000000000000000080000000000 +CT=7496460CB28E5791BAEAF9B68FB00022 + +I=86 +KEY=00000000000000000000040000000000 +CT=34EA600F18BB0694B41681A49D510C1D + +I=87 +KEY=00000000000000000000020000000000 +CT=5F8FF0D47D5766D29B5D6E8F46423BD8 + +I=88 +KEY=00000000000000000000010000000000 +CT=225F9286C5928BF09F84D3F93F541959 + +I=89 +KEY=00000000000000000000008000000000 +CT=B21E90D25DF383416A5F072CEBEB1FFB + +I=90 +KEY=00000000000000000000004000000000 +CT=4AEFCDA089318125453EB9E8EB5E492E + +I=91 +KEY=00000000000000000000002000000000 +CT=4D3E75C6CD40EC4869BC85158591ADB8 + +I=92 +KEY=00000000000000000000001000000000 +CT=63A8B904405436A1B99D7751866771B7 + +I=93 +KEY=00000000000000000000000800000000 +CT=64F0DAAE47529199792EAE172BA53293 + +I=94 +KEY=00000000000000000000000400000000 +CT=C3EEF84BEA18225D515A8C852A9047EE + +I=95 +KEY=00000000000000000000000200000000 +CT=A44AC422B47D47B81AF73B3E9AC9596E + +I=96 +KEY=00000000000000000000000100000000 +CT=D16E04A8FBC435094F8D53ADF25F5084 + +I=97 +KEY=00000000000000000000000080000000 +CT=EF13DC34BAB03E124EEAD8B6BF44B532 + +I=98 +KEY=00000000000000000000000040000000 +CT=D94799075C24DCC067AF0D392049250D + +I=99 +KEY=00000000000000000000000020000000 +CT=14F431771EDDCE4764C21A2254B5E3C8 + +I=100 +KEY=00000000000000000000000010000000 +CT=7039329F36F2ED682B02991F28D64679 + +I=101 +KEY=00000000000000000000000008000000 +CT=124EE24EDE5551639DB8B8B941F6141D + +I=102 +KEY=00000000000000000000000004000000 +CT=C2852879A34D5184E478EC918B993FEE + +I=103 +KEY=00000000000000000000000002000000 +CT=86A806A3525B93E432053C9AB5ABBEDF + +I=104 +KEY=00000000000000000000000001000000 +CT=C1609BF5A4F07E37C17A36366EC23ECC + +I=105 +KEY=00000000000000000000000000800000 +CT=7E81E7CB92159A51FFCEA331B1E8EA53 + +I=106 +KEY=00000000000000000000000000400000 +CT=37A7BE002856C5A59A6E03EAFCE7729A + +I=107 +KEY=00000000000000000000000000200000 +CT=BDF98A5A4F91E890C9A1D1E5FAAB138F + +I=108 +KEY=00000000000000000000000000100000 +CT=4E96ACB66E051F2BC739CC3D3E34A26B + +I=109 +KEY=00000000000000000000000000080000 +CT=EE996CDD120EB86E21ECFA49E8E1FCF1 + +I=110 +KEY=00000000000000000000000000040000 +CT=61B9E6B579DBF6070C351A1440DD85FF + +I=111 +KEY=00000000000000000000000000020000 +CT=AC369E484316440B40DFC83AA96E28E7 + +I=112 +KEY=00000000000000000000000000010000 +CT=0A2D16DE985C76D45C579C1159413BBE + +I=113 +KEY=00000000000000000000000000008000 +CT=DA3FDC38DA1D374FA4802CDA1A1C6B0F + +I=114 +KEY=00000000000000000000000000004000 +CT=B842523D4C41C2211AFE43A5800ADCE3 + +I=115 +KEY=00000000000000000000000000002000 +CT=9E2CDA90D8E992DBA6C73D8229567192 + +I=116 +KEY=00000000000000000000000000001000 +CT=D49583B781D9E20F5BE101415957FC49 + +I=117 +KEY=00000000000000000000000000000800 +CT=EF09DA5C12B376E458B9B8670032498E + +I=118 +KEY=00000000000000000000000000000400 +CT=A96BE0463DA774461A5E1D5A9DD1AC10 + +I=119 +KEY=00000000000000000000000000000200 +CT=32CEE3341060790D2D4B1362EF397090 + +I=120 +KEY=00000000000000000000000000000100 +CT=21CEA416A3D3359D2C4D58FB6A035F06 + +I=121 +KEY=00000000000000000000000000000080 +CT=172AEAB3D507678ECAF455C12587ADB7 + +I=122 +KEY=00000000000000000000000000000040 +CT=B6F897941EF8EBFF9FE80A567EF38478 + +I=123 +KEY=00000000000000000000000000000020 +CT=A9723259D94A7DC662FB0C782CA3F1DD + +I=124 +KEY=00000000000000000000000000000010 +CT=2F91C984B9A4839F30001B9F430493B4 + +I=125 +KEY=00000000000000000000000000000008 +CT=0472406345A610B048CB99EE0EF3FA0F + +I=126 +KEY=00000000000000000000000000000004 +CT=F5F39086646F8C05ED16EFA4B617957C + +I=127 +KEY=00000000000000000000000000000002 +CT=26D50F485A30408D5AF47A5736292450 + +I=128 +KEY=00000000000000000000000000000001 +CT=0545AAD56DA2A97C3663D1432A3D1C84 + +========== + +KEYSIZE=192 + +PT=00000000000000000000000000000000 + +I=1 +KEY=800000000000000000000000000000000000000000000000 +CT=DE885DC87F5A92594082D02CC1E1B42C + +I=2 +KEY=400000000000000000000000000000000000000000000000 +CT=C749194F94673F9DD2AA1932849630C1 + +I=3 +KEY=200000000000000000000000000000000000000000000000 +CT=0CEF643313912934D310297B90F56ECC + +I=4 +KEY=100000000000000000000000000000000000000000000000 +CT=C4495D39D4A553B225FBA02A7B1B87E1 + +I=5 +KEY=080000000000000000000000000000000000000000000000 +CT=636D10B1A0BCAB541D680A7970ADC830 + +I=6 +KEY=040000000000000000000000000000000000000000000000 +CT=07CF045786BD6AFCC147D99E45A901A7 + +I=7 +KEY=020000000000000000000000000000000000000000000000 +CT=6A8E3F425A7599348F95398448827976 + +I=8 +KEY=010000000000000000000000000000000000000000000000 +CT=5518276836148A00D91089A20D8BFF57 + +I=9 +KEY=008000000000000000000000000000000000000000000000 +CT=F267E07B5E87E3BC20B969C61D4FCB06 + +I=10 +KEY=004000000000000000000000000000000000000000000000 +CT=5A1CDE69571D401BFCD20DEBADA2212C + +I=11 +KEY=002000000000000000000000000000000000000000000000 +CT=70A9057263254701D12ADD7D74CD509E + +I=12 +KEY=001000000000000000000000000000000000000000000000 +CT=35713A7E108031279388A33A0FE2E190 + +I=13 +KEY=000800000000000000000000000000000000000000000000 +CT=E74EDE82B1254714F0C7B4B243108655 + +I=14 +KEY=000400000000000000000000000000000000000000000000 +CT=39272E3100FAA37B55B862320D1B3EB3 + +I=15 +KEY=000200000000000000000000000000000000000000000000 +CT=6D6E24C659FC5AEF712F77BCA19C9DD0 + +I=16 +KEY=000100000000000000000000000000000000000000000000 +CT=76D18212F972370D3CC2C6C372C6CF2F + +I=17 +KEY=000080000000000000000000000000000000000000000000 +CT=B21A1F0BAE39E55C7594ED570A7783EA + +I=18 +KEY=000040000000000000000000000000000000000000000000 +CT=77DE202111895AC48DD1C974B358B458 + +I=19 +KEY=000020000000000000000000000000000000000000000000 +CT=67810B311969012AAF7B504FFAF39FD1 + +I=20 +KEY=000010000000000000000000000000000000000000000000 +CT=C22EA2344D3E9417A6BA07843E713AEA + +I=21 +KEY=000008000000000000000000000000000000000000000000 +CT=C79CAF4B97BEE0BD0630AB354539D653 + +I=22 +KEY=000004000000000000000000000000000000000000000000 +CT=135FD1AF761D9AE23DF4AA6B86760DB4 + +I=23 +KEY=000002000000000000000000000000000000000000000000 +CT=D4659D0B06ACD4D56AB8D11A16FD83B9 + +I=24 +KEY=000001000000000000000000000000000000000000000000 +CT=F7D270028FC188E4E4F35A4AAA25D4D4 + +I=25 +KEY=000000800000000000000000000000000000000000000000 +CT=345CAE5A8C9620A9913D5473985852FF + +I=26 +KEY=000000400000000000000000000000000000000000000000 +CT=4E8980ADDE60B0E42C0B287FEA41E729 + +I=27 +KEY=000000200000000000000000000000000000000000000000 +CT=F11B6D74E1F15155633DC39743C1A527 + +I=28 +KEY=000000100000000000000000000000000000000000000000 +CT=9C87916C0180064F9D3179C6F5DD8C35 + +I=29 +KEY=000000080000000000000000000000000000000000000000 +CT=71AB186BCAEA518E461D4F7FAD230E6A + +I=30 +KEY=000000040000000000000000000000000000000000000000 +CT=C4A31BBC3DAAF742F9141C2A5001A49C + +I=31 +KEY=000000020000000000000000000000000000000000000000 +CT=E7C47B7B1D40F182A8928C8A55671D07 + +I=32 +KEY=000000010000000000000000000000000000000000000000 +CT=8E17F294B28FA373C6249538868A7EEF + +I=33 +KEY=000000008000000000000000000000000000000000000000 +CT=754404096A5CBC08AF09491BE249141A + +I=34 +KEY=000000004000000000000000000000000000000000000000 +CT=101CB56E55F05D86369B6D1069204F0A + +I=35 +KEY=000000002000000000000000000000000000000000000000 +CT=73F19BB6604205C6EE227B9759791E41 + +I=36 +KEY=000000001000000000000000000000000000000000000000 +CT=6270C0028F0D136C37A56B2CB64D24D6 + +I=37 +KEY=000000000800000000000000000000000000000000000000 +CT=A3BF7C2C38D1114A087ECF212E694346 + +I=38 +KEY=000000000400000000000000000000000000000000000000 +CT=49CABFF2CEF7D9F95F5EFB1F7A1A7DDE + +I=39 +KEY=000000000200000000000000000000000000000000000000 +CT=EC7F8A47CC59B849469255AD49F62752 + +I=40 +KEY=000000000100000000000000000000000000000000000000 +CT=68FAE55A13EFAF9B07B3552A8A0DC9D1 + +I=41 +KEY=000000000080000000000000000000000000000000000000 +CT=211E6B19C69FAEF481F64F24099CDA65 + +I=42 +KEY=000000000040000000000000000000000000000000000000 +CT=DBB918C75BC5732416F79FB0C8EE4C5C + +I=43 +KEY=000000000020000000000000000000000000000000000000 +CT=98D494E5D963A6C8B92536D3EC35E3FD + +I=44 +KEY=000000000010000000000000000000000000000000000000 +CT=C9A873404D403D6F074190851D67781A + +I=45 +KEY=000000000008000000000000000000000000000000000000 +CT=073AEF4A7C77D921928CB0DD9D27CAE7 + +I=46 +KEY=000000000004000000000000000000000000000000000000 +CT=89BDE25CEE36FDE769A10E52298CF90F + +I=47 +KEY=000000000002000000000000000000000000000000000000 +CT=26D0842D37EAD38557C65E0A5E5F122E + +I=48 +KEY=000000000001000000000000000000000000000000000000 +CT=F8294BA375AF46B3F22905BBAFFAB107 + +I=49 +KEY=000000000000800000000000000000000000000000000000 +CT=2AD63EB4D0D43813B979CF72B35BDB94 + +I=50 +KEY=000000000000400000000000000000000000000000000000 +CT=7710C171EE0F4EFA39BE4C995180181D + +I=51 +KEY=000000000000200000000000000000000000000000000000 +CT=C0CB2B40DBA7BE8C0698FAE1E4B80FF8 + +I=52 +KEY=000000000000100000000000000000000000000000000000 +CT=97970E505194622FD955CA1B80B784E9 + +I=53 +KEY=000000000000080000000000000000000000000000000000 +CT=7CB1824B29F850900DF2CAD9CF04C1CF + +I=54 +KEY=000000000000040000000000000000000000000000000000 +CT=FDF4F036BB988E42F2F62DE63FE19A64 + +I=55 +KEY=000000000000020000000000000000000000000000000000 +CT=08908CFE2C82606B2C15DF61B75CF3E2 + +I=56 +KEY=000000000000010000000000000000000000000000000000 +CT=B3AA689EF2D07FF365ACB9ADBA2AF07A + +I=57 +KEY=000000000000008000000000000000000000000000000000 +CT=F2672CD8EAA3B98776660D0263656F5C + +I=58 +KEY=000000000000004000000000000000000000000000000000 +CT=5BDEAC00E986687B9E1D94A0DA7BF452 + +I=59 +KEY=000000000000002000000000000000000000000000000000 +CT=E6D57BD66EA1627363EE0C4B711B0B21 + +I=60 +KEY=000000000000001000000000000000000000000000000000 +CT=03730DD6ACB4AD9996A63BE7765EC06F + +I=61 +KEY=000000000000000800000000000000000000000000000000 +CT=A470E361AA5437B2BE8586D2F78DE582 + +I=62 +KEY=000000000000000400000000000000000000000000000000 +CT=7567FEEFA559911FD479670246B484E3 + +I=63 +KEY=000000000000000200000000000000000000000000000000 +CT=29829DEA15A4E7A4C049045E7B106E29 + +I=64 +KEY=000000000000000100000000000000000000000000000000 +CT=A407834C3D89D48A2CB7A152208FA4ED + +I=65 +KEY=000000000000000080000000000000000000000000000000 +CT=68F948053F78FEF0D8F9FE7EF3A89819 + +I=66 +KEY=000000000000000040000000000000000000000000000000 +CT=B605174CAB13AD8FE3B20DA3AE7B0234 + +I=67 +KEY=000000000000000020000000000000000000000000000000 +CT=CCAB8F0AEBFF032893996D383CBFDBFA + +I=68 +KEY=000000000000000010000000000000000000000000000000 +CT=AF14BB8428C9730B7DC17B6C1CBEBCC8 + +I=69 +KEY=000000000000000008000000000000000000000000000000 +CT=5A41A21332040877EB7B89E8E80D19FE + +I=70 +KEY=000000000000000004000000000000000000000000000000 +CT=AC1BA52EFCDDE368B1596F2F0AD893A0 + +I=71 +KEY=000000000000000002000000000000000000000000000000 +CT=41B890E31B9045E6ECDC1BC3F2DB9BCC + +I=72 +KEY=000000000000000001000000000000000000000000000000 +CT=4D54A549728E55B19A23660424A0F146 + +I=73 +KEY=000000000000000000800000000000000000000000000000 +CT=A917581F41C47C7DDCFFD5285E2D6A61 + +I=74 +KEY=000000000000000000400000000000000000000000000000 +CT=604DF24BA6099B93A7405A524D764FCB + +I=75 +KEY=000000000000000000200000000000000000000000000000 +CT=78D9D156F28B190E232D1B7AE7FC730A + +I=76 +KEY=000000000000000000100000000000000000000000000000 +CT=5A12C39E442CD7F27B3CD77F5D029582 + +I=77 +KEY=000000000000000000080000000000000000000000000000 +CT=FF2BF2F47CF7B0F28EE25AF95DBF790D + +I=78 +KEY=000000000000000000040000000000000000000000000000 +CT=1863BB7D193BDA39DF090659EB8AE48B + +I=79 +KEY=000000000000000000020000000000000000000000000000 +CT=38178F2FB4CFCF31E87E1ABCDC023EB5 + +I=80 +KEY=000000000000000000010000000000000000000000000000 +CT=F5B13DC690CC0D541C6BA533023DC8C9 + +I=81 +KEY=000000000000000000008000000000000000000000000000 +CT=48EC05238D7375D126DC9D08884D4827 + +I=82 +KEY=000000000000000000004000000000000000000000000000 +CT=ACD0D81139691B310B92A6E377BACC87 + +I=83 +KEY=000000000000000000002000000000000000000000000000 +CT=9A4AA43578B55CE9CC178F0D2E162C79 + +I=84 +KEY=000000000000000000001000000000000000000000000000 +CT=08AD94BC737DB3C87D49B9E01B720D81 + +I=85 +KEY=000000000000000000000800000000000000000000000000 +CT=3BCFB2D5D210E8332900C5991D551A2A + +I=86 +KEY=000000000000000000000400000000000000000000000000 +CT=C5F0C6B9397ACB29635CE1A0DA2D8D96 + +I=87 +KEY=000000000000000000000200000000000000000000000000 +CT=844A29EFC693E2FA9900F87FBF5DCD5F + +I=88 +KEY=000000000000000000000100000000000000000000000000 +CT=5126A1C41051FEA158BE41200E1EA59D + +I=89 +KEY=000000000000000000000080000000000000000000000000 +CT=302123CA7B4F46D667FFFB0EB6AA7703 + +I=90 +KEY=000000000000000000000040000000000000000000000000 +CT=A9D16BCE7DB5C024277709EE2A88D91A + +I=91 +KEY=000000000000000000000020000000000000000000000000 +CT=F013C5EC123A26CFC34B598C992A996B + +I=92 +KEY=000000000000000000000010000000000000000000000000 +CT=E38A825CD971A1D2E56FB1DBA248F2A8 + +I=93 +KEY=000000000000000000000008000000000000000000000000 +CT=6E701773C0311E0BD4C5A097406D22B3 + +I=94 +KEY=000000000000000000000004000000000000000000000000 +CT=754262CEF0C64BE4C3E67C35ABE439F7 + +I=95 +KEY=000000000000000000000002000000000000000000000000 +CT=C9C2D4C47DF7D55CFA0EE5F1FE5070F4 + +I=96 +KEY=000000000000000000000001000000000000000000000000 +CT=6AB4BEA85B172573D8BD2D5F4329F13D + +I=97 +KEY=000000000000000000000000800000000000000000000000 +CT=11F03EF28E2CC9AE5165C587F7396C8C + +I=98 +KEY=000000000000000000000000400000000000000000000000 +CT=0682F2EB1A68BAC7949922C630DD27FA + +I=99 +KEY=000000000000000000000000200000000000000000000000 +CT=ABB0FEC0413D659AFE8E3DCF6BA873BB + +I=100 +KEY=000000000000000000000000100000000000000000000000 +CT=FE86A32E19F805D6569B2EFADD9C92AA + +I=101 +KEY=000000000000000000000000080000000000000000000000 +CT=E434E472275D1837D3D717F2EECC88C3 + +I=102 +KEY=000000000000000000000000040000000000000000000000 +CT=74E57DCD12A21D26EF8ADAFA5E60469A + +I=103 +KEY=000000000000000000000000020000000000000000000000 +CT=C275429D6DAD45DDD423FA63C816A9C1 + +I=104 +KEY=000000000000000000000000010000000000000000000000 +CT=7F6EC1A9AE729E86F7744AED4B8F4F07 + +I=105 +KEY=000000000000000000000000008000000000000000000000 +CT=48B5A71AB9292BD4F9E608EF102636B2 + +I=106 +KEY=000000000000000000000000004000000000000000000000 +CT=076FB95D5F536C78CBED3181BCCF3CF1 + +I=107 +KEY=000000000000000000000000002000000000000000000000 +CT=BFA76BEA1E684FD3BF9256119EE0BC0F + +I=108 +KEY=000000000000000000000000001000000000000000000000 +CT=7D395923D56577F3FF8670998F8C4A71 + +I=109 +KEY=000000000000000000000000000800000000000000000000 +CT=BA02C986E529AC18A882C34BA389625F + +I=110 +KEY=000000000000000000000000000400000000000000000000 +CT=3DFCF2D882AFE75D3A191193013A84B5 + +I=111 +KEY=000000000000000000000000000200000000000000000000 +CT=FAD1FDE1D0241784B63080D2C74D236C + +I=112 +KEY=000000000000000000000000000100000000000000000000 +CT=7D6C80D39E41F007A14FB9CD2B2C15CD + +I=113 +KEY=000000000000000000000000000080000000000000000000 +CT=7975F401FC10637BB33EA2DB058FF6EC + +I=114 +KEY=000000000000000000000000000040000000000000000000 +CT=657983865C55A818F02B7FCD52ED7E99 + +I=115 +KEY=000000000000000000000000000020000000000000000000 +CT=B32BEB1776F9827FF4C3AC9997E84B20 + +I=116 +KEY=000000000000000000000000000010000000000000000000 +CT=2AE2C7C374F0A41E3D46DBC3E66BB59F + +I=117 +KEY=000000000000000000000000000008000000000000000000 +CT=4D835E4ABDD4BDC6B88316A6E931A07F + +I=118 +KEY=000000000000000000000000000004000000000000000000 +CT=E07EFABFF1C353F7384EBB87B435A3F3 + +I=119 +KEY=000000000000000000000000000002000000000000000000 +CT=ED3088DC3FAF89AD87B4356FF1BB09C2 + +I=120 +KEY=000000000000000000000000000001000000000000000000 +CT=4324D01140C156FC898C2E32BA03FB05 + +I=121 +KEY=000000000000000000000000000000800000000000000000 +CT=BE15D016FACB5BAFBC24FA9289132166 + +I=122 +KEY=000000000000000000000000000000400000000000000000 +CT=AC9B7048EDB1ACF4D97A5B0B3F50884B + +I=123 +KEY=000000000000000000000000000000200000000000000000 +CT=448BECE1F86C7845DFA9A4BB2A016FB3 + +I=124 +KEY=000000000000000000000000000000100000000000000000 +CT=10DD445E87686EB46EA9B1ABC49257F0 + +I=125 +KEY=000000000000000000000000000000080000000000000000 +CT=B7FCCF7659FA756D4B7303EEA6C07458 + +I=126 +KEY=000000000000000000000000000000040000000000000000 +CT=289117115CA3513BAA7640B1004872C2 + +I=127 +KEY=000000000000000000000000000000020000000000000000 +CT=57CB42F7EE7186051F50B93FFA7B35BF + +I=128 +KEY=000000000000000000000000000000010000000000000000 +CT=F2741BFBFB81663B9136802FB9C3126A + +I=129 +KEY=000000000000000000000000000000008000000000000000 +CT=E32DDDC5C7398C096E3BD535B31DB5CE + +I=130 +KEY=000000000000000000000000000000004000000000000000 +CT=81D3C204E608AF9CC713EAEBCB72433F + +I=131 +KEY=000000000000000000000000000000002000000000000000 +CT=D4DEEF4BFC36AAA579496E6935F8F98E + +I=132 +KEY=000000000000000000000000000000001000000000000000 +CT=C356DB082B97802B038571C392C5C8F6 + +I=133 +KEY=000000000000000000000000000000000800000000000000 +CT=A3919ECD4861845F2527B77F06AC6A4E + +I=134 +KEY=000000000000000000000000000000000400000000000000 +CT=A53858E17A2F802A20E40D44494FFDA0 + +I=135 +KEY=000000000000000000000000000000000200000000000000 +CT=5D989E122B78C758921EDBEEB827F0C0 + +I=136 +KEY=000000000000000000000000000000000100000000000000 +CT=4B1C0C8F9E7830CC3C4BE7BD226FA8DE + +I=137 +KEY=000000000000000000000000000000000080000000000000 +CT=82C40C5FD897FBCA7B899C70713573A1 + +I=138 +KEY=000000000000000000000000000000000040000000000000 +CT=ED13EE2D45E00F75CCDB51EA8E3E36AD + +I=139 +KEY=000000000000000000000000000000000020000000000000 +CT=F121799EEFE8432423176A3CCF6462BB + +I=140 +KEY=000000000000000000000000000000000010000000000000 +CT=4FA0C06F07997E98271DD86F7B355C50 + +I=141 +KEY=000000000000000000000000000000000008000000000000 +CT=849EB364B4E81D058649DC5B1BF029B9 + +I=142 +KEY=000000000000000000000000000000000004000000000000 +CT=F48F9E0DE8DE7AD944A207809335D9B1 + +I=143 +KEY=000000000000000000000000000000000002000000000000 +CT=E59E9205B5A81A4FD26DFCF308966022 + +I=144 +KEY=000000000000000000000000000000000001000000000000 +CT=3A91A1BE14AAE9ED700BDF9D70018804 + +I=145 +KEY=000000000000000000000000000000000000800000000000 +CT=8ABAD78DCB79A48D79070E7DA89664EC + +I=146 +KEY=000000000000000000000000000000000000400000000000 +CT=B68377D98AAE6044938A7457F6C649D9 + +I=147 +KEY=000000000000000000000000000000000000200000000000 +CT=E4E1275C42F5F1B63D662C099D6CE33D + +I=148 +KEY=000000000000000000000000000000000000100000000000 +CT=7DEF32A34C6BE668F17DA1BB193B06EF + +I=149 +KEY=000000000000000000000000000000000000080000000000 +CT=78B6000CC3D30CB3A74B68D0EDBD2B53 + +I=150 +KEY=000000000000000000000000000000000000040000000000 +CT=0A47531DE88DD8AE5C23EAE4F7D1F2D5 + +I=151 +KEY=000000000000000000000000000000000000020000000000 +CT=667B24E8000CF68231EC484581D922E5 + +I=152 +KEY=000000000000000000000000000000000000010000000000 +CT=39DAA5EBD4AACAE130E9C33236C52024 + +I=153 +KEY=000000000000000000000000000000000000008000000000 +CT=E3C88760B3CB21360668A63E55BB45D1 + +I=154 +KEY=000000000000000000000000000000000000004000000000 +CT=F131EE903C1CDB49D416866FD5D8DE51 + +I=155 +KEY=000000000000000000000000000000000000002000000000 +CT=7A1916135B0447CF4033FC13047A583A + +I=156 +KEY=000000000000000000000000000000000000001000000000 +CT=F7D55FB27991143DCDFA90DDF0424FCB + +I=157 +KEY=000000000000000000000000000000000000000800000000 +CT=EA93E7D1CA1111DBD8F7EC111A848C0C + +I=158 +KEY=000000000000000000000000000000000000000400000000 +CT=2A689E39DFD3CBCBE221326E95888779 + +I=159 +KEY=000000000000000000000000000000000000000200000000 +CT=C1CE399CA762318AC2C40D1928B4C57D + +I=160 +KEY=000000000000000000000000000000000000000100000000 +CT=D43FB6F2B2879C8BFAF0092DA2CA63ED + +I=161 +KEY=000000000000000000000000000000000000000080000000 +CT=224563E617158DF97650AF5D130E78A5 + +I=162 +KEY=000000000000000000000000000000000000000040000000 +CT=6562FDF6833B7C4F7484AE6EBCC243DD + +I=163 +KEY=000000000000000000000000000000000000000020000000 +CT=93D58BA7BED22615D661D002885A7457 + +I=164 +KEY=000000000000000000000000000000000000000010000000 +CT=9A0EF559003AD9E52D3E09ED3C1D3320 + +I=165 +KEY=000000000000000000000000000000000000000008000000 +CT=96BAF5A7DC6F3DD27EB4C717A85D261C + +I=166 +KEY=000000000000000000000000000000000000000004000000 +CT=B8762E06884900E8452293190E19CCDB + +I=167 +KEY=000000000000000000000000000000000000000002000000 +CT=785416A22BD63CBABF4B1789355197D3 + +I=168 +KEY=000000000000000000000000000000000000000001000000 +CT=A0D20CE1489BAA69A3612DCE90F7ABF6 + +I=169 +KEY=000000000000000000000000000000000000000000800000 +CT=700244E93DC94230CC607FFBA0E48F32 + +I=170 +KEY=000000000000000000000000000000000000000000400000 +CT=85329E476829F872A2B4A7E59F91FF2D + +I=171 +KEY=000000000000000000000000000000000000000000200000 +CT=E4219B4935D988DB719B8B8B2B53D247 + +I=172 +KEY=000000000000000000000000000000000000000000100000 +CT=6ACDD04FD13D4DB4409FE8DD13FD737B + +I=173 +KEY=000000000000000000000000000000000000000000080000 +CT=9EB7A670AB59E15BE582378701C1EC14 + +I=174 +KEY=000000000000000000000000000000000000000000040000 +CT=29DF2D6935FE657763BC7A9F22D3D492 + +I=175 +KEY=000000000000000000000000000000000000000000020000 +CT=99303359D4A13AFDBE6C784028CE533A + +I=176 +KEY=000000000000000000000000000000000000000000010000 +CT=FF5C70A6334545F33B9DBF7BEA0417CA + +I=177 +KEY=000000000000000000000000000000000000000000008000 +CT=289F58A17E4C50EDA4269EFB3DF55815 + +I=178 +KEY=000000000000000000000000000000000000000000004000 +CT=EA35DCB416E9E1C2861D1682F062B5EB + +I=179 +KEY=000000000000000000000000000000000000000000002000 +CT=3A47BF354BE775383C50B0C0A83E3A58 + +I=180 +KEY=000000000000000000000000000000000000000000001000 +CT=BF6C1DC069FB95D05D43B01D8206D66B + +I=181 +KEY=000000000000000000000000000000000000000000000800 +CT=046D1D580D5898DA6595F32FD1F0C33D + +I=182 +KEY=000000000000000000000000000000000000000000000400 +CT=5F57803B7B82A110F7E9855D6A546082 + +I=183 +KEY=000000000000000000000000000000000000000000000200 +CT=25336ECF34E7BE97862CDFF715FF05A8 + +I=184 +KEY=000000000000000000000000000000000000000000000100 +CT=ACBAA2A943D8078022D693890E8C4FEF + +I=185 +KEY=000000000000000000000000000000000000000000000080 +CT=3947597879F6B58E4E2F0DF825A83A38 + +I=186 +KEY=000000000000000000000000000000000000000000000040 +CT=4EB8CC3335496130655BF3CA570A4FC0 + +I=187 +KEY=000000000000000000000000000000000000000000000020 +CT=BBDA7769AD1FDA425E18332D97868824 + +I=188 +KEY=000000000000000000000000000000000000000000000010 +CT=5E7532D22DDB0829A29C868198397154 + +I=189 +KEY=000000000000000000000000000000000000000000000008 +CT=E66DA67B630AB7AE3E682855E1A1698E + +I=190 +KEY=000000000000000000000000000000000000000000000004 +CT=4D93800F671B48559A64D1EA030A590A + +I=191 +KEY=000000000000000000000000000000000000000000000002 +CT=F33159FCC7D9AE30C062CD3B322AC764 + +I=192 +KEY=000000000000000000000000000000000000000000000001 +CT=8BAE4EFB70D33A9792EEA9BE70889D72 + +========== + +KEYSIZE=256 + +PT=00000000000000000000000000000000 + +I=1 +KEY=8000000000000000000000000000000000000000000000000000000000000000 +CT=E35A6DCB19B201A01EBCFA8AA22B5759 + +I=2 +KEY=4000000000000000000000000000000000000000000000000000000000000000 +CT=5075C2405B76F22F553488CAE47CE90B + +I=3 +KEY=2000000000000000000000000000000000000000000000000000000000000000 +CT=49DF95D844A0145A7DE01C91793302D3 + +I=4 +KEY=1000000000000000000000000000000000000000000000000000000000000000 +CT=E7396D778E940B8418A86120E5F421FE + +I=5 +KEY=0800000000000000000000000000000000000000000000000000000000000000 +CT=05F535C36FCEDE4657BE37F4087DB1EF + +I=6 +KEY=0400000000000000000000000000000000000000000000000000000000000000 +CT=D0C1DDDD10DA777C68AB36AF51F2C204 + +I=7 +KEY=0200000000000000000000000000000000000000000000000000000000000000 +CT=1C55FB811B5C6464C4E5DE1535A75514 + +I=8 +KEY=0100000000000000000000000000000000000000000000000000000000000000 +CT=52917F3AE957D5230D3A2AF57C7B5A71 + +I=9 +KEY=0080000000000000000000000000000000000000000000000000000000000000 +CT=C6E3D5501752DD5E9AEF086D6B45D705 + +I=10 +KEY=0040000000000000000000000000000000000000000000000000000000000000 +CT=A24A9C7AF1D9B1E17E1C9A3E711B3FA7 + +I=11 +KEY=0020000000000000000000000000000000000000000000000000000000000000 +CT=B881ECA724A6D43DBC6B96F6F59A0D20 + +I=12 +KEY=0010000000000000000000000000000000000000000000000000000000000000 +CT=EC524D9A24DFFF2A9639879B83B8E137 + +I=13 +KEY=0008000000000000000000000000000000000000000000000000000000000000 +CT=34C4F345F5466215A037F443635D6F75 + +I=14 +KEY=0004000000000000000000000000000000000000000000000000000000000000 +CT=5BA5055BEDB8895F672E29F2EB5A355D + +I=15 +KEY=0002000000000000000000000000000000000000000000000000000000000000 +CT=B3F692AA3A435259EBBEF9B51AD1E08D + +I=16 +KEY=0001000000000000000000000000000000000000000000000000000000000000 +CT=414FEB4376F2C64A5D2FBB2ED531BA7D + +I=17 +KEY=0000800000000000000000000000000000000000000000000000000000000000 +CT=A20D519E3BCA3303F07E81719F61605E + +I=18 +KEY=0000400000000000000000000000000000000000000000000000000000000000 +CT=A08D10E520AF811F45BD60A2DC0DC4B1 + +I=19 +KEY=0000200000000000000000000000000000000000000000000000000000000000 +CT=B06893A8C563C430E6F3858826EFBBE4 + +I=20 +KEY=0000100000000000000000000000000000000000000000000000000000000000 +CT=0FFEE26AE2D3929C6BD9C6BEDFF84409 + +I=21 +KEY=0000080000000000000000000000000000000000000000000000000000000000 +CT=4D0F5E906ED77801FC0EF53EDC5F9E2B + +I=22 +KEY=0000040000000000000000000000000000000000000000000000000000000000 +CT=8B6EC00119AD8B026DCE56EA7DEFE930 + +I=23 +KEY=0000020000000000000000000000000000000000000000000000000000000000 +CT=69026591D43363EE9D83B5007F0B484E + +I=24 +KEY=0000010000000000000000000000000000000000000000000000000000000000 +CT=27135D86950C6A2F86872706279A4761 + +I=25 +KEY=0000008000000000000000000000000000000000000000000000000000000000 +CT=35E6DB8723F281DA410C3AC8535ED77C + +I=26 +KEY=0000004000000000000000000000000000000000000000000000000000000000 +CT=57427CF214B8C28E4BBF487CCB8D0E09 + +I=27 +KEY=0000002000000000000000000000000000000000000000000000000000000000 +CT=6DF01BF56E5131AC87F96E99CAB86367 + +I=28 +KEY=0000001000000000000000000000000000000000000000000000000000000000 +CT=3856C5B55790B768BBF7D43031579BCF + +I=29 +KEY=0000000800000000000000000000000000000000000000000000000000000000 +CT=1E6ED8FB7C15BC4D2F63BA7037ED44D0 + +I=30 +KEY=0000000400000000000000000000000000000000000000000000000000000000 +CT=E1B2ED6CD8D93D455534E401156D4BCF + +I=31 +KEY=0000000200000000000000000000000000000000000000000000000000000000 +CT=EFBCCA5BDFDAD10E875F02336212CE36 + +I=32 +KEY=0000000100000000000000000000000000000000000000000000000000000000 +CT=0B777F02FD18DCE2646DCFE868DFAFAD + +I=33 +KEY=0000000080000000000000000000000000000000000000000000000000000000 +CT=C8A104B5693D1B14F5BF1F10100BF508 + +I=34 +KEY=0000000040000000000000000000000000000000000000000000000000000000 +CT=4CCE6615244AFCB38408FECE219962EA + +I=35 +KEY=0000000020000000000000000000000000000000000000000000000000000000 +CT=F99E7845D3A255B394C9C050CBA258B1 + +I=36 +KEY=0000000010000000000000000000000000000000000000000000000000000000 +CT=B4AFBB787F9BCFB7B55FDF447F611295 + +I=37 +KEY=0000000008000000000000000000000000000000000000000000000000000000 +CT=AE1C426A697FAF2808B7EF6ADDB5C020 + +I=38 +KEY=0000000004000000000000000000000000000000000000000000000000000000 +CT=7572F92811A85B9BDD38DEAD9945BCAE + +I=39 +KEY=0000000002000000000000000000000000000000000000000000000000000000 +CT=71BC7AA46E43FB95A181527D9F6A360F + +I=40 +KEY=0000000001000000000000000000000000000000000000000000000000000000 +CT=5542EF2923066F1EC8F546DD0D8E7CA8 + +I=41 +KEY=0000000000800000000000000000000000000000000000000000000000000000 +CT=6B92317C7D623790B748FDD7EFC42422 + +I=42 +KEY=0000000000400000000000000000000000000000000000000000000000000000 +CT=0FE7C097E899C71EF045360F8D6C25CF + +I=43 +KEY=0000000000200000000000000000000000000000000000000000000000000000 +CT=4ECE7EE107D0264D04693151C25B9DF6 + +I=44 +KEY=0000000000100000000000000000000000000000000000000000000000000000 +CT=FD6AE687CBFCA9E301045888D3BB9605 + +I=45 +KEY=0000000000080000000000000000000000000000000000000000000000000000 +CT=476B579C8556C7254424902CC1D6D36E + +I=46 +KEY=0000000000040000000000000000000000000000000000000000000000000000 +CT=4133CBCDFDD6B8860A1FC18665D6D71B + +I=47 +KEY=0000000000020000000000000000000000000000000000000000000000000000 +CT=3B36EC2664798C108B816812C65DFDC7 + +I=48 +KEY=0000000000010000000000000000000000000000000000000000000000000000 +CT=364E20A234FEA385D48DC5A09C9E70CF + +I=49 +KEY=0000000000008000000000000000000000000000000000000000000000000000 +CT=4A4BA25969DE3F5EE5642C71AAD0EFD1 + +I=50 +KEY=0000000000004000000000000000000000000000000000000000000000000000 +CT=E42CBAAE43297F67A76C1C501BB79E36 + +I=51 +KEY=0000000000002000000000000000000000000000000000000000000000000000 +CT=23CEDEDA4C15B4C037E8C61492217937 + +I=52 +KEY=0000000000001000000000000000000000000000000000000000000000000000 +CT=A1719147A1F4A1A1180BD16E8593DCDE + +I=53 +KEY=0000000000000800000000000000000000000000000000000000000000000000 +CT=AB82337E9FB0EC60D1F25A1D0014192C + +I=54 +KEY=0000000000000400000000000000000000000000000000000000000000000000 +CT=74BF2D8FC5A8388DF1A3A4D7D33FC164 + +I=55 +KEY=0000000000000200000000000000000000000000000000000000000000000000 +CT=D5B493317E6FBC6FFFD664B3C491368A + +I=56 +KEY=0000000000000100000000000000000000000000000000000000000000000000 +CT=BA767381586DA56A2A8D503D5F7ADA0B + +I=57 +KEY=0000000000000080000000000000000000000000000000000000000000000000 +CT=E8E6BC57DFE9CCADB0DECABF4E5CF91F + +I=58 +KEY=0000000000000040000000000000000000000000000000000000000000000000 +CT=3C8E5A5CDC9CEED90815D1F84BB2998C + +I=59 +KEY=0000000000000020000000000000000000000000000000000000000000000000 +CT=283843020BA38F056001B2FD585F7CC9 + +I=60 +KEY=0000000000000010000000000000000000000000000000000000000000000000 +CT=D8ADC7426F623ECE8741A70621D28870 + +I=61 +KEY=0000000000000008000000000000000000000000000000000000000000000000 +CT=D7C5C215592D06F00E6A80DA69A28EA9 + +I=62 +KEY=0000000000000004000000000000000000000000000000000000000000000000 +CT=52CF6FA433C3C870CAC70190358F7F16 + +I=63 +KEY=0000000000000002000000000000000000000000000000000000000000000000 +CT=F63D442A584DA71786ADEC9F3346DF75 + +I=64 +KEY=0000000000000001000000000000000000000000000000000000000000000000 +CT=549078F4B0CA7079B45F9A5ADAFAFD99 + +I=65 +KEY=0000000000000000800000000000000000000000000000000000000000000000 +CT=F2A5986EE4E9984BE2BAFB79EA8152FA + +I=66 +KEY=0000000000000000400000000000000000000000000000000000000000000000 +CT=8A74535017B4DB2776668A1FAE64384C + +I=67 +KEY=0000000000000000200000000000000000000000000000000000000000000000 +CT=E613342F57A97FD95DC088711A5D0ECD + +I=68 +KEY=0000000000000000100000000000000000000000000000000000000000000000 +CT=3FFAEBF6B22CF1DC82AE17CD48175B01 + +I=69 +KEY=0000000000000000080000000000000000000000000000000000000000000000 +CT=BAFD52EFA15C248CCBF9757735E6B1CE + +I=70 +KEY=0000000000000000040000000000000000000000000000000000000000000000 +CT=7AF94BC018D9DDD4539D2DD1C6F4000F + +I=71 +KEY=0000000000000000020000000000000000000000000000000000000000000000 +CT=FE177AD61CA0FDB281086FBA8FE76803 + +I=72 +KEY=0000000000000000010000000000000000000000000000000000000000000000 +CT=74DBEA15E2E9285BAD163D7D534251B6 + +I=73 +KEY=0000000000000000008000000000000000000000000000000000000000000000 +CT=23DD21331B3A92F200FE56FF050FFE74 + +I=74 +KEY=0000000000000000004000000000000000000000000000000000000000000000 +CT=A69C5AA34AB20A858CAFA766EACED6D8 + +I=75 +KEY=0000000000000000002000000000000000000000000000000000000000000000 +CT=3F72BB4DF2A4F941A4A09CB78F04B97A + +I=76 +KEY=0000000000000000001000000000000000000000000000000000000000000000 +CT=72CC43577E1FD5FD14622D24D97FCDCC + +I=77 +KEY=0000000000000000000800000000000000000000000000000000000000000000 +CT=D83AF8EBE93E0B6B99CAFADE224937D1 + +I=78 +KEY=0000000000000000000400000000000000000000000000000000000000000000 +CT=44042329128D56CAA8D084C8BD769D1E + +I=79 +KEY=0000000000000000000200000000000000000000000000000000000000000000 +CT=14102D72290DE4F2C430ADD1ED64BA1D + +I=80 +KEY=0000000000000000000100000000000000000000000000000000000000000000 +CT=449124097B1ECD0AE7065206DF06F03C + +I=81 +KEY=0000000000000000000080000000000000000000000000000000000000000000 +CT=D060A99F8CC153A42E11E5F97BD7584A + +I=82 +KEY=0000000000000000000040000000000000000000000000000000000000000000 +CT=65605B3EA9261488D53E48602ADEA299 + +I=83 +KEY=0000000000000000000020000000000000000000000000000000000000000000 +CT=C5E5CAD7A208DE8EA6BE049EFE5C7346 + +I=84 +KEY=0000000000000000000010000000000000000000000000000000000000000000 +CT=4C280C46D2181646048DD5BC0C0831A5 + +I=85 +KEY=0000000000000000000008000000000000000000000000000000000000000000 +CT=5DD65CF37F2A0929559AABAFDA08E730 + +I=86 +KEY=0000000000000000000004000000000000000000000000000000000000000000 +CT=31F2335CAAF264172F69A693225E6D22 + +I=87 +KEY=0000000000000000000002000000000000000000000000000000000000000000 +CT=3E28B35F99A72662590DA96426DD377F + +I=88 +KEY=0000000000000000000001000000000000000000000000000000000000000000 +CT=570F40F5D7B20441486578ED344343BE + +I=89 +KEY=0000000000000000000000800000000000000000000000000000000000000000 +CT=C54308AD1C9E3B19F8B7417873045A8C + +I=90 +KEY=0000000000000000000000400000000000000000000000000000000000000000 +CT=CBF335E39CE13ADE2B696179E8FD0CE1 + +I=91 +KEY=0000000000000000000000200000000000000000000000000000000000000000 +CT=9C2FBF422355D8293083D51F4A3C18A9 + +I=92 +KEY=0000000000000000000000100000000000000000000000000000000000000000 +CT=5ED8B5A31ECEFAB16C9AA6986DA67BCE + +I=93 +KEY=0000000000000000000000080000000000000000000000000000000000000000 +CT=627815DCFC814ABC75900041B1DD7B59 + +I=94 +KEY=0000000000000000000000040000000000000000000000000000000000000000 +CT=9EF3E82A50A59F166260494F7A7F2CC3 + +I=95 +KEY=0000000000000000000000020000000000000000000000000000000000000000 +CT=878CD0D8D920888B5935D6C351128737 + +I=96 +KEY=0000000000000000000000010000000000000000000000000000000000000000 +CT=E44429474D6FC3084EB2A6B8B46AF754 + +I=97 +KEY=0000000000000000000000008000000000000000000000000000000000000000 +CT=EBAACF9641D54E1FB18D0A2BE4F19BE5 + +I=98 +KEY=0000000000000000000000004000000000000000000000000000000000000000 +CT=13B3BF497CEE780E123C7E193DEA3A01 + +I=99 +KEY=0000000000000000000000002000000000000000000000000000000000000000 +CT=6E8F381DE00A41161F0DF03B4155BFD4 + +I=100 +KEY=0000000000000000000000001000000000000000000000000000000000000000 +CT=35E4F29BBA2BAE01144910783C3FEF49 + +I=101 +KEY=0000000000000000000000000800000000000000000000000000000000000000 +CT=55B17BD66788CEAC366398A31F289FFB + +I=102 +KEY=0000000000000000000000000400000000000000000000000000000000000000 +CT=11341F56C0D6D1008D28741DAA7679CE + +I=103 +KEY=0000000000000000000000000200000000000000000000000000000000000000 +CT=4DF7253DF421D83358BDBE924745D98C + +I=104 +KEY=0000000000000000000000000100000000000000000000000000000000000000 +CT=BAE2EE651116D93EDC8E83B5F3347BE1 + +I=105 +KEY=0000000000000000000000000080000000000000000000000000000000000000 +CT=F9721ABD06709157183AF3965A659D9D + +I=106 +KEY=0000000000000000000000000040000000000000000000000000000000000000 +CT=19A1C252A613FE2860A4AE6D75CE6FA3 + +I=107 +KEY=0000000000000000000000000020000000000000000000000000000000000000 +CT=B5DDB2F5D9752C949FBDE3FFF5556C6E + +I=108 +KEY=0000000000000000000000000010000000000000000000000000000000000000 +CT=81B044FCFFC78ECCFCD171AAD0405C66 + +I=109 +KEY=0000000000000000000000000008000000000000000000000000000000000000 +CT=C640566D3C06020EB2C42F1D62E56A9B + +I=110 +KEY=0000000000000000000000000004000000000000000000000000000000000000 +CT=EA6C4BCF425291679FDFFD26A424FBCC + +I=111 +KEY=0000000000000000000000000002000000000000000000000000000000000000 +CT=57F6901465D9440D9F15EE2CBA5A4090 + +I=112 +KEY=0000000000000000000000000001000000000000000000000000000000000000 +CT=FBCFA74CADC7406260F63D96C8AAB6B1 + +I=113 +KEY=0000000000000000000000000000800000000000000000000000000000000000 +CT=DFF4F096CEA211D4BBDACA033D0EC7D1 + +I=114 +KEY=0000000000000000000000000000400000000000000000000000000000000000 +CT=1EE5190D551F0F42F675227A381296A9 + +I=115 +KEY=0000000000000000000000000000200000000000000000000000000000000000 +CT=F98E1905012E580F097623C10B93054F + +I=116 +KEY=0000000000000000000000000000100000000000000000000000000000000000 +CT=E7D43743D21DD3C9F168C86856558B9A + +I=117 +KEY=0000000000000000000000000000080000000000000000000000000000000000 +CT=632A9DDA730DAB67593C5D08D8AC1059 + +I=118 +KEY=0000000000000000000000000000040000000000000000000000000000000000 +CT=E084317000715B9057BC9DE9F3AB6124 + +I=119 +KEY=0000000000000000000000000000020000000000000000000000000000000000 +CT=61F9EF33A0BB4E666C2ED99101919FAB + +I=120 +KEY=0000000000000000000000000000010000000000000000000000000000000000 +CT=6DC1D68A11834657D46703C22578D59A + +I=121 +KEY=0000000000000000000000000000008000000000000000000000000000000000 +CT=53AC1548863D3D16F1D4DC7242E05F2C + +I=122 +KEY=0000000000000000000000000000004000000000000000000000000000000000 +CT=E82CD587A408306AD78CEAE0916B9F8C + +I=123 +KEY=0000000000000000000000000000002000000000000000000000000000000000 +CT=0FD2D40EA6AD17A3A767F0A8600D6295 + +I=124 +KEY=0000000000000000000000000000001000000000000000000000000000000000 +CT=AD84CC8255ADB39DFCA23F92761AE7E9 + +I=125 +KEY=0000000000000000000000000000000800000000000000000000000000000000 +CT=F4F20CF7D51BEE7DA024A2B11A7ECA0B + +I=126 +KEY=0000000000000000000000000000000400000000000000000000000000000000 +CT=5057691B85D9CE93A193214DB0A016B6 + +I=127 +KEY=0000000000000000000000000000000200000000000000000000000000000000 +CT=0F58C960876390BDEF4BB6BE95CAA1EE + +I=128 +KEY=0000000000000000000000000000000100000000000000000000000000000000 +CT=9A3E66EEBC21BC0BD9430B341EF465FA + +I=129 +KEY=0000000000000000000000000000000080000000000000000000000000000000 +CT=20415035F34B8BCBCB28ABF07F78F0D4 + +I=130 +KEY=0000000000000000000000000000000040000000000000000000000000000000 +CT=AC89FC7BA10479EBF10DE65BCEF89B3C + +I=131 +KEY=0000000000000000000000000000000020000000000000000000000000000000 +CT=068FA75A30BE443171AF3F6FEB1A20D2 + +I=132 +KEY=0000000000000000000000000000000010000000000000000000000000000000 +CT=50E02F213246C525A8C27700CA34B502 + +I=133 +KEY=0000000000000000000000000000000008000000000000000000000000000000 +CT=227DA47D5A0906DB3AB042BB0A695FB6 + +I=134 +KEY=0000000000000000000000000000000004000000000000000000000000000000 +CT=8663AC30ED12514F1DE46777F4514BFC + +I=135 +KEY=0000000000000000000000000000000002000000000000000000000000000000 +CT=A987D4BC12E1DE9F4B6DF43567C34A8B + +I=136 +KEY=0000000000000000000000000000000001000000000000000000000000000000 +CT=6D5A0370F599ACA605F63B04E5143D0C + +I=137 +KEY=0000000000000000000000000000000000800000000000000000000000000000 +CT=9809266E378B07B7AFDB3BAA97B7E442 + +I=138 +KEY=0000000000000000000000000000000000400000000000000000000000000000 +CT=8F753252B30CCCACE12D9A301F4D5090 + +I=139 +KEY=0000000000000000000000000000000000200000000000000000000000000000 +CT=032465F6C0CE34D41962F561692A1AFF + +I=140 +KEY=0000000000000000000000000000000000100000000000000000000000000000 +CT=C50E9AD5BEB8F3B00821DD47FF8AC093 + +I=141 +KEY=0000000000000000000000000000000000080000000000000000000000000000 +CT=9C6FEA3D46268D54A6829B2AD25BB276 + +I=142 +KEY=0000000000000000000000000000000000040000000000000000000000000000 +CT=0FD8575E87706F561343D7B3A41E044A + +I=143 +KEY=0000000000000000000000000000000000020000000000000000000000000000 +CT=BEE9BEB3739540D88CBCE77925F0A114 + +I=144 +KEY=0000000000000000000000000000000000010000000000000000000000000000 +CT=D24EAEE7FFFBAC3D6F26C2DCE0DCDE28 + +I=145 +KEY=0000000000000000000000000000000000008000000000000000000000000000 +CT=47771A90398FF0F7FA821C2F8F5E1398 + +I=146 +KEY=0000000000000000000000000000000000004000000000000000000000000000 +CT=4639741B6F84B135AD118C8249B64ED0 + +I=147 +KEY=0000000000000000000000000000000000002000000000000000000000000000 +CT=8EE5505EC85567697A3306F250A27720 + +I=148 +KEY=0000000000000000000000000000000000001000000000000000000000000000 +CT=7C8A19AC1AEFBC5E0119D91A5F05D4C2 + +I=149 +KEY=0000000000000000000000000000000000000800000000000000000000000000 +CT=5141B9B672E54773B672E3A6C424887B + +I=150 +KEY=0000000000000000000000000000000000000400000000000000000000000000 +CT=B5A2D3CD206653C6402F34FB0AE3613D + +I=151 +KEY=0000000000000000000000000000000000000200000000000000000000000000 +CT=0F5BD9408738231D114B0A82753279A3 + +I=152 +KEY=0000000000000000000000000000000000000100000000000000000000000000 +CT=FEF033FF4268EA487FC74C5E43A45338 + +I=153 +KEY=0000000000000000000000000000000000000080000000000000000000000000 +CT=A3EDC09DCD529B113910D904AD855581 + +I=154 +KEY=0000000000000000000000000000000000000040000000000000000000000000 +CT=AB8FBB6F27A0AC7C55B59FDD36B72F1C + +I=155 +KEY=0000000000000000000000000000000000000020000000000000000000000000 +CT=EEA44D5ED4D769CC930CD83D8999EC46 + +I=156 +KEY=0000000000000000000000000000000000000010000000000000000000000000 +CT=6972276803AE9AA7C6F431AB10979C34 + +I=157 +KEY=0000000000000000000000000000000000000008000000000000000000000000 +CT=86DEAA9F39244101818178474D7DBDE9 + +I=158 +KEY=0000000000000000000000000000000000000004000000000000000000000000 +CT=88C6B466EA361D662D8D08CBF181F4FE + +I=159 +KEY=0000000000000000000000000000000000000002000000000000000000000000 +CT=91AB2C6B7C63FF59F7CBEEBF91B20B95 + +I=160 +KEY=0000000000000000000000000000000000000001000000000000000000000000 +CT=2DFE6C146AD5B3D8C3C1718F13B48E01 + +I=161 +KEY=0000000000000000000000000000000000000000800000000000000000000000 +CT=C7CFF1623451711391A302EEC3584AAA + +I=162 +KEY=0000000000000000000000000000000000000000400000000000000000000000 +CT=089FE845CC05011686C66019D18BE050 + +I=163 +KEY=0000000000000000000000000000000000000000200000000000000000000000 +CT=08C8410B9B427211A67124B0DCCEAD48 + +I=164 +KEY=0000000000000000000000000000000000000000100000000000000000000000 +CT=8D91592F5566085254784606334D7629 + +I=165 +KEY=0000000000000000000000000000000000000000080000000000000000000000 +CT=3298FEAAF2E1201D6299FF8846639C97 + +I=166 +KEY=0000000000000000000000000000000000000000040000000000000000000000 +CT=C497CB9F0BDFE0EFC8C2F3F90760AA72 + +I=167 +KEY=0000000000000000000000000000000000000000020000000000000000000000 +CT=2788AFD046E0309CBE4424690DA2AB89 + +I=168 +KEY=0000000000000000000000000000000000000000010000000000000000000000 +CT=E9891707F25EF29FEE372890D4258982 + +I=169 +KEY=0000000000000000000000000000000000000000008000000000000000000000 +CT=DB041D94A23D45D4D4DCED5A030CAF61 + +I=170 +KEY=0000000000000000000000000000000000000000004000000000000000000000 +CT=FFAFDBF0ECB18DF9EA02C27077448E6D + +I=171 +KEY=0000000000000000000000000000000000000000002000000000000000000000 +CT=2DAAA42A7D0A1D3B0E4761D99CF2150A + +I=172 +KEY=0000000000000000000000000000000000000000001000000000000000000000 +CT=3B7A54CB7CF30ABE263DD6ED5BFE8D63 + +I=173 +KEY=0000000000000000000000000000000000000000000800000000000000000000 +CT=EEFA090174C590C448A55D43648F534A + +I=174 +KEY=0000000000000000000000000000000000000000000400000000000000000000 +CT=9E15798731ED42F43EA2740A691DA872 + +I=175 +KEY=0000000000000000000000000000000000000000000200000000000000000000 +CT=31FBD661540A5DEAAD1017CFD3909EC8 + +I=176 +KEY=0000000000000000000000000000000000000000000100000000000000000000 +CT=CDA9AE05F224140E28CB951721B44D6A + +I=177 +KEY=0000000000000000000000000000000000000000000080000000000000000000 +CT=0C5BC512C60A1EAC3434EFB1A8FBB182 + +I=178 +KEY=0000000000000000000000000000000000000000000040000000000000000000 +CT=AA863610DEEEEB62D045E87EA30B59B5 + +I=179 +KEY=0000000000000000000000000000000000000000000020000000000000000000 +CT=6AC2448DE568D279C7EEBE1DF403920C + +I=180 +KEY=0000000000000000000000000000000000000000000010000000000000000000 +CT=E2011E3D292B26888AE801215FD0CB40 + +I=181 +KEY=0000000000000000000000000000000000000000000008000000000000000000 +CT=E06F3E15EE3A61672D1C99BADE5B9DBE + +I=182 +KEY=0000000000000000000000000000000000000000000004000000000000000000 +CT=BB7027F0548CF6712CEB4C7A4B28E178 + +I=183 +KEY=0000000000000000000000000000000000000000000002000000000000000000 +CT=061EC21FB70FADBDF87C3BD2AE23825B + +I=184 +KEY=0000000000000000000000000000000000000000000001000000000000000000 +CT=4C21F26FE94ABBAC381352375314C3EB + +I=185 +KEY=0000000000000000000000000000000000000000000000800000000000000000 +CT=F7CEE6DD99909C2B569EEDA61ED8942E + +I=186 +KEY=0000000000000000000000000000000000000000000000400000000000000000 +CT=CE98C4A876C65E4CCB261EBB1D9DF7F5 + +I=187 +KEY=0000000000000000000000000000000000000000000000200000000000000000 +CT=A5491881CF833C3604ABC08044F402AC + +I=188 +KEY=0000000000000000000000000000000000000000000000100000000000000000 +CT=A1BA16E64CCCB3087D57A768507B0BFC + +I=189 +KEY=0000000000000000000000000000000000000000000000080000000000000000 +CT=D55951E202D2949EBD3BE43120C738BF + +I=190 +KEY=0000000000000000000000000000000000000000000000040000000000000000 +CT=EBB8E43069E69F450EFEC65DCD52B7FD + +I=191 +KEY=0000000000000000000000000000000000000000000000020000000000000000 +CT=2B292135663B4AA5ABFE9423D57E7EE9 + +I=192 +KEY=0000000000000000000000000000000000000000000000010000000000000000 +CT=E91BF974B3BE3AD966249D8655292A85 + +I=193 +KEY=0000000000000000000000000000000000000000000000008000000000000000 +CT=384365998EAA9562236CC58F6ADF9610 + +I=194 +KEY=0000000000000000000000000000000000000000000000004000000000000000 +CT=C2E997012AA3D4D8D359C9A947CBE69F + +I=195 +KEY=0000000000000000000000000000000000000000000000002000000000000000 +CT=F49421204148BA213BE87E2D5C22B0BF + +I=196 +KEY=0000000000000000000000000000000000000000000000001000000000000000 +CT=82ED0ED9953AA92E4DF30929CA65C00F + +I=197 +KEY=0000000000000000000000000000000000000000000000000800000000000000 +CT=291EB1D11653C8479437C74A977F5106 + +I=198 +KEY=0000000000000000000000000000000000000000000000000400000000000000 +CT=BCB997B1939B8983ABD550D6025683E3 + +I=199 +KEY=0000000000000000000000000000000000000000000000000200000000000000 +CT=1FBA2592C6F489775CAADA71F9B983E9 + +I=200 +KEY=0000000000000000000000000000000000000000000000000100000000000000 +CT=969F66F217AF1A3DB9E41C1B29039824 + +I=201 +KEY=0000000000000000000000000000000000000000000000000080000000000000 +CT=A54BB7D6B17E423AC0A7744C19073CB8 + +I=202 +KEY=0000000000000000000000000000000000000000000000000040000000000000 +CT=B0AC6E6578D1021F47DCF9748A32EAD5 + +I=203 +KEY=0000000000000000000000000000000000000000000000000020000000000000 +CT=B87B361C3B7B194C77A4358D4669153E + +I=204 +KEY=0000000000000000000000000000000000000000000000000010000000000000 +CT=46A133847F96EAA8282A799DC8899D58 + +I=205 +KEY=0000000000000000000000000000000000000000000000000008000000000000 +CT=2265EC3A9F2D5C9547A091CC8CFB18EA + +I=206 +KEY=0000000000000000000000000000000000000000000000000004000000000000 +CT=54CBF3A6FC4FE56D426117AA1FFD1DDE + +I=207 +KEY=0000000000000000000000000000000000000000000000000002000000000000 +CT=5312877CCEAB6CFB0905394A370A8003 + +I=208 +KEY=0000000000000000000000000000000000000000000000000001000000000000 +CT=7190BD6EC613FE38B84ECFE28F702FE4 + +I=209 +KEY=0000000000000000000000000000000000000000000000000000800000000000 +CT=D1FA5B9CA89A43B04C05F0EF29EF68CD + +I=210 +KEY=0000000000000000000000000000000000000000000000000000400000000000 +CT=808285751548ED934FD1056D2D9AE8BA + +I=211 +KEY=0000000000000000000000000000000000000000000000000000200000000000 +CT=2758DEF3E7B95A9AE89777BE64D5A6CF + +I=212 +KEY=0000000000000000000000000000000000000000000000000000100000000000 +CT=07D81F87DB3E0ACC82B01E08FB22F3C1 + +I=213 +KEY=0000000000000000000000000000000000000000000000000000080000000000 +CT=8DA250E5553D650711A75EE1CB4FD1C7 + +I=214 +KEY=0000000000000000000000000000000000000000000000000000040000000000 +CT=A93D946BD0E87F32719DF5F158CEE669 + +I=215 +KEY=0000000000000000000000000000000000000000000000000000020000000000 +CT=03945236EC2A4D4EAF30B8ABEB54330D + +I=216 +KEY=0000000000000000000000000000000000000000000000000000010000000000 +CT=11CC35301F24B79DDE31AEA2D1354F88 + +I=217 +KEY=0000000000000000000000000000000000000000000000000000008000000000 +CT=E73715B3E8D9A290F44AE6FFBF247E5D + +I=218 +KEY=0000000000000000000000000000000000000000000000000000004000000000 +CT=7345E07732B71CB158BBF64CCA5C5B96 + +I=219 +KEY=0000000000000000000000000000000000000000000000000000002000000000 +CT=6E128F296D24705A1924FD9B70C4ED04 + +I=220 +KEY=0000000000000000000000000000000000000000000000000000001000000000 +CT=95A789776F036783FBD330947083F54F + +I=221 +KEY=0000000000000000000000000000000000000000000000000000000800000000 +CT=360DEC2533EA4AA2E3E54FD3DE2906EB + +I=222 +KEY=0000000000000000000000000000000000000000000000000000000400000000 +CT=E68EFD7FECF4D601EA22727BD764965B + +I=223 +KEY=0000000000000000000000000000000000000000000000000000000200000000 +CT=9065C64A8BFF44AC33EDBB611CF83D7B + +I=224 +KEY=0000000000000000000000000000000000000000000000000000000100000000 +CT=8F33C8DF2A7A51CE8090E8F123BC3723 + +I=225 +KEY=0000000000000000000000000000000000000000000000000000000080000000 +CT=807F391FFBA8291BA625623210F99018 + +I=226 +KEY=0000000000000000000000000000000000000000000000000000000040000000 +CT=5E8B3F3A701522CE5CAA761C929D6292 + +I=227 +KEY=0000000000000000000000000000000000000000000000000000000020000000 +CT=3BA404DC38735A78289E3809E8364835 + +I=228 +KEY=0000000000000000000000000000000000000000000000000000000010000000 +CT=D23BEDBAD229F8305DC425B6B759DCC9 + +I=229 +KEY=0000000000000000000000000000000000000000000000000000000008000000 +CT=44880F21CF5913040AE376AEE2A10AD8 + +I=230 +KEY=0000000000000000000000000000000000000000000000000000000004000000 +CT=9BC98E29D057C0E828C3B5CCE69256C1 + +I=231 +KEY=0000000000000000000000000000000000000000000000000000000002000000 +CT=B293CC7A975DA141A68279368057CC41 + +I=232 +KEY=0000000000000000000000000000000000000000000000000000000001000000 +CT=8D60FB87ACD91385B313BE5F1D7BD30F + +I=233 +KEY=0000000000000000000000000000000000000000000000000000000000800000 +CT=2C8E56132D70291B303C48FDF75543CD + +I=234 +KEY=0000000000000000000000000000000000000000000000000000000000400000 +CT=D1F80035B826791F6CE4E59B7DB1BB0D + +I=235 +KEY=0000000000000000000000000000000000000000000000000000000000200000 +CT=42CE6224FC36469339A133DD08173BD4 + +I=236 +KEY=0000000000000000000000000000000000000000000000000000000000100000 +CT=61817155EA41BCBA2AF7F06AE7CBF585 + +I=237 +KEY=0000000000000000000000000000000000000000000000000000000000080000 +CT=D1923A9866068D2EF5FB77D57C3315B6 + +I=238 +KEY=0000000000000000000000000000000000000000000000000000000000040000 +CT=B37CBDB5D719F49691CA968EF2E84140 + +I=239 +KEY=0000000000000000000000000000000000000000000000000000000000020000 +CT=EC974E653A055D7F8F22171030F68E1D + +I=240 +KEY=0000000000000000000000000000000000000000000000000000000000010000 +CT=DDE5D3B9AAD9C32213BB3675A822499C + +I=241 +KEY=0000000000000000000000000000000000000000000000000000000000008000 +CT=D3B6E9216EA1AE57EB1C628A3C38AB78 + +I=242 +KEY=0000000000000000000000000000000000000000000000000000000000004000 +CT=82C99ECC69472B7E96324B042AE8B87A + +I=243 +KEY=0000000000000000000000000000000000000000000000000000000000002000 +CT=97144DC5338C43600F84439C0AA0D147 + +I=244 +KEY=0000000000000000000000000000000000000000000000000000000000001000 +CT=400AC4A0BBADA1DB2121EB144C7E5209 + +I=245 +KEY=0000000000000000000000000000000000000000000000000000000000000800 +CT=EFD9D550EB419ED278F4885A490AB54C + +I=246 +KEY=0000000000000000000000000000000000000000000000000000000000000400 +CT=2AB7816E149B7C0404C88A8857793670 + +I=247 +KEY=0000000000000000000000000000000000000000000000000000000000000200 +CT=5B591DFF9E8DEE15BAD24C025DBCA481 + +I=248 +KEY=0000000000000000000000000000000000000000000000000000000000000100 +CT=0C06633E30721C3749F49AD8CBF2B754 + +I=249 +KEY=0000000000000000000000000000000000000000000000000000000000000080 +CT=96D6D31A41B5123B2035FD91A921D4CA + +I=250 +KEY=0000000000000000000000000000000000000000000000000000000000000040 +CT=E7F6C34D86668BC2805CA7793C5E86AD + +I=251 +KEY=0000000000000000000000000000000000000000000000000000000000000020 +CT=F46DFF5FF500D6879C4D3E45CF0CF0F3 + +I=252 +KEY=0000000000000000000000000000000000000000000000000000000000000010 +CT=60D842D9C61DA7495C116197B7CECBBE + +I=253 +KEY=0000000000000000000000000000000000000000000000000000000000000008 +CT=D45B24EDB673353EBDF248B8FA06B67A + +I=254 +KEY=0000000000000000000000000000000000000000000000000000000000000004 +CT=119EAEBCC165D0BD02C0D35DC82EF992 + +I=255 +KEY=0000000000000000000000000000000000000000000000000000000000000002 +CT=E673143680414ADA301D0ED34626B9FE + +I=256 +KEY=0000000000000000000000000000000000000000000000000000000000000001 +CT=6B6CFE160A6263631B292F879EEFF926 + +========== \ No newline at end of file diff -urN lin.2.4.3/crypto/testing/serpent_ecb_vk.txt int.2.4.3/crypto/testing/serpent_ecb_vk.txt --- lin.2.4.3/crypto/testing/serpent_ecb_vk.txt Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/serpent_ecb_vk.txt Mon Apr 2 18:37:26 2001 @@ -0,0 +1,2334 @@ +========================= + +FILENAME: "ecb_vk.txt" + +Electronic Codebook (ECB) Mode +Variable Key Known Answer Tests + +Algorithm Name: Serpent +Principal Submitter: Ross Anderson, Eli Biham, Lars Knudsen + +========== + +KEYSIZE=128 + +PT=00000000000000000000000000000000 + +I=1 +KEY=80000000000000000000000000000000 +CT=49afbfad9d5a34052cd8ffa5986bd2dd + +I=2 +KEY=40000000000000000000000000000000 +CT=0c1e2e4e79bd02c2501096e79b5e73fa + +I=3 +KEY=20000000000000000000000000000000 +CT=d769e71b31f4ae12e14cdc48238d2d7b + +I=4 +KEY=10000000000000000000000000000000 +CT=bd0276d6be072cc00b3d426130bf355f + +I=5 +KEY=08000000000000000000000000000000 +CT=c191e2121daea18ec30957bbce199a8c + +I=6 +KEY=04000000000000000000000000000000 +CT=afdffc707b4c6890fa9eec5dcf8c9cd6 + +I=7 +KEY=02000000000000000000000000000000 +CT=7ed064ab9270ede51862d2a4775eb639 + +I=8 +KEY=01000000000000000000000000000000 +CT=e108b719d47da77d82b2811f09c768f6 + +I=9 +KEY=00800000000000000000000000000000 +CT=46d78ac926c7fd72aeb6e662d6be0671 + +I=10 +KEY=00400000000000000000000000000000 +CT=b86ddb30f8bacec337679bb112a33a04 + +I=11 +KEY=00200000000000000000000000000000 +CT=d55f0d5779c68cb6db174f85006f5ef9 + +I=12 +KEY=00100000000000000000000000000000 +CT=9cce4fe5fc2c3f58007049ff81ae3fd2 + +I=13 +KEY=00080000000000000000000000000000 +CT=e8db9396961180f9515acedbc47d5cef + +I=14 +KEY=00040000000000000000000000000000 +CT=abcc122ccc4b2b00a40e266c54f0d234 + +I=15 +KEY=00020000000000000000000000000000 +CT=137ef0814dc6171858a93557e97b78b3 + +I=16 +KEY=00010000000000000000000000000000 +CT=1aeddc72581c90d87f6f01e431dc31eb + +I=17 +KEY=00008000000000000000000000000000 +CT=9543bc267111fbdb019c00d0d907d643 + +I=18 +KEY=00004000000000000000000000000000 +CT=2269c1f5dbeb2ced1932a60dcf273b46 + +I=19 +KEY=00002000000000000000000000000000 +CT=bb49509c9b79d012cb04ab565534df90 + +I=20 +KEY=00001000000000000000000000000000 +CT=4d0f02eb268acfaec89115f7f761c805 + +I=21 +KEY=00000800000000000000000000000000 +CT=9288439abb3beb346b7fafadb897dd11 + +I=22 +KEY=00000400000000000000000000000000 +CT=dc348afd3ee54b134f8f9f5045e87171 + +I=23 +KEY=00000200000000000000000000000000 +CT=52d8aa93f95a76980a42960a407b4e86 + +I=24 +KEY=00000100000000000000000000000000 +CT=ea977f02d0f2b330dc33aa53055af7b8 + +I=25 +KEY=00000080000000000000000000000000 +CT=8dd4bdf3874ed531036747e0b1b93f57 + +I=26 +KEY=00000040000000000000000000000000 +CT=b8dba7c86499bff611935cede230cf03 + +I=27 +KEY=00000020000000000000000000000000 +CT=32cce0726492e1afbc3a001f655c73ed + +I=28 +KEY=00000010000000000000000000000000 +CT=807570b6677b0fbdf7e7cabcd5dd0c97 + +I=29 +KEY=00000008000000000000000000000000 +CT=26381f839c8d92efe1c29df688571c6d + +I=30 +KEY=00000004000000000000000000000000 +CT=da6e8ca3ec924a0a6c7b704b56c46783 + +I=31 +KEY=00000002000000000000000000000000 +CT=cc6e7070e5ac70cd9664fda7bb505df2 + +I=32 +KEY=00000001000000000000000000000000 +CT=8c41cd11c3dc2333dc96ddf74d85430c + +I=33 +KEY=00000000800000000000000000000000 +CT=a006685e857f4c2a70fcea63ed27888f + +I=34 +KEY=00000000400000000000000000000000 +CT=f6e94cd2ef8eb4886893458d49f84fdd + +I=35 +KEY=00000000200000000000000000000000 +CT=1f654042740ca63ad906c1b7bcf18bde + +I=36 +KEY=00000000100000000000000000000000 +CT=340fbc9913fc30b3a867921b6acb45fc + +I=37 +KEY=00000000080000000000000000000000 +CT=b2b0488b1c9dfa4d66fcaeeb4c29ec9e + +I=38 +KEY=00000000040000000000000000000000 +CT=a35d40c8cfe4b26d0047e1661d5bfbca + +I=39 +KEY=00000000020000000000000000000000 +CT=97f91ad53e32fd33198ccb9c553cf4b9 + +I=40 +KEY=00000000010000000000000000000000 +CT=7adeec246ef1a8b16caa7aeb85441dd1 + +I=41 +KEY=00000000008000000000000000000000 +CT=12e12c07623a87b76100474804b4f7a4 + +I=42 +KEY=00000000004000000000000000000000 +CT=d24a5c39b10157c7f957f51bd35adf80 + +I=43 +KEY=00000000002000000000000000000000 +CT=54593378469cea645783a4ab0847ce46 + +I=44 +KEY=00000000001000000000000000000000 +CT=3ac3fce2fbdd176ff7f659ee19bcba72 + +I=45 +KEY=00000000000800000000000000000000 +CT=82c4c432a703271e6f4bda3f174063e7 + +I=46 +KEY=00000000000400000000000000000000 +CT=58d9b1ac0a6dad03ede51d30ac77c579 + +I=47 +KEY=00000000000200000000000000000000 +CT=8a8f0c4f316232a05eb611358fd7a8a2 + +I=48 +KEY=00000000000100000000000000000000 +CT=afae1db5edb3f7203577b37ce8e4876c + +I=49 +KEY=00000000000080000000000000000000 +CT=07112de84d0759a816f620dc786e648d + +I=50 +KEY=00000000000040000000000000000000 +CT=c3f4922db4541025e4c162acaae48de9 + +I=51 +KEY=00000000000020000000000000000000 +CT=47836c92ed4fa66f1c6459478f45fcb0 + +I=52 +KEY=00000000000010000000000000000000 +CT=d25965deadcbeb3c9b8ee599fa81f361 + +I=53 +KEY=00000000000008000000000000000000 +CT=7d86a4cd06353c4a73022b2e75af7e2c + +I=54 +KEY=00000000000004000000000000000000 +CT=bf1bdfdb65e06f4d19c8b11a4e280f60 + +I=55 +KEY=00000000000002000000000000000000 +CT=6845080536e71bd50c9db865bac484db + +I=56 +KEY=00000000000001000000000000000000 +CT=37004f392802c0ade017bc4a1ac4754c + +I=57 +KEY=00000000000000800000000000000000 +CT=501f9de66d9b8048c9a2657bee750323 + +I=58 +KEY=00000000000000400000000000000000 +CT=edffad56dbd99444dbf01f5d347fef94 + +I=59 +KEY=00000000000000200000000000000000 +CT=afe80d1a72308a41a10bc463507a27ce + +I=60 +KEY=00000000000000100000000000000000 +CT=c848af4b9d8eef03e085ea6331e14fbf + +I=61 +KEY=00000000000000080000000000000000 +CT=5c0547e4ca27c23506eb54dbf1f9f9c8 + +I=62 +KEY=00000000000000040000000000000000 +CT=9eea58726c084358c80beace0ba9316f + +I=63 +KEY=00000000000000020000000000000000 +CT=c3f8221b5e849c830bbc30697cfc4e33 + +I=64 +KEY=00000000000000010000000000000000 +CT=7d10842f40364fa264c876e5f2f9921e + +I=65 +KEY=00000000000000008000000000000000 +CT=e25769f083838d9ba05dbabd0adfb8a5 + +I=66 +KEY=00000000000000004000000000000000 +CT=08cb3d4622c7974eff08da8a346f4b34 + +I=67 +KEY=00000000000000002000000000000000 +CT=3ff6bcf81372f04eb8a1e082042ab5aa + +I=68 +KEY=00000000000000001000000000000000 +CT=0198c38d19e4579133178aa8e4dd77e4 + +I=69 +KEY=00000000000000000800000000000000 +CT=dffdd86a4c6b22b399f4ccbedf1c4033 + +I=70 +KEY=00000000000000000400000000000000 +CT=b10b0e2bde47b1129c75b5838627062c + +I=71 +KEY=00000000000000000200000000000000 +CT=ec608bdd3f215e9f73b57183dc7cb6b2 + +I=72 +KEY=00000000000000000100000000000000 +CT=ee7b79d43681851ba43510b25fedac83 + +I=73 +KEY=00000000000000000080000000000000 +CT=1906141e04ad2a584cef3a93dc13621f + +I=74 +KEY=00000000000000000040000000000000 +CT=7590c1bb23c24da9cd0f10040ee1b732 + +I=75 +KEY=00000000000000000020000000000000 +CT=c581396fbdfecf75f55ce431879cfa72 + +I=76 +KEY=00000000000000000010000000000000 +CT=93e88288dc748f6fa096bd2f5b35e9ae + +I=77 +KEY=00000000000000000008000000000000 +CT=b1f29150a0c4c5fdb8d20d2dc52661b5 + +I=78 +KEY=00000000000000000004000000000000 +CT=e5ee3a9b5f38d0dd5db7be33f1b6f56f + +I=79 +KEY=00000000000000000002000000000000 +CT=db980feddfe7c14e3ff9b3e4bcc54165 + +I=80 +KEY=00000000000000000001000000000000 +CT=1d085c7a534503011e3f248a0dd69ebf + +I=81 +KEY=00000000000000000000800000000000 +CT=578aa13f4284049cf77ddb639e9d6777 + +I=82 +KEY=00000000000000000000400000000000 +CT=7f725360786ca59b82bf2673b0918054 + +I=83 +KEY=00000000000000000000200000000000 +CT=fb21f98e591af7f7d6ee6ee04e70faa8 + +I=84 +KEY=00000000000000000000100000000000 +CT=dc73336c2d3056fb56c11a09ca147f62 + +I=85 +KEY=00000000000000000000080000000000 +CT=f51c58c6fe6a0ebc9c9109eb97ab2cbc + +I=86 +KEY=00000000000000000000040000000000 +CT=081d42e412311642222b52cff05d7fcc + +I=87 +KEY=00000000000000000000020000000000 +CT=e50c69c214a093004fe6f107bfc34a08 + +I=88 +KEY=00000000000000000000010000000000 +CT=c5b57a240a095310ba40b7747459c6d3 + +I=89 +KEY=00000000000000000000008000000000 +CT=b1110d1bc986bfa5acdbf1231b913574 + +I=90 +KEY=00000000000000000000004000000000 +CT=23f5505f1badb259826d8ab7e59ce579 + +I=91 +KEY=00000000000000000000002000000000 +CT=e5ddaabeaf6cae289174d9839165f372 + +I=92 +KEY=00000000000000000000001000000000 +CT=c44e60a86495404c6ea369d6a26edd77 + +I=93 +KEY=00000000000000000000000800000000 +CT=273d4e769fceb754be0ce32a7eecd427 + +I=94 +KEY=00000000000000000000000400000000 +CT=239d65850b45fafe8bd0982492c4680d + +I=95 +KEY=00000000000000000000000200000000 +CT=5db91003c20f59ea498576f2efce4f6c + +I=96 +KEY=00000000000000000000000100000000 +CT=3bc4e9986a9576474f947ee49b9046fc + +I=97 +KEY=00000000000000000000000080000000 +CT=2aa67c0d7f134c3ee48b5a945a94aa50 + +I=98 +KEY=00000000000000000000000040000000 +CT=f6f6f7dd1920f20aeb08844c8c811175 + +I=99 +KEY=00000000000000000000000020000000 +CT=0d3313cbc0c84fc2747900009ba06bd4 + +I=100 +KEY=00000000000000000000000010000000 +CT=7385cbac63b11c5adaf763c9c652e317 + +I=101 +KEY=00000000000000000000000008000000 +CT=80a74048515d7162287b0f4d991ced6c + +I=102 +KEY=00000000000000000000000004000000 +CT=7d3abfdd15cfd8c0a989fc7a151e35ad + +I=103 +KEY=00000000000000000000000002000000 +CT=0336740082e8c5a85d32dcba80b0af79 + +I=104 +KEY=00000000000000000000000001000000 +CT=fdaa7495db62ec0c22cae25fa2fe26d3 + +I=105 +KEY=00000000000000000000000000800000 +CT=da10538ff08a81323b8e0bdab580c9a3 + +I=106 +KEY=00000000000000000000000000400000 +CT=3aa421d16db303cd32c58261d71f6512 + +I=107 +KEY=00000000000000000000000000200000 +CT=90f78d5b05e1ca8e0b34220760a4916d + +I=108 +KEY=00000000000000000000000000100000 +CT=03a35d1b2758a91907430778c9491f2b + +I=109 +KEY=00000000000000000000000000080000 +CT=b729c8708dc7cd28d21eaa12dcda299e + +I=110 +KEY=00000000000000000000000000040000 +CT=4b30d94af1cb3be76fb98ef878f68f5b + +I=111 +KEY=00000000000000000000000000020000 +CT=5b3eef9c55455e7347e533bb6c5f8b15 + +I=112 +KEY=00000000000000000000000000010000 +CT=8e01b7823aacf4f23552ac40c03afa8e + +I=113 +KEY=00000000000000000000000000008000 +CT=f9d23961d0661eebde0f824e47ceba97 + +I=114 +KEY=00000000000000000000000000004000 +CT=385ac4a1512edbecae3527ec49b84c11 + +I=115 +KEY=00000000000000000000000000002000 +CT=4561dab55aa5b7625a6961fed1ab2614 + +I=116 +KEY=00000000000000000000000000001000 +CT=40778dfdd63cbe86812440519715c680 + +I=117 +KEY=00000000000000000000000000000800 +CT=93c6789d563e3df7d74ea3523333bdcf + +I=118 +KEY=00000000000000000000000000000400 +CT=7f47b8dbe11e385f07b6efb20a35045f + +I=119 +KEY=00000000000000000000000000000200 +CT=66ea39db24ed91686ead33208de35ccf + +I=120 +KEY=00000000000000000000000000000100 +CT=4c42473dcc65b14088257f8744af633e + +I=121 +KEY=00000000000000000000000000000080 +CT=3ddabfc006daab06462af4ef81544e26 + +I=122 +KEY=00000000000000000000000000000040 +CT=24850e35c86eac07349927c73b1b234a + +I=123 +KEY=00000000000000000000000000000020 +CT=568db914df56817d3c85fde9f96932e0 + +I=124 +KEY=00000000000000000000000000000010 +CT=8fc4ac4d7589bad559ac81301c1898a7 + +I=125 +KEY=00000000000000000000000000000008 +CT=15dafb79236ac6f5f361f80d5255b334 + +I=126 +KEY=00000000000000000000000000000004 +CT=4ab0a08142246b0c5175116b8fbb865e + +I=127 +KEY=00000000000000000000000000000002 +CT=a143e86d9bd26437f1c5a9c7903121b9 + +I=128 +KEY=00000000000000000000000000000001 +CT=c8466045b204026fffd194320355ca4e + +========== + +KEYSIZE=192 + +PT=00000000000000000000000000000000 + +I=1 +KEY=800000000000000000000000000000000000000000000000 +CT=e78e5402c7195568ac3678f7a3f60c66 + +I=2 +KEY=400000000000000000000000000000000000000000000000 +CT=23645a0ddd4b0f8b73b6215ea938a59e + +I=3 +KEY=200000000000000000000000000000000000000000000000 +CT=95d262643c94cab3e5830fc90a3ad119 + +I=4 +KEY=100000000000000000000000000000000000000000000000 +CT=2a66ae878814c427cd1be1b929d69d1b + +I=5 +KEY=080000000000000000000000000000000000000000000000 +CT=c1f74b3c5df4b485118b6901a22bef14 + +I=6 +KEY=040000000000000000000000000000000000000000000000 +CT=abe310b271d2f83f15ddd70139a8f18a + +I=7 +KEY=020000000000000000000000000000000000000000000000 +CT=8072229836095e09a76de47ff4b90942 + +I=8 +KEY=010000000000000000000000000000000000000000000000 +CT=463b70d45332c3d5afc57cac1785055d + +I=9 +KEY=008000000000000000000000000000000000000000000000 +CT=5587b5bcb9ee5a28ba2bacc418005240 + +I=10 +KEY=004000000000000000000000000000000000000000000000 +CT=735ab1e66239c7882ab3b52623e812fb + +I=11 +KEY=002000000000000000000000000000000000000000000000 +CT=2c899a7e69368ddfd435b90fb54a5110 + +I=12 +KEY=001000000000000000000000000000000000000000000000 +CT=058a2258fec39fd98caee246e83fba23 + +I=13 +KEY=000800000000000000000000000000000000000000000000 +CT=29de401b293b69509f1f26172b99e768 + +I=14 +KEY=000400000000000000000000000000000000000000000000 +CT=33fda1c0a7f752f26f7eef1de21af616 + +I=15 +KEY=000200000000000000000000000000000000000000000000 +CT=90144147c0838e88c081c08c806d3879 + +I=16 +KEY=000100000000000000000000000000000000000000000000 +CT=598957d7605d027c870c3968de1c4281 + +I=17 +KEY=000080000000000000000000000000000000000000000000 +CT=252e46bf0615ac356a4350f223d1e48b + +I=18 +KEY=000040000000000000000000000000000000000000000000 +CT=cc2447d57f2a53f825c167bffc7e00fd + +I=19 +KEY=000020000000000000000000000000000000000000000000 +CT=7100c3404f1394015041d22fe81d66d6 + +I=20 +KEY=000010000000000000000000000000000000000000000000 +CT=9df94fccb015d30e3b86aeca1c393ab0 + +I=21 +KEY=000008000000000000000000000000000000000000000000 +CT=4844e0e701a2a85dbac818f1ab2c14b5 + +I=22 +KEY=000004000000000000000000000000000000000000000000 +CT=4ce4e7e3104510c0ec02486e618b072b + +I=23 +KEY=000002000000000000000000000000000000000000000000 +CT=88f251a4fd7939dab8e3547140958ace + +I=24 +KEY=000001000000000000000000000000000000000000000000 +CT=d752effc32d3d7ba1217a3a6759d5def + +I=25 +KEY=000000800000000000000000000000000000000000000000 +CT=6c03785cc372b967a9ae4e7e153064ce + +I=26 +KEY=000000400000000000000000000000000000000000000000 +CT=f356816a32dabc65bf3361957e131771 + +I=27 +KEY=000000200000000000000000000000000000000000000000 +CT=b1700202c5b1c1fa94d756db5b160d7d + +I=28 +KEY=000000100000000000000000000000000000000000000000 +CT=d2dd321ee0d420bde198cda1c84de12a + +I=29 +KEY=000000080000000000000000000000000000000000000000 +CT=0e53163d96ceaec6073786bfe36b26ae + +I=30 +KEY=000000040000000000000000000000000000000000000000 +CT=607e94a93e5ed0e8d4657697af12263a + +I=31 +KEY=000000020000000000000000000000000000000000000000 +CT=4fe24da11e3b2e528689b4d72a1f4995 + +I=32 +KEY=000000010000000000000000000000000000000000000000 +CT=c89dc4741fba46d09f0c909e415d1e8a + +I=33 +KEY=000000008000000000000000000000000000000000000000 +CT=927998642db52db45aa726f55a9807e4 + +I=34 +KEY=000000004000000000000000000000000000000000000000 +CT=8a9da14de34dfcd06af101411ead6e6c + +I=35 +KEY=000000002000000000000000000000000000000000000000 +CT=58d05e0e1c2217640ba965d33642e784 + +I=36 +KEY=000000001000000000000000000000000000000000000000 +CT=6b329fe46eb5523e2360a28956d4c07d + +I=37 +KEY=000000000800000000000000000000000000000000000000 +CT=80765c8e114a3f19ac86e68ac5e69ee6 + +I=38 +KEY=000000000400000000000000000000000000000000000000 +CT=9e111a3bc422a8d3c8372a7b214dcf7f + +I=39 +KEY=000000000200000000000000000000000000000000000000 +CT=43a392e7c0a7441e5fd4b8f53b04376d + +I=40 +KEY=000000000100000000000000000000000000000000000000 +CT=321c8906902c819fee83ac1ca3de46ed + +I=41 +KEY=000000000080000000000000000000000000000000000000 +CT=961146f0e1d1618b4aa3dddfc407bcda + +I=42 +KEY=000000000040000000000000000000000000000000000000 +CT=35ff30c0f11225b0fbdeee829e1033e7 + +I=43 +KEY=000000000020000000000000000000000000000000000000 +CT=c14f87b211633d3f3b7b297fe1f53b9f + +I=44 +KEY=000000000010000000000000000000000000000000000000 +CT=75e05358f1d0798f359c29a6ed9327cf + +I=45 +KEY=000000000008000000000000000000000000000000000000 +CT=ce93218acbc0c73f0b2be8082ed9fc4c + +I=46 +KEY=000000000004000000000000000000000000000000000000 +CT=54a73a50cda285a429016cc5086d9f40 + +I=47 +KEY=000000000002000000000000000000000000000000000000 +CT=73de0beacbf4cd85e4e067226e94804d + +I=48 +KEY=000000000001000000000000000000000000000000000000 +CT=8851067bedfa997f5feb63a07676e0ea + +I=49 +KEY=000000000000800000000000000000000000000000000000 +CT=3438f325f239c49b2a21b5140aeb83a7 + +I=50 +KEY=000000000000400000000000000000000000000000000000 +CT=e93a4212daaaaa91d2628bbffa824252 + +I=51 +KEY=000000000000200000000000000000000000000000000000 +CT=660bef72e98bc11e63944336550e6d30 + +I=52 +KEY=000000000000100000000000000000000000000000000000 +CT=39ebf5fc10b7bb85fe45473508bad887 + +I=53 +KEY=000000000000080000000000000000000000000000000000 +CT=c97a923736e49d536ba33bf4502f4d89 + +I=54 +KEY=000000000000040000000000000000000000000000000000 +CT=352acb145387dfa72b05b0dd79199c47 + +I=55 +KEY=000000000000020000000000000000000000000000000000 +CT=73682433c31b7492335615ef9f39e5e0 + +I=56 +KEY=000000000000010000000000000000000000000000000000 +CT=2f3166a3e2ea671397d852958b3cf986 + +I=57 +KEY=000000000000008000000000000000000000000000000000 +CT=84f405f8270c1c58c0fe19a564df189f + +I=58 +KEY=000000000000004000000000000000000000000000000000 +CT=8e768cbf45b91029f767db75843ebd53 + +I=59 +KEY=000000000000002000000000000000000000000000000000 +CT=b1927686ab4297fb6aa8eface91b6c45 + +I=60 +KEY=000000000000001000000000000000000000000000000000 +CT=2192b94b157c15177f4bb4dcbd6eee89 + +I=61 +KEY=000000000000000800000000000000000000000000000000 +CT=2b596f7f119a2f59179f522c7ea1ec51 + +I=62 +KEY=000000000000000400000000000000000000000000000000 +CT=56c5e66ea1d98ea8dd9906d9d73610a5 + +I=63 +KEY=000000000000000200000000000000000000000000000000 +CT=6ad3b33d2ede5b781d136fcea356c807 + +I=64 +KEY=000000000000000100000000000000000000000000000000 +CT=5585ab166028e001379c6d2cbd3169a0 + +I=65 +KEY=000000000000000080000000000000000000000000000000 +CT=167da93e33b3c95fe3f7a8526668073a + +I=66 +KEY=000000000000000040000000000000000000000000000000 +CT=dfb3528fca5f163952a30b34108300fd + +I=67 +KEY=000000000000000020000000000000000000000000000000 +CT=1503116c28b3b82ff9f0db169d857efc + +I=68 +KEY=000000000000000010000000000000000000000000000000 +CT=7b4dac54ba36d4ab88ef3356ebcbc086 + +I=69 +KEY=000000000000000008000000000000000000000000000000 +CT=dcea72fe37b7eee1837be0eaa4ce66ca + +I=70 +KEY=000000000000000004000000000000000000000000000000 +CT=c9da8b98ef3157d221c06d6b95549701 + +I=71 +KEY=000000000000000002000000000000000000000000000000 +CT=e83cabd11d2f8271a117c7c65cc66e78 + +I=72 +KEY=000000000000000001000000000000000000000000000000 +CT=c462f0880d5ae2411dc6f1a68873abde + +I=73 +KEY=000000000000000000800000000000000000000000000000 +CT=fe0089c7e6c657d1b71cf467d4f58df0 + +I=74 +KEY=000000000000000000400000000000000000000000000000 +CT=49932b6abd5601fda5c8403e9cb92502 + +I=75 +KEY=000000000000000000200000000000000000000000000000 +CT=ec725bcf1a0133a45aeb7a5a72898d6b + +I=76 +KEY=000000000000000000100000000000000000000000000000 +CT=6ece8cb7f45ba9d63e152399f6558b6a + +I=77 +KEY=000000000000000000080000000000000000000000000000 +CT=9aa8f493830fd6ede37e7803f9869b19 + +I=78 +KEY=000000000000000000040000000000000000000000000000 +CT=70856a78e1bb29b9d00108361683e0bf + +I=79 +KEY=000000000000000000020000000000000000000000000000 +CT=3bec70b8070fc514b3de12bfcd6e7b88 + +I=80 +KEY=000000000000000000010000000000000000000000000000 +CT=4896551f1308c48fbdd89b8313de2fc8 + +I=81 +KEY=000000000000000000008000000000000000000000000000 +CT=21270b0aa9831c887320210856618204 + +I=82 +KEY=000000000000000000004000000000000000000000000000 +CT=9d94843edde4c6a89bea613af35afdcd + +I=83 +KEY=000000000000000000002000000000000000000000000000 +CT=a44742fb1f8c552797b0fe90a7f0efa9 + +I=84 +KEY=000000000000000000001000000000000000000000000000 +CT=731be62d606ecf6ee9a0f0c96a26f6ea + +I=85 +KEY=000000000000000000000800000000000000000000000000 +CT=f1471235da8b77caf22aa978414bf459 + +I=86 +KEY=000000000000000000000400000000000000000000000000 +CT=f67b2cdbbb11ee10d180c2070e73c387 + +I=87 +KEY=000000000000000000000200000000000000000000000000 +CT=36f6bafee414e8f22f815cc204f46b5f + +I=88 +KEY=000000000000000000000100000000000000000000000000 +CT=e0d276ef75ac7dc2b15bee758cc7b892 + +I=89 +KEY=000000000000000000000080000000000000000000000000 +CT=7d541fc08e0ff9b773cc84c974749f1e + +I=90 +KEY=000000000000000000000040000000000000000000000000 +CT=7998830324cf92a793e295412bd3aa9c + +I=91 +KEY=000000000000000000000020000000000000000000000000 +CT=d3a3a62bc99f201eded9ea8c1ebe84b3 + +I=92 +KEY=000000000000000000000010000000000000000000000000 +CT=fc131ea2cfd76056fe0cb6f6322e514e + +I=93 +KEY=000000000000000000000008000000000000000000000000 +CT=92aec5acdbc80e93bb494565d6152683 + +I=94 +KEY=000000000000000000000004000000000000000000000000 +CT=2897ad37ac521cfbafee2d3cc49d5427 + +I=95 +KEY=000000000000000000000002000000000000000000000000 +CT=0a02072414040730d415d26f4c4f4e80 + +I=96 +KEY=000000000000000000000001000000000000000000000000 +CT=6f7fb8316285e5f39b2ddaedb8ec2fc5 + +I=97 +KEY=000000000000000000000000800000000000000000000000 +CT=77dbaaf18692980aa85d126a9b4a4726 + +I=98 +KEY=000000000000000000000000400000000000000000000000 +CT=5d0ae9ba98b4eab278222e08da5c9515 + +I=99 +KEY=000000000000000000000000200000000000000000000000 +CT=df65cdef8e09029d1eba45894d1e1904 + +I=100 +KEY=000000000000000000000000100000000000000000000000 +CT=9911f98f1f260c8f60e4e0c1801b84c1 + +I=101 +KEY=000000000000000000000000080000000000000000000000 +CT=974fb48c48cd2c4a3b19bb191ce3f37f + +I=102 +KEY=000000000000000000000000040000000000000000000000 +CT=43a52a7da3ebc9554fccacaabf02b42f + +I=103 +KEY=000000000000000000000000020000000000000000000000 +CT=0389dc8774b21120ece15cc270912897 + +I=104 +KEY=000000000000000000000000010000000000000000000000 +CT=4dd7be782da1dbd775ba298bc90dc63b + +I=105 +KEY=000000000000000000000000008000000000000000000000 +CT=6ea07ca0ddfcac58cfa211b4bde9c321 + +I=106 +KEY=000000000000000000000000004000000000000000000000 +CT=ba8829b1de058c4b48615d851fc74f17 + +I=107 +KEY=000000000000000000000000002000000000000000000000 +CT=22a6e18a3555867731c492d0c8717633 + +I=108 +KEY=000000000000000000000000001000000000000000000000 +CT=b68e5336ce0a364dbcbf4cae81e371d6 + +I=109 +KEY=000000000000000000000000000800000000000000000000 +CT=384427b8f008e2b31a904c532beb1599 + +I=110 +KEY=000000000000000000000000000400000000000000000000 +CT=84709b1ffbaba5397a9f133a0767b8cb + +I=111 +KEY=000000000000000000000000000200000000000000000000 +CT=7723e3a896d01b6b1f5340df029f7b48 + +I=112 +KEY=000000000000000000000000000100000000000000000000 +CT=68e0fe27173a8a85f7445414574d1d87 + +I=113 +KEY=000000000000000000000000000080000000000000000000 +CT=9b4788cbf0b56848101b3deb7a3a4656 + +I=114 +KEY=000000000000000000000000000040000000000000000000 +CT=852593f9947f166bf58eae7c9a00001a + +I=115 +KEY=000000000000000000000000000020000000000000000000 +CT=29be7cc59519fe143ef6319682de0bba + +I=116 +KEY=000000000000000000000000000010000000000000000000 +CT=3949b20d461f75274e87df21de5d62a0 + +I=117 +KEY=000000000000000000000000000008000000000000000000 +CT=db487555a81a86c1b726b917390b853a + +I=118 +KEY=000000000000000000000000000004000000000000000000 +CT=06b7908886620d9c9a0f3aedf235fb33 + +I=119 +KEY=000000000000000000000000000002000000000000000000 +CT=aa300793219c42fc41987f9bbf19b58e + +I=120 +KEY=000000000000000000000000000001000000000000000000 +CT=a49d34f3c92c7cdb71a48d17a4723697 + +I=121 +KEY=000000000000000000000000000000800000000000000000 +CT=093c1029c5eb09844c39dcb42a6ac5eb + +I=122 +KEY=000000000000000000000000000000400000000000000000 +CT=6a41993b586a37321a851455d80a3000 + +I=123 +KEY=000000000000000000000000000000200000000000000000 +CT=13574f75f33be868fa293a751411cb47 + +I=124 +KEY=000000000000000000000000000000100000000000000000 +CT=2b97b42b03879363bfa1587040246455 + +I=125 +KEY=000000000000000000000000000000080000000000000000 +CT=77b91d8da3f6eaa1713b543994c673c5 + +I=126 +KEY=000000000000000000000000000000040000000000000000 +CT=db664148b36b317331adc103bc680d57 + +I=127 +KEY=000000000000000000000000000000020000000000000000 +CT=375a6f5c49202d3a59bf429a9a77be2a + +I=128 +KEY=000000000000000000000000000000010000000000000000 +CT=dc7a7fb1247b60aead86ce0d898b647d + +I=129 +KEY=000000000000000000000000000000008000000000000000 +CT=345eb88a1d9bd2c5ddee04ac3923f08a + +I=130 +KEY=000000000000000000000000000000004000000000000000 +CT=2dba9b16738d1adc7d859b0ecd7d1cd1 + +I=131 +KEY=000000000000000000000000000000002000000000000000 +CT=4f48ebfcb17522ed2239191e520a967a + +I=132 +KEY=000000000000000000000000000000001000000000000000 +CT=b8c410bd14ad99cefd7428a3bc6f7e35 + +I=133 +KEY=000000000000000000000000000000000800000000000000 +CT=07f3715387341ce7b8325e824842c01a + +I=134 +KEY=000000000000000000000000000000000400000000000000 +CT=6812212678dc0a46f0b86b24b15b8a03 + +I=135 +KEY=000000000000000000000000000000000200000000000000 +CT=2e767244fc74c817f0789bb8943292ef + +I=136 +KEY=000000000000000000000000000000000100000000000000 +CT=01a32dd3f99dff43e110db0f2b88a819 + +I=137 +KEY=000000000000000000000000000000000080000000000000 +CT=5e81d0e1effcd9961bcd343696009839 + +I=138 +KEY=000000000000000000000000000000000040000000000000 +CT=129025e1728372901320b2fcff6d5b9b + +I=139 +KEY=000000000000000000000000000000000020000000000000 +CT=b3b3f7264dab71c2ca0febe44431b30d + +I=140 +KEY=000000000000000000000000000000000010000000000000 +CT=b9953f99bac2841911ab1c9caa7c98d7 + +I=141 +KEY=000000000000000000000000000000000008000000000000 +CT=dbaca3686bdfbe3d8c5e2e6b1db5577f + +I=142 +KEY=000000000000000000000000000000000004000000000000 +CT=1be312be1113ebac050bfcf37b0de85d + +I=143 +KEY=000000000000000000000000000000000002000000000000 +CT=f2a282d526d5432c476a112ef6162cbe + +I=144 +KEY=000000000000000000000000000000000001000000000000 +CT=d4ad15036534cfc7091be72117ed9a0d + +I=145 +KEY=000000000000000000000000000000000000800000000000 +CT=142ed387794e196f1b148ecba2e5062b + +I=146 +KEY=000000000000000000000000000000000000400000000000 +CT=761ea776ecf0bcf73d52013da09328fe + +I=147 +KEY=000000000000000000000000000000000000200000000000 +CT=f3513e388fd5c6111b2c11edbe568001 + +I=148 +KEY=000000000000000000000000000000000000100000000000 +CT=00f9e9822b79ee8c60edca082a9dd220 + +I=149 +KEY=000000000000000000000000000000000000080000000000 +CT=e8e0bf758a9e88242b31617e828647fb + +I=150 +KEY=000000000000000000000000000000000000040000000000 +CT=dead0d2f9480117270c95f860c9ffc81 + +I=151 +KEY=000000000000000000000000000000000000020000000000 +CT=56604fa1c8d7b258131f61beefa89b17 + +I=152 +KEY=000000000000000000000000000000000000010000000000 +CT=0fc45f51d2c185e667da0517f2a60955 + +I=153 +KEY=000000000000000000000000000000000000008000000000 +CT=192751977bff5834d51a9e81f448f19e + +I=154 +KEY=000000000000000000000000000000000000004000000000 +CT=26dd12ba453b5d54146c02d91f2e998b + +I=155 +KEY=000000000000000000000000000000000000002000000000 +CT=9b5c07141c98e441003fecf9c9311a2a + +I=156 +KEY=000000000000000000000000000000000000001000000000 +CT=e9494c80b90f1753a3689ab4ea258d66 + +I=157 +KEY=000000000000000000000000000000000000000800000000 +CT=8fb4ca5e0a62e4b5adeb7be7731085b0 + +I=158 +KEY=000000000000000000000000000000000000000400000000 +CT=5e29ae31cbbdc216e6d4adf274d47d0d + +I=159 +KEY=000000000000000000000000000000000000000200000000 +CT=cb173fb1cec206bef29a15b8ac72e919 + +I=160 +KEY=000000000000000000000000000000000000000100000000 +CT=9f35799a7d5dab723493eb92af1c18d3 + +I=161 +KEY=000000000000000000000000000000000000000080000000 +CT=f495f5658d888139913df0d3cf048baa + +I=162 +KEY=000000000000000000000000000000000000000040000000 +CT=e92daa5d108115d6f242f544e6ea72c9 + +I=163 +KEY=000000000000000000000000000000000000000020000000 +CT=c0ea8a7652bfc6cf81a5c46da38d2840 + +I=164 +KEY=000000000000000000000000000000000000000010000000 +CT=a221dece41a3a28cfc9d58e74cbd6014 + +I=165 +KEY=000000000000000000000000000000000000000008000000 +CT=369dec7982b167b3f0f98a5e393d5e41 + +I=166 +KEY=000000000000000000000000000000000000000004000000 +CT=b14d25d008a846a0768e394b751b8452 + +I=167 +KEY=000000000000000000000000000000000000000002000000 +CT=ac516cd4467bda2ad6da18bf202e8ce2 + +I=168 +KEY=000000000000000000000000000000000000000001000000 +CT=a82c0be53acb86f86692c1ead49acfea + +I=169 +KEY=000000000000000000000000000000000000000000800000 +CT=05548475ba322605dfc3ad55707a0539 + +I=170 +KEY=000000000000000000000000000000000000000000400000 +CT=173639d0c531a19ec3cb8f4891b23706 + +I=171 +KEY=000000000000000000000000000000000000000000200000 +CT=79febf394be1b8afb954c791a5eaa653 + +I=172 +KEY=000000000000000000000000000000000000000000100000 +CT=8e009de1f46674d9bac9d36f4fd29daf + +I=173 +KEY=000000000000000000000000000000000000000000080000 +CT=9212a730377098bdb34645b8db9f6c6f + +I=174 +KEY=000000000000000000000000000000000000000000040000 +CT=c586abec28a5e252ed99934117d9dc00 + +I=175 +KEY=000000000000000000000000000000000000000000020000 +CT=416c7812ce8049a70965f9cba27d07dc + +I=176 +KEY=000000000000000000000000000000000000000000010000 +CT=7819c9eff656380d997f50779f75ddaa + +I=177 +KEY=000000000000000000000000000000000000000000008000 +CT=f9a6b55b40c1c6f9ce21e07cefd14839 + +I=178 +KEY=000000000000000000000000000000000000000000004000 +CT=3c70be049ad5f70660cdfd4738c88a5b + +I=179 +KEY=000000000000000000000000000000000000000000002000 +CT=774ebef1e5916cd2bcfd70a3b647637f + +I=180 +KEY=000000000000000000000000000000000000000000001000 +CT=4087268a3bea1b020f4f0ff6cec88d3d + +I=181 +KEY=000000000000000000000000000000000000000000000800 +CT=005b7c9abf6dd5cbd3fad77bc09fbac9 + +I=182 +KEY=000000000000000000000000000000000000000000000400 +CT=0d45f3c58653e1c4f0328e8b760d668b + +I=183 +KEY=000000000000000000000000000000000000000000000200 +CT=9eb8ce9db6a787f32abd31365f67159a + +I=184 +KEY=000000000000000000000000000000000000000000000100 +CT=9ac89d752faa132d66d5fe92e4783989 + +I=185 +KEY=000000000000000000000000000000000000000000000080 +CT=89266048a5fcfc1eb27b739bad4e279e + +I=186 +KEY=000000000000000000000000000000000000000000000040 +CT=82aeb3e765f31b046ae49903518efc92 + +I=187 +KEY=000000000000000000000000000000000000000000000020 +CT=707df5c6fd03a2de93d46ac486a30d5e + +I=188 +KEY=000000000000000000000000000000000000000000000010 +CT=beb9bf4ecbf6875d1e72cf2478e3c1be + +I=189 +KEY=000000000000000000000000000000000000000000000008 +CT=144226cc1aeffe130c8dbb91f8797a25 + +I=190 +KEY=000000000000000000000000000000000000000000000004 +CT=b7b8c1114487a380ffb64ca05bdd3e8b + +I=191 +KEY=000000000000000000000000000000000000000000000002 +CT=2c5eb11071ee2d0b2351e16aa93ec873 + +I=192 +KEY=000000000000000000000000000000000000000000000001 +CT=0f61ac094954e286bcc90288fc62bd0a + +========== + +KEYSIZE=256 + +PT=00000000000000000000000000000000 + +I=1 +KEY=8000000000000000000000000000000000000000000000000000000000000000 +CT=abed96e766bf28cbc0ebd21a82ef0819 + +I=2 +KEY=4000000000000000000000000000000000000000000000000000000000000000 +CT=959658cdfcd80356dde045bbe7b1888d + +I=3 +KEY=2000000000000000000000000000000000000000000000000000000000000000 +CT=04d49cc0fae714b46b5b177664df4c28 + +I=4 +KEY=1000000000000000000000000000000000000000000000000000000000000000 +CT=39f1b1a339ded740d80b663a057d4866 + +I=5 +KEY=0800000000000000000000000000000000000000000000000000000000000000 +CT=df15b01e30cf9c81688f989809579a86 + +I=6 +KEY=0400000000000000000000000000000000000000000000000000000000000000 +CT=9db98fdedb783247d6af34f7579d89f6 + +I=7 +KEY=0200000000000000000000000000000000000000000000000000000000000000 +CT=fc41583a46c0f673c82bd63be56c72a6 + +I=8 +KEY=0100000000000000000000000000000000000000000000000000000000000000 +CT=34ed2423c59cc9c04ab5c6c931fd5898 + +I=9 +KEY=0080000000000000000000000000000000000000000000000000000000000000 +CT=8432a8062a2aaef13171209ec5dded82 + +I=10 +KEY=0040000000000000000000000000000000000000000000000000000000000000 +CT=c632e81cbb67020f6cfb9062f7a9171c + +I=11 +KEY=0020000000000000000000000000000000000000000000000000000000000000 +CT=c706ee8ed28ea73f32b2efc95c41d66d + +I=12 +KEY=0010000000000000000000000000000000000000000000000000000000000000 +CT=4b1a9b43530384e0b095e924a401fd48 + +I=13 +KEY=0008000000000000000000000000000000000000000000000000000000000000 +CT=89404af86981af4ddaa800424c9c132b + +I=14 +KEY=0004000000000000000000000000000000000000000000000000000000000000 +CT=170594ac5052d7c192f581e1000a7e0d + +I=15 +KEY=0002000000000000000000000000000000000000000000000000000000000000 +CT=1e3970ea40cb25bcede878f627d35092 + +I=16 +KEY=0001000000000000000000000000000000000000000000000000000000000000 +CT=10c2b5f2de944c7b1cb5fc21945d714d + +I=17 +KEY=0000800000000000000000000000000000000000000000000000000000000000 +CT=2f3e64eaf25b990300e0ce75ec5ddd19 + +I=18 +KEY=0000400000000000000000000000000000000000000000000000000000000000 +CT=4f6c152d9df44abce9b18a765a0175bb + +I=19 +KEY=0000200000000000000000000000000000000000000000000000000000000000 +CT=2e861155411717b16c60fb9eb0e1ef46 + +I=20 +KEY=0000100000000000000000000000000000000000000000000000000000000000 +CT=ce0449630e05e22eaeec4499f4020d36 + +I=21 +KEY=0000080000000000000000000000000000000000000000000000000000000000 +CT=862de372c7497defe2b639359707e293 + +I=22 +KEY=0000040000000000000000000000000000000000000000000000000000000000 +CT=6119f054d0f45711d06bed281d48712e + +I=23 +KEY=0000020000000000000000000000000000000000000000000000000000000000 +CT=74978fc86fb0e92c2601a58681eb06ac + +I=24 +KEY=0000010000000000000000000000000000000000000000000000000000000000 +CT=35031cbf461d8df3b4c946c9dcc54ca9 + +I=25 +KEY=0000008000000000000000000000000000000000000000000000000000000000 +CT=dd2fb08b5b4bbcd07bd70453da57a417 + +I=26 +KEY=0000004000000000000000000000000000000000000000000000000000000000 +CT=7e841efe450c947ece8ea3456c6bdfb6 + +I=27 +KEY=0000002000000000000000000000000000000000000000000000000000000000 +CT=bf2e9008e158a8ed760a304d465edb83 + +I=28 +KEY=0000001000000000000000000000000000000000000000000000000000000000 +CT=78d223b7577b97c57d41f7a9aa67fbc7 + +I=29 +KEY=0000000800000000000000000000000000000000000000000000000000000000 +CT=982171d6e83e59b519741c29d21fd21d + +I=30 +KEY=0000000400000000000000000000000000000000000000000000000000000000 +CT=e8f80fe26ab8942b8c884bdfef37e3a2 + +I=31 +KEY=0000000200000000000000000000000000000000000000000000000000000000 +CT=9daabac1e9699a951db64db0ea0ff761 + +I=32 +KEY=0000000100000000000000000000000000000000000000000000000000000000 +CT=eae7ed73f898a19411b8d08f71c5c66f + +I=33 +KEY=0000000080000000000000000000000000000000000000000000000000000000 +CT=7e20e6a88a263f8adad3a8813524dbdf + +I=34 +KEY=0000000040000000000000000000000000000000000000000000000000000000 +CT=6cd1bfcb283a3531c830082153865a96 + +I=35 +KEY=0000000020000000000000000000000000000000000000000000000000000000 +CT=182b87a0094e36ab50cc26c12f2d44e3 + +I=36 +KEY=0000000010000000000000000000000000000000000000000000000000000000 +CT=af7c418e585d5ffc2966ae7f4ebc61b2 + +I=37 +KEY=0000000008000000000000000000000000000000000000000000000000000000 +CT=dd136237150e9bd819d19f84ac180294 + +I=38 +KEY=0000000004000000000000000000000000000000000000000000000000000000 +CT=5bd17b54d6878b398d8cedb08ce67dc0 + +I=39 +KEY=0000000002000000000000000000000000000000000000000000000000000000 +CT=fef8c88ea06c5a0aa3efb1dce54541f1 + +I=40 +KEY=0000000001000000000000000000000000000000000000000000000000000000 +CT=a8c35caf2d91a05408b171b960cd084d + +I=41 +KEY=0000000000800000000000000000000000000000000000000000000000000000 +CT=4bdf0294712fcd25975fbc084f6cc973 + +I=42 +KEY=0000000000400000000000000000000000000000000000000000000000000000 +CT=e5f0bb96b46ac2c2413022e9d7f38a48 + +I=43 +KEY=0000000000200000000000000000000000000000000000000000000000000000 +CT=dd6732cd14961e4e42c3ce0ea83850cd + +I=44 +KEY=0000000000100000000000000000000000000000000000000000000000000000 +CT=590e7b58c1963e45c5bb60a576378dc3 + +I=45 +KEY=0000000000080000000000000000000000000000000000000000000000000000 +CT=69f5d841ad99f218fcb89521d1165484 + +I=46 +KEY=0000000000040000000000000000000000000000000000000000000000000000 +CT=c236007a7a244d2364075279bbd3b307 + +I=47 +KEY=0000000000020000000000000000000000000000000000000000000000000000 +CT=7ce8d07c90029b2253133a4b941668bd + +I=48 +KEY=0000000000010000000000000000000000000000000000000000000000000000 +CT=af3ebebfb4e37c7d22226101d27c54cc + +I=49 +KEY=0000000000008000000000000000000000000000000000000000000000000000 +CT=532e1616fa8ee2853aed696920e1f23c + +I=50 +KEY=0000000000004000000000000000000000000000000000000000000000000000 +CT=e332c5955575f799b05b02976fb41d80 + +I=51 +KEY=0000000000002000000000000000000000000000000000000000000000000000 +CT=791da10535733bf5d4b9706d5af92243 + +I=52 +KEY=0000000000001000000000000000000000000000000000000000000000000000 +CT=cd5eb5936eb10eb78432478eed00a2d1 + +I=53 +KEY=0000000000000800000000000000000000000000000000000000000000000000 +CT=074280068f0cf9b8632959989d87b1aa + +I=54 +KEY=0000000000000400000000000000000000000000000000000000000000000000 +CT=a37c95a3c73592d03de7b645536221e2 + +I=55 +KEY=0000000000000200000000000000000000000000000000000000000000000000 +CT=b969cca153bb861999da020e3255b002 + +I=56 +KEY=0000000000000100000000000000000000000000000000000000000000000000 +CT=c9b0ce3c773d5e16062c7b0017b1a1fc + +I=57 +KEY=0000000000000080000000000000000000000000000000000000000000000000 +CT=fd38f1a2db8d38559c7ccad15d0e3e85 + +I=58 +KEY=0000000000000040000000000000000000000000000000000000000000000000 +CT=fb6c3f215a5c11976576bde1d5c59169 + +I=59 +KEY=0000000000000020000000000000000000000000000000000000000000000000 +CT=92350faab64bba4a84cc16683c7a0d4e + +I=60 +KEY=0000000000000010000000000000000000000000000000000000000000000000 +CT=ecec6570c11fcacec3af112e2ff2931a + +I=61 +KEY=0000000000000008000000000000000000000000000000000000000000000000 +CT=e7cb6e1dfe6da642b9e5856e98f91915 + +I=62 +KEY=0000000000000004000000000000000000000000000000000000000000000000 +CT=3a5f963f0c2dbd81d9c1f663233f582b + +I=63 +KEY=0000000000000002000000000000000000000000000000000000000000000000 +CT=3b560746eb55e71ce00b9544faeb2fe9 + +I=64 +KEY=0000000000000001000000000000000000000000000000000000000000000000 +CT=42046b25c85dbd6b402b296a97ef83a5 + +I=65 +KEY=0000000000000000800000000000000000000000000000000000000000000000 +CT=9c7d38da9dccad1bc3c16bca0ba4d808 + +I=66 +KEY=0000000000000000400000000000000000000000000000000000000000000000 +CT=5c3fa08c807c5210e0faeb4b67c902f5 + +I=67 +KEY=0000000000000000200000000000000000000000000000000000000000000000 +CT=388834b1138b8cc182b9a24d18575de8 + +I=68 +KEY=0000000000000000100000000000000000000000000000000000000000000000 +CT=cee14aa1bd42dca608bfed10acff716e + +I=69 +KEY=0000000000000000080000000000000000000000000000000000000000000000 +CT=6a03f9523ff9ec178a5d8448ee7b2d0f + +I=70 +KEY=0000000000000000040000000000000000000000000000000000000000000000 +CT=669f77ed3196867e9faf60565711c8cb + +I=71 +KEY=0000000000000000020000000000000000000000000000000000000000000000 +CT=178ed0cacf39d5eb031afb65b005e4f7 + +I=72 +KEY=0000000000000000010000000000000000000000000000000000000000000000 +CT=4a7fc4ff3fec7dce25472c2e8b457208 + +I=73 +KEY=0000000000000000008000000000000000000000000000000000000000000000 +CT=87fd250d814d84ecb6a065a8250fdf18 + +I=74 +KEY=0000000000000000004000000000000000000000000000000000000000000000 +CT=637c3e8200e21b8c7e5e119659dbd635 + +I=75 +KEY=0000000000000000002000000000000000000000000000000000000000000000 +CT=47ad826682ec4b03924d22de4918eacd + +I=76 +KEY=0000000000000000001000000000000000000000000000000000000000000000 +CT=a3ab5728256056198cc2b73d92b14373 + +I=77 +KEY=0000000000000000000800000000000000000000000000000000000000000000 +CT=1629dc7684f194c15f5e855243a72ff0 + +I=78 +KEY=0000000000000000000400000000000000000000000000000000000000000000 +CT=fe2f18ce7947084f7840d30d49fbcaad + +I=79 +KEY=0000000000000000000200000000000000000000000000000000000000000000 +CT=9009b9a658ec414872af1bb0347ee30c + +I=80 +KEY=0000000000000000000100000000000000000000000000000000000000000000 +CT=b09928f5fb282a0b99de6eba2d7877a5 + +I=81 +KEY=0000000000000000000080000000000000000000000000000000000000000000 +CT=4e619867dbbcaea296e10fa8555ebde5 + +I=82 +KEY=0000000000000000000040000000000000000000000000000000000000000000 +CT=1d4ceafa69284d2d1cf56eb9d3f4d3da + +I=83 +KEY=0000000000000000000020000000000000000000000000000000000000000000 +CT=7ab218e774099540500548c17d4be628 + +I=84 +KEY=0000000000000000000010000000000000000000000000000000000000000000 +CT=54b7afb791f374fefd54897be6b5c908 + +I=85 +KEY=0000000000000000000008000000000000000000000000000000000000000000 +CT=9099027805d50c43a70374102895a79c + +I=86 +KEY=0000000000000000000004000000000000000000000000000000000000000000 +CT=7c651cfc911bf96e0b606ee3ca04a145 + +I=87 +KEY=0000000000000000000002000000000000000000000000000000000000000000 +CT=be1fa13657e2ef57cc7a5e265794cfd9 + +I=88 +KEY=0000000000000000000001000000000000000000000000000000000000000000 +CT=f8ec20959d0efaa529d1384de88addd1 + +I=89 +KEY=0000000000000000000000800000000000000000000000000000000000000000 +CT=be1f71467e549cdc3d24d6722673fb43 + +I=90 +KEY=0000000000000000000000400000000000000000000000000000000000000000 +CT=c34f0989edeb49c9125c8185d72e62a2 + +I=91 +KEY=0000000000000000000000200000000000000000000000000000000000000000 +CT=d8124193ed6e4e2b69945dca643bb9fb + +I=92 +KEY=0000000000000000000000100000000000000000000000000000000000000000 +CT=97ef94fa4c866d88c44b3d58ff8136cd + +I=93 +KEY=0000000000000000000000080000000000000000000000000000000000000000 +CT=0eb5f6ff1d75645292aea192e03ced37 + +I=94 +KEY=0000000000000000000000040000000000000000000000000000000000000000 +CT=1a55bea7371ea49069ac73348305a33c + +I=95 +KEY=0000000000000000000000020000000000000000000000000000000000000000 +CT=bfda5f26889f30b13d4ba05303ecf8ce + +I=96 +KEY=0000000000000000000000010000000000000000000000000000000000000000 +CT=c5718a9b347ed13a969bbb93423ac251 + +I=97 +KEY=0000000000000000000000008000000000000000000000000000000000000000 +CT=3543719280f21dcc88b31d906dd924b3 + +I=98 +KEY=0000000000000000000000004000000000000000000000000000000000000000 +CT=8daaabd85ebf091e8aa2052313f872e5 + +I=99 +KEY=0000000000000000000000002000000000000000000000000000000000000000 +CT=eee34ebf694065e99721990939b6cbe4 + +I=100 +KEY=0000000000000000000000001000000000000000000000000000000000000000 +CT=24b6b069385cf3dfea203a5b95dfb114 + +I=101 +KEY=0000000000000000000000000800000000000000000000000000000000000000 +CT=fc594972c7955c07e2393f22a619904d + +I=102 +KEY=0000000000000000000000000400000000000000000000000000000000000000 +CT=473d28bca0b356021fc516f3e6a55253 + +I=103 +KEY=0000000000000000000000000200000000000000000000000000000000000000 +CT=fd2cba4c24c0d02535198851d50d579f + +I=104 +KEY=0000000000000000000000000100000000000000000000000000000000000000 +CT=32515fac86315a2586d76a62ea6f201b + +I=105 +KEY=0000000000000000000000000080000000000000000000000000000000000000 +CT=644eff865f7c1f854261b11c2a8e07d7 + +I=106 +KEY=0000000000000000000000000040000000000000000000000000000000000000 +CT=9cd938a4d83df05dad1d70c6ea74d1fe + +I=107 +KEY=0000000000000000000000000020000000000000000000000000000000000000 +CT=f69af279f30363c234310eb4fea51291 + +I=108 +KEY=0000000000000000000000000010000000000000000000000000000000000000 +CT=db9b673ca99514f7953f18acc5c390b1 + +I=109 +KEY=0000000000000000000000000008000000000000000000000000000000000000 +CT=a872107c5116e36a75b7dbee56c47757 + +I=110 +KEY=0000000000000000000000000004000000000000000000000000000000000000 +CT=dbae7a1d2fcfc6ddd2f911af0f905055 + +I=111 +KEY=0000000000000000000000000002000000000000000000000000000000000000 +CT=5257eed79149f2a064dfaf163e01e3bd + +I=112 +KEY=0000000000000000000000000001000000000000000000000000000000000000 +CT=242fc696e8271727615914b4210f5071 + +I=113 +KEY=0000000000000000000000000000800000000000000000000000000000000000 +CT=8d9ff3a56ab97fdfb5bab64fe4a81c80 + +I=114 +KEY=0000000000000000000000000000400000000000000000000000000000000000 +CT=bf2254e8f9abd0013367728f9e16b59e + +I=115 +KEY=0000000000000000000000000000200000000000000000000000000000000000 +CT=8b91a39c085f3505949e4f14747e37cb + +I=116 +KEY=0000000000000000000000000000100000000000000000000000000000000000 +CT=09abf7df68f01db2ae5d526e9e2ee81e + +I=117 +KEY=0000000000000000000000000000080000000000000000000000000000000000 +CT=eb2502774a32f36cc1594617dddd1663 + +I=118 +KEY=0000000000000000000000000000040000000000000000000000000000000000 +CT=ad263ae59f0d719234cfa1c77e717ce1 + +I=119 +KEY=0000000000000000000000000000020000000000000000000000000000000000 +CT=c9d2d1eed4f8e1b4d05d897c9f1e5f67 + +I=120 +KEY=0000000000000000000000000000010000000000000000000000000000000000 +CT=16ff204fb3031451731de91fde5a6b44 + +I=121 +KEY=0000000000000000000000000000008000000000000000000000000000000000 +CT=eb5d9352b3615c55e895550b497191c1 + +I=122 +KEY=0000000000000000000000000000004000000000000000000000000000000000 +CT=a88f3176c389ae8f406364e67b9e1557 + +I=123 +KEY=0000000000000000000000000000002000000000000000000000000000000000 +CT=09bed1aed5eee6b077797b6cb31b44c2 + +I=124 +KEY=0000000000000000000000000000001000000000000000000000000000000000 +CT=0be7804beb8204cea6f59fe55132a363 + +I=125 +KEY=0000000000000000000000000000000800000000000000000000000000000000 +CT=54b00567b36ea41d04e8e877ead25944 + +I=126 +KEY=0000000000000000000000000000000400000000000000000000000000000000 +CT=293cb655ee6ac5a4c1c2cc31f5696ae7 + +I=127 +KEY=0000000000000000000000000000000200000000000000000000000000000000 +CT=22380e8215ec5f116f04311c267ce997 + +I=128 +KEY=0000000000000000000000000000000100000000000000000000000000000000 +CT=e9ba668276b81896d093a9e67ab12036 + +I=129 +KEY=0000000000000000000000000000000080000000000000000000000000000000 +CT=34c79f703a62b02e6790efbbbeb07241 + +I=130 +KEY=0000000000000000000000000000000040000000000000000000000000000000 +CT=bfc96d59ae31369b0618fd78fc295826 + +I=131 +KEY=0000000000000000000000000000000020000000000000000000000000000000 +CT=f811a6558ce7a67bd3280ee4e3259be8 + +I=132 +KEY=0000000000000000000000000000000010000000000000000000000000000000 +CT=8c8205692ab866bcf965dd61d595bf8e + +I=133 +KEY=0000000000000000000000000000000008000000000000000000000000000000 +CT=098a85e6ca58293bd2298c07f86a8f8c + +I=134 +KEY=0000000000000000000000000000000004000000000000000000000000000000 +CT=2801da2be78057706abafaab8226fa39 + +I=135 +KEY=0000000000000000000000000000000002000000000000000000000000000000 +CT=500796a8bccee9141ab21282d6c912a8 + +I=136 +KEY=0000000000000000000000000000000001000000000000000000000000000000 +CT=80cbe789099bdf0140da3ac157d7bf47 + +I=137 +KEY=0000000000000000000000000000000000800000000000000000000000000000 +CT=8ce81e5dea464efaf01b3da5a6da5aa9 + +I=138 +KEY=0000000000000000000000000000000000400000000000000000000000000000 +CT=4aec37a4ef16b38bcdba0b01051803d1 + +I=139 +KEY=0000000000000000000000000000000000200000000000000000000000000000 +CT=e6a2f6431269aa02c93793af80436a7b + +I=140 +KEY=0000000000000000000000000000000000100000000000000000000000000000 +CT=4aa9046b1fb69a6abcb8f3351d75efbd + +I=141 +KEY=0000000000000000000000000000000000080000000000000000000000000000 +CT=66b8c45fe8c254088d62d307edb9cf51 + +I=142 +KEY=0000000000000000000000000000000000040000000000000000000000000000 +CT=fddcfb5c4da597b9d887e03b8337da0c + +I=143 +KEY=0000000000000000000000000000000000020000000000000000000000000000 +CT=69042f478d87f8b6e0d149216f2e8d93 + +I=144 +KEY=0000000000000000000000000000000000010000000000000000000000000000 +CT=ad8f00cdace047f3225a235fc2b05738 + +I=145 +KEY=0000000000000000000000000000000000008000000000000000000000000000 +CT=6a624c0f16aaa6cd4995e01988deaa3b + +I=146 +KEY=0000000000000000000000000000000000004000000000000000000000000000 +CT=7d8f824eaa7dd1657a0f59a2f27b5e0f + +I=147 +KEY=0000000000000000000000000000000000002000000000000000000000000000 +CT=7015d246b39a995c11b409485e100b51 + +I=148 +KEY=0000000000000000000000000000000000001000000000000000000000000000 +CT=cad1a2944343525c2b9da630937cf40f + +I=149 +KEY=0000000000000000000000000000000000000800000000000000000000000000 +CT=c7f24334553fe63c4ab2f3ffbf0183ab + +I=150 +KEY=0000000000000000000000000000000000000400000000000000000000000000 +CT=bf2da14eea8055f51636984e51f4a349 + +I=151 +KEY=0000000000000000000000000000000000000200000000000000000000000000 +CT=c424de5973035fad65d99e27a2ae07c0 + +I=152 +KEY=0000000000000000000000000000000000000100000000000000000000000000 +CT=3ed7b674bcedb60523386119e2cb5fbe + +I=153 +KEY=0000000000000000000000000000000000000080000000000000000000000000 +CT=f0bed60941174023ae4d07e7deb23d5f + +I=154 +KEY=0000000000000000000000000000000000000040000000000000000000000000 +CT=159a9d7e5a210dad034ea2e50cbc30e5 + +I=155 +KEY=0000000000000000000000000000000000000020000000000000000000000000 +CT=695724e11b4cea84603f935571a1f5ff + +I=156 +KEY=0000000000000000000000000000000000000010000000000000000000000000 +CT=788ac03153fad14a7a3f8322543dca64 + +I=157 +KEY=0000000000000000000000000000000000000008000000000000000000000000 +CT=1964e04df808496e530e6ab5f2182ce4 + +I=158 +KEY=0000000000000000000000000000000000000004000000000000000000000000 +CT=18a056a20724416b3ebe7f88743d8297 + +I=159 +KEY=0000000000000000000000000000000000000002000000000000000000000000 +CT=dd28593d13343349ab120f2667441d8a + +I=160 +KEY=0000000000000000000000000000000000000001000000000000000000000000 +CT=a0bf14c7d0e3336d4cd5b2b1b47f5e73 + +I=161 +KEY=0000000000000000000000000000000000000000800000000000000000000000 +CT=d467c69d25a1a02481a2e3508d014bad + +I=162 +KEY=0000000000000000000000000000000000000000400000000000000000000000 +CT=3115ecf100476954f6c185250aa099c8 + +I=163 +KEY=0000000000000000000000000000000000000000200000000000000000000000 +CT=6d1be89c5f75270a366e6dcfcf3de5ba + +I=164 +KEY=0000000000000000000000000000000000000000100000000000000000000000 +CT=4d1686baa1be780736c35914731c186e + +I=165 +KEY=0000000000000000000000000000000000000000080000000000000000000000 +CT=3c5db56a9a87347b5a804560dd2dfd97 + +I=166 +KEY=0000000000000000000000000000000000000000040000000000000000000000 +CT=24813b7d9043df69980def2dc0617d54 + +I=167 +KEY=0000000000000000000000000000000000000000020000000000000000000000 +CT=5751c2eb5dd14d8823c714fc4475459e + +I=168 +KEY=0000000000000000000000000000000000000000010000000000000000000000 +CT=5b750ced85b4169116cf4e93c37e76e0 + +I=169 +KEY=0000000000000000000000000000000000000000008000000000000000000000 +CT=4ebaddc62d252e4028bbddf02807b3b4 + +I=170 +KEY=0000000000000000000000000000000000000000004000000000000000000000 +CT=216204523a32b2dcfc612be2d974b0dd + +I=171 +KEY=0000000000000000000000000000000000000000002000000000000000000000 +CT=fe995e0532b897921552c7cefebbab91 + +I=172 +KEY=0000000000000000000000000000000000000000001000000000000000000000 +CT=354c096b0477ecb122c25c61f85e4125 + +I=173 +KEY=0000000000000000000000000000000000000000000800000000000000000000 +CT=81b0c7e94e8426f4f227fa23ee5618c1 + +I=174 +KEY=0000000000000000000000000000000000000000000400000000000000000000 +CT=85c91b3e8e1dd2dac0cd310f69286f5e + +I=175 +KEY=0000000000000000000000000000000000000000000200000000000000000000 +CT=db3c6cce550a8c72f67f59ab1b272d71 + +I=176 +KEY=0000000000000000000000000000000000000000000100000000000000000000 +CT=4fae77cd8c5fbf1a7ab49785947c564a + +I=177 +KEY=0000000000000000000000000000000000000000000080000000000000000000 +CT=986d08049ce14579b756c250ad68d56e + +I=178 +KEY=0000000000000000000000000000000000000000000040000000000000000000 +CT=a9bb29db295e7364e65f687c418f39f2 + +I=179 +KEY=0000000000000000000000000000000000000000000020000000000000000000 +CT=d425810268f0bec64400911d990bd237 + +I=180 +KEY=0000000000000000000000000000000000000000000010000000000000000000 +CT=621910144f7cd3432b0663ed18137235 + +I=181 +KEY=0000000000000000000000000000000000000000000008000000000000000000 +CT=a45cafd42aa19e21a7cc83d4a504a074 + +I=182 +KEY=0000000000000000000000000000000000000000000004000000000000000000 +CT=6cb51ae713730353acd21906a8a8cebb + +I=183 +KEY=0000000000000000000000000000000000000000000002000000000000000000 +CT=b12b97ba267a9ccdd65cef0f4c436e64 + +I=184 +KEY=0000000000000000000000000000000000000000000001000000000000000000 +CT=2711d87a5b1d5011e616975ef6d32a8f + +I=185 +KEY=0000000000000000000000000000000000000000000000800000000000000000 +CT=2911f90a41b56f53e0cafffc3923c0bc + +I=186 +KEY=0000000000000000000000000000000000000000000000400000000000000000 +CT=beb86799fcc846a7121209dcb2026add + +I=187 +KEY=0000000000000000000000000000000000000000000000200000000000000000 +CT=b9b5317d691bbef913c925e226fdb94b + +I=188 +KEY=0000000000000000000000000000000000000000000000100000000000000000 +CT=cc333ef43909a98cd6a0da7043ac3b2a + +I=189 +KEY=0000000000000000000000000000000000000000000000080000000000000000 +CT=0291cc086e364c94fdb5250e07f17685 + +I=190 +KEY=0000000000000000000000000000000000000000000000040000000000000000 +CT=d98abd571faebeaece0d65d17ac320e6 + +I=191 +KEY=0000000000000000000000000000000000000000000000020000000000000000 +CT=dd6bb22de6b4caea4e56cb09d2ec6177 + +I=192 +KEY=0000000000000000000000000000000000000000000000010000000000000000 +CT=b6bb4f3f2ae83fe4a07ba5f10c3fd267 + +I=193 +KEY=0000000000000000000000000000000000000000000000008000000000000000 +CT=8c590b173aa66854937f5e05e22c73d9 + +I=194 +KEY=0000000000000000000000000000000000000000000000004000000000000000 +CT=bdb4f7428f37c024df2af13a6296f3e9 + +I=195 +KEY=0000000000000000000000000000000000000000000000002000000000000000 +CT=51d5c74df6f71c146c835ae145aed598 + +I=196 +KEY=0000000000000000000000000000000000000000000000001000000000000000 +CT=b8b86c7a65adb388d047bdd756edfbee + +I=197 +KEY=0000000000000000000000000000000000000000000000000800000000000000 +CT=084e0d8cfcfb7ad95019336fc94293a9 + +I=198 +KEY=0000000000000000000000000000000000000000000000000400000000000000 +CT=516ea8aae87eee2b4f22a1c09852c325 + +I=199 +KEY=0000000000000000000000000000000000000000000000000200000000000000 +CT=8030de81cd83227b63b2841fd72f6066 + +I=200 +KEY=0000000000000000000000000000000000000000000000000100000000000000 +CT=c09fd5e5c061b14dfa78d90f67458ed4 + +I=201 +KEY=0000000000000000000000000000000000000000000000000080000000000000 +CT=4cc791c47060fb666a86f60b6289e0ec + +I=202 +KEY=0000000000000000000000000000000000000000000000000040000000000000 +CT=fec1a2f79535ffa094ecd4720030cd36 + +I=203 +KEY=0000000000000000000000000000000000000000000000000020000000000000 +CT=28d2784e2364f10096b516833dcb39f9 + +I=204 +KEY=0000000000000000000000000000000000000000000000000010000000000000 +CT=04d2f725d569186682e209608e25c617 + +I=205 +KEY=0000000000000000000000000000000000000000000000000008000000000000 +CT=087395ef3b31e6a948e5e2a35e2ca345 + +I=206 +KEY=0000000000000000000000000000000000000000000000000004000000000000 +CT=6351fd25f8a06beceb244026c65c10c2 + +I=207 +KEY=0000000000000000000000000000000000000000000000000002000000000000 +CT=3c61acc4a77da654cda7839816d2f385 + +I=208 +KEY=0000000000000000000000000000000000000000000000000001000000000000 +CT=c660a12d18c94d0f5c81a22ed9c7ffb5 + +I=209 +KEY=0000000000000000000000000000000000000000000000000000800000000000 +CT=1f01ebc6151c8f3ea70c423f4e2c64c9 + +I=210 +KEY=0000000000000000000000000000000000000000000000000000400000000000 +CT=5e1231b72071ce574dfbbe66f5eed01b + +I=211 +KEY=0000000000000000000000000000000000000000000000000000200000000000 +CT=da025263d62d201cad37b53dae0507cb + +I=212 +KEY=0000000000000000000000000000000000000000000000000000100000000000 +CT=1600c5e3a94b0b44a8be99c5da558fd8 + +I=213 +KEY=0000000000000000000000000000000000000000000000000000080000000000 +CT=dfef4c129ba77381194046afc87e22ff + +I=214 +KEY=0000000000000000000000000000000000000000000000000000040000000000 +CT=5a39e491cca9abe1f1436008f4a455cc + +I=215 +KEY=0000000000000000000000000000000000000000000000000000020000000000 +CT=57a5d924b055186029a2656898ad2b8d + +I=216 +KEY=0000000000000000000000000000000000000000000000000000010000000000 +CT=f7f0d88f13ee760300aced0f001b3e34 + +I=217 +KEY=0000000000000000000000000000000000000000000000000000008000000000 +CT=924b4d0d4a88e669910cd9b890f25d76 + +I=218 +KEY=0000000000000000000000000000000000000000000000000000004000000000 +CT=8168c47238ef6f1994bfcef5b9baeef9 + +I=219 +KEY=0000000000000000000000000000000000000000000000000000002000000000 +CT=b6a59008e7267eb5f5492e2283198b31 + +I=220 +KEY=0000000000000000000000000000000000000000000000000000001000000000 +CT=c706d911f2f7ac8372984c60980adfd8 + +I=221 +KEY=0000000000000000000000000000000000000000000000000000000800000000 +CT=0bde9a2a1364784d2d2da743f77c6992 + +I=222 +KEY=0000000000000000000000000000000000000000000000000000000400000000 +CT=b3bd8ce8da0d939fb59caacd8b0c452c + +I=223 +KEY=0000000000000000000000000000000000000000000000000000000200000000 +CT=4327b8cb4a6015ff9df50a4a5ca08442 + +I=224 +KEY=0000000000000000000000000000000000000000000000000000000100000000 +CT=89f64377bf1e8a46c8247044e8056a98 + +I=225 +KEY=0000000000000000000000000000000000000000000000000000000080000000 +CT=31028ff4ed7a98d2d4f72615445d7e4a + +I=226 +KEY=0000000000000000000000000000000000000000000000000000000040000000 +CT=f5e331d2036713649c8c15705a87d9f5 + +I=227 +KEY=0000000000000000000000000000000000000000000000000000000020000000 +CT=d1dca9bb950823af5a4be2fbc52ec83b + +I=228 +KEY=0000000000000000000000000000000000000000000000000000000010000000 +CT=0951a1ddbf1f268d786c7233af62f0ef + +I=229 +KEY=0000000000000000000000000000000000000000000000000000000008000000 +CT=aa23686541d98309973f3d68e242a3e2 + +I=230 +KEY=0000000000000000000000000000000000000000000000000000000004000000 +CT=ad69fca1d17ae46f423a945fa36660e1 + +I=231 +KEY=0000000000000000000000000000000000000000000000000000000002000000 +CT=98272fdd4978e941b4f68f571b899fd8 + +I=232 +KEY=0000000000000000000000000000000000000000000000000000000001000000 +CT=121952d98be02632491241b44304804a + +I=233 +KEY=0000000000000000000000000000000000000000000000000000000000800000 +CT=b16dea3eb57e5967a8b218f08842502b + +I=234 +KEY=0000000000000000000000000000000000000000000000000000000000400000 +CT=5d9bd9d06cdf97480ba073a57480fab3 + +I=235 +KEY=0000000000000000000000000000000000000000000000000000000000200000 +CT=c9a296f7f58e208252dffec1d46fb538 + +I=236 +KEY=0000000000000000000000000000000000000000000000000000000000100000 +CT=d831b2b44cd0782c94a9533c4221e4bf + +I=237 +KEY=0000000000000000000000000000000000000000000000000000000000080000 +CT=b93146526d778bae13e579c4962110ef + +I=238 +KEY=0000000000000000000000000000000000000000000000000000000000040000 +CT=2e483ad91c6aba09440d32dff6f838ac + +I=239 +KEY=0000000000000000000000000000000000000000000000000000000000020000 +CT=f650a662bee544675d15eeb6d16c5dfb + +I=240 +KEY=0000000000000000000000000000000000000000000000000000000000010000 +CT=4a0d75387c3fabe4e4b8d059e526a623 + +I=241 +KEY=0000000000000000000000000000000000000000000000000000000000008000 +CT=eaac3bade1e4886d2376b945ae19ca2c + +I=242 +KEY=0000000000000000000000000000000000000000000000000000000000004000 +CT=86392882c55672c087a978a66a162d05 + +I=243 +KEY=0000000000000000000000000000000000000000000000000000000000002000 +CT=1ba2f2b6ee41fa58119bc0c6dd7909d3 + +I=244 +KEY=0000000000000000000000000000000000000000000000000000000000001000 +CT=68d5648946c464cbcfaf9b2abb0567c3 + +I=245 +KEY=0000000000000000000000000000000000000000000000000000000000000800 +CT=a909bc4a2061b560596840e160549097 + +I=246 +KEY=0000000000000000000000000000000000000000000000000000000000000400 +CT=231665465c569176adaa126a76b893b8 + +I=247 +KEY=0000000000000000000000000000000000000000000000000000000000000200 +CT=a9814e3b420304fb5df34a79d4db7879 + +I=248 +KEY=0000000000000000000000000000000000000000000000000000000000000100 +CT=6d9fb653caedbf0091aa5a143707994f + +I=249 +KEY=0000000000000000000000000000000000000000000000000000000000000080 +CT=c0165682bd8ee32b0e3c468812aa23a2 + +I=250 +KEY=0000000000000000000000000000000000000000000000000000000000000040 +CT=5991506d96f9f27ddf74015705d4e1ea + +I=251 +KEY=0000000000000000000000000000000000000000000000000000000000000020 +CT=99443cb4450fa3c81d921e478476f365 + +I=252 +KEY=0000000000000000000000000000000000000000000000000000000000000010 +CT=a9e429527f98ef1c9cb832bcd036e00e + +I=253 +KEY=0000000000000000000000000000000000000000000000000000000000000008 +CT=b7c9b6bd6b749af86c8ed5ee57659dec + +I=254 +KEY=0000000000000000000000000000000000000000000000000000000000000004 +CT=8dcb599c6eecc7e896d73c71bf1423ad + +I=255 +KEY=0000000000000000000000000000000000000000000000000000000000000002 +CT=f0fc3a5418ec55a5bbac2f2d4a94d833 + +I=256 +KEY=0000000000000000000000000000000000000000000000000000000000000001 +CT=2fc5e1a6366cfad169343760445d88e0 + +========== + diff -urN lin.2.4.3/crypto/testing/speed.c int.2.4.3/crypto/testing/speed.c --- lin.2.4.3/crypto/testing/speed.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/speed.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,213 @@ +/* + * crypto/testing/speed.c + * + * Written by Alexander Kjeldaas 1998-11-23 + * + * Copyright 1998 by Alexander Kjeldaas. Redistribution of this file + * is permitted under the GNU Public License. + */ + +#define __KERNEL__ + +#define printk printk_dummy + +#include + +#undef memcpy +#undef memset +#undef printk + +#include "libcfuncs.h" +#include "misc.h" + + +int cipher_correct(struct cipher_implementation *ci); +int test_cipher(struct cipher_implementation *ci, int encrypt); +int test_cbc_cipher(struct cipher_implementation *ci, int encrypt); + +int main() +{ + const char *ciphers[] = {"serpent-ecb", "serpent-cbc", "mars-ecb", "mars-cbc", \ + "rc5-ecb", "rc5-cbc", "rc6-ecb", "rc6-cbc", "dfc-ecb", "dfc-cbc", \ + "aes-ecb", "aes-cbc", "blowfish-ecb", "blowfish-cbc", \ + "twofish-ecb", "twofish-cbc", "idea-ecb", "idea-cbc", \ + "des-ecb", "des-cbc", "des-ede3-ecb", "des-ede3-cbc" \ + }; + int cip; + /* Register all ciphers */ + init_ciphers_and_digests(); + + for (cip = 0; cip < sizeof(ciphers) / sizeof(ciphers[0]); cip++) { + const char *cipher = ciphers[cip]; + struct cipher_implementation *ci; + struct timeval tv1,tv2; + //int modes[] = {CIPHER_MODE_ECB, CIPHER_MODE_CBC}; + //int test[] = {1, 0}; + ci = find_cipher_by_name(cipher, 1); + if (!ci) + continue; + PRINTF("Testing cipher %s..", + ci->trans.t_name); + if (!cipher_correct(ci)) { + PRINTF("seems to work\n"); + } else { + PRINTF("doesnt work!\n"); + } + gettimeofday(&tv1, NULL); + if (test_cipher(ci, 1)) + return 1; + gettimeofday(&tv2, NULL); + PRINTF("encrypt %-15s = %8d usec/MB; %6.3f MB/s; " + "%6.3f Mb/s\n", + ci->trans.t_name, (int)timediff(&tv2,&tv1), + 1000000.0/timediff(&tv2,&tv1), + 1000000.0*8.0/timediff(&tv2,&tv1)); + gettimeofday(&tv1, NULL); + if (test_cipher(ci,0)) + return 1; + gettimeofday(&tv2, NULL); + PRINTF("decrypt %-15s = %8u usec/MB; %6.3f MB/s; " + "%6.3f Mb/s\n", + ci->trans.t_name, (int)timediff(&tv2,&tv1), + 1000000.0/timediff(&tv2,&tv1), + 1000000.0*8.0/timediff(&tv2,&tv1)); + } + exit(0); +} + +#if 0 +static inline void rdtsc(long long *x) +{ + asm volatile (".byte 0x0f, 0x31\n\t" + "movl %%eax, %0\n\t" + "movl %%edx, %1" + : "=m" (((long *)x)[0]), "=m"(((long *)x)[1]) + ::"ax","dx"); +} +#endif + +int test_cipher(struct cipher_implementation *ci, int encrypt) +{ + int fd,i,j,bs,size; + char buf[512], buf_in[512], buf_out[512]; + static u8 key[] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, + 0x20, 0x02, 0x02, 0x40, 0x40, 0x04, 0x04, 0x20}; + struct cipher_context *cx; + cx = (struct cipher_context *) malloc(sizeof(struct cipher_context)); + cx->ci = ci; + cx->keyinfo = (u32 *) malloc(ci->key_schedule_size); + errno=ci->set_key(cx, (char *)key, sizeof(key)); + if(errno) { + perror("Can't set key"); + return 1; + } + fd = open("speed.c", O_RDONLY); + if (!fd) { + perror("Couldn't open speed.c"); + return 1; + } + if ((size = read(fd, buf, sizeof(buf))) < sizeof(buf)) { + perror("Couldn't read 512 bytes from speed.c"); + return 1; + } + close(fd); + memcpy(buf_in, buf, sizeof(buf)); + bs = ci->blocksize; + if (bs == 0) { + bs = 512; + } + for (i = 0; i < 1024; i++) { + char *in = &buf_in[0]; + char *out = &buf_out[0]; + int (*func)(struct cipher_context *cx, + const u8 *in, u8 *out, int size); + if (encrypt) + func = ci->encrypt; + else + func = ci->decrypt; + + for (j = 512; j > 0; j-=bs) { + errno=func(cx, (u8 *)in, (u8 *)out, bs); + if(errno) { + perror("Can't encrypt/decrypt in test_cipher()"); + return 1; + } + in += bs; out += bs; + } + in = &buf_in[0]; + out = &buf_out[0]; + for (j = 512; j > 0; j-=bs) { + func(cx, (u8 *)out, (u8 *)in, bs); + in += bs; out += bs; + } + } + return 0; +} + +int cipher_correct(struct cipher_implementation *ci) +{ + int fd,j,bs,size,err; + char buf[512], buf_enc[512],buf_dec[512]; + static u8 key[] = {0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x80, + 0x40, 0x60, 0x40, 0x40, 0x40, 0x04, 0x40, 0x00}; + struct cipher_context *cx; + cx = (struct cipher_context *) malloc(sizeof(struct cipher_context)); + cx->ci = ci; + cx->keyinfo = (u32 *) malloc(ci->key_schedule_size); + errno=ci->set_key(cx, (char *)key, sizeof(key)); + if(errno) { + printf("errno=%d key=%d\n",errno,sizeof(key)); + perror("Can't set key"); + return 1; + } + fd = open("speed.c", O_RDONLY); + if (!fd) { + perror("Couldn't open speed.c"); + return 1; + } + if ((size = read(fd, buf, sizeof(buf))) < sizeof(buf)) { + perror("Couldn't read 512 bytes from speed.c"); + return 1; + } + close(fd); + bs = ci->blocksize; + if (bs == 0) { + return 0; + } + { + char *in = &buf[0]; + char *out = &buf_enc[0]; + for (j = 512; j > 0; j-=bs) { + errno=ci->encrypt(cx, (u8 *)in, (u8 *)out, bs); + if(errno) { + perror("Can't encrypt in cipher_correct"); + return 1; + } + + in += bs; out += bs; + } + in = &buf_enc[0]; + out = &buf_dec[0]; + for (j = 512; j > 0; j-=bs) { + errno=ci->decrypt(cx, (u8 *)in, (u8 *)out, bs); + if(errno) { + perror("Can't encrypt in cipher_correct"); + return 1; + } + + in += bs; out += bs; + } + if ((err = my_memcmp(buf, buf_dec, sizeof(buf)))) { + PRINTF("failed check"); + PRINTF("\nPlaintext buffer\n"); + dump_u8_buffer(buf, 512); + PRINTF("\nEncrypted plaintext\n"); + dump_u8_buffer(buf_enc, 512); + PRINTF("\nDecrypted buffer\n"); + dump_u8_buffer(buf_dec, 512); + exit(err); + } + } + return 0; +} + diff -urN lin.2.4.3/crypto/testing/stubs.c int.2.4.3/crypto/testing/stubs.c --- lin.2.4.3/crypto/testing/stubs.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/stubs.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,60 @@ + +#include +#include +#include + +extern void *malloc(size_t size); +extern void free(void *ptr); + + +void * kmalloc(size_t x, int kind) +{ + return malloc(x); +} + +void kfree(const void *x) +{ + free((void *)x); +} + + +int proc_register(struct proc_dir_entry *parent, struct proc_dir_entry *child) +{ + return 0; +} + +int proc_unregister(struct proc_dir_entry *entry, int stuff) +{ + return 0; +} + +struct proc_dir_entry *proc_mkdir(const char *x,struct proc_dir_entry *y) +{ + return NULL; +} + +struct proc_dir_entry *create_proc_entry(const char *name, mode_t mode, + struct proc_dir_entry *parent) +{ + return NULL; +} + +extern void remove_proc_entry(const char *name, struct proc_dir_entry *parent) +{ +} + + + + + +struct proc_dir_entry proc_root; +struct proc_dir_entry *proc_root_fs; + +int request_module(const char * name) +{ + return (int) name; +} + +asmlinkage void schedule(void) +{ +} diff -urN lin.2.4.3/crypto/testing/test.3des-ede int.2.4.3/crypto/testing/test.3des-ede --- lin.2.4.3/crypto/testing/test.3des-ede Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/test.3des-ede Mon Apr 2 18:37:26 2001 @@ -0,0 +1,36 @@ +#!/bin/bash + +NR=1 +test () { + echo "test number $NR" + ./testcip -c des_ede3 "$@" | sed '/^Registered/d' | sed '/^MD5/d' + NR=$[NR+1] +} + +# Ordinary tests +test -k 0123456789abcdeffedcba987654321089abcdef01234567 -p 0123456789abcde7 -e de0b7c06ae5e0ed5 +test -k 0123456789abcdeffedcba9876543210 -p 0123456789abcde7 -e 7f1d0a77826b8aff +test -k 0123456789abcdef -p 0123456789abcde7 -e c95744256a5ed31d + +# Only parity bits differ - should give same result +test -k 01000000ffffffffffffffff00000000 -p 0000000000000000 -e fb7d235c9a27599f +test -k 00000000fffffffffefefefe00000001 -p 0000000000000000 -e fb7d235c9a27599f + + + +# The following keys are weak and should be rejected if such testing is done. +# The plaintext and ciphertext is therefore not important, and is set to 0. +# See comments in crypto/des_ede3.c + +# Weak subkeys - should be rejected +test -k fefefefefefefefefedcba987654321089abcdef01234567 -p 0000000000000000 -e 0000000000000000 +test -k 0123456789abcdeffedcba98765432101f1f1f1f0e0e0e0e -p 0000000000000000 -e 0000000000000000 +test -k 0123456789abcdefe0e0e0e0f1f1f1f1 -p 0000000000000000 -e 0000000000000000 + +# Two semi-weak subkeys - should be rejected +test -k 01fe01fe01fe01fefedcba9876543210fe01fe01fe01fe01 -p 0000000000000000 -e 0000000000000000 + +#Degenerate keys - should be rejected +test -k 0123456789abcdef0123456789abcdef89abcdef01234567 -p 0000000000000000 -e 0000000000000000 +test -k 0123456789abcdef89abcdef0123456789abcdef01234567 -p 0000000000000000 -e 0000000000000000 +test -k 0123456789abcdef0123456789abcdef0123456789abcdef -p 0123456789abcde7 -e c95744256a5ed31d \ No newline at end of file diff -urN lin.2.4.3/crypto/testing/test.blowfish int.2.4.3/crypto/testing/test.blowfish --- lin.2.4.3/crypto/testing/test.blowfish Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/test.blowfish Mon Apr 2 18:37:26 2001 @@ -0,0 +1,54 @@ +#!/bin/bash + +NR=1 +test () { + echo "Test number $NR" + ./testcip -s -c blowfish "$@" | sed '/^Registered/d' + NR=$[NR+1] +} + +test -k 0000000000000000 -p 0000000000000000 -e 4EF997456198DD78 +test -k FFFFFFFFFFFFFFFF -p FFFFFFFFFFFFFFFF -e 51866FD5B85ECB8A +test -k 3000000000000000 -p 1000000000000001 -e 7D856F9A613063F2 +test -k 1111111111111111 -p 1111111111111111 -e 2466DD878B963C9D +test -k 0123456789ABCDEF -p 1111111111111111 -e 61F9C3802281B096 +test -k 1111111111111111 -p 0123456789ABCDEF -e 7D0CC630AFDA1EC7 +test -k 0000000000000000 -p 0000000000000000 -e 4EF997456198DD78 +test -k FEDCBA9876543210 -p 0123456789ABCDEF -e 0ACEAB0FC6A0A28D +test -k 7CA110454A1A6E57 -p 01A1D6D039776742 -e 59C68245EB05282B +test -k 0131D9619DC1376E -p 5CD54CA83DEF57DA -e B1B8CC0B250F09A0 +test -k 07A1133E4A0B2686 -p 0248D43806F67172 -e 1730E5778BEA1DA4 +test -k 3849674C2602319E -p 51454B582DDF440A -e A25E7856CF2651EB +test -k 04B915BA43FEB5B6 -p 42FD443059577FA2 -e 353882B109CE8F1A +test -k 0113B970FD34F2CE -p 059B5E0851CF143A -e 48F4D0884C379918 +test -k 0170F175468FB5E6 -p 0756D8E0774761D2 -e 432193B78951FC98 +test -k 43297FAD38E373FE -p 762514B829BF486A -e 13F04154D69D1AE5 +test -k 07A7137045DA2A16 -p 3BDD119049372802 -e 2EEDDA93FFD39C79 +test -k 04689104C2FD3B2F -p 26955F6835AF609A -e D887E0393C2DA6E3 +test -k 37D06BB516CB7546 -p 164D5E404F275232 -e 5F99D04F5B163969 +test -k 1F08260D1AC2465E -p 6B056E18759F5CCA -e 4A057A3B24D3977B +test -k 584023641ABA6176 -p 004BD6EF09176062 -e 452031C1E4FADA8E +test -k 025816164629B007 -p 480D39006EE762F2 -e 7555AE39F59B87BD +test -k 49793EBC79B3258F -p 437540C8698F3CFA -e 53C55F9CB49FC019 +test -k 4FB05E1515AB73A7 -p 072D43A077075292 -e 7A8E7BFA937E89A3 +test -k 49E95D6D4CA229BF -p 02FE55778117F12A -e CF9C5D7A4986ADB5 +test -k 018310DC409B26D6 -p 1D9D5C5018F728C2 -e D1ABB290658BC778 +test -k 1C587F1C13924FEF -p 305532286D6F295A -e 55CB3774D13EF201 +test -k 0101010101010101 -p 0123456789ABCDEF -e FA34EC4847B268B2 +test -k 1F1F1F1F0E0E0E0E -p 0123456789ABCDEF -e A790795108EA3CAE +test -k E0FEE0FEF1FEF1FE -p 0123456789ABCDEF -e C39E072D9FAC631D +test -k 0000000000000000 -p FFFFFFFFFFFFFFFF -e 014933E0CDAFF6E4 +test -k FFFFFFFFFFFFFFFF -p 0000000000000000 -e F21E9A77B71C49BC +test -k 0123456789ABCDEF -p 0000000000000000 -e 245946885754369A +test -k FEDCBA9876543210 -p FFFFFFFFFFFFFFFF -e 6B5C5A9C5D9E0A5A + + + + + + + + + + + diff -urN lin.2.4.3/crypto/testing/test.des int.2.4.3/crypto/testing/test.des --- lin.2.4.3/crypto/testing/test.des Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/test.des Mon Apr 2 18:37:26 2001 @@ -0,0 +1,83 @@ +#!/bin/bash + +NR=1 +test () { + echo "Test number $NR" + ./testcip -c des "$@" | sed '/^Registered/d' + NR=$[NR+1] +} + +test -k 0000000000000000 -p 0000000000000000 -e 8CA64DE9C1B123A7 +test -k FFFFFFFFFFFFFFFF -p FFFFFFFFFFFFFFFF -e 7359B2163E4EDC58 +test -k 3000000000000000 -p 1000000000000001 -e 958E6E627A05557B +test -k 1111111111111111 -p 1111111111111111 -e F40379AB9E0EC533 +test -k 0123456789ABCDEF -p 1111111111111111 -e 17668DFC7292532D +test -k 1111111111111111 -p 0123456789ABCDEF -e 8A5AE1F81AB8F2DD +test -k 0000000000000000 -p 0000000000000000 -e 8CA64DE9C1B123A7 +test -k FEDCBA9876543210 -p 0123456789ABCDEF -e ED39D950FA74BCC4 +test -k 7CA110454A1A6E57 -p 01A1D6D039776742 -e 690F5B0D9A26939B +test -k 0131D9619DC1376E -p 5CD54CA83DEF57DA -e 7A389D10354BD271 + +test -k 07A1133E4A0B2686 -p 0248D43806F67172 -e 868EBB51CAB4599A +test -k 3849674C2602319E -p 51454B582DDF440A -e 7178876E01F19B2A +test -k 04B915BA43FEB5B6 -p 42FD443059577FA2 -e AF37FB421F8C4095 +test -k 0113B970FD34F2CE -p 059B5E0851CF143A -e 86A560F10EC6D85B +test -k 0170F175468FB5E6 -p 0756D8E0774761D2 -e 0CD3DA020021DC09 +test -k 43297FAD38E373FE -p 762514B829BF486A -e EA676B2CB7DB2B7A +test -k 07A7137045DA2A16 -p 3BDD119049372802 -e DFD64A815CAF1A0F +test -k 04689104C2FD3B2F -p 26955F6835AF609A -e 5C513C9C4886C088 +test -k 37D06BB516CB7546 -p 164D5E404F275232 -e 0A2AEEAE3FF4AB77 +test -k 1F08260D1AC2465E -p 6B056E18759F5CCA -e EF1BF03E5DFA575A + +test -k 584023641ABA6176 -p 004BD6EF09176062 -e 88BF0DB6D70DEE56 +test -k 025816164629B007 -p 480D39006EE762F2 -e A1F9915541020B56 +test -k 49793EBC79B3258F -p 437540C8698F3CFA -e 6FBF1CAFCFFD0556 +test -k 4FB05E1515AB73A7 -p 072D43A077075292 -e 2F22E49BAB7CA1AC +test -k 49E95D6D4CA229BF -p 02FE55778117F12A -e 5A6B612CC26CCE4A +test -k 018310DC409B26D6 -p 1D9D5C5018F728C2 -e 5F4C038ED12B2E41 +test -k 1C587F1C13924FEF -p 305532286D6F295A -e 63FAC0D034D9F793 +test -k 0101010101010101 -p 0123456789ABCDEF -e 617B3A0CE8F07100 +test -k 1F1F1F1F0E0E0E0E -p 0123456789ABCDEF -e DB958605F8C8C606 +test -k E0FEE0FEF1FEF1FE -p 0123456789ABCDEF -e EDBFD1C66C29CCC7 + +test -k 0000000000000000 -p FFFFFFFFFFFFFFFF -e 355550B2150E2451 +test -k FFFFFFFFFFFFFFFF -p 0000000000000000 -e CAAAAF4DEAF1DBAE +test -k 0123456789ABCDEF -p 0000000000000000 -e D5D44FF720683D0D +test -k FEDCBA9876543210 -p FFFFFFFFFFFFFFFF -e 2A2BB008DF97C2F2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -urN lin.2.4.3/crypto/testing/test.mars int.2.4.3/crypto/testing/test.mars --- lin.2.4.3/crypto/testing/test.mars Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/test.mars Mon Apr 2 18:37:26 2001 @@ -0,0 +1,438 @@ +#!/bin/bash + +test () { + echo "Test number $I - keysize $KEYSIZE" + echo testcip -c mars -k $KEY -p $PT -e $CT + ./testcip -c mars -k $KEY -p $PT -e $CT | sed '/^Registered/d' +} + +# This data is from the MARS website at +# http://www.research.ibm.com/security/mars.html + +KEYSIZE=128 + +KEY=00000000000000000000000000000000 +PT=00000000000000000000000000000000 +CT=deb3513283c296de39069e6b994c2438 + +test +exit + + The MARS cipher: Test vectors for encryption and key expansion + --------------------------------------------------------------- + +For each key and plaintext, the following information is given: + +Key[n]: The original key, consisting of n 32-bit words +Expanded key: The 40-word expanded key array +Plain Text: The 4-word plaintext +IV1: Values after key addition +IV2: Values after Forward mixing +IV3: Values after Forward "core" +IV4: Values after Backwards "core" +IV5: Values after Backwards mixing +Encryption: The 4-word ciphertext (after key subtraction) + +All the values are given as arrays of 32-bit words. + +======================================================================== + +KEYSIZE=128 + +Key[4]= 00000000 00000000 00000000 00000000 +Expanded Key= [ + b1a4a724 a4ebfe6c 8c31f1ff 46f21b7f 3107f81e 72538073 d9d5bb7c 07cd149b + fd2c12fa e5135e4f 753ab740 bb33ab03 d576aff3 7c14f40b 729b9d51 06a17a6f + 9bf4836a 14d4a4e3 3cebfbf6 a2fe105b d602ac90 330ae033 7838d957 e477c263 + 1c3c1975 09a546d7 e1b7efda 54441e9f c98e224a 2e237bf3 964fa90b 56f7ae07 + 9f7da180 86bad2ef 9e2b2c11 056f518f 1dd62186 b1e4e06c e37c58bc a1f6a479 +] +Plain Text= 00000000 00000000 00000000 00000000 +IV1=b1a4a724 a4ebfe6c 8c31f1ff 46f21b7f +IV2=d4ae0c38 eb8ea742 641bdc9c bdb280da +IV3=ac1a7cb0 acc2f1f0 4758625c e6a02ebb +IV4=d0bd0bde 37a00fb8 42611579 2b2e7337 +IV5=fc8972b8 35a7774a 1c82f727 3b42c8b1 +Encryption= deb35132 83c296de 39069e6b 994c2438 + + + +Key[4]= deb35132 83c296de 39069e6b 994c2438 +Expanded Key= [ + 107f46e3 39ad6bbf aca8391d 44ed470a ad55b583 92110113 54b14fdb f205608b + a9a28c86 bf72c2c3 f61ee573 2ea0a3f7 0a9cf79f 59304a1f 512724f6 367da517 + ef526563 25b0ed67 fa465e58 240a3743 7853b1f3 4e240a9f c17dbecc addaf83b + bfa7fef7 0707ea83 617a9c9d d1679d07 c1145fe7 67c8d86b d682cdb0 b8d7c197 + d233542f 650b9107 32658199 d17af7bb 5402a899 800a2588 aa01ba64 6fff9d90 +] +Plain Text= deb35132 83c296de 39069e6b 994c2438 +IV1=ef329815 bd70029d e5aed788 de396b42 +IV2=4ca72af4 03c66f6d ccad0d6e 96630d80 +IV3=9329ec9a 3d26d758 7cefb387 efedf183 +IV4=39cc73ee 820582dd 1210940a 0a8c46e4 +IV5=fd14ee92 ce0d533c ae243428 0ba5a667 +Encryption= a91245f9 4e032db4 042279c4 9ba608d7 + + + +Key[4]= 77a114cb cdc1bb6a 3d24e7af 02ea2cef +Expanded Key= [ + 44cb6f54 153cc9b2 6ee728e4 a340f7b6 540c1cd3 c409ec9f cdd08801 5091a06b + bcf3fe6d dd2fe2b3 8fb06ca6 5c010d73 68dbb887 bca5cb7b d11bbc8d 151e15c7 + 4a82ec22 3102c2b3 302c92be 31d87c33 0c5f67d8 b0fd72af eeaf82dd f9750f33 + 0787e8e9 4a62dcfb c60b8ef6 f94c0607 7c9c2b56 b49dfca3 414b9c9b dbd4aa0b + b6b17ece 0732d49b 2d9417fe 63ac89ab 339d359b a20d713e a78ab93a 065f28ef +] +Plain Text= a91245f9 4e032db4 042279c4 9ba608d7 +IV1=edddb54d 633ff766 7309a2a8 3ee7008d +IV2=f5281910 68768f38 ebc1221e 79a7d9b8 +IV3=766b7d4a bf15a754 c0116d3a bdf880a2 +IV4=b9f2e174 6669507c 7284181a db627725 +IV5=e0f32ee8 089aaa99 b1ed467a b040501a +Encryption= ad55f94d 668d395b 0a628d40 a9e1272b + + + +Key[4]= daf4ed86 ab4c8231 37466aef ab0b0bc4 +Expanded Key= [ + 9ab7ae2b 0f73f81c afce20e3 9f2cfc8c 24588fd8 71821903 f4c0714f 13e5cf37 + 0c5504ef 87652183 94cf826a 44154193 ac28ea54 0a2bc753 19b79d6d 75a2cb9b + 4c29c8b8 3252e0af ec304911 802ece97 50e19471 03d7b0bb 0dc62c42 33228923 + 55fe4042 27ad014f 00d18904 5008eb3f b1fd2680 7e5d366b edfefe45 3705a077 + 038249f0 783d8b4f 48d8876f 879d2d47 1501127d 767cfa6a 4ae62be2 b078cdc5 +] +Plain Text= ad55f94d 668d395b 0a628d40 a9e1272b +IV1=480da778 76013177 ba30ae23 490e23b7 +IV2=e487eaaa a632cb30 ff8e0b66 0ecec341 +IV3=25a6b5d9 1c060b55 a9650144 0abf5bc8 +IV4=eba5e911 c1dcb107 4d9d6879 84d82641 +IV5=e71059d1 abc6aef5 7a08a7f5 ecd3737c +Encryption= d20f4754 3549b48b 2f227c13 3c5aa5b7 + + + +Key[4]= 08fbaad2 9e0536ba 186416fc 9751ae73 +Expanded Key= [ + 8facb7c3 1e4d7bd0 502e75b3 be262b34 42339164 bc93d863 77542989 57830ca3 + c6005fa6 f961896f 77dabef4 eef3f5ef 2f6d2790 7191e8d3 7a9a75a9 954ab137 + f0f3e6a4 897eea03 da6255a4 651f381f d955b3cc 4c6f688f 98dd5f55 c9af195b + 46cc7058 594426cb 6dcc6f5d 246e1603 4885ac99 a55f011f f0a974f4 1e7879bb + 496516db 53586ce7 052ee42b 16931b2f 2344322a 65538aa7 907ebef8 2edcb4b5 +] +Plain Text= d20f4754 3549b48b 2f227c13 3c5aa5b7 +IV1=61bbff17 5397305b 7f50f1c6 fa80d0eb +IV2=1f5b2a7f 98e26c7d 9c28a2db c388d646 +IV3=5391c7f7 ac9974d6 c61a1ba2 2a835d9a +IV4=439e5ccf 09e5f169 dd070fc1 e48c7f88 +IV5=66d17bdc 564113e9 cf75bd7d b837736d +Encryption= 438d49b2 f0ed8942 3ef6fe85 895abeb8 + + + +Key[4]= 4b76e360 6ee8bff8 2692e879 1e0b10cb +Expanded Key= [ + 52c6f009 815d8fe2 bca5d163 ed58e175 7fcea016 1b1d6a83 6aa9dc77 81738423 + e14a5dac fcf52adb 29555a50 7d69b6cf 86b2fda6 68379ba7 56be0e57 7ee6b92f + a61e4f38 be2b2907 9e38217e ba274493 5a07edf2 81e73e03 d32d7b57 3fa55113 + da0b9ce7 2db6fe77 716a0763 c325bc9b 11f60f27 a630f1d3 002dea39 211a58ef + b31e95b2 d25b023b 4bfa6acd 52fae8eb ae6284ad 93194cdd 138cb6c5 edacf29e +] +Plain Text= 438d49b2 f0ed8942 3ef6fe85 895abeb8 +IV1=965439bb 724b1924 fb9ccfe8 76b3a02d +IV2=7b6be06c 602314b7 63771017 37bea240 +IV3=1db44a41 a2b1ac42 b17bc0d1 a1def98a +IV4=0d57f939 2af36857 096d5f88 a4d22e98 +IV5=aeccfcfb 44341a9c d70f8297 c04ad313 +Encryption= 006a784e b11acdbf c382cbd2 d29de075 + + + +Key[4]= 3c574a4f 4d9ee67d 8502e334 cb30c961 +Expanded Key= [ + 799cd786 064c7fdb 40797b7d a7d6d58d d30dac61 83a0a657 95c4c8ad bfe9f16f + 0f1d67f8 2b655cfb a3ada6ea 971696bb c7f6f838 62bd9817 2a28d073 d00a5dc3 + 70e5b711 833a53cb c41ac997 0226db0f 2a0e962f 4ae61c07 57524b48 75296af3 + 4a3ec498 4899295b 246af131 6ab8bfd3 cab75997 5526fb83 3b006506 701724d7 + 259d2f30 a5495eb3 2c322c6e 6ca0bfbb 96499bb9 35d296e6 c5405907 c790427f +] +Plain Text= 774bd161 926c943a 6012c09f 07a639df +IV1=f0e8a8e7 98b91415 a08c3c1c af7d0f6c +IV2=e505456e 5e50b756 104c76bc 3b7a7f0f +IV3=cd65c3b7 df284a23 cf1d4788 7ac39e05 +IV4=c3335301 9434ec9d b866e1fe 7af2b0d9 +IV5=bc29fc5a acb54455 e56b5886 6e618555 +Encryption= 25e060a1 76e2ad6f 202aff7f a6d142d6 + + + +Key[4]= 19b72aee 3b7c4b12 a5281c4b 6de18bb7 +Expanded Key= [ + 0982d435 f7279ef7 1bda470b 45f061e5 ba116f23 c895f257 5381bcd7 98f66d13 + 97225c42 3f947a5f 651e009f 2606f323 32037254 84ef30f3 c969d992 5494cbcb + 32aff3a5 fbbc8d13 0566bf24 8b900dcb 202848e2 3d4326f3 a4283891 2d15c6e7 + ebf715af ad204e3b c244af1b ac3a3bcb 73be3c62 7c4f754b 00d579c8 de94f6f7 + e5f0cf5c af81d4a7 6bd0c00e dbae03f3 0cabad09 83ade475 b0f5b796 5aedfcd4 +] +Plain Text= 25e060a1 76e2ad6f 202aff7f a6d142d6 +IV1=2f6334d6 6e0a4c66 3c05468a ecc1a4bb +IV2=6f36adf6 ea07f787 ca688e0c f4c1e34e +IV3=e821d02c 5f02db89 55620874 a840651d +IV4=f66436e2 d40e8df4 0ff380b2 9675ffe3 +IV5=f172fa0b 602df703 9b0632f6 171dbbd0 +Encryption= e4c74d02 dc80128e ea107b60 bc2fbefc + + + +Key[4]= fd7067ec e7fc599c 4f38672b d1ce354b +Expanded Key= [ + 35c6054c ead872e0 173d6797 4c3fb6bc dce28b70 3d3fe397 bdd6a46a 212e68fb + eab4dcf5 f7940653 9e40d6a4 0d05f15b 9107bcb2 b1203cb3 bf2cdc40 0fc1c023 + 024817f6 c840506b 079bd465 328bcd5b 54167911 21a2fdcf 904e85f1 9d13314b + 8d73ebe6 474ea967 2bd38bfa 8171605f eeeb15ac aae9dfab 216fb826 d0344cbf + 36930990 6567d303 b69b3b7e ff916b63 38ed75e4 cc4ba8aa 4caae370 9ee7eeaa +] +Plain Text= e4c74d02 dc80128e ea107b60 bc2fbefc +IV1=1a8d524e c758856e 014de2f7 086f75b8 +IV2=a1dbf118 a63a2592 da97146d 633d7cd4 +IV3=7b6da857 9daaa4be ed94501a f2828a94 +IV4=0a9e10fd e5718e50 f9368c26 0a954028 +IV5=96078932 fc574ac3 c9486194 3a1e2cf2 +Encryption= 5d1a134e 300ba219 7c9d7e24 9b363e48 + + + +Key[4]= a06a74a2 d7f7fb85 33a5190f 4af80b03 +Expanded Key= [ + 6a27430b 05197ee0 12bf0ca4 bae671d5 8f5c134c 609be0d3 9588298c 0259f10b + 9b74a8b1 f1eec9db 00209110 4c3d5a47 453eac26 414c783b 199f646f 07926d87 + 3c6485ad be978c6b c11c4c1b efaa2b63 7d279602 ddc41c57 b2ed70bb e666b34b + 3e746d2e e5368f07 eff70385 7d604743 9dce2946 c944cf0b 778a497c 35cfe4ff + 1203474e 3232ff5f 012eabef f479e82b 3cdc7dab 5552410a 03cbbaa2 3ed1c8d3 +] +Plain Text= 5d1a134e 300ba219 7c9d7e24 9b363e48 +IV1=c7415659 352520f9 8f5c8ac8 561cb01d +IV2=ac00b5b3 5fa9e06b d5ab2e6c 91ed9b75 +IV3=e97f4904 cfe41398 18e89eb8 46dddb60 +IV4=d1a0927a 9bc5bc62 b615c73f e9713c36 +IV5=49b56ac7 445c4f4a 8dc56b77 e715291d +Encryption= 0cd8ed1c ef0a0e40 89f9b0d5 a843604a + + +========================= + +KEYSIZE=192 + +Key[6]= 00000000 00000000 00000000 00000000 00000000 00000000 +Expanded Key= [ + 27dee7e4 154762f7 e3c5a235 c48782ce 5913a42a 721c0d67 a48a56ae 80625c03 + 5e79bc19 fa87c763 74dc1baa 95862b4f cb5e6aca adcfa1f7 f95d5ace 783dc87b + fb5a66c8 468d8353 57e96c55 a1b9080f 660f1eda 2280402b 7c08c082 aca23c27 + ac64e883 b12eeaef b4a136c0 badaefdf b01ea677 6941a1bf 1b3fc7df f957f01f + df5a6502 59716c27 b0ca5a13 ddf1435b 55cee350 f6258fd3 9022223d 3c80200d +] +Plain Text= 00000000 00000000 00000000 00000000 +IV1=27dee7e4 154762f7 e3c5a235 c48782ce +IV2=e80fc980 0742e155 bd8d241b 37783b4e +IV3=16b14fca 32df6557 46f71002 276b20e6 +IV4=cf2dc74c 50268150 e051a9c6 0b70b3c9 +IV5=fe228ce3 13669fff 98a87b0e d1cda745 +Encryption= a853a993 1d41102c 088658d1 954d8738 + + + +Key[6]= 088658d1 954d8738 00000000 00000000 00000000 00000000 +Expanded Key= [ + e1bbe2d1 38f11822 8b7ff4cb 833ef90a 3f5553aa 8d070683 17f7fe15 0f7ab327 + f3df6127 902acb97 81dee7fd 583bd767 89313d2a a3771397 28484806 a0d22c3f + 26ceab0c 3fd3aa03 2033baf6 4945ddcb 310275bd d349301b 75aa0b65 c232bb13 + 21e164da 61d7122b d9cdc3a3 a10dcdeb 963d65ee f79190e3 ac5fec07 7bb534db + 0ada3ccc ac68d1bf 07dd3839 bdf75b57 13a61e19 f98ced2b 0bf573f7 e785c0b7 +] +Plain Text= a853a993 1d41102c 088658d1 954d8738 +IV1=8a0f8c64 5632284e 94064d9c 188c8042 +IV2=42715daf 5ec41b05 3844f3df 2865b968 +IV3=ade6083c 910718db d65aef96 642a93e2 +IV4=6d30ef88 7233660f f6e45d88 d7b453c5 +IV5=416a7f80 cbcf4e69 b9b4c39f 769b446a +Encryption= 2dc46167 d242613e adbf4fa8 8f1583b3 + + + +Key[6]= a5391779 1a58048b a853a993 1d41102c 088658d1 954d8738 +Expanded Key= [ + 4a6aebc3 768beddd 1e423871 f8025453 a7c4735e 27ed4143 756416db c8becd2b + 8cf25e26 d6b74c8f c9228fe4 8358a8b7 52d355e2 79da8313 34f9b718 aec232ff + 47b58b4a b4d4b333 c1edc83b 8262694b 34383327 57b83157 28a3944b 364b51cf + 765df4d0 d32bfa13 5c46ca3f 59d46817 8418566a 9a84017b 1c513de5 5b93f74f + b5b9ad02 9a1d6973 54b5bc74 efb92a6f 98bbd3f0 3eb92df5 36b8fdf3 7ebf1ddf +] +Plain Text= 2dc46167 d242613e adbf4fa8 8f1583b3 +IV1=782f4d2a 48ce4f1b cc018819 8717d806 +IV2=e971f2c4 6d32633c 98d1e2f4 d19bf151 +IV3=f645cf5e fdd1e86a 270776f7 8c476579 +IV4=c9762c8c 12eae970 102304a5 82d58468 +IV5=bebf08bb ac11ad3a 178bbb47 3bd83a36 +Encryption= 260334cb 6d587f45 e0d2bd54 bd191c57 + + + +Key[6]= 45ebaa2d a74118dc 8597c8f4 cf037112 a5391779 1a58048b +Expanded Key= [ + c3789384 6cba897c 408d3347 62e14f4f 7d32d3fe 43ea20f7 37fa62bf da083f43 + 11d6a36a 07b4af27 df307c63 e17af4b3 a2a0780a 789c6bdb 01a69dca 222748cf + da90b300 2ec1916f e1f0f2e7 790a2f0b feaf1e2d c91f2683 3245b509 dccc6bdf + 37de8109 e7c010e7 4f2c4c08 c2e5657b 035e22f7 b1ec4a4b 6235691e 3adceb5b + aa741a09 6c5c2aaf 7ba3d350 70a06e87 0561f28b b4286bcc 1e5190ea c1e27949 +] +Plain Text= 260334cb 6d587f45 e0d2bd54 bd191c57 +IV1=e97bc84f da1308c1 215ff09b 1ffa6ba6 +IV2=6968e88e 48a6f539 f646d8f5 ccf35a64 +IV3=351f5756 5bcdd6dd b78eb579 21d447c8 +IV4=47795ee4 580e29ec d58aa750 f2786c0f +IV5=68327186 f1852491 2a73796a a41c3b33 +Encryption= 62d07efb 3d5cb8c5 0c21e880 e239c1ea + + + +Key[6]= 49ca42ad 4578d936 a394fc3f a25b0e57 45ebaa2d a74118dc +Expanded Key= [ + 46cf477d 7806a8af 6c0747fb dc22326f 62e33d0e 3eb59f73 4c4bdc94 6e11939f + 39b73bac d436284f e4e3c788 7730c9ff 1ad527ef 2a208e43 bbb18767 cc89ac87 + f5dba503 402435cf 55aed575 783a9b8b deb4e077 889f48bf b79241f0 3e3229d3 + da59b650 331295af 508fa084 3662f35b 8dd036f0 9338daab 04db36d4 441e3847 + 1bfbd04f a37048a7 5a73c893 8df886bb e71ca0b7 c12b1e84 e43fdbde e0d55925 +] +Plain Text= 62d07efb 3d5cb8c5 0c21e880 e239c1ea +IV1=a99fc678 b5636174 7829307b be5bf459 +IV2=17f9dc09 92619cfa f9eb89ed 6d073d91 +IV3=f8e918b0 0fa0e9a3 db163491 998e7a05 +IV4=0ab43ad1 80927ba4 81b55ad0 adbfa2e7 +IV5=15acb673 39db6781 51aed997 162a269d +Encryption= 2e9015bc 78b048fd 6d6efdb9 3554cd78 + + + +========================= + +KEYSIZE=256 + + +Key[8]= 9867a1fb 22ef7a3e 8ce27c31 a3e1aa02 3ccce5e8 2aa8beed 9ac3db99 27725ed6 +Expanded Key= [ + a91e1d4c 37e56ec3 e58bebf2 6880f69f 4befbee1 99b5f3c3 28f97526 848139ff + 61059077 67cf6183 7fa48a1e 540e89cb 38d3e758 2e9cf23b 447f210c d9522fbf + 00257735 49bbfecf fad2232a cf5b30f7 774d76c3 81c8b1bb a0aafceb 246d7bfb + ed446268 f9c3d043 1eec3571 66b20b3b c263fc6b 8b548cd3 74763e02 55fe0f6f + 9ce3a41e f4c52fe7 556a2237 3a9377f7 d234d139 012c7b59 0299ba4a c9146c4c +] +Plain Text= a4ab4413 0847c4d3 1621a7a8 8493f4d4 +IV1=4dc9615f 402d3396 fbad939a ed14eb73 +IV2=e9a020c2 e0a4f75c a8e75caf 7bbceb86 +IV3=7295ee8e ef559e88 c55cd79f cf801586 +IV4=43b9e148 e3e8b667 00b39555 5a77ef0e +IV5=39d67e16 bf5ddf3c 6238d676 81b8fc2f +Encryption= 67a1acdd be3163e3 5f9f1c2c b8a48fe3 + +Key[8]= ffc60d26 9cde19dd d37d601d 1b4525e1 9867a1fb 22ef7a3e 8ce27c31 a3e1aa02 +Expanded Key= [ + 097eb64b c557cf89 6bbac604 8521dae9 9a595464 324ce39b 65190327 994e3b77 + 4c9bc470 7946faf7 71223e33 131a1dab aa782641 cf99146b fdb3ca12 083277f7 + a94740ba a29543db be118237 1629f7c3 0405db16 f00dee7f d68b0ebd b29d18f7 + afe89b13 8ff53a93 39ed1fc8 5f0f1c2b 771b06ba c250d197 ebf3e844 10d89fcf + 8ebf8837 fe2eba8b b15728c9 96264faf bfdd1e1e d7d14fa5 9815fa3f 2af4dc7a +] +Plain Text= 67a1acdd be3163e3 5f9f1c2c b8a48fe3 +IV1=71206328 8389336c cb59e230 3dc66acc +IV2=7d103a6b 84778a60 3fdba434 9490f8f7 +IV3=66eb22aa 6b422c3b 54c5627e 04e8931e +IV4=ca1318c9 ce16accf 889d9385 eec063fe +IV5=86128f07 b5ef876d 5ca522a4 11a48ba6 +Encryption= c63570e9 de1e37c8 c48f2865 e6afaf2c + + + +Key[8]= 39f37dcf 42c02e15 17f24878 fdea8acd ffc60d26 9cde19dd d37d601d 1b4525e1 +Expanded Key= [ + b5d1b8fc cb2f7b75 5f1c1dda 00a62687 466f4f54 ea90d5f7 af0b7a08 b52eff07 + f651c6ad fe6e7fdf 8cfa506d 61229bcb 83447de8 fbecc4bb baba340c 2336e74b + cd8da3fa 59d6a0b7 1a2733bf ba8f591f 36551504 211451ef c4f6df9b 6bc36377 + 4ee90fc2 8c2e7d97 060d69e7 006c54c3 640d25f5 a26f3277 ecd2c408 8213195b + 5a19494e 552413ab 663979af c4a3ebb3 f2f1c819 2958ee3d 0fe42311 d13d70fe +] +Plain Text= c63570e9 de1e37c8 c48f2865 e6afaf2c +IV1=7c0729e5 a94db33d 23ab463f e755d5b3 +IV2=205d700c edb01810 dd5d7ea0 63e57e89 +IV3=21fc603a 94f5c159 326f10a0 caee99ed +IV4=7a8e1a8d 19e3c5ff c75861d8 70ad45de +IV5=032a106f e7fd9725 a5221cac 2855b0e3 +Encryption= 10384856 bea4a8e8 953df99b 57183fe5 + + + +Key[8]= 29cb3599 fc6486fd 82cfb1e3 aaf2b528 39f37dcf 42c02e15 17f24878 fdea8acd +Expanded Key= [ + 4dcf4e2f 993b2ae8 299c9b55 ba6eee2e 33fc179a c86f1f83 62ad2038 85124d6f + 36862f67 72cc261f 9439514a c4d83ec3 084d31f7 c5763c1f ef5c7974 c17c9487 + 0d4b3adc 25e5df1b a9c5e13c f20eeee7 72a6014c 3145e1c7 271f2f02 6e3f566f + a8e1bed1 c8e60d2b 224c7330 985d62bf 17807fea 4c57f03f 5d4873bd b042a68b + e7e7038a 5458d3ef 6bd3ecfa a94ca647 490f7727 108fa88a 17083fe5 00bd62df +] +Plain Text= 10384856 bea4a8e8 953df99b 57183fe5 +IV1=5e079685 57dfd3d0 beda94f0 11872e13 +IV2=420b553e 6df086e4 7999e228 e50073e3 +IV3=5fc050ea c292d8ef ebf6e830 1bb84912 +IV4=f7fabec8 76867745 c83005b0 af07ab80 +IV5=20a3f1a0 76ade4b6 8eed877d cab8c5f5 +Encryption= d7947a79 661e3c2c 77e54798 c9fb6316 + + + +Key[8]= fe5f4fe0 9a7abad1 f52af67b 6309d63e 29cb3599 fc6486fd 82cfb1e3 aaf2b528 +Expanded Key= [ + c565d096 141e8678 9b1fd313 0ac36be1 d58bb999 80f197fb 5fea7d4e c922cfef + 24ef0266 7a20c223 04eff6ef bc1937cf a2cf1793 738e0507 e0917cf6 22c0348f + aa14ea8e c8119caf 0b4aa557 3b415933 e8f62c04 ee8de23b 989d55d5 c0ff2ebb + 76ae8a58 aa691277 58087c0b 58754acf bd4437e3 119b67cf 79ecad7c 20ef4ccb + 872a528a f4726f5b cb92238a 83e06e47 97b5b690 739f70d6 4643d98f 398a936b +] +Plain Text= d7947a79 661e3c2c 77e54798 c9fb6316 +IV1=9cfa4b0f 7a3cc2a4 13051aab d4becef7 +IV2=d906fff1 be0c3a1c 7f0685ef 059b0b7b +IV3=b67e9f99 0cec4744 b1259502 4a9ee8c4 +IV4=17727c21 5dd4dc1e daceacdb 9a8439f8 +IV5=e831be7a 8b46342a 97c46f04 756ca673 +Encryption= 507c07ea 17a6c354 51809575 3be21308 + + + +Key[8]= ae23480a 8ddc7985 a4aa630e 58ebc536 fe5f4fe0 9a7abad1 f52af67b 6309d63e +Expanded Key= [ + bbc05697 e91c98f2 dfc3b387 6cd475f7 58481400 7ca14ca7 1296cbaa a67919f3 + d8affabd 334358ff b91b1cbe db172497 f9f4d090 712c94ff 429feb5f 7e627087 + 09da20af 1140babb 3d5b3bb3 20c4df67 72702b6d 1c70527b dd0fe8ad 7931df1b + ea38af60 ec62bc1b a23b6d3a b0c21223 c51e7c79 012ff093 3230d7af ddedba1f + 23104c69 4d0614ab 287b7f3f 85b5953b 30897d20 5a87dc90 753693f5 7983c677 +] +Plain Text= 507c07ea 17a6c354 51809575 3be21308 +IV1=0c3c5e81 00c35c46 314448fc a8b688ff +IV2=aa2c442a 8d933397 09eb28e5 60ba4a67 +IV3=1ebfcfc0 4e5c1e33 2b25a340 6e4b6580 +IV4=36fc10a6 63763bf3 18cbaad4 aeaabd86 +IV5=e6ffe933 669e74d5 3193e177 1c949040 +Encryption= b6766c13 0c169845 bc5d4d82 a310c9c9 + +========== + + + + + + + + + + + + + + diff -urN lin.2.4.3/crypto/testing/test.rc5 int.2.4.3/crypto/testing/test.rc5 --- lin.2.4.3/crypto/testing/test.rc5 Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/test.rc5 Mon Apr 2 18:37:26 2001 @@ -0,0 +1,1548 @@ +#!/bin/bash + +# NOTE! These are real test vectors but they _are not_ tested +# with ./testcip -program, since it didn't compile. -Pekka + +test () { + echo "Test number $I - keysize $KEYSIZE" + ./testcip -c rc5 -k $KEY -p $PLT -e $CIP | sed '/^Registered/d' +} + + +KEYSIZE=128 + +I=1 +KEY=00000000000000000000000000000000 +PLT=0000000000000000 +CIP=883883FF1E216EAE +test + +I=2 +KEY=4433112FEAB711778BEF67A792110E8F +PLT=883883FF1E216EAE +CIP=B778BA49909B416E +test + +I=3 +KEY=34674A5515253711848516413A3FA2D9 +PLT=B778BA49909B416E +CIP=FCD887CC6CFA3EC8 +test + +I=4 +KEY=2A34F9A881DE3F2C537E93949FEEE60C +PLT=FCD887CC6CFA3EC8 +CIP=8967D496B0790EDA +test + +I=5 +KEY=5C32634A4DDE89D67002430E38B084B6 +PLT=8967D496B0790EDA +CIP=EA2C67E337131273 +test + +I=6 +KEY=62C3A6BFDBDFC8ABB5358023A4C76153 +PLT=EA2C67E337131273 +CIP=A86C8CE7DF81CC2A +test + +I=7 +KEY=890157A721F7862748713E53716D30A7 +PLT=A86C8CE7DF81CC2A +CIP=C474526F0017C435 +test + +I=8 +KEY=FA1573DF3C738EA7ECA937038E89A3AF +PLT=C474526F0017C435 +CIP=E9428C0CBE68C918 +test + +I=9 +KEY=C486E9A07038E89C75B2B5F00786544C +PLT=E9428C0CBE68C918 +CIP=0BD943E39068D335 +test + +I=10 +KEY=0C2F94875343A2C3F48DD42FD847B593 +PLT=0BD943E39068D335 +CIP=D445FD7502F07D7E +test + +I=11 +KEY=8D3789B1F0A1301D05939C05B1CB8015 +PLT=D445FD7502F07D7E +CIP=71B62AEA0F789FB2 +test + +I=12 +KEY=3DACF2D62BC4948AA6F497AA6A16EA6A +PLT=71B62AEA0F789FB2 +CIP=D4DE56FFD5ACAC3B +test + +I=13 +KEY=0AD98B4F693728BFA58B41A3BBA185AF +PLT=D4DE56FFD5ACAC3B +CIP=27B9AAC70CE6DD54 +test + +I=14 +KEY=53438A230735B087BF71A8872CAB4517 +PLT=27B9AAC70CE6DD54 +CIP=96D4000A1FE521FE +test + +I=15 +KEY=751A9596D72A606A44F09D6E9F8A8E2A +PLT=96D4000A1FE521FE +CIP=027D596E70E67FDD +test + +I=16 +KEY=472A264AA54C4AAE90020BBA387EAACE +PLT=027D596E70E67FDD +CIP=084D7486097F5DEA +test + +I=17 +KEY=50E67E4A7D50F2A69C143C569B52A8E6 +PLT=084D7486097F5DEA +CIP=26DCE9FD91831497 +test + +I=18 +KEY=EA7DA3517A1D33BDC963906D128D19BD +PLT=26DCE9FD91831497 +CIP=DCAB4E64921547DA +test + +I=19 +KEY=3BA0DF5C89F44A3C9D62863089EAC8A4 +PLT=DCAB4E64921547DA +CIP=18ABE640B9E6B971 +test + +I=20 +KEY=EA829ED8CE226C5888A8687075304F90 +PLT=18ABE640B9E6B971 +CIP=2EDA40B0C834F765 +test + +I=21 +KEY=F9141E3C965EC0004AE427489F8C6890 +PLT=2EDA40B0C834F765 +CIP=059656D159706DAA +test + +I=22 +KEY=C305B5F9F5CDA5A1E59FEB05F00544E1 +PLT=059656D159706DAA +CIP=E59344102717A1A1 +test + +I=23 +KEY=CD2088A01AB458F09A76C3E4589E76A0 +PLT=E59344102717A1A1 +CIP=0B1A42A432EA975B +test + +I=24 +KEY=0CEA8624097AC3340F9C3928B4441A84 +PLT=0B1A42A432EA975B +CIP=935524627CF77EF6 +test + +I=25 +KEY=6FA285AEC47E9CF26DF0925E78229442 +PLT=935524627CF77EF6 +CIP=061166839FBF56C2 +test + +I=26 +KEY=01C5F6BB3B97019383F11A13103BBED3 +PLT=061166839FBF56C2 +CIP=40323BD418CE9235 +test + +I=27 +KEY=821A2534DBBE7FC449B8DC806A727864 +PLT=40323BD418CE9235 +CIP=D6FFB23A5BF8CE2C +test + +I=28 +KEY=C3623F96BC1E3392EA0CB906DE8C435A +PLT=D6FFB23A5BF8CE2C +CIP=F08B20BFCD2AF65B +test + +I=29 +KEY=5CBFAF0BC0E39B27D52FAC0F0B83852F +PLT=F08B20BFCD2AF65B +CIP=2DD627ECD3B20DF2 +test + +I=30 +KEY=1806CD906F9024545B72D6D4B4C25DCC +PLT=2DD627ECD3B20DF2 +CIP=0AD02B4DD18C2FFB +test + +I=31 +KEY=533B47B9D8E9380595414901A79F37AD +PLT=0AD02B4DD18C2FFB +CIP=2BDD595B901A0D51 +test + +I=32 +KEY=BDE3DBB78D77930BF6991DAB931566DB +PLT=2BDD595B901A0D51 +CIP=BF99EB003ABFFA8E +test + +I=33 +KEY=45469BF00AAECC60712AB87CCC383F90 +PLT=BF99EB003ABFFA8E +CIP=19FD0782C6B334D5 +test + +I=34 +KEY=A056430A4DB4EBA28446963AD94E4482 +PLT=19FD0782C6B334D5 +CIP=5962E34BFCF57F33 +test + +I=35 +KEY=EA6DF6B7E3BD8DA36027639342EB49DB +PLT=5962E34BFCF57F33 +CIP=BCB9F81F66089A02 +test + +I=36 +KEY=8EE7B38B1D2576F7AC9DEDDFC1030F7F +PLT=BCB9F81F66089A02 +CIP=74C4E87C119D6A43 +test + +I=37 +KEY=9E0E961466805F0C9326DF1802EE66BC +PLT=74C4E87C119D6A43 +CIP=7D3AC9E8CF4EE80D +test + +I=38 +KEY=6A58B288F01A2E7034CAAB4C2EDE2288 +PLT=7D3AC9E8CF4EE80D +CIP=C113094AD4F73BD9 +test + +I=39 +KEY=28BCAAA6790025EA77E891BEE594620A +PLT=C113094AD4F73BD9 +CIP=E83AC68878EC1F24 +test + +I=40 +KEY=7250B348C9181BD87F42728409920018 +PLT=E83AC68878EC1F24 +CIP=E77397A9393BA826 +test + +I=41 +KEY=9CEF33092C6FBD21A79333E13FCD66C9 +PLT=E77397A9393BA826 +CIP=21ED57E24E0FE088 +test + +I=42 +KEY=4958DEB2A99E700232E826BEBB18B6B2 +PLT=21ED57E24E0FE088 +CIP=46B7622DBF7DCA53 +test + +I=43 +KEY=8D095121375B5D155A1B3DB58DBF678D +PLT=46B7622DBF7DCA53 +CIP=852F7D08CC743ADD +test + +I=44 +KEY=3AF060C46EB201C085D662C8D6603B58 +PLT=852F7D08CC743ADD +CIP=0B707A89924B83D9 +test + +I=45 +KEY=7F9B2561991B2B1930BB1B896A0FBAD9 +PLT=0B707A89924B83D9 +CIP=4147445F321F8AE4 +test + +I=46 +KEY=2C13A3772C63C817F43B9AEB14CF2CEF +PLT=4147445F321F8AE4 +CIP=05C4479BF4590B10 +test + +I=47 +KEY=AC69F3730BD913CB3D7FC033E82D11BB +PLT=05C4479BF4590B10 +CIP=014EC1E0611BEA26 +test + +I=48 +KEY=F1A80E28019C0D50748283808292B910 +PLT=014EC1E0611BEA26 +CIP=6B345C61D43CD647 +test + +I=49 +KEY=5D4BBC51AC8596A994397B5DD8171D21 +PLT=6B345C61D43CD647 +CIP=A610C68608A514A7 +test + +I=50 +KEY=049029D6BA04E5BEE8DC275219347AD6 +PLT=A610C68608A514A7 +CIP=BBA9CAAB6AA0748C +test + +I=51 +KEY=DBCF0A1BA76D36DB60BD22ABB499CADB +PLT=BBA9CAAB6AA0748C +CIP=42E67363D4D613D5 +test + +I=52 +KEY=00FDF893744BC9B3C8D5AF3339AB8AC3 +PLT=42E67363D4D613D5 +CIP=A6D7BCAFEC02F2B2 +test + +I=53 +KEY=EAC7487B8495F0EF0087276F21EDCB9F +PLT=A6D7BCAFEC02F2B2 +CIP=437A809B72F19809 +test + +I=54 +KEY=D9A59D67AC25828B0BC198671687BEBB +PLT=437A809B72F19809 +CIP=438E97832A094DE0 +test + +I=55 +KEY=EC0D81EF0A79025B55B96A3F20EFBF83 +PLT=438E97832A094DE0 +CIP=A0722DDE3E45366B +test + +I=56 +KEY=1F108976CD9CF71625766F7E2E10C52E +PLT=A0722DDE3E45366B +CIP=FFA9FBC2AE73C071 +test + +I=57 +KEY=686EF53E967259EAEE44D1BE3E9240C2 +PLT=FFA9FBC2AE73C071 +CIP=F93605BF2E6F52BE +test + +I=58 +KEY=F47B4E7F3DC785E78C1F634BD02D854F +PLT=F93605BF2E6F52BE +CIP=1CF5FB81DF6FDFB9 +test + +I=59 +KEY=8F393029D80359A1A123DFB97AEB0271 +PLT=1CF5FB81DF6FDFB9 +CIP=5A4D3E3D82FD3E36 +test + +I=60 +KEY=23C551F5F3911DE55FE3001DC8A95A7D +PLT=5A4D3E3D82FD3E36 +CIP=A652BD50C400EEBA +test + +I=61 +KEY=075230ACE7166D480922209849E05270 +PLT=A652BD50C400EEBA +CIP=E805C1A1484EF1FC +test + +I=62 +KEY=5189DAED836F9F210D99291D03774B51 +PLT=E805C1A1484EF1FC +CIP=372E8983886B0A77 +test + +I=63 +KEY=720DA49338EF305BE75D31E31E573B63 +PLT=372E8983886B0A77 +CIP=8D7661153BA61A68 +test + +I=64 +KEY=7A2579E9F83941BD7329B10D230BD3C5 +PLT=8D7661153BA61A68 +CIP=963A87730EB2C805 +test + +I=65 +KEY=CB27205F9DA34A731D47129B32159D53 +PLT=963A87730EB2C805 +CIP=482EA344585DB33D +test + +I=66 +KEY=5E8A8410F004160CC6467254E858A204 +PLT=482EA344585DB33D +CIP=A473072F359BD765 +test + +I=67 +KEY=4E37DA3F7299E7A72FDB3FCF484BA33F +PLT=A473072F359BD765 +CIP=905C759B4C34BC6B +test + +I=68 +KEY=FD83A2DFCF175E6B10259977C4AD642B +PLT=905C759B4C34BC6B +CIP=E89E2443E6F522C0 +test + +I=69 +KEY=EE5712C74153EE2B1F0D494B9AE3EFA3 +PLT=E89E2443E6F522C0 +CIP=B5CCF6919E60CC1B +test + +I=70 +KEY=0B6B1065EB3DF2D1A247ABE1145D1DA1 +PLT=B5CCF6919E60CC1B +CIP=88FB0FF209027FFB +test + +I=71 +KEY=864E92AAF9F4200239747202E93ACAC2 +PLT=88FB0FF209027FFB +CIP=1216BABE92A51E11 +test + +I=72 +KEY=A120A7AA9BEC1D96DB6EBF5EBC70ECCE +PLT=1216BABE92A51E11 +CIP=8C06F25DEF2168D8 +test + +I=73 +KEY=E2C56325800134BD59BBBF4940A5983D +PLT=8C06F25DEF2168D8 +CIP=F71DDDE756056FDE +test + +I=74 +KEY=DAE1EAFB37CB17777BBF0D2B1ADFC417 +PLT=F71DDDE756056FDE +CIP=5BF56211FC3CE08B +test + +I=75 +KEY=C48FA649BA5161518B8BCEE56D014401 +PLT=5BF56211FC3CE08B +CIP=57D3FEEE0C478627 +test + +I=76 +KEY=1900BC76589673362EB2371ED90C24BE +PLT=57D3FEEE0C478627 +CIP=FB1193AF48F3459B +test + +I=77 +KEY=5005D1D75087E9076EE34B87B30BBE5F +PLT=FB1193AF48F3459B +CIP=CB9785BFA8406508 +test + +I=78 +KEY=A8915D038917D51F44BD26134289D63F +PLT=CB9785BFA8406508 +CIP=8549B183313FCA50 +test + +I=79 +KEY=043F67BB8B3113A3710D13373DEB4013 +PLT=8549B183313FCA50 +CIP=A6BBB9CDB600EF18 +test + +I=80 +KEY=E96F5EC5C8997ABDCD294EDD983D9AAD +PLT=A6BBB9CDB600EF18 +CIP=726CD70982409ADE +test + +I=81 +KEY=BF059641D53D5C31B91756A9538BAE29 +PLT=726CD70982409ADE +CIP=1C76C2F3A6B6ADDC +test + +I=82 +KEY=493971A385CB377B60A31773914558A3 +PLT=1C76C2F3A6B6ADDC +CIP=895007DA59B8E78B +test + +I=83 +KEY=BB7C68D633E88592B194F2A6857E90CA +PLT=895007DA59B8E78B +CIP=6ABFD6669330CAFF +test + +I=84 +KEY=676E0CD6799E076EACA0355610647976 +PLT=6ABFD6669330CAFF +CIP=23A3E7C2312F40E7 +test + +I=85 +KEY=71400AAA0A088C8AECB0C636E90A7A62 +PLT=23A3E7C2312F40E7 +CIP=67E8F5BB6EC317E8 +test + +I=86 +KEY=028FE18307072C2BBCB3DE2B71B50C6B +PLT=67E8F5BB6EC317E8 +CIP=C2C8E60D0C2FEAD7 +test + +I=87 +KEY=7F1F97A92AF71C95934F16496A13D89D +PLT=C2C8E60D0C2FEAD7 +CIP=A09C11A69AF50A19 +test + +I=88 +KEY=F4487A7637C23DC6A72EAEAAA3380DD6 +PLT=A09C11A69AF50A19 +CIP=44C2FD13F354918D +test + +I=89 +KEY=18433BAB4CD109AB979FA48F51D53763 +PLT=44C2FD13F354918D +CIP=347513216FAF48AB +test + +I=90 +KEY=DDC111110F5B5049A5D1425DA195B9A1 +PLT=347513216FAF48AB +CIP=D0CEB4AF93FCCA68 +test + +I=91 +KEY=04E559736163CD17B149812F2B6F1C4F +PLT=D0CEB4AF93FCCA68 +CIP=A536286FF2835BC7 +test + +I=92 +KEY=73CB7067C6B9794F94BB4BC7E5650CAF +PLT=A536286FF2835BC7 +CIP=E51FDC33A4922310 +test + +I=93 +KEY=15A159CFB4C9EA13419F7417EA9BC033 +PLT=E51FDC33A4922310 +CIP=74EF2C30E7019E9B +test + +I=94 +KEY=C0F29684A1DE3FC085A861E0849685C0 +PLT=74EF2C30E7019E9B +CIP=C2F199B2B8E465CD +test + +I=95 +KEY=01CEC9B25EB0A95ADF82885E7C7C10E2 +PLT=C2F199B2B8E465CD +CIP=461ECB1BBDD216C8 +test + +I=96 +KEY=4B610D0300C324E3E91B5083AED30B4B +PLT=461ECB1BBDD216C8 +CIP=F4E4948DC4D27A2E +test + +I=97 +KEY=FBFD7559B8BFB0E5D92360651A75A2DD +PLT=F4E4948DC4D27A2E +CIP=B9FF7CBF51189BE5 +test + +I=98 +KEY=F5910AE3BF4B447FE57D50835C2B545F +PLT=B9FF7CBF51189BE5 +CIP=7CDE71A25DD6450D +test + +I=99 +KEY=6FEC1C06BF745192888A066233067442 +PLT=7CDE71A25DD6450D +CIP=3994CF3989226B4C +test + +I=100 +KEY=D6F9076178BDACC1857F45698E5F80A9 +PLT=3994CF3989226B4C +CIP=817D63B20B63D6FB +test + +I=101 +KEY=158217F65E88C67A0DEAB0E642642142 +PLT=817D63B20B63D6FB +CIP=6F5E5E134B464B0E +test + +I=102 +KEY=3FC960B794C11E83E751B7430C3F2403 +PLT=6F5E5E134B464B0E +CIP=66E7F0E5CC27164F +test + +I=103 +KEY=25A3D8497D119DD57437E3699A75EB25 +PLT=66E7F0E5CC27164F +CIP=7ECBF284D12C2907 +test + +I=104 +KEY=C1960F404F6CD3D4C6162B8CD09E9E94 +PLT=7ECBF284D12C2907 +CIP=DD621E777CF11221 +test + +I=105 +KEY=D535E34BE03F09F7F1E1D0DF5475BAB7 +PLT=DD621E777CF11221 +CIP=04931D3D3F19C113 +test + +I=106 +KEY=F1E73D0D728D7C5D4E6DD8B931534C3D +PLT=04931D3D3F19C113 +CIP=7F0923D40494C7A5 +test + +I=107 +KEY=80402038ACB2897CE232CB4C3836EE44 +PLT=7F0923D40494C7A5 +CIP=AFA196C7F5991792 +test + +I=108 +KEY=AF03F5D3F3C3BE778CB5BE87042F3037 +PLT=AFA196C7F5991792 +CIP=DFAC3E8F35205169 +test + +I=109 +KEY=5AC7371BF97D57576581C367AB0BE70F +PLT=DFAC3E8F35205169 +CIP=97671E5CC3DFA2F5 +test + +I=110 +KEY=79F87EB86A6079A4E046E204CAAA094C +PLT=97671E5CC3DFA2F5 +CIP=9D7001B8F47474E0 +test + +I=111 +KEY=C77079B8188613C8DA8209BC28B00AB8 +PLT=9D7001B8F47474E0 +CIP=BD1B85428B44EFD1 +test + +I=112 +KEY=A0AEF516B6A0A6B2C2E8553AE5D48382 +PLT=BD1B85428B44EFD1 +CIP=CEF9411204DBB0DD +test + +I=113 +KEY=1CFCAD3ABE76A6B21652171A314A6BB2 +PLT=CEF9411204DBB0DD +CIP=AA5E86E576BAEAD1 +test + +I=114 +KEY=75C9F82D98895A755D9FE3E57569B675 +PLT=AA5E86E576BAEAD1 +CIP=5356FFC9DDA8858E +test + +I=115 +KEY=73C3BA61C4053A914485A0E1A9575219 +PLT=5356FFC9DDA8858E +CIP=DC5605588219BA0E +test + +I=116 +KEY=90AAEFC091EA75E00DCC3B6078CED418 +PLT=DC5605588219BA0E +CIP=9AF377A4DF1AF6C4 +test + +I=117 +KEY=AA422314E78CEF24334AA0885C868F14 +PLT=9AF377A4DF1AF6C4 +CIP=65EE9FF12244080B +test + +I=118 +KEY=E521153D214F6409E1BB59852B2B7C31 +PLT=65EE9FF12244080B +CIP=80A0D82D08AD2727 +test + +I=119 +KEY=276D174529F90FAD4B5145B1459B82BD +PLT=80A0D82D08AD2727 +CIP=DE4A09776C8431D8 +test + +I=120 +KEY=A9B1E4AF9227192F485B77C38B290FC7 +PLT=DE4A09776C8431D8 +CIP=70CBBC4EF0232C14 +test + +I=121 +KEY=4782B49E0DCECEF649BC7486298803CE +PLT=70CBBC4EF0232C14 +CIP=335545FF9FEC562C +test + +I=122 +KEY=CD7D4A7340F5EB77E9AF2DBFE829DEAF +PLT=335545FF9FEC562C +CIP=E8D2EEB266DF09D8 +test + +I=123 +KEY=5D30BFBAE31C4E8AF4D27B5E0F308A12 +PLT=E8D2EEB266DF09D8 +CIP=4BC37331863E2F4B +test + +I=124 +KEY=B3877E7141D11D11AB051D150E31AFD1 +PLT=4BC37331863E2F4B +CIP=0D8E2A158120676B +test + +I=125 +KEY=DA0F051187C11DE58859B20598E14F35 +PLT=0D8E2A158120676B +CIP=7E026D14C8591C67 +test + +I=126 +KEY=02EEE1EC32D41A3C918075E877AA3ED4 +PLT=7E026D14C8591C67 +CIP=91C6E084E4C3A25A +test + +I=127 +KEY=BDF6B078E7AE8434908A1D483000E454 +PLT=91C6E084E4C3A25A +CIP=EC67F6FE4CD74E43 +test + +I=128 +KEY=4AFCC362B0A44ABE4B3E0E4286A27A0E +PLT=EC67F6FE4CD74E43 +CIP=1CEA06CF62B737A0 +test + +I=129 +KEY=DC6D33DF31D79A376B07C3831033C4AF +PLT=1CEA06CF62B737A0 +CIP=ABF319BEFEAB17E6 +test + +I=130 +KEY=7728EE029B18D14E0FAADB6A26EEDE0E +PLT=ABF319BEFEAB17E6 +CIP=2FA845279E184D1B +test + +I=131 +KEY=44D1F4D7A899E0BF774D8A8798237817 +PLT=2FA845279E184D1B +CIP=B59D26A53B9F3C16 +test + +I=132 +KEY=1F1F0131308DEE15B8C7380955595BB5 +PLT=B59D26A53B9F3C16 +CIP=5402D7F2843361A5 +test + +I=133 +KEY=215289D246F81ED26000EE9A547E9112 +PLT=5402D7F2843361A5 +CIP=2FDFC82DC29DEB09 +test + +I=134 +KEY=05BD7E71C4AF6B354E059B75DD47067D +PLT=2FDFC82DC29DEB09 +CIP=1405F43C5B74A09F +test + +I=135 +KEY=4ADC70808C189EACC67A4FCC922E2D2C +PLT=1405F43C5B74A09F +CIP=E3C2261579F93ADA +test + +I=136 +KEY=E195A7A5350F06050F3FC80D5D4F7CA5 +PLT=E3C2261579F93ADA +CIP=7C8E6CD59CA7DAAE +test + +I=137 +KEY=4DD36711E107A1F5540B7A257D25A7C5 +PLT=7C8E6CD59CA7DAAE +CIP=D372EAB336A44A5A +test + +I=138 +KEY=E4FB0E3FCB0D604B5F4BCBC736199403 +PLT=D372EAB336A44A5A +CIP=FA96B094C7DCEEF3 +test + +I=139 +KEY=D634AE6487686D1C0EF4B8449AF09C04 +PLT=FA96B094C7DCEEF3 +CIP=FDEA162D6EB09608 +test + +I=140 +KEY=2C01C1A1E7F959956AA131197DAB111D +PLT=FDEA162D6EB09608 +CIP=8654F781884AAC3B +test + +I=141 +KEY=54FDB8C9864F90C98A691339A53FD681 +PLT=8654F781884AAC3B +CIP=E372EE8FC03C8C4D +test + +I=142 +KEY=D461A93BB3CF624F9659C02BE693BC2F +PLT=E372EE8FC03C8C4D +CIP=87EA0DFD7ABE61E9 +test + +I=143 +KEY=7D09E059CAA56285A77191CD080FD57D +PLT=87EA0DFD7ABE61E9 +CIP=6ADFBE420889CDE3 +test + +I=144 +KEY=4B9AC05A0C827EC22A84C3DED8C0B1D2 +PLT=6ADFBE420889CDE3 +CIP=6F31C3EF3A56D66F +test + +I=145 +KEY=54BDD657FA95F60FB909EA8F0F89519F +PLT=6F31C3EF3A56D66F +CIP=F27546BDE1A1DD2A +test + +I=146 +KEY=6CC18FBD505D1BCDE5E16219CF8F5B5D +PLT=F27546BDE1A1DD2A +CIP=5271A1BF41E1F8ED +test + +I=147 +KEY=25616E4F0FBB7967B091481B58639D7F +PLT=5271A1BF41E1F8ED +CIP=B77EF9B7412D74D5 +test + +I=148 +KEY=E76DAE275EF199173CF3515739359DE7 +PLT=B77EF9B7412D74D5 +CIP=FB519D537F03C0DE +test + +I=149 +KEY=3EBDD9B3849D6E7B69EFF26B6213BCE3 +PLT=FB519D537F03C0DE +CIP=6CFF1710ADE9AFAD +test + +I=150 +KEY=93A8EC0CB1A2A59045A8BB84157E04C0 +PLT=6CFF1710ADE9AFAD +CIP=0D783FF6079C2D11 +test + +I=151 +KEY=BBC25FE2A60246CE032EB1F25B3E0716 +PLT=0D783FF6079C2D11 +CIP=791A75C228B3D365 +test + +I=152 +KEY=CBE6FB02EFDAD712ACF23AC61D98D062 +PLT=791A75C228B3D365 +CIP=63F01470159B9E47 +test + +I=153 +KEY=D87EC6240D0699681342B0307E842D60 +PLT=63F01470159B9E47 +CIP=41722CCF0A7914A8 +test + +I=154 +KEY=AF0154436B730AD7A5313C9728B748AF +PLT=41722CCF0A7914A8 +CIP=B6A366ABC8F189AE +test + +I=155 +KEY=6CC51BDB93D554C305E780CB0347EF7B +PLT=B6A366ABC8F189AE +CIP=BB37DA35FFD80457 +test + +I=156 +KEY=03ADB3A528E9BD7D1B9312B1C9B3DCD5 +PLT=BB37DA35FFD80457 +CIP=9FE86E9822A94D70 +test + +I=157 +KEY=8F20207416085F48F2B6E4F062BAB108 +PLT=9FE86E9822A94D70 +CIP=42108BFA127FAB39 +test + +I=158 +KEY=D8683FF639A6F3DA1D72B0AE4B60D9BA +PLT=42108BFA127FAB39 +CIP=C84A5F8E164485F0 +test + +I=159 +KEY=01C4A88E6C4C4C9E9182E24E58BE652E +PLT=C84A5F8E164485F0 +CIP=0D7E9B5CC0AC33DF +test + +I=160 +KEY=83F8122078746BB4AFB62E68CBC2ADEC +PLT=0D7E9B5CC0AC33DF +CIP=340E0E67ADD2D77D +test + +I=161 +KEY=B75F9DB7F6AD30CFF50F719B0C2F8DB7 +PLT=340E0E67ADD2D77D +CIP=9B2DA0E5281016C2 +test + +I=162 +KEY=4FBFEFA9C227C4ADF3C763112B2988E5 +PLT=9B2DA0E5281016C2 +CIP=411F45BC6F280B37 +test + +I=163 +KEY=62D098509208532C466249C0AADA45BC +PLT=411F45BC6F280B37 +CIP=29CA18AFF6993FEE +test + +I=164 +KEY=BB59884FB3C5973FCE7348732B93EC7F +PLT=29CA18AFF6993FEE +CIP=11D5047D502C8D28 +test + +I=165 +KEY=6869EC6541EFECADA7593BC58905A81D +PLT=11D5047D502C8D28 +CIP=613E40D662A9058F +test + +I=166 +KEY=B660296E9920772ECAF2528A65A226B6 +PLT=613E40D662A9058F +CIP=3ADAE5366AB89201 +test + +I=167 +KEY=3146DD6A5E3670963AE240DA73A63BD6 +PLT=3ADAE5366AB89201 +CIP=2685B0A6C4F47780 +test + +I=168 +KEY=0354868A55DA211ED35AADE62770EAC6 +PLT=2685B0A6C4F47780 +CIP=DC06A2F4510B0D98 +test + +I=169 +KEY=7A4292C85ACABFEC2A506684DABE93D4 +PLT=DC06A2F4510B0D98 +CIP=B5ABE033A943715F +test + +I=170 +KEY=755B4193D293783BA19307EF8AF18593 +PLT=B5ABE033A943715F +CIP=55145BC9489DC79E +test + +I=171 +KEY=8E7FA619EB4D61618A2B891119177ED9 +PLT=55145BC9489DC79E +CIP=469589A83E15795C +test + +I=172 +KEY=0E4A0F1419E04410215CAE1880049668 +PLT=469589A83E15795C +CIP=60546FDB6E75B430 +test + +I=173 +KEY=001569574191C053C9C3DCC333D79A4B +PLT=60546FDB6E75B430 +CIP=C53251F7D7794ED9 +test + +I=174 +KEY=4199BB77AC557737C06B8C9F38E788D7 +PLT=C53251F7D7794ED9 +CIP=4597FC424A659374 +test + +I=175 +KEY=1CCAF95EACA81CCA985E036A948035B2 +PLT=4597FC424A659374 +CIP=139FA4C13FE579E8 +test + +I=176 +KEY=192763495405D351F14FDC3DE2798091 +PLT=139FA4C13FE579E8 +CIP=46284F4AAE8C6762 +test + +I=177 +KEY=08BE1FDAB36CCBAADD50DA8238F0CFDA +PLT=46284F4AAE8C6762 +CIP=9A6B08B20AB64D88 +test + +I=178 +KEY=C04C0ABA375C2182998A89DADE0ABAA2 +PLT=9A6B08B20AB64D88 +CIP=A3EF435A254AA1BC +test + +I=179 +KEY=31C60CFAA936CAB241D0E512D60C559A +PLT=A3EF435A254AA1BC +CIP=F04905782C96729A +test + +I=180 +KEY=B738BC245D7693F0EAF094786338E7A8 +PLT=F04905782C96729A +CIP=D890D9B6FA044BFC +test + +I=181 +KEY=F97E762AF14AB1CE5C240E1A601E9036 +PLT=D890D9B6FA044BFC +CIP=8DF90CD89185BD2B +test + +I=182 +KEY=6C4EE4A81ED06C981DBA62F07B08A8A8 +PLT=8DF90CD89185BD2B +CIP=E9962A11CADA1476 +test + +I=183 +KEY=BB19C26DDDF7B52974DFCFB937E3A761 +PLT=E9962A11CADA1476 +CIP=01E654B4F7D702B6 +test + +I=184 +KEY=F006FCE4C8B4B4D429AE82A83936ABB4 +PLT=01E654B4F7D702B6 +CIP=DE2A01F4C83D4FBD +test + +I=185 +KEY=FE9E2908B8D6142C0386CC08624A32A4 +PLT=DE2A01F4C83D4FBD +CIP=4FBD9F7388027424 +test + +I=186 +KEY=202B7D0BC7BBEC7363DD204BA47D25E3 +PLT=4FBD9F7388027424 +CIP=EF831C50ABF89607 +test + +I=187 +KEY=DF20CEC4EE581C70AB40A894BB0859D0 +PLT=EF831C50ABF89607 +CIP=A50964BD7BAED843 +test + +I=188 +KEY=D0DDDACDCC039DED553717812BB9170D +PLT=A50964BD7BAED843 +CIP=7D782764FFA0A8BE +test + +I=189 +KEY=818676605F9A4BAC1ADE7C6018345F54 +PLT=7D782764FFA0A8BE +CIP=E926424E163DCD43 +test + +I=190 +KEY=A0C24EEE70AA9746D594D216D3D2D3BE +PLT=E926424E163DCD43 +CIP=D22F59B40BA6EF61 +test + +I=191 +KEY=10C2D770BD10BB442D1CC410CA1C09C4 +PLT=D22F59B40BA6EF61 +CIP=7622C571BBF113D6 +test + +I=192 +KEY=CF3F94B1840739310DED25D97B5DE8B1 +PLT=7622C571BBF113D6 +CIP=F12288744E04E3C2 +test + +I=193 +KEY=11A600F891D4EF2CD67A9DF04D84A6D4 +PLT=F12288744E04E3C2 +CIP=2F4476E3F9AC3806 +test + +I=194 +KEY=CD5FB9076D23584B3A6723AF73B9E973 +PLT=2F4476E3F9AC3806 +CIP=2583FF8C16ED6666 +test + +I=195 +KEY=35C82F501C8077F40592B270CEEADBBC +PLT=2583FF8C16ED6666 +CIP=A8C25E5702002AB0 +test + +I=196 +KEY=216D49CF34AD93473AED123B36CD07B7 +PLT=A8C25E5702002AB0 +CIP=4064EB43FEAFD539 +test + +I=197 +KEY=D3B36F97C497B2C3809DDD17078580D3 +PLT=4064EB43FEAFD539 +CIP=973E2EDFB4F8360A +test + +I=198 +KEY=E3F7BDE32D61621F8EC5E323ADE9482F +PLT=973E2EDFB4F8360A +CIP=4D2CAF26D7A6839F +test + +I=199 +KEY=4FA402465C36C71E36280E0A46026CD6 +PLT=4D2CAF26D7A6839F +CIP=495E72861ED2FA07 +test + +I=200 +KEY=A03404D683DCC72EF122A5960704AC46 +PLT=495E72861ED2FA07 +CIP=0E5459C40522EAA7 +test + +I=201 +KEY=803C4F14E01C1A3CDF7453DC89B2C944 +PLT=0E5459C40522EAA7 +CIP=484A71FEA947E559 +test + +I=202 +KEY=0352A7C67B94EA66E260C62A7EDE724E +PLT=484A71FEA947E559 +CIP=B89282B381559C3D +test + +I=203 +KEY=81D114C378D18D736351455BC3CFDA63 +PLT=B89282B381559C3D +CIP=2C59A1CF370982F9 +test + +I=204 +KEY=F6DD9533CB8378CFBA6910DB2A27256F +PLT=2C59A1CF370982F9 +CIP=B63893339044E3BF +test + +I=205 +KEY=B5F75B4F570B102315C133637CB360D3 +PLT=B63893339044E3BF +CIP=4CAE18100BEA368F +test + +I=206 +KEY=2362A4C8B55AA7A04CB0EB2877204E50 +PLT=4CAE18100BEA368F +CIP=508646575A15ECB9 +test + +I=207 +KEY=74857947E96FDD57EDD7476B8F0B2547 +PLT=508646575A15ECB9 +CIP=16004ECF06D205EB +test + +I=208 +KEY=341F17A354B152BF976DD477E2C7C27F +PLT=16004ECF06D205EB +CIP=5CF08AC79EBFF2BA +test + +I=209 +KEY=9F8BC59342279F1F11ED54BFDB57D027 +PLT=5CF08AC79EBFF2BA +CIP=FBEEE6E3E3FA9AAB +test + +I=210 +KEY=B55BDE67308DF1EB26556043160D78D3 +PLT=FBEEE6E3E3FA9AAB +CIP=6E345F03FF6377E8 +test + +I=211 +KEY=050BB8BFD9CD6E932D29875FBFD9E023 +PLT=6E345F03FF6377E8 +CIP=9B9611D70867C0D1 +test + +I=212 +KEY=1B39EB0352C55D1F2599C0E778D59957 +PLT=9B9611D70867C0D1 +CIP=DAF0C46A385E783F +test + +I=213 +KEY=FA9A8A22C80A73BAA922148EC406930A +PLT=DAF0C46A385E783F +CIP=D82DD2D52686F120 +test + +I=214 +KEY=AE01F9E115F9272DC0B7EF7148A1D045 +PLT=D82DD2D52686F120 +CIP=B6E7FAFF95B5601D +test + +I=215 +KEY=99579BDBA185366F0DE7178F8A43093F +PLT=B6E7FAFF95B5601D +CIP=19D24D8DB2FF6999 +test + +I=216 +KEY=C6419A75743F7BD507AB8A55BD8F825D +PLT=19D24D8DB2FF6999 +CIP=EE74D01E49B02923 +test + +I=217 +KEY=52141C3A5670A01E2C34B14EAFB6568E +PLT=EE74D01E49B02923 +CIP=650003F0AC78DDCF +test + +I=218 +KEY=5926C1A44F4A2C902BA4C7644A5E91E0 +PLT=650003F0AC78DDCF +CIP=8A1A4201CB35698E +test + +I=219 +KEY=E7476FBD9F8D12B939397EDD489BE751 +PLT=8A1A4201CB35698E +CIP=30D4B2D556325343 +test + +I=220 +KEY=8D179C51681FAE65856351A5C6231515 +PLT=30D4B2D556325343 +CIP=B84D98C1C7496DFE +test + +I=221 +KEY=60F5EEC91979A5699C393DC10C49DC51 +PLT=B84D98C1C7496DFE +CIP=A5FE28B39207D1E2 +test + +I=222 +KEY=8037D15FF6CB1D337253581F4DA50D53 +PLT=A5FE28B39207D1E2 +CIP=6082ECB44CB335B0 +test + +I=223 +KEY=84A260182C0C2D14496611E4B1343184 +PLT=6082ECB44CB335B0 +CIP=8C29FA05479CB354 +test + +I=224 +KEY=B50B6125CADDF1ADBFEB10F1A31F6AB5 +PLT=8C29FA05479CB354 +CIP=A388DBDCE3DF7C51 +test + +I=225 +KEY=E4DCB160F18A548C88A86748DEE82E6C +PLT=A388DBDCE3DF7C51 +CIP=F17792A2F0B03856 +test + +I=226 +KEY=9E4052B66B80269A489E3FCA2626CF62 +PLT=F17792A2F0B03856 +CIP=37106FB40A5A62AE +test + +I=227 +KEY=6B907674E534BCF45650662411B8C6D4 +PLT=37106FB40A5A62AE +CIP=8246745732174575 +test + +I=228 +KEY=947315A35D85738736F15D0791C57267 +PLT=8246745732174575 +CIP=0ECD20FA52B7ED7D +test + +I=229 +KEY=F6E62712066084D2B38ABAB2D8A073BA +PLT=0ECD20FA52B7ED7D +CIP=6C3AE64082C4F2D3 +test + +I=230 +KEY=CD609004646EE2986634EBA055222BA0 +PLT=6C3AE64082C4F2D3 +CIP=8E7D9F47565CA786 +test + +I=231 +KEY=F2F7C2CB9BC5EFCF2BC5937F8CCD74A7 +PLT=8E7D9F47565CA786 +CIP=76ECA83CB23DB045 +test + +I=232 +KEY=48FC37D8D734ED2C06A8617036167F0C +PLT=76ECA83CB23DB045 +CIP=5513837DB5C0AE31 +test + +I=233 +KEY=697FC95D53CD031D5E1587213945B82D +PLT=5513837DB5C0AE31 +CIP=03FA443F67D97740 +test + +I=234 +KEY=81CF44F300777B278DCF135FD8A7DB9F +PLT=03FA443F67D97740 +CIP=B6BF41C92C4BA925 +test + +I=235 +KEY=810BC62DBE1DE7E9F1E7C7A199E7E609 +PLT=B6BF41C92C4BA925 +CIP=A437A2CC60A3899A +test + +I=236 +KEY=4B1C2F8430501BCCC56C37AC7B50E73C +PLT=A437A2CC60A3899A +CIP=0D073B2DACD1DE7F +test + +I=237 +KEY=7C2982D984D11FB5F643E045B5A36C6D +PLT=0D073B2DACD1DE7F +CIP=9F1DA216D1CCB42A +test + +I=238 +KEY=75D202DE61845D0EC0C6753272C8DB66 +PLT=9F1DA216D1CCB42A +CIP=DA949E68AA4312F9 +test + +I=239 +KEY=76D8CEACDADA46C01E2EE464BE4A5358 +PLT=DA949E68AA4312F9 +CIP=7535B6508100C572 +test + +I=240 +KEY=B144D6487B660968A1D84824B46897C0 +PLT=7535B6508100C572 +CIP=9C7B2962BD28588B +test + +I=241 +KEY=A38EE37625DAA082A03476C2883E6AB2 +PLT=9C7B2962BD28588B +CIP=F4F0C5E36F1BCB4A +test + +I=242 +KEY=8FE7CD3B3E03C5EBEA59D53F685F4453 +PLT=F4F0C5E36F1BCB4A +CIP=A65FB8441CD2F52E +test + +I=243 +KEY=03708A6011C6C96C112A4400061C1CE4 +PLT=A65FB8441CD2F52E +CIP=499A7317E352869A +test + +I=244 +KEY=6EB7B73B13192F3F3B1DDC97563350D7 +PLT=499A7317E352869A +CIP=DC74E83F914CE1F5 +test + +I=245 +KEY=79D3992BF897A3D70F252427612BDC1F +PLT=DC74E83F914CE1F5 +CIP=6204047C6D1D7851 +test + +I=246 +KEY=E6AA23B0C3D262F431A40F18832EDA8C +PLT=6204047C6D1D7851 +CIP=E2CBEB58BEFE5DEF +test + +I=247 +KEY=F282785CC97A38E07E20E83C65E66D98 +PLT=E2CBEB58BEFE5DEF +CIP=AD9720A18DF4ECD8 +test + +I=248 +KEY=07B5D7A9779D8EC9E6917F817C695561 +PLT=AD9720A18DF4ECD8 +CIP=DF34149BD0B8E3D1 +test + +I=249 +KEY=C39B7EDB3F4196138E15AA8F0C73574B +PLT=DF34149BD0B8E3D1 +CIP=E7B1A2C903E20CCC +test + +I=250 +KEY=0621A845AFBF6399855D6F2D18C91EC9 +PLT=E7B1A2C903E20CCC +CIP=5F303A708CA44CC1 +test + +I=251 +KEY=3AA4F788AED061D0AB7CD568D0D644D0 +PLT=5F303A708CA44CC1 +CIP=5E3651FE419CD9FC +test + +I=252 +KEY=E472E896CDEE669E1E600392C34ED94E +PLT=5E3651FE419CD9FC +CIP=33135B2B11B94C13 +test + +I=253 +KEY=CCC95DC34527B44B3CE1AE0B571BBFDB +PLT=33135B2B11B94C13 +CIP=E8FD390B5F252B1A +test + +I=254 +KEY=2BC779EBE6490423CA49E42B91D1B72B +PLT=E8FD390B5F252B1A +CIP=762D2725FBEF2DBE +test + +I=255 +KEY=EFDFCB952B81A19D93AD2C495FCB1495 +PLT=762D2725FBEF2DBE +CIP=A8077693C5E70D85 +test + +I=256 +KEY=B9E7288F4B91B00B07290A4BAA072D23 +PLT=A8077693C5E70D85 +CIP=E517B7748C7F6DE7 +test diff -urN lin.2.4.3/crypto/testing/test.serpent int.2.4.3/crypto/testing/test.serpent --- lin.2.4.3/crypto/testing/test.serpent Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/test.serpent Mon Apr 2 18:37:26 2001 @@ -0,0 +1,6033 @@ +#!/bin/bash + +test () { + echo "Test number $I - keysize $KEYSIZE" + ./testcip -c serpent -k $KEY -p $PT -e $CT | sed '/^Registered/d' +} + +# This data is from the Serpent AES submission (filename ecb_e_m.txt) + +KEYSIZE=128 + +I=0 +KEY=00000000000000000000000000000000 +PT=00000000000000000000000000000000 +CT=90e7a5ba9497fa1bfc00f7d1a3a86a1e +test + +I=1 +KEY=90e7a5ba9497fa1bfc00f7d1a3a86a1e +PT=90e7a5ba9497fa1bfc00f7d1a3a86a1e +CT=5d0c5da998aaa940d493738892579447 +test + +I=2 +KEY=cdebf8130c3d535b2893845931fffe59 +PT=5d0c5da998aaa940d493738892579447 +CT=b5e6510fbbd63d828ade0b89ae48ef5f + +I=3 +KEY=780da91cb7eb6ed9a24d8fd09fb71106 +PT=b5e6510fbbd63d828ade0b89ae48ef5f +CT=8056b61dacb4d3f52976ef5b1d4165e8 + +I=4 +KEY=f85b1f011b5fbd2c8b3b608b82f674ee +PT=8056b61dacb4d3f52976ef5b1d4165e8 +CT=3997c4990223e5c70f3cb015f48ec57a + +I=5 +KEY=c1ccdb98197c58eb8407d09e7678b194 +PT=3997c4990223e5c70f3cb015f48ec57a +CT=b7754c34b5837b193364fc55cca342d3 + +I=6 +KEY=76b997acacff23f2b7632ccbbadbf347 +PT=b7754c34b5837b193364fc55cca342d3 +CT=e913e0510a87bdbc5307183b43e5bead + +I=7 +KEY=9faa77fda6789e4ee46434f0f93e4dea +PT=e913e0510a87bdbc5307183b43e5bead +CT=5deecef8bb9617241c3b72b0ca15d781 + +I=8 +KEY=c244b9051dee896af85f4640332b9a6b +PT=5deecef8bb9617241c3b72b0ca15d781 +CT=f93e76e8ea57a73ecf91768d887a3132 + +I=9 +KEY=3b7acfedf7b92e5437ce30cdbb51ab59 +PT=f93e76e8ea57a73ecf91768d887a3132 +CT=4155187326abdd90e66ee198b92852c5 + +I=10 +KEY=7a2fd79ed112f3c4d1a0d1550279f99c +PT=4155187326abdd90e66ee198b92852c5 +CT=5c4242407bd8348aa3c3b6a243b7c371 + +I=11 +KEY=266d95deaacac74e726367f741ce3aed +PT=5c4242407bd8348aa3c3b6a243b7c371 +CT=5b4cecf483508ff319caa2f00a0c17d5 + +I=12 +KEY=7d21792a299a48bd6ba9c5074bc22d38 +PT=5b4cecf483508ff319caa2f00a0c17d5 +CT=aeeb485281bb39e30c56a9e7aa636ca8 + +I=13 +KEY=d3ca3178a821715e67ff6ce0e1a14190 +PT=aeeb485281bb39e30c56a9e7aa636ca8 +CT=74aa340e5149fd50a92687169a5dad2c + +I=14 +KEY=a7600576f9688c0eced9ebf67bfcecbc +PT=74aa340e5149fd50a92687169a5dad2c +CT=8bcead0ed0a0932cf13fcb7ab5011a8d + +I=15 +KEY=2caea87829c81f223fe6208ccefdf631 +PT=8bcead0ed0a0932cf13fcb7ab5011a8d +CT=c4002db30e5fcde6f52f855600d1c2d5 + +I=16 +KEY=e8ae85cb2797d2c4cac9a5dace2c34e4 +PT=c4002db30e5fcde6f52f855600d1c2d5 +CT=e9dd90ae5a580fef7f81620f75390414 + +I=17 +KEY=017315657dcfdd2bb548c7d5bb1530f0 +PT=e9dd90ae5a580fef7f81620f75390414 +CT=f27e886c458ef023209736a2359d3895 + +I=18 +KEY=f30d9d0938412d0895dff1778e880865 +PT=f27e886c458ef023209736a2359d3895 +CT=8b740f950c175f95040ca834cc11e520 + +I=19 +KEY=7879929c3456729d91d359434299ed45 +PT=8b740f950c175f95040ca834cc11e520 +CT=27d47ca238d5938fa213d8638f5b0f32 + +I=20 +KEY=5fadee3e0c83e11233c08120cdc2e277 +PT=27d47ca238d5938fa213d8638f5b0f32 +CT=8b518675e0dd55858c6f8ca18baa526b + +I=21 +KEY=d4fc684bec5eb497bfaf0d814668b01c +PT=8b518675e0dd55858c6f8ca18baa526b +CT=720a221100bdf2b047c7ea8696e2b3fa + +I=22 +KEY=a6f64a5aece34627f868e707d08a03e6 +PT=720a221100bdf2b047c7ea8696e2b3fa +CT=a429e76808fa660c6d60eed37e34f1a9 + +I=23 +KEY=02dfad32e419202b950809d4aebef24f +PT=a429e76808fa660c6d60eed37e34f1a9 +CT=d3df614f50d17762938398a0831b0296 + +I=24 +KEY=d100cc7db4c85749068b91742da5f0d9 +PT=d3df614f50d17762938398a0831b0296 +CT=f29296629ff5f465fafb6bfc1f813515 + +I=25 +KEY=23925a1f2b3da32cfc70fa883224c5cc +PT=f29296629ff5f465fafb6bfc1f813515 +CT=80d6d15957374029996a623c99238958 + +I=26 +KEY=a3448b467c0ae305651a98b4ab074c94 +PT=80d6d15957374029996a623c99238958 +CT=9b47672e762432137d13f94ecd75d81b + +I=27 +KEY=3803ec680a2ed116180961fa6672948f +PT=9b47672e762432137d13f94ecd75d81b +CT=5ccd63f83b863ae198ba0698853eef2d + +I=28 +KEY=64ce8f9031a8ebf780b36762e34c7ba2 +PT=5ccd63f83b863ae198ba0698853eef2d +CT=602c04659a301521a347b8e13852af49 + +I=29 +KEY=04e28bf5ab98fed623f4df83db1ed4eb +PT=602c04659a301521a347b8e13852af49 +CT=dce9d616364728bd82007e360c7dc53e + +I=30 +KEY=d80b5de39ddfd66ba1f4a1b5d76311d5 +PT=dce9d616364728bd82007e360c7dc53e +CT=fbb8ea4fbbfddaea84b6610a620e2d51 + +I=31 +KEY=23b3b7ac26220c812542c0bfb56d3c84 +PT=fbb8ea4fbbfddaea84b6610a620e2d51 +CT=a3e2ada129623ed16a13440d0ae57bfa + +I=32 +KEY=80511a0d0f4032504f5184b2bf88477e +PT=a3e2ada129623ed16a13440d0ae57bfa +CT=b9d32b748df0e1afee4b4b1f9f659baa + +I=33 +KEY=3982317982b0d3ffa11acfad20eddcd4 +PT=b9d32b748df0e1afee4b4b1f9f659baa +CT=d3f16a2c390edd835da4cedc80fed18b + +I=34 +KEY=ea735b55bbbe0e7cfcbe0171a0130d5f +PT=d3f16a2c390edd835da4cedc80fed18b +CT=88cacedfcf3d796cd1c2c4e5da52352f + +I=35 +KEY=62b9958a748377102d7cc5947a413870 +PT=88cacedfcf3d796cd1c2c4e5da52352f +CT=93f380c72955353a6e574b1949e23ae8 + +I=36 +KEY=f14a154d5dd6422a432b8e8d33a30298 +PT=93f380c72955353a6e574b1949e23ae8 +CT=22b0471ed3f302be0be383c996452921 + +I=37 +KEY=d3fa52538e25409448c80d44a5e62bb9 +PT=22b0471ed3f302be0be383c996452921 +CT=23f177c639e0fe82ddf9c4c7044d4248 + +I=38 +KEY=f00b2595b7c5be169531c983a1ab69f1 +PT=23f177c639e0fe82ddf9c4c7044d4248 +CT=7d31de04dcd97189a0bae72bafcbbf91 + +I=39 +KEY=8d3afb916b1ccf9f358b2ea80e60d660 +PT=7d31de04dcd97189a0bae72bafcbbf91 +CT=7d2d38fb002c62ff6cc023286abb2882 + +I=40 +KEY=f017c36a6b30ad60594b0d8064dbfee2 +PT=7d2d38fb002c62ff6cc023286abb2882 +CT=a65d17620e49a844393686f87373114b + +I=41 +KEY=564ad40865790524607d8b7817a8efa9 +PT=a65d17620e49a844393686f87373114b +CT=2776e834b7c5278eccdb080c1af52e21 + +I=42 +KEY=713c3c3cd2bc22aaaca683740d5dc188 +PT=2776e834b7c5278eccdb080c1af52e21 +CT=f5219b02d9d8e287c0e1caf89ddbae70 + +I=43 +KEY=841da73e0b64c02d6c47498c90866ff8 +PT=f5219b02d9d8e287c0e1caf89ddbae70 +CT=04fa5d22c24d21bb5627f42082f5ec61 + +I=44 +KEY=80e7fa1cc929e1963a60bdac12738399 +PT=04fa5d22c24d21bb5627f42082f5ec61 +CT=c14c29d52bb22a4abd5707678a55a571 + +I=45 +KEY=41abd3c9e29bcbdc8737bacb982626e8 +PT=c14c29d52bb22a4abd5707678a55a571 +CT=6eaf10acdc685e63f8bdad80a6626a31 + +I=46 +KEY=2f04c3653ef395bf7f8a174b3e444cd9 +PT=6eaf10acdc685e63f8bdad80a6626a31 +CT=9e7363e279adcd0dfc2f1b8709addc1b + +I=47 +KEY=b177a087475e58b283a50ccc37e990c2 +PT=9e7363e279adcd0dfc2f1b8709addc1b +CT=fdf3c06baba03318401116c3d0c943a8 + +I=48 +KEY=4c8460ececfe6baac3b41a0fe720d36a +PT=fdf3c06baba03318401116c3d0c943a8 +CT=63f1040c9b3626aeba7db06f766ff53c + +I=49 +KEY=2f7564e077c84d0479c9aa60914f2656 +PT=63f1040c9b3626aeba7db06f766ff53c +CT=afd90f2e80c89fcc44a965e05287dc2d + +I=50 +KEY=80ac6bcef700d2c83d60cf80c3c8fa7b +PT=afd90f2e80c89fcc44a965e05287dc2d +CT=62f0ad9d5fe4cbbbc151c8cbf765d822 + +I=51 +KEY=e25cc653a8e41973fc31074b34ad2259 +PT=62f0ad9d5fe4cbbbc151c8cbf765d822 +CT=fd9135db0d9b098823a3057e02d63186 + +I=52 +KEY=1fcdf388a57f10fbdf920235367b13df +PT=fd9135db0d9b098823a3057e02d63186 +CT=b49d59b12cce545d136ede740ea1f203 + +I=53 +KEY=ab50aa3989b144a6ccfcdc4138dae1dc +PT=b49d59b12cce545d136ede740ea1f203 +CT=6493367a1c29e02edb93cc32f94d667d + +I=54 +KEY=cfc39c439598a488176f1073c19787a1 +PT=6493367a1c29e02edb93cc32f94d667d +CT=2c82f5079b5cf66371e0176bcb26ff4e + +I=55 +KEY=e34169440ec452eb668f07180ab178ef +PT=2c82f5079b5cf66371e0176bcb26ff4e +CT=5e221e543e290d14437334f8ac33441a + +I=56 +KEY=bd63771030ed5fff25fc33e0a6823cf5 +PT=5e221e543e290d14437334f8ac33441a +CT=3aa92404c6007679e5badb2f44efbd05 + +I=57 +KEY=87ca5314f6ed2986c046e8cfe26d81f0 +PT=3aa92404c6007679e5badb2f44efbd05 +CT=39e62714a3cbe5941be6604c5da3f66d + +I=58 +KEY=be2c74005526cc12dba08883bfce779d +PT=39e62714a3cbe5941be6604c5da3f66d +CT=eb643953304dd57166e6c3c21fe5d442 + +I=59 +KEY=55484d53656b1963bd464b41a02ba3df +PT=eb643953304dd57166e6c3c21fe5d442 +CT=b054df558404653b2fb7870779729308 + +I=60 +KEY=e51c9206e16f7c5892f1cc46d95930d7 +PT=b054df558404653b2fb7870779729308 +CT=cc8888bd62fe78d06b1dc157a5cf66ee + +I=61 +KEY=29941abb83910488f9ec0d117c965639 +PT=cc8888bd62fe78d06b1dc157a5cf66ee +CT=bdf868d4e14dcb8a011cf988c0eaa389 + +I=62 +KEY=946c726f62dccf02f8f0f499bc7cf5b0 +PT=bdf868d4e14dcb8a011cf988c0eaa389 +CT=68b22fd31307f25c4e7099f049df729c + +I=63 +KEY=fcde5dbc71db3d5eb6806d69f5a3872c +PT=68b22fd31307f25c4e7099f049df729c +CT=4f2b80a07601de4a31806b550f7bfda7 + +I=64 +KEY=b3f5dd1c07dae3148700063cfad87a8b +PT=4f2b80a07601de4a31806b550f7bfda7 +CT=3327a52e3469d73d25cdcdcfbe1041ce + +I=65 +KEY=80d2783233b33429a2cdcbf344c83b45 +PT=3327a52e3469d73d25cdcdcfbe1041ce +CT=5ef2874dae787aa9f2de3d23cb0db131 + +I=66 +KEY=de20ff7f9dcb4e805013f6d08fc58a74 +PT=5ef2874dae787aa9f2de3d23cb0db131 +CT=cd39f261126609e40d3de716bc04253c + +I=67 +KEY=13190d1e8fad47645d2e11c633c1af48 +PT=cd39f261126609e40d3de716bc04253c +CT=57db0e3d4fa62dd3f05b91d526dbe3f9 + +I=68 +KEY=44c20323c00b6ab7ad758013151a4cb1 +PT=57db0e3d4fa62dd3f05b91d526dbe3f9 +CT=d884f82533c01c21256b9b1d9029fe35 + +I=69 +KEY=9c46fb06f3cb7696881e1b0e8533b284 +PT=d884f82533c01c21256b9b1d9029fe35 +CT=9fa8a2639f7d3fce51098cf827d157a7 + +I=70 +KEY=03ee59656cb64958d91797f6a2e2e523 +PT=9fa8a2639f7d3fce51098cf827d157a7 +CT=431404ec97c1ef4318da9fe6c333047b + +I=71 +KEY=40fa5d89fb77a61bc1cd081061d1e158 +PT=431404ec97c1ef4318da9fe6c333047b +CT=45c193fbab6b9f3bdee77044226b4a3c + +I=72 +KEY=053bce72501c39201f2a785443baab64 +PT=45c193fbab6b9f3bdee77044226b4a3c +CT=dd6ff2781e3a74874a65dcc27bcb74e3 + +I=73 +KEY=d8543c0a4e264da7554fa4963871df87 +PT=dd6ff2781e3a74874a65dcc27bcb74e3 +CT=e1306b019f5d79cb294f8437c787f44a + +I=74 +KEY=3964570bd17b346c7c0020a1fff62bcd +PT=e1306b019f5d79cb294f8437c787f44a +CT=04154311deed614abcc5cba235a20a42 + +I=75 +KEY=3d71141a0f965526c0c5eb03ca54218f +PT=04154311deed614abcc5cba235a20a42 +CT=d4f15e24cdfb644cb8c2910e0ddb4ed6 + +I=76 +KEY=e9804a3ec26d316a78077a0dc78f6f59 +PT=d4f15e24cdfb644cb8c2910e0ddb4ed6 +CT=6cfa285e642508e26dedae055b0c49e7 + +I=77 +KEY=857a6260a648398815ead4089c8326be +PT=6cfa285e642508e26dedae055b0c49e7 +CT=78f15905354e7f80a743d183973c0a85 + +I=78 +KEY=fd8b3b6593064608b2a9058b0bbf2c3b +PT=78f15905354e7f80a743d183973c0a85 +CT=2e35f5740e44e28b26b51bf65a2676a7 + +I=79 +KEY=d3bece119d42a483941c1e7d51995a9c +PT=2e35f5740e44e28b26b51bf65a2676a7 +CT=ef6ee091fe08fbd5f1f106d89527c100 + +I=80 +KEY=3cd02e80634a5f5665ed18a5c4be9b9c +PT=ef6ee091fe08fbd5f1f106d89527c100 +CT=92c508be2ca03a53ffd785888a45c1f4 + +I=81 +KEY=ae15263e4fea65059a3a9d2d4efb5a68 +PT=92c508be2ca03a53ffd785888a45c1f4 +CT=500bb5146d89679c264472fd0da0d397 + +I=82 +KEY=fe1e932a22630299bc7eefd0435b89ff +PT=500bb5146d89679c264472fd0da0d397 +CT=16db8cfca082c845bf5249623be8860b + +I=83 +KEY=e8c51fd682e1cadc032ca6b278b30ff4 +PT=16db8cfca082c845bf5249623be8860b +CT=3336133e35f5d0bc58256431f7a9a4e3 + +I=84 +KEY=dbf30ce8b7141a605b09c2838f1aab17 +PT=3336133e35f5d0bc58256431f7a9a4e3 +CT=73452a0a75c401f90c4e15c4290e6b4e + +I=85 +KEY=a8b626e2c2d01b995747d747a614c059 +PT=73452a0a75c401f90c4e15c4290e6b4e +CT=028b57b7d8c1dc19496002a5dd746406 + +I=86 +KEY=aa3d71551a11c7801e27d5e27b60a45f +PT=028b57b7d8c1dc19496002a5dd746406 +CT=830c9912913db225f3183fc45d2c9ca7 + +I=87 +KEY=2931e8478b2c75a5ed3fea26264c38f8 +PT=830c9912913db225f3183fc45d2c9ca7 +CT=f4a68e31d506fe48c1e77768e8603c44 + +I=88 +KEY=dd9766765e2a8bed2cd89d4ece2c04bc +PT=f4a68e31d506fe48c1e77768e8603c44 +CT=2b96a7313fbf19a1e0d7c9c2888136ec + +I=89 +KEY=f601c1476195924ccc0f548c46ad3250 +PT=2b96a7313fbf19a1e0d7c9c2888136ec +CT=7c8d227b733cfecde920dc652a534667 + +I=90 +KEY=8a8ce33c12a96c81252f88e96cfe7437 +PT=7c8d227b733cfecde920dc652a534667 +CT=f6c1c2b2339b75008053ea99aab5abe8 + +I=91 +KEY=7c4d218e21321981a57c6270c64bdfdf +PT=f6c1c2b2339b75008053ea99aab5abe8 +CT=7c407381bb1fa4c670841d6df066bf84 + +I=92 +KEY=000d520f9a2dbd47d5f87f1d362d605b +PT=7c407381bb1fa4c670841d6df066bf84 +CT=73c8973c7630f092c1579e7804c68ecc + +I=93 +KEY=73c5c533ec1d4dd514afe16532ebee97 +PT=73c8973c7630f092c1579e7804c68ecc +CT=3a2d933d64926a359430dd5d0768b007 + +I=94 +KEY=49e8560e888f27e0809f3c3835835e90 +PT=3a2d933d64926a359430dd5d0768b007 +CT=55ebf1ab74a6649f872d3c04990312ba + +I=95 +KEY=1c03a7a5fc29437f07b2003cac804c2a +PT=55ebf1ab74a6649f872d3c04990312ba +CT=741f5430a26f82ee958410f7adb51947 + +I=96 +KEY=681cf3955e46c191923610cb0135556d +PT=741f5430a26f82ee958410f7adb51947 +CT=6bc8f4dd2494e4feecff7520f1177cd9 + +I=97 +KEY=03d407487ad2256f7ec965ebf02229b4 +PT=6bc8f4dd2494e4feecff7520f1177cd9 +CT=7bf8f1749fbb56612d77464adaa2d0a0 + +I=98 +KEY=782cf63ce569730e53be23a12a80f914 +PT=7bf8f1749fbb56612d77464adaa2d0a0 +CT=56fb7c4244c8d3a1b00b49e4c902638c + +I=99 +KEY=2ed78a7ea1a1a0afe3b56a45e3829a98 +PT=56fb7c4244c8d3a1b00b49e4c902638c +CT=295f3ab6363fc49b06605ca3ca489b0a + +I=100 +KEY=0788b0c8979e6434e5d536e629ca0192 +PT=295f3ab6363fc49b06605ca3ca489b0a +CT=d33ce65e4631a25bb6a87a4004fc786a + +I=101 +KEY=d4b45696d1afc66f537d4ca62d3679f8 +PT=d33ce65e4631a25bb6a87a4004fc786a +CT=d606cd8a768ec3c8c1fd055bcd91be65 + +I=102 +KEY=02b29b1ca72105a7928049fde0a7c79d +PT=d606cd8a768ec3c8c1fd055bcd91be65 +CT=3666ac8a6ad61a2db2d602f8cccdf2b0 + +I=103 +KEY=34d43796cdf71f8a20564b052c6a352d +PT=3666ac8a6ad61a2db2d602f8cccdf2b0 +CT=6aca9f27cbbcdfb9185173d6a753411e + +I=104 +KEY=5e1ea8b1064bc033380738d38b397433 +PT=6aca9f27cbbcdfb9185173d6a753411e +CT=919e890970d7d4ff78b333fbab1cd0fa + +I=105 +KEY=cf8021b8769c14cc40b40b282025a4c9 +PT=919e890970d7d4ff78b333fbab1cd0fa +CT=bd7b66d3a2356a342cc7ea74c065fc64 + +I=106 +KEY=72fb476bd4a97ef86c73e15ce04058ad +PT=bd7b66d3a2356a342cc7ea74c065fc64 +CT=01dd4844877c8b94b28872b123b40a8d + +I=107 +KEY=73260f2f53d5f56cdefb93edc3f45220 +PT=01dd4844877c8b94b28872b123b40a8d +CT=f9db3a0ae3d39190b6bcf705018bb536 + +I=108 +KEY=8afd3525b00664fc684764e8c27fe716 +PT=f9db3a0ae3d39190b6bcf705018bb536 +CT=9f33a2ebd76327202c471e41780f95ce + +I=109 +KEY=15ce97ce676543dc44007aa9ba7072d8 +PT=9f33a2ebd76327202c471e41780f95ce +CT=7dd2a411a726f31437cd86ff7bd2a511 + +I=110 +KEY=681c33dfc043b0c873cdfc56c1a2d7c9 +PT=7dd2a411a726f31437cd86ff7bd2a511 +CT=b2c03f0aa618a1546bcc654e18ce471b + +I=111 +KEY=dadc0cd5665b119c18019918d96c90d2 +PT=b2c03f0aa618a1546bcc654e18ce471b +CT=cf46dd238a30a1b59316046f47702754 + +I=112 +KEY=159ad1f6ec6bb0298b179d779e1cb786 +PT=cf46dd238a30a1b59316046f47702754 +CT=e94802f741c2f3372376036b5e99f02e + +I=113 +KEY=fcd2d301ada9431ea8619e1cc08547a8 +PT=e94802f741c2f3372376036b5e99f02e +CT=1cbe198b5c4f6be4403d4dde970cebc9 + +I=114 +KEY=e06cca8af1e628fae85cd3c25789ac61 +PT=1cbe198b5c4f6be4403d4dde970cebc9 +CT=032005439cb0ddee606a28fa3777550a + +I=115 +KEY=e34ccfc96d56f5148836fb3860fef96b +PT=032005439cb0ddee606a28fa3777550a +CT=0cdb425a21fa47d20641952bfb01525b + +I=116 +KEY=ef978d934cacb2c68e776e139bffab30 +PT=0cdb425a21fa47d20641952bfb01525b +CT=7b76ae2a947e38ea4176d28429ee5945 + +I=117 +KEY=94e123b9d8d28a2ccf01bc97b211f275 +PT=7b76ae2a947e38ea4176d28429ee5945 +CT=9a0353db5f0408c43790e971c780f7a3 + +I=118 +KEY=0ee2706287d682e8f89155e6759105d6 +PT=9a0353db5f0408c43790e971c780f7a3 +CT=6bb338abf621f1ad8be884ec0686969a + +I=119 +KEY=655148c971f773457379d10a7317934c +PT=6bb338abf621f1ad8be884ec0686969a +CT=93a269b17363e903864b8dfe32edf1af + +I=120 +KEY=f6f3217802949a46f5325cf441fa62e3 +PT=93a269b17363e903864b8dfe32edf1af +CT=c7a7909e9239de14e77a321bdbf37b05 + +I=121 +KEY=3154b1e690ad445212486eef9a0919e6 +PT=c7a7909e9239de14e77a321bdbf37b05 +CT=9975334936e13f592ab662d6211ae872 + +I=122 +KEY=a82182afa64c7b0b38fe0c39bb13f194 +PT=9975334936e13f592ab662d6211ae872 +CT=868c82b31a268ba7a213a7e777695603 + +I=123 +KEY=2ead001cbc6af0ac9aedabdecc7aa797 +PT=868c82b31a268ba7a213a7e777695603 +CT=75918ec0f51e72e2d39ae05c9624a60c + +I=124 +KEY=5b3c8edc4974824e49774b825a5e019b +PT=75918ec0f51e72e2d39ae05c9624a60c +CT=c8a440ea32c88c731dd5f1eacfb44ede + +I=125 +KEY=9398ce367bbc0e3d54a2ba6895ea4f45 +PT=c8a440ea32c88c731dd5f1eacfb44ede +CT=78429eabb321581d4621da18520149c4 + +I=126 +KEY=ebda509dc89d562012836070c7eb0681 +PT=78429eabb321581d4621da18520149c4 +CT=fce551f9ae5926bd70702466c34b37ed + +I=127 +KEY=173f016466c4709d62f3441604a0316c +PT=fce551f9ae5926bd70702466c34b37ed +CT=0845a7fbdd4b01598c773d673c296f92 + +I=128 +KEY=1f7aa69fbb8f71c4ee84797138895efe +PT=0845a7fbdd4b01598c773d673c296f92 +CT=cb3bbfeb055787bcfc79fff7c8005cad + +I=129 +KEY=d4411974bed8f67812fd8686f0890253 +PT=cb3bbfeb055787bcfc79fff7c8005cad +CT=6b26bf57ac07c34e8e5446740bdf6db9 + +I=130 +KEY=bf67a62312df35369ca9c0f2fb566fea +PT=6b26bf57ac07c34e8e5446740bdf6db9 +CT=145b99fe5bf9765cc6d72b1b5d391a94 + +I=131 +KEY=ab3c3fdd4926436a5a7eebe9a66f757e +PT=145b99fe5bf9765cc6d72b1b5d391a94 +CT=2afa06f2f81918a34923f9480c986fdc + +I=132 +KEY=81c6392fb13f5bc9135d12a1aaf71aa2 +PT=2afa06f2f81918a34923f9480c986fdc +CT=45ff720606fe80e148de85977adc91b2 + +I=133 +KEY=c4394b29b7c1db285b839736d02b8b10 +PT=45ff720606fe80e148de85977adc91b2 +CT=bd69984c9cb20b0bb2f71dcd1989c268 + +I=134 +KEY=7950d3652b73d023e9748afbc9a24978 +PT=bd69984c9cb20b0bb2f71dcd1989c268 +CT=237e5212d2ccbeba103965773e7147d6 + +I=135 +KEY=5a2e8177f9bf6e99f94def8cf7d30eae +PT=237e5212d2ccbeba103965773e7147d6 +CT=2140a2d4ac837948eedbbe86ca3f3567 + +I=136 +KEY=7b6e23a3553c17d11796510a3dec3bc9 +PT=2140a2d4ac837948eedbbe86ca3f3567 +CT=3234b91452f79136ebce41af83122034 + +I=137 +KEY=495a9ab707cb86e7fc5810a5befe1bfd +PT=3234b91452f79136ebce41af83122034 +CT=c1abcb54c1828c7fa53c9be71867411b + +I=138 +KEY=88f151e3c6490a9859648b42a6995ae6 +PT=c1abcb54c1828c7fa53c9be71867411b +CT=3683c529079a6de9c5ff57a64de6e59f + +I=139 +KEY=be7294cac1d367719c9bdce4eb7fbf79 +PT=3683c529079a6de9c5ff57a64de6e59f +CT=a79b49117f4a1458eb43c3133488ef5a + +I=140 +KEY=19e9dddbbe99732977d81ff7dff75023 +PT=a79b49117f4a1458eb43c3133488ef5a +CT=ed5ab6fd320bebf586c10326d22d2613 + +I=141 +KEY=f4b36b268c9298dcf1191cd10dda7630 +PT=ed5ab6fd320bebf586c10326d22d2613 +CT=99202ed533e6f269403f88d37bf329be + +I=142 +KEY=6d9345f3bf746ab5b126940276295f8e +PT=99202ed533e6f269403f88d37bf329be +CT=0014a7596afd96e960b9e0b245c7e8ef + +I=143 +KEY=6d87e2aad589fc5cd19f74b033eeb761 +PT=0014a7596afd96e960b9e0b245c7e8ef +CT=0cd28bc6e5d64a8fe047ab6b4c2e3a8d + +I=144 +KEY=6155696c305fb6d331d8dfdb7fc08dec +PT=0cd28bc6e5d64a8fe047ab6b4c2e3a8d +CT=47c58164f955a002e47bb8bfc9d8bbcd + +I=145 +KEY=2690e808c90a16d1d5a36764b6183621 +PT=47c58164f955a002e47bb8bfc9d8bbcd +CT=4f1547ca58f6706125e84f436572541b + +I=146 +KEY=6985afc291fc66b0f04b2827d36a623a +PT=4f1547ca58f6706125e84f436572541b +CT=41cf9de31ef2c3aefe49ebdd72622bdd + +I=147 +KEY=284a32218f0ea51e0e02c3faa10849e7 +PT=41cf9de31ef2c3aefe49ebdd72622bdd +CT=65e4aaace0862fe98a53593c5741a2f0 + +I=148 +KEY=4dae988d6f888af784519ac6f649eb17 +PT=65e4aaace0862fe98a53593c5741a2f0 +CT=53643d9fdd317d97cea7c789f2f4e9fd + +I=149 +KEY=1ecaa512b2b9f7604af65d4f04bd02ea +PT=53643d9fdd317d97cea7c789f2f4e9fd +CT=469554dcec8a80b53fe08a96d19ecb82 + +I=150 +KEY=585ff1ce5e3377d57516d7d9d523c968 +PT=469554dcec8a80b53fe08a96d19ecb82 +CT=a842ac3cfa6a423c65272a19cec783a9 + +I=151 +KEY=f01d5df2a45935e91031fdc01be44ac1 +PT=a842ac3cfa6a423c65272a19cec783a9 +CT=ac491c1e25d34c9f6b5ab7d442947a16 + +I=152 +KEY=5c5441ec818a79767b6b4a14597030d7 +PT=ac491c1e25d34c9f6b5ab7d442947a16 +CT=c007b3856ea6e7a8711fd4395c0cceda + +I=153 +KEY=9c53f269ef2c9ede0a749e2d057cfe0d +PT=c007b3856ea6e7a8711fd4395c0cceda +CT=f0f625340506bd1f49bdc287dd56428a + +I=154 +KEY=6ca5d75dea2a23c143c95caad82abc87 +PT=f0f625340506bd1f49bdc287dd56428a +CT=54158add44c8f5bcb69a2e6263eec4a2 + +I=155 +KEY=38b05d80aee2d67df55372c8bbc47825 +PT=54158add44c8f5bcb69a2e6263eec4a2 +CT=3d1405c1f03742d9397fe02dcf5236c1 + +I=156 +KEY=05a458415ed594a4cc2c92e574964ee4 +PT=3d1405c1f03742d9397fe02dcf5236c1 +CT=1c63f843d5fc54450039f93c7e7c2d2e + +I=157 +KEY=19c7a0028b29c0e1cc156bd90aea63ca +PT=1c63f843d5fc54450039f93c7e7c2d2e +CT=1b1099c9d6d69551b8e2df8ef089b3bb + +I=158 +KEY=02d739cb5dff55b074f7b457fa63d071 +PT=1b1099c9d6d69551b8e2df8ef089b3bb +CT=2143b3a318ab36ecbd3687c06305ebad + +I=159 +KEY=23948a684554635cc9c1339799663bdc +PT=2143b3a318ab36ecbd3687c06305ebad +CT=7c853ea35b987225e16c28423b3cbb74 + +I=160 +KEY=5f11b4cb1ecc117928ad1bd5a25a80a8 +PT=7c853ea35b987225e16c28423b3cbb74 +CT=4448f7c3bbcb730f55cbe7cc7c346b9d + +I=161 +KEY=1b594308a50762767d66fc19de6eeb35 +PT=4448f7c3bbcb730f55cbe7cc7c346b9d +CT=3f4da6041dcb06630609f23e2f92fd23 + +I=162 +KEY=2414e50cb8cc64157b6f0e27f1fc1616 +PT=3f4da6041dcb06630609f23e2f92fd23 +CT=1f972f1d54d05dc04c655b2165dbd731 + +I=163 +KEY=3b83ca11ec1c39d5370a55069427c127 +PT=1f972f1d54d05dc04c655b2165dbd731 +CT=023c2b208e34103438d0b28ae13c0d7b + +I=164 +KEY=39bfe131622829e10fdae78c751bcc5c +PT=023c2b208e34103438d0b28ae13c0d7b +CT=94b01f29e3c111f37b68f5d246cd7714 + +I=165 +KEY=ad0ffe1881e9381274b2125e33d6bb48 +PT=94b01f29e3c111f37b68f5d246cd7714 +CT=6a113c0a28f50ba720c250d732d3c80a + +I=166 +KEY=c71ec212a91c33b55470428901057342 +PT=6a113c0a28f50ba720c250d732d3c80a +CT=79f7ceac3b9ca39a46bf386986430f66 + +I=167 +KEY=bee90cbe9280902f12cf7ae087467c24 +PT=79f7ceac3b9ca39a46bf386986430f66 +CT=a28428ece2013966f8f21d4491c09268 + +I=168 +KEY=1c6d24527081a949ea3d67a41686ee4c +PT=a28428ece2013966f8f21d4491c09268 +CT=173754fa8ed34fc752255271d3d138db + +I=169 +KEY=0b5a70a8fe52e68eb81835d5c557d697 +PT=173754fa8ed34fc752255271d3d138db +CT=37069565202dc7c3ecd106c0fb5cfd4e + +I=170 +KEY=3c5ce5cdde7f214d54c933153e0b2bd9 +PT=37069565202dc7c3ecd106c0fb5cfd4e +CT=cc637e9c1ee831c32a981b229e3a6153 + +I=171 +KEY=f03f9b51c097108e7e512837a0314a8a +PT=cc637e9c1ee831c32a981b229e3a6153 +CT=be2546a77385a8032991f95f7802d7b1 + +I=172 +KEY=4e1addf6b312b88d57c0d168d8339d3b +PT=be2546a77385a8032991f95f7802d7b1 +CT=0a121db767344edac19cede2d6a37762 + +I=173 +KEY=4408c041d426f657965c3c8a0e90ea59 +PT=0a121db767344edac19cede2d6a37762 +CT=20cb72bc2adc97943eda332f7c31c044 + +I=174 +KEY=64c3b2fdfefa61c3a8860fa572a12a1d +PT=20cb72bc2adc97943eda332f7c31c044 +CT=0dfe61e403edcad54f3ea58b175c404a + +I=175 +KEY=693dd319fd17ab16e7b8aa2e65fd6a57 +PT=0dfe61e403edcad54f3ea58b175c404a +CT=b486e26b9f3ac070d5327d37ad9786c2 + +I=176 +KEY=ddbb3172622d6b66328ad719c86aec95 +PT=b486e26b9f3ac070d5327d37ad9786c2 +CT=31946974edd29d31bdb84cdf723b9c37 + +I=177 +KEY=ec2f58068ffff6578f329bc6ba5170a2 +PT=31946974edd29d31bdb84cdf723b9c37 +CT=0e8037adab50b680b0f78f8ad7c99560 + +I=178 +KEY=e2af6fab24af40d73fc5144c6d98e5c2 +PT=0e8037adab50b680b0f78f8ad7c99560 +CT=04f66c0e1a50aa0357d10bfed10b4442 + +I=179 +KEY=e65903a53effead468141fb2bc93a180 +PT=04f66c0e1a50aa0357d10bfed10b4442 +CT=9f0a0cdff158d69ea1a1abfcee3e6675 + +I=180 +KEY=79530f7acfa73c4ac9b5b44e52adc7f5 +PT=9f0a0cdff158d69ea1a1abfcee3e6675 +CT=48efcd173a819cc8b19684b97ef12f24 + +I=181 +KEY=31bcc26df526a082782330f72c5ce8d1 +PT=48efcd173a819cc8b19684b97ef12f24 +CT=1db127461ed7123c2425b40f6dd308cc + +I=182 +KEY=2c0de52bebf1b2be5c0684f8418fe01d +PT=1db127461ed7123c2425b40f6dd308cc +CT=643cd08a170a490dd255e4d81b428d5d + +I=183 +KEY=483135a1fcfbfbb38e5360205acd6d40 +PT=643cd08a170a490dd255e4d81b428d5d +CT=772c80a42ac76ffee67e73a6841d8d7e + +I=184 +KEY=3f1db505d63c944d682d1386ded0e03e +PT=772c80a42ac76ffee67e73a6841d8d7e +CT=5353a35504b8f271ec1a49b92620710f + +I=185 +KEY=6c4e1650d284663c84375a3ff8f09131 +PT=5353a35504b8f271ec1a49b92620710f +CT=ebe5a8fe754a4662230e5ddbbaa472d1 + +I=186 +KEY=87abbeaea7ce205ea73907e44254e3e0 +PT=ebe5a8fe754a4662230e5ddbbaa472d1 +CT=eb86c00d04f92f76dcf6dde5eb2edb19 + +I=187 +KEY=6c2d7ea3a3370f287bcfda01a97a38f9 +PT=eb86c00d04f92f76dcf6dde5eb2edb19 +CT=12a181853773ab096bad728c219a960c + +I=188 +KEY=7e8cff269444a4211062a88d88e0aef5 +PT=12a181853773ab096bad728c219a960c +CT=d949e4cbd711f1bf8b0f1d2f1d4b5d06 + +I=189 +KEY=a7c51bed4355559e9b6db5a295abf3f3 +PT=d949e4cbd711f1bf8b0f1d2f1d4b5d06 +CT=9332d7b6fecc1f7f962000c2fa869320 + +I=190 +KEY=34f7cc5bbd994ae10d4db5606f2d60d3 +PT=9332d7b6fecc1f7f962000c2fa869320 +CT=5c81168b4aa3e5e0e1885d2d6844329f + +I=191 +KEY=6876dad0f73aaf01ecc5e84d0769524c +PT=5c81168b4aa3e5e0e1885d2d6844329f +CT=24deebf2c91a340039255fbe30f1b319 + +I=192 +KEY=4ca831223e209b01d5e0b7f33798e155 +PT=24deebf2c91a340039255fbe30f1b319 +CT=fade0033804acef2fe3d84eb34b173a7 + +I=193 +KEY=b6763111be6a55f32bdd3318032992f2 +PT=fade0033804acef2fe3d84eb34b173a7 +CT=c2fec0a5e4892d570cd3364e0d7c7d59 + +I=194 +KEY=7488f1b45ae378a4270e05560e55efab +PT=c2fec0a5e4892d570cd3364e0d7c7d59 +CT=e2598f63d7f171ddef80662cffa57ad2 + +I=195 +KEY=96d17ed78d120979c88e637af1f09579 +PT=e2598f63d7f171ddef80662cffa57ad2 +CT=7fa5a283b6969abda64410546473e501 + +I=196 +KEY=e974dc543b8493c46eca732e95837078 +PT=7fa5a283b6969abda64410546473e501 +CT=6e898c01e1d90f8b47809cc6a1549562 + +I=197 +KEY=87fd5055da5d9c4f294aefe834d7e51a +PT=6e898c01e1d90f8b47809cc6a1549562 +CT=b4d149d42f992b23a3f5d572bf4acd1e + +I=198 +KEY=332c1981f5c4b76c8abf3a9a8b9d2804 +PT=b4d149d42f992b23a3f5d572bf4acd1e +CT=80b3c34892874689fe0851377ca01b7d + +I=199 +KEY=b39fdac96743f1e574b76badf73d3379 +PT=80b3c34892874689fe0851377ca01b7d +CT=e668aa0ef80fe5fef96be9a9ddabc9a3 + +I=200 +KEY=55f770c79f4c141b8ddc82042a96fada +PT=e668aa0ef80fe5fef96be9a9ddabc9a3 +CT=039daaeab17fcabf6a433a76ae069ba3 + +I=201 +KEY=566ada2d2e33dea4e79fb87284906179 +PT=039daaeab17fcabf6a433a76ae069ba3 +CT=98c59b283ee15d65afc184516f9cc007 + +I=202 +KEY=ceaf410510d283c1485e3c23eb0ca17e +PT=98c59b283ee15d65afc184516f9cc007 +CT=cbf8934e962a8a0977ee566faba70ccf + +I=203 +KEY=0557d24b86f809c83fb06a4c40abadb1 +PT=cbf8934e962a8a0977ee566faba70ccf +CT=c8fdeb3351f037a30b69e98ea43a4ec2 + +I=204 +KEY=cdaa3978d7083e6b34d983c2e491e373 +PT=c8fdeb3351f037a30b69e98ea43a4ec2 +CT=f11331c8d39a96f3e1a8b5752b1f9127 + +I=205 +KEY=3cb908b00492a898d57136b7cf8e7254 +PT=f11331c8d39a96f3e1a8b5752b1f9127 +CT=4f0161cc9077d9d4e2e5f15aca7a2327 + +I=206 +KEY=73b8697c94e5714c3794c7ed05f45173 +PT=4f0161cc9077d9d4e2e5f15aca7a2327 +CT=10de12ba7f9403298d583a5f71a57196 + +I=207 +KEY=63667bc6eb717265baccfdb2745120e5 +PT=10de12ba7f9403298d583a5f71a57196 +CT=613b84464a09778c0bf964cdee9d54e5 + +I=208 +KEY=025dff80a17805e9b135997f9acc7400 +PT=613b84464a09778c0bf964cdee9d54e5 +CT=29cf542a451480367da9f6f934298ddf + +I=209 +KEY=2b92abaae46c85dfcc9c6f86aee5f9df +PT=29cf542a451480367da9f6f934298ddf +CT=1f536ceefd59f8687bd9c2762b35483b + +I=210 +KEY=34c1c74419357db7b745adf085d0b1e4 +PT=1f536ceefd59f8687bd9c2762b35483b +CT=ce4a251276003d564d202d007ca0c168 + +I=211 +KEY=fa8be2566f3540e1fa6580f0f970708c +PT=ce4a251276003d564d202d007ca0c168 +CT=4ac7a9493677fd51e6ae05e2a5458ce4 + +I=212 +KEY=b04c4b1f5942bdb01ccb85125c35fc68 +PT=4ac7a9493677fd51e6ae05e2a5458ce4 +CT=8dde5dc01880684777f16a60d0dd1c61 + +I=213 +KEY=3d9216df41c2d5f76b3aef728ce8e009 +PT=8dde5dc01880684777f16a60d0dd1c61 +CT=d2367e380d2cbef00e29a8167ddbc70e + +I=214 +KEY=efa468e74cee6b0765134764f1332707 +PT=d2367e380d2cbef00e29a8167ddbc70e +CT=2a836a628cd4ca7efe29a35d893523ff + +I=215 +KEY=c5270285c03aa1799b3ae439780604f8 +PT=2a836a628cd4ca7efe29a35d893523ff +CT=4ccd31a8ac4fb6d61566ff4d94d16081 + +I=216 +KEY=89ea332d6c7517af8e5c1b74ecd76479 +PT=4ccd31a8ac4fb6d61566ff4d94d16081 +CT=9d0961ff4ef2627d833517dbbf4b8cbe + +I=217 +KEY=14e352d2228775d20d690caf539ce8c7 +PT=9d0961ff4ef2627d833517dbbf4b8cbe +CT=c0511f7cba3963b7c8a822196b9da49d + +I=218 +KEY=d4b24dae98be1665c5c12eb638014c5a +PT=c0511f7cba3963b7c8a822196b9da49d +CT=35ee49ffe066fd9ed2a6f8023b23a615 + +I=219 +KEY=e15c045178d8ebfb1767d6b40322ea4f +PT=35ee49ffe066fd9ed2a6f8023b23a615 +CT=1a87d62661ac6b352342685dad27fb4f + +I=220 +KEY=fbdbd277197480ce3425bee9ae051100 +PT=1a87d62661ac6b352342685dad27fb4f +CT=06f8dc8f6c42e2289682fd5587ae7995 + +I=221 +KEY=fd230ef8753662e6a2a743bc29ab6895 +PT=06f8dc8f6c42e2289682fd5587ae7995 +CT=9e3a8178dd466b823e79b8e683fd2aa1 + +I=222 +KEY=63198f80a87009649cdefb5aaa564234 +PT=9e3a8178dd466b823e79b8e683fd2aa1 +CT=0ef5303e629da6ecee630c03ea1993cb + +I=223 +KEY=6decbfbecaedaf8872bdf759404fd1ff +PT=0ef5303e629da6ecee630c03ea1993cb +CT=4cc4ccc1887e38cb1c73bddd894b39a5 + +I=224 +KEY=2128737f429397436ece4a84c904e85a +PT=4cc4ccc1887e38cb1c73bddd894b39a5 +CT=8cc8bae389faedfda5e6aa123de9ffe0 + +I=225 +KEY=ade0c99ccb697abecb28e096f4ed17ba +PT=8cc8bae389faedfda5e6aa123de9ffe0 +CT=b0b3342dad1a5f8fa0c70661c4274c87 + +I=226 +KEY=1d53fdb1667325316befe6f730ca5b3d +PT=b0b3342dad1a5f8fa0c70661c4274c87 +CT=adb6695a651adf77197aa03cf61fdd88 + +I=227 +KEY=b0e594eb0369fa46729546cbc6d586b5 +PT=adb6695a651adf77197aa03cf61fdd88 +CT=6602df8a6a9fa918d87e217758038f03 + +I=228 +KEY=d6e74b6169f6535eaaeb67bc9ed609b6 +PT=6602df8a6a9fa918d87e217758038f03 +CT=021f112bc14fb28847a12aec0ea888a4 + +I=229 +KEY=d4f85a4aa8b9e1d6ed4a4d50907e8112 +PT=021f112bc14fb28847a12aec0ea888a4 +CT=477ae4b11b5d88ff45942688dc9e6e68 + +I=230 +KEY=9382befbb3e46929a8de6bd84ce0ef7a +PT=477ae4b11b5d88ff45942688dc9e6e68 +CT=dedaf752ca1a24b5b732fe2d0f4be91e + +I=231 +KEY=4d5849a979fe4d9c1fec95f543ab0664 +PT=dedaf752ca1a24b5b732fe2d0f4be91e +CT=463cc0431159088bad9cffcdc8d20d95 + +I=232 +KEY=0b6489ea68a74517b2706a388b790bf1 +PT=463cc0431159088bad9cffcdc8d20d95 +CT=d912a32af60ece4327145d2d7e0643c5 + +I=233 +KEY=d2762ac09ea98b5495643715f57f4834 +PT=d912a32af60ece4327145d2d7e0643c5 +CT=317fcac600df8522e3285adf4e9eefea + +I=234 +KEY=e309e0069e760e76764c6dcabbe1a7de +PT=317fcac600df8522e3285adf4e9eefea +CT=4cf17d563dbfc8b7892ffc1dc6d28806 + +I=235 +KEY=aff89d50a3c9c6c1ff6391d77d332fd8 +PT=4cf17d563dbfc8b7892ffc1dc6d28806 +CT=d94ca4f1a749e8181d4fd9219b75c9e8 + +I=236 +KEY=76b439a104802ed9e22c48f6e646e630 +PT=d94ca4f1a749e8181d4fd9219b75c9e8 +CT=f757356bd7cd6bca51f6524e9c1c8b95 + +I=237 +KEY=81e30ccad34d4513b3da1ab87a5a6da5 +PT=f757356bd7cd6bca51f6524e9c1c8b95 +CT=2687fc574167cc0e888d39cd30b02eed + +I=238 +KEY=a764f09d922a891d3b5723754aea4348 +PT=2687fc574167cc0e888d39cd30b02eed +CT=9c2f0537b6bcc32c6dd2f7ba1da6c587 + +I=239 +KEY=3b4bf5aa24964a315685d4cf574c86cf +PT=9c2f0537b6bcc32c6dd2f7ba1da6c587 +CT=caea4f80b31058d0b11ac3d8f95b3af3 + +I=240 +KEY=f1a1ba2a978612e1e79f1717ae17bc3c +PT=caea4f80b31058d0b11ac3d8f95b3af3 +CT=f20987781325b5b5fa4b7761ba308bf2 + +I=241 +KEY=03a83d5284a3a7541dd46076142737ce +PT=f20987781325b5b5fa4b7761ba308bf2 +CT=063bd48bb753312c95dcc518b78dbc9f + +I=242 +KEY=0593e9d933f096788808a56ea3aa8b51 +PT=063bd48bb753312c95dcc518b78dbc9f +CT=4d73d16f94e9e1f877cffddd044a4430 + +I=243 +KEY=48e038b6a7197780ffc758b3a7e0cf61 +PT=4d73d16f94e9e1f877cffddd044a4430 +CT=f1bf4d90456a9ab37ccf2e8feb7ca9a7 + +I=244 +KEY=b95f7526e273ed338308763c4c9c66c6 +PT=f1bf4d90456a9ab37ccf2e8feb7ca9a7 +CT=8ade34f8b4933d4dd22c1b7fc91477eb + +I=245 +KEY=338141de56e0d07e51246d438588112d +PT=8ade34f8b4933d4dd22c1b7fc91477eb +CT=734b8cef7e0ff1c502b399c2e6d200d7 + +I=246 +KEY=40cacd3128ef21bb5397f481635a11fa +PT=734b8cef7e0ff1c502b399c2e6d200d7 +CT=17fe23f54eda4685b602fcf3fa871270 + +I=247 +KEY=5734eec46635673ee595087299dd038a +PT=17fe23f54eda4685b602fcf3fa871270 +CT=e85fadd1b2195710a4782d8055edc8f2 + +I=248 +KEY=bf6b4315d42c302e41ed25f2cc30cb78 +PT=e85fadd1b2195710a4782d8055edc8f2 +CT=f8f27ebc47be2ba111322ed2069e560f + +I=249 +KEY=47993da993921b8f50df0b20caae9d77 +PT=f8f27ebc47be2ba111322ed2069e560f +CT=769b06dcaa1dd2e8174f72a252d6ee31 + +I=250 +KEY=31023b75398fc9674790798298787346 +PT=769b06dcaa1dd2e8174f72a252d6ee31 +CT=02fbc28e369d513fdc0b1d991a82c8bf + +I=251 +KEY=33f9f9fb0f1298589b9b641b82fabbf9 +PT=02fbc28e369d513fdc0b1d991a82c8bf +CT=337cd0599ebf5b4e7d75583eceb4f66f + +I=252 +KEY=008529a291adc316e6ee3c254c4e4d96 +PT=337cd0599ebf5b4e7d75583eceb4f66f +CT=fe5997e58ddf47f04e04d7455f3906e6 + +I=253 +KEY=fedcbe471c7284e6a8eaeb6013774b70 +PT=fe5997e58ddf47f04e04d7455f3906e6 +CT=577744b371af4e9ddc0cd887a74cc043 + +I=254 +KEY=a9abfaf46dddca7b74e633e7b43b8b33 +PT=577744b371af4e9ddc0cd887a74cc043 +CT=3713d1a3577260302fe4740ca96b5bad + +I=255 +KEY=9eb82b573aafaa4b5b0247eb1d50d09e +PT=3713d1a3577260302fe4740ca96b5bad +CT=7f12861268e4a47fa8f01953b149c22c + +I=256 +KEY=e1aaad45524b0e34f3f25eb8ac1912b2 +PT=7f12861268e4a47fa8f01953b149c22c +CT=be787369f9b3299a850bdc57831ce3a6 + +I=257 +KEY=5fd2de2cabf827ae76f982ef2f05f114 +PT=be787369f9b3299a850bdc57831ce3a6 +CT=6cb37981e730b317315986304b8e35d4 + +I=258 +KEY=3361a7ad4cc894b947a004df648bc4c0 +PT=6cb37981e730b317315986304b8e35d4 +CT=a309860c6a2f28f6c190901d41cf2eae + +I=259 +KEY=906821a126e7bc4f863094c22544ea6e +PT=a309860c6a2f28f6c190901d41cf2eae +CT=c0f690a835e4e925bf5319f1c0e8cb9d + +I=260 +KEY=509eb1091303556a39638d33e5ac21f3 +PT=c0f690a835e4e925bf5319f1c0e8cb9d +CT=41c30496df8f0fa3886439efd9df8672 + +I=261 +KEY=115db59fcc8c5ac9b107b4dc3c73a781 +PT=41c30496df8f0fa3886439efd9df8672 +CT=3e67bced5508c62df28d0df64c28fc41 + +I=262 +KEY=2f3a097299849ce4438ab92a705b5bc0 +PT=3e67bced5508c62df28d0df64c28fc41 +CT=a693ef3574ae3613f86432f9c60bf488 + +I=263 +KEY=89a9e647ed2aaaf7bbee8bd3b650af48 +PT=a693ef3574ae3613f86432f9c60bf488 +CT=3cf289b189b42004d2af0559df64c98d + +I=264 +KEY=b55b6ff6649e8af369418e8a693466c5 +PT=3cf289b189b42004d2af0559df64c98d +CT=05ef12f5d05d0725a245ec8dfad7c268 + +I=265 +KEY=b0b47d03b4c38dd6cb04620793e3a4ad +PT=05ef12f5d05d0725a245ec8dfad7c268 +CT=9e25f51f6a463998f672a18bc49c14a9 + +I=266 +KEY=2e91881cde85b44e3d76c38c577fb004 +PT=9e25f51f6a463998f672a18bc49c14a9 +CT=0713603c19128dcc24ddd3c3556d54c6 + +I=267 +KEY=2982e820c797398219ab104f0212e4c2 +PT=0713603c19128dcc24ddd3c3556d54c6 +CT=16234235abc7b866cdcff3f80907db86 + +I=268 +KEY=3fa1aa156c5081e4d464e3b70b153f44 +PT=16234235abc7b866cdcff3f80907db86 +CT=e76c63f62277d5c585c29348f3e0795a + +I=269 +KEY=d8cdc9e34e27542151a670fff8f5461e +PT=e76c63f62277d5c585c29348f3e0795a +CT=6c7ace029b73b4760fcd43a3e6b9c5d8 + +I=270 +KEY=b4b707e1d554e0575e6b335c1e4c83c6 +PT=6c7ace029b73b4760fcd43a3e6b9c5d8 +CT=b14fe51defcd698b2a76c233522a477a + +I=271 +KEY=05f8e2fc3a9989dc741df16f4c66c4bc +PT=b14fe51defcd698b2a76c233522a477a +CT=a261d4a6828f0b82669e492b34d34949 + +I=272 +KEY=a799365ab816825e1283b84478b58df5 +PT=a261d4a6828f0b82669e492b34d34949 +CT=8b2f195fe879faabeb9fb6d3ac31f2dc + +I=273 +KEY=2cb62f05506f78f5f91c0e97d4847f29 +PT=8b2f195fe879faabeb9fb6d3ac31f2dc +CT=1fa8cd273bbb6394b040aacde1c9af25 + +I=274 +KEY=331ee2226bd41b61495ca45a354dd00c +PT=1fa8cd273bbb6394b040aacde1c9af25 +CT=13b9e0ee001e8c68c7e77963f3057f4d + +I=275 +KEY=20a702cc6bca97098ebbdd39c648af41 +PT=13b9e0ee001e8c68c7e77963f3057f4d +CT=c875b409a058efb825971b73d4fdb06a + +I=276 +KEY=e8d2b6c5cb9278b1ab2cc64a12b51f2b +PT=c875b409a058efb825971b73d4fdb06a +CT=65e4372394e9be3d76a92bc977bdacd4 + +I=277 +KEY=8d3681e65f7bc68cdd85ed836508b3ff +PT=65e4372394e9be3d76a92bc977bdacd4 +CT=a068b8d390859a58dae1d7f67532eb33 + +I=278 +KEY=2d5e3935cffe5cd407643a75103a58cc +PT=a068b8d390859a58dae1d7f67532eb33 +CT=7a2b2ebbfa7c1105fd3f1cae16518e48 + +I=279 +KEY=5775178e35824dd1fa5b26db066bd684 +PT=7a2b2ebbfa7c1105fd3f1cae16518e48 +CT=5fa590412d388f748b98aec9ab16cc54 + +I=280 +KEY=08d087cf18bac2a571c38812ad7d1ad0 +PT=5fa590412d388f748b98aec9ab16cc54 +CT=a3c854365c3773ef7256834dda794ac0 + +I=281 +KEY=ab18d3f9448db14a03950b5f77045010 +PT=a3c854365c3773ef7256834dda794ac0 +CT=8f506b1ae3dbc29f23e106b419b2fa1e + +I=282 +KEY=2448b8e3a75673d520740deb6eb6aa0e +PT=8f506b1ae3dbc29f23e106b419b2fa1e +CT=e6de475c5de99f947330f8f4038f72bd + +I=283 +KEY=c296ffbffabfec415344f51f6d39d8b3 +PT=e6de475c5de99f947330f8f4038f72bd +CT=38a4e2f4f0f85dccd7001956585aa57e + +I=284 +KEY=fa321d4b0a47b18d8444ec4935637dcd +PT=38a4e2f4f0f85dccd7001956585aa57e +CT=2b7948323de6827d322dc9ea895d5124 + +I=285 +KEY=d14b557937a133f0b66925a3bc3e2ce9 +PT=2b7948323de6827d322dc9ea895d5124 +CT=591d4541e6ecbcf90affba477812335d + +I=286 +KEY=88561038d14d8f09bc969fe4c42c1fb4 +PT=591d4541e6ecbcf90affba477812335d +CT=608c7e00efb7747ad17e35dd07ca07c8 + +I=287 +KEY=e8da6e383efafb736de8aa39c3e6187c +PT=608c7e00efb7747ad17e35dd07ca07c8 +CT=9ba49264263d0e19bca772ea146fcccc + +I=288 +KEY=737efc5c18c7f56ad14fd8d3d789d4b0 +PT=9ba49264263d0e19bca772ea146fcccc +CT=8fd4ce6ea919f5039b5f96f178301b86 + +I=289 +KEY=fcaa3232b1de00694a104e22afb9cf36 +PT=8fd4ce6ea919f5039b5f96f178301b86 +CT=ec6d51d06bb364b6e8ff5dbd448035b8 + +I=290 +KEY=10c763e2da6d64dfa2ef139feb39fa8e +PT=ec6d51d06bb364b6e8ff5dbd448035b8 +CT=28875366467d3ba64ac410079813f4ff + +I=291 +KEY=384030849c105f79e82b0398732a0e71 +PT=28875366467d3ba64ac410079813f4ff +CT=348831680d595a3bd6acdfb632a58308 + +I=292 +KEY=0cc801ec914905423e87dc2e418f8d79 +PT=348831680d595a3bd6acdfb632a58308 +CT=1ecb71bc17d33d6f30e6f6929589075c + +I=293 +KEY=12037050869a382d0e612abcd4068a25 +PT=1ecb71bc17d33d6f30e6f6929589075c +CT=acb2b1949d6d82e96cb490e2ed1648af + +I=294 +KEY=beb1c1c41bf7bac462d5ba5e3910c28a +PT=acb2b1949d6d82e96cb490e2ed1648af +CT=037f4d2e546b4114fc44f6f900e330db + +I=295 +KEY=bdce8cea4f9cfbd09e914ca739f3f251 +PT=037f4d2e546b4114fc44f6f900e330db +CT=96364a510329e24bd9c0dc1f1b4c3786 + +I=296 +KEY=2bf8c6bb4cb5199b475190b822bfc5d7 +PT=96364a510329e24bd9c0dc1f1b4c3786 +CT=1920e679cc59c2b9eaa88743878db4e1 + +I=297 +KEY=32d820c280ecdb22adf917fba5327136 +PT=1920e679cc59c2b9eaa88743878db4e1 +CT=6499fc9f797f858f9dee0d20110efd54 + +I=298 +KEY=5641dc5df9935ead30171adbb43c8c62 +PT=6499fc9f797f858f9dee0d20110efd54 +CT=8cdf1a4a21c4e868042a1dd3a0812b17 + +I=299 +KEY=da9ec617d857b6c5343d070814bda775 +PT=8cdf1a4a21c4e868042a1dd3a0812b17 +CT=76c800409b96fa82298f7ae3d9f44dd9 + +I=300 +KEY=ac56c65743c14c471db27debcd49eaac +PT=76c800409b96fa82298f7ae3d9f44dd9 +CT=86e96fd3554d69bffcab838172a3c5d3 + +I=301 +KEY=2abfa984168c25f8e119fe6abfea2f7f +PT=86e96fd3554d69bffcab838172a3c5d3 +CT=3f9f65b9662c7473d0541de8a7a3e301 + +I=302 +KEY=1520cc3d70a0518b314de3821849cc7e +PT=3f9f65b9662c7473d0541de8a7a3e301 +CT=13be0d89fa33ac42ada1008d15d4e5dc + +I=303 +KEY=069ec1b48a93fdc99cece30f0d9d29a2 +PT=13be0d89fa33ac42ada1008d15d4e5dc +CT=80e4b109da148e84553916a5fbf65e5d + +I=304 +KEY=867a70bd5087734dc9d5f5aaf66b77ff +PT=80e4b109da148e84553916a5fbf65e5d +CT=0c54342cb428f62d703b05ac0baeb60b + +I=305 +KEY=8a2e4491e4af8560b9eef006fdc5c1f4 +PT=0c54342cb428f62d703b05ac0baeb60b +CT=e2a855b841347e98a3df26235bc60774 + +I=306 +KEY=68861129a59bfbf81a31d625a603c680 +PT=e2a855b841347e98a3df26235bc60774 +CT=7072e3f79176be35803eda7d76b948b5 + +I=307 +KEY=18f4f2de34ed45cd9a0f0c58d0ba8e35 +PT=7072e3f79176be35803eda7d76b948b5 +CT=de8d29fa0d972e14dcf93cd6fd811254 + +I=308 +KEY=c679db24397a6bd946f6308e2d3b9c61 +PT=de8d29fa0d972e14dcf93cd6fd811254 +CT=8a79dca76268a9c16478861805e0d431 + +I=309 +KEY=4c0007835b12c218228eb69628db4850 +PT=8a79dca76268a9c16478861805e0d431 +CT=f94c9c91ec29774b872cdffb2d01b7ea + +I=310 +KEY=b54c9b12b73bb553a5a2696d05daffba +PT=f94c9c91ec29774b872cdffb2d01b7ea +CT=dacd5db555e715ae95dcedf2663a2cfe + +I=311 +KEY=6f81c6a7e2dca0fd307e849f63e0d344 +PT=dacd5db555e715ae95dcedf2663a2cfe +CT=9144b67c9eb6665e441ee7e96ee850c8 + +I=312 +KEY=fec570db7c6ac6a3746063760d08838c +PT=9144b67c9eb6665e441ee7e96ee850c8 +CT=71b7e26598d6e8a232910cfe56061d43 + +I=313 +KEY=8f7292bee4bc2e0146f16f885b0e9ecf +PT=71b7e26598d6e8a232910cfe56061d43 +CT=41d7e6743222cbaf1bdd3e4c3f7823dc + +I=314 +KEY=cea574cad69ee5ae5d2c51c46476bd13 +PT=41d7e6743222cbaf1bdd3e4c3f7823dc +CT=4dec01de2a381307bfd3017a42c5a382 + +I=315 +KEY=83497514fca6f6a9e2ff50be26b31e91 +PT=4dec01de2a381307bfd3017a42c5a382 +CT=4b51fd45dd81697246bd31f862d07b87 + +I=316 +KEY=c818885121279fdba442614644636516 +PT=4b51fd45dd81697246bd31f862d07b87 +CT=aa1ea784ab448339a18bf82dadd09f38 + +I=317 +KEY=62062fd58a631ce205c9996be9b3fa2e +PT=aa1ea784ab448339a18bf82dadd09f38 +CT=2f6e43f77173c845a02dd4b94b581f35 + +I=318 +KEY=4d686c22fb10d4a7a5e44dd2a2ebe51b +PT=2f6e43f77173c845a02dd4b94b581f35 +CT=9e3d8ec0d5805cb452c991a9eb73ad0e + +I=319 +KEY=d355e2e22e908813f72ddc7b49984815 +PT=9e3d8ec0d5805cb452c991a9eb73ad0e +CT=e434467e25cec2bae033708c60130daa + +I=320 +KEY=3761a49c0b5e4aa9171eacf7298b45bf +PT=e434467e25cec2bae033708c60130daa +CT=ee8dc23273a973e0f29afcc1d5adc431 + +I=321 +KEY=d9ec66ae78f73949e5845036fc26818e +PT=ee8dc23273a973e0f29afcc1d5adc431 +CT=6bf73c2db9cf62c4ce40f6169c0bc630 + +I=322 +KEY=b21b5a83c1385b8d2bc4a620602d47be +PT=6bf73c2db9cf62c4ce40f6169c0bc630 +CT=f0d6d96a051bb320777649a5a6368b50 + +I=323 +KEY=42cd83e9c423e8ad5cb2ef85c61bccee +PT=f0d6d96a051bb320777649a5a6368b50 +CT=f4ee407fec9efcf2d33dbd6e58e4091a + +I=324 +KEY=b623c39628bd145f8f8f52eb9effc5f4 +PT=f4ee407fec9efcf2d33dbd6e58e4091a +CT=75e112be8452e6490e66d2c1d2151ded + +I=325 +KEY=c3c2d128aceff21681e9802a4cead819 +PT=75e112be8452e6490e66d2c1d2151ded +CT=98eaede3a12379d6572abbee134ebfcf + +I=326 +KEY=5b283ccb0dcc8bc0d6c33bc45fa467d6 +PT=98eaede3a12379d6572abbee134ebfcf +CT=c0b9518271dde10098da8332ad0e15ab + +I=327 +KEY=9b916d497c116ac04e19b8f6f2aa727d +PT=c0b9518271dde10098da8332ad0e15ab +CT=05ddc987deaef7fe994d20054100625c + +I=328 +KEY=9e4ca4cea2bf9d3ed75498f3b3aa1021 +PT=05ddc987deaef7fe994d20054100625c +CT=1703a6baff2fd94bbea4a418b055f443 + +I=329 +KEY=894f02745d90447569f03ceb03ffe462 +PT=1703a6baff2fd94bbea4a418b055f443 +CT=270470398a007e76b694691c056bc4ee + +I=330 +KEY=ae4b724dd7903a03df6455f70694208c +PT=270470398a007e76b694691c056bc4ee +CT=225287593161094a7c537fa469686fe0 + +I=331 +KEY=8c19f514e6f13349a3372a536ffc4f6c +PT=225287593161094a7c537fa469686fe0 +CT=b3835ecc9e87f579414ea9fc165abc0e + +I=332 +KEY=3f9aabd87876c630e27983af79a6f362 +PT=b3835ecc9e87f579414ea9fc165abc0e +CT=1161cf9bfb59d21d7d08f4e84d57fb99 + +I=333 +KEY=2efb6443832f142d9f71774734f108fb +PT=1161cf9bfb59d21d7d08f4e84d57fb99 +CT=c7fba87efd50d7f5c6d0303b0e362b01 + +I=334 +KEY=e900cc3d7e7fc3d859a1477c3ac723fa +PT=c7fba87efd50d7f5c6d0303b0e362b01 +CT=0ae3c0d0061cb0adb330ccac95374074 + +I=335 +KEY=e3e30ced78637375ea918bd0aff0638e +PT=0ae3c0d0061cb0adb330ccac95374074 +CT=dfb9249b36657f7f1fd54ca44e30a5e0 + +I=336 +KEY=3c5a28764e060c0af544c774e1c0c66e +PT=dfb9249b36657f7f1fd54ca44e30a5e0 +CT=9f7ef9c67cc1d2512acb84f3cefc07da + +I=337 +KEY=a324d1b032c7de5bdf8f43872f3cc1b4 +PT=9f7ef9c67cc1d2512acb84f3cefc07da +CT=ac4e91336990f8bb425a3c28b74ed575 + +I=338 +KEY=0f6a40835b5726e09dd57faf987214c1 +PT=ac4e91336990f8bb425a3c28b74ed575 +CT=4008fcc6bca00ee92cd48c0a29184f37 + +I=339 +KEY=4f62bc45e7f72809b101f3a5b16a5bf6 +PT=4008fcc6bca00ee92cd48c0a29184f37 +CT=1c311ec4005cad8a7aead0a58d2bd4df + +I=340 +KEY=5353a281e7ab8583cbeb23003c418f29 +PT=1c311ec4005cad8a7aead0a58d2bd4df +CT=1bbc845c6e3510d010b8ce92e3319c86 + +I=341 +KEY=48ef26dd899e9553db53ed92df7013af +PT=1bbc845c6e3510d010b8ce92e3319c86 +CT=c4d442a88321b98ff7f3b178255d446f + +I=342 +KEY=8c3b64750abf2cdc2ca05ceafa2d57c0 +PT=c4d442a88321b98ff7f3b178255d446f +CT=1d841bb608215ceb42ac5216a939d521 + +I=343 +KEY=91bf7fc3029e70376e0c0efc531482e1 +PT=1d841bb608215ceb42ac5216a939d521 +CT=5c7d9ba058b88d9fb967bda3080fee41 + +I=344 +KEY=cdc2e4635a26fda8d76bb35f5b1b6ca0 +PT=5c7d9ba058b88d9fb967bda3080fee41 +CT=558feedddf24ec966a8f3835fe252849 + +I=345 +KEY=984d0abe8502113ebde48b6aa53e44e9 +PT=558feedddf24ec966a8f3835fe252849 +CT=a75c5a7a23a020982b367b68ac2154ae + +I=346 +KEY=3f1150c4a6a231a696d2f002091f1047 +PT=a75c5a7a23a020982b367b68ac2154ae +CT=b75d2acdfa1f13ca235f5d7b3da0a877 + +I=347 +KEY=884c7a095cbd226cb58dad7934bfb830 +PT=b75d2acdfa1f13ca235f5d7b3da0a877 +CT=fd9b2f39020ca174f3ef99b834c2df99 + +I=348 +KEY=75d755305eb18318466234c1007d67a9 +PT=fd9b2f39020ca174f3ef99b834c2df99 +CT=f313b97c9a68b5ea4559c3f466a1185b + +I=349 +KEY=86c4ec4cc4d936f2033bf73566dc7ff2 +PT=f313b97c9a68b5ea4559c3f466a1185b +CT=0c136310f5fc3411e5c43f792241f938 + +I=350 +KEY=8ad78f5c312502e3e6ffc84c449d86ca +PT=0c136310f5fc3411e5c43f792241f938 +CT=b15a27b62026660ed67bbd6f9a451a07 + +I=351 +KEY=3b8da8ea110364ed30847523ded89ccd +PT=b15a27b62026660ed67bbd6f9a451a07 +CT=2ae627810e55ca3b53cbb14d987dbb76 + +I=352 +KEY=116b8f6b1f56aed6634fc46e46a527bb +PT=2ae627810e55ca3b53cbb14d987dbb76 +CT=fb8bf764f2683404cc3685e5a8d4b32d + +I=353 +KEY=eae0780fed3e9ad2af79418bee719496 +PT=fb8bf764f2683404cc3685e5a8d4b32d +CT=65462d84b6a50c2acb618fe4d66e6ef5 + +I=354 +KEY=8fa6558b5b9b96f86418ce6f381ffa63 +PT=65462d84b6a50c2acb618fe4d66e6ef5 +CT=35751dc452fe4107636ba323d60c7d6d + +I=355 +KEY=bad3484f0965d7ff07736d4cee13870e +PT=35751dc452fe4107636ba323d60c7d6d +CT=9da691c55581b07b67e532f584674571 + +I=356 +KEY=2775d98a5ce4678460965fb96a74c27f +PT=9da691c55581b07b67e532f584674571 +CT=04aefc109700d4d5e1fa124f1dbcd423 + +I=357 +KEY=23db259acbe4b351816c4df677c8165c +PT=04aefc109700d4d5e1fa124f1dbcd423 +CT=9e611972dd9437e09d90b039f70abb5a + +I=358 +KEY=bdba3ce8167084b11cfcfdcf80c2ad06 +PT=9e611972dd9437e09d90b039f70abb5a +CT=02dad7ac91e7970f96fea1e07147e3ff + +I=359 +KEY=bf60eb44879713be8a025c2ff1854ef9 +PT=02dad7ac91e7970f96fea1e07147e3ff +CT=ba9c25e7cb4fe41d19eee501e02b2c31 + +I=360 +KEY=05fccea34cd8f7a393ecb92e11ae62c8 +PT=ba9c25e7cb4fe41d19eee501e02b2c31 +CT=61a1479c6c8240dd0d54ef4e81fa0529 + +I=361 +KEY=645d893f205ab77e9eb85660905467e1 +PT=61a1479c6c8240dd0d54ef4e81fa0529 +CT=35677d608830dcc80f0d301fbc5048ff + +I=362 +KEY=513af45fa86a6bb691b5667f2c042f1e +PT=35677d608830dcc80f0d301fbc5048ff +CT=551c151bd41dc9780da1d93f0c943512 + +I=363 +KEY=0426e1447c77a2ce9c14bf4020901a0c +PT=551c151bd41dc9780da1d93f0c943512 +CT=a06c75187875abeee4514811f8671c01 + +I=364 +KEY=a44a945c040209207845f751d8f7060d +PT=a06c75187875abeee4514811f8671c01 +CT=f12c94c5ce8194f08eef9c9066fa8dda + +I=365 +KEY=55660099ca839dd0f6aa6bc1be0d8bd7 +PT=f12c94c5ce8194f08eef9c9066fa8dda +CT=ebaf2112eeb3a49dfd68b9c06338cd35 + +I=366 +KEY=bec9218b2430394d0bc2d201dd3546e2 +PT=ebaf2112eeb3a49dfd68b9c06338cd35 +CT=e79375234873f40ba03394f244fd2ab4 + +I=367 +KEY=595a54a86c43cd46abf146f399c86c56 +PT=e79375234873f40ba03394f244fd2ab4 +CT=1a87a6cab94417c0a253540b9e2e40dd + +I=368 +KEY=43ddf262d507da8609a212f807e62c8b +PT=1a87a6cab94417c0a253540b9e2e40dd +CT=0698d6017a8d44038dd1bad284bd1a2f + +I=369 +KEY=45452463af8a9e858473a82a835b36a4 +PT=0698d6017a8d44038dd1bad284bd1a2f +CT=df9ce06432fd38c6d10eb8c316c3b20d + +I=370 +KEY=9ad9c4079d77a643557d10e9959884a9 +PT=df9ce06432fd38c6d10eb8c316c3b20d +CT=ade417ff698ff33ee286e93268450726 + +I=371 +KEY=373dd3f8f4f8557db7fbf9dbfddd838f +PT=ade417ff698ff33ee286e93268450726 +CT=55e1013034d7b2ffb1cab90b7ccf975c + +I=372 +KEY=62dcd2c8c02fe782063140d0811214d3 +PT=55e1013034d7b2ffb1cab90b7ccf975c +CT=fbbb243f9438ffd313842f3a4ce344af + +I=373 +KEY=9967f6f75417185115b56feacdf1507c +PT=fbbb243f9438ffd313842f3a4ce344af +CT=e72968a7804e264a6663e2d4413ee2e4 + +I=374 +KEY=7e4e9e50d4593e1b73d68d3e8ccfb298 +PT=e72968a7804e264a6663e2d4413ee2e4 +CT=29eeaf33ca0089a642233befbb31fe8c + +I=375 +KEY=57a031631e59b7bd31f5b6d137fe4c14 +PT=29eeaf33ca0089a642233befbb31fe8c +CT=8f88d006e954df4971a84684223280a3 + +I=376 +KEY=d828e165f70d68f4405df05515ccccb7 +PT=8f88d006e954df4971a84684223280a3 +CT=7e4fc66ebb2c4f82a1cb0d33f0820c82 + +I=377 +KEY=a667270b4c212776e196fd66e54ec035 +PT=7e4fc66ebb2c4f82a1cb0d33f0820c82 +CT=243eb64d433cda288332afd7d78ac5e2 + +I=378 +KEY=825991460f1dfd5e62a452b132c405d7 +PT=243eb64d433cda288332afd7d78ac5e2 +CT=6c9e1601af7894006ab078df16ea903c + +I=379 +KEY=eec78747a065695e08142a6e242e95eb +PT=6c9e1601af7894006ab078df16ea903c +CT=6736924f907fa9bea54e04cac54ff3a3 + +I=380 +KEY=89f11508301ac0e0ad5a2ea4e1616648 +PT=6736924f907fa9bea54e04cac54ff3a3 +CT=79f24c2c804a36da6f1c0d9386170364 + +I=381 +KEY=f0035924b050f63ac24623376776652c +PT=79f24c2c804a36da6f1c0d9386170364 +CT=14a9b3a4dd2b07df692830a80abb47c3 + +I=382 +KEY=e4aaea806d7bf1e5ab6e139f6dcd22ef +PT=14a9b3a4dd2b07df692830a80abb47c3 +CT=457e67b9fc38a575e6e785f47b61fc0d + +I=383 +KEY=a1d48d39914354904d89966b16acdee2 +PT=457e67b9fc38a575e6e785f47b61fc0d +CT=1c5154c4d6d1c4781c9beb5fa107e1bb + +I=384 +KEY=bd85d9fd479290e851127d34b7ab3f59 +PT=1c5154c4d6d1c4781c9beb5fa107e1bb +CT=62a09f485c24f575d3c476725d6e5767 + +I=385 +KEY=df2546b51bb6659d82d60b46eac5683e +PT=62a09f485c24f575d3c476725d6e5767 +CT=4a965c7bfc7095d0e9cba2b042fd22e6 + +I=386 +KEY=95b31acee7c6f04d6b1da9f6a8384ad8 +PT=4a965c7bfc7095d0e9cba2b042fd22e6 +CT=3e1601ac5365ec8c8806a35da84237cf + +I=387 +KEY=aba51b62b4a31cc1e31b0aab007a7d17 +PT=3e1601ac5365ec8c8806a35da84237cf +CT=d8640dc9b73c47d10aeb1bf9f8cb0f29 + +I=388 +KEY=73c116ab039f5b10e9f01152f8b1723e +PT=d8640dc9b73c47d10aeb1bf9f8cb0f29 +CT=8c56db660307571e6f4fbb12f8518161 + +I=389 +KEY=ff97cdcd00980c0e86bfaa4000e0f35f +PT=8c56db660307571e6f4fbb12f8518161 +CT=b10c941ff996579a26b0324c90d2cc5c + +I=390 +KEY=4e9b59d2f90e5b94a00f980c90323f03 +PT=b10c941ff996579a26b0324c90d2cc5c +CT=2b8099f5d9931a89fb387206d53d994a + +I=391 +KEY=651bc027209d411d5b37ea0a450fa649 +PT=2b8099f5d9931a89fb387206d53d994a +CT=90dc0b869eb93f11d6a6ac30feaca1e5 + +I=392 +KEY=f5c7cba1be247e0c8d91463abba307ac +PT=90dc0b869eb93f11d6a6ac30feaca1e5 +CT=1781e91e7c34a882e5b8601358779a12 + +I=393 +KEY=e24622bfc210d68e68292629e3d49dbe +PT=1781e91e7c34a882e5b8601358779a12 +CT=84049d1082da0a4fa1042c0b9e2229be + +I=394 +KEY=6642bfaf40cadcc1c92d0a227df6b400 +PT=84049d1082da0a4fa1042c0b9e2229be +CT=54bc31b89ce4700886e713aee936c427 + +I=395 +KEY=32fe8e17dc2eacc94fca198c94c07027 +PT=54bc31b89ce4700886e713aee936c427 +CT=68ae964381f03b48bbdaef9581cc2aae + +I=396 +KEY=5a5018545dde9781f410f619150c5a89 +PT=68ae964381f03b48bbdaef9581cc2aae +CT=f4d2372d1949d00f1d7525fa33c28406 + +I=397 +KEY=ae822f794497478ee965d3e326cede8f +PT=f4d2372d1949d00f1d7525fa33c28406 +CT=1fe5e7a2b852afead22d070c46a4520b + +I=398 +KEY=b167c8dbfcc5e8643b48d4ef606a8c84 +PT=1fe5e7a2b852afead22d070c46a4520b +CT=aba9f3de2facf761d9ccbebd295bd402 + +I=399 +KEY=1ace3b05d3691f05e2846a5249315886 +PT=aba9f3de2facf761d9ccbebd295bd402 +CT=662443ca556f5d9475eb34dec6452eb9 + +KEYSIZE=192 + +I=0 +KEY=000000000000000000000000000000000000000000000000 +PT=00000000000000000000000000000000 +CT=2d8af7b79eb7f21fdb394c77c3fb8c3a + +test + +I=1 +KEY=2d8af7b79eb7f21fdb394c77c3fb8c3a0df7df2c9829f1a1 +PT=2d8af7b79eb7f21fdb394c77c3fb8c3a +CT=d7585ada56f93796161c56cdba61aa3f + +I=2 +KEY=fad2ad6dc84ec589cd251aba799a260573a62b94c14e4a37 +PT=d7585ada56f93796161c56cdba61aa3f +CT=654c5eb1018d6086717b89db97e91a5a + +I=3 +KEY=9f9ef3dcc9c3a50fbc5e9361ee733c5fe6d0c5cbb168c289 +PT=654c5eb1018d6086717b89db97e91a5a +CT=8f55d4952903b480ce9ae1b2fdca07f4 + +I=4 +KEY=10cb2749e0c0118f72c472d313b93babb19cde62a492b64d +PT=8f55d4952903b480ce9ae1b2fdca07f4 +CT=122e10485449687f99562a5b3ce0c022 + +I=5 +KEY=02e53701b48979f0eb9258882f59fb895899f389df32a97c +PT=122e10485449687f99562a5b3ce0c022 +CT=0bef7c642c1728a91e0862c32c7ba03a + +I=6 +KEY=090a4b65989e5159f59a3a4b03225bb3b70ec5c405f53739 +PT=0bef7c642c1728a91e0862c32c7ba03a +CT=48b6fb885b50f097fafe596c834a5e3b + +I=7 +KEY=41bcb0edc3cea1ce0f64632780680588d4896b21b4285aec +PT=48b6fb885b50f097fafe596c834a5e3b +CT=6504c124d3fe3075519c02c27156adde + +I=8 +KEY=24b871c9103091bb5ef861e5f13ea856b0d63071660974f3 +PT=6504c124d3fe3075519c02c27156adde +CT=13045621123c54ff17fe6fada146086b + +I=9 +KEY=37bc27e8020cc54449060e485078a03d98d739b3376089a2 +PT=13045621123c54ff17fe6fada146086b +CT=583cfa6c1c0db91e3663d5645c1c0c21 + +I=10 +KEY=6f80dd841e017c5a7f65db2c0c64ac1cb282bf4cd5a00797 +PT=583cfa6c1c0db91e3663d5645c1c0c21 +CT=3fff7bc2d2e91274ecabd80d3b7c9d52 + +I=11 +KEY=507fa646cce86e2e93ce03213718314e4142628604296c73 +PT=3fff7bc2d2e91274ecabd80d3b7c9d52 +CT=04942897fa1bd6797194b877d118aa83 + +I=12 +KEY=54eb8ed136f3b857e25abb56e6009bcdc071cb2aad7e4d42 +PT=04942897fa1bd6797194b877d118aa83 +CT=4f564bee22cfe0ccdfe3d186e2308ab3 + +I=13 +KEY=1bbdc53f143c589b3db96ad00430117e0f5ef27de9747354 +PT=4f564bee22cfe0ccdfe3d186e2308ab3 +CT=a7fc3fcae5bf84a3ab14e5e9bdb24942 + +I=14 +KEY=bc41faf5f183dc3896ad8f39b982583cf24a5e27f0a0ad22 +PT=a7fc3fcae5bf84a3ab14e5e9bdb24942 +CT=3e9627377333c75504c59712c863d118 + +I=15 +KEY=82d7ddc282b01b6d9268182b71e18924aa7c1232aec9851e +PT=3e9627377333c75504c59712c863d118 +CT=ef52a0844f8bb92efa6a4677ff9f2c33 + +I=16 +KEY=6d857d46cd3ba24368025e5c8e7ea517da55980b2aab983e +PT=ef52a0844f8bb92efa6a4677ff9f2c33 +CT=b0c4441c89c80eed7056b88ec5467f20 + +I=17 +KEY=dd41395a44f3acae1854e6d24b38da375e6c74dd4495116f +PT=b0c4441c89c80eed7056b88ec5467f20 +CT=6b069b2bfba26e56c2362fe38ee626cd + +I=18 +KEY=b647a271bf51c2f8da62c931c5defcfaa68dbbb32fef4a12 +PT=6b069b2bfba26e56c2362fe38ee626cd +CT=e7bce5861d3fe4aa3795a6e084505319 + +I=19 +KEY=51fb47f7a26e2652edf76fd1418eafe335674f060f9df9a1 +PT=e7bce5861d3fe4aa3795a6e084505319 +CT=5719e85e04b4a957a422bc8541e368e6 + +I=20 +KEY=06e2afa9a6da8f0549d5d354006dc70516d028fd0e6ad533 +PT=5719e85e04b4a957a422bc8541e368e6 +CT=dd9e532e2f95fab1aba776f20d14d2eb + +I=21 +KEY=db7cfc87894f75b4e272a5a60d7915ee658d52d2d7fbc801 +PT=dd9e532e2f95fab1aba776f20d14d2eb +CT=b293ed77c7213581ca4a3dfb8dda00b6 + +I=22 +KEY=69ef11f04e6e40352838985d80a3155846046c19df20c8f4 +PT=b293ed77c7213581ca4a3dfb8dda00b6 +CT=5b123cd3bbd0ef91a13359cc1aafdfec + +I=23 +KEY=32fd2d23f5beafa4890bc1919a0ccab483526c7fb36aef77 +PT=5b123cd3bbd0ef91a13359cc1aafdfec +CT=a65624c712c1e3e6f7c463bc56aa11d8 + +I=24 +KEY=94ab09e4e77f4c427ecfa22dcca6db6cceaee44725ed9447 +PT=a65624c712c1e3e6f7c463bc56aa11d8 +CT=df4692912e4b72ed39a943c2ab2581da + +I=25 +KEY=4bed9b75c9343eaf4766e1ef67835ab61bce3c2f9bc249ec +PT=df4692912e4b72ed39a943c2ab2581da +CT=cd14310b565131aaebf95fc208935f8d + +I=26 +KEY=86f9aa7e9f650f05ac9fbe2d6f10053b89925d0f3c153401 +PT=cd14310b565131aaebf95fc208935f8d +CT=a5ef5a092ce0f286fa804696811b4fab + +I=27 +KEY=2316f077b385fd83561ff8bbee0b4a90b4da5d062b15d40f +PT=a5ef5a092ce0f286fa804696811b4fab +CT=804feba06527ac99e61acff97adf5cff + +I=28 +KEY=a3591bd7d6a2511ab005374294d4166f589edd3cebdee3b7 +PT=804feba06527ac99e61acff97adf5cff +CT=273e751a93d25e94ded72c1da5f0f537 + +I=29 +KEY=84676ecd45700f8e6ed21b5f3124e35841754e0703f6097e +PT=273e751a93d25e94ded72c1da5f0f537 +CT=ad1c41a25480b1aa59d66be614d08505 + +I=30 +KEY=297b2f6f11f0be24370470b925f4665da59238049b55afd2 +PT=ad1c41a25480b1aa59d66be614d08505 +CT=4d5b00f3cb325331daca84e1eaa857f5 + +I=31 +KEY=64202f9cdac2ed15edcef458cf5c31a8794888f023d0ef74 +PT=4d5b00f3cb325331daca84e1eaa857f5 +CT=9e376004a932d3d69df02de32ad4c400 + +I=32 +KEY=fa174f9873f03ec3703ed9bbe588f5a8cfaad6b45cc1a33d +PT=9e376004a932d3d69df02de32ad4c400 +CT=9056c673de07bdf5820db6a2f3ddaf01 + +I=33 +KEY=6a4189ebadf78336f2336f1916555aa9d2449dad09c280a2 +PT=9056c673de07bdf5820db6a2f3ddaf01 +CT=822d68d5dadf0e6f251a3fd049b57c15 + +I=34 +KEY=e86ce13e77288d59d72950c95fe026bcff3ef12d7b89098c +PT=822d68d5dadf0e6f251a3fd049b57c15 +CT=2cbf859e611f1aa376b72255ed4214b0 + +I=35 +KEY=c4d364a0163797faa19e729cb2a2320c4c0dfc34d7a9f4ff +PT=2cbf859e611f1aa376b72255ed4214b0 +CT=9bc4de94fae3719fac79450ea22ed0be + +I=36 +KEY=5f17ba34ecd4e6650de73792108ce2b2167da256e05d7f59 +PT=9bc4de94fae3719fac79450ea22ed0be +CT=0b23ae79aa698e1651b2d4e23c0bb23d + +I=37 +KEY=5434144d46bd68735c55e3702c87508f9ae6892ba7d6f28c +PT=0b23ae79aa698e1651b2d4e23c0bb23d +CT=fe810c773a93f9556a90e2a18d3f1f00 + +I=38 +KEY=aab5183a7c2e912636c501d1a1b84f8f3352e8d07806e1e8 +PT=fe810c773a93f9556a90e2a18d3f1f00 +CT=f640986154facbfe7d7dfbe2b520570c + +I=39 +KEY=5cf5805b28d45ad84bb8fa33149818839708192518ab2e1e +PT=f640986154facbfe7d7dfbe2b520570c +CT=18a13c3db51457b9bee20e2a8fbc32d1 + +I=40 +KEY=4454bc669dc00d61f55af4199b242a52964aa1ed496eaf07 +PT=18a13c3db51457b9bee20e2a8fbc32d1 +CT=b61b2b452fbc05a38d1fae5e1739673e + +I=41 +KEY=f24f9723b27c08c278455a478c1d4d6c149412a85e99f6a1 +PT=b61b2b452fbc05a38d1fae5e1739673e +CT=2ed882937117a8c134965b5e90df1566 + +I=42 +KEY=dc9715b0c36ba0034cd301191cc2580a7c5e484b32a99f99 +PT=2ed882937117a8c134965b5e90df1566 +CT=0fbd22a9de209ba60f7b759f150719ea + +I=43 +KEY=d32a37191d4b3ba543a8748609c541e0d8e24e72b0b6b2d4 +PT=0fbd22a9de209ba60f7b759f150719ea +CT=31136e8c1fc90c539e5df3706f5159c6 + +I=44 +KEY=e2395995028237f6ddf587f6669418264571d5f7754a16d3 +PT=31136e8c1fc90c539e5df3706f5159c6 +CT=79ab1d2d435f8a070fcdccfbc8ad4053 + +I=45 +KEY=9b9244b841ddbdf1d2384b0dae39587541fbf6abb0334c20 +PT=79ab1d2d435f8a070fcdccfbc8ad4053 +CT=568805dd0e91e1322f215e1f64c7f2b8 + +I=46 +KEY=cd1a41654f4c5cc3fd191512cafeaacddb6dfa85a3b84bdf +PT=568805dd0e91e1322f215e1f64c7f2b8 +CT=bc5651a905b82db28c96b188fc756dc9 + +I=47 +KEY=714c10cc4af47171718fa49a368bc704d81b1e087b537de5 +PT=bc5651a905b82db28c96b188fc756dc9 +CT=0cffbed1099d976da4de97767f3a5d71 + +I=48 +KEY=7db3ae1d4369e61cd55133ec49b19a75b9a41f105b4846a1 +PT=0cffbed1099d976da4de97767f3a5d71 +CT=f87828097f80f20bf598f0f5b063322c + +I=49 +KEY=85cb86143ce9141720c9c319f9d2a8598a1f93a262942c2b +PT=f87828097f80f20bf598f0f5b063322c +CT=054bebec3140a8e426b7995bacade33a + +I=50 +KEY=80806df80da9bcf3067e5a42557f4b6391cda4320c6e02d5 +PT=054bebec3140a8e426b7995bacade33a +CT=c68e22f403dd3aa990275c7c7bb7dc3d + +I=51 +KEY=460e4f0c0e74865a9659063e2ec8975ef5f8ee79d191f18f +PT=c68e22f403dd3aa990275c7c7bb7dc3d +CT=76931ad8bb53a9459da59c11ce94eec5 + +I=52 +KEY=309d55d4b5272f1f0bfc9a2fe05c799b30e2a7a8dcd7c311 +PT=76931ad8bb53a9459da59c11ce94eec5 +CT=fad4b407833808cdfe66ada1aa5799b0 + +I=53 +KEY=ca49e1d3361f27d2f59a378e4a0be02bda4d43f18481fd2e +PT=fad4b407833808cdfe66ada1aa5799b0 +CT=117179d453e7527a889d8863adc8d3cd + +I=54 +KEY=db38980765f875a87d07bfede7c333e671f73a1663d2f545 +PT=117179d453e7527a889d8863adc8d3cd +CT=48a8a6c13bd387d782ed7cd2fad135db + +I=55 +KEY=93903ec65e2bf27fffeac33f1d12063dfca36dbc9dd5204d +PT=48a8a6c13bd387d782ed7cd2fad135db +CT=263f193a9af45a9b8993a88a5b0b6027 + +I=56 +KEY=b5af27fcc4dfa8e476796bb54619661ac8e3b319c8f9aac1 +PT=263f193a9af45a9b8993a88a5b0b6027 +CT=1341d6977d54bf236776412610393794 + +I=57 +KEY=a6eef16bb98b17c7110f2a935620518ee6d35e2a2414e52b +PT=1341d6977d54bf236776412610393794 +CT=d012ba8869e07d3a6484a7b9ba6248a0 + +I=58 +KEY=76fc4be3d06b6afd758b8d2aec42192e1d17a362c53f9207 +PT=d012ba8869e07d3a6484a7b9ba6248a0 +CT=71d597cf23f2b6808f3b5262c7635e15 + +I=59 +KEY=0729dc2cf399dc7dfab0df482b21473bad1aa5feca8b9ec6 +PT=71d597cf23f2b6808f3b5262c7635e15 +CT=e4e9aec9a4929cd7c95cd09f237a6c85 + +I=60 +KEY=e3c072e5570b40aa33ec0fd7085b2bbed1abec62a8338583 +PT=e4e9aec9a4929cd7c95cd09f237a6c85 +CT=26a057233b30a952e74bb157d814632c + +I=61 +KEY=c56025c66c3be9f8d4a7be80d04f489288d973969122c7a0 +PT=26a057233b30a952e74bb157d814632c +CT=cfafb4e3a6d0d288003e616adc9e0f78 + +I=62 +KEY=0acf9125caeb3b70d499dfea0cd147ea2136c30d034a16c9 +PT=cfafb4e3a6d0d288003e616adc9e0f78 +CT=3ec4f89799ee39297413fd79a062fdc2 + +I=63 +KEY=340b69b253050259a08a2293acb3ba28f0f38b85b0d49f78 +PT=3ec4f89799ee39297413fd79a062fdc2 +CT=96e0d59ea36e48ba508ea95139efd6f2 + +I=64 +KEY=a2ebbc2cf06b4ae3f0048bc2955c6cdab1c3dc0ec893cd04 +PT=96e0d59ea36e48ba508ea95139efd6f2 +CT=3cea642c2f6a27038ac8c857b27a04b3 + +I=65 +KEY=9e01d800df016de07acc439527266869d098b50e915b7634 +PT=3cea642c2f6a27038ac8c857b27a04b3 +CT=725ff0b76076d674c17a0cf4fbbe0ca8 + +I=66 +KEY=ec5e28b7bf77bb94bbb64f61dc9864c186ee99b666e77446 +PT=725ff0b76076d674c17a0cf4fbbe0ca8 +CT=de825e1d9ddc42d86b382f9b9bec088f + +I=67 +KEY=32dc76aa22abf94cd08e60fa47746c4e0024496425b0cbad +PT=de825e1d9ddc42d86b382f9b9bec088f +CT=f253002094b48737ba44dace7df46d7b + +I=68 +KEY=c08f768ab61f7e7b6acaba343a80013590320e90906fe510 +PT=f253002094b48737ba44dace7df46d7b +CT=dc7e2a79b0816d9eb52b0d001795a586 + +I=69 +KEY=1cf15cf3069e13e5dfe1b7342d15a4b3ad013fa75fa415f1 +PT=dc7e2a79b0816d9eb52b0d001795a586 +CT=b42aff8e9f07678651009d2707453ba5 + +I=70 +KEY=a8dba37d999974638ee12a132a509f1611f6979d10becb49 +PT=b42aff8e9f07678651009d2707453ba5 +CT=d5909349ebcf4981cfcf084d1e82e660 + +I=71 +KEY=7d4b303472563de2412e225e34d279765ea31aafcf5e0ca1 +PT=d5909349ebcf4981cfcf084d1e82e660 +CT=c3cb793edc49b02e3864e435f4a7f0b8 + +I=72 +KEY=be80490aae1f8dcc794ac66bc07589cee0dee6b115b33f0b +PT=c3cb793edc49b02e3864e435f4a7f0b8 +CT=60ad3f7b6be100dd7ad42c44c3de34ef + +I=73 +KEY=de2d7671c5fe8d11039eea2f03abbd21a4497d0d48989474 +PT=60ad3f7b6be100dd7ad42c44c3de34ef +CT=62f1e52e954e0dab81904c86d4bb3b66 + +I=74 +KEY=bcdc935f50b080ba820ea6a9d71086471d6fb43949562e2f +PT=62f1e52e954e0dab81904c86d4bb3b66 +CT=96002cb4a56174317318298cb41f60d1 + +I=75 +KEY=2adcbfebf5d1f48bf1168f25630fe69648768812290ce79b +PT=96002cb4a56174317318298cb41f60d1 +CT=be520e63971fdb8b21c0bc549607af6f + +I=76 +KEY=948eb18862ce2f00d0d63371f50849f9febe3fa4c94dcdfa +PT=be520e63971fdb8b21c0bc549607af6f +CT=1d8a29a545a3bfd527c0aa8577f5d33f + +I=77 +KEY=8904982d276d90d5f71699f482fd9ac67369b752d60422d4 +PT=1d8a29a545a3bfd527c0aa8577f5d33f +CT=18f4c6ec622dbdaa66876e84016ac191 + +I=78 +KEY=91f05ec145402d7f9191f77083975b5746b797476e10b751 +PT=18f4c6ec622dbdaa66876e84016ac191 +CT=f1b7e0f4890c65e950fa2b4778951144 + +I=79 +KEY=6047be35cc4c4896c16bdc37fb024a1380b7c674ad4e3efd +PT=f1b7e0f4890c65e950fa2b4778951144 +CT=8bcabd1bcb750df509b567640b4c1bc9 + +I=80 +KEY=eb8d032e07394563c8debb53f04e51da2c7d31b60a415c32 +PT=8bcabd1bcb750df509b567640b4c1bc9 +CT=fa085fa67f8ee4d7ce6cfe445aeab419 + +I=81 +KEY=11855c8878b7a1b406b24517aaa4e5c32f964d0b832db18d +PT=fa085fa67f8ee4d7ce6cfe445aeab419 +CT=2766d1d6d2c8a639f1d8150644262833 + +I=82 +KEY=36e38d5eaa7f078df76a5011ee82cdf03765b7833be4b227 +PT=2766d1d6d2c8a639f1d8150644262833 +CT=3664e3882c874a468d2d3527d5bb6eca + +I=83 +KEY=00876ed686f84dcb7a4765363b39a33a90b14b68f23dc944 +PT=3664e3882c874a468d2d3527d5bb6eca +CT=e8ef4a26769e04fd31871da35de2a2c9 + +I=84 +KEY=e86824f0f06649364bc0789566db01f3802e50f053535a23 +PT=e8ef4a26769e04fd31871da35de2a2c9 +CT=f02afc7be83287fa4d5884eda426fa76 + +I=85 +KEY=1842d88b1854cecc0698fc78c2fdfb85ac5d5c7108f66a55 +PT=f02afc7be83287fa4d5884eda426fa76 +CT=d4a8a29119db67bb2043e07e0fe1a7c4 + +I=86 +KEY=ccea7a1a018fa97726db1c06cd1c5c4176af6c1491fb7428 +PT=d4a8a29119db67bb2043e07e0fe1a7c4 +CT=0a6f80ae19305d3dda6284afb81ba8b8 + +I=87 +KEY=c685fab418bff44afcb998a97507f4f9e949e1857bf6751a +PT=0a6f80ae19305d3dda6284afb81ba8b8 +CT=7f3e290603d2146944b8778057617116 + +I=88 +KEY=b9bbd3b21b6de023b801ef29226685ef5134064f5cf90d4b +PT=7f3e290603d2146944b8778057617116 +CT=67c16fbd9b85528e3f3505bddb3b64bc + +I=89 +KEY=de7abc0f80e8b2ad8734ea94f95de15330a1e5f91815fada +PT=67c16fbd9b85528e3f3505bddb3b64bc +CT=6c24e6b5bf7cb216783c547a9c0fee9a + +I=90 +KEY=b25e5aba3f9400bbff08beee65520fc92b1e19016c04ff53 +PT=6c24e6b5bf7cb216783c547a9c0fee9a +CT=c03950f723756e94e204773c0928725d + +I=91 +KEY=72670a4d1ce16e2f1d0cc9d26c7a7d94916be692f62fb8e6 +PT=c03950f723756e94e204773c0928725d +CT=10d65055ab60a2ce10756e82ba6f8c0f + +I=92 +KEY=62b15a18b781cce10d79a750d615f19b9d03dbf1f7d9457f +PT=10d65055ab60a2ce10756e82ba6f8c0f +CT=5d8b154fe29e91f8fdf730b78daaee66 + +I=93 +KEY=3f3a4f57551f5d19f08e97e75bbf1ffdff458c9ada5f20d8 +PT=5d8b154fe29e91f8fdf730b78daaee66 +CT=db7d86fe22c65a2a537b23622aef7a00 + +I=94 +KEY=e447c9a977d90733a3f5b485715065fdc00b611879ac3fca +PT=db7d86fe22c65a2a537b23622aef7a00 +CT=88064e813d1144e71218203ca0057757 + +I=95 +KEY=6c4187284ac843d4b1ed94b9d15512aa9b1fac74e5e902ce +PT=88064e813d1144e71218203ca0057757 +CT=7e6a815f8acafed8a3aa0bdc7976e83b + +I=96 +KEY=122b0677c002bd0c12479f65a823fa91c4f9e3732e163411 +PT=7e6a815f8acafed8a3aa0bdc7976e83b +CT=a2eb8ea612cc883caab100093bd78f91 + +I=97 +KEY=b0c088d1d2ce3530b8f69f6c93f47500d2bdddd137be4a20 +PT=a2eb8ea612cc883caab100093bd78f91 +CT=b167fe11681eb66011f2befe550f4ecb + +I=98 +KEY=01a776c0bad08350a9042192c6fb3bcb3136054972e5377b +PT=b167fe11681eb66011f2befe550f4ecb +CT=df22dfa28ed230fd916cd7506d1085cd + +I=99 +KEY=de85a9623402b3ad3868f6c2abebbe06f6426aa4c548f9e9 +PT=df22dfa28ed230fd916cd7506d1085cd +CT=ad502f6429d7dffa1f0085aa2f99e482 + +I=100 +KEY=73d586061dd56c572768736884725a84355bcd47bae5ad12 +PT=ad502f6429d7dffa1f0085aa2f99e482 +CT=66c7aed5fb1f70e3cf10c221ebfd9ed0 + +I=101 +KEY=151228d3e6ca1cb4e878b1496f8fc4546bb425da11d6c34c +PT=66c7aed5fb1f70e3cf10c221ebfd9ed0 +CT=def74f923faf663ce9473ecf530db9c9 + +I=102 +KEY=cbe56741d9657a88013f8f863c827d9d1af5c011e5ccb301 +PT=def74f923faf663ce9473ecf530db9c9 +CT=4b194db9a75aeba83bc94041fb746ad1 + +I=103 +KEY=80fc2af87e3f91203af6cfc7c7f6174c4bcbbb0a34b366c4 +PT=4b194db9a75aeba83bc94041fb746ad1 +CT=8de5777eed3c43611ccd94394a8f574c + +I=104 +KEY=0d195d869303d241263b5bfe8d7940009a8a2502989f3379 +PT=8de5777eed3c43611ccd94394a8f574c +CT=1c1e3fdaf4357fa1385e887f9c782dc9 + +I=105 +KEY=1107625c6736ade01e65d38111016dc92908c9216e9539c3 +PT=1c1e3fdaf4357fa1385e887f9c782dc9 +CT=b29604f7d9bbef1df0b7a1ab52a61a0d + +I=106 +KEY=a39166abbe8d42fdeed2722a43a777c4f6a97c1c407ab669 +PT=b29604f7d9bbef1df0b7a1ab52a61a0d +CT=9684b786dc96c387c190d261f810bf71 + +I=107 +KEY=3515d12d621b817a2f42a04bbbb7c8b592876ea63f34ee7b +PT=9684b786dc96c387c190d261f810bf71 +CT=aee573e2c587be0358fd0a34ec8b4b75 + +I=108 +KEY=9bf0a2cfa79c3f7977bfaa7f573c83c0941eeaf0dce4f4a3 +PT=aee573e2c587be0358fd0a34ec8b4b75 +CT=418eb25d06657ec20b85714fea7e63a7 + +I=109 +KEY=da7e1092a1f941bb7c3adb30bd42e067386945d9d65e7d13 +PT=418eb25d06657ec20b85714fea7e63a7 +CT=ffe48be9c493e9b13656e78c8887b55f + +I=110 +KEY=259a9b7b656aa80a4a6c3cbc35c55538adcde19cb6104181 +PT=ffe48be9c493e9b13656e78c8887b55f +CT=61e2f5866417b26074e6b7d9a1bff196 + +I=111 +KEY=44786efd017d1a6a3e8a8b65947aa4aecaff01e9a3ca19c6 +PT=61e2f5866417b26074e6b7d9a1bff196 +CT=3c17c1ca1f2dd90269ea48ddac7426fc + +I=112 +KEY=786faf371e50c3685760c3b8380e825280a3f68bb80f45f5 +PT=3c17c1ca1f2dd90269ea48ddac7426fc +CT=2436388016d0ecf3a2a48203d5867475 + +I=113 +KEY=5c5997b708802f9bf5c441bbed88f627565ed0e871de2671 +PT=2436388016d0ecf3a2a48203d5867475 +CT=72402fa5e1414187d7e296811b4fce48 + +I=114 +KEY=2e19b812e9c16e1c2226d73af6c7386fcf29ae81804876cf +PT=72402fa5e1414187d7e296811b4fce48 +CT=232db6b881fe8d30b1ce6606d3ccf189 + +I=115 +KEY=0d340eaa683fe32c93e8b13c250bc9e6b3b50ad84f78964f +PT=232db6b881fe8d30b1ce6606d3ccf189 +CT=a104d42ced1998f92340673da3b1719e + +I=116 +KEY=ac30da8685267bd5b0a8d60186bab87867a404c0b7f2ff49 +PT=a104d42ced1998f92340673da3b1719e +CT=c6ead00d45765d4c4b13f5f0cc942fe2 + +I=117 +KEY=6ada0a8bc0502699fbbb23f14a2e979adaeffc60cf5af817 +PT=c6ead00d45765d4c4b13f5f0cc942fe2 +CT=2061d53486a6d4a6f5a6aac4c36eda7e + +I=118 +KEY=4abbdfbf46f6f23f0e1d893589404de4f20fea6514167038 +PT=2061d53486a6d4a6f5a6aac4c36eda7e +CT=341bbf3fe1cc4b1d62fad0207d7978db + +I=119 +KEY=7ea06080a73ab9226ce75915f439353f73d97e27387ccfa5 +PT=341bbf3fe1cc4b1d62fad0207d7978db +CT=47678b1ee7aead3c7a85376b2842b20c + +I=120 +KEY=39c7eb9e4094141e16626e7edc7b8733612f36d431f07ac7 +PT=47678b1ee7aead3c7a85376b2842b20c +CT=bed835e5abd4ad2a14eb8742db0e9d3a + +I=121 +KEY=871fde7beb40b9340289e93c07751a09e87b0eab9179ed8d +PT=bed835e5abd4ad2a14eb8742db0e9d3a +CT=26254f226e8137f866286c03c3111c9e + +I=122 +KEY=a13a915985c18ecc64a1853fc4640697c080b8347557cbad +PT=26254f226e8137f866286c03c3111c9e +CT=5c247e1c5e3ce47703ad9f6faea9f07f + +I=123 +KEY=fd1eef45dbfd6abb670c1a506acdf6e80e48f06f5d7ed6af +PT=5c247e1c5e3ce47703ad9f6faea9f07f +CT=d9fbd506212f6a70804009ee3fecf015 + +I=124 +KEY=24e53a43fad200cbe74c13be552106fd2894d5df16062649 +PT=d9fbd506212f6a70804009ee3fecf015 +CT=5714238f59cbc1c67ca9a6b7f4378b19 + +I=125 +KEY=73f119cca319c10d9be5b509a1168de44ab48a10c8c9bdac +PT=5714238f59cbc1c67ca9a6b7f4378b19 +CT=ccb2a981ae243280fa070852798f4d3b + +I=126 +KEY=bf43b04d0d3df38d61e2bd5bd899c0df123cbe0c3fc71832 +PT=ccb2a981ae243280fa070852798f4d3b +CT=8c96eefee656d081930ea60d36adf3f6 + +I=127 +KEY=33d55eb3eb6b230cf2ec1b56ee343329dec50651db3d690a +PT=8c96eefee656d081930ea60d36adf3f6 +CT=c5dc669eba3fbf0ee96e94d413410dad + +I=128 +KEY=f609382d51549c021b828f82fd753e841a7580e3a723e5e9 +PT=c5dc669eba3fbf0ee96e94d413410dad +CT=1a3da1d01c383736e10fea1c82c492c0 + +I=129 +KEY=ec3499fd4d6cab34fa8d659e7fb1ac44a375dd6918ef4482 +PT=1a3da1d01c383736e10fea1c82c492c0 +CT=b6acc0296c711a2a7f9d3a5d0f6feb0e + +I=130 +KEY=5a9859d4211db11e85105fc370de474a17cb94cb8e7216e3 +PT=b6acc0296c711a2a7f9d3a5d0f6feb0e +CT=ffb511f43ff5ee126c17cb825b36b36e + +I=131 +KEY=a52d48201ee85f0ce90794412be8f42411cf5b2f2981bbc8 +PT=ffb511f43ff5ee126c17cb825b36b36e +CT=220a57647ecb8da6af45f461b19acace + +I=132 +KEY=87271f446023d2aa464260209a723eea6589606b4405ef88 +PT=220a57647ecb8da6af45f461b19acace +CT=1ea16a1ca19cea74590927a95e470437 + +I=133 +KEY=99867558c1bf38de1f4b4789c4353add3ff9f4e260119b3f +PT=1ea16a1ca19cea74590927a95e470437 +CT=fa52d3c9ccc352fdac49a2aa160a85b8 + +I=134 +KEY=63d4a6910d7c6a23b302e523d23fbf659d4191ed93ae5d43 +PT=fa52d3c9ccc352fdac49a2aa160a85b8 +CT=dc4f577c399c21a08227436dc2d7c0a7 + +I=135 +KEY=bf9bf1ed34e04b833125a64e10e87fc2b39c829a8f592131 +PT=dc4f577c399c21a08227436dc2d7c0a7 +CT=ae6c915260ad76a06adee653adb30213 + +I=136 +KEY=11f760bf544d3d235bfb401dbd5b7dd1d1e6db5c1ed78971 +PT=ae6c915260ad76a06adee653adb30213 +CT=ccddd83b7a6c4e83eb8160cd732d8adc + +I=137 +KEY=dd2ab8842e2173a0b07a20d0ce76f70d637d58fedd1dbc0a +PT=ccddd83b7a6c4e83eb8160cd732d8adc +CT=edf4554df8de0eaedbdce14e12725093 + +I=138 +KEY=30deedc9d6ff7d0e6ba6c19edc04a79e3256b81d1f0e2b97 +PT=edf4554df8de0eaedbdce14e12725093 +CT=ac6f54391f1e467c38a2842c1d8fa434 + +I=139 +KEY=9cb1b9f0c9e13b72530445b2c18b03aa6a9f7545d3a090a0 +PT=ac6f54391f1e467c38a2842c1d8fa434 +CT=12b450ecdaf0229f1bea0811208e070d + +I=140 +KEY=8e05e91c131119ed48ee4da3e10504a74285dc4d851f6b22 +PT=12b450ecdaf0229f1bea0811208e070d +CT=5b9d566bd128d9342a86e26939e3b6de + +I=141 +KEY=d598bf77c239c0d96268afcad8e6b2791686d621327cb8f1 +PT=5b9d566bd128d9342a86e26939e3b6de +CT=c4b6135d55cd3ef807c0c901c7259351 + +I=142 +KEY=112eac2a97f4fe2165a866cb1fc321285159770ae5e4f30f +PT=c4b6135d55cd3ef807c0c901c7259351 +CT=51c99ecc8f245f7f9633f695d1e8ef9a + +I=143 +KEY=40e732e618d0a15ef39b905ece2bceb2bbcfef8f64009a44 +PT=51c99ecc8f245f7f9633f695d1e8ef9a +CT=d77651de6b31ebc004f144256df2f1b8 + +I=144 +KEY=9791633873e14a9ef76ad47ba3d93f0ac0478fa852484f55 +PT=d77651de6b31ebc004f144256df2f1b8 +CT=d180ec4f66382ed36d9c8e5dc4783bc3 + +I=145 +KEY=46118f7715d9644d9af65a2667a104c9c161977ebaa27684 +PT=d180ec4f66382ed36d9c8e5dc4783bc3 +CT=68180eee2b93bd11dd3444e6394f3afd + +I=146 +KEY=2e0981993e4ad95c47c21ec05eee3e343d6bcb012776c011 +PT=68180eee2b93bd11dd3444e6394f3afd +CT=317e531d8663fb0d8fc4f54220a90315 + +I=147 +KEY=1f77d284b8292251c806eb827e473d218cc8719a5c4a86bf +PT=317e531d8663fb0d8fc4f54220a90315 +CT=4d8dda7b8730311f576de8cde9617b3e + +I=148 +KEY=52fa08ff3f19134e9f6b034f9726461f379763fbb0c3a370 +PT=4d8dda7b8730311f576de8cde9617b3e +CT=6ebdd4c42b8db3c71bf773779222e412 + +I=149 +KEY=3c47dc3b1494a089849c70380504a20df1bb5ebd9b580782 +PT=6ebdd4c42b8db3c71bf773779222e412 +CT=42bd60c3be755d38976dd17961f31db7 + +I=150 +KEY=7efabcf8aae1fdb113f1a14164f7bfba25e0d6dae5bff020 +PT=42bd60c3be755d38976dd17961f31db7 +CT=cf7952f4b115c9685ac569fcd71c81a5 + +I=151 +KEY=b183ee0c1bf434d94934c8bdb3eb3e1f8f8ac20e1c1ec238 +PT=cf7952f4b115c9685ac569fcd71c81a5 +CT=a5aa6276f61261dfe56b4ac5ba13f0b2 + +I=152 +KEY=14298c7aede65506ac5f827809f8cead2fc60a4ec5f4e174 +PT=a5aa6276f61261dfe56b4ac5ba13f0b2 +CT=78c28bd3d80cf4683eba4a11ef1f258c + +I=153 +KEY=6ceb07a935eaa16e92e5c869e6e7eb21c3ee314d5bf5aeb8 +PT=78c28bd3d80cf4683eba4a11ef1f258c +CT=809e3910b3ffe40e7e6ec6254ecff301 + +I=154 +KEY=ec753eb986154560ec8b0e4ca828182008d0d603745ca010 +PT=809e3910b3ffe40e7e6ec6254ecff301 +CT=0cfa73fed2f766207a11f7972c655ce5 + +I=155 +KEY=e08f4d4754e22340969af9db844d44c522b76b3d1feef477 +PT=0cfa73fed2f766207a11f7972c655ce5 +CT=cc2fc3831122def26f17ee4344be6414 + +I=156 +KEY=2ca08ec445c0fdb2f98d1798c0f320d1a3575bf135e50b44 +PT=cc2fc3831122def26f17ee4344be6414 +CT=0b4b48fef52d0a8a86f1c75478c28af5 + +I=157 +KEY=27ebc63ab0edf7387f7cd0ccb831aa24cc3fbcbc36551641 +PT=0b4b48fef52d0a8a86f1c75478c28af5 +CT=ef0ac65d2959f4b8f0b9f2bd61bd3fd4 + +I=158 +KEY=c8e1006799b403808fc52271d98c95f00e0da542328f96ed +PT=ef0ac65d2959f4b8f0b9f2bd61bd3fd4 +CT=f03313397d563cced859d7d4b925b7b3 + +I=159 +KEY=38d2135ee4e23f4e579cf5a560a922430a481ecad3796ef4 +PT=f03313397d563cced859d7d4b925b7b3 +CT=1e29abdff3bc2ced6518257063cb4b29 + +I=160 +KEY=26fbb881175e13a33284d0d50362696a6e078d2ae35f544e +PT=1e29abdff3bc2ced6518257063cb4b29 +CT=2a87429eff9a5b31f9fde86f81f666c6 + +I=161 +KEY=0c7cfa1fe8c44892cb7938ba82940fac4c1192c7b4e96bb7 +PT=2a87429eff9a5b31f9fde86f81f666c6 +CT=30c7664123cf7668c071b1371d08f850 + +I=162 +KEY=3cbb9c5ecb0b3efa0b08898d9f9cf7fcc0d9bd1922055a56 +PT=30c7664123cf7668c071b1371d08f850 +CT=77fffe62eddf06023843d8f084b8958c + +I=163 +KEY=4b44623c26d438f8334b517d1b2462701369c4e90f88ee84 +PT=77fffe62eddf06023843d8f084b8958c +CT=af7ef3fb0a178bf9b23148409a14b2bc + +I=164 +KEY=e43a91c72cc3b301817a193d8130d0cc6f6a32a5e9d9eee1 +PT=af7ef3fb0a178bf9b23148409a14b2bc +CT=013789b17bf14a5ff208e5e4081c4447 + +I=165 +KEY=e50d18765732f95e7372fcd9892c948b596ee0289a9f4058 +PT=013789b17bf14a5ff208e5e4081c4447 +CT=e2f24701e05bfab582956dde3c4a1cc0 + +I=166 +KEY=07ff5f77b76903ebf1e79107b566884b7a7115daccb4fba1 +PT=e2f24701e05bfab582956dde3c4a1cc0 +CT=5fcdd0dc199e5b16211a2514f7227d0e + +I=167 +KEY=58328fabaef758fdd0fdb4134244f545e8a7edaabf61c850 +PT=5fcdd0dc199e5b16211a2514f7227d0e +CT=f0e7d446e3f84112ac8dd5731dbc093e + +I=168 +KEY=a8d55bed4d0f19ef7c7061605ff8fc7b70a164a32b87b82a +PT=f0e7d446e3f84112ac8dd5731dbc093e +CT=56112fcb3ab94aa251fe79bfc0c8d1d2 + +I=169 +KEY=fec4742677b6534d2d8e18df9f302da9a9bb958712f5d1f4 +PT=56112fcb3ab94aa251fe79bfc0c8d1d2 +CT=548b8342dc7abe972545c6ac61e8d6b3 + +I=170 +KEY=aa4ff764abccedda08cbde73fed8fb1a09e1776520ca00a0 +PT=548b8342dc7abe972545c6ac61e8d6b3 +CT=338380e73bb2614056e14f34524494b1 + +I=171 +KEY=99cc7783907e8c9a5e2a9147ac9c6fab9de5e0a70b0c122a +PT=338380e73bb2614056e14f34524494b1 +CT=c772fc108a0bfcf42ef444fd9509f5c2 + +I=172 +KEY=5ebe8b931a75706e70ded5ba39959a69e8c6e075dcca4abb +PT=c772fc108a0bfcf42ef444fd9509f5c2 +CT=7d35c39c2d28fe0e3aa0cc5bb47f1478 + +I=173 +KEY=238b480f375d8e604a7e19e18dea8e11e3aa29f209768bf0 +PT=7d35c39c2d28fe0e3aa0cc5bb47f1478 +CT=f7c7c38f3a613d21146468836e75637f + +I=174 +KEY=d44c8b800d3cb3415e1a7162e39fed6e21b48c2105552b69 +PT=f7c7c38f3a613d21146468836e75637f +CT=7c034adde36cc7b6ee8b69035190e1ab + +I=175 +KEY=a84fc15dee5074f7b0911861b20f0cc54e90db22126b8b4b +PT=7c034adde36cc7b6ee8b69035190e1ab +CT=725fc9635335b3431d2b4e934c3c73ae + +I=176 +KEY=da10083ebd65c7b4adba56f2fe337f6b1674cb959c0bbf64 +PT=725fc9635335b3431d2b4e934c3c73ae +CT=33e917653cfe43f4d8d07c31fb8d2a23 + +I=177 +KEY=e9f91f5b819b8440756a2ac305be55481613f6b9c0ed4f6c +PT=33e917653cfe43f4d8d07c31fb8d2a23 +CT=28206dc7d2a2215501fd2b5b61278d44 + +I=178 +KEY=c1d9729c5339a515749701986499d80c001763214d4ab290 +PT=28206dc7d2a2215501fd2b5b61278d44 +CT=efa952bb1c4d4f463765eb14861e3ef9 + +I=179 +KEY=2e7020274f74ea5343f2ea8ce287e6f5e13e603cbba9d01a +PT=efa952bb1c4d4f463765eb14861e3ef9 +CT=01a97067cb02f4a0539d0284177df5f3 + +I=180 +KEY=2fd9504084761ef3106fe808f5fa1306f0238e91f8eee184 +PT=01a97067cb02f4a0539d0284177df5f3 +CT=7c5e4fa966e76e2934c7c75b84c49841 + +I=181 +KEY=53871fe9e29170da24a82f53713e8b4765d32d95ef8b11d7 +PT=7c5e4fa966e76e2934c7c75b84c49841 +CT=bf6d4f2a1a4f3ed6475040e0488fa8c8 + +I=182 +KEY=ecea50c3f8de4e0c63f86fb339b1238f9af9e3983defed0f +PT=bf6d4f2a1a4f3ed6475040e0488fa8c8 +CT=6c5fecfbb0e7ced715f0b026f291dae1 + +I=183 +KEY=80b5bc38483980db7608df95cb20f96e600cb95352962ec2 +PT=6c5fecfbb0e7ced715f0b026f291dae1 +CT=b2d40916e309afcd8c5b2de75637731c + +I=184 +KEY=3261b52eab302f16fa53f2729d178a72c036854b95907409 +PT=b2d40916e309afcd8c5b2de75637731c +CT=bc8cf1d3f623bbe42cfaca135c1c528a + +I=185 +KEY=8eed44fd5d1394f2d6a93861c10bd8f884b73625025639af +PT=bc8cf1d3f623bbe42cfaca135c1c528a +CT=c60c0007eae4ebc8b41b1df79d5e6ac1 + +I=186 +KEY=48e144fab7f77f3a62b225965c55b2396653a5b0c62f1ac6 +PT=c60c0007eae4ebc8b41b1df79d5e6ac1 +CT=633f53132964be630ffcefb0b3635cbd + +I=187 +KEY=2bde17e99e93c1596d4eca26ef36ee84b3ddddd632e134b6 +PT=633f53132964be630ffcefb0b3635cbd +CT=31571843036771f31df1cf449595b4dd + +I=188 +KEY=1a890faa9df4b0aa70bf05627aa35a590469c491d409324e +PT=31571843036771f31df1cf449595b4dd +CT=f59654eb5425b0397f2eca93b9ed329c + +I=189 +KEY=ef1f5b41c9d100930f91cff1c34e68c5ee075b32d84f360e +PT=f59654eb5425b0397f2eca93b9ed329c +CT=5c5fb08f820e09196b671f9ea231307a + +I=190 +KEY=b340ebce4bdf098a64f6d06f617f58bf7468541ae893b378 +PT=5c5fb08f820e09196b671f9ea231307a +CT=e3dfb074140141de191aa8f1cffb42dc + +I=191 +KEY=509f5bba5fde48547dec789eae841a63d0a108202cfcf395 +PT=e3dfb074140141de191aa8f1cffb42dc +CT=f4a49a84ce3238b18686e7e362a47d35 + +I=192 +KEY=a43bc13e91ec70e5fb6a9f7dcc2067561f0e340f5e71b138 +PT=f4a49a84ce3238b18686e7e362a47d35 +CT=b5aaaff97508f8166f125313c72732db + +I=193 +KEY=11916ec7e4e488f39478cc6e0b07558d1236b8fa520e8725 +PT=b5aaaff97508f8166f125313c72732db +CT=6f758f052b5d52f591dfc5282b9d357d + +I=194 +KEY=7ee4e1c2cfb9da0605a70946209a60f0af78435994cd7d6b +PT=6f758f052b5d52f591dfc5282b9d357d +CT=01c64b6d38d7e7bfb198f7db39272311 + +I=195 +KEY=7f22aaaff76e3db9b43ffe9d19bd43e158541e012ba90d02 +PT=01c64b6d38d7e7bfb198f7db39272311 +CT=93762d16b55eb7b07205fa3b8d18a252 + +I=196 +KEY=ec5487b942308a09c63a04a694a5e1b35e3cac7e70688817 +PT=93762d16b55eb7b07205fa3b8d18a252 +CT=21e1e83dd40c7b1a7479137916abaf30 + +I=197 +KEY=cdb56f84963cf113b24317df820e4e83ce259d49c4b8e635 +PT=21e1e83dd40c7b1a7479137916abaf30 +CT=cab4c2405c7ec9f4d67a44e326d46a7a + +I=198 +KEY=0701adc4ca4238e76439533ca4da24f9f9bec3de7a58ac18 +PT=cab4c2405c7ec9f4d67a44e326d46a7a +CT=c3ce7be2b989ff3e9268e5aebc923569 + +I=199 +KEY=c4cfd62673cbc7d9f651b69218481190a43ebbd36e10c8f3 +PT=c3ce7be2b989ff3e9268e5aebc923569 +CT=a6cff559398a4f318f9c2f6720bfc94d + +I=200 +KEY=6200237f4a4188e879cd99f538f7d8dd5db80bea4220cb06 +PT=a6cff559398a4f318f9c2f6720bfc94d +CT=6f6884b517fc95c035a079e7d549720e + +I=201 +KEY=0d68a7ca5dbd1d284c6de012edbeaad33fcafd685c02dfbd +PT=6f6884b517fc95c035a079e7d549720e +CT=1c2abaaecd641550aaf6d008db90c62b + +I=202 +KEY=11421d6490d90878e69b301a362e6cf817c866ee4a3ed492 +PT=1c2abaaecd641550aaf6d008db90c62b +CT=7677f142aaf197b529972369d0df06f0 + +I=203 +KEY=6735ec263a289fcdcf0c1373e6f16a083ae809f24cb50def +PT=7677f142aaf197b529972369d0df06f0 +CT=b7b9557e18e75458ad61165fb0ab995a + +I=204 +KEY=d08cb95822cfcb95626d052c565af352409334d2440e2d66 +PT=b7b9557e18e75458ad61165fb0ab995a +CT=d24d008a447fb47d5ffc5f2cd084893d + +I=205 +KEY=02c1b9d266b07fe83d915a0086de7a6f31bd90c28549f8b8 +PT=d24d008a447fb47d5ffc5f2cd084893d +CT=6b5e8328860dd74b4990c3b6fb739dbe + +I=206 +KEY=699f3afae0bda8a3740199b67dade7d11821b9471d83eefe +PT=6b5e8328860dd74b4990c3b6fb739dbe +CT=5adab34604ccab7648f579b292ba95bf + +I=207 +KEY=334589bce47103d53cf4e004ef17726ed3e16cb26e9be2e5 +PT=5adab34604ccab7648f579b292ba95bf +CT=63b54f12a385c13d33e7209a1bb6f84d + +I=208 +KEY=50f0c6ae47f4c2e80f13c09ef4a18a23bc6b242aa917b35a +PT=63b54f12a385c13d33e7209a1bb6f84d +CT=ad7087040f667b015359562477417247 + +I=209 +KEY=fd8041aa4892b9e95c4a96ba83e0f8649b7b878fa93a56cd +PT=ad7087040f667b015359562477417247 +CT=a6bfd5ab511692f84fb59a9e9737811f + +I=210 +KEY=5b3f940119842b1113ff0c2414d7797b2571eb1738ba9c70 +PT=a6bfd5ab511692f84fb59a9e9737811f +CT=b0c0907539291c2f4c6e05a27a58b96a + +I=211 +KEY=ebff047420ad373e5f9109866e8fc0118198f10e317ad2a6 +PT=b0c0907539291c2f4c6e05a27a58b96a +CT=04e048267f3c7b5a406fb28617a6daa5 + +I=212 +KEY=ef1f4c525f914c641ffebb0079291ab48802f41f54916bab +PT=04e048267f3c7b5a406fb28617a6daa5 +CT=16978208dc2c6b3ca6996faa88962139 + +I=213 +KEY=f988ce5a83bd2758b967d4aaf1bf3b8defabff8e43225d56 +PT=16978208dc2c6b3ca6996faa88962139 +CT=32d65841c001cf6a7c2c724bf8074c34 + +I=214 +KEY=cb5e961b43bce832c54ba6e109b877b90c6dd5ae8707892c +PT=32d65841c001cf6a7c2c724bf8074c34 +CT=7bf136df0820f26ce4fe00302cf89932 + +I=215 +KEY=b0afa0c44b9c1a5e21b5a6d12540ee8b23700ea897ad74c0 +PT=7bf136df0820f26ce4fe00302cf89932 +CT=ab36b850bb77f4836fe155488bab2e36 + +I=216 +KEY=1b991894f0ebeedd4e54f399aeebc0bd94df79d46a1ef9a0 +PT=ab36b850bb77f4836fe155488bab2e36 +CT=6faa40b365c9f578949bf335b93d155b + +I=217 +KEY=7433582795221ba5dacf00ac17d6d5e6ccee0372ac6c08ed +PT=6faa40b365c9f578949bf335b93d155b +CT=dd0a96facce9ef461de17f55aa08ef0b + +I=218 +KEY=a939cedd59cbf4e3c72e7ff9bdde3aed77f84c5855aa14d0 +PT=dd0a96facce9ef461de17f55aa08ef0b +CT=ef5c45d8b6b503b1292a2ed67306789a + +I=219 +KEY=46658b05ef7ef752ee04512fced84277086608edeae72b8c +PT=ef5c45d8b6b503b1292a2ed67306789a +CT=519b746221be2cda8dfcdbded7f0d495 + +I=220 +KEY=17feff67cec0db8863f88af1192896e2ea0b1df535ffb2df +PT=519b746221be2cda8dfcdbded7f0d495 +CT=0c9d5990a87913213ccea99fffbf2756 + +I=221 +KEY=1b63a6f766b9c8a95f36236ee697b1b4fb4cf984db23a34a +PT=0c9d5990a87913213ccea99fffbf2756 +CT=1bb0167d952c9fdec6e9fb12770cd5aa + +I=222 +KEY=00d3b08af395577799dfd87c919b641eac6f13f48714a0e5 +PT=1bb0167d952c9fdec6e9fb12770cd5aa +CT=510dbf1dec6e3cb5ba79fc4a2b67a483 + +I=223 +KEY=51de0f971ffb6bc223a62436bafcc09dd8e0840a5e94fd33 +PT=510dbf1dec6e3cb5ba79fc4a2b67a483 +CT=fc99d3276f523eb82efdcac10b8e15b8 + +I=224 +KEY=ad47dcb070a9557a0d5beef7b172d525a39a4eb1c1414ad2 +PT=fc99d3276f523eb82efdcac10b8e15b8 +CT=ccb74c442862a1d01b4179125abe8389 + +I=225 +KEY=61f090f458cbf4aa161a97e5ebcc56ac0cc62d407eff0ff4 +PT=ccb74c442862a1d01b4179125abe8389 +CT=171d03be7b9efa25698b80b8cbf2c925 + +I=226 +KEY=76ed934a23550e8f7f91175d203e9f898c281130aa3765f9 +PT=171d03be7b9efa25698b80b8cbf2c925 +CT=2db894d3b79e8c78befc4d26c791de2a + +I=227 +KEY=5b55079994cb82f7c16d5a7be7af41a350f44ef5828c66ca +PT=2db894d3b79e8c78befc4d26c791de2a +CT=087071a460a286e88dde51d4a52d8eb5 + +I=228 +KEY=5325763df469041f4cb30baf4282cf166dcf61d20636117b +PT=087071a460a286e88dde51d4a52d8eb5 +CT=07ddcc0d4a2510156010880ce2df0a97 + +I=229 +KEY=54f8ba30be4c140a2ca383a3a05dc58188f419e192117b75 +PT=07ddcc0d4a2510156010880ce2df0a97 +CT=9250468961c14a72b52cb96cc170e755 + +I=230 +KEY=c6a8fcb9df8d5e78998f3acf612d22d4a130de02d68498b3 +PT=9250468961c14a72b52cb96cc170e755 +CT=8b2c5d5411e8851c25a0357082b6cdcd + +I=231 +KEY=4d84a1edce65db64bc2f0fbfe39bef19064234d2feddcc3e +PT=8b2c5d5411e8851c25a0357082b6cdcd +CT=26d97c71ac15211d739106f06eda2090 + +I=232 +KEY=6b5ddd9c6270fa79cfbe094f8d41cf89856f953b758f04f1 +PT=26d97c71ac15211d739106f06eda2090 +CT=4c9ddd3ccbb811d942596ce8ba82de80 + +I=233 +KEY=27c000a0a9c8eba08de765a737c31109460021f35703fd9d +PT=4c9ddd3ccbb811d942596ce8ba82de80 +CT=00b167914b7d82cdd9a933aadd31732b + +I=234 +KEY=27716731e2b5696d544e560deaf262227ce56a73766d1142 +PT=00b167914b7d82cdd9a933aadd31732b +CT=0ef95f2ba6c24765c97737b30d789fc5 + +I=235 +KEY=2988381a44772e089d3961bee78afde74b59e1005f57b807 +PT=0ef95f2ba6c24765c97737b30d789fc5 +CT=8d7950207b9bae36990eabb816fdf00b + +I=236 +KEY=a4f1683a3fec803e0437ca06f1770dec91d453ee032226fb +PT=8d7950207b9bae36990eabb816fdf00b +CT=7be3b3e0f61c4d6de7d36763ecc41e82 + +I=237 +KEY=df12dbdac9f0cd53e3e4ad651db3136eeb591d956a921b82 +PT=7be3b3e0f61c4d6de7d36763ecc41e82 +CT=21700c21d04910a5c5c28f596dd6dfdf + +I=238 +KEY=fe62d7fb19b9ddf62626223c7065ccb139267d28f846eb59 +PT=21700c21d04910a5c5c28f596dd6dfdf +CT=de33a1ed1f68960dbce5a9811d39e78b + +I=239 +KEY=2051761606d14bfb9ac38bbd6d5c2b3a04f88bbff2f86621 +PT=de33a1ed1f68960dbce5a9811d39e78b +CT=beed462a78ddda7a7643be6aa073ffdc + +I=240 +KEY=9ebc303c7e0c9181ec8035d7cd2fd4e6dd857898277ae280 +PT=beed462a78ddda7a7643be6aa073ffdc +CT=8df7ec9a7b7a416d3946e40e107f517a + +I=241 +KEY=134bdca60576d0ecd5c6d1d9dd50859c7e676d6d9f78af9c +PT=8df7ec9a7b7a416d3946e40e107f517a +CT=821510bc602c35b4b932769214c29492 + +I=242 +KEY=915ecc1a655ae5586cf4a74bc992110e952042a686f256c3 +PT=821510bc602c35b4b932769214c29492 +CT=60de3af7e6d8ad49c58ac49cdca17654 + +I=243 +KEY=f180f6ed83824811a97e63d71533675a0847deb5b454c3d3 +PT=60de3af7e6d8ad49c58ac49cdca17654 +CT=e71c5ebb9fce57f032160f689ca20673 + +I=244 +KEY=169ca8561c4c1fe19b686cbf89916129bd9891078478168f +PT=e71c5ebb9fce57f032160f689ca20673 +CT=db9179d9e47c984665c7796443da72f9 + +I=245 +KEY=cd0dd18ff83087a7feaf15dbca4b13d08d55b5ec0777753b +PT=db9179d9e47c984665c7796443da72f9 +CT=44fb8aa1f85a7112f785c400bd39b040 + +I=246 +KEY=89f65b2e006af6b5092ad1db7772a390016d27b6d4af89a1 +PT=44fb8aa1f85a7112f785c400bd39b040 +CT=6e8815716997ee852917ee93e92f6276 + +I=247 +KEY=e77e4e5f69fd1830203d3f489e5dc1e6c0a073572a54339d +PT=6e8815716997ee852917ee93e92f6276 +CT=21706759dd23bf5bd9c5fbbc747d731b + +I=248 +KEY=c60e2906b4dea76bf9f8c4f4ea20b2fd61888ffc35d285ef +PT=21706759dd23bf5bd9c5fbbc747d731b +CT=2cf9573018096d27b7f6fa66d669e54b + +I=249 +KEY=eaf77e36acd7ca4c4e0e3e923c4957b60192452037fa7065 +PT=2cf9573018096d27b7f6fa66d669e54b +CT=b24614d1e06e13fc47a401f275003f6f + +I=250 +KEY=58b16ae74cb9d9b009aa3f60494968d9ec2d24a4eb3288fb +PT=b24614d1e06e13fc47a401f275003f6f +CT=23aeceba739752d03bacc1e5a3632334 + +I=251 +KEY=7b1fa45d3f2e8b603206fe85ea2a4bed9dca7eb6e38efd92 +PT=23aeceba739752d03bacc1e5a3632334 +CT=a946c3b4e91332d40a0521a51dfa850f + +I=252 +KEY=d25967e9d63db9b43803df20f7d0cee262614dcbe151f496 +PT=a946c3b4e91332d40a0521a51dfa850f +CT=5ffa97420aabe91df33fcad992526665 + +I=253 +KEY=8da3f0abdc9650a9cb3c15f96582a887818a31afe4741b9c +PT=5ffa97420aabe91df33fcad992526665 +CT=b6b880200205149f3a8c10725731c605 + +I=254 +KEY=3b1b708bde934436f1b0058b32b36e82d2a099fec719e16b +PT=b6b880200205149f3a8c10725731c605 +CT=080dd63e728c8dc82706446182f1a150 + +I=255 +KEY=3316a6b5ac1fc9fed6b641eab042cfd2ba5ffbf164988862 +PT=080dd63e728c8dc82706446182f1a150 +CT=b48baa096ccb5677852e0d0f01135d44 + +I=256 +KEY=879d0cbcc0d49f8953984ce5b1519296b118757af7cb02b7 +PT=b48baa096ccb5677852e0d0f01135d44 +CT=7406b50b442efcdf15c20969f1b902b6 + +I=257 +KEY=f39bb9b784fa6356465a458c40e89020bb6e355e28bb8822 +PT=7406b50b442efcdf15c20969f1b902b6 +CT=a73d95e16004c34bc64966e205d69d83 + +I=258 +KEY=54a62c56e4fea01d8013236e453e0da3392959a2143b5650 +PT=a73d95e16004c34bc64966e205d69d83 +CT=135b53a5dc75fc4c11b84356fe16149c + +I=259 +KEY=47fd7ff3388b5c5191ab6038bb28193fb21b40c6d6c5f575 +PT=135b53a5dc75fc4c11b84356fe16149c +CT=b154a43a5b325c262842c1ad0eb17cba + +I=260 +KEY=f6a9dbc963b90077b9e9a195b5996585ba3bd467aa77f59c +PT=b154a43a5b325c262842c1ad0eb17cba +CT=e7f43bafd05815c93294c8dd8da22a87 + +I=261 +KEY=115de066b3e115be8b7d6948383b4f02e2d7ee7c1ecdb6f0 +PT=e7f43bafd05815c93294c8dd8da22a87 +CT=503114f4306f2fd788c8b50f3fb8faea + +I=262 +KEY=416cf492838e3a6903b5dc470783b5e8008c1eb3db390223 +PT=503114f4306f2fd788c8b50f3fb8faea +CT=a56e7bb855246cfb27ecbfa9a3e6e215 + +I=263 +KEY=e4028f2ad6aa5692245963eea46557fd33208fdde453406f +PT=a56e7bb855246cfb27ecbfa9a3e6e215 +CT=10b90673c3de683684f34503c833e3b6 + +I=264 +KEY=f4bb895915743ea4a0aa26ed6c56b44b0357f4482b7536c1 +PT=10b90673c3de683684f34503c833e3b6 +CT=537886c90b014092a75ccc50d8f4bb0a + +I=265 +KEY=a7c30f901e757e3607f6eabdb4a20f41d06f0e28de7d6666 +PT=537886c90b014092a75ccc50d8f4bb0a +CT=7cc8ce1864a8267885f6ea1a4710c930 + +I=266 +KEY=db0bc1887add584e820000a7f3b2c6713be5b5548718f8c8 +PT=7cc8ce1864a8267885f6ea1a4710c930 +CT=17972621fe5daea0b8822aaa9c093822 + +I=267 +KEY=cc9ce7a98480f6ee3a822a0d6fbbfe5370a6181b5b673344 +PT=17972621fe5daea0b8822aaa9c093822 +CT=7ac6bd89babad8a55672409c0090ca12 + +I=268 +KEY=b65a5a203e3a2e4b6cf06a916f2b3441cac89abb15c4a9c3 +PT=7ac6bd89babad8a55672409c0090ca12 +CT=98687e643cc26bc5513636030e88ba29 + +I=269 +KEY=2e32244402f8458e3dc65c9261a38e682b9b7f5f569aa526 +PT=98687e643cc26bc5513636030e88ba29 +CT=ebd85639b34cebb7ee883a6122cc2faf + +I=270 +KEY=c5ea727db1b4ae39d34e66f3436fa1c7582ecbf1ef5222f9 +PT=ebd85639b34cebb7ee883a6122cc2faf +CT=13c893f59d4d34399eb09ba7707bee61 + +I=271 +KEY=d622e1882cf99a004dfefd5433144fa6d22ac49ac3722ca7 +PT=13c893f59d4d34399eb09ba7707bee61 +CT=7013f0f757803d01a5fbe993c731625c + +I=272 +KEY=a631117f7b79a701e80514c7f4252dfa4175203c872a48fa +PT=7013f0f757803d01a5fbe993c731625c +CT=9a82e5797e7241df9b06857dfa0deec8 + +I=273 +KEY=3cb3f406050be6de730391ba0e28c332afd1457b9af89dcf +PT=9a82e5797e7241df9b06857dfa0deec8 +CT=65c6d1954ec5a0388a894340ca0a5d96 + +I=274 +KEY=597525934bce46e6f98ad2fac4229ea427b18d461ab08e96 +PT=65c6d1954ec5a0388a894340ca0a5d96 +CT=2c02b14865b6790a4356837ad300d64d + +I=275 +KEY=757794db2e783fecbadc5180172248e978a98695c30a8db4 +PT=2c02b14865b6790a4356837ad300d64d +CT=a5ffb67f7f473ebb4638546b24ed61bd + +I=276 +KEY=d08822a4513f0157fce405eb33cf2954a0d278f8f21be158 +PT=a5ffb67f7f473ebb4638546b24ed61bd +CT=184f4f6acaf604f4c0be8b3f81c60e61 + +I=277 +KEY=c8c76dce9bc905a33c5a8ed4b209273531af07ce23c884e2 +PT=184f4f6acaf604f4c0be8b3f81c60e61 +CT=d312bd4a813d76e8552abb27b07111ac + +I=278 +KEY=1bd5d0841af4734b697035f302783699ebb99288eed52f76 +PT=d312bd4a813d76e8552abb27b07111ac +CT=1411db09476b37e6fe4c9bfe3c098ec0 + +I=279 +KEY=0fc40b8d5d9f44ad973cae0d3e71b859dddcdb8c1d31ab05 +PT=1411db09476b37e6fe4c9bfe3c098ec0 +CT=4021241e00ca55020b1a61bcac5b1f07 + +I=280 +KEY=4fe52f935d5511af9c26cfb1922aa75eba7ef3ff8575f837 +PT=4021241e00ca55020b1a61bcac5b1f07 +CT=17ade995e83426aeeb5dd1ed33472cee + +I=281 +KEY=5848c606b5613701777b1e5ca16d8bb00df5e23a0451ac01 +PT=17ade995e83426aeeb5dd1ed33472cee +CT=72964810219be3690ec41678baec4c5e + +I=282 +KEY=2ade8e1694fad46879bf08241b81c7ee0d3fa7e912a08516 +PT=72964810219be3690ec41678baec4c5e +CT=89600918cc2bb680209dacb268d4a68c + +I=283 +KEY=a3be870e58d162e85922a4967355616225eda85be07c394d +PT=89600918cc2bb680209dacb268d4a68c +CT=2aadff88072a169c973139fe98d9ace2 + +I=284 +KEY=891378865ffb7474ce139d68eb8ccd80c15b5b52895445e7 +PT=2aadff88072a169c973139fe98d9ace2 +CT=374ca2a8a173f99816530588eb4f8b1b + +I=285 +KEY=be5fda2efe888decd84098e000c3469b873948d86015d44b +PT=374ca2a8a173f99816530588eb4f8b1b +CT=89458cf02b47ea7ad7660637c363a3fe + +I=286 +KEY=371a56ded5cf67960f269ed7c3a0e565d3e6ffe6b466cde3 +PT=89458cf02b47ea7ad7660637c363a3fe +CT=1922e71764ba0239ba6bcadcb50f0691 + +I=287 +KEY=2e38b1c9b17565afb54d540b76afe3f40a54da79d887eece +PT=1922e71764ba0239ba6bcadcb50f0691 +CT=21823f2773b95971c5fd38235ad1ee4a + +I=288 +KEY=0fba8eeec2cc3cde70b06c282c7e0dbe5c02c12332cf4ef4 +PT=21823f2773b95971c5fd38235ad1ee4a +CT=beaca5073152991761fb04a8f625aa3a + +I=289 +KEY=b1162be9f39ea5c9114b6880da5ba78489ab8de263c2b1f7 +PT=beaca5073152991761fb04a8f625aa3a +CT=e6249c3d62f212829885d1a0c7b104a3 + +I=290 +KEY=5732b7d4916cb74b89ceb9201deaa3275609d0ed2c59910e +PT=e6249c3d62f212829885d1a0c7b104a3 +CT=662b2626d865e2c65b6293433ed5a6b2 + +I=291 +KEY=311991f24909558dd2ac2a63233f05951cf5f9b30afbc09a +PT=662b2626d865e2c65b6293433ed5a6b2 +CT=1526aa05d63553a95d9c1704dbc3ebaf + +I=292 +KEY=243f3bf79f3c06248f303d67f8fcee3ac7f7acf0813ba468 +PT=1526aa05d63553a95d9c1704dbc3ebaf +CT=6bcd61516c533071653ec0d89f9d0417 + +I=293 +KEY=4ff25aa6f36f3655ea0efdbf6761ea2ddf97a38ddf39b94e +PT=6bcd61516c533071653ec0d89f9d0417 +CT=fb8c67c40814b33c791a3710d10d989d + +I=294 +KEY=b47e3d62fb7b85699314caafb66c72b0ae6d6e49c904e237 +PT=fb8c67c40814b33c791a3710d10d989d +CT=e60b7efd14d66da4cbc5d95edaeeb1fd + +I=295 +KEY=5275439fefade8cd58d113f16c82c34d64f281dec99b71be +PT=e60b7efd14d66da4cbc5d95edaeeb1fd +CT=e3a8fdab5bf23e80b62301bf2522a962 + +I=296 +KEY=b1ddbe34b45fd64deef2124e49a06a2f83a7c9ef53f91b51 +PT=e3a8fdab5bf23e80b62301bf2522a962 +CT=b2bc44429a49382a9f87a417aef28367 + +I=297 +KEY=0361fa762e16ee677175b659e752e94865e6448c3b90e28a +PT=b2bc44429a49382a9f87a417aef28367 +CT=04da509113279d7ec5ddb4c655082783 + +I=298 +KEY=07bbaae73d317319b4a8029fb25acecbd397f82a4d33082e +PT=04da509113279d7ec5ddb4c655082783 +CT=75b955abdb9effc7ed098be8aea283f1 + +I=299 +KEY=7202ff4ce6af8cde59a189771cf84d3af0d9bd7250327442 +PT=75b955abdb9effc7ed098be8aea283f1 +CT=fd2078e4b9da1ec1535fc1ab887c9335 + +I=300 +KEY=8f2287a85f75921f0afe48dc9484de0f1dd2078223de53f8 +PT=fd2078e4b9da1ec1535fc1ab887c9335 +CT=3da9fd55aecdcb6cbe4d7011e44c6d01 + +I=301 +KEY=b28b7afdf1b85973b4b338cd70c8b30eb6cded83eecf0bc7 +PT=3da9fd55aecdcb6cbe4d7011e44c6d01 +CT=da1f2713098ea752d04d6d16eb4284ff + +I=302 +KEY=68945deef836fe2164fe55db9b8a37f16e4569920fdba489 +PT=da1f2713098ea752d04d6d16eb4284ff +CT=cd4129d8b2788082c3f5e2cb35d3e0a6 + +I=303 +KEY=a5d574364a4e7ea3a70bb710ae59d757e79d8115a1b43833 +PT=cd4129d8b2788082c3f5e2cb35d3e0a6 +CT=9c468a3869770cf374161c71ef23ec5d + +I=304 +KEY=3993fe0e23397250d31dab61417a3b0a43c40fe6ebc47fa7 +PT=9c468a3869770cf374161c71ef23ec5d +CT=c83e0d24a366b0287529727a18e801da + +I=305 +KEY=f1adf32a805fc278a634d91b59923ad074586aa6db6315e5 +PT=c83e0d24a366b0287529727a18e801da +CT=3bf96153819780fcca826f076f22b00b + +I=306 +KEY=ca54927901c842846cb6b61c36b08adbf86959c09b7d3660 +PT=3bf96153819780fcca826f076f22b00b +CT=d7ddc016284f865f29571ac67758bb1d + +I=307 +KEY=1d89526f2987c4db45e1acda41e831c628ff6f963750f41b +PT=d7ddc016284f865f29571ac67758bb1d +CT=5de54d6bc8f1fe5d0fb5b97354acb3c9 + +I=308 +KEY=406c1f04e1763a864a5415a91544820f386fe1e18ff36763 +PT=5de54d6bc8f1fe5d0fb5b97354acb3c9 +CT=e33b7b9683cf8d95858da48a47866599 + +I=309 +KEY=a357649262b9b713cfd9b12352c2e796b25a0f43eef89516 +PT=e33b7b9683cf8d95858da48a47866599 +CT=be52a4a81242b8ed447946617eb88faf + +I=310 +KEY=1d05c03a70fb0ffe8ba0f7422c7a6839b81aa039056aa7b5 +PT=be52a4a81242b8ed447946617eb88faf +CT=91d84e4d1badbf657821d6cc5af92621 + +I=311 +KEY=8cdd8e776b56b09bf381218e76834e187da9974e70f67883 +PT=91d84e4d1badbf657821d6cc5af92621 +CT=0cd45fce6e00cb8a62b4e92fbca62651 + +I=312 +KEY=8009d1b905567b119135c8a1ca256849bbbeab29a2a72da3 +PT=0cd45fce6e00cb8a62b4e92fbca62651 +CT=c3c16359a191396606c0b035c6c44cfe + +I=313 +KEY=43c8b2e0a4c7427797f578940ce124b70b38ee16789576ee +PT=c3c16359a191396606c0b035c6c44cfe +CT=fcb08f04fba7e92ebeb5e294be7a446c + +I=314 +KEY=bf783de45f60ab5929409a00b29b60db522b5a282ba0af52 +PT=fcb08f04fba7e92ebeb5e294be7a446c +CT=2185c0f7e04611c41b2bf5ca4dab49f8 + +I=315 +KEY=9efdfd13bf26ba9d326b6fcaff30292332db6d0bc245650d +PT=2185c0f7e04611c41b2bf5ca4dab49f8 +CT=412de0c8ea68badf80051db1be0786af + +I=316 +KEY=dfd01ddb554e0042b26e727b4137af8cfd00588fce3e1160 +PT=412de0c8ea68badf80051db1be0786af +CT=1934a9694a82aa1a99225d33365e3fb7 + +I=317 +KEY=c6e4b4b21fccaa582b4c2f487769903b07b9b3b32cb9edc9 +PT=1934a9694a82aa1a99225d33365e3fb7 +CT=d2a80a4fe2248c1bbbea2b1cf8695343 + +I=318 +KEY=144cbefdfde8264390a604548f00c37810fb47942c0402ff +PT=d2a80a4fe2248c1bbbea2b1cf8695343 +CT=11a365080acd63e5cda1fb78235b12a7 + +I=319 +KEY=05efdbf5f72545a65d07ff2cac5bd1df5bdf4b359e03159d +PT=11a365080acd63e5cda1fb78235b12a7 +CT=0401618a394feac446a4d7c5357405de + +I=320 +KEY=01eeba7fce6aaf621ba328e9992fd401f392f254a94cc092 +PT=0401618a394feac446a4d7c5357405de +CT=f70371b1986464cf3dc6a8db0cc979bd + +I=321 +KEY=f6edcbce560ecbad2665803295e6adbc565629d8b80db754 +PT=f70371b1986464cf3dc6a8db0cc979bd +CT=e841805b36bea6d504415ea70f1edad8 + +I=322 +KEY=1eac4b9560b06d782224de959af8776438b8a0ad040c5f51 +PT=e841805b36bea6d504415ea70f1edad8 +CT=7a3158b1fc19dec2f26d1ee95e81f22f + +I=323 +KEY=649d13249ca9b3bad049c07cc479854bc46bb9c4f312da22 +PT=7a3158b1fc19dec2f26d1ee95e81f22f +CT=d9a03e92d7e2a3e672451197fe68e66d + +I=324 +KEY=bd3d2db64b4b105ca20cd1eb3a116326b516a0b29a8bb07c +PT=d9a03e92d7e2a3e672451197fe68e66d +CT=b44737b140c20b781755c41872c39ec6 + +I=325 +KEY=097a1a070b891b24b55915f348d2fde0a307af79e580da82 +PT=b44737b140c20b781755c41872c39ec6 +CT=0cd7042434ceaa91dfad3c61cbc737b6 + +I=326 +KEY=05ad1e233f47b1b56af429928315ca56068ffe4404299686 +PT=0cd7042434ceaa91dfad3c61cbc737b6 +CT=772d0999713cd5c7c85096c8afe60591 + +I=327 +KEY=728017ba4e7b6472a2a4bf5a2cf3cfc7291e1176306b343e +PT=772d0999713cd5c7c85096c8afe60591 +CT=8011696b913f7d11f81916e1eb2a1b08 + +I=328 +KEY=f2917ed1df4419635abda9bbc7d9d4cfff894d4184c88f5e +PT=8011696b913f7d11f81916e1eb2a1b08 +CT=47751d401feaed870ff0f409a1e4133f + +I=329 +KEY=b5e46391c0aef4e4554d5db2663dc7f03603bb44f560bef3 +PT=47751d401feaed870ff0f409a1e4133f +CT=752ab268c5cc040adf05ffe3e80a19cc + +I=330 +KEY=c0ced1f90562f0ee8a48a2518e37de3c3bde337345b422aa +PT=752ab268c5cc040adf05ffe3e80a19cc +CT=237de9280a4a38d90d48f87283cd6c8c + +I=331 +KEY=e3b338d10f28c83787005a230dfab2b0c6fc21f86e7242d6 +PT=237de9280a4a38d90d48f87283cd6c8c +CT=4d1015b6a406aa1a5b49cbcf6b6eb054 + +I=332 +KEY=aea32d67ab2e622ddc4991ec669402e4af2c7035421dbd5d +PT=4d1015b6a406aa1a5b49cbcf6b6eb054 +CT=37a58ce4a460fc533ca2aa6a94087435 + +I=333 +KEY=9906a1830f4e9e7ee0eb3b86f29c76d1d4fe1a08e4959399 +PT=37a58ce4a460fc533ca2aa6a94087435 +CT=579ed056569ee8a645b4d3b7436493a5 + +I=334 +KEY=ce9871d559d076d8a55fe831b1f8e5740e242134203d13a3 +PT=579ed056569ee8a645b4d3b7436493a5 +CT=e3e21bc5c720a98409610076f2834e6c + +I=335 +KEY=2d7a6a109ef0df5cac3ee847437bab18a92e02b57972a3ce +PT=e3e21bc5c720a98409610076f2834e6c +CT=dbb6145158a35958a5f0699bac83098e + +I=336 +KEY=f6cc7e41c653860409ce81dceff8a296ed4b7801adc5fd5d +PT=dbb6145158a35958a5f0699bac83098e +CT=e7fa8851f06ee660d001b615fdce8576 + +I=337 +KEY=1136f610363d6064d9cf37c9123627e01991c4c1162af4d0 +PT=e7fa8851f06ee660d001b615fdce8576 +CT=c4660150238e0bc7b5e0670062e8c08b + +I=338 +KEY=d550f74015b36ba36c2f50c970dee76ba2d8f269521d0bd5 +PT=c4660150238e0bc7b5e0670062e8c08b +CT=08e1f6e7a919e603fd4793647ce7a237 + +I=339 +KEY=ddb101a7bcaa8da09168c3ad0c39455c19fbf67f2f6f364b +PT=08e1f6e7a919e603fd4793647ce7a237 +CT=982b3af59998f48741d28ae0a63bf33b + +I=340 +KEY=459a3b5225327927d0ba494daa02b6677aaea3abaee33c10 +PT=982b3af59998f48741d28ae0a63bf33b +CT=adc9163437b5a73a8c83a5802057a589 + +I=341 +KEY=e8532d661287de1d5c39eccd8a5513ee6ea1a219b2adf74e +PT=adc9163437b5a73a8c83a5802057a589 +CT=2246ded6d244a32da711433066964ed2 + +I=342 +KEY=ca15f3b0c0c37d30fb28affdecc35d3cedbb8d47649a9cdf +PT=2246ded6d244a32da711433066964ed2 +CT=cc60e691da29db5276d95dac02535abc + +I=343 +KEY=067515211aeaa6628df1f251ee9007808d9baa33fdc34830 +PT=cc60e691da29db5276d95dac02535abc +CT=f7fde1cc5e2a4f343d58750fd77fa37c + +I=344 +KEY=f188f4ed44c0e956b0a9875e39efa4fcae7ce79f0ac4c83d +PT=f7fde1cc5e2a4f343d58750fd77fa37c +CT=cd06eaf54bdb1e5bfbe43417d8633a48 + +I=345 +KEY=3c8e1e180f1bf70d4b4db349e18c9eb4c61c676fd6489fb0 +PT=cd06eaf54bdb1e5bfbe43417d8633a48 +CT=1f886a92d35f9c29218691ac3af6649a + +I=346 +KEY=2306748adc446b246acb22e5db7afa2ea0765bd3e31304f1 +PT=1f886a92d35f9c29218691ac3af6649a +CT=f84048d0307c69cb1f1c661ddbf720c9 + +I=347 +KEY=db463c5aec3802ef75d744f8008ddae70fbc0c06c4a84adf +PT=f84048d0307c69cb1f1c661ddbf720c9 +CT=8094e1149e86d5e92ea8890998e5437e + +I=348 +KEY=5bd2dd4e72bed7065b7fcdf198689999de08e842f4a2f803 +PT=8094e1149e86d5e92ea8890998e5437e +CT=d8525cf55d9ce4c4ee852ed05ada315d + +I=349 +KEY=838081bb2f2233c2b5fae321c2b2a8c48279ea2b5a7717ac +PT=d8525cf55d9ce4c4ee852ed05ada315d +CT=0c03a556a84a7e1c57b188933b035fab + +I=350 +KEY=8f8324ed87684ddee24b6bb2f9b1f76fd4c761955e1da7ff +PT=0c03a556a84a7e1c57b188933b035fab +CT=14626491a3f4243bdcbc1d6731539ec0 + +I=351 +KEY=9be1407c249c69e53ef776d5c8e269af4f58a376f7563f64 +PT=14626491a3f4243bdcbc1d6731539ec0 +CT=462a5df3c9b00fcb7d1ba773aa634fa0 + +I=352 +KEY=ddcb1d8fed2c662e43ecd1a66281260f89df1ba537b77f71 +PT=462a5df3c9b00fcb7d1ba773aa634fa0 +CT=c7e475f30c7c4ed482635bf887b0e4bd + +I=353 +KEY=1a2f687ce15028fac18f8a5ee531c2b246362864792e9b79 +PT=c7e475f30c7c4ed482635bf887b0e4bd +CT=7f1a45415c14d4cfe3d5f72a53ed8fe0 + +I=354 +KEY=65352d3dbd44fc35225a7d74b6dc4d520a4ab7d7e0022baa +PT=7f1a45415c14d4cfe3d5f72a53ed8fe0 +CT=7f519ecdc545a7da41432dd828ad4712 + +I=355 +KEY=1a64b3f078015bef631950ac9e710a4063261742cbf4019b +PT=7f519ecdc545a7da41432dd828ad4712 +CT=77b57823a6d0172fd907c1b59dcda7d6 + +I=356 +KEY=6dd1cbd3ded14cc0ba1e911903bcad96f2c4a49a7bec1107 +PT=77b57823a6d0172fd907c1b59dcda7d6 +CT=256d9a17db775175133e067a5959b8c6 + +I=357 +KEY=48bc51c405a61db5a92097635ae51550389f923887b8b608 +PT=256d9a17db775175133e067a5959b8c6 +CT=eb2498ad3e833a3759ba07027f87ecbd + +I=358 +KEY=a398c9693b252782f09a90612562f9edf5aa2aab2a7f4fa0 +PT=eb2498ad3e833a3759ba07027f87ecbd +CT=0e95de975a800dacfd41911740111d07 + +I=359 +KEY=ad0d17fe61a52a2e0ddb01766573e4ea1f91414e86da5820 +PT=0e95de975a800dacfd41911740111d07 +CT=3a86b6a5168faa2b516fb18de1efc476 + +I=360 +KEY=978ba15b772a80055cb4b0fb849c209cf60ecbe54019be5b +PT=3a86b6a5168faa2b516fb18de1efc476 +CT=49ce25e060cb2076ebb183bf5c7ae029 + +I=361 +KEY=de4584bb17e1a073b7053344d8e6c0b5022a0f9d4caf78a3 +PT=49ce25e060cb2076ebb183bf5c7ae029 +CT=e5df7511808dd10327304a83380349e0 + +I=362 +KEY=3b9af1aa976c7170903579c7e0e5895597ff90310c856cd7 +PT=e5df7511808dd10327304a83380349e0 +CT=41d2fa5f79363fbac1e5c322c7093893 + +I=363 +KEY=7a480bf5ee5a4eca51d0bae527ecb1c6163ec44ed4ded771 +PT=41d2fa5f79363fbac1e5c322c7093893 +CT=d6f325ab115777196581735d5864b598 + +I=364 +KEY=acbb2e5eff0d39d33451c9b87f88045e48d7a4e35cecdbe4 +PT=d6f325ab115777196581735d5864b598 +CT=049240559ce87f13870ea8de2b567b8f + +I=365 +KEY=a8296e0b63e546c0b35f616654de7fd17102f2683e33de60 +PT=049240559ce87f13870ea8de2b567b8f +CT=777801517fa7e25829235555e803c63d + +I=366 +KEY=df516f5a1c42a4989a7c3433bcddb9ec8e8fb8d01880bf58 +PT=777801517fa7e25829235555e803c63d +CT=bf93b326b0f0b6db6fb0208b814d8743 + +I=367 +KEY=60c2dc7cacb21243f5cc14b83d903eaf8c2fc5df853888e6 +PT=bf93b326b0f0b6db6fb0208b814d8743 +CT=bcc3df16b19c9cf20dfb98b65be69044 + +I=368 +KEY=dc01036a1d2e8eb1f8378c0e6676aeeb2dd2ae8d5748021b +PT=bcc3df16b19c9cf20dfb98b65be69044 +CT=075d4a07dc5c97477372b955ccb175d3 + +I=369 +KEY=db5c496dc17219f68b45355baac7db38f07ba9d64d18a701 +PT=075d4a07dc5c97477372b955ccb175d3 +CT=e58af13396f107529b9ffb923b46de80 + +I=370 +KEY=3ed6b85e57831ea410dacec9918105b8e85bf5017bb74cc9 +PT=e58af13396f107529b9ffb923b46de80 +CT=5495642d5084e8166d822bae43ccf4c9 + +I=371 +KEY=6a43dc730707f6b27d58e567d24df171ad301ee47b78bb0e +PT=5495642d5084e8166d822bae43ccf4c9 +CT=aa6505eba58e0fc4fb067a247a63cbf7 + +I=372 +KEY=c026d998a289f976865e9f43a82e3a86e418b76614d435ce +PT=aa6505eba58e0fc4fb067a247a63cbf7 +CT=b0fbea7a9740f4ed8fbdf315f40d38e3 + +I=373 +KEY=70dd33e235c90d9b09e36c565c230265e1efb3201e636b3e +PT=b0fbea7a9740f4ed8fbdf315f40d38e3 +CT=e04393b3b9e7eff5f8f377f95f6dc80b + +I=374 +KEY=909ea0518c2ee26ef1101baf034eca6eb1c74aec5c4c2aed +PT=e04393b3b9e7eff5f8f377f95f6dc80b +CT=13b5fcdb7d16b4a1965fa14be10ee9eb + +I=375 +KEY=832b5c8af13856cf674fbae4e2402385d0350883da3149e8 +PT=13b5fcdb7d16b4a1965fa14be10ee9eb +CT=d2dd8eef977d1515d809ec1c419c69e1 + +I=376 +KEY=51f6d265664543dabf4656f8a3dc4a6420a3cec95d3d8155 +PT=d2dd8eef977d1515d809ec1c419c69e1 +CT=9407c40bc233ae5df16d76d9cd80e050 + +I=377 +KEY=c5f1166ea476ed874e2b20216e5caa345770ff73b25816eb +PT=9407c40bc233ae5df16d76d9cd80e050 +CT=65d5e1dbfcae689f791c6b1253698d82 + +I=378 +KEY=a024f7b558d8851837374b333d3527b6d1f5bc52c6422799 +PT=65d5e1dbfcae689f791c6b1253698d82 +CT=f2d4f4cf2358ed7181e6c745b41e548f + +I=379 +KEY=52f0037a7b806869b6d18c76892b73393a3706ee39b24d7e +PT=f2d4f4cf2358ed7181e6c745b41e548f +CT=10318a48e2408ddca103ff6b558b550b + +I=380 +KEY=42c1893299c0e5b517d2731ddca02632aae98a01e4b0be5d +PT=10318a48e2408ddca103ff6b558b550b +CT=5b554ce660149b20b17aed5701f1ce4a + +I=381 +KEY=1994c5d4f9d47e95a6a89e4add51e878aa4d73983ceeeaea +PT=5b554ce660149b20b17aed5701f1ce4a +CT=8249fffaca1cc50c58881b60ddd98bbc + +I=382 +KEY=9bdd3a2e33c8bb99fe20852a008863c44550271563865db0 +PT=8249fffaca1cc50c58881b60ddd98bbc +CT=11d005637b20296e747004987fb396e8 + +I=383 +KEY=8a0d3f4d48e892f78a5081b27f3bf52c6cfbd2944df270be +PT=11d005637b20296e747004987fb396e8 +CT=271660bb6b356c81574ee593e116146e + +I=384 +KEY=ad1b5ff623ddfe76dd1e64219e2de142eb307364c167877a +PT=271660bb6b356c81574ee593e116146e +CT=306d895189b78992ab7ce7726fec383b + +I=385 +KEY=9d76d6a7aa6a77e476628353f1c1d9798c77dc4032059b3b +PT=306d895189b78992ab7ce7726fec383b +CT=d1b4ef0ecd30b97171dcf2e95c75fffc + +I=386 +KEY=4cc239a9675ace9507be71baadb4268589855799b16bd266 +PT=d1b4ef0ecd30b97171dcf2e95c75fffc +CT=d527094dce476b3963384072e1d78ff5 + +I=387 +KEY=99e530e4a91da5ac648631c84c63a970def568a915c58c62 +PT=d527094dce476b3963384072e1d78ff5 +CT=f96f4f139f537b953c21166108023993 + +I=388 +KEY=608a7ff7364ede3958a727a9446190e38815f9858017d388 +PT=f96f4f139f537b953c21166108023993 +CT=81f1c39692d82b0caeb1124f2855d4a8 + +I=389 +KEY=e17bbc61a496f535f61635e66c34444b1907a9c49cc0a9ea +PT=81f1c39692d82b0caeb1124f2855d4a8 +CT=94bd8014af1109c77e0f27d63b21a513 + +I=390 +KEY=75c63c750b87fcf2881912305715e15804e6cbad2acad92e +PT=94bd8014af1109c77e0f27d63b21a513 +CT=c9aec14d4255c627c3bf5650157f0221 + +I=391 +KEY=bc68fd3849d23ad54ba64460426ae37950af5610394cd6dd +PT=c9aec14d4255c627c3bf5650157f0221 +CT=e2968db9a57eaa4db61821b3e15223a1 + +I=392 +KEY=5efe7081ecac9098fdbe65d3a338c0d84f60a5dc192813d1 +PT=e2968db9a57eaa4db61821b3e15223a1 +CT=ab0bc3e5b1d877b382332ff6b82ec5ee + +I=393 +KEY=f5f5b3645d74e72b7f8d4a251b160536aa081d8a85a06deb +PT=ab0bc3e5b1d877b382332ff6b82ec5ee +CT=f538d73e4d3b6a12597a1dedae05f101 + +I=394 +KEY=00cd645a104f8d3926f757c8b513f4370c0bf06a33d2427b +PT=f538d73e4d3b6a12597a1dedae05f101 +CT=f4562cc9a09b4f984e2fa8bac32469c8 + +I=395 +KEY=f49b4893b0d4c2a168d8ff7276379dffd5c39418bf4f8ed9 +PT=f4562cc9a09b4f984e2fa8bac32469c8 +CT=447b89f843213d977cea8830bdabb275 + +I=396 +KEY=b0e0c16bf3f5ff3614327742cb9c2f8acd44f153ba15dd25 +PT=447b89f843213d977cea8830bdabb275 +CT=db9f729492a66963d98ffcf056323169 + +I=397 +KEY=6b7fb3ff61539655cdbd8bb29dae1ee311cc026f7bb7b89b +PT=db9f729492a66963d98ffcf056323169 +CT=ab6ea3c4f8bfda8cf9ca7a32da700982 + +I=398 +KEY=c011103b99ec4cd93477f18047de1761aebc739e4b6d03d7 +PT=ab6ea3c4f8bfda8cf9ca7a32da700982 +CT=4f3ed223d8bd6d8eadd40ad0e4ccc2db + +I=399 +KEY=8f2fc2184151215799a3fb50a312d5ba7ed77fd93001cb21 +PT=4f3ed223d8bd6d8eadd40ad0e4ccc2db +CT=c1450acdf315be20ba808590083a9133 + + +KEYSIZE=256 + +I=0 +KEY=0000000000000000000000000000000000000000000000000000000000000000 +PT=00000000000000000000000000000000 +CT=92efa3ca9477794d31f4df7bce23e60a +test + +I=1 +KEY=92efa3ca9477794d31f4df7bce23e60a6038d2d2710373f04fd30aaecea8aa43 +PT=92efa3ca9477794d31f4df7bce23e60a +CT=41133a29b97e3b4231549e8c2d0af27e + +I=2 +KEY=d3fc99e32d09420f00a041f7e32914747731be4d4e5b5da518c2abe0a1239fa8 +PT=41133a29b97e3b4231549e8c2d0af27e +CT=6ee8edc74dcfefd0c7beaee4cbcbc9c2 + +I=3 +KEY=bd14742460c6addfc71eef1328e2ddb6ba5b8798bb66c3c4d380acb055cac569 +PT=6ee8edc74dcfefd0c7beaee4cbcbc9c2 +CT=59dd509f8b303ce5527d20d33bd16697 + +I=4 +KEY=e4c924bbebf6913a9563cfc01333bb21111e9ef31799d3c078823aaaef34737c +PT=59dd509f8b303ce5527d20d33bd16697 +CT=e7c035318d676702fb9be6802459951a + +I=5 +KEY=0309118a6691f6386ef82940376a2e3b2d3ee89dc91ca6f749d10d3238238153 +PT=e7c035318d676702fb9be6802459951a +CT=5a1074dc10f4fe274aab8518c8bb15e4 + +I=6 +KEY=591965567665081f2453ac58ffd13bdfc76410ad51f56409cf1a649482baf893 +PT=5a1074dc10f4fe274aab8518c8bb15e4 +CT=4c7e1a8243f19bd97cb9e882145a105e + +I=7 +KEY=15677fd4359493c658ea44daeb8b2b81b3df3941bfe44d38bc88b5274f750935 +PT=4c7e1a8243f19bd97cb9e882145a105e +CT=4bb65c15e5244df0a02b94aa1f4aaa8b + +I=8 +KEY=5ed123c1d0b0de36f8c1d070f4c1810af734159d8ea121a5a30a218ddd80967e +PT=4bb65c15e5244df0a02b94aa1f4aaa8b +CT=a36403c836e42a4b74d0fc09473f20e4 + +I=9 +KEY=fdb52009e654f47d8c112c79b3fea1eeef87f34e469a81d732d7d11e959504d7 +PT=a36403c836e42a4b74d0fc09473f20e4 +CT=6dfc624ed0ffca738e8e7fe5f1d61d45 + +I=10 +KEY=9049424736ab3e0e029f539c4228bcab7afe62a46f4116774c6e0f2d88a00771 +PT=6dfc624ed0ffca738e8e7fe5f1d61d45 +CT=f169deeaaab1bfc6f9a2ca3e583b5d4f + +I=11 +KEY=61209cad9c1a81c8fb3d99a21a13e1e4cc1cac4f2a37de18c5c937ee9b6bc713 +PT=f169deeaaab1bfc6f9a2ca3e583b5d4f +CT=815d0e3a77ef5337a59270673c09d40d + +I=12 +KEY=e07d9297ebf5d2ff5eafe9c5261a35e99ca0baa363f27655df1db5a2919671bb +PT=815d0e3a77ef5337a59270673c09d40d +CT=2874cf07ba108771b91505dcf4949762 + +I=13 +KEY=c8095d9051e5558ee7baec19d28ea28bfb0e254718abe256525a97f4cbe30ad9 +PT=2874cf07ba108771b91505dcf4949762 +CT=fea4d56c2ac1c79b53da45aa917f9607 + +I=14 +KEY=36ad88fc7b249215b460a9b343f1348cf69bb7c3b28e8c3a9cb6e438a45d040b +PT=fea4d56c2ac1c79b53da45aa917f9607 +CT=fbe4b4f196ad7b3740b4c1f9fadb52c1 + +I=15 +KEY=cd493c0ded89e922f4d4684ab92a664d854de978325f2aa90c7313571e032ac9 +PT=fbe4b4f196ad7b3740b4c1f9fadb52c1 +CT=6a4943fff86ea592a2fd03c9350c60d5 + +I=16 +KEY=a7007ff215e74cb056296b838c2606984640c551e686d0ce0243948698d36de4 +PT=6a4943fff86ea592a2fd03c9350c60d5 +CT=fc5a85e0908daac2e32992bcddf49dba + +I=17 +KEY=5b5afa12856ae672b500f93f51d29b220fb9da66baf4d12250f670b06f5853d5 +PT=fc5a85e0908daac2e32992bcddf49dba +CT=e5267119a2f68cd5526ae2013ab7ae6f + +I=18 +KEY=be7c8b0b279c6aa7e76a1b3e6b65354d5f2da29dccb02680addd8508eaac8845 +PT=e5267119a2f68cd5526ae2013ab7ae6f +CT=662f1b120cf6e9839ddc63e5b07c95c3 + +I=19 +KEY=d85390192b6a83247ab678dbdb19a08e77d9fe68d31742783cc32fab5b095c6f +PT=662f1b120cf6e9839ddc63e5b07c95c3 +CT=ab036bfb34c30e16b860cd90c59dc805 + +I=20 +KEY=7350fbe21fa98d32c2d6b54b1e84688b87efbe98b57056b8d3b8ee85a8afa8ef +PT=ab036bfb34c30e16b860cd90c59dc805 +CT=9fd9869697d57a14c751342f34bce755 + +I=21 +KEY=ec897d74887cf726058781642a388fdead1061845f43bbc5b561c354d18d5eef +PT=9fd9869697d57a14c751342f34bce755 +CT=cdddb3eb356b5521ad9f3c644f95a9fa + +I=22 +KEY=2154ce9fbd17a207a818bd0065ad262477418f647934ddc8fd50364270600776 +PT=cdddb3eb356b5521ad9f3c644f95a9fa +CT=5582e14a70e3de215ba66a39bcacbb4d + +I=23 +KEY=74d62fd5cdf47c26f3bed739d9019d69d81b437a9fd2c5ed3aae5ee880e0a9ca +PT=5582e14a70e3de215ba66a39bcacbb4d +CT=5cbd85bc573f7af09d62149f8eb56c0f + +I=24 +KEY=286baa699acb06d66edcc3a657b4f1660cabeb3c6bc748bbe4abb025b255a6a3 +PT=5cbd85bc573f7af09d62149f8eb56c0f +CT=5720da64bbe37cabb5d89459ef4412c9 + +I=25 +KEY=7f4b700d21287a7ddb0457ffb8f0e3afe139d1f91c5573cd9b76ab6d1b331462 +PT=5720da64bbe37cabb5d89459ef4412c9 +CT=e11ad77c90c9aee0c9bc3288a8bcce69 + +I=26 +KEY=9e51a771b1e1d49d12b86577104c2dc63d452bf5f517fd11e815f1833f085398 +PT=e11ad77c90c9aee0c9bc3288a8bcce69 +CT=18cd6b0c63acb759857d108cc3fb00a0 + +I=27 +KEY=869ccc7dd24d63c497c575fbd3b72d66e49536f7a3a2c5bc6c3f4af3e6e4dfa8 +PT=18cd6b0c63acb759857d108cc3fb00a0 +CT=d486d72b29e89e2c638e0d7918ac34ca + +I=28 +KEY=521a1b56fba5fde8f44b7882cb1b19acd0ae41f2594d03a737bb0b3ad1ab8171 +PT=d486d72b29e89e2c638e0d7918ac34ca +CT=520701a5d321e456bc74fe73e93b6f56 + +I=29 +KEY=001d1af3288419be483f86f1222076fa194046841a350535049ca81c09bf58e4 +PT=520701a5d321e456bc74fe73e93b6f56 +CT=bcb9c6c618f4eba777a3a40e11c4bfe1 + +I=30 +KEY=bca4dc353070f2193f9c22ff33e4c91b8472ea7287312b8bc9d9adb17d73cd82 +PT=bcb9c6c618f4eba777a3a40e11c4bfe1 +CT=46df63991a0dfc959c2ae42ffaa27fad + +I=31 +KEY=fa7bbfac2a7d0e8ca3b6c6d0c946b6b67b1ae648c43b40a3b4ea8717bfcbb512 +PT=46df63991a0dfc959c2ae42ffaa27fad +CT=fc24bbcce65c4fd68b56c9116511d65e + +I=32 +KEY=065f0460cc21415a28e00fc1ac5760e8d2aea1f969048baa6c8ce3e762073fb5 +PT=fc24bbcce65c4fd68b56c9116511d65e +CT=44a801f5b003a026d1b1f7b44f6c88fa + +I=33 +KEY=42f705957c22e17cf951f875e33be8125f00c4b740983a51464b7321127d8702 +PT=44a801f5b003a026d1b1f7b44f6c88fa +CT=8614518a60ad5f667fa864222f335d27 + +I=34 +KEY=c4e3541f1c8fbe1a86f99c57cc08b535c6694ce4ebb6804894aa86a7e2ab5c16 +PT=8614518a60ad5f667fa864222f335d27 +CT=e1c01896f45867751855e226c6d1a464 + +I=35 +KEY=25234c89e8d7d96f9eac7e710ad91151d1b9ff547acec63023d585ae3e3ae128 +PT=e1c01896f45867751855e226c6d1a464 +CT=d1eb0d7ac6a17c4ff17f5c6b876eb012 + +I=36 +KEY=f4c841f32e76a5206fd3221a8db7a14363e9ce5150563a4ad8dc674fb5799652 +PT=d1eb0d7ac6a17c4ff17f5c6b876eb012 +CT=bd2c852731d1d59311fa29045862b6a4 + +I=37 +KEY=49e4c4d41fa770b37e290b1ed5d517e73debf12254aa0e5d8af0f6e4f3afc023 +PT=bd2c852731d1d59311fa29045862b6a4 +CT=d4a83eb160da23adc0601ff35ecca326 + +I=38 +KEY=9d4cfa657f7d531ebe4914ed8b19b4c124ec037ecdbdbbc4221217772bf64613 +PT=d4a83eb160da23adc0601ff35ecca326 +CT=27ac189c5f76948036c236783a8030ce + +I=39 +KEY=bae0e2f9200bc79e888b2295b199840f85fc651c726ff218c059cd318a95ad54 +PT=27ac189c5f76948036c236783a8030ce +CT=ec8cfdfa2ff0db1ee7e87dd84ba08803 + +I=40 +KEY=566c1f030ffb1c806f635f4dfa390c0c87239bfa76a1a4c563357f50445d423a +PT=ec8cfdfa2ff0db1ee7e87dd84ba08803 +CT=8c7b8e6764278ed996a873b38620bd16 + +I=41 +KEY=da1791646bdc9259f9cb2cfe7c19b11a6b8a922bd723108bad10cf9508b92e40 +PT=8c7b8e6764278ed996a873b38620bd16 +CT=ec146b292b44732228514735a8b481a7 + +I=42 +KEY=3603fa4d4098e17bd19a6bcbd4ad30bd19bb4999d7d4d13df31b9e017b56bb90 +PT=ec146b292b44732228514735a8b481a7 +CT=4179a2c907c25aaa2a084a194d1cc0ad + +I=43 +KEY=777a5884475abbd1fb9221d299b1f01023ae593c56aa8cda6625df3b5c7139dc +PT=4179a2c907c25aaa2a084a194d1cc0ad +CT=f4ae27028f8ccb55593ec7811ed29d53 + +I=44 +KEY=83d47f86c8d67084a2ace65387636d43395dedabccced117e0d272f238118342 +PT=f4ae27028f8ccb55593ec7811ed29d53 +CT=f1d37aeed0a230d9b48b872220907d25 + +I=45 +KEY=720705681874405d16276171a7f31066136d0180049f67b38c38a7242ca4dabf +PT=f1d37aeed0a230d9b48b872220907d25 +CT=658bbe14eb6776ca80e3b6a44f6fc319 + +I=46 +KEY=178cbb7cf313369796c4d7d5e89cd37f710954db477cf53114131f1469323472 +PT=658bbe14eb6776ca80e3b6a44f6fc319 +CT=ffea34c183609a622200942b5f5ea44d + +I=47 +KEY=e8668fbd7073acf5b4c443feb7c2773252774a4eca70caef56195574b126d60e +PT=ffea34c183609a622200942b5f5ea44d +CT=d36623dbaae8142d8d6b695cd94162c6 + +I=48 +KEY=3b00ac66da9bb8d839af2aa26e8315f41c3e9318614320e69e328e6fb41cd8a4 +PT=d36623dbaae8142d8d6b695cd94162c6 +CT=28861c82c1454130224a3b99ae3b12c2 + +I=49 +KEY=1386b0e41bdef9e81be5113bc0b80736b10a0468627fadf9661582114e00c6ef +PT=28861c82c1454130224a3b99ae3b12c2 +CT=7198db98b00fa090fcdd6deee193177c + +I=50 +KEY=621e6b7cabd15978e7387cd5212b104a93004a543383ba90fde55bde17e42c57 +PT=7198db98b00fa090fcdd6deee193177c +CT=3ee41f4b2e79b3b84c917c96dca4a3b5 + +I=51 +KEY=5cfa743785a8eac0aba90043fd8fb3ff4bccb4173d9f87a8a0e46d26d597e9c9 +PT=3ee41f4b2e79b3b84c917c96dca4a3b5 +CT=73a0c6bd9c266db25444cbcad1b12bf2 + +I=52 +KEY=2f5ab28a198e8772ffedcb892c3e980d2ca9432c886a6acb3238d2a1babe7fdd +PT=73a0c6bd9c266db25444cbcad1b12bf2 +CT=e2f033def6691528f14f0b07ef5a706c + +I=53 +KEY=cdaa8154efe7925a0ea2c08ec364e8615a878847d9f12576edb3cc8f99986b4a +PT=e2f033def6691528f14f0b07ef5a706c +CT=75812d9f11fbc711ba9a33506e2babd3 + +I=54 +KEY=b82baccbfe1c554bb438f3dead4f43b2e19c9f89103cd932a318b42c8e217a71 +PT=75812d9f11fbc711ba9a33506e2babd3 +CT=83c201cc3639bcac531778027b941994 + +I=55 +KEY=3be9ad07c825e9e7e72f8bdcd6db5a262e5ddb8e093991db4c91a0d0630e9644 +PT=83c201cc3639bcac531778027b941994 +CT=0ef6f3395bace938dd227d354c3a006d + +I=56 +KEY=351f5e3e938900df3a0df6e99ae15a4bdb018d541edb4762fe6cf3f0c5f3f529 +PT=0ef6f3395bace938dd227d354c3a006d +CT=f91c0685c34f32e50f37b7d124afbca0 + +I=57 +KEY=cc0358bb50c6323a353a4138be4ee6eb27ce31ad039c28fb3b42d0a8ddf48803 +PT=f91c0685c34f32e50f37b7d124afbca0 +CT=0f472d28863c373c1060ae027720df9a + +I=58 +KEY=c3447593d6fa0506255aef3ac96e3971569ee072bf35230230ec3f37f64e7f44 +PT=0f472d28863c373c1060ae027720df9a +CT=551fca2f3b04297585e9d0a87c1e37e6 + +I=59 +KEY=965bbfbcedfe2c73a0b33f92b5700e97eb085aa1bab6ad89dbe4ad2f76650fcb +PT=551fca2f3b04297585e9d0a87c1e37e6 +CT=78d8dc4d5e1ef49a3b2b96c4f17b1481 + +I=60 +KEY=ee8363f1b3e0d8e99b98a956440b1a160e3bc66e129bb34c3f3e0070a2902d18 +PT=78d8dc4d5e1ef49a3b2b96c4f17b1481 +CT=617282d4f4d1e9d4fff50890a7bf9478 + +I=61 +KEY=8ff1e1254731313d646da1c6e3b48e6ec1afe43d0d46c3881445574b641d4aed +PT=617282d4f4d1e9d4fff50890a7bf9478 +CT=20ff429a414cda5fb20dd3cd3de96747 + +I=62 +KEY=af0ea3bf067deb62d660720bde5de929737f15d87939d521e89cf080edbf49dd +PT=20ff429a414cda5fb20dd3cd3de96747 +CT=cda11f42b83eb30db4e7705dcb5810b0 + +I=63 +KEY=62afbcfdbe43586f628702561505f999116fa4fc270acc0e3e729622d9645c27 +PT=cda11f42b83eb30db4e7705dcb5810b0 +CT=c8238b0506044496845a485198f32800 + +I=64 +KEY=aa8c37f8b8471cf9e6dd4a078df6d199cadada637f5fd0460a202c0f5ea8848c +PT=c8238b0506044496845a485198f32800 +CT=7ad4fe9e53b430046e5827ac06a240b1 + +I=65 +KEY=d058c966ebf32cfd88856dab8b549128a68e3e3e338c5000d83db88f26e575a3 +PT=7ad4fe9e53b430046e5827ac06a240b1 +CT=2314986d8483910ccd19b7a261142315 + +I=66 +KEY=f34c510b6f70bdf1459cda09ea40b23d717ac553ee8071c18c94ba43dcfda83c +PT=2314986d8483910ccd19b7a261142315 +CT=8a8e83be9bcd532dc6afe6d2a5cafce0 + +I=67 +KEY=79c2d2b5f4bdeedc83333cdb4f8a4eddae4ad17ce07bfae38ad1b899cb0a68e3 +PT=8a8e83be9bcd532dc6afe6d2a5cafce0 +CT=58f884db2fc03ead07073c6d294df043 + +I=68 +KEY=213a566edb7dd071843400b666c7be9e0e3b827e6b80c7d7f658648e04cb8ce9 +PT=58f884db2fc03ead07073c6d294df043 +CT=ea3e8b93eb09ff4b073283a1c5868f8b + +I=69 +KEY=cb04ddfd30742f3a83068317a3413115518e14c8cbbca84bf26644451c821f30 +PT=ea3e8b93eb09ff4b073283a1c5868f8b +CT=182751f122f9ade6689bca4cc743ff01 + +I=70 +KEY=d3238c0c128d82dceb9d495b6402ce14e7aa1f4d0f5b42476036cfa3f0272cd0 +PT=182751f122f9ade6689bca4cc743ff01 +CT=6a863fadf4d32b7900e3917d017a0bba + +I=71 +KEY=b9a5b3a1e65ea9a5eb7ed8266578c5ae5f64669c7febcfc20f2aac6b9279a550 +PT=6a863fadf4d32b7900e3917d017a0bba +CT=ceee21603dbbbf98c3a18fef9f9c05ad + +I=72 +KEY=774b92c1dbe5163d28df57c9fae4c003c0917a103844bece714fc1a2b0e192c5 +PT=ceee21603dbbbf98c3a18fef9f9c05ad +CT=72bf550c8afa8051d6645c558229793f + +I=73 +KEY=05f4c7cd511f966cfebb0b9c78cdb93c36a967c03817dfa78fa8d340ed97ccb5 +PT=72bf550c8afa8051d6645c558229793f +CT=00426f8a0d76bab4d8f986b812461b6f + +I=74 +KEY=05b6a8475c692cd826428d246a8ba2533fab2a5bd18a8f65038ab159da3de998 +PT=00426f8a0d76bab4d8f986b812461b6f +CT=5857895b2e275c4c21aa0f08b6f0847b + +I=75 +KEY=5de1211c724e709407e8822cdc7b26285be6574eea8e82ceb377c0020cc8e18e +PT=5857895b2e275c4c21aa0f08b6f0847b +CT=119d43336431c86c6d60dd65a5321040 + +I=76 +KEY=4c7c622f167fb8f86a885f497949366878d7d3a45c12e8232114900b83b5c9b3 +PT=119d43336431c86c6d60dd65a5321040 +CT=4d4cccac8f1ad0d9251f6b0c5810c746 + +I=77 +KEY=0130ae83996568214f9734452159f12e2de3430be25b77bdb91f7e0ba73592d7 +PT=4d4cccac8f1ad0d9251f6b0c5810c746 +CT=ae4d9d075b0bced19612be781224aa61 + +I=78 +KEY=af7d3384c26ea6f0d9858a3d337d5b4f718603b5c5231cb183bc1db054710613 +PT=ae4d9d075b0bced19612be781224aa61 +CT=8a2f017888eec9892074d5d2149eb7eb + +I=79 +KEY=255232fc4a806f79f9f15fef27e3eca4d1184edd7c7ec386b43801239313ff81 +PT=8a2f017888eec9892074d5d2149eb7eb +CT=79fa4e37a35283c043f5fd94ed164fd5 + +I=80 +KEY=5ca87ccbe9d2ecb9ba04a27bcaf5a371a89ae67e2d47de868f1351b12f9d42bd +PT=79fa4e37a35283c043f5fd94ed164fd5 +CT=4276afd3caef8c7f66808575f89049f7 + +I=81 +KEY=1eded318233d60c6dc84270e3265ea864455def03ee994257ed7a49c64cea8c0 +PT=4276afd3caef8c7f66808575f89049f7 +CT=0bd19c327ac30fbfddd617b008bb3a95 + +I=82 +KEY=150f4f2a59fe6f79015230be3aded0137e62a5bba2d205e78ab7fd712b0c359c +PT=0bd19c327ac30fbfddd617b008bb3a95 +CT=8ef3147782c24cca466cc3dcc11f8794 + +I=83 +KEY=9bfc5b5ddb3c23b3473ef362fbc157876b5fb7e4f7aa7674dddbf80a4b446315 +PT=8ef3147782c24cca466cc3dcc11f8794 +CT=ed589a41ba09e9be158c19fdc9dd8a4e + +I=84 +KEY=76a4c11c6135ca0d52b2ea9f321cddc9cfe2ce662a534e949e7f6ad4efcfb113 +PT=ed589a41ba09e9be158c19fdc9dd8a4e +CT=8edee0f1736e3fc0bdbec7964a95ced0 + +I=85 +KEY=f87a21ed125bf5cdef0c2d0978891319315566575ef73adb179151cb52ee3a0a +PT=8edee0f1736e3fc0bdbec7964a95ced0 +CT=3214228bec5aa4abe5181db645018e70 + +I=86 +KEY=ca6e0366fe0151660a1430bf3d889d69f3e071a56871db60e0df22fbb8d94457 +PT=3214228bec5aa4abe5181db645018e70 +CT=2b26424d04f1a75b439e4a5a23956478 + +I=87 +KEY=e148412bfaf0f63d498a7ae51e1df9117c6953caef557f2ab827f4ea2d66b722 +PT=2b26424d04f1a75b439e4a5a23956478 +CT=2be6bcfb07f81876079ecbda3a3f4890 + +I=88 +KEY=caaefdd0fd08ee4b4e14b13f2422b18110bb98781b030fccdbb9799b325eed9e +PT=2be6bcfb07f81876079ecbda3a3f4890 +CT=f3b1a2a7b5ac9a1ef9e26a6fdf0ccb32 + +I=89 +KEY=391f5f7748a47455b7f6db50fb2e7ab32358ba12feefc901d0cc1568f5cca032 +PT=f3b1a2a7b5ac9a1ef9e26a6fdf0ccb32 +CT=bdcd719022de99b1ea3f31eb62feb828 + +I=90 +KEY=84d22ee76a7aede45dc9eabb99d0c29bef052ba16de9a3dfbe7f914d5eb63dee +PT=bdcd719022de99b1ea3f31eb62feb828 +CT=5c4d8b09ade9f2c9f1680f15f26238ae + +I=91 +KEY=d89fa5eec7931f2daca1e5ae6bb2fa35536e42a8c771a42a26afe34d92b7ccd8 +PT=5c4d8b09ade9f2c9f1680f15f26238ae +CT=8fc562748df56011248424df43129d6d + +I=92 +KEY=575ac79a4a667f3c8825c17128a06758f7c3632cafb503f59c04cf668a73c902 +PT=8fc562748df56011248424df43129d6d +CT=737da09e6589b44fac83c49be5c0f3ba + +I=93 +KEY=242767042fefcb7324a605eacd6094e2d8455b2af7a3c29d86ecd2440ae4b7ce +PT=737da09e6589b44fac83c49be5c0f3ba +CT=d34632c3fc090bb7b1bec2ed127723fa + +I=94 +KEY=f76155c7d3e6c0c49518c707df17b7184a2606b484287b41210e41befa23d138 +PT=d34632c3fc090bb7b1bec2ed127723fa +CT=50605c5106d4376c1a746cc949185383 + +I=95 +KEY=a7010996d532f7a88f6cabce960fe49baf59769d229011b88cf4afb49970ac31 +PT=50605c5106d4376c1a746cc949185383 +CT=f0a24adeba5cd6f64146bbcc8f81e6a3 + +I=96 +KEY=57a343486f6e215ece2a1002198e0238adc966659090a09439ef4951a1f41beb +PT=f0a24adeba5cd6f64146bbcc8f81e6a3 +CT=cfe126a13a5f58b18cf9cd8e32abcfe6 + +I=97 +KEY=984265e9553179ef42d3dd8c2b25cddef8af5aa0e111b744f867e0bb9c7d05ca +PT=cfe126a13a5f58b18cf9cd8e32abcfe6 +CT=bda0dfbca714e71ab5b3cc37b1cdedb2 + +I=98 +KEY=25e2ba55f2259ef5f76011bb9ae8206c186936ce3daaa6a3ced23fc51f35f8b4 +PT=bda0dfbca714e71ab5b3cc37b1cdedb2 +CT=a28e8947a32c20a570fb5018f3159713 + +I=99 +KEY=876c33125109be50879b41a369fdb77f1c939d8fd3933a22e07a5a6b9a971e0b +PT=a28e8947a32c20a570fb5018f3159713 +CT=9dd2b23ef7c31d191799f9fd272a3286 + +I=100 +KEY=1abe812ca6caa3499002b85e4ed785f96126d7d55b24d76d37d687bc65a89eee +PT=9dd2b23ef7c31d191799f9fd272a3286 +CT=33f2f90388c1c3734cbb874b835fddf6 + +I=101 +KEY=294c782f2e0b603adcb93f15cd88580fd855c35e61eab3dd351eb3f3aac19138 +PT=33f2f90388c1c3734cbb874b835fddf6 +CT=22ae75800ae2ca23b93a774045bc8ccd + +I=102 +KEY=0be20daf24e9aa19658348558834d4c27a4747283a3914cefbfbd204a8aea59e +PT=22ae75800ae2ca23b93a774045bc8ccd +CT=07129162ce3b5e32d8c7c529f44da327 + +I=103 +KEY=0cf09ccdead2f42bbd448d7c7c7977e5e55d1bf881855a704d77ff354659c06c +PT=07129162ce3b5e32d8c7c529f44da327 +CT=a90afc5f53e49ab2130574aa79667504 + +I=104 +KEY=a5fa6092b9366e99ae41f9d6051f02e15568cced4a84541dcfdd49883eddc5fb +PT=a90afc5f53e49ab2130574aa79667504 +CT=06f86329d92bd99a08fa737884142be3 + +I=105 +KEY=a30203bb601db703a6bb8aae810b2902832b47aa941e6f9dcdf4204e8ede8dd8 +PT=06f86329d92bd99a08fa737884142be3 +CT=5bba9d55d045c63ca25aa1758bccf13d + +I=106 +KEY=f8b89eeeb058713f04e12bdb0ac7d83fd5830ed773b94b27f6985b897a47c82e +PT=5bba9d55d045c63ca25aa1758bccf13d +CT=34a91d6d5b91c842549de629656a4a4a + +I=107 +KEY=cc118383ebc9b97d507ccdf26fad9275d9f42dde1f44a8aa875a466170ce7121 +PT=34a91d6d5b91c842549de629656a4a4a +CT=a934d7635d04e43bb7ba8526aedcf617 + +I=108 +KEY=652554e0b6cd5d46e7c648d4c171646233007726a3972afff4cbc5a78fc7fa13 +PT=a934d7635d04e43bb7ba8526aedcf617 +CT=c0b67afe70a6dda933caeeee888e4eb5 + +I=109 +KEY=a5932e1ec66b80efd40ca63a49ff2ad7387a85c2ab747372563b5bb39e272fa3 +PT=c0b67afe70a6dda933caeeee888e4eb5 +CT=c57d547e6e34752a6ee9a51fb6da0f02 + +I=110 +KEY=60ee7a60a85ff5c5bae50325ff2525d56b8f9e9d9dbea9b24f96772b00e1722a +PT=c57d547e6e34752a6ee9a51fb6da0f02 +CT=87da985350c63f98c01548a2e067da67 + +I=111 +KEY=e734e233f899ca5d7af04b871f42ffb2eeb6b771a7c9e1a3f7ad4b3218ba680c +PT=87da985350c63f98c01548a2e067da67 +CT=841ca91b571fcd140cf1441c748c0c15 + +I=112 +KEY=63284b28af86074976010f9b6bcef3a748b0f1684eab559e465fa8bb8cfb1aac +PT=841ca91b571fcd140cf1441c748c0c15 +CT=f3e8b4842c01119d755caffc6edfc367 + +I=113 +KEY=90c0ffac838716d4035da067051130c0428319e05d8a7bae1daee89447ba0b7b +PT=f3e8b4842c01119d755caffc6edfc367 +CT=6096b877e8d6e8c216559b70b9a7a9c6 + +I=114 +KEY=f05647db6b51fe1615083b17bcb6990608f1a72089615d165b31cafd51496f9f +PT=6096b877e8d6e8c216559b70b9a7a9c6 +CT=83f0f73f91e55bfb3b44e7dfbf1d9e2e + +I=115 +KEY=73a6b0e4fab4a5ed2e4cdcc803ab07281bab82b4ef5732e2d732830e57524fb8 +PT=83f0f73f91e55bfb3b44e7dfbf1d9e2e +CT=03be9a03438357057163e893c40f2ae5 + +I=116 +KEY=70182ae7b937f2e85f2f345bc7a42dcdcec7242c2b60b603a21326476aaf2529 +PT=03be9a03438357057163e893c40f2ae5 +CT=de851c1ea68bacbed283c78151587542 + +I=117 +KEY=ae9d36f91fbc5e568dacf3da96fc588f6f1a1fa72ba20e311b7d31c117107871 +PT=de851c1ea68bacbed283c78151587542 +CT=d7d5030d4cda8176c29d5a24a6d85cca + +I=118 +KEY=794835f45366df204f31a9fe302404458def188f5f18f5ef86d7ce0448a6dc9e +PT=d7d5030d4cda8176c29d5a24a6d85cca +CT=34031201576d10bf597fe46a3f108aed + +I=119 +KEY=4d4b27f5040bcf9f164e4d940f348ea800d140d90342af3d9e307753f1761bf5 +PT=34031201576d10bf597fe46a3f108aed +CT=24cdfb0b3841b6dab850e7804f8c32a6 + +I=120 +KEY=6986dcfe3c4a7945ae1eaa1440b8bc0ed912a43883de7ae866d700fd0510a85f +PT=24cdfb0b3841b6dab850e7804f8c32a6 +CT=d1353948f17b8e23240e82bd2a927b3d + +I=121 +KEY=b8b3e5b6cd31f7668a1028a96a2ac733aec0c3deb1ca6c42359f481a090215d6 +PT=d1353948f17b8e23240e82bd2a927b3d +CT=7ce072484d12a96d12a3b52723c5a3ba + +I=122 +KEY=c45397fe80235e0b98b39d8e49ef6489c33936cf7cd08cccacc64d7dfc5e4053 +PT=7ce072484d12a96d12a3b52723c5a3ba +CT=5ad92969694e2fba016fdd5d63672be9 + +I=123 +KEY=9e8abe97e96d71b199dc40d32a884f60059c028d866a1f35f84065ab768407bb +PT=5ad92969694e2fba016fdd5d63672be9 +CT=dfbdbb0368a030c060c5c6471fd78ac7 + +I=124 +KEY=4137059481cd4171f9198694355fc5a704aba5fe5333e3b555cf1f9f3cb811d3 +PT=dfbdbb0368a030c060c5c6471fd78ac7 +CT=541f1707383dc9639d213ac7cc5786c1 + +I=125 +KEY=15281293b9f088126438bc53f9084366686c8b19745239b57508411935b901c0 +PT=541f1707383dc9639d213ac7cc5786c1 +CT=8f24a894dd8ed70d9632ada1555dde2f + +I=126 +KEY=9a0cba07647e5f1ff20a11f2ac559d49cd60763f90fc22c228bb0d00893e1d17 +PT=8f24a894dd8ed70d9632ada1555dde2f +CT=b571f305443af103d39431c3ecb9d872 + +I=127 +KEY=2f7d49022044ae1c219e203140ec453b69f98aa1aaa0e8fe76a4dc5280b6dc35 +PT=b571f305443af103d39431c3ecb9d872 +CT=14fab8c9ce671f9ff25e8369a029cbee + +I=128 +KEY=3b87f1cbee23b183d3c0a358e0c58ed51dd550c796d3c63e5fd82aaa39592bc2 +PT=14fab8c9ce671f9ff25e8369a029cbee +CT=ddbca0aada112598d4145c451bf71a4f + +I=129 +KEY=e63b51613432941b07d4ff1dfb32949ac2caa04cd85503e5de9a9bf8b88c181f +PT=ddbca0aada112598d4145c451bf71a4f +CT=f0f06dfe81b0eb67811b29f4557e824a + +I=130 +KEY=16cb3c9fb5827f7c86cfd6e9ae4c16d0392f7d171d7f0281154d62bb4c25b75d +PT=f0f06dfe81b0eb67811b29f4557e824a +CT=945c1ac88a42614f0950884525b62a38 + +I=131 +KEY=829726573fc01e338f9f5eac8bfa3ce8809b942f24a69c5feda0193a317e4fee +PT=945c1ac88a42614f0950884525b62a38 +CT=40acbf52df0441b9af1fc6e687bdc992 + +I=132 +KEY=c23b9905e0c45f8a2080984a0c47f57ae638c4c37a333986fb68bad2c567a5b8 +PT=40acbf52df0441b9af1fc6e687bdc992 +CT=d63cfb1457e8aa78d90c0641f6d40243 + +I=133 +KEY=14076211b72cf5f2f98c9e0bfa93f739d02eb3d1e70ec7e26467ef55c2ddf371 +PT=d63cfb1457e8aa78d90c0641f6d40243 +CT=f99c12a6cda822d7bff1df9665ee65ff + +I=134 +KEY=ed9b70b77a84d725467d419d9f7d92c67143277a8c0eb5bfe34f735fc0a54ef6 +PT=f99c12a6cda822d7bff1df9665ee65ff +CT=519be003a2dc78ee834482991d985bdd + +I=135 +KEY=bc0090b4d858afcbc539c30482e5c91b1a879ae9bfc0303997a279a16bef5f2d +PT=519be003a2dc78ee834482991d985bdd +CT=052c6df1473bc91bb5740229525629ae + +I=136 +KEY=b92cfd459f6366d0704dc12dd0b3e0b57bf23beed04c7d94da1b92a570c5b744 +PT=052c6df1473bc91bb5740229525629ae +CT=08b21250fca78faef326bdac53ce7578 + +I=137 +KEY=b19eef1563c4e97e836b7c81837d95cd9a57e1ae2dce99d3134a6b3f20698e91 +PT=08b21250fca78faef326bdac53ce7578 +CT=700fe4b37a792849634817cb62556973 + +I=138 +KEY=c1910ba619bdc137e0236b4ae128fcbe4c5e00cad5f9ff1be42c0ffd0583dad4 +PT=700fe4b37a792849634817cb62556973 +CT=4fba40be05e789574a2d266a57bb859e + +I=139 +KEY=8e2b4b181c5a4860aa0e4d20b6937920a4f9d79e06b1c308ea0c81137b951674 +PT=4fba40be05e789574a2d266a57bb859e +CT=b9e64ab80d475bb26a553daad4c782af + +I=140 +KEY=37cd01a0111d13d2c05b708a6254fb8fba610b0edd91bd0580932b308afc7bcc +PT=b9e64ab80d475bb26a553daad4c782af +CT=43245c72f5c79f1925f0bd36948d2402 + +I=141 +KEY=74e95dd2e4da8ccbe5abcdbcf6d9df8d15ea38e59416af70a5161ec424e4c10c +PT=43245c72f5c79f1925f0bd36948d2402 +CT=cd9167cfbc6e3665b748ada60950251b + +I=142 +KEY=b9783a1d58b4baae52e3601aff89fa967e583c92c8b0a796b7e516775abf41db +PT=cd9167cfbc6e3665b748ada60950251b +CT=0f73880a985ec84192fa3f146d4bbabf + +I=143 +KEY=b60bb217c0ea72efc0195f0e92c240296851f6b5fd314ff09fca4aab1237c0ef +PT=0f73880a985ec84192fa3f146d4bbabf +CT=5f33b905443e840b71b009831b869348 + +I=144 +KEY=e9380b1284d4f6e4b1a9568d8944d3618149c647391f59e619f7f9d87e1fa1c2 +PT=5f33b905443e840b71b009831b869348 +CT=0d90aba5360be05b6dae15ede97ca668 + +I=145 +KEY=e4a8a0b7b2df16bfdc07436060387509f130ab1f75c95b9e602c091dae1d0aec +PT=0d90aba5360be05b6dae15ede97ca668 +CT=b8ec490b182f56dfb95b21d22af661cc + +I=146 +KEY=5c44e9bcaaf04060655c62b24ace14c5435a8c6046a47a36576f01848511b1c1 +PT=b8ec490b182f56dfb95b21d22af661cc +CT=6f7807b7140f14794cfdf030feaa21c7 + +I=147 +KEY=333cee0bbeff541929a19282b4643502e33c81ebf50f696fff2630d7f581d039 +PT=6f7807b7140f14794cfdf030feaa21c7 +CT=a847c7f9a9300d34bce60c20086a07dc + +I=148 +KEY=9b7b29f217cf592d95479ea2bc0e32de3539969ca009f7d4684565b61dc37c18 +PT=a847c7f9a9300d34bce60c20086a07dc +CT=193d03b7f1260fed072a03a916d3187a + +I=149 +KEY=82462a45e6e956c0926d9d0baadd2aa4fb8ab61c29405843a7fba2882af08c78 +PT=193d03b7f1260fed072a03a916d3187a +CT=e54c5c1949626499fdffdfe8cb956e50 + +I=150 +KEY=670a765caf8b32596f9242e3614844f4b6695c34fe595a285d23e076250c88eb +PT=e54c5c1949626499fdffdfe8cb956e50 +CT=de6b840e8f6f68cf1976c5e82f6b99b3 + +I=151 +KEY=b961f25220e45a9676e4870b4e23dd472c90ed731871185fe3d113c4ea949762 +PT=de6b840e8f6f68cf1976c5e82f6b99b3 +CT=8b4e1bcda1f96309319f908ac063ebc1 + +I=152 +KEY=322fe99f811d399f477b17818e4036861c0143a89b37f8351eaf8f23b6514d95 +PT=8b4e1bcda1f96309319f908ac063ebc1 +CT=243a37cf74b006d29b5683b236ae9a9f + +I=153 +KEY=1615de50f5ad3f4ddc2d9433b8eeac19e0880fb4aff1507cf0c818562ad7259f +PT=243a37cf74b006d29b5683b236ae9a9f +CT=2bda66f3c3854a9c83e0200e2805df95 + +I=154 +KEY=3dcfb8a3362875d15fcdb43d90eb738cd9c14be03429d98ed74a0db5a9063d7d +PT=2bda66f3c3854a9c83e0200e2805df95 +CT=aca1a3ba92def11a704e96ada0aa4edb + +I=155 +KEY=916e1b19a4f684cb2f83229030413d575c3005120f9cd4e37cc89b721e732904 +PT=aca1a3ba92def11a704e96ada0aa4edb +CT=450f9d7f3a2ee035b98088a75bab6684 + +I=156 +KEY=d46186669ed864fe9603aa376bea5bd3d88ce3502b4352ea33f8f665f2b89884 +PT=450f9d7f3a2ee035b98088a75bab6684 +CT=5994de5635ea301bbe62a6ee413c44aa + +I=157 +KEY=8df55830ab3254e528610cd92ad61f793da3a5b0bf1e82adf2fcc0be5920afda +PT=5994de5635ea301bbe62a6ee413c44aa +CT=b1502f1a1905c51e41ca48e624770925 + +I=158 +KEY=3ca5772ab23791fb69ab443f0ea1165cfe84a26efda98386e0cfe5ab3c294b9a +PT=b1502f1a1905c51e41ca48e624770925 +CT=db4635bd3345d1d504aa605c0663a0d6 + +I=159 +KEY=e7e342978172402e6d01246308c2b68adb129c9d58a83a31e8c9b861b0e93a95 +PT=db4635bd3345d1d504aa605c0663a0d6 +CT=575ac8eb5e4d2cce3c3ff42aa7dfd819 + +I=160 +KEY=b0b98a7cdf3f6ce0513ed049af1d6e9315545340c2ddb0a56e36f15bf2b7c6be +PT=575ac8eb5e4d2cce3c3ff42aa7dfd819 +CT=d95774b0a3e7417d78c84935c99f14d0 + +I=161 +KEY=69eefecc7cd82d9d29f6997c66827a43437e85d20024729acf17c6399e2e67f6 +PT=d95774b0a3e7417d78c84935c99f14d0 +CT=2b019830992108862b85f7b3a5f996f5 + +I=162 +KEY=42ef66fce5f9251b02736ecfc37becb621270ce552ccd08cb105c17ea7263fc0 +PT=2b019830992108862b85f7b3a5f996f5 +CT=b755ff6b68bfe8b334f42796f619bcf2 + +I=163 +KEY=f5ba99978d46cda83687495935625044f2332d635db6766b961b5ec0f450827e +PT=b755ff6b68bfe8b334f42796f619bcf2 +CT=b1e6d5cd91086d908c9bd4a2d58bedb4 + +I=164 +KEY=445c4c5a1c4ea038ba1c9dfbe0e9bdf031808ca1954badbfa347961abfb630b9 +PT=b1e6d5cd91086d908c9bd4a2d58bedb4 +CT=626d9a6e13b1d72a0dc45e505f36b478 + +I=165 +KEY=2631d6340fff7712b7d8c3abbfdf0988ebff0330f385566db29c4322e5801a52 +PT=626d9a6e13b1d72a0dc45e505f36b478 +CT=7a795e9caa0917dd78bcff2447172850 + +I=166 +KEY=5c4888a8a5f660cfcf643c8ff8c821d8715f807b5269c078875ec4ddac117dfd +PT=7a795e9caa0917dd78bcff2447172850 +CT=e44d512d94bff3834303102bac25a351 + +I=167 +KEY=b805d9853149934c8c672ca454ed828992516228c924dc941ba1c4e153ec5fd3 +PT=e44d512d94bff3834303102bac25a351 +CT=0eb99d4d8f12a593d25b28450a6deefe + +I=168 +KEY=b6bc44c8be5b36df5e3c04e15e806c77bfde7fce545b3e061314a59f39a5022d +PT=0eb99d4d8f12a593d25b28450a6deefe +CT=3c8cd74e8a90138bb240155de1fc21b3 + +I=169 +KEY=8a30938634cb2554ec7c11bcbf7c4dc4623245d0711994b5e410679d866788a4 +PT=3c8cd74e8a90138bb240155de1fc21b3 +CT=23ce64fc19af9fee3efd3fb691398f60 + +I=170 +KEY=a9fef77a2d64babad2812e0a2e45c2a4deba0102dbc75e686a89f0a33aa2f4a4 +PT=23ce64fc19af9fee3efd3fb691398f60 +CT=271059591ff6f87dd2faee6b31937eba + +I=171 +KEY=8eeeae23329242c7007bc0611fd6bc1eecb4eaf146c0b696c45f3b1d64a8a69a +PT=271059591ff6f87dd2faee6b31937eba +CT=42603531793714e8f8cbfd2497ad846f + +I=172 +KEY=cc8e9b124ba5562ff8b03d45887b38716d32dab2cbe999cfe063a98530bf7b4f +PT=42603531793714e8f8cbfd2497ad846f +CT=283a9a04464c07926b40e9c5c358ef76 + +I=173 +KEY=e4b401160de951bd93f0d4804b23d707ff5be1cea6e033c0841f4346a62af0b9 +PT=283a9a04464c07926b40e9c5c358ef76 +CT=e4c6a4aee8fb0c615f41c379fa59a483 + +I=174 +KEY=0072a5b8e5125ddcccb117f9b17a73849c4ef9e81dae0d7899e9022876976e66 +PT=e4c6a4aee8fb0c615f41c379fa59a483 +CT=e7605934d021f0a004512a2c760a80a2 + +I=175 +KEY=e712fc8c3533ad7cc8e03dd5c770f3266189268a81a2ea4a8e760001b0d18a8e +PT=e7605934d021f0a004512a2c760a80a2 +CT=7e2670fa327b4c247d11889ce82e9700 + +I=176 +KEY=99348c760748e158b5f1b5492f5e642619de05d454cd0da858631dc854a3110c +PT=7e2670fa327b4c247d11889ce82e9700 +CT=bae8ddb214410c00b3c7be497b4562e1 + +I=177 +KEY=23dc51c41309ed5806360b00541b06c7dc6b628209714e0416304fd12a386942 +PT=bae8ddb214410c00b3c7be497b4562e1 +CT=13faf0ea2d565a24d2b687d4d9312547 + +I=178 +KEY=3026a12e3e5fb77cd4808cd48d2a2380f86fb0909e3274e3a0d4276aa846cb55 +PT=13faf0ea2d565a24d2b687d4d9312547 +CT=7784540933d0702814528bed11246020 + +I=179 +KEY=47a2f5270d8fc754c0d207399c0e43a08ee475af1371e1d253c635330b1f81af +PT=7784540933d0702814528bed11246020 +CT=ecb7c1f6132ac570e8b23358c55f1232 + +I=180 +KEY=ab1534d11ea502242860346159515192226b5287072f706c44ba0b006dfab082 +PT=ecb7c1f6132ac570e8b23358c55f1232 +CT=8e8d97960ff2ba421711f702a265455c + +I=181 +KEY=2598a3471157b8663f71c363fb3414ce003b4ebe62fce8310d2a7d4387e65230 +PT=8e8d97960ff2ba421711f702a265455c +CT=6dd0b744a33c22de7e929d06c20bdc5e + +I=182 +KEY=48481403b26b9ab841e35e65393fc890b2f1991300a1f6e42e592d7cfca107f3 +PT=6dd0b744a33c22de7e929d06c20bdc5e +CT=51bf01bce5cacc5e1c9d13b3cd85bdd9 + +I=183 +KEY=19f715bf57a156e65d7e4dd6f4ba7549f880f942e4f803f1a8963efd011e4060 +PT=51bf01bce5cacc5e1c9d13b3cd85bdd9 +CT=632701100bb70369d9c6fd1373ea5f6f + +I=184 +KEY=7ad014af5c16558f84b8b0c587502a266a1d5191b6d9f4e9001ed1a019059e26 +PT=632701100bb70369d9c6fd1373ea5f6f +CT=02f5b8ef99d36563c137d630251f3182 + +I=185 +KEY=7825ac40c5c530ec458f66f5a24f1ba4b52ae624abe43d9aea48f0541e484c1e +PT=02f5b8ef99d36563c137d630251f3182 +CT=c318a0a909ca1bc14ba7412d3ab5e143 + +I=186 +KEY=bb3d0ce9cc0f2b2d0e2827d898fafae7168b4a59ccc05682e79880072ec7c5f9 +PT=c318a0a909ca1bc14ba7412d3ab5e143 +CT=300743ea56b544183f1b52ceac8b1271 + +I=187 +KEY=8b3a4f039aba6f35313375163471e89661f2b5af85678f3570a1ec7314ade60d +PT=300743ea56b544183f1b52ceac8b1271 +CT=a5eaac40b778f51f0ddd60c07e90b8cd + +I=188 +KEY=2ed0e3432dc29a2a3cee15d64ae1505be4a0dd7fa57eee57541f602c5a9cc818 +PT=a5eaac40b778f51f0ddd60c07e90b8cd +CT=9b7fd74688d354eca13c460d69cca546 + +I=189 +KEY=b5af3405a511cec69dd253db232df51d5eb7617e6b9a9293be666c935a9df2be +PT=9b7fd74688d354eca13c460d69cca546 +CT=4d7fd70327dba9ebd3d753a3bbe1df6b + +I=190 +KEY=f8d0e30682ca672d4e05007898cc2a7637cf2a064cb700c291bbd9e383aa37f3 +PT=4d7fd70327dba9ebd3d753a3bbe1df6b +CT=65a178e79e6a469d52bdd8e941cc7722 + +I=191 +KEY=9d719be11ca021b01cb8d891d9005d54bf5aa91e98b5f6a2aae0b9858a8a2653 +PT=65a178e79e6a469d52bdd8e941cc7722 +CT=dd0d076d20d6b82ca6eca1056487e4be + +I=192 +KEY=407c9c8c3c76999cba547994bd87b9ea66e864b49b07b3b9da75e2077849973f +PT=dd0d076d20d6b82ca6eca1056487e4be +CT=c24e21b5f8b8c00992f8249633f88b36 + +I=193 +KEY=8232bd39c4ce599528ac5d028e7f32dc52a3c34421ce1a03282e15b48255f5d6 +PT=c24e21b5f8b8c00992f8249633f88b36 +CT=1dee7658ac1f2a52dfa0b42f5c671bb1 + +I=194 +KEY=9fdccb6168d173c7f70ce92dd218296df3c72d6d6703ed14c4c1e44cf9e0adc5 +PT=1dee7658ac1f2a52dfa0b42f5c671bb1 +CT=b882df08f78b034c964c64354ffbc14e + +I=195 +KEY=275e14699f5a708b61408d189de3e82314755da8207ee49869f846a855360c88 +PT=b882df08f78b034c964c64354ffbc14e +CT=0f50b9535b633527727bfbe1d3dde8c7 + +I=196 +KEY=280ead3ac43945ac133b76f94e3e00e478990d91c149089ba2e7bae9a6bb769b +PT=0f50b9535b633527727bfbe1d3dde8c7 +CT=97ae56c1e8a1337f579a697edb0abc67 + +I=197 +KEY=bfa0fbfb2c9876d344a11f879534bc83cffa44f0dabae339d71e377ebe9ee8e4 +PT=97ae56c1e8a1337f579a697edb0abc67 +CT=c99cc7cbd4a0d7d6e59e94c672493a68 + +I=198 +KEY=763c3c30f838a105a13f8b41e77d86eb6942676fbed3a420b4f5b643d33b520f +PT=c99cc7cbd4a0d7d6e59e94c672493a68 +CT=45b59be9f480955240893c2e583c518c + +I=199 +KEY=3389a7d90cb83457e1b6b76fbf41d7675038f93a7c5e93348ad3c72d86527c1e +PT=45b59be9f480955240893c2e583c518c +CT=ccddd5ee7dc1824f6fbc358a80026913 + +I=200 +KEY=ff5472377179b6188e0a82e53f43be74eda898337372b1d35bd3a7cbdfc632dc +PT=ccddd5ee7dc1824f6fbc358a80026913 +CT=5e60cc5d8baa37d9cbcb955637274216 + +I=201 +KEY=a134be6afad381c145c117b30864fc621cfdb3cce065086ebf2c1428d0b41532 +PT=5e60cc5d8baa37d9cbcb955637274216 +CT=01759c8a23f481af248e1d6cc80edc0f + +I=202 +KEY=a04122e0d927006e614f0adfc06a206d5a9e86857dece7b78f839c27387de166 +PT=01759c8a23f481af248e1d6cc80edc0f +CT=1535407b72bd13e7dbffd61e0c7d5467 + +I=203 +KEY=b574629bab9a1389bab0dcc1cc17740ae534b85568ba0a99eaca5d9ddb1ad585 +PT=1535407b72bd13e7dbffd61e0c7d5467 +CT=d5450689d81c0a2dccc61b20f2427467 + +I=204 +KEY=60316412738619a47676c7e13e55006d7af4cfd6260116be24bd0d0f7b3cbc62 +PT=d5450689d81c0a2dccc61b20f2427467 +CT=1a18e1a95402f27474ff070b012844bd + +I=205 +KEY=7a2985bb2784ebd00289c0ea3f7d44d0cdbab05d5241044d29d029af8a66cd2b +PT=1a18e1a95402f27474ff070b012844bd +CT=41b0f3f0e56f05c68d433ae9f85ae9aa + +I=206 +KEY=3b99764bc2ebee168fcafa03c727ad7af62217aa10bb42daff3fedb2158b283e +PT=41b0f3f0e56f05c68d433ae9f85ae9aa +CT=1cd7c7f7883d2c19a7e73c24cbeafb1b + +I=207 +KEY=274eb1bc4ad6c20f282dc6270ccd56617feb1e2621dd688654a60dee82fb2033 +PT=1cd7c7f7883d2c19a7e73c24cbeafb1b +CT=3bd01d14d96444073c62e41ae83d097d + +I=208 +KEY=1c9eaca893b28608144f223de4f05f1ceb9068f4731ddc86ca9c11a1140a08f0 +PT=3bd01d14d96444073c62e41ae83d097d +CT=ce76ae2239ac37fc9da78df6a369ac91 + +I=209 +KEY=d2e8028aaa1eb1f489e8afcb4799f38d67030f7fa73547fa7857196c28c39a39 +PT=ce76ae2239ac37fc9da78df6a369ac91 +CT=1ce5e5b085418e93746cf148fef02158 + +I=210 +KEY=ce0de73a2f5f3f67fd845e83b969d2d5006d3a6a1fc9bbf909412c764122053f +PT=1ce5e5b085418e93746cf148fef02158 +CT=51fe3109c8ef2bf08f3978c80bc18148 + +I=211 +KEY=9ff3d633e7b0149772bd264bb2a8539d9fbc309a92f853fbd52b3adcad3a7833 +PT=51fe3109c8ef2bf08f3978c80bc18148 +CT=b6eced57e09a6c4778e8ec07a17f7791 + +I=212 +KEY=291f3b64072a78d00a55ca4c13d7240c0b6637a13f1646689a2ac2af5faa6f9a +PT=b6eced57e09a6c4778e8ec07a17f7791 +CT=556c753708a07755085244087b88c4f4 + +I=213 +KEY=7c734e530f8a0f8502078e44685fe0f869aa22c4e03efb05f33ef4bcabb2c394 +PT=556c753708a07755085244087b88c4f4 +CT=df77a310cd1949386a5f91e1271e4de8 + +I=214 +KEY=a304ed43c29346bd68581fa54f41ad101a5ce813a3957081a16114f09f3ad011 +PT=df77a310cd1949386a5f91e1271e4de8 +CT=33f546c1245425d5541c7ccbdf5686a4 + +I=215 +KEY=90f1ab82e6c763683c44636e90172bb4b51ea7825b84b906675d6c5b51ab1080 +PT=33f546c1245425d5541c7ccbdf5686a4 +CT=f2ca0805c876c76d0c39822f15ca110f + +I=216 +KEY=623ba3872eb1a405307de14185dd3abb31f24e1c35b9a8e8ba4cff5a5befe1f7 +PT=f2ca0805c876c76d0c39822f15ca110f +CT=6ae977ae32869e6554b027a20acb53aa + +I=217 +KEY=08d2d4291c373a6064cdc6e38f166911db63709d8488d38c2ee9a075264f0785 +PT=6ae977ae32869e6554b027a20acb53aa +CT=819c9dfc06b983c91b70a7b6dcb7cdb3 + +I=218 +KEY=894e49d51a8eb9a97fbd615553a1a4a2b82c97b47fc3049b1c918535783a2c58 +PT=819c9dfc06b983c91b70a7b6dcb7cdb3 +CT=1f5d3c6c7a3f42260c3e7f81961a75d2 + +I=219 +KEY=961375b960b1fb8f73831ed4c5bbd170346a518e6099ef3cb3e43ac31daa033f +PT=1f5d3c6c7a3f42260c3e7f81961a75d2 +CT=8856f37fc587fb38189fe11595b74e28 + +I=220 +KEY=1e4586c6a53600b76b1cffc1500c9f589f0a39680ef8a4d768dc6b708e446408 +PT=8856f37fc587fb38189fe11595b74e28 +CT=69d4072670654e5d468372aac735a8e2 + +I=221 +KEY=779181e0d5534eea2d9f8d6b973937ba15ef104e4ea016b8e14d1237dc12e182 +PT=69d4072670654e5d468372aac735a8e2 +CT=038b1b239032a0f1126389bce3305f3b + +I=222 +KEY=741a9ac34561ee1b3ffc04d7740968812165c32c7c747a036937d2db06647cca +PT=038b1b239032a0f1126389bce3305f3b +CT=f497398973dda5d758a77b14b4d88636 + +I=223 +KEY=808da34a36bc4bcc675b7fc3c0d1eeb78a3479301048570c478257f8752d6fdb +PT=f497398973dda5d758a77b14b4d88636 +CT=06f4398445ffaabe1062f697387354f4 + +I=224 +KEY=86799ace7343e17277398954f8a2ba43959796718f1f7c5502ab350b77374acb +PT=06f4398445ffaabe1062f697387354f4 +CT=2f83c40e1a5fb288657e06119e54ff5c + +I=225 +KEY=a9fa5ec0691c53fa12478f4566f6451f4d1fc1ae333ef0e9b04c5de7a11d88dd +PT=2f83c40e1a5fb288657e06119e54ff5c +CT=3895cbf19cd7651c6da4f578d4297abf + +I=226 +KEY=916f9531f5cb36e67fe37a3db2df3fa08f12dc2505e2ad68e23cd395c89d87ba +PT=3895cbf19cd7651c6da4f578d4297abf +CT=ef7cd7584de4583bbe5840c30ea695d5 + +I=227 +KEY=7e134269b82f6eddc1bb3afebc79aa750acfa06261a0fc006c14e7db4803cf34 +PT=ef7cd7584de4583bbe5840c30ea695d5 +CT=66dc16e4ab5bc2a8274ca034583c6697 + +I=228 +KEY=18cf548d1374ac75e6f79acae445cce21ca6b5979bc569097f752aa4bdd41b31 +PT=66dc16e4ab5bc2a8274ca034583c6697 +CT=fee309553e3bf9c2708ce6b8aa6bbe48 + +I=229 +KEY=e62c5dd82d4f55b7967b7c724e2e72aa2323583c4391bb6abcf6da2111e7d09f +PT=fee309553e3bf9c2708ce6b8aa6bbe48 +CT=69e8d78cc70862a8df85c8ea9dfd6605 + +I=230 +KEY=8fc48a54ea47371f49feb498d3d314af4d3bed1bf3465b68d24f5b2688cb46e1 +PT=69e8d78cc70862a8df85c8ea9dfd6605 +CT=eed08f36a9bc9bed2a6b987ba13cb6ac + +I=231 +KEY=6114056243fbacf263952ce372efa20347e8ef12aa5234b292204b2c2087ce13 +PT=eed08f36a9bc9bed2a6b987ba13cb6ac +CT=d7d4df5a881f08c75629be87999bc82a + +I=232 +KEY=b6c0da38cbe4a43535bc9264eb746a29c746e08d7aae3ee10479885f64c8ea0f +PT=d7d4df5a881f08c75629be87999bc82a +CT=addda2fca587c840d2e1f17dc7e4850e + +I=233 +KEY=1b1d78c46e636c75e75d63192c90ef27a00dd31624a32e927f13352c74e39a5b +PT=addda2fca587c840d2e1f17dc7e4850e +CT=c822ec434797e36698a020641eb58cb5 + +I=234 +KEY=d33f948729f48f137ffd437d322563928d702b20c99ce68cc2aaf7b743cca5d3 +PT=c822ec434797e36698a020641eb58cb5 +CT=c0ab22e8b883eefabfae21b876c3c8a0 + +I=235 +KEY=1394b66f917761e9c05362c544e6ab3272d3d517609f71dd622f1a3330ee470e +PT=c0ab22e8b883eefabfae21b876c3c8a0 +CT=b0ad1adbecca7d8ee4e253b86804251b + +I=236 +KEY=a339acb47dbd1c6724b1317d2ce28e294445956e7197d6e866e375cca688bcae +PT=b0ad1adbecca7d8ee4e253b86804251b +CT=4986bb6d28e11a89253ff4e5e271ca57 + +I=237 +KEY=eabf17d9555c06ee018ec598ce93447e788f6a30b839add828270adb9e2c047a +PT=4986bb6d28e11a89253ff4e5e271ca57 +CT=22cf5a639ce9c413e66960573e6126eb + +I=238 +KEY=c8704dbac9b5c2fde7e7a5cff0f2629520d7234e85c2d68142294b1c531237dc +PT=22cf5a639ce9c413e66960573e6126eb +CT=99e20d03d7d111ff58db07aefb8d1d25 + +I=239 +KEY=519240b91e64d302bf3ca2610b7f7fb0fc845d0caf823cd1c624e762e3e46f70 +PT=99e20d03d7d111ff58db07aefb8d1d25 +CT=0b49bf68cda1e14c853bea3d490e8cf5 + +I=240 +KEY=5adbffd1d3c5324e3a07485c4271f345e5a60b5ea0ede202e963193848179086 +PT=0b49bf68cda1e14c853bea3d490e8cf5 +CT=5b4ce4e36d538d37f318163e0cbf32c8 + +I=241 +KEY=01971b32be96bf79c91f5e624ecec18df080ef67a430394be5f5c0ca55bdf943 +PT=5b4ce4e36d538d37f318163e0cbf32c8 +CT=568791a9530c460aae304ebbde209a7e + +I=242 +KEY=57108a9bed9af973672f10d990ee5bf3a05a06d5abe5db08d7600597ec2050cc +PT=568791a9530c460aae304ebbde209a7e +CT=3df8ebdb4d244d6bc1bc82b7b51d9b97 + +I=243 +KEY=6ae86140a0beb418a693926e25f3c064757fa3a062dce8ca2ce95958f283c496 +PT=3df8ebdb4d244d6bc1bc82b7b51d9b97 +CT=766b0cac7a96b89c3ff1e777c2fd138d + +I=244 +KEY=1c836decda280c8499627519e70ed3e9c928e1e543e40a1ba83df74b1fdccaba +PT=766b0cac7a96b89c3ff1e777c2fd138d +CT=e9bf2162d779bdd01988549210680869 + +I=245 +KEY=f53c4c8e0d51b15480ea218bf766db8077aa75348bdca6525c950c62b5bb27c9 +PT=e9bf2162d779bdd01988549210680869 +CT=bf4a7edbb5d681afc33fde8c850f25b2 + +I=246 +KEY=4a763255b88730fb43d5ff077269fe325832dc90697fbb08e8e8b3d5bf0022b3 +PT=bf4a7edbb5d681afc33fde8c850f25b2 +CT=8c16edb630972e4e0a65c59c8da40b6f + +I=247 +KEY=c660dfe388101eb549b03a9bffcdf55d8ae13a6ce8f73d6c0cb39e9e1217dff6 +PT=8c16edb630972e4e0a65c59c8da40b6f +CT=59eb0dfc0781c320fda8b4caa6d1070c + +I=248 +KEY=9f8bd21f8f91dd95b4188e51591cf2513c5b0624915aae9b1b59427ab43f4530 +PT=59eb0dfc0781c320fda8b4caa6d1070c +CT=86c4cc012596397f5a67d4a04df020b0 + +I=249 +KEY=194f1e1eaa07e4eaee7f5af114ecd2e16a0389844ae3ccae2529859d3a4fa229 +PT=86c4cc012596397f5a67d4a04df020b0 +CT=fb9e2036f4f31417d06c164b62cc077b + +I=250 +KEY=e2d13e285ef4f0fd3e134cba7620d59a6222e9066636d7f3e6026e63db6dc253 +PT=fb9e2036f4f31417d06c164b62cc077b +CT=6e83994ee9b7707ccd7805dd3a4e0226 + +I=251 +KEY=8c52a766b7438081f36b49674c6ed7bcdf165ae16d7fe06905b60b1384eac390 +PT=6e83994ee9b7707ccd7805dd3a4e0226 +CT=ff3f21528529278c578f6b11bd5f8143 + +I=252 +KEY=736d8634326aa70da4e42276f13156ff2c1c631981962a3bb15fdbbaa8aadcaf +PT=ff3f21528529278c578f6b11bd5f8143 +CT=a35159960a6f25be03c3b3c8496bf28a + +I=253 +KEY=d03cdfa2380582b3a72791beb85aa4755ab65ea9fc012f83e5cb3a86f44134d1 +PT=a35159960a6f25be03c3b3c8496bf28a +CT=fa69e4d64a95c79c17d93ec116cb9526 + +I=254 +KEY=2a553b747290452fb0feaf7fae9131534465b8ea70651d27f23494e05ce64385 +PT=fa69e4d64a95c79c17d93ec116cb9526 +CT=aa9a953bbef667743eca6873fa86d2b1 + +I=255 +KEY=80cfae4fcc66225b8e34c70c5417e3e2ea44e8f4a5c7665642f86ca487b1402f +PT=aa9a953bbef667743eca6873fa86d2b1 +CT=7466eba3255219ca783d7a629103d428 + +I=256 +KEY=f4a945ece9343b91f609bd6ec51437ca7ee904d7cc5b9c801c68f7426c7ef7e9 +PT=7466eba3255219ca783d7a629103d428 +CT=b22d190c6d8254903d88d6de7b4e0496 + +I=257 +KEY=46845ce084b66f01cb816bb0be5a335c33e8326359d5d8ae2fab11d62f07130b +PT=b22d190c6d8254903d88d6de7b4e0496 +CT=cde0c859eca378a59c063883e8332041 + +I=258 +KEY=8b6494b9681517a4578753335669131d95085fdc3aa8a442cca652ce70522926 +PT=cde0c859eca378a59c063883e8332041 +CT=31459cf7b1942902b40374c25f816c2e + +I=259 +KEY=ba21084ed9813ea6e38427f109e87f3332a3add54d6a3b3e216aa2f8ff372fa9 +PT=31459cf7b1942902b40374c25f816c2e +CT=85b2a616da4abe6dde259652549d67ee + +I=260 +KEY=3f93ae5803cb80cb3da1b1a35d7518dd4627b5fc7f2442f35fd30a66682929cb +PT=85b2a616da4abe6dde259652549d67ee +CT=8e090017dabe85d27a1c354d04846048 + +I=261 +KEY=b19aae4fd975051947bd84ee59f17895db0b7a5ef82fa6fcc90675a1468e3ad0 +PT=8e090017dabe85d27a1c354d04846048 +CT=854cf40fe22836c9b86da85037236739 + +I=262 +KEY=34d65a403b5d33d0ffd02cbe6ed21fac2f6008dc987281f7d47669c153c16e64 +PT=854cf40fe22836c9b86da85037236739 +CT=6ec8f83bf0df0fe87706a553f99ecb5f + +I=263 +KEY=5a1ea27bcb823c3888d689ed974cd4f3fbac202fc3482cdc9fb2e305985fedb4 +PT=6ec8f83bf0df0fe87706a553f99ecb5f +CT=40c6ca06afd7b9b01dd0d790798c4203 + +I=264 +KEY=1ad8687d6455858895065e7deec096f0dbbaa8e249313d6dded381a114883172 +PT=40c6ca06afd7b9b01dd0d790798c4203 +CT=cb4ffd54cf1012de4b2427ba5cc57a37 + +I=265 +KEY=d1979529ab459756de2279c7b205ecc77095c3da2d230108c70550aabcfd6bbe +PT=cb4ffd54cf1012de4b2427ba5cc57a37 +CT=fcaaaa7a661f48a5c1053b8ba97ff3b4 + +I=266 +KEY=2d3d3f53cd5adff31f27424c1b7a1f73d1f7cc51021f7a65359fe14dec6681dd +PT=fcaaaa7a661f48a5c1053b8ba97ff3b4 +CT=2a3709e9b8eca361e0b19f7fc31bd1cf + +I=267 +KEY=070a36ba75b67c92ff96dd33d861cebcd9f65ec15c1bda45a9efbb00ac1676f4 +PT=2a3709e9b8eca361e0b19f7fc31bd1cf +CT=ff942984c5ac0cf2113bd96a4340e9b5 + +I=268 +KEY=f89e1f3eb01a7060eead04599b212709a387e10499317eed3f1b90062066dfe7 +PT=ff942984c5ac0cf2113bd96a4340e9b5 +CT=ee9c6c351b04bd9a2dd1f4e78a1dab12 + +I=269 +KEY=1602730bab1ecdfac37cf0be113c8c1b8a879053b44110fcc77e002b25877b31 +PT=ee9c6c351b04bd9a2dd1f4e78a1dab12 +CT=0ac2350d9b46be18b4f26b6a260555d6 + +I=270 +KEY=1cc04606305873e2778e9bd43739d9cdf63df2602905501159b8534ea472f94e +PT=0ac2350d9b46be18b4f26b6a260555d6 +CT=70108e3bc792e1a2588545c33bb9a025 + +I=271 +KEY=6cd0c83df7ca92402f0bde170c8079e8acc171d3a6bf06ddf5762949fcc769cf +PT=70108e3bc792e1a2588545c33bb9a025 +CT=f33082a1a0fe00eecc5923b544d3f111 + +I=272 +KEY=9fe04a9c573492aee352fda2485388f9d519911728856aabbddd22dfb87b8fd6 +PT=f33082a1a0fe00eecc5923b544d3f111 +CT=72e74d4e80da8437bdf43cc92cfaa479 + +I=273 +KEY=ed0707d2d7ee16995ea6c16b64a92c805bf344ca53c11c9b1b59c3a7c7a53884 +PT=72e74d4e80da8437bdf43cc92cfaa479 +CT=486c3445d3cd54424d3c2bf8f6951105 + +I=274 +KEY=a56b3397042342db139aea93923c3d85196d9f66a537656873a61b53e8f5cd88 +PT=486c3445d3cd54424d3c2bf8f6951105 +CT=3c9facac4fc77291446b10a56deeaf74 + +I=275 +KEY=99f49f3b4be4304a57f1fa36ffd292f109b78b289041842a7d389b8cb16fee3e +PT=3c9facac4fc77291446b10a56deeaf74 +CT=726a14c4574ce4a94190434767e73ff0 + +I=276 +KEY=eb9e8bff1ca8d4e31661b9719835ad01e41459808ab0d80d7a66b1df56106b23 +PT=726a14c4574ce4a94190434767e73ff0 +CT=6f57c05e3125775c9f199bf7b132a224 + +I=277 +KEY=84c94ba12d8da3bf8978228629070f2534b2c1384e8d632b42005b20b3c262e9 +PT=6f57c05e3125775c9f199bf7b132a224 +CT=8d2097c78a0e5d70d370e29db4e4bacd + +I=278 +KEY=09e9dc66a783fecf5a08c01b9de3b5e85753f8f999370571bf67cbc7b6c43c34 +PT=8d2097c78a0e5d70d370e29db4e4bacd +CT=be6e96319f1ea4723eaf63c039df1108 + +I=279 +KEY=b7874a57389d5abd64a7a3dba43ca4e069b3c6f9bf8991f5553ba1f84739c043 +PT=be6e96319f1ea4723eaf63c039df1108 +CT=5ae08cd2909c8c2e37b7b91a5cf22d2c + +I=280 +KEY=ed67c685a801d69353101ac1f8ce89cc83fcb2c59be91ebb8f772c8657360bf4 +PT=5ae08cd2909c8c2e37b7b91a5cf22d2c +CT=c6c97b09149637f756d421ccb87859bd + +I=281 +KEY=2baebd8cbc97e16405c43b0d40b6d0713156c7af03e6cf70c6cab41d5ad63672 +PT=c6c97b09149637f756d421ccb87859bd +CT=7a84ebe1cb881a210442ced2f08e4873 + +I=282 +KEY=512a566d771ffb450186f5dfb0389802f953460cbd5d59440300e87818fd5478 +PT=7a84ebe1cb881a210442ced2f08e4873 +CT=b673050db8735f02aa3f2e8c1b6cf9c2 + +I=283 +KEY=e7595360cf6ca447abb9db53ab5461c0e6b8e4063c19ca431132d078c6134bd7 +PT=b673050db8735f02aa3f2e8c1b6cf9c2 +CT=4715a677f08d7be62944c4f7db34d166 + +I=284 +KEY=a04cf5173fe1dfa182fd1fa47060b0a67a7ea2fad18a6e4636923cfc243525b1 +PT=4715a677f08d7be62944c4f7db34d166 +CT=2514282a337f5969c356d15d07fea66e + +I=285 +KEY=8558dd3d0c9e86c841abcef9779e16c86263240f3158997ba8b52c1ace603ee1 +PT=2514282a337f5969c356d15d07fea66e +CT=d45baf17262251506ac3eb116d2b045f + +I=286 +KEY=5103722a2abcd7982b6825e81ab512974258ac49bab31a93bd401081162ab220 +PT=d45baf17262251506ac3eb116d2b045f +CT=59968150384d99bdf6a50cbfd449fbb7 + +I=287 +KEY=0895f37a12f14e25ddcd2957cefce9204174c3adfb3d4dc5d0768b0167e5dd84 +PT=59968150384d99bdf6a50cbfd449fbb7 +CT=6a1b9a4344df1d5d4e592f220c9362d6 + +I=288 +KEY=628e6939562e537893940675c26f8bf6ae6f5d145d1a8714b0ffba35545d502b +PT=6a1b9a4344df1d5d4e592f220c9362d6 +CT=3999d773e0534922fb8d9d2502dccb96 + +I=289 +KEY=5b17be4ab67d1a5a68199b50c0b3406087dc78f4d2729ddc7e1d1a41f6023d52 +PT=3999d773e0534922fb8d9d2502dccb96 +CT=3222a3f4c766ad89c718d2d145a9565c + +I=290 +KEY=69351dbe711bb7d3af014981851a163c90dfd45178331d8ea03782dd069de633 +PT=3222a3f4c766ad89c718d2d145a9565c +CT=b1a02422ed5e3e8d08f9c5cd81bde779 + +I=291 +KEY=d895399c9c45895ea7f88c4c04a7f145f28abb926f51e34030daa1aa25c468bb +PT=b1a02422ed5e3e8d08f9c5cd81bde779 +CT=5985a5f828ba07a98394f18711f79d37 + +I=292 +KEY=81109c64b4ff8ef7246c7dcb15506c72d7d9e271dc4ab6a593302b1d6895e394 +PT=5985a5f828ba07a98394f18711f79d37 +CT=b568eaa12f8dd54541f3f27cdb770299 + +I=293 +KEY=347876c59b725bb2659f8fb7ce276eeb7bf5917b6615482ef0407afe9955ede5 +PT=b568eaa12f8dd54541f3f27cdb770299 +CT=d7925d3ddf9358f68bf97cb1f6d8adac + +I=294 +KEY=e3ea2bf844e10344ee66f30638ffc347b44e98ee0f1078c3ea753f6e10741e06 +PT=d7925d3ddf9358f68bf97cb1f6d8adac +CT=a104ce99b644a3d6fcaf29badff98642 + +I=295 +KEY=42eee561f2a5a09212c9dabce706450565ab0caa277426072fb5ffc282f65171 +PT=a104ce99b644a3d6fcaf29badff98642 +CT=40a8fc2e8249ac27044d88ff4ec63b7e + +I=296 +KEY=0246194f70ec0cb516845243a9c07e7bfa510275cff89591a6c745956b7ad4bd +PT=40a8fc2e8249ac27044d88ff4ec63b7e +CT=3d5073643e7b5919fb2f0dbb7f4f7205 + +I=297 +KEY=3f166a2b4e9755acedab5ff8d68f0c7e879505bb9dc25b6a487358414684325f +PT=3d5073643e7b5919fb2f0dbb7f4f7205 +CT=6bb3343c0cbf40f65baeb02396c381a1 + +I=298 +KEY=54a55e174228155ab605efdb404c8ddf364bf2fba16c1a40fd2e4a7ad01f7084 +PT=6bb3343c0cbf40f65baeb02396c381a1 +CT=32d9b2c7c79f72cd38516fb1382a6eb3 + +I=299 +KEY=667cecd085b767978e54806a7866e36c9ae2ddc8739caa87e4e8c3cb2912f54f +PT=32d9b2c7c79f72cd38516fb1382a6eb3 +CT=49af1a2cd93204ce25c25952e1ec81eb + +I=300 +KEY=2fd3f6fc5c856359ab96d938998a6287ec082e79cb69d84803a51ed7fc848e21 +PT=49af1a2cd93204ce25c25952e1ec81eb +CT=9578e0111bd2efb90b3808062fa3a54f + +I=301 +KEY=baab16ed47578ce0a0aed13eb629c7c83b5ae5f7407df63419bb8af30a7780d7 +PT=9578e0111bd2efb90b3808062fa3a54f +CT=81583da5a9373daf96be9c89082469e9 + +I=302 +KEY=3bf32b48ee60b14f36104db7be0dae218dff18f5576b26904840b97b6d584b90 +PT=81583da5a9373daf96be9c89082469e9 +CT=9394a35e7db2dfcbcc7c07bcd54b1838 + +I=303 +KEY=a867881693d26e84fa6c4a0b6b46b6196004593e568516dbe9c3d67c6f6ad5ba +PT=9394a35e7db2dfcbcc7c07bcd54b1838 +CT=f8f59fe73b7cb55cc905d10835033654 + +I=304 +KEY=509217f1a8aedbd833699b035e45804d7402f02263662fd103db90d87e47e0bc +PT=f8f59fe73b7cb55cc905d10835033654 +CT=65c753afee1f1985dd40ec74654fbd15 + +I=305 +KEY=3555445e46b1c25dee2977773b0a3d588e4294decdf632d4da60079733feef9a +PT=65c753afee1f1985dd40ec74654fbd15 +CT=61b77bfca90ea9a3ffbde3fe4ea29d5e + +I=306 +KEY=54e23fa2efbf6bfe1194948975a8a0062ea4de464abb7eae9ce250dcbe709b20 +PT=61b77bfca90ea9a3ffbde3fe4ea29d5e +CT=216800b8935b7c6f617dbb6f2207084f + +I=307 +KEY=758a3f1a7ce4179170e92fe657afa84912d62380a7d6912b70b399b9ce8ce530 +PT=216800b8935b7c6f617dbb6f2207084f +CT=013a4e0093741a94c2970d40dbda1b77 + +I=308 +KEY=74b0711aef900d05b27e22a68c75b33e98030bd3e649c88fdd1b0e79d1d2b362 +PT=013a4e0093741a94c2970d40dbda1b77 +CT=f67a51a33fe9f610cbd5cb0f4097af87 + +I=309 +KEY=82ca20b9d079fb1579abe9a9cce21cb94b7236f38044991328e628a65bf70f22 +PT=f67a51a33fe9f610cbd5cb0f4097af87 +CT=b376c98c344f0a29a1c58a5078bd83a1 + +I=310 +KEY=31bce935e436f13cd86e63f9b45f9f1805fd684fc2d4ed7003efe093cdf0566a +PT=b376c98c344f0a29a1c58a5078bd83a1 +CT=dfb141ab44db37500fa4ed97ba1c8ff7 + +I=311 +KEY=ee0da89ea0edc66cd7ca8e6e0e4310ef6d7429f7261dc4853d2bb514803b0bd0 +PT=dfb141ab44db37500fa4ed97ba1c8ff7 +CT=53f8b416e6fbac6ab6cfb427f60be3bc + +I=312 +KEY=bdf51c8846166a0661053a49f848f353d6d01d18c4f4efb5db3b64b57ad14c73 +PT=53f8b416e6fbac6ab6cfb427f60be3bc +CT=991301040233883d7484115f1a80e016 + +I=313 +KEY=24e61d8c4425e23b15812b16e2c81345850f3a001c438414cf30efef60334388 +PT=991301040233883d7484115f1a80e016 +CT=647c5f7de6a67b4cc21c29a420041b56 + +I=314 +KEY=409a42f1a2839977d79d02b2c2cc08130564d071a57d34ce06447a36aa345da4 +PT=647c5f7de6a67b4cc21c29a420041b56 +CT=732efa1eb54dc106c6918952e11184fe + +I=315 +KEY=33b4b8ef17ce5871110c8be023dd8ced67339144a7955bdcc32bb7286bb576e7 +PT=732efa1eb54dc106c6918952e11184fe +CT=16b199fabb2f6f077a9eeb511343f5ec + +I=316 +KEY=25052115ace137766b9260b1309e7901b826dafb6623c8a19bd5c22a56bc63fd +PT=16b199fabb2f6f077a9eeb511343f5ec +CT=cda74cb0d65a56a02ebe406b11b4ae10 + +I=317 +KEY=e8a26da57abb61d6452c20da212ad711e5a4191d791c19fb1394ee5299dc91be +PT=cda74cb0d65a56a02ebe406b11b4ae10 +CT=b0b1cdb28f8281db99095da4634c1818 + +I=318 +KEY=5813a017f539e00ddc257d7e4266cf098cff8fd6e61d0792ce4a8e0ade451ccb +PT=b0b1cdb28f8281db99095da4634c1818 +CT=d576a1a030c78d0f785eca0cca07fef8 + +I=319 +KEY=8d6501b7c5fe6d02a47bb772886131f1337885e170dc4da2259778c5078400c5 +PT=d576a1a030c78d0f785eca0cca07fef8 +CT=5979788809e0d89ee7391c93d2db5638 + +I=320 +KEY=d41c793fcc1eb59c4342abe15aba67c96d37f0299e58a6a957f260fd7f1f699d +PT=5979788809e0d89ee7391c93d2db5638 +CT=1cf868aca60b7b511a7cdb88fd0bf04b + +I=321 +KEY=c8e411936a15cecd593e7069a7b1978207a46dc61387ba26322a6a84d7dbed92 +PT=1cf868aca60b7b511a7cdb88fd0bf04b +CT=8d62cf754b663b32a2529d0220b99a48 + +I=322 +KEY=4586dee62173f5fffb6ced6b87080dcaa74f69250f45bf0ea81218baf057f6e8 +PT=8d62cf754b663b32a2529d0220b99a48 +CT=1d5842c6e7cce2709ba29a3227e3f860 + +I=323 +KEY=58de9c20c6bf178f60ce7759a0ebf5aafbfd110d74e683b4348d84329a7f10ce +PT=1d5842c6e7cce2709ba29a3227e3f860 +CT=ba958bb5cc6ad16f2820b23395f0942b + +I=324 +KEY=e24b17950ad5c6e048eec56a351b6181000530b730660be25a6bd0764b021760 +PT=ba958bb5cc6ad16f2820b23395f0942b +CT=6986065aa25054a7d06912e5905474fe + +I=325 +KEY=8bcd11cfa88592479887d78fa54f157f0c66f84f343d332148285636c30da218 +PT=6986065aa25054a7d06912e5905474fe +CT=0ea081d618ae77c0fd2ee448419ec224 + +I=326 +KEY=856d9019b02be58765a933c7e4d1d75b0656468eca7b4030d877c03e0d089f41 +PT=0ea081d618ae77c0fd2ee448419ec224 +CT=e05eedbb4567efbe3e146b216ab79431 + +I=327 +KEY=65337da2f54c0a395bbd58e68e66436a7f0637626fd9835cb351a02f5c3ce3bc +PT=e05eedbb4567efbe3e146b216ab79431 +CT=bb0d16ce08581dca44763320b8191fbe + +I=328 +KEY=de3e6b6cfd1417f31fcb6bc6367f5cd4d7eeb990b854076e0bbb8f3ce9e3ae2c +PT=bb0d16ce08581dca44763320b8191fbe +CT=5fad21cacfb0a39b970b7c7a8f0018a4 + +I=329 +KEY=81934aa632a4b46888c017bcb97f4470769521e9ac670254d470645faaef1c00 +PT=5fad21cacfb0a39b970b7c7a8f0018a4 +CT=fcae3ee9928945ec11b5c23cca81a590 + +I=330 +KEY=7d3d744fa02df1849975d58073fee1e0c49592ec481bee84ae2166cc9e5364b1 +PT=fcae3ee9928945ec11b5c23cca81a590 +CT=78f8970c21fecc1c1353d5ac303a7e30 + +I=331 +KEY=05c5e34381d33d988a26002c43c49fd0a3f2153ff979af5e3e2e1c6f334f59f9 +PT=78f8970c21fecc1c1353d5ac303a7e30 +CT=65f32a1744626c17f5f9ec4106fdf112 + +I=332 +KEY=6036c954c5b1518f7fdfec6d45396ec29afdcb7999f8b8bd2a089f286f9fa256 +PT=65f32a1744626c17f5f9ec4106fdf112 +CT=5a48bd5a8e7a0a891992e0645ec601da + +I=333 +KEY=3a7e740e4bcb5b06664d0c091bff6f1888471ea8c77f0bdfd679936cee3e073c +PT=5a48bd5a8e7a0a891992e0645ec601da +CT=997e678e21242ebdc762a15b0185a9ff + +I=334 +KEY=a30013806aef75bba12fad521a7ac6e7cfc8ac91a40902988bd869ab57a0ab67 +PT=997e678e21242ebdc762a15b0185a9ff +CT=8fd42dc3dcb9c2e540ed0f4b0551efed + +I=335 +KEY=2cd43e43b656b75ee1c2a2191f2b290ae79bb07c16b56a4681ee08981394e873 +PT=8fd42dc3dcb9c2e540ed0f4b0551efed +CT=0b962c8ebdaf7d64fb3f272fa20dcc1d + +I=336 +KEY=274212cd0bf9ca3a1afd8536bd26e5175015fc558cf1579986f399a8d7b56f07 +PT=0b962c8ebdaf7d64fb3f272fa20dcc1d +CT=2ecf634f373d09c802d2fa87ac5aa960 + +I=337 +KEY=098d71823cc4c3f2182f7fb1117c4c777c6018409decb134eac57c137200701e +PT=2ecf634f373d09c802d2fa87ac5aa960 +CT=f1f383c8ec7708996cbcff62b76a76d4 + +I=338 +KEY=f87ef24ad0b3cb6b749380d3a6163aa303f7d19be8c18bf190b6c69e1bfad509 +PT=f1f383c8ec7708996cbcff62b76a76d4 +CT=7aa9efc8aa4700805e525b63ab1768a6 + +I=339 +KEY=82d71d827af4cbeb2ac1dbb00d0152053be91fd704181f26c28a9a02b155504d +PT=7aa9efc8aa4700805e525b63ab1768a6 +CT=2e37e77fbfaa656e955177b4ea0b6bd5 + +I=340 +KEY=ace0fafdc55eae85bf90ac04e70a39d08dc6e8927108ed32640626d079351eb6 +PT=2e37e77fbfaa656e955177b4ea0b6bd5 +CT=f414d9e2c523f5e9c44c4049a4b602e7 + +I=341 +KEY=58f4231f007d5b6c7bdcec4d43bc3b3730dbe0d4e8fff4900e8af6374d8876eb +PT=f414d9e2c523f5e9c44c4049a4b602e7 +CT=f75e73c33546631ec5a081d8d1e55f61 + +I=342 +KEY=afaa50dc353b3872be7c6d95925964564f6908f158fb2e7206ec2c7cf28df83e +PT=f75e73c33546631ec5a081d8d1e55f61 +CT=aa6ef2930678811aa2c64ebc43c228fd + +I=343 +KEY=05c4a24f3343b9681cba2329d19b4cabeb47566beb0adb7adeb83e0ed19cb877 +PT=aa6ef2930678811aa2c64ebc43c228fd +CT=ab4a40b1dfdd20e7f528baf3a062eb85 + +I=344 +KEY=ae8ee2feec9e998fe99299da71f9a72e8cf079c36393d5f91b8d2925b23da159 +PT=ab4a40b1dfdd20e7f528baf3a062eb85 +CT=44aabe0aef83592c9077cae4a09e4802 + +I=345 +KEY=ea245cf4031dc0a379e5533ed167ef2c5f6ee9aa84f49f91d51a6d0ad7696e64 +PT=44aabe0aef83592c9077cae4a09e4802 +CT=afba8b63cfcc72e5cd6aed73b4cf2b0a + +I=346 +KEY=459ed797ccd1b246b48fbe4d65a8c426cb6c87f7c06dfb8f071a84ba63fe8279 +PT=afba8b63cfcc72e5cd6aed73b4cf2b0a +CT=7a5cb5ec01c723ef4bada9395a842d83 + +I=347 +KEY=3fc2627bcd1691a9ff2217743f2ce9a52ddc37de150bfa3e514bb3b482f1f016 +PT=7a5cb5ec01c723ef4bada9395a842d83 +CT=c3b77c4028df0c8359477a90f3dcad81 + +I=348 +KEY=fc751e3be5c99d2aa6656de4ccf0442412556a883f2dda5d6b556707db4483b9 +PT=c3b77c4028df0c8359477a90f3dcad81 +CT=07ad1ccf33d649e692e4498865f80761 + +I=349 +KEY=fbd802f4d61fd4cc3481246ca9084345bb032d42bf0e274f75976f91c0d052f8 +PT=07ad1ccf33d649e692e4498865f80761 +CT=39be8dfa7914ae166e412be68ab45249 + +I=350 +KEY=c2668f0eaf0b7ada5ac00f8a23bc110c32a6f9bfdd9d6839d91e3320ac1d73d9 +PT=39be8dfa7914ae166e412be68ab45249 +CT=e54b7e6fba526d40591cf76b89d65373 + +I=351 +KEY=272df1611559179a03dcf8e1aa6a427fad2556b26fb607622ae50e4b975d48de +PT=e54b7e6fba526d40591cf76b89d65373 +CT=e9c9ffbbe54b74d9103fad3251a75b22 + +I=352 +KEY=cee40edaf012634313e355d3fbcd195d9a80735160315fddbe90201f718e1abe +PT=e9c9ffbbe54b74d9103fad3251a75b22 +CT=148201d2aac05bdf41b12b2c076a609f + +I=353 +KEY=da660f085ad2389c52527efffca779c222d21806c5c7f51479a99d633aa1ac13 +PT=148201d2aac05bdf41b12b2c076a609f +CT=81d4ba0822cc17af0d3ef656bb6007cf + +I=354 +KEY=5bb2b500781e2f335f6c88a947c77e0d8fbb308bccf6501eea49044634086b0f +PT=81d4ba0822cc17af0d3ef656bb6007cf +CT=cb1ca3fe723c304b2a35b6a03b388c63 + +I=355 +KEY=90ae16fe0a221f7875593e097cfff26e334c3da3bcc9a22386dc70b27e632625 +PT=cb1ca3fe723c304b2a35b6a03b388c63 +CT=2d5c95e73c9b6319ddff7cecc5e58fd7 + +I=356 +KEY=bdf2831936b97c61a8a642e5b91a7db9227a5a39a57c6cfba306893da321e29d +PT=2d5c95e73c9b6319ddff7cecc5e58fd7 +CT=1e09bab779788cb88ec46afa4decddb1 + +I=357 +KEY=a3fb39ae4fc1f0d92662281ff4f6a0088ff285f5936aa7cf62d4940628492036 +PT=1e09bab779788cb88ec46afa4decddb1 +CT=5a2e0185ed0a3bcf0449feaafe12bae4 + +I=358 +KEY=f9d5382ba2cbcb16222bd6b50ae41aec55a3e7f3fd7c4884d825869670d5923c +PT=5a2e0185ed0a3bcf0449feaafe12bae4 +CT=2edd9eb6bf09d065c90551b2096350ca + +I=359 +KEY=d708a69d1dc21b73eb2e870703874a269d32728a26dee4e24a976884565ffb2e +PT=2edd9eb6bf09d065c90551b2096350ca +CT=2bae8f9327cd1826a9ef64f918723073 + +I=360 +KEY=fca6290e3a0f035542c1e3fe1bf57a55e195ca6d3cb3a03508eb402ca171cf24 +PT=2bae8f9327cd1826a9ef64f918723073 +CT=492b76bbb904701e5f6620693c455df3 + +I=361 +KEY=b58d5fb5830b734b1da7c39727b027a6ac54c38af96b0c99b34a48611b9276c3 +PT=492b76bbb904701e5f6620693c455df3 +CT=70185906be32d3f110d663fc0882072d + +I=362 +KEY=c59506b33d39a0ba0d71a06b2f32208b8d002cc1f3e7725279e62445b4659428 +PT=70185906be32d3f110d663fc0882072d +CT=5504ce475f166f794feb7f14e27766f8 + +I=363 +KEY=9091c8f4622fcfc3429adf7fcd454673fbf6ae3831ae4796dd96ed6aef2f9492 +PT=5504ce475f166f794feb7f14e27766f8 +CT=90449cc02763db30b09a8b483ab682f5 + +I=364 +KEY=00d55434454c14f3f2005437f7f3c486cf82b26d4ddaf69f7eb32eddf8ef6225 +PT=90449cc02763db30b09a8b483ab682f5 +CT=9456ced5c5ec9616e21510313f486bac + +I=365 +KEY=94839ae180a082e510154406c8bbaf2a832153785ce603339e89efbbfa62ddc8 +PT=9456ced5c5ec9616e21510313f486bac +CT=f8fa779ede94704d1612c80eaa3914bb + +I=366 +KEY=6c79ed7f5e34f2a806078c086282bb912e2a97414234899e7bae64e5ff82dbe3 +PT=f8fa779ede94704d1612c80eaa3914bb +CT=279675a5bffd200ba7768e668cc93a49 + +I=367 +KEY=4bef98dae1c9d2a3a171026eee4b81d859269f7a3368fdee859ad0ba7ce7db00 +PT=279675a5bffd200ba7768e668cc93a49 +CT=ef89fe2c859a3fab7b294823a75def19 + +I=368 +KEY=a46666f66453ed08da584a4d49166ec1d21c4e6ca881e3f768ae793de5540574 +PT=ef89fe2c859a3fab7b294823a75def19 +CT=a5f4cf11ed8b8db49acae8bbc20d9aa9 + +I=369 +KEY=0192a9e789d860bc4092a2f68b1bf46887307e5b62693639cdd893c3c697ac75 +PT=a5f4cf11ed8b8db49acae8bbc20d9aa9 +CT=1beda7dda6d8a9d681e8a828ec9cf7d0 + +I=370 +KEY=1a7f0e3a2f00c96ac17a0ade678703b81fc950ea210b67be7ac3d84a005ba57c +PT=1beda7dda6d8a9d681e8a828ec9cf7d0 +CT=6292de24b42bae086e13120dacc30a5f + +I=371 +KEY=78edd01e9b2b6762af6918d3cb4409e78e83a4024d7c6bdb1340f1d5894e4173 +PT=6292de24b42bae086e13120dacc30a5f +CT=33cbd5a6f0fec3a090dedd175f14f7d2 + +I=372 +KEY=4b2605b86bd5a4c23fb7c5c49450fe359c1c5bb789aae0820873c67ca47bb697 +PT=33cbd5a6f0fec3a090dedd175f14f7d2 +CT=356a8fbbe3bb929c4fafb9f6204189dc + +I=373 +KEY=7e4c8a03886e365e70187c32b41177e96694d007e4226dc130a3f307135331e3 +PT=356a8fbbe3bb929c4fafb9f6204189dc +CT=a1c9d464ce544225e2c11f9beea27174 + +I=374 +KEY=df855e67463a747b92d963a95ab3069dbf71b5c3aa59cfb6d1959a291350524c +PT=a1c9d464ce544225e2c11f9beea27174 +CT=0ed64fd51a25f58358cc77d04c4432bc + +I=375 +KEY=d15311b25c1f81f8ca15147916f734211001148af79803f58655be34e17a9e41 +PT=0ed64fd51a25f58358cc77d04c4432bc +CT=5fa8c745dccac2ba0c68b88aea94a76e + +I=376 +KEY=8efbd6f780d54342c67dacf3fc63934f7c13ee8522c5ebd64dd713295194b337 +PT=5fa8c745dccac2ba0c68b88aea94a76e +CT=f56bcf076ea6adfbbb1fe8a81f643196 + +I=377 +KEY=7b9019f0ee73eeb97d62445be307a2d949f55c09f37827128578be424ec31f65 +PT=f56bcf076ea6adfbbb1fe8a81f643196 +CT=841e8bb17f24ddb4ac852d73f6dd8401 + +I=378 +KEY=ff8e92419157330dd1e7692815da26d88b18124adc65223ee6fb349d018acb71 +PT=841e8bb17f24ddb4ac852d73f6dd8401 +CT=a823a09e162a2bd92c3994670e7c75c5 + +I=379 +KEY=57ad32df877d18d4fddefd4f1ba6531d1f3eb1c77c851c5a44e2e20c2b3ea6fc +PT=a823a09e162a2bd92c3994670e7c75c5 +CT=9acb428066b282ed5e3158ca1b6f24b4 + +I=380 +KEY=cd66705fe1cf9a39a3efa58500c977a902158a9639809c880c5f584878773780 +PT=9acb428066b282ed5e3158ca1b6f24b4 +CT=f386ac5bb8ee37118bf4a71d13d4beca + +I=381 +KEY=3ee0dc045921ad28281b0298131dc9638339ad6e46975a1a672cc93784eb31dd +PT=f386ac5bb8ee37118bf4a71d13d4beca +CT=a24c3c8acb59b268d16a6ca1848525f0 + +I=382 +KEY=9cace08e92781f40f9716e399798ec937a29cb1f506bf385f16648798df94313 +PT=a24c3c8acb59b268d16a6ca1848525f0 +CT=c6b950baf41d9cc4b4292ac8e01af0cc + +I=383 +KEY=5a15b034666583844d5844f177821c5f552f103ad76bad085ee453e9ae6efc6d +PT=c6b950baf41d9cc4b4292ac8e01af0cc +CT=c9f0e86d40b1cd620818a38b68512f68 + +I=384 +KEY=93e5585926d44ee64540e77a1fd33337fd1ac5844f5d4527b8884d785151b5cc +PT=c9f0e86d40b1cd620818a38b68512f68 +CT=e78cd32d5532b74590d23c46dd235daa + +I=385 +KEY=74698b7473e6f9a3d592db3cc2f06e9d04c2fedc31fb8dc05e8c2588e6f8c37a +PT=e78cd32d5532b74590d23c46dd235daa +CT=a269ecae359ee5368232430fbae47f84 + +I=386 +KEY=d60067da46781c9557a0983378141119ea48cef13bb270700616c0a29f08822c +PT=a269ecae359ee5368232430fbae47f84 +CT=0d87950d2221b2476e5dd281e48cee78 + +I=387 +KEY=db87f2d76459aed239fd4ab29c98ff613363709056560c323c440e4702d86846 +PT=0d87950d2221b2476e5dd281e48cee78 +CT=2c5dd3a62a3b57bb70296098e4c4f202 + +I=388 +KEY=f7da21714e62f96949d42a2a785c0d639df374f5a46157ef1f5de405ed5addb7 +PT=2c5dd3a62a3b57bb70296098e4c4f202 +CT=099d067b977c9333b999f22e0804f5ff + +I=389 +KEY=fe47270ad91e6a5af04dd8047058f89c4a97750300d3fe9dd0c198ec0965c324 +PT=099d067b977c9333b999f22e0804f5ff +CT=84e1d72641f8224d26c55a5554046412 + +I=390 +KEY=7aa6f02c98e64817d6888251245c9c8e6ab63a034dbc3cbe136987072eb6479c +PT=84e1d72641f8224d26c55a5554046412 +CT=ac16fee8ee9c01058664f6f2ecccffe8 + +I=391 +KEY=d6b00ec4767a491250ec74a3c89063660332d1badd39d92c7a0fbe65196f01b4 +PT=ac16fee8ee9c01058664f6f2ecccffe8 +CT=e33e5fe9b332035441a5ce66fb4a1e4e + +I=392 +KEY=358e512dc5484a461149bac533da7d2816236e093bd767cd38fec5937eb415da +PT=e33e5fe9b332035441a5ce66fb4a1e4e +CT=2a453baea8389046e3f6fdc8979c6951 + +I=393 +KEY=1fcb6a836d70da00f2bf470da446147979f67cc8dcfcd53b76c4106de59b17d0 +PT=2a453baea8389046e3f6fdc8979c6951 +CT=b5fc033918a4ba5dab5fa3eec06ebcd6 + +I=394 +KEY=aa3769ba75d4605d59e0e4e36428a8afc9f57c321612a862cfded2929078ea57 +PT=b5fc033918a4ba5dab5fa3eec06ebcd6 +CT=008f4acbb4523284d4a98a5afec607e4 + +I=395 +KEY=aab82371c18652d98d496eb99aeeaf4b12e39aaa9a0bb569fa3219656e7a1b43 +PT=008f4acbb4523284d4a98a5afec607e4 +CT=1fb27b01fc7f85c5150890bf538b33e1 + +I=396 +KEY=b50a58703df9d71c9841fe06c9659caa282cf8d8170abd5785c222e7146b0f90 +PT=1fb27b01fc7f85c5150890bf538b33e1 +CT=2b790bb52acac2715e7b7e78c2010940 + +I=397 +KEY=9e7353c51733156dc63a807e0b6495ea2ff760f7e65bc859b692d4cdb1bb8b0b +PT=2b790bb52acac2715e7b7e78c2010940 +CT=403e1263eb5cce8f76fe8ab09e48dc39 + +I=398 +KEY=de4d41a6fc6fdbe2b0c40ace952c49d37626c1e0ec4186f9657d5abf51abfb6d +PT=403e1263eb5cce8f76fe8ab09e48dc39 +CT=2616add8c1ca8db1fecd93ed604e4ef3 + +I=399 +KEY=f85bec7e3da556534e099923f5620720dcab50ec752ca0f75e325ade1b403f10 +PT=2616add8c1ca8db1fecd93ed604e4ef3 +CT=f91b76a583320059eb8ece9797eeee90 + + + + + + + + + + + + + diff -urN lin.2.4.3/crypto/testing/test.sha1 int.2.4.3/crypto/testing/test.sha1 --- lin.2.4.3/crypto/testing/test.sha1 Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/test.sha1 Mon Apr 2 18:37:26 2001 @@ -0,0 +1,10 @@ + + +Test Vectors (from FIPS PUB 180-1) +"abc" + A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D +"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" + 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1 +A million repetitions of "a" + 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F + diff -urN lin.2.4.3/crypto/testing/test_blowfish.c int.2.4.3/crypto/testing/test_blowfish.c --- lin.2.4.3/crypto/testing/test_blowfish.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/test_blowfish.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,58 @@ +/* + * crypto/testing/test_blowfish.c + * + * Written by Raimar Falke 1998-12-17 + * Copied from speed.c. + * + * Copyright 1998 by Raimar Falke. Redistribution of this file + * is permitted under the GNU Public License. + */ + +#define __KERNEL__ + +#define printk printk_dummy + +#include + +#undef memcpy +#undef memset +#undef printk + +#include "libcfuncs.h" +#include "misc.h" + +#define u32 unsigned int + +int main() +{ + struct cipher_implementation *ci; + struct cipher_context *cx; + + unsigned char key1[]={0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00}; + u32 input1[2]={0x00000000, 0x00000000}; + u32 output1[2]; + + /* Register all ciphers */ + cryptoapi_init(); + + ci = find_cipher_by_id(CIPHER_BLOWFISH); + if (!ci) + { + PRINTF("Can't find blowfish\n"); + return 1; + } + + cx = (struct cipher_context *) malloc(sizeof(struct cipher_context)); + cx->ci = ci; + cx->keyinfo = (u32 *) malloc(ci->key_schedule_size); + ci->set_key(cx, key1, sizeof(key1)); + + ci->encrypt(cx,(u8 *)input1,(u8 *)output1,8); + dump_u32_buffer(output1,8); + + ci->decrypt(cx,(u8 *)output1,(u8 *)input1,8); + dump_u32_buffer(input1,8); + + return 0; +} + diff -urN lin.2.4.3/crypto/testing/testapi.c int.2.4.3/crypto/testing/testapi.c --- lin.2.4.3/crypto/testing/testapi.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/testapi.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,129 @@ +/* + * crypto/testing/testapi.c + * + * Written by Alexander Kjeldaas 2000-10-08 + * + * Copyright 2000 by Alexander Kjeldaas. Redistribution of this file + * is permitted under the GNU Public License. + */ + +/* Regression tests for the kernel crypto API */ + +#define __KERNEL__ + +#define printk printk_dummy + +#include +#undef memcpy +#undef memset +#undef printk + +#include "libcfuncs.h" +#include "misc.h" + +u8 plaintext[32+64]; +u8 ciphertext[32+64]; +u8 testres[512]; +u8 key[512]; +int plaintextlen, ciphertextlen, keylen; + +static int test_fence(struct cipher_context *cx); +static void show_usage(); + + +int main(int argc, char **argv) +{ + const char *cipher = "aes-cbc"; + struct cipher_implementation *ci = NULL; + struct cipher_context *cx; + int arg, err; + int i; + + /* Register all ciphers */ + cryptoapi_init(); + + memset(plaintext, 0, sizeof(plaintext)); + memset(ciphertext, 0, sizeof(ciphertext)); + memset(testres, 0, sizeof(testres)); + memset(key, 0, sizeof(key)); + + while((arg = getopt(argc,argv,"hc:k:")) != EOF) { + switch(arg) { + case 'h': + show_usage(); + break; + case 'c': + cipher = strdup(optarg); + if (!(ci = find_cipher_by_name(cipher))) { + PRINTF("no cipher by that name (%s)\n", optarg); + exit(1); + } + break; + } + } + if (!ci && !(ci = find_cipher_by_name(cipher))) { + PRINTF("no cipher by that name (%s)\n", cipher); + exit(1); + } + cx = (struct cipher_context *) malloc(sizeof(struct cipher_context)); + cx->ci = ci; + cx->keyinfo = (u32 *) malloc(ci->key_schedule_size); + make_random_buf(key, sizeof(key)); + if ((err = ci->set_key(cx, (char *)key, 128/8))) { + PRINTF("set_key returned error %d\n", err); + exit(1); + } + err = 0; + for (i = 0; i < 100; i++) { + err = err | test_fence(cx); + } + PRINTF("[%s] Fencepost tests\n", err ? "FAIL" : " OK "); + return 0; +} + +static int test_fence(struct cipher_context *cx) +{ + /* Test that a cipher fills whatever buffer we ask it to fill, + but that it doesn't touch anything else. We have a fence + consisting of 16 bytes at the beginning of the output + buffer, and 16 bytes at the end of the output buffer */ + int enclen = rand() % (sizeof(ciphertext) - 32); + u8 fence[] = {0, 0xff}; + int i, j, err=0; + make_random_buf(ciphertext, sizeof(ciphertext)); + /* Check a few times to avoid false positives */ + for (i = 0; i < sizeof(fence); i++) { + memset(plaintext, fence[i], sizeof(plaintext)); + cx->ci->decrypt(cx, ciphertext, plaintext+16, enclen); + for (j = 0; j < 16; j++) { + if (plaintext[j] != fence[i]) { + PRINTF("fencepost error at beginning of buf" + " idx: %u, cont:%x, not %x, encl:%d\n", + j, plaintext[j], fence[i], enclen); + err++; + break; + } + if (plaintext[16+enclen+j] != fence[i]) { + PRINTF("fencepost error at end of buf" + " idx: %d, cont:%x, not %x, encl:%d\n", + j, plaintext[16+enclen+j], fence[i], + enclen); + dump_u8_buffer(plaintext+16, enclen+16); + err++; + break; + } + } + } + if (err == 1) { + PRINTF("fencepost errors reported are probably false " + "positives\n"); + } + return err; +} + +void show_usage() +{ + printf("Usage: testapi [-h] -c \n"); + exit(1); +} + diff -urN lin.2.4.3/crypto/testing/testcip.c int.2.4.3/crypto/testing/testcip.c --- lin.2.4.3/crypto/testing/testcip.c Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/testcip.c Mon Apr 2 18:37:26 2001 @@ -0,0 +1,130 @@ +/* + * crypto/testing/testcip.c + * + * Written by Alexander Kjeldaas 1998-12-17 + * + * Copyright 1998 by Alexander Kjeldaas. Redistribution of this file + * is permitted under the GNU Public License. + */ + +#define __KERNEL__ + +#define printk printk_dummy + +#include +#undef memcpy +#undef memset +#undef printk + +#include "libcfuncs.h" +#include "misc.h" + +void show_usage(); + +int plaintext[512]; +int ciphertext[512]; +int testres[512]; +char key[512]; +int plaintextlen, ciphertextlen, keylen; + +int main(int argc, char **argv) +{ + struct cipher_implementation *ci = NULL; + struct cipher_context *cx; + int given_args = 0; + int arg, err; + int swap_to_processor = 0; + + /* Register all ciphers */ + init_ciphers_and_digests(); + + memset(plaintext, 0, sizeof(plaintext)); + memset(ciphertext, 0, sizeof(ciphertext)); + memset(testres, 0, sizeof(testres)); + memset(key, 0, sizeof(key)); + + + + while((arg = getopt(argc,argv,"hp:e:c:k:s")) != EOF) { + switch(arg) { + case 'h': + show_usage(); + break; + case 'p': + plaintextlen = parsehex(optarg, (char *)&plaintext); + given_args |= 2; + break; + case 'e': + ciphertextlen = parsehex(optarg, (char *)&ciphertext); + given_args |= 4; + break; + case 'k': + keylen = parsehex(optarg, key); + given_args |= 8; + break; + case 'c': + if (!(ci = find_cipher_by_name(optarg, 1))) { + PRINTF("no cipher by that name (%s)\n", optarg); + exit(1); + } + given_args |= 1; + break; + case 's': + swap_to_processor = 1; + break; + } + } + if (given_args != 15) + show_usage(); + if (ciphertextlen != plaintextlen) { + PRINTF("size of plaintext and ciphertext differ\n"); + exit(1); + } + + if (swap_to_processor) { + swab32_buf((char *)ciphertext, ciphertextlen); + } + + cx = (struct cipher_context *) malloc(sizeof(struct cipher_context)); + cx->ci = ci; + cx->keyinfo = (u32 *) malloc(ci->key_schedule_size); + if ((err = ci->set_key(cx, (char *)key, keylen))) { + PRINTF("set_key returned error %d\n", err); + exit(1); + } + if ((err = ci->encrypt(cx, (u8 *)plaintext, (u8 *)testres, + plaintextlen))) { + PRINTF("encrypt returned error %d\n", err); + } + + + if (memcmp(testres, ciphertext, ciphertextlen)) { + PRINTF("encrypted text and ciphertext differ\n"); + PRINTF("generated ciphertext (%d bytes):\n", ciphertextlen); + dump_buffer((char *)testres, ciphertextlen); + PRINTF("correct ciphertext (%d bytes):\n", ciphertextlen); + dump_buffer((char *)ciphertext, ciphertextlen); + } + + + if ((err = ci->decrypt(cx, (u8 *)ciphertext, (u8 *)testres, + ciphertextlen))) { + PRINTF("decrypt returned error %d\n", err); + } + if (memcmp(testres, plaintext, plaintextlen)) { + PRINTF("decrypted ciphertext and plaintext differ\n"); + PRINTF("generated plaintext (%d bytes):\n", plaintextlen); + dump_buffer((char *)testres, plaintextlen); + PRINTF("correct plaintext (%d bytes):\n", plaintextlen); + dump_buffer((char *)plaintext, plaintextlen); + } + return 0; +} + +void show_usage() +{ + printf("Usage: testcip [-h] -c -p -e <encryptedtext>\n"); + printf(" plaintext and encryptedtext are hex\n"); + exit(1); +} + diff -urN lin.2.4.3/crypto/testing/twofish_ecb_vk.txt int.2.4.3/crypto/testing/twofish_ecb_vk.txt --- lin.2.4.3/crypto/testing/twofish_ecb_vk.txt Thu Jan 1 01:00:00 1970 +++ int.2.4.3/crypto/testing/twofish_ecb_vk.txt Mon Apr 2 18:37:26 2001 @@ -0,0 +1,2335 @@ + +========================= + +FILENAME: "ecb_vk.txt" + +Electronic Codebook (ECB) Mode +Variable Key Known Answer Tests + +Algorithm Name: TWOFISH +Principal Submitter: Bruce Schneier, Counterpane Systems + +========== + +KEYSIZE=128 + +PT=00000000000000000000000000000000 + +I=1 +KEY=80000000000000000000000000000000 +CT=6BFD32804A1C3206C4BF85EB11241F89 + +I=2 +KEY=40000000000000000000000000000000 +CT=F097147AE851845984DC97D5FAE40CF9 + +I=3 +KEY=20000000000000000000000000000000 +CT=6117F1977C5ABD9647C56544D9458444 + +I=4 +KEY=10000000000000000000000000000000 +CT=75A6240AAE357DEDDF99936705618284 + +I=5 +KEY=08000000000000000000000000000000 +CT=F026BFDF6BFBC7E50C46C533BD271C24 + +I=6 +KEY=04000000000000000000000000000000 +CT=F3023228D77045D37D1B9CD77437395A + +I=7 +KEY=02000000000000000000000000000000 +CT=F67467BF6B490209809714D50679B2D7 + +I=8 +KEY=01000000000000000000000000000000 +CT=2C8431B922C5F560095E9867B1A41256 + +I=9 +KEY=00800000000000000000000000000000 +CT=1FB76E90D207BA4C770F67284D6B1359 + +I=10 +KEY=00400000000000000000000000000000 +CT=A70AECE1D41DCA9F24BCE8393F6D54BF + +I=11 +KEY=00200000000000000000000000000000 +CT=D4580FC395979689221C57A23598358B + +I=12 +KEY=00100000000000000000000000000000 +CT=35CA62BA8126F015FABFEF8F9119AE6B + +I=13 +KEY=00080000000000000000000000000000 +CT=C81FACB16E087EEFA823CF34E02FE482 + +I=14 +KEY=00040000000000000000000000000000 +CT=07400F04E4CC6625AE3FB41ECC863F2A + +I=15 +KEY=00020000000000000000000000000000 +CT=A0941008068D401DEAB6400C86CA53AD + +I=16 +KEY=00010000000000000000000000000000 +CT=2B63BEF50BA87A58BFFCA4CF44C22927 + +I=17 +KEY=00008000000000000000000000000000 +CT=FD49069AE9F1874A264A7BFD894ED886 + +I=18 +KEY=00004000000000000000000000000000 +CT=232755C754075BB5CC5B85ABFEA38779 + +I=19 +KEY=00002000000000000000000000000000 +CT=41358B9C76E959037E13F7E5050E0B42 + +I=20 +KEY=00001000000000000000000000000000 +CT=8978CD09C054BB1ABDFFBED09D1CF7EC + +I=21 +KEY=00000800000000000000000000000000 +CT=9F2A7CE5FD51FD5D7E2D42407EEF8F6A + +I=22 +KEY=00000400000000000000000000000000 +CT=6AA2F0627F312A77C68D1F15DF0E1379 + +I=23 +KEY=00000200000000000000000000000000 +CT=BCD56984E45DBF087BAC8757FC4EFF5A + +I=24 +KEY=00000100000000000000000000000000 +CT=9D3C6C8ED48C9DE7A64CD05D8BF41D54 + +I=25 +KEY=00000080000000000000000000000000 +CT=FCD577A23F455ACDE3732C262EBD2D86 + +I=26 +KEY=00000040000000000000000000000000 +CT=022E2430D81858888C9E575411D4064F + +I=27 +KEY=00000020000000000000000000000000 +CT=5742CA8CF1193491C1FBC148627D856E + +I=28 +KEY=00000010000000000000000000000000 +CT=88BD93610040DFE248C2FE05EF9F4FE0 + +I=29 +KEY=00000008000000000000000000000000 +CT=29A9D577BB3824209FEA64128247CE6C + +I=30 +KEY=00000004000000000000000000000000 +CT=AC4CDB534844EA86000B845FCDAD605F + +I=31 +KEY=00000002000000000000000000000000 +CT=AAC6098597D46B8145A60F40D4EC5308 + +I=32 +KEY=00000001000000000000000000000000 +CT=3A7DFD0855A5BE0B16CACBD685FACEF5 + +I=33 +KEY=00000000800000000000000000000000 +CT=ACEBA627EBA87AD051C3E0CA0DEF6CD7 + +I=34 +KEY=00000000400000000000000000000000 +CT=F0A55DCDBC513EFDD603EA455EB9228C + +I=35 +KEY=00000000200000000000000000000000 +CT=2176DEBC78D6B4A6D0FB37AFA6B51081 + +I=36 +KEY=00000000100000000000000000000000 +CT=FDB1B57379B85A85392613E8B4597B63 + +I=37 +KEY=00000000080000000000000000000000 +CT=58AB1112E0598586E07FC8359DDFC7EC + +I=38 +KEY=00000000040000000000000000000000 +CT=DD6D1D2629F333528CB66869453BC273 + +I=39 +KEY=00000000020000000000000000000000 +CT=932218D99553BB2D4BFC69F1EA67CAAE + +I=40 +KEY=00000000010000000000000000000000 +CT=399D066426F7FEF66F8983086DC044D8 + +I=41 +KEY=00000000008000000000000000000000 +CT=3E1BC58269B6B8C8C8D00806975F8337 + +I=42 +KEY=00000000004000000000000000000000 +CT=D50A1F966058C6D702D1AFCD700DA0E8 + +I=43 +KEY=00000000002000000000000000000000 +CT=6E7A6BB3554F12AD1F88C289D621CD0F + +I=44 +KEY=00000000001000000000000000000000 +CT=9ED4EA506A0CBA89B246C14D1B5B96A9 + +I=45 +KEY=00000000000800000000000000000000 +CT=C395A92C1A6884857B263F01F43542DB + +I=46 +KEY=00000000000400000000000000000000 +CT=06562AC497C60F802B68B47DB5B86B6A + +I=47 +KEY=00000000000200000000000000000000 +CT=255A726F2106177FEFA7006BDE05D059 + +I=48 +KEY=00000000000100000000000000000000 +CT=B8FD6A8227D0565A4C174AD270EC1205 + +I=49 +KEY=00000000000080000000000000000000 +CT=C2652FDB48B9DDBFC43B3F7CDD831D6F + +I=50 +KEY=00000000000040000000000000000000 +CT=913EB9205DB2E17A96A23A724EDF4C84 + +I=51 +KEY=00000000000020000000000000000000 +CT=9A6694FEB5EA44FF0572124FDB265658 + +I=52 +KEY=00000000000010000000000000000000 +CT=E347498DECA6B211C30E21FD0B47A333 + +I=53 +KEY=00000000000008000000000000000000 +CT=E70F0D4ED829A81E05D42E511EDE9376 + +I=54 +KEY=00000000000004000000000000000000 +CT=140BB7CAD8D6A3553BEF7A3D52347BD8 + +I=55 +KEY=00000000000002000000000000000000 +CT=5FA55360F440DCCA20925A3E15B42764 + +I=56 +KEY=00000000000001000000000000000000 +CT=6D5B969DFC3EA0A6682CC66488D221DA + +I=57 +KEY=00000000000000800000000000000000 +CT=E2799D5C380B49D2F6997009079D03D3 + +I=58 +KEY=00000000000000400000000000000000 +CT=06AFBD8077909E847AF467BB2D47E893 + +I=59 +KEY=00000000000000200000000000000000 +CT=46B1EB96EC9EB10897F1562E59287253 + +I=60 +KEY=00000000000000100000000000000000 +CT=1793F1D4E1A1606F99C7019C19E85129 + +I=61 +KEY=00000000000000080000000000000000 +CT=ED785D0BA19553CE73B69F4D570C3A9D + +I=62 +KEY=00000000000000040000000000000000 +CT=298DF7334670B7391BE203DF7E8890C7 + +I=63 +KEY=00000000000000020000000000000000 +CT=150C12DEF6EDC844B0B45361C2B3AECE + +I=64 +KEY=00000000000000010000000000000000 +CT=06FFB5E13438BA8DBD8A3EDADFAC73A1 + +I=65 +KEY=00000000000000008000000000000000 +CT=6C5E5719D5F31E929FF9C44F086EFADB + +I=66 +KEY=00000000000000004000000000000000 +CT=4C8D0E13996F4D32CB7984B7BB1B34FB + +I=67 +KEY=00000000000000002000000000000000 +CT=C9BDCFFD4B9F3BBBB33A2D2C51BA83F6 + +I=68 +KEY=00000000000000001000000000000000 +CT=929B29DD0D952161FFDA8CB417B166EC + +I=69 +KEY=00000000000000000800000000000000 +CT=87F9DFCB07275916E7A446D3DCE74232 + +I=70 +KEY=00000000000000000400000000000000 +CT=6FDFD0BC8F49BE420CD68A894C7CA4E9 + +I=71 +KEY=00000000000000000200000000000000 +CT=CDDC09DE42DC2CBCD9287A2072A30D23 + +I=72 +KEY=00000000000000000100000000000000 +CT=9B2FF668BA9D77AD1E9F30BA0173EBD4 + +I=73 +KEY=00000000000000000080000000000000 +CT=DEF29890D59A511B32A30322D7471E38 + +I=74 +KEY=00000000000000000040000000000000 +CT=5094EAEC9F23D0DBFAB8240A42ED5BF1 + +I=75 +KEY=00000000000000000020000000000000 +CT=79CB87BC375F58DE8DA780B9BAD3DEA3 + +I=76 +KEY=00000000000000000010000000000000 +CT=7139B3D980B85D3B77A3BBDB6CB79756 + +I=77 +KEY=00000000000000000008000000000000 +CT=148ED6E8FEC02168377C96956AE18D93 + +I=78 +KEY=00000000000000000004000000000000 +CT=0AFED5A710F2BF11C77F152951AE32CB + +I=79 +KEY=00000000000000000002000000000000 +CT=C265AC354817550FAE12A51C2DCD749C + +I=80 +KEY=00000000000000000001000000000000 +CT=A3B089F79D0A07EA0893BB48D508B35B + +I=81 +KEY=00000000000000000000800000000000 +CT=C0A7B6BCE0675A48E95D39A7659CB20A + +I=82 +KEY=00000000000000000000400000000000 +CT=6CE0A0BA02041CB5E6C0A46DE1B71A43 + +I=83 +KEY=00000000000000000000200000000000 +CT=E54045C33A386555C5754ADB0A181244 + +I=84 +KEY=00000000000000000000100000000000 +CT=BB652196955BB7BE7E8CB8E2E992A750 + +I=85 +KEY=00000000000000000000080000000000 +CT=594B2917DE6119B62BE3DDF10A1A47E0 + +I=86 +KEY=00000000000000000000040000000000 +CT=E8B4F95053617F6A10120DB196AAC4D1 + +I=87 +KEY=00000000000000000000020000000000 +CT=79646B1CC19708973215B9891A2C1019 + +I=88 +KEY=00000000000000000000010000000000 +CT=5E7E6175F6B548E5389C1B1C391CBEE2 + +I=89 +KEY=00000000000000000000008000000000 +CT=C0860A7B47544872B9DB5C220088DE5C + +I=90 +KEY=00000000000000000000004000000000 +CT=325163F073E5A27EBAF339B1FA53682D + +I=91 +KEY=00000000000000000000002000000000 +CT=1A0C4583CEFF5810F3AB42A471415A1D + +I=92 +KEY=00000000000000000000001000000000 +CT=F8DDF239D19363957C7C8C9B537893FA + +I=93 +KEY=00000000000000000000000800000000 +CT=D3B9999669509564741F236EEF2401F3 + +I=94 +KEY=00000000000000000000000400000000 +CT=3376DA406D82B76591B610C6C9FC3F9E + +I=95 +KEY=00000000000000000000000200000000 +CT=B6AD728D2970637642723FF06204EEAD + +I=96 +KEY=00000000000000000000000100000000 +CT=0ADF4A82FFE602BC13002AA8AB24EA71 + +I=97 +KEY=00000000000000000000000080000000 +CT=D80D1378E30036D92B4A359F68D0CBFE + +I=98 +KEY=00000000000000000000000040000000 +CT=EDA13B315897290E4ACEB4B513E9749B + +I=99 +KEY=00000000000000000000000020000000 +CT=34589936B79E4F43260DC6CCD1820D6D + +I=100 +KEY=00000000000000000000000010000000 +CT=C7A8FF65CD38D008EC6745897E010122 + +I=101 +KEY=00000000000000000000000008000000 +CT=3AFE23D89E79E9F8A54F103ED51EB14D + +I=102 +KEY=00000000000000000000000004000000 +CT=27994D1AA909806C7CC8E4AC4CD5479B + +I=103 +KEY=00000000000000000000000002000000 +CT=610D5528725B34FD70ADC66E83BAE266 + +I=104 +KEY=00000000000000000000000001000000 +CT=3A3064DFF6E0B54D864E81FA76270065 + +I=105 +KEY=00000000000000000000000000800000 +CT=5E9B5966ED3A2358005C9773F8690AD9 + +I=106 +KEY=00000000000000000000000000400000 +CT=713738F580CED6E358D2CDCEDA64F99F + +I=107 +KEY=00000000000000000000000000200000 +CT=EC7FE3578906291B2DCF0AD7FF8B5358 + +I=108 +KEY=00000000000000000000000000100000 +CT=0F714C096C244BED865A9E064576FE5D + +I=109 +KEY=00000000000000000000000000080000 +CT=B7C226C60B6F3031A1E2160823A62679 + +I=110 +KEY=00000000000000000000000000040000 +CT=5C78C4BC8F15DC964FE9EC75203AD7D8 + +I=111 +KEY=00000000000000000000000000020000 +CT=178FB7443FBD17DCF1AF122D4D117239 + +I=112 +KEY=00000000000000000000000000010000 +CT=C55C99851BD135155A080A9C4E54B919 + +I=113 +KEY=00000000000000000000000000008000 +CT=AD75C80D72EA278B3EDE380DAAB1F708 + +I=114 +KEY=00000000000000000000000000004000 +CT=95054D1ECA74F75515AE8C17941D3A54 + +I=115 +KEY=00000000000000000000000000002000 +CT=8E0B0D4F95C9C9D65420B4B1869A1D3E + +I=116 +KEY=00000000000000000000000000001000 +CT=7712EA2F0598CC8CFB9A934DEC848B5F + +I=117 +KEY=00000000000000000000000000000800 +CT=9D730E0F7450183C0804D6817CBE058E + +I=118 +KEY=00000000000000000000000000000400 +CT=3FA52E9B242F9AF61322FBB6BA583A01 + +I=119 +KEY=00000000000000000000000000000200 +CT=3D47D74F667D60458188922EE8D8A7A0 + +I=120 +KEY=00000000000000000000000000000100 +CT=036B4E4E02D84C56AC61007DAC33EC33 + +I=121 +KEY=00000000000000000000000000000080 +CT=4E171141E51234DE6E4B236643A6DC85 + +I=122 +KEY=00000000000000000000000000000040 +CT=DB720E7B04462829DFA258ED9E7C7F2F + +I=123 +KEY=00000000000000000000000000000020 +CT=8B10E11115FF4336DE57F2EA13AABBFA + +I=124 +KEY=00000000000000000000000000000010 +CT=F0E35BFF226C064E08368AF440298DB9 + +I=125 +KEY=00000000000000000000000000000008 +CT=6C4C8811B4DF74F2A7D7F79A6253CEA7 + +I=126 +KEY=00000000000000000000000000000004 +CT=7DD12AD3BC7A419F92753D8CC39637F0 + +I=127 +KEY=00000000000000000000000000000002 +CT=A465B01EA32B2F4F87C85FD06F9B0A02 + +I=128 +KEY=00000000000000000000000000000001 +CT=8DC902DDAE09F52B1A3A77EE89C1441E + +========== + +KEYSIZE=192 + +PT=00000000000000000000000000000000 + +I=1 +KEY=800000000000000000000000000000000000000000000000 +CT=B5AED133641004F4121B66E7DB8F2FF0 + +I=2 +KEY=400000000000000000000000000000000000000000000000 +CT=998110F200555A32C6C123E66CF87DE9 + +I=3 +KEY=200000000000000000000000000000000000000000000000 +CT=2DBAEEEC682DCC957C2D51B0990E123A + +I=4 +KEY=100000000000000000000000000000000000000000000000 +CT=BAEC0A31F6557D6D13B888A94F63058C + +I=5 +KEY=080000000000000000000000000000000000000000000000 +CT=E51ADC9773E785730586E6812A0F0FA5 + +I=6 +KEY=040000000000000000000000000000000000000000000000 +CT=97067E60FE010AEEA48C0D3224AD0941 + +I=7 +KEY=020000000000000000000000000000000000000000000000 +CT=BB73A7C859E6377A5E42EFCD55CD2C5B + +I=8 +KEY=010000000000000000000000000000000000000000000000 +CT=914BFE25D7FDEE49B46FB5C2B60DACA5 + +I=9 +KEY=008000000000000000000000000000000000000000000000 +CT=EFEF0047892A043A1D594118477CA513 + +I=10 +KEY=004000000000000000000000000000000000000000000000 +CT=BE59CF7C4E4B482843E67B4EB65B3038 + +I=11 +KEY=002000000000000000000000000000000000000000000000 +CT=35FFC8038CB124B8078EC5C7C7928F14 + +I=12 +KEY=001000000000000000000000000000000000000000000000 +CT=086025FC1CC6056367304C51DE871DEA + +I=13 +KEY=000800000000000000000000000000000000000000000000 +CT=950F0B7BDFFC78AE3AFF022F78E1670E + +I=14 +KEY=000400000000000000000000000000000000000000000000 +CT=CADF4568B43C950FB688C6608AAF5FAE + +I=15 +KEY=000200000000000000000000000000000000000000000000 +CT=E2313E3CFCB5E745EBAB983BF2867579 + +I=16 +KEY=000100000000000000000000000000000000000000000000 +CT=B4394412F7B4A1A4A22B73C93BAFD85D + +I=17 +KEY=000080000000000000000000000000000000000000000000 +CT=C014C9A992E6366B3BD2EABDF1508187 + +I=18 +KEY=000040000000000000000000000000000000000000000000 +CT=4344D702AC78A5808F4AB566D5509B75 + +I=19 +KEY=000020000000000000000000000000000000000000000000 +CT=937893DA40E9D7F2ECE9028FAA4DE6A4 + +I=20 +KEY=000010000000000000000000000000000000000000000000 +CT=E77874759C6AACB611B715A52A37234A + +I=21 +KEY=000008000000000000000000000000000000000000000000 +CT=841FC7FC0EF6CE08CFC6056B3C557F23 + +I=22 +KEY=000004000000000000000000000000000000000000000000 +CT=6AC04A6988F1CE601E4C48241D42C1CF + +I=23 +KEY=000002000000000000000000000000000000000000000000 +CT=5254F42B5DD207461693C278B6ABC855 + +I=24 +KEY=000001000000000000000000000000000000000000000000 +CT=F58B1AE230B417541649CB035FB5231C + +I=25 +KEY=000000800000000000000000000000000000000000000000 +CT=5F015060D28C6CCB2E5FDCB5AFDCF309 + +I=26 +KEY=000000400000000000000000000000000000000000000000 +CT=B0DBAA257FEFFE48A688FE247D0460B7 + +I=27 +KEY=000000200000000000000000000000000000000000000000 +CT=1235DF200338F96E39E881484B6B11EE + +I=28 +KEY=000000100000000000000000000000000000000000000000 +CT=671D87102E35609B32F40A91A7E29E04 + +I=29 +KEY=000000080000000000000000000000000000000000000000 +CT=F01FB3FA3E84DEA6057F3D88CD651876 + +I=30 +KEY=000000040000000000000000000000000000000000000000 +CT=B96C1E40D0D407ED90D11892503A296F + +I=31 +KEY=000000020000000000000000000000000000000000000000 +CT=2E27350191DE6C2E9DCC51022A3C96CB + +I=32 +KEY=000000010000000000000000000000000000000000000000 +CT=BDD6CFE5D00E7F8D698143E653A0163B + +I=33 +KEY=000000008000000000000000000000000000000000000000 +CT=FEDABEF20F51910E57CF5ECEF878A8E1 + +I=34 +KEY=000000004000000000000000000000000000000000000000 +CT=EEBF9FE247A78C6FF2A91428C54D70DA + +I=35 +KEY=000000002000000000000000000000000000000000000000 +CT=41714E55E90E0E154802FBBFC0BF58C5 + +I=36 +KEY=000000001000000000000000000000000000000000000000 +CT=69480F26BC5DFF8F6D8A0F10E0959BF1 + +I=37 +KEY=000000000800000000000000000000000000000000000000 +CT=A39E4BE5A7E13BA3C48CFD98A52CFA70 + +I=38 +KEY=000000000400000000000000000000000000000000000000 +CT=95809A16888FB49F5053375A6533CD58 + +I=39 +KEY=000000000200000000000000000000000000000000000000 +CT=5F0DEF37FB14F956BB31703F1FC968EB + +I=40 +KEY=000000000100000000000000000000000000000000000000 +CT=CF0A28C9598D7BBCA6992238B03EF4EB + +I=41 +KEY=000000000080000000000000000000000000000000000000 +CT=7FF241BA32E6878542978957F137856F + +I=42 +KEY=000000000040000000000000000000000000000000000000 +CT=8D489E0496B54F91A0254E4103804145 + +I=43 +KEY=000000000020000000000000000000000000000000000000 +CT=9925949BE93F4A0BF4114CCA2E05B566 + +I=44 +KEY=000000000010000000000000000000000000000000000000 +CT=6ED9A5F014FAFAE3D05C4AE027066873 + +I=45 +KEY=000000000008000000000000000000000000000000000000 +CT=958453307A371EE2D3DA8DD327D9B51B + +I=46 +KEY=000000000004000000000000000000000000000000000000 +CT=1EE0680BF9A798A1C63636EA917B17B5 + +I=47 +KEY=000000000002000000000000000000000000000000000000 +CT=C0CEFB2475B21AA8937E3048604D9928 + +I=48 +KEY=000000000001000000000000000000000000000000000000 +CT=9034DDEFF43C9CC82FADE8DE0A2476BB + +I=49 +KEY=000000000000800000000000000000000000000000000000 +CT=09D32779D0C8D02E0670F377187756FC + +I=50 +KEY=000000000000400000000000000000000000000000000000 +CT=6557BDB19F03E62D823C0613BEA0FAFB + +I=51 +KEY=000000000000200000000000000000000000000000000000 +CT=83505664DED694967F2D9E7853BC4B43 + +I=52 +KEY=000000000000100000000000000000000000000000000000 +CT=0BBABE3B7F381C3B3D8A9D846D8CCEAC + +I=53 +KEY=000000000000080000000000000000000000000000000000 +CT=E3AA0A67CDF79DBAB013103E39E8C822 + +I=54 +KEY=000000000000040000000000000000000000000000000000 +CT=AF3D0C9B673C322355480E8681237D13 + +I=55 +KEY=000000000000020000000000000000000000000000000000 +CT=60D325226EC8DFB9E08DFADB479649A0 + +I=56 +KEY=000000000000010000000000000000000000000000000000 +CT=845B92A3C56880E8007B452B57B73B75 + +I=57 +KEY=000000000000008000000000000000000000000000000000 +CT=76C59CD9185C518D65EC641EB73C6387 + +I=58 +KEY=000000000000004000000000000000000000000000000000 +CT=735567D0B8A52203492220804F3D62E6 + +I=59 +KEY=000000000000002000000000000000000000000000000000 +CT=E74FB07622191A053368131DA36FC299 + +I=60 +KEY=000000000000001000000000000000000000000000000000 +CT=3CFF40E0E9A86F67D938D2483BDD08F0 + +I=61 +KEY=000000000000000800000000000000000000000000000000 +CT=7C502AE730F5A9ABEACB15240EA1E8F6 + +I=62 +KEY=000000000000000400000000000000000000000000000000 +CT=0B3CA10C02E24BA82261E65BE4413512 + +I=63 +KEY=000000000000000200000000000000000000000000000000 +CT=F7D50E95931755A98B143AE254090F9D + +I=64 +KEY=000000000000000100000000000000000000000000000000 +CT=A4E84B8A7B8CC3766307D66A9C6AECB9 + +I=65 +KEY=000000000000000080000000000000000000000000000000 +CT=5298367E93E9B9CB5CF402A8BA9EFC62 + +I=66 +KEY=000000000000000040000000000000000000000000000000 +CT=03D44830C40510CE7866FB86FAC6E1DC + +I=67 +KEY=000000000000000020000000000000000000000000000000 +CT=978E4BA4EEA6739B1769FF4389F0367E + +I=68 +KEY=000000000000000010000000000000000000000000000000 +CT=707EF1166D2F11FD1519B37FB00D23EB + +I=69 +KEY=000000000000000008000000000000000000000000000000 +CT=435088DBDD8646A7FCA8851CA2FA1FB5 + +I=70 +KEY=000000000000000004000000000000000000000000000000 +CT=F3DC32DD6931A302391F9B992A5B6122 + +I=71 +KEY=000000000000000002000000000000000000000000000000 +CT=D93286DD8A05432614FD03169F36ED15 + +I=72 +KEY=000000000000000001000000000000000000000000000000 +CT=59F83FEA4BC9B24BF69A98CA3959CEFC + +I=73 +KEY=000000000000000000800000000000000000000000000000 +CT=A689BC3A8DB36A22763E911370C9DE2B + +I=74 +KEY=000000000000000000400000000000000000000000000000 +CT=04EB5BA604BA64DD112BCAE830C27966 + +I=75 +KEY=000000000000000000200000000000000000000000000000 +CT=7EF653E2D804E80BD678C3A6CB222625 + +I=76 +KEY=000000000000000000100000000000000000000000000000 +CT=A94EC287E7F70C6503DC0B891920C622 + +I=77 +KEY=000000000000000000080000000000000000000000000000 +CT=8A78497E9D18A365599444C972359F0D + +I=78 +KEY=000000000000000000040000000000000000000000000000 +CT=2F1832E285C8D24F226B50CCD71FE46A + +I=79 +KEY=000000000000000000020000000000000000000000000000 +CT=0B6675F4BD4BD6951BB96AF62D3C9B96 + +I=80 +KEY=000000000000000000010000000000000000000000000000 +CT=D6DEDAAAECE52984A261155ED7AF5290 + +I=81 +KEY=000000000000000000008000000000000000000000000000 +CT=7600A0FCF96F24A21419103466B937B5 + +I=82 +KEY=000000000000000000004000000000000000000000000000 +CT=C3E359420C4C4AF445C470AB347B3667 + +I=83 +KEY=000000000000000000002000000000000000000000000000 +CT=D915133DAA11BECB43E020266B709BEC + +I=84 +KEY=000000000000000000001000000000000000000000000000 +CT=A0001FC4E31664ED8C375644D02717AE + +I=85 +KEY=000000000000000000000800000000000000000000000000 +CT=D8E96A3F240666FC02F31E84CD1CEEF1 + +I=86 +KEY=000000000000000000000400000000000000000000000000 +CT=DE0B6B80C40ED4447E36A84A62EB235D + +I=87 +KEY=000000000000000000000200000000000000000000000000 +CT=8B15F04C34FC0F35F96C86837665CB38 + +I=88 +KEY=000000000000000000000100000000000000000000000000 +CT=02DAE104DA462934D87FDC73EB4011A9 + +I=89 +KEY=000000000000000000000080000000000000000000000000 +CT=B1ECC134EB7221CE00EBB977E08020E2 + +I=90 +KEY=000000000000000000000040000000000000000000000000 +CT=9F13CC1BF91C1B49AB6DDD7AF7A05ABA + +I=91 +KEY=000000000000000000000020000000000000000000000000 +CT=414D1178475679525B5EE7ED373E2A0A + +I=92 +KEY=000000000000000000000010000000000000000000000000 +CT=E69F2CC70EF18DBD360DFDD5C6573EBD + +I=93 +KEY=000000000000000000000008000000000000000000000000 +CT=FA45D9E00E4C221A14C359742AC25C35 + +I=94 +KEY=000000000000000000000004000000000000000000000000 +CT=BC2AC98007820862150CC1B1E3E11ED1 + +I=95 +KEY=000000000000000000000002000000000000000000000000 +CT=C7CABAB4D7DFFD44C5943EB8E9441C3D + +I=96 +KEY=000000000000000000000001000000000000000000000000 +CT=6DA6716020FDE292E8ADFB2A31BC6B24 + +I=97 +KEY=000000000000000000000000800000000000000000000000 +CT=9516AE03F102950795E1869E07BE0AFB + +I=98 +KEY=000000000000000000000000400000000000000000000000 +CT=4748E60F70C6172E5D5B0C21E67F366C + +I=99 +KEY=000000000000000000000000200000000000000000000000 +CT=40C7CC6385BB634FB68F73CCB5C446C2 + +I=100 +KEY=000000000000000000000000100000000000000000000000 +CT=7F0CE574F643711ECFC5011C0BCCD49A + +I=101 +KEY=000000000000000000000000080000000000000000000000 +CT=2628849CC2C62FEB305A1287F24B9693 + +I=102 +KEY=000000000000000000000000040000000000000000000000 +CT=6E8C11B5EA12D40CE9F83693314BD836 + +I=103 +KEY=000000000000000000000000020000000000000000000000 +CT=503FCDFCCB2AEBEEE6FB59326D06745E + +I=104 +KEY=000000000000000000000000010000000000000000000000 +CT=69698FE789F29872F0A4116CD8714255 + +I=105 +KEY=000000000000000000000000008000000000000000000000 +CT=3072C09636828285E7135E92B04C3601 + +I=106 +KEY=000000000000000000000000004000000000000000000000 +CT=00C19303036D6D3227B9C7AF806BEBDD + +I=107 +KEY=000000000000000000000000002000000000000000000000 +CT=E6B06BC172CA8892C8A04D6717AB08CE + +I=108 +KEY=000000000000000000000000001000000000000000000000 +CT=F7F08E268646EF8B9D728D422195A88B + +I=109 +KEY=000000000000000000000000000800000000000000000000 +CT=E6C0BEE988E017E708FF1A1DCFE38FC8 + +I=110 +KEY=000000000000000000000000000400000000000000000000 +CT=33D0841FC04A6394056AC82D68DBFA02 + +I=111 +KEY=000000000000000000000000000200000000000000000000 +CT=066AF29F6138FE67D676925DBC375ED1 + +I=112 +KEY=000000000000000000000000000100000000000000000000 +CT=60E1109A80F56DBCBCAC75AF9EE3A982 + +I=113 +KEY=000000000000000000000000000080000000000000000000 +CT=84E692562A2DBE9452CDC7F5F7DCD4E6 + +I=114 +KEY=000000000000000000000000000040000000000000000000 +CT=DA5C0CB7DE7C2A9DEFC76348955FB51B + +I=115 +KEY=000000000000000000000000000020000000000000000000 +CT=26AC1CB6870A598585E211852F9C980A + +I=116 +KEY=000000000000000000000000000010000000000000000000 +CT=49776D30C4A10352FF0FBA170F09F275 + +I=117 +KEY=000000000000000000000000000008000000000000000000 +CT=D02E72C408A05C89F80C9EC450419FBF + +I=118 +KEY=000000000000000000000000000004000000000000000000 +CT=993D122B38640477385BBFC79177C212 + +I=119 +KEY=000000000000000000000000000002000000000000000000 +CT=1482C5D53BE2F16634C22B9294D6E10B + +I=120 +KEY=000000000000000000000000000001000000000000000000 +CT=4B9518E3188D68E20266DCAA5B26337F + +I=121 +KEY=000000000000000000000000000000800000000000000000 +CT=7D6C9C9F375EDDE4A23D83B8B62E198F + +I=122 +KEY=000000000000000000000000000000400000000000000000 +CT=FCCE30A6961099AD269080FF07A24E1E + +I=123 +KEY=000000000000000000000000000000200000000000000000 +CT=C822629D39268498E02E6E4D642E7921 + +I=124 +KEY=000000000000000000000000000000100000000000000000 +CT=B96890D4CC0BD3C41A14D0547F98E077 + +I=125 +KEY=000000000000000000000000000000080000000000000000 +CT=78665BAC269A5DB3FFE165526A42F688 + +I=126 +KEY=000000000000000000000000000000040000000000000000 +CT=5EB1E7293616CD444011950212E53E78 + +I=127 +KEY=000000000000000000000000000000020000000000000000 +CT=FD682F200B2D5D17D177E785EBCE6C08 + +I=128 +KEY=000000000000000000000000000000010000000000000000 +CT=EAAEEA26A8AE037C288DDA6791580418 + +I=129 +KEY=000000000000000000000000000000008000000000000000 +CT=AA525000B28A88169212096B6D5FF58D + +I=130 +KEY=000000000000000000000000000000004000000000000000 +CT=09C8F1F28B94167498D9377CB9909458 + +I=131 +KEY=000000000000000000000000000000002000000000000000 +CT=847E4FFAD40194940A0F7FA0E34739B4 + +I=132 +KEY=000000000000000000000000000000001000000000000000 +CT=50DCE06E775C1A6DDA24B2A926C9EF8E + +I=133 +KEY=000000000000000000000000000000000800000000000000 +CT=3896FB03AF06F69CFDDDFBFCDF8E10A7 + +I=134 +KEY=000000000000000000000000000000000400000000000000 +CT=FED04C2F49DB4BE1D7BC5E187FB1612B + +I=135 +KEY=000000000000000000000000000000000200000000000000 +CT=69E749DFCA9AC8A990444E9FFB6CBA09 + +I=136 +KEY=000000000000000000000000000000000100000000000000 +CT=9B2262EBF59AB552E04D57A72FE6F013 + +I=137 +KEY=000000000000000000000000000000000080000000000000 +CT=8FF0BF7F0088916764CF9FF21E1BDA67 + +I=138 +KEY=000000000000000000000000000000000040000000000000 +CT=5DE1FF41440B4CA0EEF22C8C3F96F23F + +I=139 +KEY=000000000000000000000000000000000020000000000000 +CT=FEBE3209C8D61E85024DEF2122AF0268 + +I=140 +KEY=000000000000000000000000000000000010000000000000 +CT=DB63B702C6E39A283B64B90F36FBD426 + +I=141 +KEY=000000000000000000000000000000000008000000000000 +CT=BB364F05F769FFBFE18288BD782D20EB + +I=142 +KEY=000000000000000000000000000000000004000000000000 +CT=8A929CBDE0CD9A9545A08DA2D16BA838 + +I=143 +KEY=000000000000000000000000000000000002000000000000 +CT=C5AE232EB4F293497E79E20E436B5A4C + +I=144 +KEY=000000000000000000000000000000000001000000000000 +CT=3979A57AB9EB520E1475D745F897A9A9 + +I=145 +KEY=000000000000000000000000000000000000800000000000 +CT=469B440BBD0711C31B9AAA2564ECB68A + +I=146 +KEY=000000000000000000000000000000000000400000000000 +CT=260AC31933A32B75C13364E868FD84DB + +I=147 +KEY=000000000000000000000000000000000000200000000000 +CT=D5A76D2E0D00BE53B401ACB0EE70F8FB + +I=148 +KEY=000000000000000000000000000000000000100000000000 +CT=C3475809C89275DE82F9F22D59A3DA37 + +I=149 +KEY=000000000000000000000000000000000000080000000000 +CT=C9B8FBFBF1A120BF47D0F2F48DD23661 + +I=150 +KEY=000000000000000000000000000000000000040000000000 +CT=C662358CCCD46730D243DEE03B871DC3 + +I=151 +KEY=000000000000000000000000000000000000020000000000 +CT=F5BA874DAE43AD835B3F1344653411B6 + +I=152 +KEY=000000000000000000000000000000000000010000000000 +CT=F0185396A6A69D48BBEADFE5B644EED4 + +I=153 +KEY=000000000000000000000000000000000000008000000000 +CT=DA0DEC6F13B5AEFC056F5D040C5DA310 + +I=154 +KEY=000000000000000000000000000000000000004000000000 +CT=7E1DBDE7B45F9C3E01A285EA575AD5ED + +I=155 +KEY=000000000000000000000000000000000000002000000000 +CT=7A814893FBF78A6F5345F4E250DA454C + +I=156 +KEY=000000000000000000000000000000000000001000000000 +CT=8C8B9E24399A6DF8293B0117307D6084 + +I=157 +KEY=000000000000000000000000000000000000000800000000 +CT=11BB87A542E9135ECEB6143A07E0B65E + +I=158 +KEY=000000000000000000000000000000000000000400000000 +CT=495A92DB6E242E0A878EB4AC4C886802 + +I=159 +KEY=000000000000000000000000000000000000000200000000 +CT=97A5A7E3DAB800B3D4E7D468B4CCB951 + +I=160 +KEY=000000000000000000000000000000000000000100000000 +CT=C74D778D3F0440EB91981C23CC4F5669 + +I=161 +KEY=000000000000000000000000000000000000000080000000 +CT=1B485B0E4A063B844BC2AE8B722D0757 + +I=162 +KEY=000000000000000000000000000000000000000040000000 +CT=BF9D54F977A978797A4268CFC84132C4 + +I=163 +KEY=000000000000000000000000000000000000000020000000 +CT=90C50CB6D84B6A74F3D64A419B0419EA + +I=164 +KEY=000000000000000000000000000000000000000010000000 +CT=776EED1A9849173A7AC46E94C9B2681B + +I=165 +KEY=000000000000000000000000000000000000000008000000 +CT=A42F612CBF53529173E148ABA2B55D63 + +I=166 +KEY=000000000000000000000000000000000000000004000000 +CT=6F8B5F268B3DBEA72BF0D1F92B13684E + +I=167 +KEY=000000000000000000000000000000000000000002000000 +CT=9379DA858CEC7AC58856E7DBF79C4757 + +I=168 +KEY=000000000000000000000000000000000000000001000000 +CT=17FE109D4638A9E1FAF130D621C160CB + +I=169 +KEY=000000000000000000000000000000000000000000800000 +CT=2BCFAD82613FFD8D9BCBC539C1158BC9 + +I=170 +KEY=000000000000000000000000000000000000000000400000 +CT=8EA212BFBBF476CE35939066A7F1757D + +I=171 +KEY=000000000000000000000000000000000000000000200000 +CT=1BFAC7B1B8EB14C26ADA2055E0C9CD36 + +I=172 +KEY=000000000000000000000000000000000000000000100000 +CT=9FCA8C1340C47C586D6A2FAD9FAA6833 + +I=173 +KEY=000000000000000000000000000000000000000000080000 +CT=D22D10708CBA6566DC096B8ABE3F9679 + +I=174 +KEY=000000000000000000000000000000000000000000040000 +CT=1FFC5754FC94465A073B714267DEC18C + +I=175 +KEY=000000000000000000000000000000000000000000020000 +CT=FDED0173236B23DF4DFC1953355AA78E + +I=176 +KEY=000000000000000000000000000000000000000000010000 +CT=FBE9178C4B27E51E24BF17053724AA2F + +I=177 +KEY=000000000000000000000000000000000000000000008000 +CT=F02818D3D58D1F3345594670D3009DF4 + +I=178 +KEY=000000000000000000000000000000000000000000004000 +CT=6E148020BAB1DD04492299F6A9D9BA22 + +I=179 +KEY=000000000000000000000000000000000000000000002000 +CT=8E045AE3022AF7562106681B2B8CB70E + +I=180 +KEY=000000000000000000000000000000000000000000001000 +CT=2C73832593114BF299424E30C5848625 + +I=181 +KEY=000000000000000000000000000000000000000000000800 +CT=127FC7BCF85F44F5041158A5EB3D040C + +I=182 +KEY=000000000000000000000000000000000000000000000400 +CT=B25FABDA9D6E6704F23F33B0D907B762 + +I=183 +KEY=000000000000000000000000000000000000000000000200 +CT=21B968BF3EFFC638F54BC1524D8D378F + +I=184 +KEY=000000000000000000000000000000000000000000000100 +CT=18F3BEB5D5A6B6AC512752AAA65EA3BD + +I=185 +KEY=000000000000000000000000000000000000000000000080 +CT=5588729059256CE49AF2DA14EE4C9D00 + +I=186 +KEY=000000000000000000000000000000000000000000000040 +CT=A6EBD68D0A6F46DA22CD17D4B55BC4FE + +I=187 +KEY=000000000000000000000000000000000000000000000020 +CT=50434829C09BFB7C174E1BE33642FEFB + +I=188 +KEY=000000000000000000000000000000000000000000000010 +CT=682C20B72DDFE4F678B2379FA25715CA + +I=189 +KEY=000000000000000000000000000000000000000000000008 +CT=925721E954372C9EA115BFF97BBE9A12 + +I=190 +KEY=000000000000000000000000000000000000000000000004 +CT=32929E53C8E8D85657B9B55A4911028C + +I=191 +KEY=000000000000000000000000000000000000000000000002 +CT=8EE624F18BF5AA25ACE8667643D0D80D + +I=192 +KEY=000000000000000000000000000000000000000000000001 +CT=30A61DCEB9A951B829DE01414A801807 + +========== + +KEYSIZE=256 + +PT=00000000000000000000000000000000 + +I=1 +KEY=8000000000000000000000000000000000000000000000000000000000000000 +CT=785229B51B515F30A1FCC88B969A4E47 + +I=2 +KEY=4000000000000000000000000000000000000000000000000000000000000000 +CT=B095E0619E70CDF5F4BC6E88079CF22F + +I=3 +KEY=2000000000000000000000000000000000000000000000000000000000000000 +CT=44F32AEAE82516AC8857C1985B7109EC + +I=4 +KEY=1000000000000000000000000000000000000000000000000000000000000000 +CT=B2BBE93B433C8F0415B90282E788C071 + +I=5 +KEY=0800000000000000000000000000000000000000000000000000000000000000 +CT=9E953EBAA3B13F43F90908B53DAA0C09 + +I=6 +KEY=0400000000000000000000000000000000000000000000000000000000000000 +CT=4579140290095FB25B3144444505D203 + +I=7 +KEY=0200000000000000000000000000000000000000000000000000000000000000 +CT=5FD5F687596A9AA9EA105A2F7CF59A94 + +I=8 +KEY=0100000000000000000000000000000000000000000000000000000000000000 +CT=005EA3AF8AFF3DDA323148690537853C + +I=9 +KEY=0080000000000000000000000000000000000000000000000000000000000000 +CT=CD8E33C4F06FC0586E821522B2FEB08D + +I=10 +KEY=0040000000000000000000000000000000000000000000000000000000000000 +CT=CABEC07E46D11086778C3E1937CD0797 + +I=11 +KEY=0020000000000000000000000000000000000000000000000000000000000000 +CT=56BA650835E125201400380C4D2D5D99 + +I=12 +KEY=0010000000000000000000000000000000000000000000000000000000000000 +CT=EB48A1B279E95EBF8FAAC13D70F8F452 + +I=13 +KEY=0008000000000000000000000000000000000000000000000000000000000000 +CT=E52435C29F7C9687B268C539BF6598B1 + +I=14 +KEY=0004000000000000000000000000000000000000000000000000000000000000 +CT=27785BDF6F6258EAC396BFD0F56BEE82 + +I=15 +KEY=0002000000000000000000000000000000000000000000000000000000000000 +CT=CA16B1969FA373F43EF09D19B3379F3F + +I=16 +KEY=0001000000000000000000000000000000000000000000000000000000000000 +CT=6D1B6F14090368034E10CF0C1E4F5744 + +I=17 +KEY=0000800000000000000000000000000000000000000000000000000000000000 +CT=5AE3ABA331C5D765E3D112B1DA09E7BC + +I=18 +KEY=0000400000000000000000000000000000000000000000000000000000000000 +CT=767F9CBDA1BA9914EBA40D7A172A4077 + +I=19 +KEY=0000200000000000000000000000000000000000000000000000000000000000 +CT=8FAE713F677A82075D773DB73D58763E + +I=20 +KEY=0000100000000000000000000000000000000000000000000000000000000000 +CT=616CA9A15D710CA38FCA9A8E0B16A21C + +I=21 +KEY=0000080000000000000000000000000000000000000000000000000000000000 +CT=D36754729DB34ECA1ECAC2CE2B381713 + +I=22 +KEY=0000040000000000000000000000000000000000000000000000000000000000 +CT=E68E3A421462A49AF8D7E544F7789301 + +I=23 +KEY=0000020000000000000000000000000000000000000000000000000000000000 +CT=69B24511DF9BE48CFDB416F08908315F + +I=24 +KEY=0000010000000000000000000000000000000000000000000000000000000000 +CT=1329EA7551CE6C335DB924D563694058 + +I=25 +KEY=0000008000000000000000000000000000000000000000000000000000000000 +CT=74DA788FB7A6172B65FBB62C7ED4FECC + +I=26 +KEY=0000004000000000000000000000000000000000000000000000000000000000 +CT=862703854F75F433135601000CD9363B + +I=27 +KEY=0000002000000000000000000000000000000000000000000000000000000000 +CT=824D4C002C401677D5785D6C6DA96C68 + +I=28 +KEY=0000001000000000000000000000000000000000000000000000000000000000 +CT=7F9F21E8C45D1E8A843060B963CC628B + +I=29 +KEY=0000000800000000000000000000000000000000000000000000000000000000 +CT=3F6F7B1157906913B09BD2AE2627C6B0 + +I=30 +KEY=0000000400000000000000000000000000000000000000000000000000000000 +CT=A1B7E0CC8B69B3C0C6F635F962D0A22F + +I=31 +KEY=0000000200000000000000000000000000000000000000000000000000000000 +CT=6FC34DDFF0C74674CE124D85E8A3447F + +I=32 +KEY=0000000100000000000000000000000000000000000000000000000000000000 +CT=436A5D315AF443DEA9BEF8D1E817E7E0 + +I=33 +KEY=0000000080000000000000000000000000000000000000000000000000000000 +CT=8B0434C9C98CDA4B313DAD6F1E64A943 + +I=34 +KEY=0000000040000000000000000000000000000000000000000000000000000000 +CT=AF9BD15EF1535259C63D688BF67119C4 + +I=35 +KEY=0000000020000000000000000000000000000000000000000000000000000000 +CT=F61EF2509D173E348E01839A26D033FF + +I=36 +KEY=0000000010000000000000000000000000000000000000000000000000000000 +CT=9D37D036C8568D2173654423CC7AAB39 + +I=37 +KEY=0000000008000000000000000000000000000000000000000000000000000000 +CT=A93D98C055DDAA592390CADB0F0C468D + +I=38 +KEY=0000000004000000000000000000000000000000000000000000000000000000 +CT=F19CB2A5067E9FBADBD4F0D103007A54 + +I=39 +KEY=0000000002000000000000000000000000000000000000000000000000000000 +CT=83C5D584511836263D8B0DE7CEF0AD16 + +I=40 +KEY=0000000001000000000000000000000000000000000000000000000000000000 +CT=E09206EB6A5E8AC933BAAB46547E4CD9 + +I=41 +KEY=0000000000800000000000000000000000000000000000000000000000000000 +CT=0A0EBA6ACED7899AA633CE67E8923936 + +I=42 +KEY=0000000000400000000000000000000000000000000000000000000000000000 +CT=C93968EC0EE02DACD3F3EE9AC2320B88 + +I=43 +KEY=0000000000200000000000000000000000000000000000000000000000000000 +CT=64D62934D409F36505EEC3B925BE914D + +I=44 +KEY=0000000000100000000000000000000000000000000000000000000000000000 +CT=BBADB03D5F0FCF375E671F8B009F3AF1 + +I=45 +KEY=0000000000080000000000000000000000000000000000000000000000000000 +CT=DAC60B05A1C3A203C6B4FE882E780079 + +I=46 +KEY=0000000000040000000000000000000000000000000000000000000000000000 +CT=8B650EC280BE261CCED5B5FC7F8A9BA7 + +I=47 +KEY=0000000000020000000000000000000000000000000000000000000000000000 +CT=35EB82F0BB6735E2DE661AE4E9E9EE57 + +I=48 +KEY=0000000000010000000000000000000000000000000000000000000000000000 +CT=40B1042CBE87D64DDBEA4BAC8CF1F08C + +I=49 +KEY=0000000000008000000000000000000000000000000000000000000000000000 +CT=13D46AE35D868401D23C891ED92621EE + +I=50 +KEY=0000000000004000000000000000000000000000000000000000000000000000 +CT=D2C6E9C239B4FA5A1E76D038EA4660F3 + +I=51 +KEY=0000000000002000000000000000000000000000000000000000000000000000 +CT=DE3BC7CDFAF9AB7143E255DC87645F3E + +I=52 +KEY=0000000000001000000000000000000000000000000000000000000000000000 +CT=8FB6CA966B5ACFB180A296EA5D93711F + +I=53 +KEY=0000000000000800000000000000000000000000000000000000000000000000 +CT=59F622ACBBA15E522717A9EAF7047949 + +I=54 +KEY=0000000000000400000000000000000000000000000000000000000000000000 +CT=BB2939FFBD77B308DA93220AD68A21AC + +I=55 +KEY=0000000000000200000000000000000000000000000000000000000000000000 +CT=CEBE5EDD9BACF0A0FB75B259DE7097CD + +I=56 +KEY=0000000000000100000000000000000000000000000000000000000000000000 +CT=3448844E63AC2BD809E254AC3BAA6B3B + +I=57 +KEY=0000000000000080000000000000000000000000000000000000000000000000 +CT=49C27499EEC1989626B1E50435BA0273 + +I=58 +KEY=0000000000000040000000000000000000000000000000000000000000000000 +CT=39E97018F547A8A802578B80952F2457 + +I=59 +KEY=0000000000000020000000000000000000000000000000000000000000000000 +CT=9934453FBAAE1CB362A0012204967AE8 + +I=60 +KEY=0000000000000010000000000000000000000000000000000000000000000000 +CT=E9C98A03713835EB4497346866791190 + +I=61 +KEY=0000000000000008000000000000000000000000000000000000000000000000 +CT=E026C858938B47D28A8758CCFAEF0FA8 + +I=62 +KEY=0000000000000004000000000000000000000000000000000000000000000000 +CT=3A84B0A26CEA6A8D8A94D5B791A0D3E8 + +I=63 +KEY=0000000000000002000000000000000000000000000000000000000000000000 +CT=B054259980B45B9D2D7CD6C13200BAFC + +I=64 +KEY=0000000000000001000000000000000000000000000000000000000000000000 +CT=13645DBEDE21FF7C79C06141AD9E4CD1 + +I=65 +KEY=0000000000000000800000000000000000000000000000000000000000000000 +CT=F29B1370BA8D8CC19AC8DF5DF77F7319 + +I=66 +KEY=0000000000000000400000000000000000000000000000000000000000000000 +CT=6A2C94C488D5BD32742F143B2E8D0659 + +I=67 +KEY=0000000000000000200000000000000000000000000000000000000000000000 +CT=27A0BF748F513F18D4F7831527A3608F + +I=68 +KEY=0000000000000000100000000000000000000000000000000000000000000000 +CT=0B0D61E162A88E04C38C19CA668C2DDC + +I=69 +KEY=0000000000000000080000000000000000000000000000000000000000000000 +CT=4055BA24216EF49FE36E6145A5CD31D4 + +I=70 +KEY=0000000000000000040000000000000000000000000000000000000000000000 +CT=99699B31EBBE6ABE1F7B2AFEC86DC7E2 + +I=71 +KEY=0000000000000000020000000000000000000000000000000000000000000000 +CT=C8D70448CBA770CD94088F60CBF8C5AC + +I=72 +KEY=0000000000000000010000000000000000000000000000000000000000000000 +CT=56C89F1BA6D3AB20465F01F81D00A894 + +I=73 +KEY=0000000000000000008000000000000000000000000000000000000000000000 +CT=919FC5BBFAB8C31F8B2A346FBC2AB282 + +I=74 +KEY=0000000000000000004000000000000000000000000000000000000000000000 +CT=FF57E3AB8751DAA252DD0DD917BEAD8B + +I=75 +KEY=0000000000000000002000000000000000000000000000000000000000000000 +CT=90B94853B317FFA8D41F2A32A3A061AB + +I=76 +KEY=0000000000000000001000000000000000000000000000000000000000000000 +CT=F4A0257D0CF6C8C87D154746C2C94B52 + +I=77 +KEY=0000000000000000000800000000000000000000000000000000000000000000 +CT=03666F848F252B501754773CB68CF3B2 + +I=78 +KEY=0000000000000000000400000000000000000000000000000000000000000000 +CT=F3D0941DDC7412A981C5F6CCAB082DC2 + +I=79 +KEY=0000000000000000000200000000000000000000000000000000000000000000 +CT=21EDD2A11C57EE97AEADFACEC20A8691 + +I=80 +KEY=0000000000000000000100000000000000000000000000000000000000000000 +CT=577CF09B5606F1443E8B57952004C68D + +I=81 +KEY=0000000000000000000080000000000000000000000000000000000000000000 +CT=0CF408A2FBDA07068BDB13A371867FCC + +I=82 +KEY=0000000000000000000040000000000000000000000000000000000000000000 +CT=88542C9E680C27FE8FBE090AD73410B9 + +I=83 +KEY=0000000000000000000020000000000000000000000000000000000000000000 +CT=7A8BA6DC89A1AD4385D0696AFDD89496 + +I=84 +KEY=0000000000000000000010000000000000000000000000000000000000000000 +CT=B84FA0FA046D5D77EA94CF3E8FDED147 + +I=85 +KEY=0000000000000000000008000000000000000000000000000000000000000000 +CT=D73CB079FB7101C933176352A93BB028 + +I=86 +KEY=0000000000000000000004000000000000000000000000000000000000000000 +CT=A7C8C1A59E141D608BC91BB69E7B2859 + +I=87 +KEY=0000000000000000000002000000000000000000000000000000000000000000 +CT=B2DA67AFE49B33E5EDFAF148A17BF06B + +I=88 +KEY=0000000000000000000001000000000000000000000000000000000000000000 +CT=AC2DB35ED86D358616648D22B52DF012 + +I=89 +KEY=0000000000000000000000800000000000000000000000000000000000000000 +CT=662EA9D88A9A2C89581502EAAAD074D5 + +I=90 +KEY=0000000000000000000000400000000000000000000000000000000000000000 +CT=773A30DFDA8EBCE50EDFB925343C9ECC + +I=91 +KEY=0000000000000000000000200000000000000000000000000000000000000000 +CT=10B7242D9C7CA610C20F1183BB949514 + +I=92 +KEY=0000000000000000000000100000000000000000000000000000000000000000 +CT=B7DF971F9C3444EFCC13210292126942 + +I=93 +KEY=0000000000000000000000080000000000000000000000000000000000000000 +CT=13F7406746C6E0CD5666EC04C0E540E2 + +I=94 +KEY=0000000000000000000000040000000000000000000000000000000000000000 +CT=9382384DCAF80CF537E24FC5F2F71A8A + +I=95 +KEY=0000000000000000000000020000000000000000000000000000000000000000 +CT=3D5819934619E09F10E90C4EA7F30F40 + +I=96 +KEY=0000000000000000000000010000000000000000000000000000000000000000 +CT=710446D0A254F68975CD6AAAE92212FD + +I=97 +KEY=0000000000000000000000008000000000000000000000000000000000000000 +CT=0A44FDEAA17E5F3E536A08D7A5B3267B + +I=98 +KEY=0000000000000000000000004000000000000000000000000000000000000000 +CT=BAC72F53EE39296D3A23B126F8D8B20B + +I=99 +KEY=0000000000000000000000002000000000000000000000000000000000000000 +CT=88C342961D0EE83902CB78C29539923D + +I=100 +KEY=0000000000000000000000001000000000000000000000000000000000000000 +CT=CF3B48A6351C4561752D6A209F93A30F + +I=101 +KEY=0000000000000000000000000800000000000000000000000000000000000000 +CT=957B107D23F3694F3FFD9957BBE13168 + +I=102 +KEY=0000000000000000000000000400000000000000000000000000000000000000 +CT=23675E18C1C66B483D55E14AC7F9CC80 + +I=103 +KEY=0000000000000000000000000200000000000000000000000000000000000000 +CT=955B8619F99F7609201CEEB338F32795 + +I=104 +KEY=0000000000000000000000000100000000000000000000000000000000000000 +CT=9F2BCB0C28768DA3B76206979B14EBC2 + +I=105 +KEY=0000000000000000000000000080000000000000000000000000000000000000 +CT=258F95A0E86EE0EE8FC020B4A01900F2 + +I=106 +KEY=0000000000000000000000000040000000000000000000000000000000000000 +CT=FD7B1DD7C7FE279E6A5E2926DD890B5E + +I=107 +KEY=0000000000000000000000000020000000000000000000000000000000000000 +CT=59CF38A7C863C623991B5392944CB43C + +I=108 +KEY=0000000000000000000000000010000000000000000000000000000000000000 +CT=27BCC9206AEC78DA48C1E9AB8D1A7A07 + +I=109 +KEY=0000000000000000000000000008000000000000000000000000000000000000 +CT=62D8460820B18811DEBB617DE7B8EC8C + +I=110 +KEY=0000000000000000000000000004000000000000000000000000000000000000 +CT=782D8A4D30EE841EDB2E7E88C63B851A + +I=111 +KEY=0000000000000000000000000002000000000000000000000000000000000000 +CT=4D10D177334397F49211BCB10F207905 + +I=112 +KEY=0000000000000000000000000001000000000000000000000000000000000000 +CT=C8E608BAFE61254A0DDF866BB4D063DD + +I=113 +KEY=0000000000000000000000000000800000000000000000000000000000000000 +CT=05DDAB3DAEA0C64C1077BE22DA7ACDD4 + +I=114 +KEY=0000000000000000000000000000400000000000000000000000000000000000 +CT=951388F2BE1DD7013A00327FC6DB7905 + +I=115 +KEY=0000000000000000000000000000200000000000000000000000000000000000 +CT=62F8283651EFDF475DE8511EA7256AD6 + +I=116 +KEY=0000000000000000000000000000100000000000000000000000000000000000 +CT=5B259EEE6B19EE12D4CE20D2F38D4BCF + +I=117 +KEY=0000000000000000000000000000080000000000000000000000000000000000 +CT=704414E13DCAD9DF7F593F630E68E13C + +I=118 +KEY=0000000000000000000000000000040000000000000000000000000000000000 +CT=41AD9DAAC24ECCBB454DBAF75D5B9989 + +I=119 +KEY=0000000000000000000000000000020000000000000000000000000000000000 +CT=919C54C126B54D7A570D8ABA9FCE5D08 + +I=120 +KEY=0000000000000000000000000000010000000000000000000000000000000000 +CT=BC665541FF0F2E86DBDF4444C01AC0EA + +I=121 +KEY=0000000000000000000000000000008000000000000000000000000000000000 +CT=FD30E2D851211506C112D5701B859BC6 + +I=122 +KEY=0000000000000000000000000000004000000000000000000000000000000000 +CT=7DB7B15E4ACBDBB0BFF4C4EAEDC2231E + +I=123 +KEY=0000000000000000000000000000002000000000000000000000000000000000 +CT=F0AFDED56AD72D4C1E57A66EEDF4816E + +I=124 +KEY=0000000000000000000000000000001000000000000000000000000000000000 +CT=E53B053D9B2E06656138D4A1EFA58888 + +I=125 +KEY=0000000000000000000000000000000800000000000000000000000000000000 +CT=4DABE13A3E656E95150440F81DD92666 + +I=126 +KEY=0000000000000000000000000000000400000000000000000000000000000000 +CT=175D44DFDE1EAD6E0E6862B511AA7007 + +I=127 +KEY=0000000000000000000000000000000200000000000000000000000000000000 +CT=09B690F493F5C779E8B6ACD09667A997 + +I=128 +KEY=0000000000000000000000000000000100000000000000000000000000000000 +CT=68D0E4CCA0119EED57ABF3C7574BDA8B + +I=129 +KEY=0000000000000000000000000000000080000000000000000000000000000000 +CT=12C00618DA7EBA5EFA5E58D2696D891F + +I=130 +KEY=0000000000000000000000000000000040000000000000000000000000000000 +CT=5DCE21AF0D23BC5AEFD4EA331B16219A + +I=131 +KEY=0000000000000000000000000000000020000000000000000000000000000000 +CT=A5D7135A053B904D44B40E4E21693751 + +I=132 +KEY=0000000000000000000000000000000010000000000000000000000000000000 +CT=3257CEC675BF755FEE67A44D7EDF2731 + +I=133 +KEY=0000000000000000000000000000000008000000000000000000000000000000 +CT=324D30DDC6979F17A3BEAEA3A76AD44C + +I=134 +KEY=0000000000000000000000000000000004000000000000000000000000000000 +CT=A1AA0E04E2B61861796FD2AA30FBEB05 + +I=135 +KEY=0000000000000000000000000000000002000000000000000000000000000000 +CT=90CA81DF4000404B567F5CFA9D193CB3 + +I=136 +KEY=0000000000000000000000000000000001000000000000000000000000000000 +CT=A2E6864259483D059B57BB921B7FBD99 + +I=137 +KEY=0000000000000000000000000000000000800000000000000000000000000000 +CT=545690C09C8C396F1273510DA9065C12 + +I=138 +KEY=0000000000000000000000000000000000400000000000000000000000000000 +CT=16D86FCC5910E2DD0CEA4DD5219B2D03 + +I=139 +KEY=0000000000000000000000000000000000200000000000000000000000000000 +CT=EC4114C19DD5711CD927B0DBE34AAB4B + +I=140 +KEY=0000000000000000000000000000000000100000000000000000000000000000 +CT=A78C62D8FD439E5B10A7EF436714AC22 + +I=141 +KEY=0000000000000000000000000000000000080000000000000000000000000000 +CT=BA5D708CBA34F782DA00C7643C971DB9 + +I=142 +KEY=0000000000000000000000000000000000040000000000000000000000000000 +CT=7DB9ADCFA26C1E784E7F485BD0A0A52C + +I=143 +KEY=0000000000000000000000000000000000020000000000000000000000000000 +CT=8A025CED99AF1047C5345358A291CDBB + +I=144 +KEY=0000000000000000000000000000000000010000000000000000000000000000 +CT=187A1824D390AD2798E4F2264E5F1F21 + +I=145 +KEY=0000000000000000000000000000000000008000000000000000000000000000 +CT=BA28DE5C32353C65B97A59889E7A7A40 + +I=146 +KEY=0000000000000000000000000000000000004000000000000000000000000000 +CT=5D486AB86A883029EC74916851FFFA11 + +I=147 +KEY=0000000000000000000000000000000000002000000000000000000000000000 +CT=F9C79D54CEEE6170B195F4D30FA63FE0 + +I=148 +KEY=0000000000000000000000000000000000001000000000000000000000000000 +CT=96B8429F476485F8CC2E204534A8B64E + +I=149 +KEY=0000000000000000000000000000000000000800000000000000000000000000 +CT=13061D65FEF26F5ACAAF3B55FDB98C36 + +I=150 +KEY=0000000000000000000000000000000000000400000000000000000000000000 +CT=C72DC86F70B40169B3456783A611DAE9 + +I=151 +KEY=0000000000000000000000000000000000000200000000000000000000000000 +CT=82AA2DB6FEE9212968D8282A1BF3242B + +I=152 +KEY=0000000000000000000000000000000000000100000000000000000000000000 +CT=220C8B197F54F8E86DAE575B07A570EF + +I=153 +KEY=0000000000000000000000000000000000000080000000000000000000000000 +CT=873C47F6F75BE9F710F91F2C54A69A7A + +I=154 +KEY=0000000000000000000000000000000000000040000000000000000000000000 +CT=0392FA7BB908FEF23774772F74AC968D + +I=155 +KEY=0000000000000000000000000000000000000020000000000000000000000000 +CT=A94203746A266C5744C16BF4E8DFA6D7 + +I=156 +KEY=0000000000000000000000000000000000000010000000000000000000000000 +CT=D3BA78AD6B01CC7221FA7778699C8316 + +I=157 +KEY=0000000000000000000000000000000000000008000000000000000000000000 +CT=994FDCC09C25400D14C05117B936EECD + +I=158 +KEY=0000000000000000000000000000000000000004000000000000000000000000 +CT=4012F67B2A0BEF2623CA6AC5B054BE62 + +I=159 +KEY=0000000000000000000000000000000000000002000000000000000000000000 +CT=1134AF65E6D3D5E3D3C23A499EE2F677 + +I=160 +KEY=0000000000000000000000000000000000000001000000000000000000000000 +CT=6B35A344BD8DFD4002F5F22EA288F8E6 + +I=161 +KEY=0000000000000000000000000000000000000000800000000000000000000000 +CT=D293D438C563B8EB3FF26E23A7323B74 + +I=162 +KEY=0000000000000000000000000000000000000000400000000000000000000000 +CT=8085B7A7B939FA37BC4E1D746E9F9B37 + +I=163 +KEY=0000000000000000000000000000000000000000200000000000000000000000 +CT=D628AD150E15F413010BE15E391D3F48 + +I=164 +KEY=0000000000000000000000000000000000000000100000000000000000000000 +CT=A5C2AC88B6FD4C57CB4F2C2920A584EF + +I=165 +KEY=0000000000000000000000000000000000000000080000000000000000000000 +CT=D7F5183F6BAB04B87A1ABAA3914DA848 + +I=166 +KEY=0000000000000000000000000000000000000000040000000000000000000000 +CT=3B2116BD2E362FC8985A0F0C618DF58A + +I=167 +KEY=0000000000000000000000000000000000000000020000000000000000000000 +CT=BF31E8DE8342A32BBD80A8F91507BADA + +I=168 +KEY=0000000000000000000000000000000000000000010000000000000000000000 +CT=AA04A56C13507AE5137657546766AE2D + +I=169 +KEY=0000000000000000000000000000000000000000008000000000000000000000 +CT=72B9D7628AB21DF89666E50517C50574 + +I=170 +KEY=0000000000000000000000000000000000000000004000000000000000000000 +CT=2B8DE8D2D3332E6A30215ACC10A69847 + +I=171 +KEY=0000000000000000000000000000000000000000002000000000000000000000 +CT=AC421C73A789D79B452623DAFD3D6D0B + +I=172 +KEY=0000000000000000000000000000000000000000001000000000000000000000 +CT=995207D8CF8C10904C0F47652C9C4287 + +I=173 +KEY=0000000000000000000000000000000000000000000800000000000000000000 +CT=F83BD19A357BD7901C0E8FBEFCF857ED + +I=174 +KEY=0000000000000000000000000000000000000000000400000000000000000000 +CT=F42BB427C894A072C861C1425CBD71BC + +I=175 +KEY=0000000000000000000000000000000000000000000200000000000000000000 +CT=3D1EC73B166DC0120DDF24267907C0F9 + +I=176 +KEY=0000000000000000000000000000000000000000000100000000000000000000 +CT=8EF136AF5D7D1B513FB59FA21F7837A1 + +I=177 +KEY=0000000000000000000000000000000000000000000080000000000000000000 +CT=EB4BBA7F94CE9429255A583D2F9810CD + +I=178 +KEY=0000000000000000000000000000000000000000000040000000000000000000 +CT=5FE1C3BCD24818948514CB5A32FFD0A1 + +I=179 +KEY=0000000000000000000000000000000000000000000020000000000000000000 +CT=A990117E78D1C5BD7833B96A4A180744 + +I=180 +KEY=0000000000000000000000000000000000000000000010000000000000000000 +CT=E63684CDC37E6768C45012EA00D008E4 + +I=181 +KEY=0000000000000000000000000000000000000000000008000000000000000000 +CT=78B711F290DA924CAF1E4F1E11A08F4F + +I=182 +KEY=0000000000000000000000000000000000000000000004000000000000000000 +CT=85B7F0D391AF9268643D9C0B72433A99 + +I=183 +KEY=0000000000000000000000000000000000000000000002000000000000000000 +CT=F51410475B33FBD3DB2117B5C17C82D4 + +I=184 +KEY=0000000000000000000000000000000000000000000001000000000000000000 +CT=A3C5BF72F39940DC7DAFB474A77A6114 + +I=185 +KEY=0000000000000000000000000000000000000000000000800000000000000000 +CT=4EFB0E18FB2F96FB6F81514BCE0A7BBD + +I=186 +KEY=0000000000000000000000000000000000000000000000400000000000000000 +CT=10112F5ABBF246996860B843FC7159F5 + +I=187 +KEY=0000000000000000000000000000000000000000000000200000000000000000 +CT=94A91373701569B8C21487A7BDB164B6 + +I=188 +KEY=0000000000000000000000000000000000000000000000100000000000000000 +CT=A466821BD64F552C0610ADB737C562CD + +I=189 +KEY=0000000000000000000000000000000000000000000000080000000000000000 +CT=511BE2BA9F2A272CA2F5C1D0F3E249C1 + +I=190 +KEY=0000000000000000000000000000000000000000000000040000000000000000 +CT=5578CCF8B92D48363EED4601661EB56E + +I=191 +KEY=0000000000000000000000000000000000000000000000020000000000000000 +CT=BF90E87173A45115C811B6319C24FC4A + +I=192 +KEY=0000000000000000000000000000000000000000000000010000000000000000 +CT=8029EE840D130319330B432D95DB9AA7 + +I=193 +KEY=0000000000000000000000000000000000000000000000008000000000000000 +CT=19D6D9F45582481A573D77917E778F3C + +I=194 +KEY=0000000000000000000000000000000000000000000000004000000000000000 +CT=556D552FDE7C64227E2B72776488D6C1 + +I=195 +KEY=0000000000000000000000000000000000000000000000002000000000000000 +CT=3E81B51A214CC1F1CF6F35F9106A84BC + +I=196 +KEY=0000000000000000000000000000000000000000000000001000000000000000 +CT=4E48243857ECB700F8F16872E0BB4FA9 + +I=197 +KEY=0000000000000000000000000000000000000000000000000800000000000000 +CT=681654DF6668CDDF1D3D604483AB483B + +I=198 +KEY=0000000000000000000000000000000000000000000000000400000000000000 +CT=BD6CEEFD85A336E4F12D42076573ECA2 + +I=199 +KEY=0000000000000000000000000000000000000000000000000200000000000000 +CT=7488F9790FEC8AAE2AADDF6A600629B3 + +I=200 +KEY=0000000000000000000000000000000000000000000000000100000000000000 +CT=669C36695C33B63F16077CAE9AA940AA + +I=201 +KEY=0000000000000000000000000000000000000000000000000080000000000000 +CT=7CE998A357384159C9B34A9A8AC7DF78 + +I=202 +KEY=0000000000000000000000000000000000000000000000000040000000000000 +CT=51BE07BA8106A19CCC2005B8B3932FBF + +I=203 +KEY=0000000000000000000000000000000000000000000000000020000000000000 +CT=2634245A6EC3F17A35B7FE1D3E17F769 + +I=204 +KEY=0000000000000000000000000000000000000000000000000010000000000000 +CT=24D4114760BCE04C0109C06CCE199F6C + +I=205 +KEY=0000000000000000000000000000000000000000000000000008000000000000 +CT=3F055452FCD596C6D588BD48BB5D5080 + +I=206 +KEY=0000000000000000000000000000000000000000000000000004000000000000 +CT=A1D97F66DEF90DE14CC2BFAFF09286BB + +I=207 +KEY=0000000000000000000000000000000000000000000000000002000000000000 +CT=80442DC4EBFB53B86E232D886CA166B9 + +I=208 +KEY=0000000000000000000000000000000000000000000000000001000000000000 +CT=76A593802C6A691152E8A04E5DE2D05A + +I=209 +KEY=0000000000000000000000000000000000000000000000000000800000000000 +CT=F923A147E00807D58FB9C686E01F7E07 + +I=210 +KEY=0000000000000000000000000000000000000000000000000000400000000000 +CT=8EA3B396D561A3CFCE729A0B59647760 + +I=211 +KEY=0000000000000000000000000000000000000000000000000000200000000000 +CT=4AA735D710704790C060BAD696DACABE + +I=212 +KEY=0000000000000000000000000000000000000000000000000000100000000000 +CT=7F7C322D82557737F5407A797069B711 + +I=213 +KEY=0000000000000000000000000000000000000000000000000000080000000000 +CT=5094418C55B7D591EFDB7097CB95B16D + +I=214 +KEY=0000000000000000000000000000000000000000000000000000040000000000 +CT=CC014984ABDFB760A835846668340929 + +I=215 +KEY=0000000000000000000000000000000000000000000000000000020000000000 +CT=18F86EA6C633228579C5728FF070AC21 + +I=216 +KEY=0000000000000000000000000000000000000000000000000000010000000000 +CT=AFCF921E4FA24FDEF85EDAC12CD479F1 + +I=217 +KEY=0000000000000000000000000000000000000000000000000000008000000000 +CT=684085D0BE8AE0D617B2EFEF62CAAC93 + +I=218 +KEY=0000000000000000000000000000000000000000000000000000004000000000 +CT=04C7B0268EAEFED098C815935D868CF9 + +I=219 +KEY=0000000000000000000000000000000000000000000000000000002000000000 +CT=39AE859D255487A68093A376D358BBC2 + +I=220 +KEY=0000000000000000000000000000000000000000000000000000001000000000 +CT=F1218B59E947816041B21AC28685EF36 + +I=221 +KEY=0000000000000000000000000000000000000000000000000000000800000000 +CT=B9BE024D06447F8965E480B33975E36F + +I=222 +KEY=0000000000000000000000000000000000000000000000000000000400000000 +CT=24ECD5B3178150233BD38A4B9F8EBC86 + +I=223 +KEY=0000000000000000000000000000000000000000000000000000000200000000 +CT=7AD12485E896037A8D1A4ABE8A80B9BB + +I=224 +KEY=0000000000000000000000000000000000000000000000000000000100000000 +CT=CEC561C6F4C45CC944371E5D1C18EDF1 + +I=225 +KEY=0000000000000000000000000000000000000000000000000000000080000000 +CT=F4B1088B0858A3737DF2C90FD919D1D4 + +I=226 +KEY=0000000000000000000000000000000000000000000000000000000040000000 +CT=5EA6D1B9881CE230B8EABAC59B7F5393 + +I=227 +KEY=0000000000000000000000000000000000000000000000000000000020000000 +CT=8023134FAC8BF5FDA86368BDA618AEF7 + +I=228 +KEY=0000000000000000000000000000000000000000000000000000000010000000 +CT=D37285234A927061BEC9F8AAE0E796C8 + +I=229 +KEY=0000000000000000000000000000000000000000000000000000000008000000 +CT=68AC18DB2FBF0A4A095A4B3344BF035D + +I=230 +KEY=0000000000000000000000000000000000000000000000000000000004000000 +CT=563868079C5DF91E3B47B370B0BBB820 + +I=231 +KEY=0000000000000000000000000000000000000000000000000000000002000000 +CT=86C3BB221834F7507505434E4F98DC92 + +I=232 +KEY=0000000000000000000000000000000000000000000000000000000001000000 +CT=FD8220818731607D8B69AC5963D0FAC9 + +I=233 +KEY=0000000000000000000000000000000000000000000000000000000000800000 +CT=550726375ABB0F9A7C010DC4E47833F9 + +I=234 +KEY=0000000000000000000000000000000000000000000000000000000000400000 +CT=8AB5E8973A5D6648517D151295091C0E + +I=235 +KEY=0000000000000000000000000000000000000000000000000000000000200000 +CT=338BB4B5569AA06411B9911381F350B2 + +I=236 +KEY=0000000000000000000000000000000000000000000000000000000000100000 +CT=332D696EC49DF4B58C5FA9CC84773F47 + +I=237 +KEY=0000000000000000000000000000000000000000000000000000000000080000 +CT=DEB5AC8F895AFF45BA5815D4912D8371 + +I=238 +KEY=0000000000000000000000000000000000000000000000000000000000040000 +CT=89A49D3AB772D0FDAE05FC692EAF6C7B + +I=239 +KEY=0000000000000000000000000000000000000000000000000000000000020000 +CT=02116E6AEFC21A4D4D64CA27AB7AF31E + +I=240 +KEY=0000000000000000000000000000000000000000000000000000000000010000 +CT=58F79FF1810CA4B0E0178F7D9C24A581 + +I=241 +KEY=0000000000000000000000000000000000000000000000000000000000008000 +CT=686FB1ED659D9BF17DA2BB79AC636C93 + +I=242 +KEY=0000000000000000000000000000000000000000000000000000000000004000 +CT=1C5C176C4F5796B2C34D2A12858EB511 + +I=243 +KEY=0000000000000000000000000000000000000000000000000000000000002000 +CT=2A94B92CC9C4776817C0A77D49E24F22 + +I=244 +KEY=0000000000000000000000000000000000000000000000000000000000001000 +CT=890583A6C9549A3DCAFBD54BF391BC8F + +I=245 +KEY=0000000000000000000000000000000000000000000000000000000000000800 +CT=EA88A883197E483B4AA16316EA97CCBB + +I=246 +KEY=0000000000000000000000000000000000000000000000000000000000000400 +CT=CC5732CEB99A0A0353BABA6432BCBE9F + +I=247 +KEY=0000000000000000000000000000000000000000000000000000000000000200 +CT=88811B506D565779F09DE9BDF8702BD8 + +I=248 +KEY=0000000000000000000000000000000000000000000000000000000000000100 +CT=E11FEE3AD4A9A03956704B58720C92DD + +I=249 +KEY=0000000000000000000000000000000000000000000000000000000000000080 +CT=644555DFB9CE8EDAF888EE142B5577F1 + +I=250 +KEY=0000000000000000000000000000000000000000000000000000000000000040 +CT=716E2BBCBD8FF7E7335784B767F27CA9 + +I=251 +KEY=0000000000000000000000000000000000000000000000000000000000000020 +CT=83588863F183ECE04E95629A322F9A09 + +I=252 +KEY=0000000000000000000000000000000000000000000000000000000000000010 +CT=5E2833EC95ACE6B93AF28C6FCDBCE5D5 + +I=253 +KEY=0000000000000000000000000000000000000000000000000000000000000008 +CT=B3EFCF17F0E1B275D413DD4D3A5CAE68 + +I=254 +KEY=0000000000000000000000000000000000000000000000000000000000000004 +CT=3C943E1A2E7E56E4B185302D2D5C5DBD + +I=255 +KEY=0000000000000000000000000000000000000000000000000000000000000002 +CT=8CB4E2498382B523DCE6F7C17C91400B + +I=256 +KEY=0000000000000000000000000000000000000000000000000000000000000001 +CT=85F345366155D13F8F257734D2CBD6D9 + +========== + diff -urN lin.2.4.3/drivers/block/Config.in int.2.4.3/drivers/block/Config.in --- lin.2.4.3/drivers/block/Config.in Sat Feb 3 21:13:19 2001 +++ int.2.4.3/drivers/block/Config.in Mon Apr 2 18:37:26 2001 @@ -37,7 +37,16 @@ dep_tristate 'Compaq Smart Array 5xxx support' CONFIG_BLK_CPQ_CISS_DA $CONFIG_PCI dep_tristate 'Mylex DAC960/DAC1100 PCI RAID Controller support' CONFIG_BLK_DEV_DAC960 $CONFIG_PCI -tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP +# Dummy depend +if [ "$CONFIG_BLK_DEV_LOOP_GEN" = "y" ]; then + define_bool CONFIG_LOOP_DEP $CONFIG_CIPHERS +else + define_bool CONFIG_LOOP_DEP y +fi + +dep_tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP $CONFIG_LOOP_DEP + +dep_mbool ' Encryption support (see Crypto section) (EXPERIMENTAL)' CONFIG_BLK_DEV_LOOP_GEN $CONFIG_BLK_DEV_LOOP dep_tristate 'Network block device support' CONFIG_BLK_DEV_NBD $CONFIG_NET tristate 'RAM disk support' CONFIG_BLK_DEV_RAM diff -urN lin.2.4.3/drivers/block/loop.c int.2.4.3/drivers/block/loop.c --- lin.2.4.3/drivers/block/loop.c Wed Mar 7 04:35:36 2001 +++ int.2.4.3/drivers/block/loop.c Mon Apr 2 18:37:26 2001 @@ -115,6 +115,33 @@ return 0; } +#ifdef CONFIG_BLK_DEV_LOOP_GEN +static int transfer_cryptoapi(struct loop_device *lo, int cmd, char *raw_buf, + char *loop_buf, int size, int real_block) +{ + struct cipher_context * cx = (struct cipher_context *) lo->key_data; + struct cipher_implementation *ci = cx->ci; + int (*encdecfunc)(struct cipher_context *cx, const u8 *in, u8 *out, + int size); + char *in, *out; + + if (cmd == READ) { + encdecfunc = ci->decrypt_atomic; + in = raw_buf; + out = loop_buf; + } else { + encdecfunc = ci->encrypt_atomic; + in = loop_buf; + out = raw_buf; + } + ((u32 *)cx->iv)[0] = cpu_to_le32(real_block); + encdecfunc(cx, in, out, size); + return 0; +} +#endif + + + static int none_status(struct loop_device *lo, struct loop_info *info) { return 0; @@ -127,6 +154,59 @@ return 0; } +#ifdef CONFIG_BLK_DEV_LOOP_GEN +static int cryptoapi_status(struct loop_device *lo, struct loop_info *info) +{ + int err = -EINVAL; + char cipher[LO_NAME_SIZE]; + struct cipher_implementation *ci; + struct cipher_context *cx; + + strncpy(cipher, info->lo_name, LO_NAME_SIZE); + cipher[LO_NAME_SIZE - 1] = 0; + + ci = find_cipher_by_name(cipher, 1); + if (!ci) + goto out; + + ci->lock(); + err = -ENOMEM; + cx = ci->realloc_context(NULL, ci, info->lo_encrypt_key_size); + if (!cx) + goto out_ci; + cx->ci = ci; + ci->wipe_context(cx); + if (ci->set_key(cx, info->lo_encrypt_key, + info->lo_encrypt_key_size)) { + err = -EINVAL; + goto out_key; + } + lo->key_data = cx; + return 0; + + out_key: + ci->wipe_context(cx); + ci->free_context(cx); + out_ci: + ci->unlock(); + out: + return err; +} + + +static int cryptoapi_release(struct loop_device *lo) +{ + struct cipher_context *cx = (struct cipher_context *) lo->key_data; + if (cx != NULL) { + cx->ci->wipe_context(cx); + cx->ci->unlock(); + cx->ci->free_context(cx); + lo->key_data=NULL; + } + return 0; +} +#endif + struct loop_func_table none_funcs = { number: LO_CRYPT_NONE, transfer: transfer_none, @@ -139,10 +219,24 @@ init: xor_status }; +#ifdef CONFIG_BLK_DEV_LOOP_GEN +struct loop_func_table cryptoapi_funcs = { + number: LO_CRYPT_CRYPTOAPI, + transfer: transfer_cryptoapi, + init: cryptoapi_status, + release: cryptoapi_release +}; +#endif + /* xfer_funcs[0] is special - its release function is never called */ struct loop_func_table *xfer_funcs[MAX_LO_CRYPT] = { - &none_funcs, - &xor_funcs + &none_funcs, &xor_funcs, NULL, NULL, NULL, /* 0-4 */ + NULL, NULL, NULL, NULL, NULL, /* 5-9 */ + NULL, NULL, NULL, NULL, NULL, /* 10-14 */ + NULL, NULL, NULL /* 15-17 */ +#ifdef CONFIG_BLK_DEV_LOOP_GEN + ,&cryptoapi_funcs +#endif }; #define MAX_DISK_SIZE 1024*1024*1024 diff -urN lin.2.4.3/include/asm-alpha/wordops.h int.2.4.3/include/asm-alpha/wordops.h --- lin.2.4.3/include/asm-alpha/wordops.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/include/asm-alpha/wordops.h Mon Apr 2 18:37:26 2001 @@ -0,0 +1,7 @@ +#ifndef _ALPHA_WORDOPS_H +#define _ALPHA_WORDOPS_H + +#define rotr32(x,n) generic_rotr32(x,n) +#define rotl32(x,n) generic_rotl32(x,n) + +#endif diff -urN lin.2.4.3/include/asm-arm/wordops.h int.2.4.3/include/asm-arm/wordops.h --- lin.2.4.3/include/asm-arm/wordops.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/include/asm-arm/wordops.h Mon Apr 2 18:37:26 2001 @@ -0,0 +1,7 @@ +#ifndef _ARM_WORDOPS_H +#define _ARM_WORDOPS_H + +#define rotr32(x,n) generic_rotr32(x,n) +#define rotl32(x,n) generic_rotl32(x,n) + +#endif diff -urN lin.2.4.3/include/asm-i386/wordops.h int.2.4.3/include/asm-i386/wordops.h --- lin.2.4.3/include/asm-i386/wordops.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/include/asm-i386/wordops.h Mon Apr 2 18:37:26 2001 @@ -0,0 +1,20 @@ +#ifndef _I386_WORDOPS_H +#define _I386_WORDOPS_H + +extern __inline__ int rotr32(__u32 x, int n) +{ + if (n == 32 || n == 0 || n == -32) + return x; + __asm__("rorl %1,%0" : "=r"(x) : "ir"(n)); + return x; +} + +extern __inline__ int rotl32(__u32 x, int n) +{ + if (n == 32 || n == 0 || n == -32) + return x; + __asm__("roll %1,%0" : "=r"(x) : "ir"(n)); + return x; +} + +#endif diff -urN lin.2.4.3/include/asm-m68k/wordops.h int.2.4.3/include/asm-m68k/wordops.h --- lin.2.4.3/include/asm-m68k/wordops.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/include/asm-m68k/wordops.h Mon Apr 2 18:37:26 2001 @@ -0,0 +1,8 @@ +#ifndef _M68K_WORDOPS_H +#define _M68K_WORDOPS_H + +#define rotr32(x,n) generic_rotr32(x,n) +#define rotl32(x,n) generic_rotl32(x,n) + +#endif + diff -urN lin.2.4.3/include/asm-mips/wordops.h int.2.4.3/include/asm-mips/wordops.h --- lin.2.4.3/include/asm-mips/wordops.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/include/asm-mips/wordops.h Mon Apr 2 18:37:26 2001 @@ -0,0 +1,8 @@ +#ifndef _MIPS_WORDOPS_H +#define _MIPS_WORDOPS_H + +#define rotr32(x,n) generic_rotr32(x,n) +#define rotl32(x,n) generic_rotl32(x,n) + +#endif + diff -urN lin.2.4.3/include/asm-ppc/wordops.h int.2.4.3/include/asm-ppc/wordops.h --- lin.2.4.3/include/asm-ppc/wordops.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/include/asm-ppc/wordops.h Mon Apr 2 18:37:26 2001 @@ -0,0 +1,41 @@ +#ifndef _PPC_WORDOPS_H +#define _PPC_WORDOPS_H + +#if 0 +/* The following is implemented from datasheets. If you have a + * PowerPC and can test the code, send me a note + * Alexander Kjeldaas <astor@guardian.no> + */ + +extern __inline__ rotr32(__u32 x, int n) +{ + int r; + if (n == 32 || n == 0 || n == -32) + return x; + if (__builtin_const_p(x)) + __asm__("rotrwi %0,%1,%2" : "=r"(r) : "r"(x), "i"(n)); + else + __asm__("rotrw %0,%1,%2" : "=r"(r) : "r"(x), "r"(n)); + return r; +} + +extern __inline__ rotl32(__u32 x, int n) +{ + int r; + if (n == 32 || n == 0 || n == -32) + return x; + if (__builtin_const_p(x)) + __asm__("rotlwi %0,%1,%2" : "=r"(r) : "r"(x), "i"(n)); + else + __asm__("rotlw %0,%1,%2" : "=r"(r) : "r"(x), "r"(n)); + return r; +} + +#else + +#define rotr32(x,n) generic_rotr32(x,n) +#define rotl32(x,n) generic_rotl32(x,n) + +#endif + +#endif diff -urN lin.2.4.3/include/asm-sparc/wordops.h int.2.4.3/include/asm-sparc/wordops.h --- lin.2.4.3/include/asm-sparc/wordops.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/include/asm-sparc/wordops.h Mon Apr 2 18:37:26 2001 @@ -0,0 +1,7 @@ +#ifndef _SPARC_WORDOPS_H +#define _SPARC_WORDOPS_H + +#define rotr32(x,n) generic_rotr32(x,n) +#define rotl32(x,n) generic_rotl32(x,n) + +#endif diff -urN lin.2.4.3/include/asm-sparc64/wordops.h int.2.4.3/include/asm-sparc64/wordops.h --- lin.2.4.3/include/asm-sparc64/wordops.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/include/asm-sparc64/wordops.h Mon Apr 2 18:37:26 2001 @@ -0,0 +1,7 @@ +#ifndef _SPARC9_WORDOPS_H +#define _SPARC9_WORDOPS_H + +#define rotr32(x,n) generic_rotr32(x,n) +#define rotl32(x,n) generic_rotl32(x,n) + +#endif diff -urN lin.2.4.3/include/linux/crypto.h int.2.4.3/include/linux/crypto.h --- lin.2.4.3/include/linux/crypto.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/include/linux/crypto.h Mon Apr 2 18:51:33 2001 @@ -0,0 +1,277 @@ +#ifndef _LINUX_CRYPTO_H +#define _LINUX_CRYPTO_H + +/* + * include/linux/crypto.h + * + * Written by Alexander Kjeldaas <astor@fast.no> 1998-10-13 + * + * Copyright 1998 by Alexander Kjeldaas. This code is licensed under + * an X11-like license. See LICENSE.crypto for details. + * + */ + +#define TRANSFORM_DIGEST 0 +#define TRANSFORM_CIPHER 1 +#define MAX_TRANSFORM 2 + +#define CIPHER_MODES 0xFFFF0000 /* used to mask the mode *\ + * part of the cipher id */ +#define CIPHER_MODE_ECB 0x00000000 +#define CIPHER_MODE_CBC 0x00010000 +#define CIPHER_MODE_CTR 0x00020000 /* not implemented yet */ + +/* Allowed keysizes: This is just a set of commonly found values. If + * you need additional ones, you can place them here. Note that + * CIPHER_KEY_ANY really means _any_ key length (that is a multiple of + * 8 bits, just limited by MAX_KEY_SIZE*32. This is not important now, + * but might become so if we choose to support keylengths greater than + * 256 bits. There are many ciphers that can take keys that are longer + * (e.g. blowfish: 448 bits). If you want to say all key lengths up to + * 256, play safe and use 0xFFFFFFFF-1 as keysize_mask. + * CIPHER_KEYSIZE_NONE means that the cipher does not expect a key. It + * is only used for 'none' encryption. + */ + +#define CIPHER_KEYSIZE_ANY 0xFFFFFFFF +#define CIPHER_KEYSIZE_NONE 0x00000000 + +#define CIPHER_KEYSIZE_40 0x00000010 +#define CIPHER_KEYSIZE_56 0x00000040 +#define CIPHER_KEYSIZE_64 0x00000080 +#define CIPHER_KEYSIZE_80 0x00000200 +#define CIPHER_KEYSIZE_96 0x00000800 +#define CIPHER_KEYSIZE_112 0x00002000 +#define CIPHER_KEYSIZE_128 0x00008000 +#define CIPHER_KEYSIZE_160 0x00080000 +#define CIPHER_KEYSIZE_168 0x00100000 +#define CIPHER_KEYSIZE_192 0x00800000 +#define CIPHER_KEYSIZE_256 0x80000000 + + +#ifdef __KERNEL__ + +#include <linux/list.h> +#include <linux/kernel.h> +#include <linux/proc_fs.h> +#include <linux/spinlock.h> +#include <asm/page.h> +#include <asm/semaphore.h> + +typedef u32 u4byte; +typedef u8 u1byte; + + +/* A transform group is a group of transforms that behave in a similar + * fashion */ + +struct transform_group { + int tg_id; + char *tg_name; /* "cipher" or "digest" */ + rwlock_t tg_lock; + struct list_head *tg_head; +#ifdef CONFIG_PROC_FS + struct proc_dir_entry *tg_proc_parent_dir; + int (*read_proc)(char *page, char **start, off_t off, + int count, int *eof, void *data); +#endif +}; + +/* A transform is something that can be found by id or name. Ciphers + and digests are types of transforms. */ + +struct transform_implementation { + struct list_head t_list; + int t_flags; + char *t_name; + int t_atomicapi; + struct transform_group *t_group; +#ifdef CONFIG_PROC_FS + /* keep track of the allocated proc_dir_entry */ + struct proc_dir_entry *t_proc; +#endif +}; + +/* Cipher data structures */ + +struct cipher_context; +struct cipher_implementation { + struct transform_implementation trans; + int blocksize; /* in bytes */ + int ivsize; /* in bytes */ + int key_schedule_size; /* in bytes. 0 if the schedule size is + variable. */ + u32 key_size_mask; /* bit 0 set = 8 bit, ... , + * bit 31 set = 256 bit */ + + /* + * Encrypt the plaintext pointed to by "in". Write output to + * "out". Size of plaintext is "size". Output buffer must be + * able to hold "size" bytes plus padding necessary to make it + * a multiple of the cipher blocksize. size <= 0 is + * undefined. Returns 0 on success, non-zero on + * failure. + * + * encrypt - Function might sleep. This function will + * always exist. + + * encrypt_atomic - Will never sleep + always SW implementation. + * This function will exist if atomicapi==1 was + * set in find_cipher_by_name where this + * cipher_implementation was returned. + */ + int (*encrypt)(struct cipher_context *cx, + const u8 *in, u8 *out, int size); + + + int (*encrypt_atomic) (struct cipher_context *cx, + const u8 *in, u8 *out, int size); + + /* + * Decrypt the ciphertext pointed to by "in". Write output to + * "out". Size of plaintext is "size". Input buffer is "size" + * bytes plus padding necessary to make it a multiple of the + * cipher blocksize. size <= 0 is undefined. Returns 0 on + * success, non-zero on failure. + * + */ + int (*decrypt)(struct cipher_context *cx, + const u8 *in, u8 *out, int size); + + int (*decrypt_atomic)(struct cipher_context *cx, + const u8 *in, u8 *out, int size); + + int (*set_key)(struct cipher_context *cx, + unsigned char *key, int key_len); + + int (*set_key_atomic)(struct cipher_context *cx, + unsigned char *key, int key_len); + + /* The following functions are optional. Most ciphers will + * not need to specify them, and a default implementation will + * be used. + */ + + /* Realloc a cipher_context that can hold the key schedule for + * a given key. If no cipher_context is given, allocate a new + * cipher_context. + */ + + struct cipher_context * + (*realloc_context)(struct cipher_context *old_cx, + struct cipher_implementation *ci, + int max_key_len); + void (*wipe_context)(struct cipher_context *cx); + void (*free_context)(struct cipher_context *cx); + + /* lock and unlock manage the module use counts */ + void (*lock)(void); + void (*unlock)(void); + + /* The following functions are used by software + * implementations that wish to provide a single function that + * implements atomic and non-atomic versions of encrypt, + * decrypt, and set_key. If these functions are set, + * register_cipher will provide generic implementations of + * encrypt*, decrypt*, and set_key*. However these functions + * should not be called directly by users since they will only + * exist for software-based cipher implementations. */ + + int (*_encrypt) (struct cipher_context *cx, + const u8 *in, u8 *out, int size, int atomic); + int (*_decrypt)(struct cipher_context *cx, + const u8 *in, u8 *out, int size, int atomic); + int (*_set_key)(struct cipher_context *cx, + unsigned char *key, int key_len, int atomic); + +}; + +#define MAX_IV_SIZE 32 /* 32 byte - 256 bit */ + +struct cipher_context { + struct cipher_implementation *ci; + int may_sleep; /* cipher implementation (sw) might sleep */ + int keyinfo_size; /* in bytes - usually equal to + * ci->key_schedule_size. */ + u32 *keyinfo; + int key_length; /* in bytes */ + u8 iv[MAX_IV_SIZE]; +}; + + +/* Digest data structures */ + +struct digest_context; +struct digest_implementation { + struct transform_implementation trans; + int blocksize; /* in bytes */ + int working_size; /* in bytes */ + + int (*open)(struct digest_context *cx); + int (*update)(struct digest_context *cx, u8 *in, int size); + int (*digest)(struct digest_context *cx, u8 *out); + int (*close)(struct digest_context *cx, u8 *out); + + /* lock and unlock manage the module use counts */ + void (*lock)(void); + void (*unlock)(void); +}; + +struct digest_context { + struct digest_implementation *di; + u32 *digest_info; +}; + + +struct transform_implementation *find_transform_by_name(const char *name, + int tgroup, + int atomicapi); + +static inline struct cipher_implementation * +find_cipher_by_name(const char *name, int atomicapi) +{ + return (struct cipher_implementation *) + find_transform_by_name(name, TRANSFORM_CIPHER, atomicapi); +} + +static inline struct digest_implementation * +find_digest_by_name(const char *name, int atomicapi) +{ + return (struct digest_implementation *) + find_transform_by_name(name, TRANSFORM_DIGEST, atomicapi); +} + +int register_transform(struct transform_implementation *ti, int tgroup); +int register_cipher(struct cipher_implementation *ci); +int register_digest(struct digest_implementation *di); + +int unregister_transform(struct transform_implementation *ti); +int unregister_cipher(struct cipher_implementation *ci); +int unregister_digest(struct digest_implementation *ci); + + +/* Utility macros */ + +#define INIT_CIPHER_BLKOPS(name) \ + _encrypt: name##_encrypt, \ + _decrypt: name##_decrypt + +#define INIT_CIPHER_OPS(name) \ + _set_key: name##_set_key, \ + lock: name##_lock, \ + unlock: name##_unlock + +#define INIT_DIGEST_OPS(name) \ + open: name##_open, \ + update: name##_update, \ + digest: name##_digest, \ + close: name##_close, \ + lock: name##_lock, \ + unlock: name##_unlock + + +#define byte(x, nr) ((unsigned char)((x) >> (nr*8))) + +#endif /* __KERNEL__ */ + +#endif diff -urN lin.2.4.3/include/linux/loop.h int.2.4.3/include/linux/loop.h --- lin.2.4.3/include/linux/loop.h Wed Mar 7 04:35:36 2001 +++ int.2.4.3/include/linux/loop.h Mon Apr 2 18:52:48 2001 @@ -2,6 +2,7 @@ #define _LINUX_LOOP_H #include <linux/kdev_t.h> +#include <linux/crypto.h> /* * include/linux/loop.h @@ -112,6 +113,9 @@ * Loop filter types */ +/* New code should use LO_CRYPT_CRYPTOAPI and set the name of the + transform in the lo_name member of loop_info */ + #define LO_CRYPT_NONE 0 #define LO_CRYPT_XOR 1 #define LO_CRYPT_DES 2 @@ -121,6 +125,7 @@ #define LO_CRYPT_IDEA 6 #define LO_CRYPT_DUMMY 9 #define LO_CRYPT_SKIPJACK 10 +#define LO_CRYPT_CRYPTOAPI 18 #define MAX_LO_CRYPT 20 #ifdef __KERNEL__ diff -urN lin.2.4.3/include/linux/wordops.h int.2.4.3/include/linux/wordops.h --- lin.2.4.3/include/linux/wordops.h Thu Jan 1 01:00:00 1970 +++ int.2.4.3/include/linux/wordops.h Mon Apr 2 18:51:33 2001 @@ -0,0 +1,12 @@ +#ifndef _LINUX_WORDOPS_H +#define _LINUX_WORDOPS_H + +#include <linux/types.h> + +#define generic_rotr32(x,n) (((x) >> ((int)(n))) | ((x) << (32 - (int)(n)))) + +#define generic_rotl32(x, n) (((x) << ((int)(n))) | ((x) >> (32 - (int)(n)))) + +#include <asm/wordops.h> + +#endif