Pebble's Diary

プログラマーの作業メモ

RSA暗号の原理を理解するための数学知識

RSA暗号に関する文章を読んでいてもその数学的な原理がさっぱり理解できなかったのですが、色々読んでいるうちになんとなく分かってきましたので、メモしておきます。 のとき、 である。 で gcd(e, n) = 1 ならば である。 合同式の意味とよく使う6つの性質…

エドワード曲線における加法

エドワード曲線 において、曲線上の2つの点 の加算後の点を次のように定義する。 この点は代数計算によって、エドワード曲線上の点になることを確かめることができる。 が、計算は長く厄介なので、計算方法を記しておく。 を計算し、に等しくなることを示す…

エドワード曲線とツイストエドワード曲線

2007年のエドワードさんの論文(http://www.ams.org/journals/bull/2007-44-03/S0273-0979-07-01153-6/S0273-0979-07-01153-6.pdf) から、エドワード曲線と名付けられた がどのような形をしているのか見てみましょう。 まずはa=1.0 2本の直線になってしまいま…

楕円曲線の形

楕円曲線の一般的な形は以下のように表せます。 暗号理論に用いる楕円曲線は特異でない形のものだけを扱います。 特異でない形のものは2つのパターンに分けられます。 1) yが0の時のxの値が3つある場合 2) yが0の時のxの値が1つだけしかない場合 それぞれ…

群、体の定義

群(group)の定義 ある要素の集まりに対して、一つの演算規則 f を決め、演算結果はまた要素の集まりの一つになっているとします。 a, b, c を要素とします。 1) 全ての要素に対して、結合法則が成り立つ f(f(a, b), c) = f(a, f(b, c)) 2) 全ての要素に対し…

離散対数問題とは

RSA暗号の安全性が大きな数の因数分解の計算量の多さに元にしているのと同様、 楕円関数暗号の安全性は大きな数の離散対数の計算量の多さを元にしています。 離散対数問題をここで解説してみます。 p : 素数 これは説明不要ですね。 2,3,5,7,11,…のように自…

安全素数

pが素数であり、2p+1=qも素数である場合、qを安全素数(safe prime)と呼ぶ。 安全という名前は暗号理論に由来する。 https://en.wikipedia.org/wiki/Safe_prime https://ja.wikipedia.org/wiki/安全素数

iOSでRSAを使いメッセージを暗号化してみる(SwiftyRSA)

iOSでRSAを使ってメッセージを暗号化してみます。 SwiftRSA https://github.com/TakeScoop/SwiftyRSA というライブラリを利用します。 RSAの実装は、AppleのSecurity.Frameworkが利用されています。 macOS版はサポートされていないようです。 サンプルiOSア…

swift3 IntegerArithmaticプロトコル

IntegerArithmeticプロトコルを実装するには、以下8つの関数を定義する必要がある。 最初の2つはComparableである。 static func ==(lhs: M, rhs: M) -> Bool static func <(lhs: M, rhs: M) -> Bool static func addWithOverflow(_ lhs: M, _ rhs: M) -> (…

swift3 Comparableプロトロル

Comparableプロトコルを作るには、 static func <(lhs: Even, rhs: Even) -> Bool static func ==(lhs: Even, rhs: Even) -> Bool の2つを実装すればよい。 struct M : Comparable { var val:Int static func <(lhs: M, rhs: M) -> Bool { return lhs.val <…

swift3 Collectionプロトコル

Collectionプロトコルを作るには、 startIndexプロパティ,endIndexプロパティ,subscript,index(after:) の4つを実装する必要がある。 Collection - Swift Standard Library | Apple Developer Documentation ここでは奇数を返すコレクションOddを作ってみた…

swift3 Sequenceプロトコル

Sequenceプロトコルの例 ここでは1以上の奇数を順番に返すものを作ってみた。ちなみにIntの範囲を超えるとクラッシュするが気にしないでもらいたい。(^ ^) struct Odd : Sequence, IteratorProtocol { typealias Element = Int private var v:Element = 1 pu…

swift preconditionとassertの違い

swiftにはassertさせる関数がいっぱいあって困ります。 1) assert() let ary = [1, 2, 3] let i = 3 assert(i < ary.count) print("\(ary[i])") assertion failed: file /develop/aaa/aaa/ViewController.swift, line 18 2) precondition() let ary = [1, 2,…

swfit 負数の除法

swift,C,Javaとruby, python,perlでは、 負数を割り算や剰余に使った場合、結果が異なる。 python 剰余 7 % 3 -> 1 7 % -3 -> -2 -7 % 3 -> 2 -7 & -3 -> -1 swift 剰余 7 % 3 -> 1 7 % -3 -> 1 -7 % 3 -> -1 -7 % -3 -> -1 python 商 7 / 2 -> 3 7 / -2 -> …

ios10.3 ファイルパス問題

環境 ios10.3.1 Xcode 8.3.2 guard let path:String = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first else { return } let filename0 = path + "/" + "a.txt" if let fp0 = fopen(filename0, "wb") { print("fp0 \…

macOSにSPTKをインストール

macOS 10.12.4 xgrを動かすのに必要なのでconfigure前に入れておきます。 $ brew cask install quartz あとは、 SPTK-3.10.tar.gzをDLし、 $ configure $ make $ make install したら完了です。 参考 SPTKの使い方 (1) インストール・波形描画・音声再生 - …

C++11 unique_ptrとshared_ptr

unique_ptrは所有者が1人以下のポインタとして利用する。 実装にatomic関数は用いられていないためコピーや破棄はスレッドセーフではないが、それによるオーバーヘッドは存在しない。 shared_ptrは所有者が2人以上のポインタとして利用する。 いったん値を設…

C++最適化手法

メモリ使用量が増えてもよいので速度を優先させたい場合の最適化方法を考えます。 計算した値をキャッシュし計算回数を減らす 同じ値の設定処理を何度も行わない 関数の戻り値では、構造体の値を返す代わりに構造体のconst参照を返す クラスの不要な関数を削…

swift 循環参照

swift 循環参照の一例を挙げます。 iOSのソースを例にとります。 ViewController.swift import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let model = Model() model.action() } } Model.swift im…

iOS/MacOSXのvDSP関数、多すぎてなかなか見つけられないのをなんとかする(応答編)

複素数を扱うためにvDSP.hで定義された構造体 typedef struct DSPComplex { float real; float imag; } DSPComplex; typedef struct DSPSplitComplex { float * __nonnull realp; float * __nonnull imagp; } DSPSplitComplex; 1次元高速フーリエ変換 vDSP_c…

Rx メモ

RxSwiftとRxCocoaの区別がわかりづらいのでメモ。 RxCocoaはUIKit,NSFoundationなどに特化したiOS/macOS環境特有の機能。 RxSwift combileLatest 仕様:複数の変数のいずれかが変更された場合にそれぞれの最新の値をまとめて受け取る 使い道:2つのUITextField…

android studio 2.3でideavimを有効にする

Android Studio - 「Preferences」- 「Plugins」 で「IdeaVim」をインストールし、有効にします。

Android Studio2.3 から外部エディタvimを開く(macOS)

Android Studio2.3で開いているファイルを行番号を指定し外部エディタvimで開く方法です。 macOSの場合です。 1) Android Studio - Preferences - Tools - External Tools に gvim を登録します。 内部console画面が開かないように Open console のチェック…

C# Microsoft純正ライブラリでJSONをdeserializeする

C#

C#でJSONをserialize/deserializeする方法として、Microsoftが提供するライブラリを使う場合、2種類の方法がある。 1) DataContractJsonSerializer Namespace: System.Runtime.Serialization.Json AssemblySystem.Runtime.Serialization 2) JavaScriptSeria…

オライリー 英語版原書を読むのに役立つ英単語40

n. 名詞 adj. 形容詞 v.i. 自動詞 v.t. 他動詞 adv. 副詞 variable n. 変数 definition n. 定義 deduction n. 推論 explicit adj. 明示的な implicit adj. 暗黙の distinguish v.t. 区別する prefer v.t. ~の方がよい declare v.t. ~を宣言する exception n.…

RxSwift 超入門その3

class GeolocationViewController: ViewController { @IBOutlet weak private var noGeolocationView: UIView! @IBOutlet weak private var button: UIButton! @IBOutlet weak private var button2: UIButton! @IBOutlet weak var label: UILabel! override …

RxSwift 超入門その2

let minimalUsernameLength = 5 let minimalPasswordLength = 5 class SimpleValidationViewController : ViewController { @IBOutlet weak var usernameOutlet: UITextField! @IBOutlet weak var usernameValidOutlet: UILabel! @IBOutlet weak var passwor…

RxSwift 超入門その1

0)環境: Xcode8.2.1 1) 新規iOSプロジェクトaaaを作成する。 2) aaaフォルダに新規ファイルPackage.swiftを以下の内容で作成する。 import PackageDescription let package = Package( name: "dummy", targets: [], dependencies: [ .Package(url: "https://…

Go POSTによるJSONパラメータをデコードする際の注意

go

まずはソースをみて頂こう。 type User struct { name string } func q(w http.ResponseWriter, r *http.Request){ decoder := json.NewDecoder(r.Body) var user User err := decoder.Decode(&user) if err != nil { panic(err) } fmt.Println(user) } エラ…

go言語 ネストしたJSONをリテラルで初期化する

go

go root := map[string]interface{}{ "alpha": map[string]interface{}{ "beta": []map[string]interface{}{ map[string]interface{}{ "gamma": "val1", "delta": []map[string]interface{}{ map[string]interface{}{ "epsilon": "val2", }, }, }, }, }, } r…

curl コマンドオプション

-i レスポンスヘッダの表示 -s サイレントモード -H カスタムヘッダ指定 -X コマンド指定 -d HTTP POST データ JSONをPOSTするときのサンプル curl -i -H "Content-Type: application/json" -d '{"name":"foo"}' http://localhost:3000/contents

Windowsでgo環境を作る場合の備忘録

go

Windowsにgoをインストールする場合 ここ https://golang.org/dl/ にあるインストーラー go1.8.windows-amd64.msi をダウンロードして実行する GOROOTはC:\go\ となる。 GOPATHは未設定の状態となるので、デフォルトでは %USERPROFILE%\go となる。 goのソー…

Missing Push Notification Entitlement (未解決)

iOSアプリのバイナリをiTunesConnectにUploadしたときたまにAppleから Missing Push Notification Entitlement のメールが来たり来なかったりするんだが、どうしたもんか。 アプリではPushNotificationは使っていないが、FireBaseフレームワーク内で使ってい…

SIMD組み込み関数が多すぎるので一覧にしておく

大量の計算を常に行うような場合、C言語の速度をさらに上げるには、CPUのSIMD命令に置き換えられる組み込み関数を使う方法がある。 ただし、これもvDSPと同じで量が多くまた見やすい一覧がないので作ってみる。 なお、独断と偏見で使いそうもないものは一覧…

swift Arrayでwhereを使う

swiftはモダンな言語なので、C言語風の書き方は極力排除されている。 Arrayでwhereがついているメソッドを使い条件式を表すクロージャを指定して結果を取得するケースは多い。 public struct Array<Element> : RandomAccessCollection, MutableCollection { // 条件を</element>…

make_moonsで生成されるものを見てみる(scikit-learn)

macOSXにpipをインストールする sudo easy_install pip scikit-learnをインストールする sudo pip install scikit-learn make_moonsでデータを生成してみる bash-3.2$ python >>> from sklearn import datasets, linear_model >>> datasets.make_moons(10, n…

swiftでwavファイル書き込みしてみる

以前はAudioToolKitにあるAudioFileCreateWithURLを使っていましたが、 ここでは試しにiOS8,macOS10.10で追加されたAVFoundationにあるAVAudioFileを使ってみます。 まず、AVAudioFileのクラス定義をみてみます。 open class AVAudioFile : NSObject { publi…

swiftでFloat値の比較

swiftでは次のような演算子が定義されているので、FloatどうしやDoubleどうしの比較は 単純に==と!=で行えば良い。 FloatやDoubleはFloatingPointを継承しているため、この機能を持っている。 public func ==<T : FloatingPoint>(lhs: T, rhs: T) -> Bool public func !=<T : Equatable>(lhs: T</t></t>…

swift アクセス制御

open どこからでもサブクラスの作成、上書き定義可能 public このクラスを定義したモジュール内部でのみサブクラスの作成、上書き定義可能 internal (省略時) 定義を含むソースファイルと同じモジュール内部からアクセス可能 private クラスや構造体の定義単…

swift extensionで一回だけ実行されるグローバル定数宣言の仕方

こうすればいいらしい。 extension DateFormatter { public static let standard: DateFormatter = { let obj = DateFormatter() obj.locale = Locale(identifier:"en_US_POSIX") return obj }() }

swiftでsingleton

swiftでSingletonを書く場合、こうすればいいらしい。 class MySingleton { static let shared = MySingleton() private init() {} } The Right Way To Write a Singleton — KrakenDev

詳説 AudioStreamBasicDescription / AVAudioFormat

CoreAudioでよく使われるAudioStreamBasicDescription これはC言語の構造体で使いづらいです。 macOS10.10, iOS8以降ではAVAudioFormatと相互変換できますので、これを経由するとコーディングが簡単になります。 まずは実例を見ていきます。 よく使われる.wa…

iOS10のSpeechToText APIを使って日本語PodCastをテキスト化してみる

iOS10で公開されたSpeechフレームワークを使って日本語PodCastをテキスト化してみました。 結果から言うと、テキスト化は可能でしたが、品質はかなり悪く実用として厳しかったです。 某IT系PodCastのファイルを食わせて見たんですが、 「ジャバスクリプト」…

C言語のsizeofをswiftで書くにはMemoryLayout<T>.size

タイトルそのままです。 struct Hoge { var a: Int32 var b: Int32 } MemoryLayout<Hoge>.size // 8</hoge>

Arrayにおけるmap, flatMapの動作(swift3)

ググると引っかかるのか今だにswift2のドキュメントなので、swift3用のメモ let a = [1, 2, 3] let b = a.map { Array(repeating: $0, count: $0) } print(b) // [[1], [2, 2], [3, 3, 3]] let c = [1, 2, 3] let d = c.flatMap { Array(repeating: $0, coun…

enum Optional<Wrapped> の map, flatMapメソッド

swiftのソースでmapとflatMapというメソッドがよく出てくるのだが、このメソッド名からは想像できない動作をするのでメモしておく。 (メソッド名変えてくんないかな。。) Optionalの定義を見ると次のようになっている。 public enum Optional<Wrapped> : ExpressibleB</wrapped>…

swift 2つの連続する矢印

swiftでこんなソースが出てきた。-> が2つ連続しているが意味がすぐには分からない。 func multi(val:Int) -> (val:Int) -> Int { return { a_val in return a_val * val } } 省略されている()を書くとこうなる。 func multi(val:Int) -> ((val:Int) -> Int)…

swift ComparableIndex

swiftのComparableプロトコルはEquatableプロトコルを継承しているので、Comparableと同じことがしたいがEquatableは実装したくないという時に使えない。 その場合、Comparableに相当するプロトコルだけを自分で実装すれば良い。 public protocol Comparable…

PromiseKit4.0 (swift3)を使ってみた 2016年11月

swift3で作ったiOSアプリでサーバーへHTTPリクエストを複数回投げる場合に、 普通に作ると、正常ケース、異常ケースの処理があちこちにばらけて、ソースが汚くなります。 PromiseKitを使ったところ、ソースが短く、処理も追いやすくて素晴らしかったので、メ…

digital oceanでipv6を追加したらDNS解決できなくなった話[RESOLVED]

digital oceanに作ったCentOS6のVPSにipv6を追加したところDNS解決できなくなりました。 CentOS7の方は手順通りでうまくいったのですが、CentOS6の方は、 ping google.com が効きません。 /etc/resolve.conf にはGoogleのipv6のDNS2つが定義されています。 n…