Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3c359caa authored by Bo Zhu's avatar Bo Zhu Committed by Android (Google) Code Review
Browse files

Merge "Replace the native scrypt in SyntheticPasswordManager by...

Merge "Replace the native scrypt in SyntheticPasswordManager by android.security.Scrypt (try this again)"
parents c02acadd f2c9934c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.hardware.weaver.V1_0.WeaverStatus;
import android.os.RemoteException;
import android.os.UserManager;
import android.security.GateKeeper;
import android.security.Scrypt;
import android.service.gatekeeper.GateKeeperResponse;
import android.service.gatekeeper.IGateKeeperService;
import android.util.ArrayMap;
@@ -1173,11 +1174,10 @@ public class SyntheticPasswordManager {
    }

    protected byte[] scrypt(String password, byte[] salt, int N, int r, int p, int outLen) {
        return nativeScrypt(password.getBytes(), salt, N, r, p, outLen);
        return new Scrypt().scrypt(password.getBytes(), salt, N, r, p, outLen);
    }

    native long nativeSidFromPasswordHandle(byte[] handle);
    native byte[] nativeScrypt(byte[] password, byte[] salt, int N, int r, int p, int outLen);

    protected static ArrayList<Byte> toByteArrayList(byte[] data) {
        ArrayList<Byte> result = new ArrayList<Byte>(data.length);
+0 −1
Original line number Diff line number Diff line
@@ -126,7 +126,6 @@ cc_defaults {

    static_libs: [
        "android.hardware.broadcastradio@common-utils-1x-lib",
        "libscrypt_static",
    ],

    product_variables: {
+0 −33
Original line number Diff line number Diff line
@@ -27,10 +27,6 @@
#include <gatekeeper/password_handle.h>


extern "C" {
#include "crypto_scrypt.h"
}

namespace android {

static jlong android_server_SyntheticPasswordManager_nativeSidFromPasswordHandle(JNIEnv* env, jobject, jbyteArray handleArray) {
@@ -48,38 +44,9 @@ static jlong android_server_SyntheticPasswordManager_nativeSidFromPasswordHandle
    }
}

static jbyteArray android_server_SyntheticPasswordManager_nativeScrypt(JNIEnv* env, jobject, jbyteArray password, jbyteArray salt, jint N, jint r, jint p, jint outLen) {
    if (!password || !salt) {
        return NULL;
    }

    int passwordLen = env->GetArrayLength(password);
    int saltLen = env->GetArrayLength(salt);
    jbyteArray ret = env->NewByteArray(outLen);

    jbyte* passwordPtr = (jbyte*)env->GetByteArrayElements(password, NULL);
    jbyte* saltPtr = (jbyte*)env->GetByteArrayElements(salt, NULL);
    jbyte* retPtr = (jbyte*)env->GetByteArrayElements(ret, NULL);

    int rc = crypto_scrypt((const uint8_t *)passwordPtr, passwordLen,
                       (const uint8_t *)saltPtr, saltLen, N, r, p, (uint8_t *)retPtr,
                       outLen);
    env->ReleaseByteArrayElements(password, passwordPtr, JNI_ABORT);
    env->ReleaseByteArrayElements(salt, saltPtr, JNI_ABORT);
    env->ReleaseByteArrayElements(ret, retPtr, 0);

    if (!rc) {
        return ret;
    } else {
        SLOGE("scrypt failed");
        return NULL;
    }
}

static const JNINativeMethod sMethods[] = {
     /* name, signature, funcPtr */
    {"nativeSidFromPasswordHandle", "([B)J", (void*)android_server_SyntheticPasswordManager_nativeSidFromPasswordHandle},
    {"nativeScrypt", "([B[BIIII)[B", (void*)android_server_SyntheticPasswordManager_nativeScrypt},
};

int register_android_server_SyntheticPasswordManager(JNIEnv* env) {