--000e0cd4a7180ae264046ad1e027 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Well, here's my abortive attempt at solving it :) Attaching the code anyway in case anyone wants to use it. It's more along the lines of using ruby as a tool to explore the cipher. martin --000e0cd4a7180ae264046ad1e027 Content-Type: application/x-ruby; name="crypto.rb" Content-Disposition: attachment; filename="crypto.rb" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fv6q787g0 IyBzdGFydCB3aXRoIG91ciBjeXBoZXJ0ZXh0CiRvcmlnID0gPDxIRVJFCllSRkZKIE9TTFhBIFBR UFFZIEFQVlJSIERQTlNBIFpBUElLCk9YTVFKIEJPSU1ZIFhNU1paIEZSSUhFIEFVWEpTIElPUk9S CklFQUhCIFFZQVBRIFlSSFhKIFNUUklGIE9SSUVYIEtPSUtEClJFQVFLIEpIQk9JIFFTRklRIEFK SFBBIFFQS0lGIEZSRUtPClhNUUpCIE9JR0FBIExSS0lTIFBSTlNBIFoxM1ZJIFBJS09YCk1RSkJP IElHTlNBIFpJUFZSIEZGWUpNIFJYSlNZIElFVVNICkhFUkUKCiMgZ2V0IHJpZCBvZiB0aGUgc3Bh Y2luZwpjeXAgPSAkb3JpZy5nc3ViKC9ccysvLCAnJykKCiMgY291bnQgZnJlcXVlbmNpZXMKZiA9 IEhhc2gubmV3KDApCmN5cC5lYWNoX2NoYXIge3xpfCBmW2ldICs9IDF9CgokbGV0dGVycyA9IGYu a2V5cy5zb3J0X2J5IHt8aXwgLWZbaV19Lm1hcCB7fHh8IFt4LCAxMDAuMCAqIGZbeF0gLyAoNSoz NildfQpwICRsZXR0ZXJzCgojIHBhc3RlIGluIHRoZSBsZXR0ZXIgZnJlcXVlbmN5IGNoYXJ0IGZy b20gd2lraXBlZGlhCiRjaGFydCA9ICV7CmEgCTguMTY3JQpiIAkxLjQ5MiUKYyAJMi43ODIlCmQg CTQuMjUzJQplIAkxMi43MDIlCmYgCTIuMjI4JQpnIAkyLjAxNSUKaCAJNi4wOTQlCmkgCTYuOTY2 JQpqIAkwLjE1MyUKayAJMC43NzIlCmwgCTQuMDI1JQptIAkyLjQwNiUKbiAJNi43NDklCm8gCTcu NTA3JQpwIAkxLjkyOSUKcSAJMC4wOTUlCnIgCTUuOTg3JQpzIAk2LjMyNyUKdCAJOS4wNTYlCnUg CTIuNzU4JQp2IAkwLjk3OCUKdyAJMi4zNjAlCnggCTAuMTUwJQp5IAkxLjk3NCUKeiAJMC4wNzQl Cn0uZ3N1YigvJS8sICcnKS5zcGxpdCgvXG4vKQoKJGNoYXJ0LnNoaWZ0CiRjaGFydCA9ICRjaGFy dC5tYXAge3xpfCBpLnNwbGl0KC9ccysvKX0ubWFwIHt8cHwgW3BbMF0sIHBbMV0udG9fZl19LnNv cnRfYnkge3xwfCAtcFsxXX0KcCAkY2hhcnQKCiMgb2theSwgbm93IHdlJ3JlIGdldHRpbmcgc29t ZXdoZXJlLiBsZXQncyBsaW5lIHRoZSB0d28gdXAKYyA9ICRsZXR0ZXJzLnppcCgkY2hhcnQpLm1h cCB7fGEsYnwgW2FbMF0sIGJbMF1dfQpwIGMKCiMgcGFzdGUgaW4gdGhlIHN1YnN0aXR1dGlvbiBj aGFydCBzbyB3ZSBjYW4gaGFuZHR3ZWFrIGl0CnN1YiA9IFtbIkkiLCAiZSJdLCBbIlIiLCAidCJd LCBbIkEiLCAiYSJdLCBbIk8iLCAibyJdLCBbIlMiLCAiaSJdLCBbIlEiLCAibiJdLAogIFsiUCIs ICJzIl0sIFsiSiIsICJoIl0sIFsiRiIsICJyIl0sIFsiWCIsICJkIl0sIFsiSyIsICJsIl0sIFsi WSIsICJjIl0sIAogIFsiRSIsICJ1Il0sIFsiSCIsICJtIl0sIFsiTSIsICJ3Il0sIFsiQiIsICJm Il0sIFsiWiIsICJnIl0sIFsiViIsICJ5Il0sIAogIFsiTiIsICJwIl0sIFsiRCIsICJiIl0sIFsi VSIsICJ2Il0sIFsiTCIsICJrIl0sIFsiRyIsICJqIl0sIFsiVCIsICJ4Il0sIAogIFsiMSIsICJx Il0sIFsiMyIsICJ6Il1dCgpvID0gJG9yaWcuZHVwCnN1Yi5lYWNoIHt8aSwganwgby5nc3ViISBp LCBqfQpwdXRzIG8gIyA9PgojIGN0cnJoIG9pa2RhIHNuc25jIGFzeXR0IGJzcGlhIGdhc2VsCiMg b2R3bmggZm9ld2MgZHdpZ2cgcnRlbXUgYXZkaGkgZW90b3QKIyBldWFtZiBuY2FzbiBjdG1kaCBp eHRlciBvdGV1ZCBsb2VsYgojIHR1YW5sIGhtZm9lIG5pcmVuIGFobXNhIG5zbGVyIHJ0dWxvCiMg ZHduaGYgb2VqYWEga3RsZWkgc3RwaWEgZ3F6eWUgc2Vsb2QKIyB3bmhmbyBlanBpYSBnZXN5dCBy cmNodyB0ZGhpYyBldXZpbQoKIyBvaCB3ZWxsIDopIHRyeSBzb21ldGhpbmcgZWxzZQojIGxldCdz IG1ha2Ugc3ViIGEgaGFzaCwgZm9yIGVhc2llciB0d2Vha2luZwokc3VicyA9IEhhc2hbKnN1Yi5m bGF0dGVuXQpjbGFzcyA8PCAkc3VicwogIGRlZiBhc3NpZ24oeCwgeSkKICAgIG9sZCA9IHNlbGYu aW5kZXgoeSkKICAgIHNlbGZbb2xkXSA9IHNlbGZbeF0KICAgIHNlbGZbeF0gPSB5CiAgZW5kCgog IGRlZiBkaXNwbGF5CiAgICBzZWxmLmtleXMuc29ydF9ieSB7fHh8IHNlbGZbeF19Lm1hcCB7fHh8 IFt4LCBzZWxmW3hdXX0udHJhbnNwb3NlLm1hcCgmOmpvaW4pCiAgZW5kCmVuZAoKcCAkc3Vicwpk ZWYgdHJ5KCp4eXMpCiAgbyA9ICRvcmlnLmR1cAogIHh5cy5lYWNoIHt8eHl8IAogICAgeCwgeSA9 IHh5LnRvX3Muc3BsaXQoLy8pCiAgICB4ID0geC51cGNhc2UKICAgICRzdWJzLmFzc2lnbih4LHkp CiAgfQogICRzdWJzLmVhY2gge3xpLCBqfCBvLmdzdWIhIGksIGp9CiAgcHV0cyAKICBwdXRzICRj aGFydC5tYXAoJjpmaXJzdCkuam9pbgogIHB1dHMgJGxldHRlcnMubWFwKCY6Zmlyc3QpLmpvaW4K ICBwdXRzICRzdWJzLmRpc3BsYXkKICBwdXRzIG8uemlwKCRvcmlnKQplbmQKCmRlZiBtZXRob2Rf bWlzc2luZyhtZXRoKQogIG1ldGgudG9fcwplbmQKCiMgbG90cyBvZiBGRiAtIG1heWJlIEYgPSBl IAp0cnkgZmUgIyBub3BlLCBtYXliZSBGID0gcz8KdHJ5IGZzICMgdGhlIHdvcmQgJ2dyZXknIGhh cyBhcHBlYXJlZCA6KSBhbHNvICdiZXBpYScsIHN1Z2dlc3RpbmcgYSBjb2xvdXIgdGhlbWUKdHJ5 IGRzICMgbmFoCnRyeSBmdCAjIE5TQSA9IHRoZT8KdHJ5IG50LCBzaCwgYWUgIyBub3RlICJ0aGUg Z3JheSIuIHN0aWxsIHBvbmRlcmluZyBhbGwgdGhvc2UgRkZzCnRyeSBybywgZm4gIyBSIGlzIGhp Z2gtcHJvYmFiaWxpdHkgdG9vCnRyeSBqeSAjIHNvcnJ5Pwp0cnkgeXMsIGZyICMgc29ycnkgaT8K dHJ5IG9pCg --000e0cd4a7180ae264046ad1e027--