憂鬱な午後のひととき

7月26日_

スカラー倍算

基本的なところをおさらいしてちゃんと作り直して速くなった.

7月24日_

The Art of HPC for CS輪読会1参加

フィックスターズで開催. 基本的なところのサーベイ.

7月21日_

だるい

ここ最近, 体がだるくて全然動けない. やりたいこと, やらないといけないことははいろいろあるのだけど. 朝選挙だけ行った.

7月18日_

C++のcontract

提案されてる現状をメモ(契約プログラミング).

名前や細かい仕様は変わるかもしれない.

7月17日_

『夜間飛行』(サン・テグジュペリ, 二木 麻里訳)

こちらの訳は初めて. うろ覚えのストーリーと大分印象が違った. 読みやすくてよかった.

7月13日_

CCSE2019参加発表

ほとんどAI・機械学習の発表の中, ラボの3人は違うテーマ. まあ, いかにもな感じではある.

7月12日_

クロス集計デモ

暗号化したままクロス集計をするデモ. CCSE用に準備した. 本社のデザイングループの人にデザインをお願いしたのでよい感じ.

7月11日_

東大情報数学セミナー

高島さんによるペアリングを用いた関数型暗号の紹介.

7月9日_

Xeon Platinum 8280x2

Intelの人が送ってくださいました. すごいスペックで大興奮です. 本当にありがとうございます.

とりあえずUbuntu 19.0を入れていろいろセットアップ.

>xbyak/sample/test_util
... avx512f avx512dq avx512cd avx512bw avx512vl avx512_vnni

おおっ.

7月8日_

cuspの場合の群構造

ラボユースで質問されたので久しぶりに計算してみた.

E = {(x, y) | y^2 = x^3, x ≠ 0}とする.
φ : E ∋ (x, y) ├→ t = x/y ∈ Fp^*
φ^(-1) : Fp^* ∋ t ├→ (t^(-2), t^(-3)) ∈ E
P = (x1, y1), Q = (x2, y2), P + Q = (x3, y3),
x1/y1 = t1, x2/y2 = t2, x3/y3 = t3とする.
λ = (y2 - y1) / (x2 - x1) = (t1^2 + t1t2 + t2^2)/(t1 t2 (t1 + t2))
x3 = λ^2 - (x1 + x2) = ... = (1/(t1 + t2))^2.
よってt3 = t1 + t2.

これによりφ(P) + φ(Q) = φ(P + Q)が成り立つので P, Q ∈ Eが与えられたとき, n := φ(Q) / φ(P)を計算するとQ = nPとなってECDLPが解ける.

7月6日_

Coderetreat for Girls #3参加

60分ごとに新しい人とセッションを組んでペアプログラミングをする. 順に, C, C++, Pythonx2, C++, Pythonをやりたいという人たちだった. 初心者の人が多かったので奇をてらうことなく素直なコードになるようにアドバイス.

初対面だし, 言語やバックグラウンドも毎回リセットされるので想像以上に集中力が必要で終わったらどっと疲れが来る. でもなかなか貴重な大変で面白かった.

最後のセッションの人はループなし縛りをやりたいということで, 再帰による実装方法の説明をしていたら時間が足りなくなってしまった(疲れて頭も回らない). すんません.

7月5日_

情報数学セミナー参加

三菱電機の高島さんによる講義. 初心者質問もできるのでとてもありがたい. 難しかったけど, 大分理解できるようになってきた気がする(まだ分かってない).

7月4日_

JavaのSwig

mclをJava対応してほしいという依頼があったので久しぶりにアップデートする. 最初はC APIでやろうかと思ったけどJavaのコード書くのが面倒そうなのでC++で自動生成に任せた. Javaでbyte[] bufを受け取るメソッドをC++側で(const char *buf, size_t bufSize)を持つメソッドに対応させるのはiファイルに

%apply(char *STRING, size_t LENGTH) { (const char *cbuf, size_t bufSize) };

と書くだけでよいようだ. swigがよきにやってくれる. 逆のbyte[]を返すメソッドが難儀した. 与えられたバッファにデータをセットするserialize(char *buf, size_t bufSize)に対応させたいのだけど, どうにもうまくいかなくてstd::string& outに変換することにした.

%typemap(jtype) void serialize "byte[]"
%typemap(jstype) void serialize "byte[]"
%typemap(jni) void serialize "jbyteArray"
%typemap(javaout) void serialize { return $jnicall; }
%typemap(in, numinputs=0) std::string& out (std::string buf) "$1=&buf;"
%typemap(argout) std::string& out {
  $result = JCALL1(NewByteArray, jenv, $1->size());
  JCALL4(SetByteArrayRegion, jenv, $result, 0, $1->size(), (const jbyte*)$1->c_str());

このコードで期待通りのbyte[] T::serialize()が実現した. しかしSwigはもう触りたくないな.

7月3日_

0b1010

mclでsetStr(str, base = 0)がエラーになることがあるというissue. 調べたらbase = 16進数を指定したときに0bで始まる文字列でエラーになっていた.

base = 0のときは0xや0bがついていたら16 or 2進数, それ以外は10進数としてパース. baseが指定されたときは0xや0bのプレフィクスと一致してなければエラーにしてたんだけど0b1010とう文字は16進数としてvalidなのだった. なんともおマヌケな仕様バグである. 全然気がつかなかったなあ.

7月2日_

Microsoft MVP

OSS開発のおかげで再受賞. どうもありがとうございます.


御意見は光成滋生<herumi@nifty.com>までお願いします