diff options
Diffstat (limited to 'futility/vb1_helper.c')
-rw-r--r-- | futility/vb1_helper.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/futility/vb1_helper.c b/futility/vb1_helper.c index 292a0f24..f40b7ac8 100644 --- a/futility/vb1_helper.c +++ b/futility/vb1_helper.c @@ -9,6 +9,7 @@ #include <stdio.h> #include <string.h> #include <unistd.h> +#include <openssl/rsa.h> #include "file_type.h" #include "futility.h" @@ -737,3 +738,24 @@ enum futil_file_type recognize_vblock1(uint8_t *buf, uint32_t len) return FILE_TYPE_UNKNOWN; } + +enum futil_file_type recognize_privkey(uint8_t *buf, uint32_t len) +{ + VbPrivateKey key; + const unsigned char *start; + + if (len < sizeof(key.algorithm)) + return FILE_TYPE_UNKNOWN; + + key.algorithm = *(typeof(key.algorithm) *)buf; + start = buf + sizeof(key.algorithm); + key.rsa_private_key = d2i_RSAPrivateKey(NULL, &start, + len - sizeof(key.algorithm)); + + if (key.rsa_private_key) { + RSA_free(key.rsa_private_key); + return FILE_TYPE_PRIVKEY; + } + + return FILE_TYPE_UNKNOWN; +} |