mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-11-27 19:53:42 +00:00
futility: add separate check function for VPbublicKey
Provide a PublicKeyLooksOkay() function to sanity-check VbPublicKey structs. This was just part of PublicKeyRead(), but I want to separate the reading from the checking. BUG=chromium:224734 BRANCH=ToT TEST=make runtests Change-Id: I1dd808e623e2a7fdc2789e02305619111a7b01e6 Signed-off-by: Bill Richardson <wfrichar@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/214621 Reviewed-by: Randall Spangler <rspangler@chromium.org>
This commit is contained in:
committed by
chrome-internal-fetch
parent
0e6ae29eec
commit
f16ed87879
@@ -201,39 +201,45 @@ VbPublicKey* PublicKeyReadKeyb(const char* filename, uint64_t algorithm,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int PublicKeyLooksOkay(VbPublicKey *key, uint64_t file_size)
|
||||||
|
{
|
||||||
|
uint64_t key_size;
|
||||||
|
|
||||||
|
/* Sanity-check key data */
|
||||||
|
if (0 != VerifyPublicKeyInside(key, file_size, key)) {
|
||||||
|
VBDEBUG(("PublicKeyRead() not a VbPublicKey\n"));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (key->algorithm >= kNumAlgorithms) {
|
||||||
|
VBDEBUG(("PublicKeyRead() invalid algorithm\n"));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (key->key_version > 0xFFFF) {
|
||||||
|
VBDEBUG(("PublicKeyRead() invalid version\n"));
|
||||||
|
return 0; /* Currently, TPM only supports 16-bit version */
|
||||||
|
}
|
||||||
|
if (!RSAProcessedKeySize(key->algorithm, &key_size) ||
|
||||||
|
key_size != key->key_size) {
|
||||||
|
VBDEBUG(("PublicKeyRead() wrong key size for algorithm\n"));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Success */
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
VbPublicKey* PublicKeyRead(const char* filename) {
|
VbPublicKey* PublicKeyRead(const char* filename) {
|
||||||
VbPublicKey* key;
|
VbPublicKey* key;
|
||||||
uint64_t file_size;
|
uint64_t file_size;
|
||||||
uint64_t key_size;
|
|
||||||
|
|
||||||
key = (VbPublicKey*)ReadFile(filename, &file_size);
|
key = (VbPublicKey*)ReadFile(filename, &file_size);
|
||||||
if (!key)
|
if (!key)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
do {
|
if (PublicKeyLooksOkay(key, file_size))
|
||||||
/* Sanity-check key data */
|
return key;
|
||||||
if (0 != VerifyPublicKeyInside(key, file_size, key)) {
|
|
||||||
VBDEBUG(("PublicKeyRead() not a VbPublicKey\n"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (key->algorithm >= kNumAlgorithms) {
|
|
||||||
VBDEBUG(("PublicKeyRead() invalid algorithm\n"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (key->key_version > 0xFFFF) {
|
|
||||||
VBDEBUG(("PublicKeyRead() invalid version\n"));
|
|
||||||
break; /* Currently, TPM only supports 16-bit version */
|
|
||||||
}
|
|
||||||
if (!RSAProcessedKeySize(key->algorithm, &key_size) ||
|
|
||||||
key_size != key->key_size) {
|
|
||||||
VBDEBUG(("PublicKeyRead() wrong key size for algorithm\n"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Success */
|
|
||||||
return key;
|
|
||||||
|
|
||||||
} while(0);
|
|
||||||
|
|
||||||
/* Error */
|
/* Error */
|
||||||
free(key);
|
free(key);
|
||||||
|
|||||||
@@ -52,6 +52,8 @@ VbPublicKey* PublicKeyAlloc(uint64_t key_size, uint64_t algorithm,
|
|||||||
* Returns NULL if error. */
|
* Returns NULL if error. */
|
||||||
VbPublicKey* PublicKeyRead(const char* filename);
|
VbPublicKey* PublicKeyRead(const char* filename);
|
||||||
|
|
||||||
|
/* Return true if the public key struct appears correct. */
|
||||||
|
int PublicKeyLooksOkay(VbPublicKey *key, uint64_t file_size);
|
||||||
|
|
||||||
/* Read a public key from a .keyb file. Caller owns the returned
|
/* Read a public key from a .keyb file. Caller owns the returned
|
||||||
* pointer, and must free it with Free().
|
* pointer, and must free it with Free().
|
||||||
|
|||||||
Reference in New Issue
Block a user