You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
273 lines
5.9 KiB
273 lines
5.9 KiB
#!/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
|
|
|