Skip to content

Commit 66b3bc6

Browse files
committed
0.3.0
1 parent 0a4e405 commit 66b3bc6

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+4211
-450
lines changed

.github/workflows/release.yml

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,39 @@ on:
77
jobs:
88
build:
99
if: "!contains(github.event.commits[0].message, '[skip ci]')"
10-
1110
strategy:
1211
matrix:
1312
include:
1413
- os: macos-latest
15-
gradle_args: publishIosX64PublicationToSonatypeRepository publishIosArm64PublicationToSonatypeRepository publishIosSimulatorArm64PublicationToSonatypeRepository publishTvosX64PublicationToSonatypeRepository publishTvosArm64PublicationToSonatypeRepository publishTvosSimulatorArm64PublicationToSonatypeRepository publishTvosSimulatorArm64PublicationToSonatypeRepository publishWatchosArm32PublicationToSonatypeRepository publishWatchosArm64PublicationToSonatypeRepository publishWatchosX64PublicationToSonatypeRepository publishWatchosSimulatorArm64PublicationToSonatypeRepository publishMacosX64PublicationToSonatypeRepository publishMacosArm64PublicationToSonatypeRepository
14+
gradle_args: assemble publishIosX64PublicationToSonatypeRepository
15+
- os: macos-latest
16+
gradle_args: assemble publishIosArm64PublicationToSonatypeRepository
17+
- os: macos-latest
18+
gradle_args: assemble publishIosSimulatorArm64PublicationToSonatypeRepository
19+
- os: macos-latest
20+
gradle_args: assemble publishIosSimulatorArm64PublicationToSonatypeRepository
21+
- os: macos-latest
22+
gradle_args: assemble publishTvosX64PublicationToSonatypeRepository
23+
- os: macos-latest
24+
gradle_args: assemble publishTvosArm64PublicationToSonatypeRepository
25+
- os: macos-latest
26+
gradle_args: assemble publishTvosSimulatorArm64PublicationToSonatypeRepository
27+
- os: macos-latest
28+
gradle_args: assemble publishTvosSimulatorArm64PublicationToSonatypeRepository
29+
- os: macos-latest
30+
gradle_args: assemble publishWatchosArm32PublicationToSonatypeRepository
31+
- os: macos-latest
32+
gradle_args: assemble publishWatchosArm64PublicationToSonatypeRepository
33+
- os: macos-latest
34+
gradle_args: assemble publishWatchosX64PublicationToSonatypeRepository
35+
- os: macos-latest
36+
gradle_args: assemble publishWatchosSimulatorArm64PublicationToSonatypeRepository
37+
- os: macos-latest
38+
gradle_args: assemble publishMacosX64PublicationToSonatypeRepository
39+
- os: macos-latest
40+
gradle_args: assemble publishMacosArm64PublicationToSonatypeRepository
1641
- os: ubuntu-latest
17-
gradle_args: publishKotlinMultiplatformPublicationToSonatypeRepository publishJvmPublicationToSonatypeRepository publishLinuxX64PublicationToSonatypeRepository publishLinuxArm64PublicationToSonatypeRepository publishMingwX64PublicationToSonatypeRepository
42+
gradle_args: assemble publishKotlinMultiplatformPublicationToSonatypeRepository publishJvmPublicationToSonatypeRepository publishLinuxX64PublicationToSonatypeRepository publishLinuxArm64PublicationToSonatypeRepository publishMingwX64PublicationToSonatypeRepository
1843

1944
runs-on: ${{ matrix.os }}
2045
steps:

adnl/src/connection/AdnlConnection.kt

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package org.ton.adnl.connection
22

3+
import io.github.andreypfau.kotlinx.crypto.aes.AES
4+
import io.github.andreypfau.kotlinx.crypto.cipher.CTRBlockCipher
5+
import io.github.andreypfau.kotlinx.crypto.sha2.SHA256
36
import io.ktor.utils.io.*
47
import io.ktor.utils.io.core.*
58
import io.ktor.utils.io.errors.*
@@ -10,10 +13,7 @@ import kotlinx.datetime.Clock
1013
import kotlinx.datetime.Instant
1114
import org.ton.adnl.network.TcpClient
1215
import org.ton.api.liteserver.LiteServerDesc
13-
import org.ton.crypto.AesCtr
1416
import org.ton.crypto.SecureRandom
15-
import org.ton.crypto.digest.Digest
16-
import org.ton.crypto.digest.sha256
1717
import org.ton.tl.writeByteString
1818
import kotlin.coroutines.CoroutineContext
1919
import kotlin.time.Duration
@@ -114,7 +114,7 @@ public class AdnlConnection(
114114
request: AdnlRequestData,
115115
callContext: CoroutineContext,
116116
output: ByteWriteChannel,
117-
cipher: AesCtr,
117+
cipher: CTRBlockCipher,
118118
closeChannel: Boolean = true
119119
) = withContext(callContext) {
120120
val scope = CoroutineScope(callContext + CoroutineName("Request body writer"))
@@ -136,7 +136,7 @@ public class AdnlConnection(
136136
private suspend fun readResponse(
137137
requestTime: Instant,
138138
input: ByteReadChannel,
139-
cipher: AesCtr,
139+
cipher: CTRBlockCipher,
140140
callContext: CoroutineContext
141141
) = withContext(callContext) {
142142
val packet = readRaw(input, cipher)
@@ -149,17 +149,23 @@ public class AdnlConnection(
149149

150150
private suspend fun readRaw(
151151
input: ByteReadChannel,
152-
cipher: AesCtr
152+
cipher: CTRBlockCipher
153153
): ByteReadPacket {
154154
val encryptedLength = input.readPacket(4).readBytes()
155-
val length = ByteReadPacket(cipher.update(encryptedLength)).readIntLittleEndian()
155+
val plainLength = ByteArray(4)
156+
cipher.processBytes(encryptedLength, plainLength)
157+
158+
val length = ByteReadPacket(plainLength).readIntLittleEndian()
156159
check(length in 32..(1 shl 24)) { "Invalid length" }
157160
val encryptedData = input.readPacket(length).readBytes()
158-
val data = ByteReadPacket(cipher.update(encryptedData))
161+
val plainData = ByteArray(length)
162+
cipher.processBytes(encryptedData, plainData)
163+
164+
val data = ByteReadPacket(plainData)
159165
val payload = data.readBytes((data.remaining - 32).toInt())
160166
val hash = data.readBytes(32)
161167

162-
require(sha256(payload).contentEquals(hash)) {
168+
require(io.github.andreypfau.kotlinx.crypto.sha2.sha256(payload).contentEquals(hash)) {
163169
"sha256 mismatch"
164170
}
165171

@@ -170,34 +176,38 @@ public class AdnlConnection(
170176

171177
private suspend fun writeRaw(
172178
output: ByteWriteChannel,
173-
cipher: AesCtr,
179+
cipher: CTRBlockCipher,
174180
packet: ByteReadPacket
175181
) {
176182
val dataSize = (packet.remaining + 32 + 32).toInt()
177183
require(dataSize in 32..(1 shl 24)) { "Invalid packet size: $dataSize" }
178184
val nonce = SecureRandom.nextBytes(32)
179185
val payload = packet.readBytes()
180-
val hash = Digest.sha256().apply {
181-
update(nonce)
182-
update(payload)
183-
}.build()
186+
187+
val hash = SHA256().apply {
188+
write(nonce)
189+
write(payload)
190+
}.digest()
191+
184192
val data = buildPacket {
185193
writeIntLittleEndian(dataSize)
186194
writeFully(nonce)
187195
writeFully(payload)
188196
writeFully(hash)
189197
}
190-
val encryptedData = cipher.update(data.readBytes())
198+
199+
val encryptedData = ByteArray(data.remaining.toInt())
200+
cipher.processBytes(data.readBytes(), encryptedData)
191201
output.writeFully(encryptedData)
192202
}
193203

194204
private class ChannelCipher(
195-
val input: AesCtr,
196-
val output: AesCtr
205+
val input: CTRBlockCipher,
206+
val output: CTRBlockCipher
197207
) {
198208
constructor(
199209
s1: ByteArray, s2: ByteArray, v1: ByteArray, v2: ByteArray
200-
) : this(AesCtr(s1, v1), AesCtr(s2, v2))
210+
) : this(CTRBlockCipher(AES(s1), v1), CTRBlockCipher(AES(s2), v2))
201211

202212
constructor(
203213
nonce: ByteArray

adnl/src/peer/AdnlMessagePartDecoder.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package org.ton.adnl.peer
22

33
import org.ton.api.adnl.message.AdnlMessage
44
import org.ton.api.adnl.message.AdnlMessagePart
5-
import org.ton.crypto.digest.sha256
65
import org.ton.tl.asByteString
76

87
public class AdnlMessagePartDecoder(
@@ -29,7 +28,7 @@ public class AdnlMessagePartDecoder(
2928
val totalSize = currentMessageOffset + message.data.size
3029
messageOffset = totalSize
3130
if (totalSize == messagePayload.size) {
32-
val actualMessageHash = sha256(messagePayload)
31+
val actualMessageHash = io.github.andreypfau.kotlinx.crypto.sha2.sha256(messagePayload)
3332
check(actualMessageHash.asByteString() == messageHash) {
3433
"hash mismatch, expected: $messageHash, actual: $actualMessageHash"
3534
}

adnl/src/peer/AdnlMessagePartEncoder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package org.ton.adnl.peer
22

3+
import io.github.andreypfau.kotlinx.crypto.sha2.sha256
34
import org.ton.api.adnl.message.AdnlMessage
45
import org.ton.api.adnl.message.AdnlMessagePart
5-
import org.ton.crypto.digest.sha256
66
import org.ton.tl.asByteString
77

88
public class AdnlMessagePartEncoder(

bitstring/api/ton-kotlin-bitstring.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ public final class org/ton/bitstring/BitString$Companion {
5050
public final fun of ([Z)Lorg/ton/bitstring/BitString;
5151
public static synthetic fun of$default (Lorg/ton/bitstring/BitString$Companion;IILjava/lang/Object;)Lorg/ton/bitstring/BitString;
5252
public static synthetic fun of$default (Lorg/ton/bitstring/BitString$Companion;[BIILjava/lang/Object;)Lorg/ton/bitstring/BitString;
53+
public final fun serializer ()Lkotlinx/serialization/KSerializer;
5354
}
5455

5556
public final class org/ton/bitstring/BitStringKt {

bitstring/src/ByteBackedBitString.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.ton.bitstring
22

33
import org.ton.bitstring.exception.BitStringUnderflowException
4-
import org.ton.crypto.hex
54
import kotlin.experimental.and
65
import kotlin.experimental.or
76
import kotlin.experimental.xor
@@ -83,7 +82,7 @@ public open class ByteBackedBitString protected constructor(
8382
override fun toHex(): String {
8483
if (size == 0) return ""
8584
val data = appendTag(bytes, size)
86-
val result = StringBuilder(hex(data))
85+
val result = StringBuilder(data.toHexString())
8786
when (size % 8) {
8887
0 -> {
8988
result.deleteAt(result.lastIndex)

0 commit comments

Comments
 (0)