Syntax highlighter

2012-04-29

The reason to be here

Since I don't have any reason, I have been thinking why I'm still here and where I want to go. I haven't found any answer of it. One thing I know for sure is, I don't want to be here so long and even I'm not sure whether I can or not because of the visa.

The problem is, however, I got too much use to be in non harsh working environment. Yes, European working style is excellent if I compare with Japanese one. So I'm also seriously looking for a job in Japan or somewhere in the world. Well if it's not in the Netherlands, it would be fine by me... maybe not... in UK maybe, at least no language barrier.

Things are not so going easy. But I must get out from this suffocating atmosphere. What can I do for it? Think.

2012-04-26

Twitterに投稿できた!

(net oauth)というライブラリを作成中。cl-oauthの移植なんだけど、drakmaとかのライブラリはあるわけ無いのでAPI名と処理の流れだけ。
Service Providerまで作る必要はないよなぁと思っているのでConsumerだけ。気が向いたらそのうち実装するかも。
っで、とりあえずTwitterに投稿できたので浮かれて書いてる。コードは以下。
(import (rnrs) (net oauth) (text sxml ssax)
 (sagittarius io)
 (srfi :26 cut))

(define (call/twitter-api->sxml token method path param . opt)
  (define (call)
    (if token
 (access-protected-resource (string-append "http://api.twitter.com" path)
       token
       :user-parameters param
       :request-method method)
 (assertion-violation 'call/twitter-api->sxml
        "later")))
  (define (retrieve body status hint advice)
    (call-with-input-string body (cut ssax:xml->sxml <> '())))
  (call-with-values call retrieve))

(define (twitter-update/sxml token message . opt)
  (call/twitter-api->sxml token 'POST "/1/statuses/update.xml"
     `(("status" ,message))))

(define access-token (make-access-token 
        :key "アクセストークンを入れてね"
        :secret "アクセスシークレットを入れてね"
        :consumer
        (make-consumer-token
         :key "コンシューマトークンを入れてね"
         :secret "コンシューマシークレットを入れてね")))
(print
 (twitter-update/sxml access-token "Hello world from Sagittarius Scheme!!"))
これだけで投稿が出来た。まぁ、アクセストークンを作る部分とかもあるんだけど、一度作ったら使いまわしなので略。Twitter用のAPI集はSagittarius本体に入れるつもりはないんだけど、どこかに置けたらいいなぁ。
これで仕事してる振りして呟ける(違

そういえば、OAuthの2.0どうしよう。今の作りだとガッツリ1.0用だ・・・

2012-04-23

OAuthを調べる。

その昔(3ヶ月くらい前?)にSagittariusからTwitterに投稿してみようとして挫折したことがあった。理由はHMACがないから。っで、今はあるので、仕様を理解すればいけるのかなぁと思いちょっと調べてみた。

とりあえず現行のバージョンは1.0なんだけど、2.0も策定中でFacebook、mixi及びその他(忘れた)が先行採用しているらしい。2.0の方はSSLが必須になるので、サポートするのはちと厳しい。(TLSが実装できたらやることにするとして、中身を簡単に入れ替えられるように実装する必要はあるか・・・)
詳しい中身はRFC5849を見ることにして、概要をとりあえず頭に入れたい。っで下記のページが分かりやすかった。
APIアクセス権を委譲するプロトコル、OAuthを知る - @IT

署名とかの処理を除けば処理フローは割りと簡単な感じ。サーバー側を書くつもりは今のところないので、必要な登場人物としては、Consumer(RFCではClientになっている)だけだろう。流れとしては、
  1. リクエストトークンの取得
  2. ユーザー認証
上記2つは事前に行う必要がある。コンソールアプリだと、リダイレクトが面倒だ。どうしよう?
  1. アクセストークンの発行
  2. APIを叩く
これらはまぁ問題ないだろう。ユーザー認証で取得できた情報をどこに格納するかとかもそれなりに問題か。暗号化するとかしないとか考えた方がいいだろうか?

しかし、OAuthと書いてオースとは読めない自分。どうしてもオーオースになる。

2012-04-20

簡易PEMファイルリーダー

とりあえずささっと作ってみた。X509証明書のみに対応という手抜きっぷり。
#!/usr/local/bin/sash

#< (sagittarius regex) >
(import (rnrs) (asn.1) (getopt)
 (sagittarius)
 (sagittarius regex)
 (sagittarius control)
 (rfc base64)
 (rfc x.509)
 (util file))

(define (read-content p end)
  (let loop ((line (get-line p))
      (r ""))
    (if (eof-object? line)
 (assertion-violation 'read-content "unexpected eof")
 (cond ((looking-at #/-----END (\w+)-----/i line)
        => (lambda (m)
      (unless (string=? (m 1) end)
        (assertion-violation 'read-content
        "invalid pem file"))
      r))
       (else
        (loop (get-line p)
       (string-append r line)))))))

(define (parse-pem-file in)
  (call-with-input-file in
    (lambda (p)
      (let loop ((line (get-line p)))
 (unless (eof-object? line)
   (cond ((looking-at #/-----BEGIN (\w+)-----/i line)
   => (lambda (m)
        ;; read until end comes
        (let1 base64 (base64-decode-string (read-content p (m 1))
        #f)
   (print (make-x509-certificate 
    (open-bytevector-input-port base64))))))
  (else
   (loop (get-line p)))))))))

(define (usage args)
  (format (current-error-port) "usage: ~a -i file~%" (car args))
  (exit -1))

(define (main args)
  (with-args args
      ((in (#\i "input") #t (usage args)))
    (parse-pem-file in)))
まぁ、使い捨てのスクリプトとしては短めに書ける方ではないだろうか。よく言えばこの辺りを処理をするライブラリがそろっていると。というか、そんなライブラリくらいしかないのだが。偏りが激しい。ちょっと手を入れれば、RSAの公開鍵と秘密鍵も読めるようになる。けど、今のところいらないので無視。

2012-04-19

鈍足な正規表現だった・・・

なんとなく正規表現のベンチマークをGauche (0.9.2)、mosh (0.2.7)、Sagittarus(HEAD)の3つでとってみた。
正規表現は以下のページのものを使用。
思い立ったが吉日 (正規表現・続き) - Island Life

まぁ、結果はGaucheより速く、moshより遅いといったもの。moshは鬼車を使っているので、鬼車が速いのだろう。ただ、Gaucheは次のバージョンで速くなるらしいので、Sagittariusは鈍足な正規表現を持っていることになる。(特に最適化してないし、リニアタイムであることくらいしか保障してないからしょうがないのだが)。

どうでもいいのだけど、string output portとbytevector output portの実装が今まで腐っていたので直した。というか、上記のコードを移植するに当たって、直さないとメモリが尽きるというあほみたいな問題があった。単純な修正だが結構効果があって、bytevector output portで約2倍の速度を出すようになった。メモリも無駄に枯渇するということもなくなったので、いいことだ。

JSP2.1と2.2の非互換ではまったこと

基本的には2.1→2.2でなんら問題は起きないはずなんだけど、起きた。しかも、解決方法みつからずの難問。

まずは以下のコードを見てほしい。
public class Foo implements Serializable {
  public FooEnum getEnum() {
    return new FooEnum();
  }
}
一見なんの変哲もないBeanである。実際何の変哲もない(勘のいい方はもう気づいたかも・・・)。
問題はこのBeanをJSPで使うと起きるのである。 以下がJSP。Fooのインスタンスfooをどっかから受け取っているという前提。
${foo.enum}
これ、JSP2.1ではOKで、JSP2.2ではNG。理由は'enum'は識別子として認識しないから。JSP2.2で書きたかったら以下のように直接メソッドを呼ぶ必要がある。
${foo.getEnum()}
問題はJSP2.1はメソッドの直接呼出しをサポートしていないということ。つまり、JSP2.1で合法にすると、JSP2.2では非合法になる。逆も同様。逃げ場なし。

どうしたか?直接Javaコードを書きなぐりましたよ・・・
開発環境をTomcat 6からTomcat 7にしたら発生した逃げ場のない不具合。そりゃTomcat 7だけサポートするなら別に問題ないんだけど、他のサーバー(JBossとか)がどのバージョンのJSPをサポートしているか分からないので、どれでも動くようにする必要があるんだよ・・・なんでJavaにはCみたいなマクロがないんだろう。バージョン違いの非互換をどうにかする方法がないなんて・・・

2012-04-18

やっつけ仕事

に近い感じではあるのだが、キャッシュの実装が終わった。思ったより時間がかからなかったなぁ。

とりあえず、正規表現(Cの実装)とSRFI-4(Schemeの実装)で両方とも動いているのを確認。キャッシュ用のAPIを追加して、ごにょごにょ。追加で、コンパイル時の定数畳み込みにキャッシュ可能かの判定を追加。これで、define-constantにうっかりハッシュテーブル(キャッシュできない!)とか書いてもキャッシュを壊すことがなくなった。
問題になるとすれば、複雑な構造を持つオブジェクトのテストは全然してないので、いろいろ足りないかもしれない。まぁ、そんな物をリーダーマクロで書くなんてことしないだろう。

しかし、キャッシュのソースがひどいことになっている。リファクタリングくらいはしたいなぁ。でも迂闊に手を入れたくもないなぁ・・・

cachable or cacheable?

何の気なしにずっと「cachable」という単語を使っていたのだが(造語だと自分では思っていた)、これって辞書もしくは標準があるのかとググッて見た。したら、「cachable」と「cacheable」が一応あるっぽい。

なんか1997年くらいに議論されている。Spelling of "cachable"
どうやらWiktionaryではcacheableみたい。cacheable
1995年に現れた単語みたい。Weblio
JEE6ではcacheableというクラスがある。

どうやら主流は最初の議論(メーリングリスト)で推されているcachableではなくcacheableっぽいなぁ。直すの面倒だし、僕は造語の方で。

どうやら、W3C的にはcacheableみたい。Standardize "cachable" and "cacheable" to "cacheable"
知るか!

キャッシュの改善をしたい

前に書いたのだが、ちょっとソースを眺めなおした結果一筋縄ではいかなさそうだなぁと思い再びメモ。

とりあえず作成と読み込みのプロセスがある。っで、問題は作成時だと思われる。読み込みは単にタグみてオブジェクト作ってるだけなので。

【作成時のプロセス】
  1. コンパイルされたコードのスキャン
  2. スキャン時に検出できたライブラリの書き出し
  3. コード本体の書き出し
  4. マクロのスキャン
  5. マクロの書き出し
基本的にはスキャンと書き出しの2パスということになる。スキャンがある理由は共有構造の検出というのが主な理由になる。


改善における現状見えている問題はスキャンをどうするかということ。現状では対象になるのは、シンボル、文字列、キーワード、識別子、マクロ、ペア、ベクタとクロージャである。最初の3つを除いたものは、自身の中に共有構造を持つ可能性があるオブジェクトを持っている。たとえば、識別子はそれ自身の中に環境を保持しているが、その環境の中にはペアとかベクタが入ってくる。C側、Scheme側でそれぞれ問題が出てはくるのだが、C側の方が問題の解決は楽だろう。
現状Cで書かれているオブジェクトでキャッシュしたいものは、文字セット、正規表現と日付くらいか。特に正規表現はリーダーマクロが単にS式を返すので多少効率が悪い。これがキャッシュ可能になれば、読み込み時にオブジェクトをそのまま返すということができるようになるため、正規表現使用時のパフォーマンスがあがる(多分)。残りはdefine-constantでも使わない限りはあまり恩恵がない。(コンパイル時の畳み込みをキャッシュ不可能なオブジェクトは除外するように直さないとなぁ・・・)

とりあえずC側の改善を試みて、後にScheme側に取り掛かるべきだろうか・・・

2012-04-17

hierarchy

Twitterでこんなことを呟いたら、突っ込まれたのでネタにする。

ネタを書く前にまず、僕の中でhierarchy(ヒエラルキー)という言葉のイメージを説明しておく必要がある。(これが長くなるのでブログにした)
僕の中でのhierarchy意味は、トップダウン型の階層である。これは恐らく日本語ではヒエラルキーなんて言葉を使っていなかったのと、プログラム関連から意味が入ったこと、またこっちではその意味でしか使わないことがあるだろう。例えばカーストのヒエラルキーとか、食物連鎖のヒエラルキーとかはまぁ意味が分かる。個人的には日本訳がある言葉をわざわざカタカナで書く必要はないだろうと思うのだが。インテリの考えることは分からん。

っで、美醜のヒエラルキーという言葉を何を見たときに意味が取れなかった。何のこと?考えて、階層転じてランクのことかなぁととりあえず流してTwitterで呟いたと。
まぁ、これだけでは1000見て1違うから意味が複数あるというのもおかしいなぁと思い、Google先生でヒエラルキーを調べてみた。関連ワードで既に意味の分からないもの発見したので、まぁ誤用も一般的なんだろう。
意味の分からなかったもの。
  • 幸福の科学ヒエラルキー
  • 天使ヒエラルキー
  • 顔面ヒエラルキー(※)
  • 公正価格ヒエラルキー
※ hierarchyにはもう一つ「構造」という意味もあるらしい(僕の中にはイメージとしてない)。顔面構造と訳せば意味は分かる。
顔面ヒエラルキーはGoogle検索の2、3ページあたりの検索結果で、あとは関連ワード。どれも階層と訳して意味が通じない、少なくとも僕の中では。構造だと、公正価格あたりはいけるかも。
最初に挙げた美醜に関してはどちらで訳しても意味が通じない。美醜というひどく抽象的な概念に対して、hierarchyというより具体的なものを指す単語を当てているのでイメージがまったくつかめないというのが理由だろう。訳語を当てても、「美醜の階層」もしくは「美醜の構造」となり意味不明である。(原文でどのように使われていたのか思い出せないので、ひょっとしたら前後のつながりでいけるのかもしれないが。)

そういえば、ダーリンの頭の中(母親が持っていた)にあった、テンションと似た感じかもしれない。英語ではテンションは「張る」ものだが、日本語では「上がる」ものだったりする。

どうでもいいのだが、ヒエラルキーという発音はどこから来たんだろう?ラテン語かな?英語だと、「ハイエラキー」に近いと思うのだが。

2012-04-16

Sagittarius 0.3.1リリース

そろそろ月1のリリースがきつくなってきた。そして、意味があるような気がしなくなってきた。

今回のリリースはメンテナンスリリースです。

修正された不具合
  • パターン変数がライブラリを超えられない不具合が修正されました。
  • define-library構文がcond-expandを認識しない不具合が修正されました。
  • "\x0;"が正しく読まれない不具合が修正されました。
  • bytevector-s64-(native-)-set!が#x-8000000000000000に対してエラーを投げる不具合が修正されました。
  • make-vectorにfill引数を与えなかった際に未定義値ではない値がセットされる不具合が修正されました。
改善点
  • 暗号ライブラリ及び数学ライブラリの一部が書き直されました。これによってユーザー定義のCipher及びハッシュ関数を既存のAPIで使用することが可能になりました。
  • ASN.1ライブラリが大幅に書き直されました。
  • define-class構文が:metaclassオプションを受け取ることができるようになりました。
新たなライブラリ
  • SRFI-4ライブラリ(srfi :4)が追加されました。
  • HMACライブラリ(rfc hmac)が追加されました。ただしMACの検証はできません。
  • PKCS#5及びPKCS#12ライブラリ(rsa pkcs :5)、(rsa pkcs :12)が追加されました。PKCS#12はドキュメント化されていません。
  • バイトベクタライブラリ(util bytevector)が追加されました。

Visual StudioでGDBっぽいWatch

WindbgではできなさそうなのでとりあえずVS2010ExpressEditionで。
以下のサイトを参考に。
指定のアドレスのメモリが変化したらブレークするブレークポイントを作成する - メモブロ 

Data break pointという言葉が分かればGoogle先生に伺いやすい。ということで伺ってみたら、Windbgにもあった。GUIから設定できるかまでは探していないが、baコマンドでいけるっぽい。

とりあえず、分かったこと。
やっぱり語回収されているっぽい。メモリを書き換えているのはGCのreclameという関数だった。Cygwinと同じようなことをしないと駄目なんだろう。どうやればいいんだろう?

2012-04-15

Meetup

Trying to be active.

と称してLeidenのシーボルト博物館meetupに行ってみた。Salon - Japanese Talk in Amsterdamというmeetupなのだけど、なぜかアムスではなくライデン。単にたまには日本語を喋りたいと思ったのが参加した主な理由だが、当てが外れた。日本人僕一人、あとはフランス人とスペイン人(発案者は何人だろう?オランダ人っぽくなかったなぁ)。話した日本語0、あれ?

特に収穫というものもなく、切ない思いをした。

ここからも、どうでもいい話:

フランス人(特にパリ辺り)では日本の文化を学びたい人が多いらしい。その理由は、テレビでは日本のアニメが流れ、ゲームは日本の物が流行り(何かは知らない。FFとかテイルズかと)、漫画は言うまでもないという状態だから。つまり、オタクであるほど日本に興味を持つっぽい。話の中で出てきたアニメと漫画がすべて分かった自分もそっち方面だと自覚してるさ・・・今まで聞いた日本のイメージって、オタクかロボットしかないんだけどどういうことだろう?

オランダにはいわゆるカルチャースクールみたいなものが少ないらしい。そこにいた人の意見ではオランダ人は特に趣味が無く、エロ話してバーでビール飲めたらいいじゃんってイメージらしい。概ね同感だが・・・

フランス人は週に35時間しか働かなくてもいい上に休暇もたくさんあるというのは単なる伝説らしい。公務員はそうだけど、普通の企業の人は普通らしい。(まぁ、それでもヨーロッパ基準の普通なので日本に比べればはるかにましだろう)。

2012-04-14

君をつれて

2002年にDVD化された天空の城ラピュタの16年後のパズーの心境を石井竜也が歌ったとされるもの。ちなみに、天空の城ラピュタは数少ない何時見ても感動できる作品に一つだと思っている。(竜の巣へ入る際のデジタルリマスタリングは正直邪魔だと思っているが・・・)

話が逸れた。物語の中でパズーとシータの年齢は明かされていないが、恐らく14、15歳くらいだと思う。その16年後なので、30歳くらいのパズーを歌った歌ということになる。ただ追い求めるだけの少年から守るものが出来、それでも君と一緒にまた旅に出たいという大人の視点な歌詞だと思う。(国語苦手・・・)
歌が作られたのは今から10年前だけど、僕の年齢がちょうど歌の歌詞とマッチするなぁと思って書いていたりする。すごく分かるなぁというのが感想なのだが、それと同時に大人になるということは夢を見ているだけでの少年ではいられなくなるということなんだなぁと実感した。無数にある可能性という枝の中で望むと望まざると選択せざるを得ず、現実という名の下に刈り取られた無数の夢、それらを受け入れてなおまた旅に出たいあの頃のように。なんて感じたのはまぁ、きっと自分の中にそんなことを考えている部分があるのだろう。

希望に満ちた天を突かんばかりの摩天楼の群れだったこの世界は、お前の身近にあった小さな街の風景になりさがった。From Bleach(あってる?)

最終的には何になるんだろう。今は住んでるアパートかね。脱出ゲームばりに。

2012-04-13

Windowsをサポートするということ

割と茨の道だと思えてきた。

何が起きたか。
多分GC関連の不具合。以前Cygwinで似たようなことが起きたので。

なにそれ?
動的にリンクされるモジュール内で割り当てられたメモリが誤回収されているっぽい(値が勝手に書き換わっている)。
 Cygwinではルートを追加してやることで回避したんだけど、Windowsではどうやってやるんだろう?最新版のGCでは解決されているのだろうか?(それにしても、7.2-Alpha6からちっとも次が出ないなぁ)

そもそもほとんどダウンロードされていないプログラムなんだから別にサポートする必要ないじゃんとか思っていたのだが、自分がWindows版を普通に使っている現実があってごにょごにょ・・・

2012-04-10

Memo: Cache reader improvement

Since Sagittarius supports SRFI-4 (well, it's not released yet), the cache reading problem is totally floated up.

Before I describe the problem, I need to write how exactly the cache mechanism works. The reason why Sagittarius has cache is because of performance improvement. Let's say when (rnrs) library is loaded, then related libraries are also loaded (of course). However Sagittarius does not have compiled base library like Ypsilon and mosh have. So each time these library are loaded, compiler is also invoked. This caused really bad performance problem. So I introduced the cache mechanism.
However it is not completely done and I was searching what is the better solution for it. Right now, when Sagittarius load a library, it tries to find the cache first and if it can not find then compile the real library and write its cache.
Then what if there is a non cachable object in the compiled code. Yes, this is the problem. You can simply try how to make invalid cache code. Write a reader macro and let it return a hashtable (yes,  even hashtable can not be cached.) Current implementation has no space to expand the behaviour.

What I am thinking is adding two slots to base classes like 'readCache' and 'writeCache'. It is possible since Sagittarius has supported CLOS. Then introduce <fasl> class to allow user to write own cache reader. I am planing to implement this in 0.3.2 but I'm not sure if I can...

2012-04-09

チラシの裏

そもそもこのブログ自体がチラシの裏なので更に裏返したら表になってしまう(わけない)。

単にどこかに吐き出さないと精神衛生上よろしくないなぁというだけで別に誰かに読んでほしいとかそんな意図はさらさらない話題。

2月くらいに元彼女と別れたのだが(まぁ去年の12月くらいから関係は最悪だったが・・・)、まぁいろいろ物が残っていたり宅配が未だにこっちに来たりとなんだかんだで顔を合わせる機会が多い。そのたびにものすごいストレスが掛かる。別に話すことは何もないし、向こうもこちらも何かを何かをするわけではないのだが、扉が開く音を聞くだけで体が硬直する感じ。
理由はまぁいろいろあるんだけど、散々人格否定されてダメ人間の烙印押されたものだから勝手に体が防戦体制に入るんだろうね。正直ここから逃げ出したい気分に1ヶ月の80%くらいはなっていたりする。もうなんかうっかり街中で遭遇するんじゃないかっていうのすら心配になる。

年収600万以上+残業代その他別支給な仕事ないだろうか・・・日本に帰ってもいいかなぁと本気で考えていたりする・・・

しかし、アレだけ人を罵っておいてしれっとした態度が出来るっていうのは一体どんな精神構造してるんだろうね。 正直、嫌悪感丸出しで目も合わせたくないみたいな感じの方が100倍気が楽だ。こっちも単に敵としてみればいいだけなんだし。

2e paasdag

標題はオランダ語。意味は2nd Easter day。

今日はイースターの二日目。正直イースターがなんだか分かってはいないのだが(キリスト教の何かだということは知っている)、オランダでは今日は休日になる。
だから何ということはないのだが、何をしていいのか分からないくらい暇。PKCS#12周りのコードは会社に全部置いてあるので何もできない。(仕事でP12ファイルの中身確認に使っているので。ついでに、P12ファイルなんて手元にない)。

天気も悪いし、どうしたものかね・・・

2012-04-06

R7RSの第5次投票

月刊R7RS - 第五次投票の結果が出る - .mjtの日記復帰計画を見て出たんだとチェック。

正直R7RSサポートと称してドラフト5対応にしたのは時期尚早だったなぁと激しく反省した。所詮はドラフト、いくつ出ようが大きく変わるものだ・・・
大き目な変更点(Cレベルで変更が必要なもの):
  • ベクタがセルクオートになった。
  • シンボルのエスケープが変わった。\x..;は中で見る必要がなくなった。
ライブラリとかプロシージャの変更は特にいいか。ドラフト5でほぼ決まって6くらいで固まるかと思っていたのだが、見通しが甘すぎたね。本決まりまで静観した方がいいかもしれない。

SRFI-4 has been supported

I have wrote a library which supports SRFI-4. This might be the very first library using reader macro from Scheme. (I don't remember if I have already written something before). Well, actually R6RS already has bytevector to handle these homogeneous numeric vectors, however it is sometimes convenient if I can write #s8(-128 127 ...) instead of #vu8(255 127 ...). So now, I can write like this.
#<(srfi :4)>        ;; enable the reader macro
(import (rnrs) (srfi :4))
(define s8 #s8(-128 127)) ;; #s8(...) is reader macro 
(display s8) (newline)    ;; prints #s8(-128 127)
(s8vector-set! s8 0 1)    ;; unspecified
(s8vector-ref s8 0)       ;; returns 1
(s8vector-set! s8 0 -128) ;; unspecified
(s8vector->list s8)    ;; (-128 127)
(list->s8vector '(1 2));; #s8(1 2)
(bytevector? s8)          ;; #f
The homogeneous vectors are not bytevector defined in R6RS. So bytevector? returns #f. Maybe I will write a conversion procedure someday.

The reason why I wanted this is really simple. When I want to read a byte array dumped from Java, it is convenient to be able to write it. (Well, if I dump it, I can convert it to unsigned. But if I peek it from debugger, byte in Java is signed. I really hate this). I actually didn't have any intention to make it a library but when I wrote the reader macro, I thought I will write this again if I don't make the library.

Why is it #s8 instead of #vs8?
Implementation restriction... #vs8 was too long for dispatch macro and if I did it, I also need to rewrite existed bytevector reader.

2012-04-03

PBEのCipher

いまいち上手くいかない。HMAC、派生鍵は動いているので後はここだけなのだが・・・

上記の2つが動いているのでナイーブな(正しくない)実装は動いているように見える。パスワードを与えて暗号化、複合化は出来ているということだ。
では何が問題か。同一のアルゴリズム、鍵、パラメータを使用した場合、JCEだろうが何だろうが同一の暗号結果を返さなければならない、という部分。俺々仕様ではダメなのが辛い。
一応BouncyCastleの実装も見てみたんだけど、恐らく初期ベクタの与え方が拙いと思われる。 ただ、実装を見た感じ、ブロックサイズのバイトを0で初期化しただけにしか見えないんだけどなぁ・・・派生鍵の部分で見落としがあるだろうか?回転数が違ってるとか。さすがにDESのCBCモードを自前で実装する気にはなれないのでどうしたものだろう。
どこかにPBEWithMD5DES辺りのサンプル(もしくは内部で何してるかの解説、仕様書)ないかな・・・
(ひょっとしてこれだとHMAC要らないってことないよね?・・・)