Introduce Wire for proto codegen.

main
Greyson Parrelli 2023-02-02 10:10:00 -05:00 zatwierdzone przez Nicholas Tinsley
rodzic 72449fd73e
commit a91a13cead
11 zmienionych plików z 215 dodań i 31 usunięć

Wyświetl plik

@ -9,8 +9,10 @@ apply from: 'translations.gradle'
apply plugin: 'org.jetbrains.kotlin.android'
apply plugin: 'app.cash.exhaustive'
apply plugin: 'kotlin-parcelize'
apply plugin: 'com.squareup.wire'
apply from: 'static-ips.gradle'
repositories {
maven {
url "https://raw.githubusercontent.com/signalapp/maven/master/sqlcipher/release/"
@ -47,6 +49,16 @@ protobuf {
}
}
wire {
kotlin {
javaInterop = true
}
sourcePath {
srcDir 'src/main/protowire'
}
}
ktlint {
// Use a newer version to resolve https://github.com/JLLeitschuh/ktlint-gradle/issues/507
version = "0.43.2"

Wyświetl plik

@ -3,7 +3,7 @@ package org.thoughtcrime.securesms.absbackup.backupables
import com.google.protobuf.InvalidProtocolBufferException
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.absbackup.AndroidBackupItem
import org.thoughtcrime.securesms.absbackup.ExternalBackupProtos
import org.thoughtcrime.securesms.absbackup.protos.KbsAuthToken
import org.thoughtcrime.securesms.keyvalue.SignalStore
/**
@ -18,10 +18,8 @@ object KbsAuthTokens : AndroidBackupItem {
override fun getDataForBackup(): ByteArray {
val registrationRecoveryTokenList = SignalStore.kbsValues().kbsAuthTokenList
val proto = ExternalBackupProtos.KbsAuthToken.newBuilder()
.addAllToken(registrationRecoveryTokenList)
.build()
return proto.toByteArray()
val proto = KbsAuthToken(tokens = registrationRecoveryTokenList)
return proto.encode()
}
override fun restoreData(data: ByteArray) {
@ -30,9 +28,9 @@ object KbsAuthTokens : AndroidBackupItem {
}
try {
val proto = ExternalBackupProtos.KbsAuthToken.parseFrom(data)
val proto = KbsAuthToken.ADAPTER.decode(data)
SignalStore.kbsValues().putAuthTokenList(proto.tokenList)
SignalStore.kbsValues().putAuthTokenList(proto.tokens)
} catch (e: InvalidProtocolBufferException) {
Log.w(TAG, "Cannot restore KbsAuthToken from backup service.")
}

Wyświetl plik

@ -29,13 +29,14 @@ import java.security.MessageDigest;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import javax.crypto.Cipher;
import javax.crypto.Mac;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import static org.thoughtcrime.securesms.devicelist.DeviceNameProtos.DeviceName;
import org.thoughtcrime.securesms.devicelist.protos.DeviceName;
public class DeviceListLoader extends AsyncLoader<List<Device>> {
@ -71,9 +72,9 @@ public class DeviceListLoader extends AsyncLoader<List<Device>> {
throw new IOException("Invalid DeviceInfo name.");
}
DeviceName deviceName = DeviceName.parseFrom(Base64.decode(deviceInfo.getName()));
DeviceName deviceName = DeviceName.ADAPTER.decode(Base64.decode(deviceInfo.getName()));
if (!deviceName.hasCiphertext() || !deviceName.hasEphemeralPublic() || !deviceName.hasSyntheticIv()) {
if (deviceName.ciphertext == null || deviceName.ephemeralPublic == null || deviceName.syntheticIv == null) {
throw new IOException("Got a DeviceName that wasn't properly populated.");
}
@ -90,10 +91,10 @@ public class DeviceListLoader extends AsyncLoader<List<Device>> {
@VisibleForTesting
public static byte[] decryptName(DeviceName deviceName, IdentityKeyPair identityKeyPair) throws InvalidKeyException, GeneralSecurityException {
byte[] syntheticIv = deviceName.getSyntheticIv().toByteArray();
byte[] cipherText = deviceName.getCiphertext().toByteArray();
byte[] syntheticIv = Objects.requireNonNull(deviceName.syntheticIv).toByteArray();
byte[] cipherText = Objects.requireNonNull(deviceName.ciphertext).toByteArray();
ECPrivateKey identityKey = identityKeyPair.getPrivateKey();
ECPublicKey ephemeralPublic = Curve.decodePoint(deviceName.getEphemeralPublic().toByteArray(), 0);
ECPublicKey ephemeralPublic = Curve.decodePoint(Objects.requireNonNull(deviceName.ephemeralPublic).toByteArray(), 0);
byte[] masterSecret = Curve.calculateAgreement(ephemeralPublic, identityKey);
Mac mac = Mac.getInstance("HmacSHA256");

Wyświetl plik

@ -116,13 +116,13 @@ object JumboEmoji {
Log.i(TAG, "No file for emoji, downloading jumbo")
EmojiDownloader.streamFileFromRemote(version, version.density, archiveName) { stream ->
stream.use { remote ->
val jumbomojiPack = JumbomojiPack.parseFrom(remote)
val jumbomojiPack = JumbomojiPack.ADAPTER.decode(remote)
jumbomojiPack.itemsList.forEach { jumbo ->
jumbomojiPack.items.forEach { jumbo ->
val emojiNameEntry = EmojiFiles.Name(jumbo.name, UUID.randomUUID())
val outputStream = EmojiFiles.openForWriting(applicationContext, version, emojiNameEntry.uuid)
outputStream.use { jumbo.image.writeTo(it) }
outputStream.use { jumbo.image.write(it) }
jumbos = EmojiFiles.JumboCollection.append(applicationContext, jumbos, emojiNameEntry)
}

Wyświetl plik

@ -1,10 +1,10 @@
package org.thoughtcrime.securesms.registration.secondary
import com.google.protobuf.ByteString
import okio.ByteString.Companion.toByteString
import org.signal.libsignal.protocol.IdentityKeyPair
import org.signal.libsignal.protocol.ecc.Curve
import org.signal.libsignal.protocol.ecc.ECKeyPair
import org.thoughtcrime.securesms.devicelist.DeviceNameProtos
import org.thoughtcrime.securesms.devicelist.protos.DeviceName
import java.nio.charset.Charset
import javax.crypto.Cipher
import javax.crypto.Mac
@ -30,12 +30,11 @@ object DeviceNameCipher {
cipher.init(Cipher.ENCRYPT_MODE, SecretKeySpec(cipherKey, "AES"), IvParameterSpec(ByteArray(16)))
val cipherText = cipher.doFinal(plaintext)
return DeviceNameProtos.DeviceName.newBuilder()
.setEphemeralPublic(ByteString.copyFrom(ephemeralKeyPair.publicKey.serialize()))
.setSyntheticIv(ByteString.copyFrom(syntheticIv))
.setCiphertext(ByteString.copyFrom(cipherText))
.build()
.toByteArray()
return DeviceName(
ephemeralPublic = ephemeralKeyPair.publicKey.serialize().toByteString(),
syntheticIv = syntheticIv.toByteString(),
ciphertext = cipherText.toByteString()
).encode()
}
private fun computeCipherKey(masterSecret: ByteArray, syntheticIv: ByteArray): ByteArray {

Wyświetl plik

@ -8,8 +8,7 @@ syntax = "proto2";
package signalservice;
option java_package = "org.thoughtcrime.securesms.devicelist";
option java_outer_classname = "DeviceNameProtos";
option java_package = "org.thoughtcrime.securesms.devicelist.protos";
message DeviceName {
optional bytes ephemeralPublic = 1;

Wyświetl plik

@ -8,9 +8,8 @@ syntax = "proto3";
package signal;
option java_package = "org.thoughtcrime.securesms.absbackup";
option java_outer_classname = "ExternalBackupProtos";
option java_package = "org.thoughtcrime.securesms.absbackup.protos";
message KbsAuthToken {
repeated string token = 1;
repeated string tokens = 1;
}

Wyświetl plik

@ -5,7 +5,7 @@ import org.hamcrest.Matchers.`is`
import org.junit.Test
import org.thoughtcrime.securesms.crypto.IdentityKeyUtil
import org.thoughtcrime.securesms.database.loaders.DeviceListLoader
import org.thoughtcrime.securesms.devicelist.DeviceNameProtos
import org.thoughtcrime.securesms.devicelist.protos.DeviceName
import java.nio.charset.Charset
class DeviceNameCipherTest {
@ -17,7 +17,7 @@ class DeviceNameCipherTest {
val encryptedDeviceName = DeviceNameCipher.encryptDeviceName(deviceName.toByteArray(Charset.forName("UTF-8")), identityKeyPair)
val plaintext = DeviceListLoader.decryptName(DeviceNameProtos.DeviceName.parseFrom(encryptedDeviceName), identityKeyPair)
val plaintext = DeviceListLoader.decryptName(DeviceName.ADAPTER.decode(encryptedDeviceName), identityKeyPair)
assertThat(String(plaintext, Charset.forName("UTF-8")), `is`(deviceName))
}

Wyświetl plik

@ -24,6 +24,13 @@ buildscript {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jlleitschuh.gradle:ktlint-gradle:10.2.1"
classpath 'app.cash.exhaustive:exhaustive-gradle:0.1.1'
classpath ('com.squareup.wire:wire-gradle-plugin:4.4.3') {
exclude group: 'com.squareup.wire', module: 'wire-swift-generator'
exclude group: 'com.squareup.wire', module: 'wire-grpc-client'
exclude group: 'com.squareup.wire', module: 'wire-grpc-jvm'
exclude group: 'com.squareup.wire', module: 'wire-grpc-server-generator'
exclude group: 'io.outfoxx', module: 'swiftpoet'
}
}
}

Wyświetl plik

@ -1501,6 +1501,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="7891debb84b5f83e9bd57593ebece3399abbe0fd938cf306b3534c57913b9615" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.charleskorn.kaml" name="kaml" version="0.20.0">
<artifact name="kaml-0.20.0.jar">
<sha256 value="0746f87e0668e41bbd086d34e7d207df21b6d290d1c203950cb7c79f55245884" origin="Generated by Gradle"/>
</artifact>
<artifact name="kaml-0.20.0.module">
<sha256 value="fe565bb22b04c8538d8696e9f773b36c7e0190fe826f29ccc158bafeca618630" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.codewaves.stickyheadergrid" name="stickyheadergrid" version="0.9.4">
<artifact name="stickyheadergrid-0.9.4.aar">
<sha256 value="5b4aa6a52a957cfd55f60f4220c11c0c371385a3cb9786cae03c260dcdef5794" origin="Generated by Gradle"/>
@ -1948,6 +1956,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="f1dd23f8ae34a8e91366723991ead0d6499d1a3e9163ce550c200b02d76a872b" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.errorprone" name="error_prone_annotations" version="2.11.0">
<artifact name="error_prone_annotations-2.11.0.jar">
<sha256 value="721cb91842b46fa056847d104d5225c8b8e1e8b62263b993051e1e5a0137b7ec" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.errorprone" name="error_prone_annotations" version="2.14.0">
<artifact name="error_prone_annotations-2.14.0.jar">
<sha256 value="1494e24e7bd5496e7d6f705169dddd46081cefb882ea4fc60b4a58ca50767f34" origin="Generated by Gradle"/>
@ -2093,6 +2106,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="32ac2ed709d96d278b5d2e3e5cea178fa4939939c525fb647532f013308db309" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.guava" name="guava" version="31.1-jre">
<artifact name="guava-31.1-jre.jar">
<sha256 value="a42edc9cab792e39fe39bb94f3fca655ed157ff87a8af78e1d6ba5b07c4a00ab" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.google.guava" name="listenablefuture" version="1.0">
<artifact name="listenablefuture-1.0.jar">
<sha256 value="e4ad7607e5c0477c6f890ef26a49cb8d1bb4dffb650bab4502afee64644e3069" origin="Generated by Gradle"/>
@ -2473,6 +2491,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="fcfb09fb0ea0aa97d3cfe7ea792398081348e468f126b3603cb3803f240197f0" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup" name="kotlinpoet" version="1.12.0">
<artifact name="kotlinpoet-1.12.0.jar">
<sha256 value="8e3f7849cdfb5376c87aca4cd40a6b96fbb02ddf060b6211099f5d15211171ce" origin="Generated by Gradle"/>
</artifact>
<artifact name="kotlinpoet-1.12.0.module">
<sha256 value="2cd09d68d118d9eb1ef949ef9f066e54fdab9a4e986fdf753e0a8f1da7a10e3a" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup" name="kotlinpoet" version="1.8.0">
<artifact name="kotlinpoet-1.8.0.jar">
<sha256 value="a4f7f1f1306a97740b2c18c6089cddf65626764c4cd848aa83363681268e57f0" origin="Generated by Gradle"/>
@ -2579,6 +2605,19 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="508234e024ef7e270ab1a6d5b356f5b98e786511239ca986d684fd1e2cf7bc82" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.okhttp3" name="okhttp" version="4.9.3">
<artifact name="okhttp-4.9.3.jar">
<sha256 value="93ecd6cba19d87dccfe566ec848d91aae799e3cf16c00709358ea69bd9227219" origin="Generated by Gradle"/>
</artifact>
<artifact name="okhttp-4.9.3.module">
<sha256 value="8327fe576723986ded4afa5e0d9e132ae302ccf56f213c0db821a7404d40f8ef" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.okhttp3" name="okhttp-bom" version="4.9.3">
<artifact name="okhttp-bom-4.9.3.module">
<sha256 value="86f90a09a87639ba6a327b7934a12507a66ddca8a6bee772dddd92232f3b06c9" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.okio" name="okio" version="1.15.0">
<artifact name="okio-1.15.0.jar">
<sha256 value="693fa319a7e8843300602b204023b7674f106ebcb577f2dd5807212b66118bd2" origin="Generated by Gradle"/>
@ -2594,6 +2633,88 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="e58c97406a6bb1138893750299ac63c6aa04b38b6b49eae1bfcad1a63ef9ba1b" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.okio" name="okio" version="3.0.0">
<artifact name="okio-3.0.0.module">
<sha256 value="6f9e3a797831e75c5b562d946c075183f9b2be846791e9f88bde45491daed987" origin="Generated by Gradle"/>
</artifact>
<artifact name="okio-metadata-3.0.0.jar">
<sha256 value="dcbe63ed43b2c90c325e9e6a0863e2e7605980bff5e728c6de1088be5574979e" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.okio" name="okio-bom" version="3.0.0">
<artifact name="okio-bom-3.0.0.module">
<sha256 value="fb5d398df7754d9a95279ff09f1292ebf8dc145008f046a2710c07637aff0e69" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.okio" name="okio-jvm" version="3.0.0">
<artifact name="okio-jvm-3.0.0.jar">
<sha256 value="be64a0cc1f28ea9cd5c970dd7e7557af72c808d738c495b397bf897c9921e907" origin="Generated by Gradle"/>
</artifact>
<artifact name="okio-jvm-3.0.0.module">
<sha256 value="17f48d41775bd84dea78e9dfed8dfbcc66af80567a5c9ec9d9608785ec820cde" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.wire" name="wire-compiler" version="4.4.3">
<artifact name="wire-compiler-4.4.3.jar">
<sha256 value="3927416764234a9e981e4bd49068760bed327a1056476a85a00fcfec1e3f5976" origin="Generated by Gradle"/>
</artifact>
<artifact name="wire-compiler-4.4.3.module">
<sha256 value="51748c8450895d7a6d798f11b2646e6e919d55834bb8a0fb8f0d873f0bb54d88" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.wire" name="wire-gradle-plugin" version="4.4.3">
<artifact name="wire-gradle-plugin-4.4.3.jar">
<sha256 value="795d885379d1b624abb7db724270abd4e10aac41c17afacdb92c3bd85e6ca6a7" origin="Generated by Gradle"/>
</artifact>
<artifact name="wire-gradle-plugin-4.4.3.module">
<sha256 value="113849267bd3d0e15363cef2d005ba66bd09a20235ff523cf04852549522f4e8" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.wire" name="wire-java-generator" version="4.4.3">
<artifact name="wire-java-generator-4.4.3.jar">
<sha256 value="0e79ff3578c23ef60a544ffe2daed4b19fc03bb417d350d29c8a30f3d5c939d9" origin="Generated by Gradle"/>
</artifact>
<artifact name="wire-java-generator-4.4.3.module">
<sha256 value="43faa7d0965f9d74c1df22ef9fc4c965e0ac29b770b8ce942c7bfeb2ed4b44d2" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.wire" name="wire-kotlin-generator" version="4.4.3">
<artifact name="wire-kotlin-generator-4.4.3.jar">
<sha256 value="063ec3154dc99206aeb229ba7d9306d69ad8759244682cad3b6dda815cadb64c" origin="Generated by Gradle"/>
</artifact>
<artifact name="wire-kotlin-generator-4.4.3.module">
<sha256 value="283fb66d5c9d466972a96b365f6dbb64c26b77fafff2fca15befc1c5155e1521" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.wire" name="wire-runtime" version="4.4.3">
<artifact name="wire-runtime-4.4.3.module">
<sha256 value="7c66b05bc09c9cead5794a9708fedce6a39217fea16558d2a799fdf702537675" origin="Generated by Gradle"/>
</artifact>
<artifact name="wire-runtime-metadata-4.4.3.jar">
<sha256 value="3f350a77f7c241d6612d44859e27c8999b5ce2a47baaad7277ba3b7d450b4818" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.wire" name="wire-runtime-jvm" version="4.4.3">
<artifact name="wire-runtime-jvm-4.4.3.jar">
<sha256 value="d3c0cc527e7a3dcaf59e3ae41e382dd0f62dfef3043911a7768e3787dc0b6335" origin="Generated by Gradle"/>
</artifact>
<artifact name="wire-runtime-jvm-4.4.3.module">
<sha256 value="b02d3bd2e4929ccb0ab36c88b569b10fc27b360711ee1718126a3b11b317d7f7" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.wire" name="wire-schema" version="4.4.3">
<artifact name="wire-schema-4.4.3.module">
<sha256 value="44c4bf54631537be1e096d09e5557f801f4e93f853ed5830168483c6cd4c832b" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.squareup.wire" name="wire-schema-jvm" version="4.4.3">
<artifact name="wire-schema-jvm-4.4.3.jar">
<sha256 value="8c1c0cf41ca426ac018416326b6b2d938b2545a562a661c47ac468239177ce69" origin="Generated by Gradle"/>
</artifact>
<artifact name="wire-schema-jvm-4.4.3.module">
<sha256 value="13682702b39853268ed3d9d013d2a5f3e2e0f63a62bd6c68d2e392c977213e5e" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="com.sun.activation" name="javax.activation" version="1.2.0">
<artifact name="javax.activation-1.2.0.jar">
<sha256 value="993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce" origin="Generated by Gradle"/>
@ -3702,6 +3823,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="1e1f57209f7238c3fd1735a1b9339a56565507dca249f8371bf59d91f601aeaa" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlin" name="kotlin-reflect" version="1.7.0">
<artifact name="kotlin-reflect-1.7.0.jar">
<sha256 value="d22146070957a44360006837873c51b6602c96a819576b40fdabcd95b7740771" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlin" name="kotlin-reflect" version="1.7.10">
<artifact name="kotlin-reflect-1.7.10.jar">
<sha256 value="187c5e5a588a6ed18c3a41b54df138a5944121bdb396be1c3fa4abee67397955" origin="Generated by Gradle"/>
@ -3817,6 +3943,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="739c526672bb337573b28f63afa8306eb088b0c3a0967f56d6c89f4a3012a492" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib" version="1.7.0">
<artifact name="kotlin-stdlib-1.7.0.jar">
<sha256 value="aa88e9625577957f3249a46cb6e166ee09b369e600f7a11d148d16b0a6d87f05" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib" version="1.7.10">
<artifact name="kotlin-stdlib-1.7.10.jar">
<sha256 value="e771fe74250a943e8f6346713201ff1d8cb95c3a5d1a91a22b65a9e04f6a8901" origin="Generated by Gradle"/>
@ -3867,11 +3998,21 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="dfa2a18e26b028388ee1968d199bf6f166f737ab7049c25a5e2da614404e22ad" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib-common" version="1.6.10">
<artifact name="kotlin-stdlib-common-1.6.10.jar">
<sha256 value="280ddd0994e4560c9a49ee81c1b047ddc2b8f2176159475066025b474b37effd" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib-common" version="1.6.21">
<artifact name="kotlin-stdlib-common-1.6.21.jar">
<sha256 value="183bec59cd9f3a14957b190e8c879cf1194bd1f106b0a7b6e1cbb8790d242363" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib-common" version="1.7.0">
<artifact name="kotlin-stdlib-common-1.7.0.jar">
<sha256 value="59c6ff64fe9a6604afce03e8aaa75f83586c6030ac71fb0b34ee7cdefed3618f" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib-common" version="1.7.10">
<artifact name="kotlin-stdlib-common-1.7.10.jar">
<sha256 value="19f102efe9629f8eabc63853ad15c533e47c47f91fca09285c5bde86e59f91d4" origin="Generated by Gradle"/>
@ -3917,6 +4058,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="f1b0634dbb94172038463020bb2dd45ca26849f8ce29d625acb0f1569d11dbee" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk7" version="1.7.0">
<artifact name="kotlin-stdlib-jdk7-1.7.0.jar">
<sha256 value="07e91be9b2ca20672d2bdb7e181b766e73453a2da13492b5ddaee8fa47aea239" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk7" version="1.7.10">
<artifact name="kotlin-stdlib-jdk7-1.7.10.jar">
<sha256 value="54f61351b1936ad88f4e53059fe781e723eae51d78ed9e7422d8b403574ec682" origin="Generated by Gradle"/>
@ -3962,6 +4108,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="dab45489b47736d59fce44b80676f1947a9b6bcab10fd60e878a83bd82a6954c" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk8" version="1.7.0">
<artifact name="kotlin-stdlib-jdk8-1.7.0.jar">
<sha256 value="cf058e11db1dfc9944680c8c61b95ac689aaaa8a3eb30bced028100f038f030b" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlin" name="kotlin-stdlib-jdk8" version="1.7.10">
<artifact name="kotlin-stdlib-jdk8-1.7.10.jar">
<sha256 value="8aafdd60c94f454c92e5066d266a5ed53ecc63c78f623b3fd9db56fea4032873" origin="Generated by Gradle"/>
@ -4133,11 +4284,24 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="c075dc88140a6ab48a6657113fa0b587ddfa82640a4672247dafc0de208f1192" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlinx" name="kotlinx-serialization-core" version="1.0.1">
<artifact name="kotlinx-serialization-core-1.0.1.module">
<sha256 value="9d0f1f6db25e394c89d58838eaebf3eabe360ef8ceb98aa3b9a4283532a54077" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlinx" name="kotlinx-serialization-core" version="1.1.0">
<artifact name="kotlinx-serialization-core-1.1.0.module">
<sha256 value="a21890616c068b55580ca3cf008b3d5d7f9613c980b754b4ad5a5bf74e8babf5" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlinx" name="kotlinx-serialization-core-jvm" version="1.0.1">
<artifact name="kotlinx-serialization-core-jvm-1.0.1.jar">
<sha256 value="16dd687a3c4b8ac09eb20859da8c80372dca494d321e2c64823848ccd7f23651" origin="Generated by Gradle"/>
</artifact>
<artifact name="kotlinx-serialization-core-jvm-1.0.1.module">
<sha256 value="d07d3406b27056251e0e3e0e1f74f532e54d28b2b6596dea49b633f6e5699d43" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.jetbrains.kotlinx" name="kotlinx-serialization-core-jvm" version="1.1.0">
<artifact name="kotlinx-serialization-core-jvm-1.1.0.jar">
<sha256 value="69d18c700cfdf207b3e9bf6f5d58e7de08482d9e34d7c2a0adcb1db8082df943" origin="Generated by Gradle"/>
@ -4628,6 +4792,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html
<sha256 value="d7de146d2b6dc9d0b75cb6c7ff17ca68ef24049dc6038b84b5f6b22cd00ddd46" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.snakeyaml" name="snakeyaml-engine" version="2.1">
<artifact name="snakeyaml-engine-2.1.jar">
<sha256 value="7007cb15171fb188e0e2abc5ea6f4f97b39cd1f86db6c2cd1b7300d0db67b021" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="org.tensorflow" name="tensorflow-lite-metadata" version="0.1.0-rc2">
<artifact name="tensorflow-lite-metadata-0.1.0-rc2.jar">
<sha256 value="2c2a264f842498c36d34d2a7b91342490d9a962862c85baac1acd54ec2fca6d9" origin="Generated by Gradle"/>