From 4f5b6bf351b8dfeab286ecd144cf859d614632fd Mon Sep 17 00:00:00 2001 From: Hugo Pointcheval Date: Wed, 29 Apr 2020 22:50:42 +0200 Subject: [PATCH] Add sha1 pbkdf2 on Android --- .../pointcheval/native_crypto/NativeCryptoPlugin.kt | 12 ++++++++---- example/android/build.gradle | 2 +- .../android/gradle/wrapper/gradle-wrapper.properties | 4 ++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/android/src/main/kotlin/fr/pointcheval/native_crypto/NativeCryptoPlugin.kt b/android/src/main/kotlin/fr/pointcheval/native_crypto/NativeCryptoPlugin.kt index 999c606..b6271dc 100644 --- a/android/src/main/kotlin/fr/pointcheval/native_crypto/NativeCryptoPlugin.kt +++ b/android/src/main/kotlin/fr/pointcheval/native_crypto/NativeCryptoPlugin.kt @@ -49,8 +49,9 @@ public class NativeCryptoPlugin : FlutterPlugin, MethodCallHandler { val salt = call.argument("salt") val keyLength = call.argument("keyLength") val iteration = call.argument("iteration") + val algorithm = call.argument("algorithm") - val key = pbkdf2(password!!, salt!!, keyLength!!, iteration!!) + val key = pbkdf2(password!!, salt!!, keyLength!!, iteration!!, algorithm!!) if (key.isNotEmpty()) { result.success(key) @@ -109,13 +110,16 @@ public class NativeCryptoPlugin : FlutterPlugin, MethodCallHandler { return md.digest(obj) } - private fun pbkdf2(password : String, salt : String, keyLength : Int, iteration : Int) : ByteArray { + private fun pbkdf2(password : String, salt : String, keyLength : Int, iteration : Int, algorithm : String) : ByteArray { val chars: CharArray = password.toCharArray() val spec = PBEKeySpec(chars, salt.toByteArray(), iteration, keyLength * 8) - val skf: SecretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256") + val skf: SecretKeyFactory = if (algorithm == "sha1") { + SecretKeyFactory.getInstance("PBKDF2withHmacSHA1") + } else { + SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256") + } return skf.generateSecret(spec).encoded - } private fun symKeygen(keySize : Int): ByteArray { diff --git a/example/android/build.gradle b/example/android/build.gradle index 3100ad2..9afae7f 100644 --- a/example/android/build.gradle +++ b/example/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.0' + classpath 'com.android.tools.build:gradle:3.6.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties index 296b146..ebb78da 100644 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ b/example/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Jun 23 08:50:38 CEST 2017 +#Wed Apr 29 22:33:58 CEST 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip