Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
K/NでCryptoKit使いたかった
Search
RyuNen344
November 29, 2022
Technology
620
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
K/NでCryptoKit使いたかった
RyuNen344
November 29, 2022
More Decks by RyuNen344
See All by RyuNen344
Gradle-Plugin-in-2026.pdf
ryunen344
1
120
せめて、ネイティブらしく
ryunen344
2
3.1k
Cache Me If You Can
ryunen344
3
9.1k
WindowInsetsだってテストしたい
ryunen344
2
410
サプライチェーン攻撃に備える
ryunen344
1
3.8k
Okioに愛を込めて
ryunen344
3
3k
Firebase Hostingを使ってPasskeyをandroidアプリで試してみよう
ryunen344
2
2.1k
Xcode Meets Gradle
ryunen344
0
450
わかった気になる、Coroutine1.7.0のチャンネルのパフォーマンス向上
ryunen344
0
470
Other Decks in Technology
See All in Technology
いま、生成AIにKaggleをどこまで 任せられるか — ROGIIコンペでの進め方とTips
k951286
0
320
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3.2k
AIレビュー時代に必要なのは、SLOで引く撤退ライン
nobuoooo
0
160
Bet AI Day 2026丨How We Bet AI: AIとともに働く場をつくる
layerx
PRO
0
400
When Token Pruning is Worse than Random: Understanding Visual Token Information in VLLMs
sansantech
PRO
0
210
DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI
kentarom
1
260
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
20k
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
25k
どんな手を使っても絶対間に合わせるスケジューラ
asari194617
0
1.5k
名刺メーカーDevグループ 紹介資料
sansan33
PRO
0
1.3k
[RSJ26] Building a VLA Model Based on Self-Distilled Classification
keio_smilab
PRO
0
110
1.5時間を無駄にして学んだwsl2におけるaptとsnapの選択と仕組み
yosaka0123
0
480
Featured
See All Featured
Exploring anti-patterns in Rails
aemeredith
3
480
We Have a Design System, Now What?
morganepeng
55
8.3k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.9k
Designing Powerful Visuals for Engaging Learning
tmiket
1
520
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
490
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Producing Creativity
orderedlist
PRO
348
41k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
The agentic SEO stack - context over prompts
schlessera
0
880
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Transcript
Kotlin NativeͰCryptoKit͍ ͔ͨͬͨɾɾɾɾɾ 2022.11.27 Mobileษڧձ Wantedly × νʔϜϥϘ #7 Bunjiro
Miyoshi
About Me • νʔϜϥϘॴଐ • (ࣗশ)ϚϧνϓϥοτϑΥʔϜܳਓ • Jetpack Compose࠷ߴʂʂ
͢͜ͱɾ͞ͳ͍͜ͱ • ͢͜ͱ • CryptoKitͱ • ͳͥCryptoKitΛ͍͍͔ͨ • Kotlin NativeͷSwift/Obj-C
Interop • ͞ͳ͍͜ͱ • KMMͱ(͕࣌ؒΓͳ͘ͳΔ) • androidଆʹدΓఴͬͨ༰(΄΅androidؔͳ͍͔͠͠ͳ͍) • ඇରশ҉߸पΓ(K/NͰSecurity Framework͑Δ)
CryptoKitͱ • Appleެࣜͷ҉߸ԽϥΠϒϥϦ • iOS13͔Β༻Ͱ͖Δ • LinuxͰ͑ΔΑ͏ʹಛघͳϋʔυΣΞॲཧΛඞཁͱ͠ͳ͍APIΛ ൈ͖ग़ͨ͠OSS൛͋Δ • ݱࡏiOSͰAESHashͷ࣮Λ͍ͨ͠ͳΒ͜ΕΛ͏ͷ͕σϑΝΫ
τ
ͳͥCryptoKitΛ͍͍͔ͨ#Tink • KMMͰ҉߸ԽॲཧΛԿͰ࣮͢Δ͔໎ͬͨ • Google/TinkΛinterop͢Δ༧ఆͩͬͨ • androidͷ҉߸ԽॲཧݱࡏTinkҰͳঢ়ଶͩ͠ɾɾɾɾ • arm64ରԠʹۤ͠ΜͰ͍ΔΒ͘͠ରԠΛ͍ͬͯΒΕͳ͍ •
→ https://github.com/google/tink/issues/554
ͳͥCryptoKitΛ͍͍͔ͨ#CommonCrypto • iOSʹRuntimeʹCommonCrypto͕ಉࠝ͞Ε͍ͯΔ • → https://opensource.apple.com/source/CommonCrypto • CͰ࣮͞Ε͍ͯΔFramework • ରশ҉߸(AES-CBC,
AES-ECB)ɺϋογϡؔɺμΠδΣετؔͳ Ͳ͕༻Ͱ͖Δ
ͳͥCryptoKitΛ͍͍͔ͨ#CommonCrypto
ͳͥCryptoKitΛ͍͍͔ͨ • CryptoKit͡Όͳ͍ͱͰ͖ͳ͍͜ͱ • AEAD(AES-GCM)ͳͲͷೝূϞʔυ • ॺ໊पΓͷॲཧ • ٯʹCryptoKitͩͱͰ͖ͳ͍ॲཧ͋Δ •
MD2ɺ4ͳͲͷڧͷ͍μΠδΣετ͋·Γ༻͠ͳ͍ͷͳ ͷͰؾʹ͠ͳͯ͘Α͍
AES-GCM͕͍͍ͨ • CommonCryptoʹGCM࣮ͷϔομʔϑΝΠϧ͋Δɾɾɾɾ • https://opensource.apple.com/source/CommonCrypto/ CommonCrypto-60061/lib/CommonCryptorGCM.c.auto.html • ඇެ։APIʹͳ͍ͬͯͯK/NͰ͑ͳ͍ɾɾɾɾɾ
Ͳ͏ͤϥούʔΛͭ͘ΔͳΒCryptoKitʹ͍ͨ͠ • ͖ͬͱJetBrainsͷK/NνʔϜ͍͍ͨͱࢥͬͯͨΜ͡Όͳ͍͔ͳͱ अਪ • ͓ΉΖʹKotlinͷϦϙδτϦΛோΊͯΈΔ • K/N͕औΓࠐΉDarwinͷAPI👇ʹ͓͍ͯ͋Δ • https://github.com/JetBrains/kotlin/tree/master/kotlin-native/
platformLibs/src/platform/ios
Μɾɾɾɾɾʁ
Μɾɾɾɾɾʁ
͋ɺ͋Δʂʂʂ
Swift/Objective-C Interop • def.disabledͱ͍͏ෆԺͳϑΝΠϧ໊ʹͳ͍ͬͯΔ • obj-c͔Βݺͼग़ͤΔΑ͏ʹͳͬͯΔSwift Framework͑Δ͕pure SwiftͷFrameworkK/NʹऔΓࠐΊͳ੍͍͕͋ΔͨΊdisable
Swift/Objective-C Interop • def.disabledͱ͍͏ෆԺͳϑΝΠϧ໊ʹͳ͍ͬͯΔ • obj-c͔Βݺͼग़ͤΔΑ͏ʹͳͬͯΔSwift Framework͑Δ͕pure SwiftͷFrameworkK/NʹऔΓࠐΊͳ੍͍͕͋ΔͨΊdisable ཁ͢Δʹͦͷ··Ͱ͑ͳ͍
Swift/Objective-C Interop • ͏ʹ@objc͕༩͞Ε͍ͯΔϥούʔͷϥΠϒϥϦΛ࡞͠ɺͦ ΕΛK/NʹऔΓࠐΉඞཁ͕͋Δ • ಉ͜͡ͱΛߟ͍͑ͯΔਓ͍Δ • https://youtrack.jetbrains.com/issue/KT-54729/KMM-Native-iOS- use-CryptoKit
Ͳ͏͍͏ϥούʔϥΠϒϥϦ͕΄͍͔͠ • K/NϥΠϒϥϦͱͯ͠ެ։͞Ε͍ͯΔ • -> KMMʹՃ͢Δ͚ͩͰCryptoKit͑ΔΑ͏ʹͳͬͯ΄͍͠ • ϥούʔϥΠϒϥϦdynamic libraryͱͯ͠CryptoKitΛͱΓ͜ΜͰ΄͍͠ •
-> όΠφϦຊମʹCryptoKitͷϏϧυੜΛؚΜͰ΄͘͠ͳ͍ • (ͨΓલ͕ͩ)CryptoKit͔ΒͷΤϥʔΛͪΌΜͱϋϯυϦϯάͰ͖ΔIFʹ ͳͬͯͯ΄͍͠
ϥούʔϥΠϒϥϦΛ࡞Δ • Swift InteropʹerrorൖपΓʹ᠘͕͋Δ • Swift/Objective-C error-throwing methods aren't imported
to Kotlin as exception- throwing • https://kotlinlang.org/docs/native-objc-interop.html#errors-and-exceptions • Kotlin -> Obj-CɺObj-C -> Kotlinͷ྆ํʹ੍͕͋Δ • ࠓճͷϢʔεέʔεͩͱSwift -> Obj-C ->KotlinͷܗʹͳΔͨΊͦΕͧΕͷݴޠײͷนΛߟྀͯ͠ ࣮͢Δඞཁ͕͋Δ • iOSͷ։ൃݴޠͷσϑΝΫτ͕Obj-C͔ΒSwiftʹΓସΘͬͨλΠϛϯάͷࢿྉ͕ʹཱͪͦ͏
·ͱΊ • ࠓճ༻ҙͰ͖ͨ෦͜͜·Ͱ • ࢲࣗࠓճඞཁͷΈͷఆ͔ٛ͠ߦΘͣɺCryptoKitશମͷϥοϓʹͨͲΓண͔ͳ ͔ͬͨ(୭͔ҰॹʹΓ·ͤΜ͔ɾɾɾ) • Swift InteropपΓʹΤϥʔൖͷ᠘͕͋Δ •
Swift/KotlinޓରԠͷissue͋Δ͕͕͔͔࣌ؒΓͦ͏ͳͷͰϥούʔϥΠϒϥϦΛ ࡞ΔҎ֎ʹݱঢ়खஈ͕ͳͦ͞͏ • https://youtrack.jetbrains.com/issue/KT-49521/Support-direct-interoperability-with- Swift
12݄10ͷKotlin Festొஃ͠·͢ ͓࣌ؒ͋Δ͔ͨͥͻ