107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root/* 207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * Copyright (C) 2012 The Android Open Source Project 307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * 407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * you may not use this file except in compliance with the License. 607438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * You may obtain a copy of the License at 707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * 807438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * http://www.apache.org/licenses/LICENSE-2.0 907438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * 1007438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * Unless required by applicable law or agreed to in writing, software 1107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * distributed under the License is distributed on an "AS IS" BASIS, 1207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * See the License for the specific language governing permissions and 1407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root * limitations under the License. 1507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root */ 1607438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root 1707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root#include <keystore/IKeystoreService.h> 1807438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root#include <binder/IServiceManager.h> 1907438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root 2007438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root#include <keystore/keystore_get.h> 2107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root 2207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Rootusing namespace android; 2307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root 2407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Rootssize_t keystore_get(const char *key, size_t keyLength, uint8_t** value) { 2507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root sp<IServiceManager> sm = defaultServiceManager(); 2607438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root sp<IBinder> binder = sm->getService(String16("android.security.keystore")); 2707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root sp<IKeystoreService> service = interface_cast<IKeystoreService>(binder); 2807438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root 2907438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root if (service == NULL) { 3007438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root return -1; 3107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root } 3207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root 3307438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root size_t valueLength; 3407438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root int32_t ret = service->get(String16(key, keyLength), value, &valueLength); 3507438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root if (ret < 0) { 3607438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root return -1; 3707438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root } else if (ret != ::NO_ERROR) { 3807438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root return -1; 3907438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root } else { 4007438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root return valueLength; 4107438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root } 4207438c8d7256d3788dac323b4d0055f201e0bec9Kenny Root} 43