Weitere ähnliche Inhalte
Ähnlich wie Community Open Day 沖縄 (20)
Mehr von Yutaka Tsumori (18)
Community Open Day 沖縄
- 2. about me
• tmyt
• 東京らへんで組み込みシ
ステム開発してます
• 最近はXamarin 2.0とか
触ったりしてます
• 好き: C++, C#, Delphi, ZSH
• Twitter: @tmyt
• Github: tmyt
- 4. Touch develop is … 何
— Microsoft Reserchの研究成果
— プログラミングを学習するためのツール
— 主なターゲットはタッチデバイス
— キーボードがなくてもボタン押してるだけでOK
- 12. TouchDevelopでできる?
— SHA1ハッシュ
— 生成できない
— ビット演算ができない
— ライブラリとしての実装もない
— HMAC
— ハッシュアルゴリズムが無いため実装がない
— 文字列をUTF-8バイト列として処理
— UTF-16文字列を変換する関数は実装がある
— 現在時刻をEpoch Timeで扱う
— 現在時刻をDateTime型で取得出来るので変換する
- 13. OAuthするために
1. Epoch Timeを実装する
2. ビット演算を実装する
3. SHA1ハッシュを実装する
4. HMACダイジェストを実装する
5. UTF-16 → UTF-8変換を実装する
6. OAuthを実装する
- 15. Epoch Timeって?
— いわゆるUNIX時間
— 1970年1月1日からの経過秒数として表現
— タイムゾーンのオフセットは存在せず常にUTC
- 17. Epoch Timeへの変換
1. UTCで現在時刻を取得する
2. 1970年からの経過日数を単純に計算する
3. 日付×36400+0時からの経過秒数を計算する
— あれ、TouchDevelopって閏年の判定ができない
— それぐらいは軽く作りましょう
— ここまでで約1時間
- 20. ビットの配列へ変換
— ビット演算には2進数への変換が必要
— 手計算で2進数へ変換する場合と同様に実装する
List<int>
ToBinary(int
n)
{
var
b
=
new
List<int>();
while
(n
!=
0)
{
b.Add(n
%
2);
n
/=
2;
}
return
b.Reverse().Take(32).ToList();
}
- 23. SHA1ハッシュ
— Secure Hash Algorithm 縮めてSHA
— ハッシュ関数のひとつ
— 入力に対し一意な160bitの値を出力する
— 余談
— SHA1はNISTが2010年よりDeprecatedとしています
— 今後はSHA256を使うのをおすすめします
- 24. SHA1の生成
— こんな雰囲気です
— バッファを64の倍数に拡張
— バッファを8bitごとに区切り
— StepA, B, C, Dの4パターンで演算
— 格段の値を合計
— 32bitの値5個を連結して160bitに
- 25. TouchDevelopで実装する
— 先ほど作ったビット演算が活躍します
— AND, OR, XOR, SHR, SHL
— 右回転シフトも必要なので作ります
— 定数に16進数は使えないのですべて10進にします
— コピペも出来ないので間違えないように入力します
— 加算結果は最大で33bitになります
— TouchDevelopの数値型は53bit精度の浮動小数
— 4294967295(0xFFFFFFFF)とANDを取って切り捨てる
- 33. UTF-16からUTF-8への変換
— UTF-8 ⇔ UTF-16は相互に変換可能
void
to_u8(int
c)
{
if(c
<
128)
chars.Add(c);
else
{
if(c
<
2048)
chars.Add(((c
>>
6)
&
31)
|
192);
else
{
chars.Add((c
>>
12)
|
224);
chars.Add(((c
>>
6)
&
63)
|
128);
}
chars.Add((c
&
63)
|
128);
}
}
- 36. OAuthの仕組み
— ConsumerはProviderに仮トークンを要求
— Consumerは仮トークンを使って認証URLを要求
— Userは認証URLで自分のアカウント使いログイン
— 得られたVerifierをConsumerへ通知
— ConsumerはVerifierを用いProviderへ実トークンを
要求
— Providerはトークンを発行しConsumerのアクセス
を認可する