274 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			274 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/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
 |