274 lines
5.9 KiB
Text
274 lines
5.9 KiB
Text
|
#!/bin/bash
|
||
|
#
|
||
|
# Copyright 2011, The Android Open Source Project
|
||
|
#
|
||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
# you may not use this file except in compliance with the License.
|
||
|
# You may obtain a copy of the License at
|
||
|
#
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
|
||
|
set -e
|
||
|
|
||
|
prefix=$0
|
||
|
log_file=$prefix.log
|
||
|
baseline_file=$prefix.baseline
|
||
|
|
||
|
function cleanup_output() {
|
||
|
rm -f $log_file
|
||
|
rm -f $baseline_file
|
||
|
}
|
||
|
|
||
|
function log() {
|
||
|
echo "$@"
|
||
|
append $log_file \# "$@"
|
||
|
append $baseline_file \# "$@"
|
||
|
}
|
||
|
|
||
|
function expect() {
|
||
|
append $baseline_file "$@"
|
||
|
}
|
||
|
|
||
|
function append() {
|
||
|
declare -r file=$1
|
||
|
shift
|
||
|
echo "$@" >> $file
|
||
|
}
|
||
|
|
||
|
function run() {
|
||
|
# strip out carriage returns from adb
|
||
|
# strip out date/time from ls -l
|
||
|
"$@" | tr --delete '\r' | sed -E 's/[0-9]{4}-[0-9]{2}-[0-9]{2} +[0-9]{1,2}:[0-9]{2} //' >> $log_file
|
||
|
}
|
||
|
|
||
|
function keystore() {
|
||
|
declare -r user=$1
|
||
|
shift
|
||
|
run adb shell su $user keystore_cli "$@"
|
||
|
}
|
||
|
|
||
|
function list_keystore_directory() {
|
||
|
run adb shell ls -al /data/misc/keystore
|
||
|
}
|
||
|
|
||
|
function compare() {
|
||
|
log "comparing $baseline_file and $log_file"
|
||
|
diff $baseline_file $log_file || (log $tag FAILED && exit 1)
|
||
|
}
|
||
|
|
||
|
function test_basic() {
|
||
|
|
||
|
#
|
||
|
# reset
|
||
|
#
|
||
|
log "reset keystore as system user"
|
||
|
keystore system r
|
||
|
expect "1 No error"
|
||
|
list_keystore_directory
|
||
|
|
||
|
#
|
||
|
# basic tests as system/root
|
||
|
#
|
||
|
log "root does not have permission to run test"
|
||
|
keystore root t
|
||
|
expect "6 Permission denied"
|
||
|
|
||
|
log "but system user does"
|
||
|
keystore system t
|
||
|
expect "3 Uninitialized"
|
||
|
list_keystore_directory
|
||
|
|
||
|
log "password is now bar"
|
||
|
keystore system p bar
|
||
|
expect "1 No error"
|
||
|
list_keystore_directory
|
||
|
expect "-rw------- keystore keystore 84 .masterkey"
|
||
|
|
||
|
log "no error implies initialized and unlocked"
|
||
|
keystore system t
|
||
|
expect "1 No error"
|
||
|
|
||
|
log "saw with no argument"
|
||
|
keystore system s
|
||
|
expect "5 Protocol error"
|
||
|
|
||
|
log "saw nothing"
|
||
|
keystore system s ""
|
||
|
expect "1 No error"
|
||
|
|
||
|
log "add key baz"
|
||
|
keystore system i baz quux
|
||
|
expect "1 No error"
|
||
|
|
||
|
log "1000 is uid of system"
|
||
|
list_keystore_directory
|
||
|
expect "-rw------- keystore keystore 84 .masterkey"
|
||
|
expect "-rw------- keystore keystore 52 1000_baz"
|
||
|
|
||
|
log "saw baz"
|
||
|
keystore system s ""
|
||
|
expect "1 No error"
|
||
|
expect "baz"
|
||
|
|
||
|
log "get baz"
|
||
|
keystore system g baz
|
||
|
expect "1 No error"
|
||
|
expect "quux"
|
||
|
|
||
|
log "root can read system user keys (as can wifi or vpn users)"
|
||
|
keystore root g baz
|
||
|
expect "1 No error"
|
||
|
expect "quux"
|
||
|
|
||
|
#
|
||
|
# app user tests
|
||
|
#
|
||
|
|
||
|
# app_0 has uid 10000, as seen below
|
||
|
log "other uses cannot see the system keys"
|
||
|
keystore app_0 g baz
|
||
|
expect "7 Key not found"
|
||
|
|
||
|
log "app user cannot use reset, password, lock, unlock"
|
||
|
keystore app_0 r
|
||
|
expect "6 Permission denied"
|
||
|
keystore app_0 p
|
||
|
expect "6 Permission denied"
|
||
|
keystore app_0 l
|
||
|
expect "6 Permission denied"
|
||
|
keystore app_0 u
|
||
|
expect "6 Permission denied"
|
||
|
|
||
|
log "install app_0 key"
|
||
|
keystore app_0 i 0x deadbeef
|
||
|
expect 1 No error
|
||
|
list_keystore_directory
|
||
|
expect "-rw------- keystore keystore 84 .masterkey"
|
||
|
expect "-rw------- keystore keystore 52 10000_0x"
|
||
|
expect "-rw------- keystore keystore 52 1000_baz"
|
||
|
|
||
|
log "get with no argument"
|
||
|
keystore app_0 g
|
||
|
expect "5 Protocol error"
|
||
|
|
||
|
keystore app_0 g 0x
|
||
|
expect "1 No error"
|
||
|
expect "deadbeef"
|
||
|
|
||
|
keystore app_0 i fred barney
|
||
|
expect "1 No error"
|
||
|
|
||
|
keystore app_0 s ""
|
||
|
expect "1 No error"
|
||
|
expect "0x"
|
||
|
expect "fred"
|
||
|
|
||
|
log "note that saw returns the suffix of prefix matches"
|
||
|
keystore app_0 s fr # fred
|
||
|
expect "1 No error"
|
||
|
expect "ed" # fred
|
||
|
|
||
|
#
|
||
|
# lock tests
|
||
|
#
|
||
|
log "lock the store as system"
|
||
|
keystore system l
|
||
|
expect "1 No error"
|
||
|
keystore system t
|
||
|
expect "2 Locked"
|
||
|
|
||
|
log "saw works while locked"
|
||
|
keystore app_0 s ""
|
||
|
expect "1 No error"
|
||
|
expect "0x"
|
||
|
expect "fred"
|
||
|
|
||
|
log "...but cannot read keys..."
|
||
|
keystore app_0 g 0x
|
||
|
expect "2 Locked"
|
||
|
|
||
|
log "...but they can be deleted."
|
||
|
keystore app_0 e 0x
|
||
|
expect "1 No error"
|
||
|
keystore app_0 d 0x
|
||
|
expect "1 No error"
|
||
|
keystore app_0 e 0x
|
||
|
expect "7 Key not found"
|
||
|
|
||
|
#
|
||
|
# password
|
||
|
#
|
||
|
log "wrong password"
|
||
|
keystore system u foo
|
||
|
expect "13 Wrong password (4 tries left)"
|
||
|
log "right password"
|
||
|
keystore system u bar
|
||
|
expect "1 No error"
|
||
|
|
||
|
log "make the password foo"
|
||
|
keystore system p foo
|
||
|
expect "1 No error"
|
||
|
|
||
|
#
|
||
|
# final reset
|
||
|
#
|
||
|
log "reset wipes everything for all users"
|
||
|
keystore system r
|
||
|
expect "1 No error"
|
||
|
list_keystore_directory
|
||
|
|
||
|
keystore system t
|
||
|
expect "3 Uninitialized"
|
||
|
|
||
|
}
|
||
|
|
||
|
function test_4599735() {
|
||
|
# http://b/4599735
|
||
|
log "start regression test for b/4599735"
|
||
|
keystore system r
|
||
|
expect "1 No error"
|
||
|
|
||
|
keystore system p foo
|
||
|
expect "1 No error"
|
||
|
|
||
|
keystore system i baz quux
|
||
|
expect "1 No error"
|
||
|
|
||
|
keystore root g baz
|
||
|
expect "1 No error"
|
||
|
expect "quux"
|
||
|
|
||
|
keystore system l
|
||
|
expect "1 No error"
|
||
|
|
||
|
keystore system p foo
|
||
|
expect "1 No error"
|
||
|
|
||
|
log "after unlock, regression led to result of '8 Value corrupted'"
|
||
|
keystore root g baz
|
||
|
expect "1 No error"
|
||
|
expect "quux"
|
||
|
|
||
|
keystore system r
|
||
|
expect "1 No error"
|
||
|
log "end regression test for b/4599735"
|
||
|
}
|
||
|
|
||
|
function main() {
|
||
|
cleanup_output
|
||
|
log $tag START
|
||
|
test_basic
|
||
|
test_4599735
|
||
|
compare
|
||
|
log $tag PASSED
|
||
|
cleanup_output
|
||
|
}
|
||
|
|
||
|
main
|