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