| OLD | NEW |
| 1 /* Software-Based Trusted Platform Module (TPM) Emulator for Linux | 1 /* Software-based Trusted Platform Module (TPM) Emulator |
| 2 * Copyright (C) 2004 Mario Strasser <mast@gmx.net>, | 2 * Copyright (C) 2004-2010 Mario Strasser <mast@gmx.net> |
| 3 * Swiss Federal Institute of Technology (ETH) Zurich | |
| 4 * | 3 * |
| 5 * This module is free software; you can redistribute it and/or modify | 4 * This module is free software; you can redistribute it and/or modify |
| 6 * it under the terms of the GNU General Public License as published | 5 * it under the terms of the GNU General Public License as published |
| 7 * by the Free Software Foundation; either version 2 of the License, | 6 * by the Free Software Foundation; either version 2 of the License, |
| 8 * or (at your option) any later version. | 7 * or (at your option) any later version. |
| 9 * | 8 * |
| 10 * This module is distributed in the hope that it will be useful, | 9 * This module is distributed in the hope that it will be useful, |
| 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 13 * GNU General Public License for more details. | 12 * GNU General Public License for more details. |
| 14 * | 13 * |
| 15 * $Id$ | 14 * $Id: tpm_crypto.c 368 2010-02-15 09:26:37Z mast $ |
| 16 */ | 15 */ |
| 17 | 16 |
| 18 #include "tpm_emulator.h" | 17 #include "tpm_emulator.h" |
| 19 #include "tpm_commands.h" | 18 #include "tpm_commands.h" |
| 20 #include "tpm_data.h" | 19 #include "tpm_data.h" |
| 21 #include "tpm_handles.h" | 20 #include "tpm_handles.h" |
| 22 #include "crypto/sha1.h" | 21 #include "crypto/sha1.h" |
| 23 #include "crypto/hmac.h" | 22 #include "crypto/hmac.h" |
| 24 #include "crypto/rc4.h" | 23 #include "crypto/rc4.h" |
| 25 #include "tpm_marshalling.h" | 24 #include "tpm_marshalling.h" |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 194 if (res != TPM_SUCCESS) return res; | 193 if (res != TPM_SUCCESS) return res; |
| 195 } | 194 } |
| 196 if (key->keyUsage != TPM_KEY_SIGNING && key->keyUsage != TPM_KEY_LEGACY) | 195 if (key->keyUsage != TPM_KEY_SIGNING && key->keyUsage != TPM_KEY_LEGACY) |
| 197 return TPM_INVALID_KEYUSAGE; | 196 return TPM_INVALID_KEYUSAGE; |
| 198 /* sign data */ | 197 /* sign data */ |
| 199 return tpm_sign(key, auth1, FALSE, areaToSign, areaToSignSize, sig, sigSize); | 198 return tpm_sign(key, auth1, FALSE, areaToSign, areaToSignSize, sig, sigSize); |
| 200 } | 199 } |
| 201 | 200 |
| 202 void tpm_get_random_bytes(void *buf, size_t nbytes) | 201 void tpm_get_random_bytes(void *buf, size_t nbytes) |
| 203 { | 202 { |
| 204 #ifdef TPM_USE_INTERNAL_PRNG | 203 if (tpmConf & TPM_CONF_USE_INTERNAL_PRNG) { |
| 205 tpm_rc4_ctx_t ctx; | 204 tpm_rc4_ctx_t ctx; |
| 206 tpm_rc4_init(&ctx, tpmData.permanent.data.rngState, | 205 tpm_rc4_init(&ctx, tpmData.permanent.data.rngState, |
| 207 sizeof(tpmData.permanent.data.rngState)); | 206 sizeof(tpmData.permanent.data.rngState)); |
| 208 tpm_rc4_crypt(&ctx, buf, buf, nbytes); | 207 tpm_rc4_crypt(&ctx, buf, buf, nbytes); |
| 209 tpm_rc4_crypt(&ctx, tpmData.permanent.data.rngState, | 208 tpm_rc4_crypt(&ctx, tpmData.permanent.data.rngState, |
| 210 tpmData.permanent.data.rngState, sizeof(tpmData.permanent.data.rngState)); | 209 tpmData.permanent.data.rngState, sizeof(tpmData.permanent.data.rngState)); |
| 211 #else | 210 } else { |
| 212 tpm_get_extern_random_bytes(buf, nbytes); | 211 tpm_get_extern_random_bytes(buf, nbytes); |
| 213 #endif | 212 } |
| 214 } | 213 } |
| 215 | 214 |
| 216 TPM_RESULT TPM_GetRandom(UINT32 bytesRequested, UINT32 *randomBytesSize, | 215 TPM_RESULT TPM_GetRandom(UINT32 bytesRequested, UINT32 *randomBytesSize, |
| 217 BYTE **randomBytes) | 216 BYTE **randomBytes) |
| 218 { | 217 { |
| 219 info("TPM_GetRandom()"); | 218 info("TPM_GetRandom()"); |
| 220 *randomBytesSize = (bytesRequested < 2048) ? bytesRequested : 2048; | 219 *randomBytesSize = (bytesRequested < 2048) ? bytesRequested : 2048; |
| 221 *randomBytes = tpm_malloc(*randomBytesSize); | 220 *randomBytes = tpm_malloc(*randomBytesSize); |
| 222 if (*randomBytes == NULL) return TPM_SIZE; | 221 if (*randomBytes == NULL) return TPM_SIZE; |
| 223 tpm_get_random_bytes(*randomBytes, *randomBytesSize); | 222 tpm_get_random_bytes(*randomBytes, *randomBytesSize); |
| (...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 tpm_sha1_final(&sha1_ctx, buf); | 477 tpm_sha1_final(&sha1_ctx, buf); |
| 479 res = tpm_sign(cert, auth1, FALSE, buf, SHA1_DIGEST_LENGTH, outData, outDataSi
ze); | 478 res = tpm_sign(cert, auth1, FALSE, buf, SHA1_DIGEST_LENGTH, outData, outDataSi
ze); |
| 480 tpm_free(buf); | 479 tpm_free(buf); |
| 481 if (res != TPM_SUCCESS) { | 480 if (res != TPM_SUCCESS) { |
| 482 free_TPM_KEY_PARMS(certifyInfo->algorithmParms); | 481 free_TPM_KEY_PARMS(certifyInfo->algorithmParms); |
| 483 return res; | 482 return res; |
| 484 } | 483 } |
| 485 return TPM_SUCCESS; | 484 return TPM_SUCCESS; |
| 486 } | 485 } |
| 487 | 486 |
| OLD | NEW |