mirror of https://github.com/OpenIPC/firmware.git
133 lines
2.9 KiB
Diff
133 lines
2.9 KiB
Diff
diff -drupN a/security/fivm/fivm.h b/security/fivm/fivm.h
|
|
--- a/security/fivm/fivm.h 1970-01-01 03:00:00.000000000 +0300
|
|
+++ b/security/fivm/fivm.h 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -0,0 +1,128 @@
|
|
+/*
|
|
+ * Copyright (C) 2014 Allwinner Ltd.
|
|
+ *
|
|
+ * Author:
|
|
+ * Ryan Chen <ryanchen@allwinnertech.com>
|
|
+ *
|
|
+ * This program is free software; you can redistribute it and/or
|
|
+ * modify it under the terms of the GNU General Public License as
|
|
+ * published by the Free Software Foundation, version 2 of the
|
|
+ * License.
|
|
+ *
|
|
+ * File: fima.h
|
|
+ * File Integrity Measurement Architecture definitions
|
|
+ */
|
|
+
|
|
+#ifndef __LINUX_FIMA_H
|
|
+#define __LINUX_FIMA_H
|
|
+
|
|
+#include <linux/types.h>
|
|
+#include <linux/crypto.h>
|
|
+#include <linux/security.h>
|
|
+#include <linux/hash.h>
|
|
+
|
|
+/*FIMV LKM debug mode
|
|
+*#define FIVM_LKM_DEBUG
|
|
+*#define FIVM_DEBUG_TIMMNG
|
|
+*/
|
|
+
|
|
+extern int fivm_debug;
|
|
+#undef dprintk
|
|
+#define dprintk(format, arg...) \
|
|
+ do {\
|
|
+ if (fivm_debug) \
|
|
+ printk(KERN_DEBUG "%s: " format,\
|
|
+ __func__, ##arg);\
|
|
+ } while (0)
|
|
+
|
|
+#define fprintk(format, arg...) \
|
|
+ do {\
|
|
+ if (fivm_debug)\
|
|
+ printk(format, ##arg); \
|
|
+ } while (0)
|
|
+
|
|
+#define derr(format, arg...) \
|
|
+ do {\
|
|
+ printk(KERN_ERR "%s: " format,\
|
|
+ __func__, ## arg);\
|
|
+ } while (0)
|
|
+
|
|
+#define SHA256_DIGEST_LENGTH 32
|
|
+#define SHA512_DIGEST_LENGTH 64
|
|
+#define SHA_DIG_MAX SHA512_DIGEST_LENGTH
|
|
+
|
|
+#define RSA2048_SIG_LENGTH 256
|
|
+#define RSA3072_SIG_LENGTH 384
|
|
+#define RSA_SIG_MAX RSA3072_SIG_LENGTH
|
|
+
|
|
+#define FILE_NAME_LEN 512
|
|
+#define DIR_MAX_FILE_NUM 10000
|
|
+#define DIR_BITMAP_BYTES (DIR_MAX_FILE_NUM / 8)
|
|
+#define BLK_SIZE 4096
|
|
+#define FILE_SIG_MAGIC 0x78381729
|
|
+
|
|
+struct FILE_LIST_HEAD {
|
|
+ unsigned int magic;
|
|
+ unsigned int version;
|
|
+ unsigned char sha_alg[8];
|
|
+ unsigned char sig[RSA_SIG_MAX];
|
|
+ unsigned char root_dir[64];
|
|
+ unsigned int file_cnt;
|
|
+ unsigned int file_name_len;
|
|
+ unsigned int reserved[4];
|
|
+};
|
|
+
|
|
+struct FILE_SIG_HEAD {
|
|
+ unsigned char sig[RSA_SIG_MAX];
|
|
+ unsigned int magic;
|
|
+ char sha_alg[8];
|
|
+ char rsa_alg[8];
|
|
+ unsigned char root_dir[64];
|
|
+ unsigned int total_len;
|
|
+ unsigned int actual_cnt; /*actual file count*/
|
|
+};
|
|
+struct FILE_SIG {
|
|
+ unsigned int crc;/*name crc*/
|
|
+ unsigned int flag;
|
|
+ unsigned char sha[SHA_DIG_MAX];
|
|
+ unsigned int name_len;
|
|
+ unsigned char name[FILE_NAME_LEN];
|
|
+};
|
|
+
|
|
+#ifdef CONFIG_COMPAT
|
|
+struct fivm_param_t32 {
|
|
+ compat_uptr_t sig_head;
|
|
+ compat_size_t sig_head_size;
|
|
+ compat_uptr_t sig_table;
|
|
+ compat_size_t sig_table_size;
|
|
+};
|
|
+#endif
|
|
+
|
|
+struct fivm_param {
|
|
+ void *sig_head;
|
|
+ unsigned int sig_head_size;
|
|
+ void *sig_table;
|
|
+ unsigned int sig_table_size;
|
|
+};
|
|
+
|
|
+enum {
|
|
+ FIVM_FULL_PATH = 1,
|
|
+ FIVM_PART_PATH,
|
|
+ FIVM_FAIL_PATH
|
|
+};
|
|
+
|
|
+struct fivm_path {
|
|
+ char *path;
|
|
+ int flag;
|
|
+};
|
|
+
|
|
+#define MAX_NAME_LEN 64
|
|
+int fivm_init(void);
|
|
+int fivm_cleanup(void);
|
|
+int fivm_enable(void);
|
|
+int fivm_set(void *);
|
|
+int fivm_disable(void);
|
|
+
|
|
+int fivm_calc_hash(struct file *file, char *digest);
|
|
+int fivm_cleanup(void);
|
|
+#endif
|