16b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root/*
26b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root * Copyright (C) 2012 The Android Open Source Project
36b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root *
46b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root * Licensed under the Apache License, Version 2.0 (the "License");
56b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root * you may not use this file except in compliance with the License.
66b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root * You may obtain a copy of the License at
76b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root *
86b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root *      http://www.apache.org/licenses/LICENSE-2.0
96b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root *
106b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root * Unless required by applicable law or agreed to in writing, software
116b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root * distributed under the License is distributed on an "AS IS" BASIS,
126b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root * See the License for the specific language governing permissions and
146b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root * limitations under the License.
156b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root */
166b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
176b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Rootpackage android.security;
186b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
196b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Rootimport android.os.Binder;
206b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Rootimport android.os.IBinder;
216b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Rootimport android.os.IInterface;
226b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Rootimport android.os.Parcel;
236b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Rootimport android.os.RemoteException;
246b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
256b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root/**
266b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root * This must be kept manually in sync with system/security/keystore until AIDL
276b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root * can generate both Java and C++ bindings.
286b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root *
296b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root * @hide
306b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root */
316b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Rootpublic interface IKeystoreService extends IInterface {
326b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public static abstract class Stub extends Binder implements IKeystoreService {
336b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        private static class Proxy implements IKeystoreService {
346b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            private final IBinder mRemote;
356b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
366b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            Proxy(IBinder remote) {
376b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                mRemote = remote;
386b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
396b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
406b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public IBinder asBinder() {
416b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return mRemote;
426b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
436b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
446b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public String getInterfaceDescriptor() {
456b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return DESCRIPTOR;
466b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
476b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
486b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public int test() throws RemoteException {
496b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
506b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
516b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
526b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
536b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
546b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_test, _data, _reply, 0);
556b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
566b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
576b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
586b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
596b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
606b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
616b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
626b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
636b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
646b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public byte[] get(String name) throws RemoteException {
656b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
666b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
676b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                byte[] _result;
686b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
696b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
706b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
716b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_get, _data, _reply, 0);
726b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
736b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.createByteArray();
746b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
756b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
766b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
776b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
786b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
796b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
806b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
81a3788b00bb221e20abdd42f747d2af419e0a088cKenny Root            public int insert(String name, byte[] item, int uid, int flags) throws RemoteException {
826b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
836b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
846b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
856b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
866b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
876b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
886b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeByteArray(item);
89e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root                    _data.writeInt(uid);
90a3788b00bb221e20abdd42f747d2af419e0a088cKenny Root                    _data.writeInt(flags);
916b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_insert, _data, _reply, 0);
926b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
936b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
946b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
956b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
966b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
976b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
986b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
996b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
1006b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
101e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root            public int del(String name, int uid) throws RemoteException {
1026b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
1036b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
1046b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
1056b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
1066b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
1076b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
108e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root                    _data.writeInt(uid);
1096b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_del, _data, _reply, 0);
1106b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
1116b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
1126b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
1136b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
1146b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
1156b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
1166b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
1176b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
1186b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
119e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root            public int exist(String name, int uid) throws RemoteException {
1206b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
1216b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
1226b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
1236b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
1246b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
1256b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
126e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root                    _data.writeInt(uid);
1276b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_exist, _data, _reply, 0);
1286b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
1296b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
1306b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
1316b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
1326b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
1336b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
1346b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
1356b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
1366b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
137e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root            public String[] saw(String name, int uid) throws RemoteException {
1386b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
1396b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
1406b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                String[] _result;
1416b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
1426b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
1436b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
144e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root                    _data.writeInt(uid);
1456b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_saw, _data, _reply, 0);
1466b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
1476b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    int size = _reply.readInt();
1486b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = new String[size];
1496b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    for (int i = 0; i < size; i++) {
1506b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                        _result[i] = _reply.readString();
1516b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    }
15278ad849163a7b01073b46fbd7d818392720005d1Kenny Root                    int _ret = _reply.readInt();
15378ad849163a7b01073b46fbd7d818392720005d1Kenny Root                    if (_ret != 1) {
15478ad849163a7b01073b46fbd7d818392720005d1Kenny Root                        return null;
15578ad849163a7b01073b46fbd7d818392720005d1Kenny Root                    }
1566b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
1576b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
1586b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
1596b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
1606b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
1616b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
1626b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
1636b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            @Override
1646b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public int reset() throws RemoteException {
1656b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
1666b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
1676b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
1686b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
1696b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
1706b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_reset, _data, _reply, 0);
1716b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
1726b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
1736b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
1746b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
1756b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
1766b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
1776b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
1786b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
1796b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
1806b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public int password(String password) throws RemoteException {
1816b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
1826b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
1836b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
1846b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
1856b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
1866b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(password);
1876b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_password, _data, _reply, 0);
1886b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
1896b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
1906b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
1916b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
1926b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
1936b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
1946b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
1956b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
1966b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
1976b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public int lock() throws RemoteException {
1986b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
1996b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
2006b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
2016b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
2026b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
2036b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_lock, _data, _reply, 0);
2046b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
2056b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
2066b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
2076b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
2086b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
2096b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
2106b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
2116b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
2126b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
2136b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public int unlock(String password) throws RemoteException {
2146b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
2156b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
2166b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
2176b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
2186b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
2196b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(password);
2206b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_unlock, _data, _reply, 0);
2216b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
2226b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
2236b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
2246b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
2256b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
2266b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
2276b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
2286b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
2296b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
2306b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            @Override
2316b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public int zero() throws RemoteException {
2326b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
2336b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
2346b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
2356b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
2366b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
2376b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_zero, _data, _reply, 0);
2386b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
2396b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
2406b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
2416b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
2426b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
2436b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
2446b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
2456b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
2466b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
247a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root            public int generate(String name, int uid, int keyType, int keySize, int flags,
248a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root                    byte[][] args) throws RemoteException {
2496b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
2506b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
2516b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
2526b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
2536b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
2546b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
255e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root                    _data.writeInt(uid);
256a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root                    _data.writeInt(keyType);
257a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root                    _data.writeInt(keySize);
258a3788b00bb221e20abdd42f747d2af419e0a088cKenny Root                    _data.writeInt(flags);
259a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root                    if (args == null) {
260a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root                        _data.writeInt(0);
261a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root                    } else {
262a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root                        _data.writeInt(args.length);
263a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root                        for (int i = 0; i < args.length; i++) {
264a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root                            _data.writeByteArray(args[i]);
265a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root                        }
266a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root                    }
2676b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_generate, _data, _reply, 0);
2686b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
2696b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
2706b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
2716b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
2726b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
2736b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
2746b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
2756b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
2766b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
277a3788b00bb221e20abdd42f747d2af419e0a088cKenny Root            public int import_key(String name, byte[] data, int uid, int flags)
278a3788b00bb221e20abdd42f747d2af419e0a088cKenny Root                    throws RemoteException {
2796b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
2806b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
2816b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
2826b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
2836b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
2846b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
2856b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeByteArray(data);
286e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root                    _data.writeInt(uid);
287a3788b00bb221e20abdd42f747d2af419e0a088cKenny Root                    _data.writeInt(flags);
2886b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_import, _data, _reply, 0);
2896b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
2906b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
2916b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
2926b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
2936b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
2946b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
2956b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
2966b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
2976b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
2986b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public byte[] sign(String name, byte[] data) throws RemoteException {
2996b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
3006b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
3016b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                byte[] _result;
3026b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
3036b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
3046b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
3056b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeByteArray(data);
3066b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_sign, _data, _reply, 0);
3076b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
3086b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.createByteArray();
3096b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
3106b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
3116b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
3126b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
3136b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
3146b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
3156b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
3166b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public int verify(String name, byte[] data, byte[] signature) throws RemoteException {
3176b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
3186b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
3196b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
3206b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
3216b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
3226b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
3236b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeByteArray(data);
3246b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeByteArray(signature);
3256b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_verify, _data, _reply, 0);
3266b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
3276b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
3286b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
3296b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
3306b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
3316b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
3326b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
3336b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
3346b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
3356b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public byte[] get_pubkey(String name) throws RemoteException {
3366b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
3376b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
3386b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                byte[] _result;
3396b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
3406b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
3416b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
3426b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_get_pubkey, _data, _reply, 0);
3436b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
3446b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.createByteArray();
3456b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
3466b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
3476b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
3486b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
3496b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
3506b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
3516b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
352e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root            public int del_key(String name, int uid) throws RemoteException {
3536b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
3546b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
3556b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
3566b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
3576b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
3586b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
359e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root                    _data.writeInt(uid);
3606b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_del_key, _data, _reply, 0);
3616b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
3626b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
3636b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
3646b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
3656b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
3666b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
3676b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
3686b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
3696b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
3706b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public int grant(String name, int granteeUid) throws RemoteException {
3716b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
3726b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
3736b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
3746b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
3756b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
3766b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
3776b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInt(granteeUid);
3786b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_grant, _data, _reply, 0);
3796b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
3806b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
3816b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
3826b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
3836b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
3846b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
3856b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
3866b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
3876b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
3886b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public int ungrant(String name, int granteeUid) throws RemoteException {
3896b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
3906b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
3916b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                int _result;
3926b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
3936b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
3946b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
3956b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInt(granteeUid);
3966b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_ungrant, _data, _reply, 0);
3976b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
3986b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readInt();
3996b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
4006b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
4016b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
4026b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
4036b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
4046b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
4056b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
4066b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            @Override
4076b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            public long getmtime(String name) throws RemoteException {
4086b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _data = Parcel.obtain();
4096b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                Parcel _reply = Parcel.obtain();
4106b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                long _result;
4116b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                try {
4126b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
4136b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.writeString(name);
4146b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    mRemote.transact(Stub.TRANSACTION_getmtime, _data, _reply, 0);
4156b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.readException();
4166b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _result = _reply.readLong();
4176b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                } finally {
4186b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _reply.recycle();
4196b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    _data.recycle();
4206b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
4216b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return _result;
4226b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
423bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root
424bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root            @Override
4255f1d965f7d7e1df50981ffed8faa11fbcc17ca22Kenny Root            public int duplicate(String srcKey, int srcUid, String destKey, int destUid)
4265f1d965f7d7e1df50981ffed8faa11fbcc17ca22Kenny Root                    throws RemoteException {
427bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root                Parcel _data = Parcel.obtain();
428bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root                Parcel _reply = Parcel.obtain();
429bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root                int _result;
430bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root                try {
431bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
4325f1d965f7d7e1df50981ffed8faa11fbcc17ca22Kenny Root                    _data.writeString(srcKey);
4335f1d965f7d7e1df50981ffed8faa11fbcc17ca22Kenny Root                    _data.writeInt(srcUid);
4345f1d965f7d7e1df50981ffed8faa11fbcc17ca22Kenny Root                    _data.writeString(destKey);
4355f1d965f7d7e1df50981ffed8faa11fbcc17ca22Kenny Root                    _data.writeInt(destUid);
4365f1d965f7d7e1df50981ffed8faa11fbcc17ca22Kenny Root                    mRemote.transact(Stub.TRANSACTION_duplicate, _data, _reply, 0);
437bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root                    _reply.readException();
438bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root                    _result = _reply.readInt();
439bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root                } finally {
440bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root                    _reply.recycle();
441bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root                    _data.recycle();
442bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root                }
443bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root                return _result;
444bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root            }
4455cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root
4465cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root            @Override
447b91773bce1126d28a93f73fbef18f3a79245f24eKenny Root            public int is_hardware_backed(String keyType) throws RemoteException {
4485cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root                Parcel _data = Parcel.obtain();
4495cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root                Parcel _reply = Parcel.obtain();
4505cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root                int _result;
4515cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root                try {
4525cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
453b91773bce1126d28a93f73fbef18f3a79245f24eKenny Root                    _data.writeString(keyType);
4545cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root                    mRemote.transact(Stub.TRANSACTION_is_hardware_backed, _data, _reply, 0);
4555cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root                    _reply.readException();
4565cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root                    _result = _reply.readInt();
4575cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root                } finally {
4585cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root                    _reply.recycle();
4595cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root                    _data.recycle();
4605cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root                }
4615cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root                return _result;
4625cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root            }
463d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root
464d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root            @Override
465d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root            public int clear_uid(long uid) throws RemoteException {
466d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                Parcel _data = Parcel.obtain();
467d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                Parcel _reply = Parcel.obtain();
468d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                int _result;
469d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                try {
470d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                    _data.writeInterfaceToken(DESCRIPTOR);
471d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                    _data.writeLong(uid);
472d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                    mRemote.transact(Stub.TRANSACTION_clear_uid, _data, _reply, 0);
473d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                    _reply.readException();
474d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                    _result = _reply.readInt();
475d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                } finally {
476d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                    _reply.recycle();
477d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                    _data.recycle();
478d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                }
479d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root                return _result;
480d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root            }
481f0246a8a14d69680d1776620e75a485cf963e574Robin Lee
482f0246a8a14d69680d1776620e75a485cf963e574Robin Lee            public int reset_uid(int uid) throws RemoteException {
483f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                Parcel _data = Parcel.obtain();
484f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                Parcel _reply = Parcel.obtain();
485f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                int _result;
486f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                try {
487f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _data.writeInterfaceToken(DESCRIPTOR);
488f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _data.writeInt(uid);
489f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    mRemote.transact(Stub.TRANSACTION_reset_uid, _data, _reply, 0);
490f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _reply.readException();
491f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _result = _reply.readInt();
492f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                } finally {
493f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _reply.recycle();
494f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _data.recycle();
495f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                }
496f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                return _result;
497f0246a8a14d69680d1776620e75a485cf963e574Robin Lee            }
498f0246a8a14d69680d1776620e75a485cf963e574Robin Lee
499f0246a8a14d69680d1776620e75a485cf963e574Robin Lee            public int sync_uid(int srcUid, int dstUid) throws RemoteException {
500f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                Parcel _data = Parcel.obtain();
501f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                Parcel _reply = Parcel.obtain();
502f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                int _result;
503f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                try {
504f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _data.writeInterfaceToken(DESCRIPTOR);
505f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _data.writeInt(srcUid);
506f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _data.writeInt(dstUid);
507f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    mRemote.transact(Stub.TRANSACTION_sync_uid, _data, _reply, 0);
508f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _reply.readException();
509f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _result = _reply.readInt();
510f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                } finally {
511f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _reply.recycle();
512f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _data.recycle();
513f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                }
514f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                return _result;
515f0246a8a14d69680d1776620e75a485cf963e574Robin Lee            }
516f0246a8a14d69680d1776620e75a485cf963e574Robin Lee
517f0246a8a14d69680d1776620e75a485cf963e574Robin Lee            public int password_uid(String password, int uid) throws RemoteException {
518f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                Parcel _data = Parcel.obtain();
519f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                Parcel _reply = Parcel.obtain();
520f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                int _result;
521f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                try {
522f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _data.writeInterfaceToken(DESCRIPTOR);
523f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _data.writeString(password);
524f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _data.writeInt(uid);
525f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    mRemote.transact(Stub.TRANSACTION_password_uid, _data, _reply, 0);
526f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _reply.readException();
527f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _result = _reply.readInt();
528f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                } finally {
529f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _reply.recycle();
530f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                    _data.recycle();
531f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                }
532f0246a8a14d69680d1776620e75a485cf963e574Robin Lee                return _result;
533f0246a8a14d69680d1776620e75a485cf963e574Robin Lee            }
5346b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        }
5356b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
5366b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        private static final String DESCRIPTOR = "android.security.keystore";
5376b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
5386b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_test = IBinder.FIRST_CALL_TRANSACTION + 0;
5396b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_get = IBinder.FIRST_CALL_TRANSACTION + 1;
5406b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_insert = IBinder.FIRST_CALL_TRANSACTION + 2;
5416b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_del = IBinder.FIRST_CALL_TRANSACTION + 3;
5426b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_exist = IBinder.FIRST_CALL_TRANSACTION + 4;
5436b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_saw = IBinder.FIRST_CALL_TRANSACTION + 5;
5446b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_reset = IBinder.FIRST_CALL_TRANSACTION + 6;
5456b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_password = IBinder.FIRST_CALL_TRANSACTION + 7;
5466b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_lock = IBinder.FIRST_CALL_TRANSACTION + 8;
5476b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_unlock = IBinder.FIRST_CALL_TRANSACTION + 9;
5486b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_zero = IBinder.FIRST_CALL_TRANSACTION + 10;
5496b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_generate = IBinder.FIRST_CALL_TRANSACTION + 11;
5506b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_import = IBinder.FIRST_CALL_TRANSACTION + 12;
5516b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_sign = IBinder.FIRST_CALL_TRANSACTION + 13;
5526b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_verify = IBinder.FIRST_CALL_TRANSACTION + 14;
5536b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_get_pubkey = IBinder.FIRST_CALL_TRANSACTION + 15;
5546b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_del_key = IBinder.FIRST_CALL_TRANSACTION + 16;
5556b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_grant = IBinder.FIRST_CALL_TRANSACTION + 17;
5566b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_ungrant = IBinder.FIRST_CALL_TRANSACTION + 18;
5576b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        static final int TRANSACTION_getmtime = IBinder.FIRST_CALL_TRANSACTION + 19;
5585f1d965f7d7e1df50981ffed8faa11fbcc17ca22Kenny Root        static final int TRANSACTION_duplicate = IBinder.FIRST_CALL_TRANSACTION + 20;
5595cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root        static final int TRANSACTION_is_hardware_backed = IBinder.FIRST_CALL_TRANSACTION + 21;
560d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root        static final int TRANSACTION_clear_uid = IBinder.FIRST_CALL_TRANSACTION + 22;
561f0246a8a14d69680d1776620e75a485cf963e574Robin Lee        static final int TRANSACTION_reset_uid = IBinder.FIRST_CALL_TRANSACTION + 23;
562f0246a8a14d69680d1776620e75a485cf963e574Robin Lee        static final int TRANSACTION_sync_uid = IBinder.FIRST_CALL_TRANSACTION + 24;
563f0246a8a14d69680d1776620e75a485cf963e574Robin Lee        static final int TRANSACTION_password_uid = IBinder.FIRST_CALL_TRANSACTION + 25;
5646b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
5656b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        /**
5666b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root         * Cast an IBinder object into an IKeystoreService interface, generating
5676b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root         * a proxy if needed.
5686b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root         */
5696b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        public static IKeystoreService asInterface(IBinder obj) {
5706b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            if (obj == null) {
5716b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return null;
5726b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
5736b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
5746b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            if (iin != null && iin instanceof IKeystoreService) {
5756b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                return (IKeystoreService) iin;
5766b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
5776b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            return new IKeystoreService.Stub.Proxy(obj);
5786b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        }
5796b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
5806b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        /** Construct the stub at attach it to the interface. */
5816b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        public Stub() {
5826b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            attachInterface(this, DESCRIPTOR);
5836b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        }
5846b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
5856b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        public IBinder asBinder() {
5866b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            return this;
5876b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        }
5886b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
5896b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        @Override
5906b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
5916b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                throws RemoteException {
5926b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            switch (code) {
5936b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                case INTERFACE_TRANSACTION: {
5946b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    reply.writeString(DESCRIPTOR);
5956b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    return true;
5966b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
5976b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                case TRANSACTION_test: {
5986b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    data.enforceInterface(DESCRIPTOR);
5996b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    int resultCode = test();
6006b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    reply.writeNoException();
6016b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    reply.writeInt(resultCode);
6026b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                    return true;
6036b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root                }
6046b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            }
6056b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root            return super.onTransact(code, data, reply, flags);
6066b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root        }
6076b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    }
6086b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
6096b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public int test() throws RemoteException;
6106b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
6116b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public byte[] get(String name) throws RemoteException;
6126b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
613a3788b00bb221e20abdd42f747d2af419e0a088cKenny Root    public int insert(String name, byte[] item, int uid, int flags) throws RemoteException;
6146b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
615e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root    public int del(String name, int uid) throws RemoteException;
6166b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
617e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root    public int exist(String name, int uid) throws RemoteException;
6186b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
619e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root    public String[] saw(String name, int uid) throws RemoteException;
6206b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
6216b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public int reset() throws RemoteException;
6226b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
6236b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public int password(String password) throws RemoteException;
6246b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
6256b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public int lock() throws RemoteException;
6266b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
6276b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public int unlock(String password) throws RemoteException;
6286b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
6296b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public int zero() throws RemoteException;
6306b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
631a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root    public int generate(String name, int uid, int keyType, int keySize, int flags, byte[][] args)
632a39859889b7de0ad3190386cc732fa4bdcbe5504Kenny Root            throws RemoteException;
6336b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
634a3788b00bb221e20abdd42f747d2af419e0a088cKenny Root    public int import_key(String name, byte[] data, int uid, int flags) throws RemoteException;
6356b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
6366b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public byte[] sign(String name, byte[] data) throws RemoteException;
6376b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
6386b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public int verify(String name, byte[] data, byte[] signature) throws RemoteException;
6396b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
6406b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public byte[] get_pubkey(String name) throws RemoteException;
6416b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
642e151f281d527f4bea5cbdf4219d5e0507a6668b0Kenny Root    public int del_key(String name, int uid) throws RemoteException;
6436b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
6446b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public int grant(String name, int granteeUid) throws RemoteException;
6456b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
6466b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public int ungrant(String name, int granteeUid) throws RemoteException;
6476b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root
6486b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root    public long getmtime(String name) throws RemoteException;
649bd79419ef84ae31f3765721b50aa413fa462d1d1Kenny Root
6505f1d965f7d7e1df50981ffed8faa11fbcc17ca22Kenny Root    public int duplicate(String srcKey, int srcUid, String destKey, int destUid)
6515f1d965f7d7e1df50981ffed8faa11fbcc17ca22Kenny Root            throws RemoteException;
6525cb5cec6a4a4d5432d4ce6468c12de9508db1633Kenny Root
653b91773bce1126d28a93f73fbef18f3a79245f24eKenny Root    public int is_hardware_backed(String string) throws RemoteException;
654d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root
655d72317abd79ddf95d48c8f35bf1070900ff55b5eKenny Root    public int clear_uid(long uid) throws RemoteException;
656f0246a8a14d69680d1776620e75a485cf963e574Robin Lee
657f0246a8a14d69680d1776620e75a485cf963e574Robin Lee    public int reset_uid(int uid) throws RemoteException;
658f0246a8a14d69680d1776620e75a485cf963e574Robin Lee
659f0246a8a14d69680d1776620e75a485cf963e574Robin Lee    public int sync_uid(int sourceUid, int targetUid) throws RemoteException;
660f0246a8a14d69680d1776620e75a485cf963e574Robin Lee
661f0246a8a14d69680d1776620e75a485cf963e574Robin Lee    public int password_uid(String password, int uid) throws RemoteException;
6626b77645aa9ac51ce33ea67adba226aaf1a6e8846Kenny Root}
663