• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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