Skip to content

Instantly share code, notes, and snippets.

View sanya5791's full-sized avatar

Alex Khutornyi sanya5791

View GitHub Profile
@sanya5791
sanya5791 / MainActivity.kt
Created January 20, 2022 03:24
Analytics Usage
package org.berendeev.turboanalytics
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import org.berendeev.turboanalytics.databinding.ActivityMainBinding
import java.time.LocalDate
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
@sanya5791
sanya5791 / KochavaSender.kt
Created January 20, 2022 03:23
Sender Sample
package org.berendeev.turboanalytics
import timber.log.Timber
import kotlin.reflect.full.findAnnotation
import kotlin.reflect.full.hasAnnotation
import kotlin.reflect.full.memberProperties
class KochavaSender : Sender {
override fun send(event: AnalyticsEvent) {
val hasEventName = event::class.hasAnnotation<EventName>()
@sanya5791
sanya5791 / AnalyticsReporterImpl.kt
Created January 20, 2022 03:22
AnalyticsReporter
package org.berendeev.turboanalytics
class AnalyticsReporterImpl(
private val firebaseSender: FirebaseSender,
private val kochavaSender: KochavaSender,
) : AnalyticsReporter {
override fun send(event: AnalyticsEvent) {
when (event.system) {
AnalyticsSystem.FIREBASE -> firebaseSender.send(event)
@sanya5791
sanya5791 / Analytics.kt
Created January 20, 2022 03:21
Analytics Gears
package org.berendeev.turboanalytics
@Target(AnnotationTarget.PROPERTY)
@Retention(AnnotationRetention.RUNTIME)
annotation class EventProperty(val key: String)
@Target(AnnotationTarget.CLASS)
@Retention(AnnotationRetention.RUNTIME)
annotation class EventName(val name: String)
fun signData(inputStr: String): String {
val privateKeyEntry = getPrivateKey()
val s = Signature.getInstance(SIGNATURE_SHA256withRSA)
s.initSign(privateKeyEntry.privateKey)
s.update(inputStr.toByteArray())
val signatureBytes = s.sign()
val signatureString = Base64.encodeToString(signatureBytes, Base64.DEFAULT)
@sanya5791
sanya5791 / DataSignatureVerifier.kt
Last active January 2, 2019 11:51
getPrivateKey()
fun getPrivateKey(): KeyStore.PrivateKeyEntry? {
val ks = KeyStore.getInstance("AndroidKeyStore")
ks.load(null)
val entry = ks.getEntry(ALIAS_VERIFY_SIGNATURE, null)
if (entry !is KeyStore.PrivateKeyEntry) {
return null
}
return entry
fun verifyData(input: String, signatureStr: String?): Boolean {
val privateKeyEntry = getPrivateKey() ?: return false
val signature = Signature.getInstance(SIGNATURE_SHA256withRSA)
signature.initVerify(privateKeyEntry.certificate)
signature.update(input.toByteArray())
val signatureBytes = Base64.decode(signatureStr, Base64.DEFAULT)
return signature.verify(signatureBytes)
}
@sanya5791
sanya5791 / DataSignatureVerifier.kt
Last active December 21, 2018 11:34
generateKeyPair
fun generateKeyPair(spec: AlgorithmParameterSpec) {
val kpGenerator = KeyPairGenerator
.getInstance(TYPE_RSA, ANDROID_KEYSTORE_PROVIDER)
kpGenerator.initialize(spec)
kpGenerator.generateKeyPair()
}
@sanya5791
sanya5791 / DataSignatureVerifier.kt
Created December 20, 2018 16:19
getRsaKeySpecM()
@RequiresApi(Build.VERSION_CODES.M)
private fun getRsaKeySpecM(start: Date, end: Date)=
KeyGenParameterSpec.Builder(ALIAS_VERIFY_SIGNATURE, KeyProperties.PURPOSE_SIGN)
.setCertificateSubject(X500Principal("CN=$ALIAS_VERIFY_SIGNATURE"))
.setDigests(KeyProperties.DIGEST_SHA256)
.setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
.setCertificateSerialNumber(BigInteger.valueOf(1337))
.setCertificateNotBefore(start)
.setCertificateNotAfter(end)
.build()
@sanya5791
sanya5791 / DataSignatureVerifier.kt
Last active December 20, 2018 16:10
getRsaKeySpecPreM()
fun getRsaKeySpecPreM(start: Date, end: Date) =
KeyPairGeneratorSpec.Builder(context!!)
.setAlias(ALIAS_VERIFY_SIGNATURE)
.setSubject(X500Principal("CN=$ALIAS_VERIFY_SIGNATURE"))
.setSerialNumber(BigInteger.valueOf(1337))
.setStartDate(start)
.setEndDate(end)
.build()