Upgraded GRUB2 to 2.00 release.
[AROS.git] / arch / all-pc / boot / grub2-aros / include / grub / cryptodisk.h
blob0bb5d444eb51e77778fda9754af1f53802a4a492
1 /*
2 * GRUB -- GRand Unified Bootloader
3 * Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009 Free Software Foundation, Inc.
5 * GRUB is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * GRUB is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
19 #ifndef GRUB_CRYPTODISK_HEADER
20 #define GRUB_CRYPTODISK_HEADER 1
22 #include <grub/disk.h>
23 #include <grub/crypto.h>
24 #include <grub/list.h>
26 typedef enum
28 GRUB_CRYPTODISK_MODE_ECB,
29 GRUB_CRYPTODISK_MODE_CBC,
30 GRUB_CRYPTODISK_MODE_PCBC,
31 GRUB_CRYPTODISK_MODE_XTS,
32 GRUB_CRYPTODISK_MODE_LRW
33 } grub_cryptodisk_mode_t;
35 typedef enum
37 GRUB_CRYPTODISK_MODE_IV_NULL,
38 GRUB_CRYPTODISK_MODE_IV_PLAIN,
39 GRUB_CRYPTODISK_MODE_IV_PLAIN64,
40 GRUB_CRYPTODISK_MODE_IV_ESSIV,
41 GRUB_CRYPTODISK_MODE_IV_BENBI,
42 GRUB_CRYPTODISK_MODE_IV_BYTECOUNT64,
43 GRUB_CRYPTODISK_MODE_IV_BYTECOUNT64_HASH
44 } grub_cryptodisk_mode_iv_t;
46 #define GRUB_CRYPTODISK_MAX_UUID_LENGTH 71
48 #define GRUB_CRYPTODISK_GF_LOG_SIZE 7
49 #define GRUB_CRYPTODISK_GF_SIZE (1U << GRUB_CRYPTODISK_GF_LOG_SIZE)
50 #define GRUB_CRYPTODISK_GF_LOG_BYTES (GRUB_CRYPTODISK_GF_LOG_SIZE - 3)
51 #define GRUB_CRYPTODISK_GF_BYTES (1U << GRUB_CRYPTODISK_GF_LOG_BYTES)
53 struct grub_cryptodisk;
55 typedef gcry_err_code_t
56 (*grub_cryptodisk_rekey_func_t) (struct grub_cryptodisk *dev,
57 grub_uint64_t zoneno);
59 struct grub_cryptodisk
61 struct grub_cryptodisk *next;
62 struct grub_cryptodisk **prev;
64 char *source;
65 grub_disk_addr_t offset;
66 grub_disk_addr_t total_length;
67 grub_disk_t source_disk;
68 int ref;
69 grub_crypto_cipher_handle_t cipher;
70 grub_crypto_cipher_handle_t secondary_cipher;
71 grub_crypto_cipher_handle_t essiv_cipher;
72 const gcry_md_spec_t *essiv_hash, *hash, *iv_hash;
73 grub_cryptodisk_mode_t mode;
74 grub_cryptodisk_mode_iv_t mode_iv;
75 int benbi_log;
76 unsigned long id, source_id;
77 enum grub_disk_dev_id source_dev_id;
78 char uuid[GRUB_CRYPTODISK_MAX_UUID_LENGTH + 1];
79 grub_uint8_t lrw_key[GRUB_CRYPTODISK_GF_BYTES];
80 grub_uint8_t *lrw_precalc;
81 grub_uint8_t iv_prefix[64];
82 grub_size_t iv_prefix_len;
83 #ifdef GRUB_UTIL
84 char *cheat;
85 const char *modname;
86 int cheat_fd;
87 #endif
88 int log_sector_size;
89 grub_cryptodisk_rekey_func_t rekey;
90 int rekey_shift;
91 grub_uint8_t rekey_key[64];
92 grub_uint64_t last_rekey;
93 int rekey_derived_size;
95 typedef struct grub_cryptodisk *grub_cryptodisk_t;
97 struct grub_cryptodisk_dev
99 struct grub_cryptodisk_dev *next;
100 struct grub_cryptodisk_dev **prev;
102 grub_cryptodisk_t (*scan) (grub_disk_t disk, const char *check_uuid,
103 int boot_only);
104 grub_err_t (*recover_key) (grub_disk_t disk, grub_cryptodisk_t dev);
106 typedef struct grub_cryptodisk_dev *grub_cryptodisk_dev_t;
108 extern grub_cryptodisk_dev_t EXPORT_VAR (grub_cryptodisk_list);
110 #ifndef GRUB_LST_GENERATOR
111 static inline void
112 grub_cryptodisk_dev_register (grub_cryptodisk_dev_t cr)
114 grub_list_push (GRUB_AS_LIST_P (&grub_cryptodisk_list), GRUB_AS_LIST (cr));
116 #endif
118 static inline void
119 grub_cryptodisk_dev_unregister (grub_cryptodisk_dev_t cr)
121 grub_list_remove (GRUB_AS_LIST (cr));
124 #define FOR_CRYPTODISK_DEVS(var) FOR_LIST_ELEMENTS((var), (grub_cryptodisk_list))
126 gcry_err_code_t
127 grub_cryptodisk_setkey (grub_cryptodisk_t dev,
128 grub_uint8_t *key, grub_size_t keysize);
129 gcry_err_code_t
130 grub_cryptodisk_decrypt (struct grub_cryptodisk *dev,
131 grub_uint8_t * data, grub_size_t len,
132 grub_disk_addr_t sector);
133 grub_err_t
134 grub_cryptodisk_insert (grub_cryptodisk_t newdev, const char *name,
135 grub_disk_t source);
136 #ifdef GRUB_UTIL
137 grub_err_t
138 grub_cryptodisk_cheat_insert (grub_cryptodisk_t newdev, const char *name,
139 grub_disk_t source, const char *cheat);
140 void
141 grub_util_cryptodisk_print_abstraction (grub_disk_t disk);
142 char *
143 grub_util_get_geli_uuid (const char *dev);
144 #endif
146 grub_cryptodisk_t grub_cryptodisk_get_by_uuid (const char *uuid);
147 grub_cryptodisk_t grub_cryptodisk_get_by_source_disk (grub_disk_t disk);
149 #endif