// COMPLETE THREAD

bulk RC4 brute forcing

2 expanded posts ยท every known parent and child

NODE a94b6f61bulk RC4 brute forcing
Some time ago, I wrote about testing multiple plain/cipher pairs against a
key as a possible speed up for brute forcing 40 bit RC4 key cracking.

I have finally done something about it, written some code, and run tests
which I believe gives a about 6-8 times improvement over single
key/plain/cipher testing against RC4-40 encryption.

Basically:
A single RC4 master "key schedule" is generated.
This is copied to an master array of 126 RC4_keys (126 chosen due to segment
boundary probs).
Then each of 126 plain/cipher (P/C) pairs are tested for a match. Acquiring
the plain/cipher pairs in real life is another question.
If a match is found, the pair is marked 'found', and testing continues on
the remaining unfound P/C pairs.
This loops until all 126 plain/cipher/keys have been tested and found.
8 plaintext, 8 cipher bytes are used. Keys are 8 bytes, the last 5 of which
are variable (40 bits).

Test results :
A test set of data was created by incrementing a key byte, and making a P/C
pair.
Then all keys bytes are set to 0, and testing commenced.
Typically, a 486/33 with the above in 'C' code running on DOS achieves about
15000 tests per second.
One extended test ran about 480 million tests in 7.5 hours and found 68% of
the keys - approx 17,700/sec, averaging 5.6 million tests per found key.

My reasoning follows thus:
For 126 plain/cipher pairs, with "randomly" generated keys, one valid
key/plain/cipher pairs 'should' be located in 2^33 key tries (126 is approx.
2^7)
15000 tests/sec across 126 P/C pairs is about 119 keys/second tested.
at 119/second, 2^33 key tests will take 835 days. This should "guarantee"
a key match is found.
By contrast: 
The "bruterc4.c" code used by this forum earlier showed approximately 2200
key tests per second on my machine. Testing 2^40 keys at 2200/sec will take
5784 days to guarantee a key match (using 2^39, 2892 days).
This is a 6.9(3.46) ratio, that finds a single key match.
Finding all 126 keyswould should take approximately 293 years in "bulk"
mode, or 1996 years in single mode (126x5784 days).

The code is available, and will be posted here is desired (it is messy).

Ideally, faster key/plain/cipher testing could be accomplished if a larger
array of keys could be used. The Intel segment problem has prevented me for
making larger arrays - I don't know how to turn these features in my
compiler (yes - I am a beginner at coding, but the "huge" directive in
Borland C did not seem to work, and I don't know why - yet). 
Tests on 31, 63 and 126 P/C pairs showed results of 10689, 13326 and 15689
tests/sec, respectively. This indicates array size has a direct relationship
with test/sec.

I invite others who can better manipulate statistics, or better exeprienced,
to comment, refute, or otherwise contribute to this.

lyal
All mistakes in this message belong to me - you should not use them!
NODE b91476e2Re: bulk RC4 brute forcing
--Boundary..3936.1071713528.multipart/mixed
Content-Type: text/plain
Content-Transfer-Encoding: 7bit

following requests for this test code, the attached should compile and 
run the tests I desciribed earlier.
It is messy - sorry.
lyal
-- All mistakes in this message belong to me - you should not use 
them!


--Boundary..3936.1071713528.multipart/mixed
Content-Type: application/octet-stream; name="bin00000.bin"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bin00000.bin"
Content-Description: "RC4M.C"

LyogcmM0IHRlc3QgYmVkDQogYmFzZWQgb24gUkM0IGNvZGUgZGV2ZWxvcGVk
IGJ5IEUgQSBZb3VuZywgYXBwYXJlbnRseSBmcm9tIGNvZGUNCiBjaXJjdWxh
dGVkIG9uIHRoZSBJbnRlcm5ldCBpbiAxOTk0LzUuIFBhcnQgb2YgRUFZJ3Mg
U1NMRUFZIGNvZGUgaXMgdXNlZCBoZXJlLg0KDQogSWRlYSBoZXJlIGlzIHRv
IGNvbXBhcmUgc2luZ2xla2V5L3BsYWluL2NpcGhlciB0ZXN0IHRpbWUgYWdh
aW5zdA0KIHNpbmdsZSBrZXksIG11bHRpcGxlIHBsYWluL2NpcGhlciBwYWly
cw0KIElzIHRoaXMgYXBwcm9hY2ggbW9yZSBlZmZpY2llbnQgPz8/Pw0KDQog
Ki8NCg0KI2RlZmluZSBQUk9UTw0KDQojaW5jbHVkZSA8c3RkaW8uaD4NCiNp
bmNsdWRlIDxzdGRsaWIuaD4NCiNpbmNsdWRlIDxzdHJpbmcuaD4NCiNpbmNs
dWRlICJ0aW1lLmgiDQojaW5jbHVkZSAicmM0LmgiDQoNCnN0YXRpYyBjaGFy
ICp2ZXJzaW9uPSJcMFJDNCBwYXJ0IG9mIFNTTGVheSB2IDAuNC4zIDE1LzA2
Lzk1IjsNCg0KdHlwZWRlZiAgdW5zaWduZWQgY2hhciBVQ0hBUjsNCg0KdHlw
ZWRlZiBzdHJ1Y3QgcmM0X3Rlc3RfcGFpcjENCgl7DQogICAgY2hhciBwbGFp
bls4XTsNCiAgICBjaGFyIGNpcGhlcls4XTsNCiAgICBpbnQgZm91bmQ7DQog
ICAgY2hhciBrZXlfZm91bmRbOF07ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLw0KCX0gcmM0X3Rlc3RfcGFpcjsNCg0KdW5zaWduZWQgaW50
IGtleV9idWZmWzI1Nl07ICAgICAgICAgICAgICAgICAvL3VzZWQgdG8gc3Bl
ZWQga2V5IHNjaGVkdWxpbmcNCg0KUkM0X0tFWSBrZXk7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvL21hc3RlciBrZXkgaXMgbWFkZSBoZXJl
DQoNClJDNF9LRVkga2V5dGVzdDsNCg0KI2RlZmluZSBOT19PRl9URVNUUyAg
MTI2DQpyYzRfdGVzdF9wYWlyIG1hc3Rlcl9wbGFpbl9jaXBoZXJbTk9fT0Zf
VEVTVFNdOyAgICAgLy9tYXN0ZXIgcGxhaW4vY2lwaGVyIHRlc3QgcGFpcnMN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ly9hY3F1aXNpdGlvbiAwZiB0aGVzZSBpcw0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Fub3RoZXIgcXVlc3Rpb24N
ClJDNF9LRVkgbWFzdGVyX2tleXNbTk9fT0ZfVEVTVFNdOyAgICAgICAgICAg
ICAgICAgICAvL21hc3RlciBrZXkgYXJyYXkNCg0KdW5zaWduZWQgY2hhciBi
dWZmZXJbXSA9ICAiMTIzNDU2NzgiOw0KdW5zaWduZWQgY2hhciBrZXk0W10g
PSB7MHgwLCAweDAsIDB4MCwgMHgwMSwgMHgwMiwgMHgwLCAweDAsIDB4MH07
DQp1bnNpZ25lZCBjaGFyIGtleTVbXSA9IHsweDAsIDB4MCwgMHgwLCAweDAx
LCAweDAyLCAweDAsIDB4MCwgMHgwfTsNCg0KdW5zaWduZWQgaW50IGtleV9z
dGFydCA9IDB4MDsgICAgICAgICAvL3N0YXJ0LCBlbmRwb2ludCBmb3Iga2V5
IHRlc3Qgcm91dGluZQ0KdW5zaWduZWQgaW50IGtleV9lbmQgICA9IDB4ZmY7
DQoNCnVuc2lnbmVkIGNoYXIgYSxiLGMsZCxlOw0KDQpjbG9ja190IHN0YXJ0
LCBlbmQ7ICAgICAgICAgICAgICAgICAgICAgLy90aW1lciB2YWx1ZXMNCmNs
b2NrX3QgY2xvY2soKTsNCg0KdW5zaWduZWQgbG9uZyBibG9ja3MgPSA0MDk2
OyAgICAgICAgICAgIC8vZGVmYXVsdCBibG9jayBjb3VudA0KbG9uZyBrOw0K
dW5zaWduZWQgbG9uZyBsb29wczsNCg0KDQoNCmZsb2F0IHR6Ow0KaW50IHo7
DQppbnQga2V5X2RhdGFfbGVuID0gODsNCmludCBidWZmZXJfbGVuID0gODsN
Cg0KDQovL2RlY2xhcmF0aW9ucw0Kdm9pZCByYzQodW5zaWduZWQgY2hhciAq
YnVmZmVyX3B0ciwgaW50IGJ1ZmZlcl9sZW4sIFJDNF9LRVkgKmtleSk7DQpz
dGF0aWMgdm9pZCBzd2FwX2J5dGUoIHVuc2lnbmVkIGNoYXIgKmEsIHVuc2ln
bmVkIGNoYXIgKmIpOw0Kdm9pZCByYzRfa2V5X3Rlc3Qodm9pZCk7DQoNCi8v
PT09PT09PT09PT09PT09DQoNCnZvaWQgbWFpbihpbnQgYXJnYywgY2hhciAq
YXJndltdKQ0Kew0KaWYgKGFyZ2MgIT0gMikgCQkgIC8qIGdldCBudW1iZXIg
b2YgYmxvY2tzICovDQogcHJpbnRmKCJcbk5vIGJsb2NrIHNpemUgc3BlY2lm
aWVkLCB1c2luZyAlZCBhcyBudW1iZXIgb2YgYmxvY2tzLlxuIiwgYmxvY2tz
KTsNCmVsc2UNCiBzc2NhbmYoYXJndlsxXSwiJUkiLCZibG9ja3MpOwkgICAg
Ly9nZXQgY291bnQNCg0KIGZvciAoej0wOyB6PDI1NjsgeisrKQ0KCWtleV9i
dWZmW3pdPXo7ICAgICAgICAgICAgICAgICAgLy9pbml0IGtleV9idWZmDQoN
CiAgICAvL21lYXN1cmUgcmF3IHNwZWVkDQoNCiBmb3IgKGE9MDsgYTxOT19P
Rl9URVNUUzsgYSsrKSAgICAgIC8vbWFrZSB0ZXN0IGRhdGENCiAgew0KICBr
ZXk1WzRdID0gYTsNCiAgUkM0X3NldF9rZXkoJmtleSwga2V5X2RhdGFfbGVu
LCAma2V5NSk7DQogIG1lbWNweSgmbWFzdGVyX3BsYWluX2NpcGhlclthXS5w
bGFpbiwgJmJ1ZmZlciwgYnVmZmVyX2xlbik7IC8vY29weSBwbGFpbiB0ZXh0
DQogIFJDNCgma2V5LCBidWZmZXJfbGVuLCBtYXN0ZXJfcGxhaW5fY2lwaGVy
W2FdLnBsYWluLCBtYXN0ZXJfcGxhaW5fY2lwaGVyW2FdLmNpcGhlcik7DQog
IH0NCg0KcmM0X2tleV90ZXN0KCk7ICAgICAgICAgLy9tZWFzdXJlIGtleSB0
ZXN0aW5nIHNwZWVkDQp9OyAgICAgICAgICAgICAgICAgICAgICAvL2VuZCBt
YWluDQovLyAgPT09PT09PT09PT09PQ0KDQovKiAgaWRlYSBpcyBiYXNlZCBv
biBtYWtpbmcgYSBtYXN0ZXIgcmM0X2tleSwgY29weWluZyB0aGF0IHRvIE5P
X09GX1RFU1RTIGtleSBzcGFjZXMNCiAgICBUaGVuLCBlYWNoIGNvcHkgb2Yg
dGhlIGtleSBpcyB0ZXN0ZWQgYWdhaW5zdCBhIHBsYWluL2NpcGhlcnRlY3Qg
cGFpci4NCiAgICBJZiBhIG1hdGNoIGZvdW5kLCBhIGZsYWcgaXMgc2V0IGZv
ciB0aGF0IHBsYWluL2NpcGhlcnRlY3QgcGFpciwgYW5kIHRoZQ0KICAgIGtl
eSBzdG9yZWQgd2l0aCBpdC4NCiAgICB0aGlzIHNob3VsZCByZWR1Y2Ugb3Zl
cmhlYWRzIGFzc29jaWF0ZWQgd2l0aCBrZXkgc2NoZWR1bGluZyAtIEkgaG9w
ZS4NCiovDQoNCnZvaWQgcmM0X2tleV90ZXN0KHZvaWQpDQp7DQppbnQgaTsN
CmludCBqPU5PX09GX1RFU1RTOw0KcHJpbnRmKCJcbk1lYXN1cmluZyB0aGUg
c3BlZWQgd2l0aCB3aGljaCB0aGlzIENQVSBjYW4gdGVzdCBmb3IgdmFsaWQg
a2V5cy4iKTsNCmxvb3BzPTA7DQplbmQgPSBjbG9jaygpOw0Kc3RhcnQgPSBj
bG9jaygpOw0Kd2hpbGUgKGVuZCA9PSBzdGFydCkNCiBzdGFydCA9IGNsb2Nr
KCk7ICAgICAgIC8vZmluZCBwb2ludCBpbW1lZGlhdGVseSBhZnRlciBjbG9j
ayB0aWNrIGhhcyBoYXBwZW5lZA0KDQpmb3IoIGEgPSBrZXlfc3RhcnQ7IGE8
a2V5X2VuZDsgYSsrKQ0Kew0KIGtleTRbN10gPWE7DQogZm9yKGI9a2V5X3N0
YXJ0OyBiPGtleV9lbmQ7IGIrKykNCiB7DQogIGtleTRbNl09YjsNCiAgZm9y
KGM9a2V5X3N0YXJ0OyBjPGtleV9lbmQ7IGMrKykNCiAgew0KICAga2V5NFs1
XT1jOw0KDQogICBmb3IoZD1rZXlfc3RhcnQ7IGQ8a2V5X2VuZDsgZCsrKQ0K
ICAgew0KICAgIGtleTRbNF09ZDsNCi8vICAgIHByaW50ZigiXG4gbnVtYmVy
IG9mIGtleXMgZm91bmQgZm9yIHBsYWluL2NpcGhlciBwYWlyID0gJWQiLCBq
KTsNCi8vICAgaWYoZCkNCi8vICAgIHsNCi8vICAgICBlbmQgPSBjbG9jaygp
LXN0YXJ0Ow0KLy8JIHR6ID0gIChlbmQvQ0xLX1RDSyk7DQovLwkgcHJpbnRm
KCJcblRpbWUgdGFrZW4gPSAlNi4xZiBzZWNvbmRzLCBudW1iZXIgb2Yga2V5
cyB0ZXN0ZWQgPSAlbGQuXG4iLCB0eiwgbG9vcHMpOw0KLy8JIHByaW50Zigi
JTYuMWYgIiwgKGZsb2F0KShsb29wcy90eikpOw0KLy8gICAgfQ0KLy9wcmlu
dGYoIlxuIG51bWJlciBvZiBrZXlzIGZvdW5kIGZvciBwbGFpbi9jaXBoZXIg
cGFpciA9ICVkIiwgTk9fT0ZfVEVTVFMtaik7DQogICAgZm9yKGU9a2V5X3N0
YXJ0OyBlPGtleV9lbmQ7IGUrKykNCiAgICB7DQogICAga2V5NFszXT1lOw0K
ICAgIFJDNF9zZXRfa2V5X3Rlc3QoJmtleSwga2V5X2RhdGFfbGVuLCAma2V5
NCk7ICAgIC8vbWFrZSBtYXN0ZXIga2V5DQogICAgZm9yIChpPTA7IGk8Tk9f
T0ZfVEVTVFM7IGkrKykgICAgICAgICAgICAgICAgICAgICAgICAgLy9tb3Zl
IG1hc3RlciBrZXkgdG8gYXJyYXkNCiAgICAgIG1lbWNweShtYXN0ZXJfa2V5
c1tpXS5kYXRhLCAma2V5LCBzaXplb2Yoa2V5KSk7DQoNCiAgICAgIGZvciAo
aT0wOyBpPE5PX09GX1RFU1RTOyBpKyspDQogICAgICAgew0KICAgICAgICBp
ZiAoIW1hc3Rlcl9wbGFpbl9jaXBoZXJbaV0uZm91bmQpDQogICAgICAgIHsN
CiAgICAgICAgbG9vcHMrKzsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vaW5jcmVtZW50IHRoaXMgYXMgYSBjb3VudGVyDQogICAgICAgICBpZihS
QzRfdGVzdChtYXN0ZXJfa2V5c1tpXS5kYXRhLCBidWZmZXJfbGVuLCBtYXN0
ZXJfcGxhaW5fY2lwaGVyW2ldLnBsYWluLCBtYXN0ZXJfcGxhaW5fY2lwaGVy
W2ldLmNpcGhlcikpDQogICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy90aWxsIGtleSBtYXRj
aGVzDQogICAgICAgICAgbWFzdGVyX3BsYWluX2NpcGhlcltpXS5mb3VuZCA9
IDE7DQogICAgICAgICAgbWVtY3B5KG1hc3Rlcl9wbGFpbl9jaXBoZXJbaV0u
a2V5X2ZvdW5kLCBrZXk0LCA4KTsNCiAgICAgICAgICBqLS07DQovLyAgICAg
ICAgICBwcmludGYoIlxuIG51bWJlciBvZiBrZXlzIGZvdW5kIGZvciBwbGFp
bi9jaXBoZXIgcGFpciA9ICVkIiwgTk9fT0ZfVEVTVFMtaik7DQogICAgICAg
ICAgaWYgKCFqKQ0KICAgICAgICAgICB7DQogICAgICAgICAgIGVuZCA9IGNs
b2NrKCktc3RhcnQ7DQoJICAgICAgIHR6ID0gIChlbmQvQ0xLX1RDSyk7DQoJ
ICAgICAgIHByaW50ZigiXG5UaW1lIHRha2VuID0gJTYuMWYgc2Vjb25kcyIs
IHR6KTsNCgkgICAgICAgcHJpbnRmKCJcblNwZWVkID0gJTYuMWYgdGVzdHMg
cGVyIHNlY29uZC4iLCAoZmxvYXQpKGxvb3BzL3R6KSk7DQogICAgICAgICAg
IHByaW50ZigiXG5vdXQgb2YgYSB0b3RhbCBvZiAlZCBwbGFpbi9jaXBoZXIg
cGFpcnMuXG4iLCBOT19PRl9URVNUUyk7DQogICAgICAgICAgIHJldHVybjsN
CiAgICAgICAgICAgfQ0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAg
IH0gICAgICAgIC8vZW5kIGZvciBpDQogICAgIH0gICAgICAgICAgICAgICAv
L2UNCiAgICB9ICAgICAgICAgICAgICAgIC8vZA0KICAgfSAgICAgICAgICAg
ICAgICAgLy9jDQogIH0gICAgICAgICAgICAgICAgICAvL2INCiB9ICAgICAg
ICAgICAgICAgICAgIC8vYQ0KfTsNCi8vICA9PT09PT09PT09PT09DQoNCi8q
IFJDNCBhcyBpbXBsZW1lbnRlZCBmcm9tIGEgcG9zdGluZyBmcm9tDQogKiBO
ZXdzZ3JvdXBzOiBzY2kuY3J5cHQNCiAqIEZyb206IHN0ZXJuZGFya0BuZXRj
b20uY29tIChEYXZpZCBTdGVybmRhcmspDQogKiBTdWJqZWN0OiBSQzQgQWxn
b3JpdGhtIHJldmVhbGVkLg0KICogTWVzc2FnZS1JRDogPHN0ZXJuQ3ZLTDRC
Lkh5eUBuZXRjb20uY29tPg0KICovDQoNCnZvaWQgUkM0X3NldF9rZXkoa2V5
LCBsZW4sIGRhdGEpDQpSQzRfS0VZICprZXk7DQppbnQgbGVuOw0KcmVnaXN0
ZXIgdW5zaWduZWQgY2hhciAqZGF0YTsNCgl7DQogICAgICAgIHJlZ2lzdGVy
IFJDNF9JTlQgdG1wOw0KICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQg
aWQxLGlkMjsNCiAgICAgICAgcmVnaXN0ZXIgUkM0X0lOVCAqZDsNCiAgICAg
ICAgaW50IGk7DQoNCiAgICAgICAgZD0mKGtleS0+ZGF0YVswXSk7DQoJZm9y
IChpPTA7IGk8MjU2OyBpKyspDQoJCWRbaV09aTsNCg0KICAgICAgICBrZXkt
PnggPSAwOw0KICAgICAgICBrZXktPnkgPSAwOw0KICAgICAgICBpZDE9aWQy
PTA7DQogICAgICAgIGZvciAoaT0wOyBpIDwgMjU2OyBpKyspDQoJCXsNCgkJ
aWQyID0gKGRhdGFbaWQxXSArIGRbaV0gKyBpZDIpICYgMHhmZjsNCgkJdG1w
PWRbaV07IGRbaV09ZFtpZDJdOyBkW2lkMl09dG1wOw0KCQlpZDE9KGlkMSsx
KSVsZW47DQoJCX0NCgl9Ow0KLy8gID09PT09PT09PT09PT0NCnZvaWQgUkM0
KGtleSwgbGVuLCBpbmRhdGEsIG91dGRhdGEpDQpSQzRfS0VZICprZXk7DQp1
bnNpZ25lZCBpbnQgbGVuOw0KdW5zaWduZWQgY2hhciAqaW5kYXRhOw0KdW5z
aWduZWQgY2hhciAqb3V0ZGF0YTsNCgl7DQogICAgICAgIHJlZ2lzdGVyIFJD
NF9JTlQgKmQsdG1wOw0KICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQg
eCx5Ow0KCXVuc2lnbmVkIGludCBpOw0KDQogICAgICAgIHg9a2V5LT54Ow0K
ICAgICAgICB5PWtleS0+eTsNCg0KICAgICAgICBkPWtleS0+ZGF0YTsNCg0K
ICAgICAgICBmb3IgKGk9MDsgaTxsZW47IGkrKykNCgkJew0KCQl4PSgoeCsx
KSYweGZmKTsNCgkJdG1wPWRbeF07DQoJCXk9KHRtcCt5KSYweGZmOw0KCQlk
W3hdPWRbeV07DQoJCWRbeV09dG1wOw0KCQlvdXRkYXRhW2ldPWluZGF0YVtp
XV5kWyhkW3hdK3RtcCkmMHhmZl07DQoJCX0NCglrZXktPng9eDsNCglrZXkt
Pnk9eTsNCgl9DQovLyAgPT09PT09PT09PT09PQ0KaW50IFJDNF90ZXN0KGtl
eSwgbGVuLCBpbmRhdGEsIG91dGRhdGEpDQpSQzRfS0VZICprZXk7DQp1bnNp
Z25lZCBpbnQgbGVuOw0KdW5zaWduZWQgY2hhciAqaW5kYXRhOw0KdW5zaWdu
ZWQgY2hhciAqb3V0ZGF0YTsNCgl7DQogICAgICAgIHJlZ2lzdGVyIFJDNF9J
TlQgKmQsdG1wOw0KICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgeCx5
Ow0KCXVuc2lnbmVkIGludCBpOw0KICAgIGNoYXIgdGVtcDsNCg0KICAgICAg
ICB4PWtleS0+eDsNCiAgICAgICAgeT1rZXktPnk7DQogICAgICAgIGQ9a2V5
LT5kYXRhOw0KICAgICAgICBmb3IgKGk9MDsgaTxsZW47IGkrKykNCgkJew0K
CQl4PSgoeCsxKSYweGZmKTsNCgkJdG1wPWRbeF07DQoJCXk9KHRtcCt5KSYw
eGZmOw0KCQlkW3hdPWRbeV07DQoJCWRbeV09dG1wOw0KLy8JCW91dGRhdGFb
aV09Ow0KICAgICAgICB0ZW1wID0gaW5kYXRhW2ldXmRbKGRbeF0rdG1wKSYw
eGZmXTsNCiAgICAgICAgaWYgKHRlbXAgIT0gb3V0ZGF0YVtpXSkgICAgICAg
ICAgICAvL3NtYWxsIHNwZWVkIHVwIGltcHJvdmVtZW50DQogICAgICAgICBy
ZXR1cm4oMCk7ICAgICAgICAgICAgICAgICAgICAgICAgLy9maXJzdCBieXRl
IG5vdCByaWdodCwgbmV4dCBrZXkNCgkJfQ0KCWtleS0+eD14Ow0KCWtleS0+
eT15Ow0KICAgIHJldHVybigxKTsNCgl9Ow0KLy8gID09PT09PT09PT09PT0N
CnZvaWQgUkM0X3NldF9rZXlfdGVzdChrZXksIGxlbiwgZGF0YSkNClJDNF9L
RVkgKmtleTsNCmludCBsZW47DQpyZWdpc3RlciB1bnNpZ25lZCBjaGFyICpk
YXRhOw0KCXsNCiAgICAgICAgcmVnaXN0ZXIgUkM0X0lOVCB0bXA7DQogICAg
ICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpZDEsaWQyOw0KICAgICAgICBy
ZWdpc3RlciBSQzRfSU5UICpkOw0KICAgICAgICBpbnQgaTsNCiAgICAgICAg
ZD0mKGtleS0+ZGF0YVswXSk7DQogICAgICAgIG1lbWNweShkLCAma2V5X2J1
ZmYsIHNpemVvZihrZXlfYnVmZikpOyAgLy9zbWFsbCBzcGVlZCBpbXByb3Zl
bWVudA0KDQogICAgICAgIGtleS0+eCA9IDA7DQogICAgICAgIGtleS0+eSA9
IDA7DQogICAgICAgIGlkMT1pZDI9MDsNCiAgICAgICAgZm9yIChpPTA7IGkg
PCAyNTY7IGkrKykNCgkJew0KCQlpZDIgPSAoZGF0YVtpZDFdICsgZFtpXSAr
IGlkMikgJiAweGZmOw0KCQl0bXA9ZFtpXTsgZFtpXT1kW2lkMl07IGRbaWQy
XT10bXA7DQoJCWlkMT0oaWQxKzEpJWxlbjsNCgkJfQ0KCX07DQoNCi8vICA9
PT09PT09PT09PT09AAo=
--Boundary..3936.1071713528.multipart/mixed--