MockScrypt.java revision 76973437e9cb36eb60fb2a374366713307688136
176973437e9cb36eb60fb2a374366713307688136Bo Zhu/* 276973437e9cb36eb60fb2a374366713307688136Bo Zhu * Copyright (C) 2018 The Android Open Source Project 376973437e9cb36eb60fb2a374366713307688136Bo Zhu * 476973437e9cb36eb60fb2a374366713307688136Bo Zhu * Licensed under the Apache License, Version 2.0 (the "License"); 576973437e9cb36eb60fb2a374366713307688136Bo Zhu * you may not use this file except in compliance with the License. 676973437e9cb36eb60fb2a374366713307688136Bo Zhu * You may obtain a copy of the License at 776973437e9cb36eb60fb2a374366713307688136Bo Zhu * 876973437e9cb36eb60fb2a374366713307688136Bo Zhu * http://www.apache.org/licenses/LICENSE-2.0 976973437e9cb36eb60fb2a374366713307688136Bo Zhu * 1076973437e9cb36eb60fb2a374366713307688136Bo Zhu * Unless required by applicable law or agreed to in writing, software 1176973437e9cb36eb60fb2a374366713307688136Bo Zhu * distributed under the License is distributed on an "AS IS" BASIS, 1276973437e9cb36eb60fb2a374366713307688136Bo Zhu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1376973437e9cb36eb60fb2a374366713307688136Bo Zhu * See the License for the specific language governing permissions and 1476973437e9cb36eb60fb2a374366713307688136Bo Zhu * limitations under the License. 1576973437e9cb36eb60fb2a374366713307688136Bo Zhu */ 1676973437e9cb36eb60fb2a374366713307688136Bo Zhu 1776973437e9cb36eb60fb2a374366713307688136Bo Zhupackage com.android.server.locksettings.recoverablekeystore; 1876973437e9cb36eb60fb2a374366713307688136Bo Zhu 1976973437e9cb36eb60fb2a374366713307688136Bo Zhuimport static org.junit.Assert.assertEquals; 2076973437e9cb36eb60fb2a374366713307688136Bo Zhu 2176973437e9cb36eb60fb2a374366713307688136Bo Zhuimport android.security.Scrypt; 2276973437e9cb36eb60fb2a374366713307688136Bo Zhu 2376973437e9cb36eb60fb2a374366713307688136Bo Zhuimport java.nio.ByteBuffer; 2476973437e9cb36eb60fb2a374366713307688136Bo Zhuimport java.nio.ByteOrder; 2576973437e9cb36eb60fb2a374366713307688136Bo Zhuimport java.security.MessageDigest; 2676973437e9cb36eb60fb2a374366713307688136Bo Zhuimport java.security.NoSuchAlgorithmException; 2776973437e9cb36eb60fb2a374366713307688136Bo Zhu 2876973437e9cb36eb60fb2a374366713307688136Bo Zhupublic class MockScrypt extends Scrypt { 2976973437e9cb36eb60fb2a374366713307688136Bo Zhu 3076973437e9cb36eb60fb2a374366713307688136Bo Zhu @Override 3176973437e9cb36eb60fb2a374366713307688136Bo Zhu public byte[] scrypt(byte[] password, byte[] salt, int n, int r, int p, int outLen) { 3276973437e9cb36eb60fb2a374366713307688136Bo Zhu assertEquals(32, outLen); 3376973437e9cb36eb60fb2a374366713307688136Bo Zhu 3476973437e9cb36eb60fb2a374366713307688136Bo Zhu ByteBuffer byteBuffer = ByteBuffer.allocate( 3576973437e9cb36eb60fb2a374366713307688136Bo Zhu password.length + salt.length + Integer.BYTES * 6); 3676973437e9cb36eb60fb2a374366713307688136Bo Zhu byteBuffer.order(ByteOrder.LITTLE_ENDIAN); 3776973437e9cb36eb60fb2a374366713307688136Bo Zhu byteBuffer.putInt(password.length); 3876973437e9cb36eb60fb2a374366713307688136Bo Zhu byteBuffer.put(password); 3976973437e9cb36eb60fb2a374366713307688136Bo Zhu byteBuffer.putInt(salt.length); 4076973437e9cb36eb60fb2a374366713307688136Bo Zhu byteBuffer.put(salt); 4176973437e9cb36eb60fb2a374366713307688136Bo Zhu byteBuffer.putInt(n); 4276973437e9cb36eb60fb2a374366713307688136Bo Zhu byteBuffer.putInt(r); 4376973437e9cb36eb60fb2a374366713307688136Bo Zhu byteBuffer.putInt(p); 4476973437e9cb36eb60fb2a374366713307688136Bo Zhu byteBuffer.putInt(outLen); 4576973437e9cb36eb60fb2a374366713307688136Bo Zhu 4676973437e9cb36eb60fb2a374366713307688136Bo Zhu try { 4776973437e9cb36eb60fb2a374366713307688136Bo Zhu return MessageDigest.getInstance("SHA-256").digest(byteBuffer.array()); 4876973437e9cb36eb60fb2a374366713307688136Bo Zhu } catch (NoSuchAlgorithmException e) { 4976973437e9cb36eb60fb2a374366713307688136Bo Zhu // Should never happen 5076973437e9cb36eb60fb2a374366713307688136Bo Zhu throw new RuntimeException(e); 5176973437e9cb36eb60fb2a374366713307688136Bo Zhu } 5276973437e9cb36eb60fb2a374366713307688136Bo Zhu } 5376973437e9cb36eb60fb2a374366713307688136Bo Zhu} 54