FwdLockGlue.h revision fdd65a0fc7df2c878cc601e4c0f4021cb264f051
1bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant/* 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * Copyright (C) 2010 The Android Open Source Project 3f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant * 4bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * Licensed under the Apache License, Version 2.0 (the "License"); 5bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * you may not use this file except in compliance with the License. 6bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * You may obtain a copy of the License at 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * http://www.apache.org/licenses/LICENSE-2.0 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * Unless required by applicable law or agreed to in writing, software 11bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * distributed under the License is distributed on an "AS IS" BASIS, 12bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * See the License for the specific language governing permissions and 14bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * limitations under the License. 15bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant */ 16bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 17bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifndef __FWDLOCKGLUE_H__ 18bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#define __FWDLOCKGLUE_H__ 19bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 20bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#ifdef __cplusplus 21bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantextern "C" { 22bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant#endif 23bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 24bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant/** 25bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * Generates the specified number of cryptographically secure random bytes. 26bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * 27bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @param[out] pBuffer A reference to the buffer that should receive the random data. 28bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @param[in] numBytes The number of random bytes to generate. 29bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @return A Boolean value indicating whether the operation was successful. 31bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant */ 32bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint FwdLockGlue_GetRandomNumber(void *pBuffer, size_t numBytes); 33bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 34bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant/** 35bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * Performs initialization of the key-encryption key. Should be called once during startup to 36bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * facilitate encryption and decryption of session keys. 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @return A Boolean value indicating whether the operation was successful. 39bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant */ 40bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint FwdLockGlue_InitializeKeyEncryption(); 41bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 42bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant/** 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * Returns the length of the encrypted key, given the length of the plaintext key. 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * 45bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @param[in] plaintextKeyLength The length in bytes of the plaintext key. 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * 47bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @return The length in bytes of the encrypted key. 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant */ 49bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantsize_t FwdLockGlue_GetEncryptedKeyLength(size_t plaintextKeyLength); 50bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 51bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant/** 52bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * Encrypts the given session key using a key-encryption key unique to this device. 53bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * 54bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @param[in] pPlaintextKey A reference to the buffer containing the plaintext key. 55bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @param[in] plaintextKeyLength The length in bytes of the plaintext key. 56bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @param[out] pEncryptedKey A reference to the buffer containing the encrypted key. 57bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @param[in] encryptedKeyLength The length in bytes of the encrypted key. 58bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * 59bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @return A Boolean value indicating whether the operation was successful. 60bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant */ 61bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantint FwdLockGlue_EncryptKey(const void *pPlaintextKey, 62bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant size_t plaintextKeyLength, 63bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant void *pEncryptedKey, 64bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant size_t encryptedKeyLength); 65bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 66bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant/** 67bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * Decrypts the given session key using a key-encryption key unique to this device. 68bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * 69bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @param[in] pEncryptedKey A reference to the buffer containing the encrypted key. 70bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @param[in] encryptedKeyLength The length in bytes of the encrypted key. 71bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @param[out] pDecryptedKey A reference to the buffer containing the decrypted key. 72bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * @param[in] decryptedKeyLength The length in bytes of the decrypted key. 73bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant * 74 * @return A Boolean value indicating whether the operation was successful. 75 */ 76int FwdLockGlue_DecryptKey(const void *pEncryptedKey, 77 size_t encryptedKeyLength, 78 void *pDecryptedKey, 79 size_t decryptedKeyLength); 80 81#ifdef __cplusplus 82} 83#endif 84 85#endif // __FWDLOCKGLUE_H__ 86