summaryrefslogtreecommitdiff
path: root/futility/vb1_helper.c
diff options
context:
space:
mode:
Diffstat (limited to 'futility/vb1_helper.c')
-rw-r--r--futility/vb1_helper.c22
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;
+}