Go
PCG(permuted congruential generator)とは PCG自体の元ネタは PCG: A Family of Simple Fast Space-Efficient Statistically Good Algorithms for Random Number Generation にあります。(この論文は疑似乱数の統計的性質の比較とかいろいろやってるデカい…
今回は小ネタ。みんな知りたいときあると思うからメモ どうやるの https://cs.opensource.google/go/go/+/refs/tags/go1.22.0:src/math/const.go;l=40 intSize = 32 << (^uint(0) >> 63) // 32 or 64 どゆこと ^uint(0) >> 63 は全bitたったuintを右に63シフ…
はじめに Go 1.22 で math/rand に ChaCha8 実装が入ったらしい しかも math/rand/v2 トップレベルで利用されてる、かつシードがない math/rand でも使われるようになったらしい。一応議論を追った感じだと、暗号学的強度がある乱数をもとめてるのに math/ra…
はじめに みなさん Go1.20リリースノート(現在進行中) は読みましたでしょうか? crypto関係のパッケージがmath/big.Intと距離を置きだしたりいろいろ面白そうな話題はあるんですが、なんといっても Wrapping multiple errors が一番気になりました! 関連pr…
はじめに 最近機会があってモジュラモノリスについてあれこれぼんやり考えています。 その性質とかをかるく整理しつつ、モジュール境界としてgRPCをつかってみるアプローチについてあれこれ考えてみます。grpc-goについてのみ考えていて他の言語でどうなるか…
はじめに 最近こういう記事を書きました convto.hatenablog.com 記事の内容としては、メッセージエンコーディングにはいろいろと種類があり、それぞれ特性があるのでいい感じに使い分けようねみたいな感じでした。 こんな記事を書くくらいなので最近メッセー…
はじめに どうも @convto です。 以前に protobufのwire encodingについて遊んた ことや gobについていろいろ仕様を調べて遊んだ こととかがあったので、いっちょいい感じの比較ができるんではということでやっていきたいと思います。 ついでにgobについては…
はじめに どうもみなさんお世話になってます @convto です。 最近ちらちら直近のGoのCVEとかみてるので、危険度は度外視してパっとみて面白かったCVEとそのパッチの感想みたいなのをまとめつつバージョンアップを啓蒙していきます。 みんなバージョンアップ…
はじめに だいぶ前パッチ出した記事書きました。 https://convto.hatenablog.com/entry/2022/06/08/011812 具体的な話はそちらに譲るとして、マージされたんでその話と、関連する修正も出したのでその話をしようと思います。 やりたいこともまだあるにはある…
はじめに 以前gobについてどういうところが嬉しいんだっけ?みたいなのをまとめました https://convto.hatenablog.com/entry/2022/05/22/104428 メリットもわかったところであとはバイナリとダンスするだけなので、いくつかに分けてgobと戯れてそのうちしっ…
はじめに 先日なんとなしに go.1.19 release note よんでたら、crypto/randの項目で興味深い一文を見つけた Read no longer buffers random data obtained from the operating system between calls. 当時の僕も気になっていたよう ざっと見たけど crypto/ra…
はじめに 今回は軽めな回です。 そもそもpointerはcomparebleであり、面倒なことをせずとも == にて比較可能です。 https://go.dev/ref/spec#Comparison_operators Pointer values are comparable. Two pointer values are equal if they point to the same …
はじめに どうも皆さんconvtoです。 最近UUIDとかをドカっと調べて色々比較するみたいな記事を書きました。 convto.hatenablog.com で、このとき実はつかってるOSSへのcontributionチャンスを発見していて、今回はそのパッチを上げたぞ(マージされるかはわか…
はじめに CVE-2021-3538 は https://github.com/satori/go.uuid についての脆弱性で、uuidが攻撃者にとって予測可能になる場合があるでというやつです trackerへの登録はこれ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3538 仕事で使ってた…
はじめに gobのことを最近いろいろ調べてるんですが、そもそもなんでわざわざ言語側でメッセージ用のバイナリエンコーディング持ってるんだっけ?というのが気になったので、自分むけの整理用に使い方眺めつつこういうメリットありそうかなーとかそういうの…
動機 連休中はバイナリとダンスして遊んでたんですが、Goプログラムから柔軟にバイナリをbit表現で出力できないのがちょっと不便でした。 たとえば標準の機能で for i := 0; i < len(src); i++ { fmt.Printf("%08b", src[i]) } のようにすれば、1byteごとにp…
概要 なんかいろいろgo tool調べてたら go tool compile と go tool link つかって手動ビルドできそうだったのでやってみるというやつ。 go tool compile するとobject fileなり(オプション指定すれば)archiveつくれたりする。 go tool link すると↑の成果物…
はじめに Goのbuiltin関数やunsafeパッケージの直接の実装はそれぞれのパッケージには関数とドキュメントしか配置されてません https://pkg.go.dev/unsafe https://pkg.go.dev/builtin これらはアセンブリで実装されているわけでもないです。 じゃあどこでこ…
はじめに これは RSA完全理解 Advent Calendar の15日目の記事です。 RSAについてはひとしきり説明が終わったので、スクラッチで書くために巨大な数の四則演算について説明しようと思います。 四則演算さえできれば!いままでやったユークリッド互除法で逆元…
はじめに これは Kyash Advent Calendar 2021 の1日目の記事です。 Kyashで入出金関連をメインで担当しているチームで働いている convto です。 最近趣味でGoのruntime周りのソースコードを読み始めているんですが、Goのruntime(や一部の標準パッケージ、そ…
はじめに 暗号周りがなんとなく気になって、一番簡単そうな暗号利用モードのECB実装するかーという気持ちになったのでやった 色々調べたら ちょうどGoには実装されてないっぽく 、かつ単にブロックを順番に暗号化するだけでクソ単純でとっつきやすそうなので…
はじめに reflectでゴニョゴニョしたいときに毎回沼にハマってすごく時間をつかうので、使うパターンをメモっておく。 随時更新(したい)です それではレッツゴー 任意の値があるプリミティブ型か確認したい if reflect.ValueOf(v).Kind() == reflect.Int64 {…
はじめに 前に簡易的なunmarshalerかいたので それに機能追加した話 この時点では、対応するtypeはVarintとLength-delimitedだけだったので、固定長64bit/32bitフィールドをパースできるようにしました。 差分は以下 https://github.com/convto/protowire/co…
はじめに protobufのエンコーディングはwireという名前で以下に仕様がある developers.google.com 最近仕様を読んだりproto定義から生成される成果物を読んだりいろいろしていて、Unmarshalerかける気がしたので書いてみた。 すべての仕様に準拠するものは大…
はじめに エンコーディング周りを調べていたら、Goの場合は左辺のオペラントがintかuintかで処理が違うことがわかった。 ドキュメントにも明記されていて、算術シフトと論理シフトというやつを使い分けているらしい。 シフト演算を多用する処理は書いたこと…
はじめに net/httpを使ったhttpリクエストでは2つの方法でtimeout管理ができます。 Client.Timeout 値の設定( コメントを読む感じrequestにcontextを入れてもOKだぞいというのは言及されてる Request.WithContext なり NewRequestWithContext なりでcontext…