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
600
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
せめて、ネイティブらしく
ryunen344
2
2.6k
Cache Me If You Can
ryunen344
3
9k
WindowInsetsだってテストしたい
ryunen344
2
400
サプライチェーン攻撃に備える
ryunen344
1
3.7k
Okioに愛を込めて
ryunen344
3
2.9k
Firebase Hostingを使ってPasskeyをandroidアプリで試してみよう
ryunen344
2
2.1k
Xcode Meets Gradle
ryunen344
0
430
わかった気になる、Coroutine1.7.0のチャンネルのパフォーマンス向上
ryunen344
0
460
K/NとNSKeyedArchiverと私
ryunen344
0
620
Other Decks in Technology
See All in Technology
“詰む”前に仕組みを作れ 〜技術の波に溺れないためのキャッチアップ術〜
takasyou
8
5k
product engineering with qa
nealle
0
140
知見・人・API・DB・予算 ─ ナイナイ尽くしだった人事データ整備 with dbt、5年間の学び
ken6377
1
130
cccccc
moznion
0
1.3k
LiDAR SLAMの実装とセンサ融合 ~Lie群からContinuous-Time LIOまで~
naokiakai
1
840
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
170
打造你的 AI 工作流:Agent Skill + MCP 實戰工作坊
appleboy
0
360
AI Agentをシステムに組み込む前にゆるく向き合ってみる
hayama17
0
190
5分でわかるDuckDB Quack
chanyou0311
4
300
プライバシー保護の理論と実践
lycorptech_jp
PRO
1
230
「ビジネスがわかるエンジニア」とは何か?
ryooob
0
460
Hatena Engineer Seminar 37 jj1uzh
jj1uzh
0
410
Featured
See All Featured
For a Future-Friendly Web
brad_frost
183
10k
Unsuck your backbone
ammeep
672
58k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
170
Done Done
chrislema
186
16k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Test your architecture with Archunit
thirion
1
2.3k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.6k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
880
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
240
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Designing Experiences People Love
moore
143
24k
The Invisible Side of Design
smashingmag
301
52k
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ొஃ͠·͢ ͓࣌ؒ͋Δ͔ͨͥͻ