That fuck shit the fascists are using
at master 81 lines 4.0 kB view raw
1package org.tm.archive.testing 2 3import okio.ByteString.Companion.toByteString 4import org.signal.core.util.Base64 5import org.signal.libsignal.internal.Native 6import org.signal.libsignal.internal.NativeHandleGuard 7import org.signal.libsignal.metadata.certificate.CertificateValidator 8import org.signal.libsignal.metadata.certificate.SenderCertificate 9import org.signal.libsignal.metadata.certificate.ServerCertificate 10import org.signal.libsignal.protocol.ecc.Curve 11import org.signal.libsignal.protocol.ecc.ECKeyPair 12import org.signal.libsignal.protocol.ecc.ECPublicKey 13import org.signal.libsignal.zkgroup.profiles.ProfileKey 14import org.tm.archive.messages.SignalServiceProtoUtil.buildWith 15import org.whispersystems.signalservice.api.crypto.ContentHint 16import org.whispersystems.signalservice.api.crypto.EnvelopeContent 17import org.whispersystems.signalservice.api.crypto.UnidentifiedAccess 18import org.whispersystems.signalservice.api.crypto.UnidentifiedAccessPair 19import org.whispersystems.signalservice.api.push.ServiceId 20import org.whispersystems.signalservice.internal.push.Content 21import org.whispersystems.signalservice.internal.push.DataMessage 22import org.whispersystems.signalservice.internal.push.Envelope 23import org.whispersystems.signalservice.internal.push.OutgoingPushMessage 24import java.util.Optional 25import java.util.UUID 26 27object FakeClientHelpers { 28 29 val noOpCertificateValidator = object : CertificateValidator(null) { 30 override fun validate(certificate: SenderCertificate, validationTime: Long) = Unit 31 } 32 33 fun createCertificateFor(trustRoot: ECKeyPair, uuid: UUID, e164: String, deviceId: Int, identityKey: ECPublicKey, expires: Long): SenderCertificate { 34 val serverKey: ECKeyPair = Curve.generateKeyPair() 35 NativeHandleGuard(serverKey.publicKey).use { serverPublicGuard -> 36 NativeHandleGuard(trustRoot.privateKey).use { trustRootPrivateGuard -> 37 val serverCertificate = ServerCertificate(Native.ServerCertificate_New(1, serverPublicGuard.nativeHandle(), trustRootPrivateGuard.nativeHandle())) 38 NativeHandleGuard(identityKey).use { identityGuard -> 39 NativeHandleGuard(serverCertificate).use { serverCertificateGuard -> 40 NativeHandleGuard(serverKey.privateKey).use { serverPrivateGuard -> 41 return SenderCertificate(Native.SenderCertificate_New(uuid.toString(), e164, deviceId, identityGuard.nativeHandle(), expires, serverCertificateGuard.nativeHandle(), serverPrivateGuard.nativeHandle())) 42 } 43 } 44 } 45 } 46 } 47 } 48 49 fun getTargetUnidentifiedAccess(myProfileKey: ProfileKey, theirProfileKey: ProfileKey, senderCertificate: SenderCertificate): Optional<UnidentifiedAccess> { 50 val selfUnidentifiedAccessKey = UnidentifiedAccess.deriveAccessKeyFrom(myProfileKey) 51 val themUnidentifiedAccessKey = UnidentifiedAccess.deriveAccessKeyFrom(theirProfileKey) 52 53 return UnidentifiedAccessPair(UnidentifiedAccess(selfUnidentifiedAccessKey, senderCertificate.serialized, false), UnidentifiedAccess(themUnidentifiedAccessKey, senderCertificate.serialized, false)).targetUnidentifiedAccess 54 } 55 56 fun encryptedTextMessage(now: Long, message: String = "Test body message"): EnvelopeContent { 57 val content = Content.Builder().apply { 58 dataMessage( 59 DataMessage.Builder().buildWith { 60 body = message 61 timestamp = now 62 } 63 ) 64 } 65 return EnvelopeContent.encrypted(content.build(), ContentHint.RESENDABLE, Optional.empty()) 66 } 67 68 fun OutgoingPushMessage.toEnvelope(timestamp: Long, destination: ServiceId): Envelope { 69 return Envelope.Builder() 70 .type(Envelope.Type.fromValue(this.type)) 71 .sourceDevice(1) 72 .timestamp(timestamp) 73 .serverTimestamp(timestamp + 1) 74 .destinationServiceId(destination.toString()) 75 .serverGuid(UUID.randomUUID().toString()) 76 .content(Base64.decode(this.content).toByteString()) 77 .urgent(true) 78 .story(false) 79 .build() 80 } 81}