トリップ

このエントリーをはてなブックマークに追加
1Pue Na Vista
 
2Pue Na Vista:04/07/19 11:27 ID:q+rE4oG1
2なら地球爆破
3Pue Na Vista:04/07/19 11:27 ID:q+rE4oG1
3なら●●屋撃破
4Pue Na Vista:04/07/19 11:35 ID:q+rE4oG1
あの辺の板見るに後方参照なんて殆ど使われてないわけだが。
もしDFAタイプでかなり高速なエンジンを使える。

ああ、trxだけどな。
5Pue Na Vista:04/07/19 11:37 ID:q+rE4oG1
いつぞのバージョンのコア

for(int m=25; m; m --) {
/* 16段の暗号化オペレーション */
for(int i=0; i < 16; i++) {
if ( ((m^i) & 1) == 0 ) { // R→L
s1( R[E[ 0]] ^ KS[i][ 0], R[E[ 1]] ^ KS[i][ 1], R[E[ 2]] ^ KS[i][ 2],
R[E[ 3]] ^ KS[i][ 3], R[E[ 4]] ^ KS[i][ 4], R[E[ 5]] ^ KS[i][ 5],
&L[ 8], &L[16], &L[22], &L[30]);
s2( R[E[ 6]] ^ KS[i][ 6], R[E[ 7]] ^ KS[i][ 7], R[E[ 8]] ^ KS[i][ 8],
R[E[ 9]] ^ KS[i][ 9], R[E[10]] ^ KS[i][10], R[E[11]] ^ KS[i][11],
&L[12], &L[27], &L[ 1], &L[17]);
s3( R[ 7] ^ KS[i][12], R[ 8] ^ KS[i][13], R[ 9] ^ KS[i][14],
R[10] ^ KS[i][15], R[11] ^ KS[i][16], R[12] ^ KS[i][17],
&L[23], &L[15], &L[29], &L[ 5]);
s4( R[11] ^ KS[i][18], R[12] ^ KS[i][19], R[13] ^ KS[i][20],
R[14] ^ KS[i][21], R[15] ^ KS[i][22], R[16] ^ KS[i][23],
&L[25], &L[19], &L[ 9], &L[ 0]);
s5( R[E[24]] ^ KS[i][24], R[E[25]] ^ KS[i][25], R[E[26]] ^ KS[i][26],
R[E[27]] ^ KS[i][27], R[E[28]] ^ KS[i][28], R[E[29]] ^ KS[i][29],
&L[ 7], &L[13], &L[24], &L[ 2]);
s6( R[E[30]] ^ KS[i][30], R[E[31]] ^ KS[i][31], R[E[32]] ^ KS[i][32],
R[E[33]] ^ KS[i][33], R[E[34]] ^ KS[i][34], R[E[35]] ^ KS[i][35],
&L[ 3], &L[28], &L[10], &L[18]);
s7( R[23] ^ KS[i][36], R[24] ^ KS[i][37], R[25] ^ KS[i][38],
R[26] ^ KS[i][39], R[27] ^ KS[i][40], R[28] ^ KS[i][41],
&L[31], &L[11], &L[21], &L[ 6]);
s8( R[27] ^ KS[i][42], R[28] ^ KS[i][43], R[29] ^ KS[i][44],
R[30] ^ KS[i][45], R[31] ^ KS[i][46], R[ 0] ^ KS[i][47],
&L[ 4], &L[26], &L[14], &L[20]);
}
6Pue Na Vista:04/07/19 11:38 ID:q+rE4oG1
else { // L→R
s1( L[E[ 0]] ^ KS[i][ 0], L[E[ 1]] ^ KS[i][ 1], L[E[ 2]] ^ KS[i][ 2],
L[E[ 3]] ^ KS[i][ 3], L[E[ 4]] ^ KS[i][ 4], L[E[ 5]] ^ KS[i][ 5],
&R[ 8], &R[16], &R[22], &R[30]);
s2( L[E[ 6]] ^ KS[i][ 6], L[E[ 7]] ^ KS[i][ 7], L[E[ 8]] ^ KS[i][ 8],
L[E[ 9]] ^ KS[i][ 9], L[E[10]] ^ KS[i][10], L[E[11]] ^ KS[i][11],
&R[12], &R[27], &R[ 1], &R[17]);
s3( L[ 7] ^ KS[i][12], L[ 8] ^ KS[i][13], L[ 9] ^ KS[i][14],
L[10] ^ KS[i][15], L[11] ^ KS[i][16], L[12] ^ KS[i][17],
&R[23], &R[15], &R[29], &R[ 5]);
s4( L[11] ^ KS[i][18], L[12] ^ KS[i][19], L[13] ^ KS[i][20],
L[14] ^ KS[i][21], L[15] ^ KS[i][22], L[16] ^ KS[i][23],
&R[25], &R[19], &R[ 9], &R[ 0]);
s5( L[E[24]] ^ KS[i][24], L[E[25]] ^ KS[i][25], L[E[26]] ^ KS[i][26],
L[E[27]] ^ KS[i][27], L[E[28]] ^ KS[i][28], L[E[29]] ^ KS[i][29],
&R[ 7], &R[13], &R[24], &R[ 2]);
s6( L[E[30]] ^ KS[i][30], L[E[31]] ^ KS[i][31], L[E[32]] ^ KS[i][32],
L[E[33]] ^ KS[i][33], L[E[34]] ^ KS[i][34], L[E[35]] ^ KS[i][35],
&R[ 3], &R[28], &R[10], &R[18]);
s7( L[23] ^ KS[i][36], L[24] ^ KS[i][37], L[25] ^ KS[i][38],
L[26] ^ KS[i][39], L[27] ^ KS[i][40], L[28] ^ KS[i][41],
&R[31], &R[11], &R[21], &R[ 6]);
s8( L[27] ^ KS[i][42], L[28] ^ KS[i][43], L[29] ^ KS[i][44],
L[30] ^ KS[i][45], L[31] ^ KS[i][46], L[ 0] ^ KS[i][47],
&R[ 4], &R[26], &R[14], &R[20]);
}
}
}
7エリート街道さん:04/07/19 11:40 ID:0PNRQ7K3
トリップ検索するのに、どのソフトがいいんですか?
tripmonaはセーブ機能がないのがいまいちです。
8Pue Na Vista:04/07/19 11:42 ID:q+rE4oG1
s1( R[E[ 0]] ^ KS[i][ 0], R[E[ 1]] ^ KS[i][ 1], R[E[ 2]] ^ KS[i][ 2],
R[E[ 3]] ^ KS[i][ 3], R[E[ 4]] ^ KS[i][ 4], R[E[ 5]] ^ KS[i][ 5],
&L[ 8], &L[16], &L[22], &L[30]);

このへん、実は配列を使って添え字を出し、アドレスを求めるというかなり無駄なアルゴリズムだ
9Pue Na Vista:04/07/19 11:47 ID:q+rE4oG1
L2様にはどーやら不完全なものを渡してしまったようだ。
しかし、ここは精々数%程度のボトルネック要因なので
そのまま使ったのではあそこまで速度が落ちることはまず無い。
10Pue Na Vista:04/07/19 12:08 ID:q+rE4oG1
>>7
ランダムサーチにセーブ機能なんていらないっしょ。
L2・ra8あたりはシーケンシャルなので要るだろうけど。
11Pue Na Vista:04/07/19 14:10 ID:q+rE4oG1
s1(*EP[ 0] ^ K[0], *EP[ 1] ^ K[1], *EP[ 2] ^ K[2],
*EP[ 3] ^ K[3], *EP[ 4] ^ K[4], *EP[ 5] ^ K[5],
&L[ 8], &L[16], &L[22], &L[30]);
s2(*EP[ 6] ^ K[6], *EP[ 7] ^ K[7], *EP[ 8] ^ K[8],
*EP[ 9] ^ K[9], *EP[10] ^ K[10], *EP[11] ^ K[11],
&L[12], &L[27], &L[ 1], &L[17]);
s3(R[ 7] ^ K[12], R[ 8] ^ K[13], R[ 9] ^ K[14],
R[10] ^ K[15], R[11] ^ K[16], R[12] ^ K[17],
&L[23], &L[15], &L[29], &L[ 5]);
s4(R[11] ^ K[18], R[12] ^ K[19], R[13] ^ K[20],
R[14] ^ K[21], R[15] ^ K[22], R[16] ^ K[23],
&L[25], &L[19], &L[ 9], &L[ 0]);
s5(*EP[24] ^ K[24], *EP[25] ^ K[25], *EP[26] ^ K[26],
*EP[27] ^ K[27], *EP[28] ^ K[28], *EP[29] ^ K[29],
&L[ 7], &L[13], &L[24], &L[ 2]);
s6(*EP[30] ^ K[30], *EP[31] ^ K[31], *EP[32] ^ K[32],
*EP[33] ^ K[33], *EP[34] ^ K[34], *EP[35] ^ K[35],
&L[ 3], &L[28], &L[10], &L[18]);
s7(R[23] ^ K[36], R[24] ^ K[37], R[25] ^ K[38],
R[26] ^ K[39], R[27] ^ K[40], R[28] ^ K[41],
&L[31], &L[11], &L[21], &L[ 6]);
s8(R[27] ^ K[42], R[28] ^ K[43], R[29] ^ K[44],
R[30] ^ K[45], R[31] ^ K[46], R[ 0] ^ K[47],
&L[ 4], &L[26], &L[14], &L[20]);
12Pue Na Vista:04/07/19 14:11 ID:q+rE4oG1
s1(*EP[48] ^ K[0], *EP[49] ^ K[1], *EP[50] ^ K[2],
*EP[51] ^ K[3], *EP[52] ^ K[4], *EP[53] ^ K[5],
&R[ 8], &R[16], &R[22], &R[30]);
s2(*EP[54] ^ K[6], *EP[55] ^ K[7], *EP[56] ^ K[8],
*EP[57] ^ K[9], *EP[58] ^ K[10], *EP[59] ^ K[11],
&R[12], &R[27], &R[ 1], &R[17]);
s3(L[ 7] ^ K[12], L[ 8] ^ K[13], L[ 9] ^ K[14],
L[10] ^ K[15], L[11] ^ K[16], L[12] ^ K[17],
&R[23], &R[15], &R[29], &R[ 5]);
s4(L[11] ^ K[18], L[12] ^ K[19], L[13] ^ K[20],
L[14] ^ K[21], L[15] ^ K[22], L[16] ^ K[23],
&R[25], &R[19], &R[ 9], &R[ 0]);
s5(*EP[72] ^ K[24], *EP[73] ^ K[25], *EP[74] ^ K[26],
*EP[75] ^ K[27], *EP[76] ^ K[28], *EP[77] ^ K[29],
&R[ 7], &R[13], &R[24], &R[ 2]);
s6(*EP[78] ^ K[30], *EP[79] ^ K[31], *EP[80] ^ K[32],
*EP[81] ^ K[33], *EP[82] ^ K[34], *EP[83] ^ K[35],
&R[ 3], &R[28], &R[10], &R[18]);
s7(L[23] ^ K[36], L[24] ^ K[37], L[25] ^ K[38],
L[26] ^ K[39], L[27] ^ K[40], L[28] ^ K[41],
&R[31], &R[11], &R[21], &R[ 6]);
s8(L[27] ^ K[42], L[28] ^ K[43], L[29] ^ K[44],
L[30] ^ K[45], L[31] ^ K[46], L[ 0] ^ K[47],
&R[ 4], &R[26], &R[14], &R[20]);

作り直してみた。

EPはポインタ配列な。
13Pue Na Vista:04/07/19 18:27 ID:q+rE4oG1
#!/usr/bin/ruby
OUT = [8, 16, 22, 30, 12, 27, 1, 17, 23, 15, 29, 5, 25, 19, 9, 0,
7, 13, 24, 2, 3, 28, 10, 18, 31, 11, 21, 6, 4, 26, 14, 20]
2.times{|i|
8.times {|j|
print "s", j+1, "("
6.times {|k|
if (j&2) == 0
printf("*EP[%2d", i*48 + j*6+k)
else
print i&1==1? "L[" : "R["
printf("%2d", (j*4+k+31) & 31)
end
printf( "] ^ K[%2d], ", j*6+k)
print "\n " if(k % 3 == 2)
}
4.times {|k|
print i&1==1? "&R" : "&L"
printf("[%2d]", OUT[j*4+k])
print k != 3 ? ", " : ");\n"
}
}
}

いちいち手で書くのメンドイからスクリプト使うんだけどね
14Pue Na Vista:04/07/21 01:53 ID:/PSPwbWd
ageておく



原因は






                                  俺





15エリート街道さん:04/07/22 18:49 ID:GIOkcTpc
ストリップ
ぷえって友達いないでしょ
17Pue Na Vista:04/07/22 18:57 ID:r2b3+XDr
よくわかったな。
そうか…。俺が脳内友達でいてやるよ
19 ◆A.r.C.H.e. :04/07/22 20:09 ID:Ek+6eVzs
来週また飲み会ですよ
本当にいないんだな…
21 ◆A.r.C.H.e. :04/07/22 20:43 ID:Ek+6eVzs
いちいち落とすのメンドイからメッセオンラインやりっぱなにしてると必ずメッセージ入れてくる
妖精さんの中の人のほうも大変ですね
22エリート街道さん:04/07/22 21:07 ID:JyVpoSlK
23L2 ◆OoooOOOOOo :04/07/23 01:56 ID:ScniqcKJ
>>11-12 効果無しでした。

ちなみに配列の添え字ひっくり返し実験は↓の5.を信じて。
http://tmp4.2ch.net/test/read.cgi/joke/1089834108/390
24 ◆A.r.C.H.e. :04/07/23 08:46 ID:6tt66iiJ
そいつはただの間違いですorz
その前にやってたのが、添え字を求める配列kpos[n]作って
Key[56]な配列を コアループ内でKey[kpos[n]]で参照してた。

キースケジュールの配列の書き込みを展開しまくっていっきに代入する
コードあるけど、アレをタイムクリティカルな処理の中に入れるのがかなり
やばいみたいですわ。キャッシュミス誘発しまくり。
あれやるくらいならKey[kpos[n]]で参照のほうが良かった感じ。

FP+縦横転置+文字列化

あれはアレで問題なしだが、コアループ直後にやるより、ループを別にして
コアのデータをある程度ため込んでからやったほうがスピード出そう。
ちょっとコア書き換えになるけど。

来週末までにコーディングスタイル真似て完全に書き直すから待っててくだされ。
25エリート街道さん:04/07/23 09:54 ID:g54pA1pH
L2キテタ━(゚∀゚)━!!
26のたんぺ ◆Nonotanpe. :04/07/23 10:50 ID:j2BDjS1X
>>24
いいIDだな、おい
27 ◆A.r.C.H.e. :04/07/23 19:24 ID:6tt66iiJ
ああ、ちなみにS関数を書き直す意味が殆どないってのはハッタリじゃなくてガチですよ。
実際には0.1パー単位でも効率上がればいいほうだと思います。

最短ゲート数を算出するのにまさか手作業でやってたんでしょうかあの人は。




ところでLyta Penna女史のページが消えてますがな。
28学歴妖精矢上川:04/07/23 21:58 ID:tCau+hpu
IDてすつ
29 ◆A.r.C.H.e. :04/07/24 12:19 ID:Mjq+sxF5
○| ̄|_



なんかあのコードは根本的に0から書き直した方がよさそう。
なるべく再利用する形で手をくわえていってるのですが、コンパイル通して
実行時のもっさりなスピード見るたび、激しくぶち切れそうになりまつ

なおしたコードを挿入していく形ではまったく埒があかないので
逆にうちの現行開発版コードに手を加えていきます。

たぶんアレとは激しく別物になりまつよ。
30 ◆A.r.C.H.e. :04/07/24 15:38 ID:Mjq+sxF5
ちょっとrc5desとJohnの各MMX版コアと当方のコアのS-Boxゲートを比較してみた。
rc5desはstd版をベースにしてるので、当方のほうが確実に速い。

ornゲート、xornゲートのエミュレーションの為にで新たに発生したnotゲート
(0xFFFFFFFFFFFFFFFFFFi64とのpxorをとることで代用)の数は、
S1〜S8の合計で、Johnは17個、自分のは19個

あれ?やっぱり効率悪いのか?

で、根性で減らせるとこ見つけて減らせました。
それで、ようやくJohnと同じゲート数。

さて、これ以上は減らせないものか。

MMX/SSE2にpand, por, pxor, pandnの4つの論理演算に加えとレイテンシ・スループットの
同じporn命令とpxorn命令が追加された場合、6種類のゲートを前提にしているnonstd.cの
コードのパワーがフルに発揮でき、計算上、3〜4%程度の速度向上(やる気ねぇ〜
クロックやIPCを上げてくれたほうが有意義です。
31 ◆aV/kkkkkkk :04/07/24 21:14 ID:+1mXp0SE
test
32 ◆4444444UFo :04/07/24 21:46 ID:js3dAQw+
test
33 ◆LLLLLLLLL. :04/07/24 21:47 ID:js3dAQw+
test
34 ◆SSS6666666 :04/07/24 21:48 ID:js3dAQw+
test
35 ◆8RYUNEN0T2 :04/07/25 12:48 ID:dhHqMnUC
えりち↓
36         ◆A.r.C.H.e. :04/07/25 15:29 ID:FbSqFqgx
↑劣等生よ、自分が留年しそうだからって人にあたるのはやめてください。
 お前が俺に意見できるのは学業終えてからですよ。
37         ◆A.r.C.H.e. :04/07/25 21:45 ID:FbSqFqgx
なにやら 民が
漏れ仕様の出せ出せと うるさいので
出すしかなさそうです


見知らぬ国のトリッパー(wを意識しまくったGUI版「赤いトリッパー」
(例の詐欺画像のトリッパーのアイコンが緑から赤に変更されてたことから着想)

たぶん実行速度が3倍


リリースは未定


つか、やること大杉
38エリート街道さん:04/07/26 06:55 ID:R1KWTu5I
目に見える物がないと納得できないんだあね
応援しまくりsageまくり
39 ◆A.r.C.H.e. :04/07/26 08:38 ID:qRBOaCGJ
配布サイトにHN入りのベンチ
目に見えてるじゃねーか、何が不満なんだ?
たぶん約一名だけだと思うけど。

Million Seeker用の高速生成ライブラリ、3月ベンチに使ったコアをベースに改良を加えたものに、
転置・文字列化アルゴリズムは現時点での最速バージョンを採用しようと思う。

この「転置・文字列化アルゴリズム」こそが完全オリジナル。
はっきしいってコア部分は、John the RipperをC++のライブラリ使って書き直しただけって
言われても、「ハイそうですよ」としか答えられない。
ただし、あの複雑なコードをどうパクるのかは、知らない。
ソースコードサイズとしては当方のほうが、必要部分だけ抜き出し縮小をはかった形となる。
もちろんJohnのコードは1行も使い回してないのでGPLには抵触しない。


ちなみに、コアの開発コードネームは
Skyfish ・・・3月ベンチ版。一緒に含めた転置アルゴリズムがうんこ。
Janne Da Arc ・・・5月にソース公開したバージョン。速度ageようと無茶なメモリ展開をしたのが
      裏目に出た、壮大な失敗作。それを公開する俺もアホ。
Buenavista ・・・7月版。今回Million seekerのコアに使われる。Skyfishをベースに改良したバージョン
      キャッシュメモリの消費を押さえたいが、実行トレースに関しては微妙か。
      この回で初めてS-Boxを見直した。
Red Fox/Green Racoon-Dog ・・・9月頃を予定

大体2月おきの法則

俺は、インターフェイス設計より、数式使いながらアルゴリズム考えてたほうがおもろいねん。
どっちかというと実装屋よりは理論屋向きなんだろうな。


落ちそうなのでageまくり
愛してますよ絵里♪
40最下位駅弁 ◆stars/BvS6 :04/07/26 09:55 ID:n0hE1QjE
テスト
41エリート街道さん:04/07/26 18:00 ID:XpjwFcvA
いんなーとりっぷ
42エリート街道さん
.