Browse Source

Remember nonce

connman
adityapk00 5 years ago
parent
commit
f7586b4563
  1. 1
      app/src/main/AndroidManifest.xml
  2. 30
      app/src/main/java/com/adityapk/zcash/zqwandroid/DataModel.kt
  3. 2
      app/src/main/java/com/adityapk/zcash/zqwandroid/MainActivity.kt
  4. 18
      app/src/main/java/com/adityapk/zcash/zqwandroid/ZQWApp.kt

1
app/src/main/AndroidManifest.xml

@ -7,6 +7,7 @@
<application
tools:replace="android:allowBackup"
android:name="com.adityapk.zcash.zqwandroid.ZQWApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"

30
app/src/main/java/com/adityapk/zcash/zqwandroid/DataModel.kt

@ -9,7 +9,6 @@ import com.beust.klaxon.json
import okhttp3.WebSocket
import org.libsodium.jni.NaCl
import org.libsodium.jni.Sodium
import java.math.BigInteger
object DataModel {
@ -28,7 +27,6 @@ object DataModel {
}
var secret : ByteArray? = null
var nonce : ByteArray? = null
fun ByteArray.toHexString() : String {
return (joinToString("") { String.format("%02x", it) })
@ -39,13 +37,12 @@ object DataModel {
return ByteArray(byteSize) { s.substring(it * 2, it * 2 + 2).toInt(16).toByte() }
}
fun init(context: Context) {
fun init() {
val sodium = NaCl.sodium()
secret = ByteArray(Sodium.crypto_hash_sha256_bytes())
Sodium.crypto_hash_sha256(secret, "secret".toByteArray(), "secret".toByteArray().size)
nonce = ByteArray(Sodium.crypto_secretbox_noncebytes())
/*
val message = "test".toByteArray()
val noncelen = Sodium.crypto_secretbox_noncebytes().toLong()
@ -137,7 +134,6 @@ object DataModel {
val msg = s.toByteArray()
check(secret != null)
check(nonce != null)
val encrypted = ByteArray(msg.size + Sodium.crypto_secretbox_macbytes())
@ -149,25 +145,31 @@ object DataModel {
println("Encryption failed")
}
val j = json { obj("nonce" to localNonce?.toHexString(),
val j = json { obj("nonce" to localNonce.toHexString(),
("payload" to encrypted.toHexString()))}
return j.toJsonString()
}
fun incAndGetLocalNonce() : ByteArray {
doInc(nonce!!)
doInc(nonce!!)
val settings = ZQWApp.appContext!!.getSharedPreferences("Nonce", 0)
val nonceHex = settings.getString("localnonce", "00".repeat(Sodium.crypto_secretbox_noncebytes()))
return nonce!!
}
val nonce = nonceHex!!.hexStringToByteArray(Sodium.crypto_secretbox_noncebytes())
// sodium_increment assumes little endian, but we are big endian
nonce.reverse()
Sodium.sodium_increment(nonce, nonce.size)
Sodium.sodium_increment(nonce, nonce.size)
nonce.reverse()
fun doInc(ba : ByteArray) {
ba.reverse()
Sodium.sodium_increment(ba, ba.size)
ba.reverse()
val editor = settings.edit()
editor.putString("localnonce", nonce.toHexString())
editor.apply()
return nonce
}
private val TAG = "DataModel"
}

2
app/src/main/java/com/adityapk/zcash/zqwandroid/MainActivity.kt

@ -38,7 +38,7 @@ class MainActivity : AppCompatActivity(), TransactionItemFragment.OnFragmentInte
// When creating, clear all the data first
setMainStatus("")
DataModel.init(applicationContext)
DataModel.init()
btnConnect.setOnClickListener {
val intent = Intent(this, QrReaderActivity::class.java)

18
app/src/main/java/com/adityapk/zcash/zqwandroid/ZQWApp.kt

@ -0,0 +1,18 @@
package com.adityapk.zcash.zqwandroid
import android.app.Application
import android.content.Context
class ZQWApp : Application() {
override fun onCreate() {
super.onCreate()
ZQWApp.appContext = applicationContext
}
companion object {
var appContext: Context? = null
private set
}
}
Loading…
Cancel
Save