Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
K/NでCryptoKit使いたかった
RyuNen344
November 29, 2022
Technology
0
120
K/NでCryptoKit使いたかった
RyuNen344
November 29, 2022
Tweet
Share
More Decks by RyuNen344
See All by RyuNen344
うわっ…もしかして私のコー ド、遅すぎ…?
ryunen344
1
220
SwiftPM with KMMをprivateなGitHub Releaseで運用する
ryunen344
0
110
Kotlin Nativeってandroid向けにもかけるんですよ
ryunen344
0
370
dartの排他制御おさらいしてみた
ryunen344
1
410
Kotlin Native in 1.6
ryunen344
1
700
Koin MPP入門
ryunen344
0
360
Other Decks in Technology
See All in Technology
金属加工屋の営業マンがSTマイクロで・・・
usashirou
0
160
02_プロトタイピングの進め方
kouzoukaikaku
0
520
創業1年目のスタートアップでAWSコストを抑えるために取り組んでいること / How to Keep AWS Costs Down at a Startup
yuj1osm
3
2.2k
スクラム導入して変わったチーム、組織のありかた
yumechi
0
190
USB PD で迎える AC アダプター大統一時代
puhitaku
2
1.9k
SSMパラメーターストアでクロススタック参照の罠を回避する
shuyakinjo
0
7.1k
IoT から見る AWS re:invent 2022 ― AWSのIoTの歴史を添えて/Point of view the AWS re:invent 2022 with IoT - with a history of IoT in AWS
ma2shita
0
270
IoTを始めたきっかけの話と個人でできるIoTの今後 / 新年LT会「私の愛するIoT 2023」
you
0
230
OpenShiftでスポットVMを使おう.pdf
jpishikawa
1
350
OPENLOGI Company Profile
hr01
0
12k
ユーザーテストガイドライン VERSION 2.0
kouzoukaikaku
0
1.3k
NGINXENG JP#2 - 4-NGINX-エンジニアリング勉強会
hiropo20
0
120
Featured
See All Featured
WebSockets: Embracing the real-time Web
robhawkes
58
6k
Designing for humans not robots
tammielis
245
24k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
182
15k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
7
580
Product Roadmaps are Hard
iamctodd
38
7.7k
How STYLIGHT went responsive
nonsquared
89
4.2k
The Invisible Side of Design
smashingmag
292
48k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
152
13k
Documentation Writing (for coders)
carmenintech
51
2.9k
How to name files
jennybc
47
73k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
351
21k
From Idea to $5000 a Month in 5 Months
shpigford
374
44k
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ొஃ͠·͢ ͓࣌ؒ͋Δ͔ͨͥͻ