~ubuntu-branches/ubuntu/utopic/grub2/utopic

« back to all changes in this revision

Viewing changes to .pc/probe-delimiter.patch/include/grub/cryptodisk.h

  • Committer: Package Import Robot
  • Author(s): Colin Watson, Colin Watson, Jon Severinsson
  • Date: 2014-03-31 16:30:37 UTC
  • mfrom: (17.3.93 sid)
  • Revision ID: package-import@ubuntu.com-20140331163037-b7h7nc1lf6st1z87
Tags: 2.02~beta2-8
[ Colin Watson ]
* Backport from upstream:
  - ieee1275: check for IBM pseries emulated machine.
  - Fix partmap, cryptodisk, and abstraction handling in grub-mkconfig
    (closes: #735935).
  - btrfs: fix get_root key comparison failures due to endianness.
* Build-depend on automake (>= 1.10.1) to ensure that it meets configure's
  requirements (LP: #1299041).
* When installing an image for use with UEFI Secure Boot, generate a
  load.cfg even if there are no device abstractions in use (LP: #1298399).

[ Jon Severinsson ]
* Add Tanglu support, as in Debian except:
  - Enable splash screen by default (as Ubuntu)
  - Enable quiet and quick boot (as Ubuntu)
  - Enable the grub-common init script (as Ubuntu)
  - Enable dynamic gfxpayload (as Ubuntu)
  - Enable vt handover (as Ubuntu)
  - Use monochromatic theme by default (as Ubuntu)
  - Use Tanglu GRUB wallpaper by default.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 *  GRUB  --  GRand Unified Bootloader
 
3
 *  Copyright (C) 2002,2003,2004,2005,2006,2007,2008,2009  Free Software Foundation, Inc.
 
4
 *
 
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.
 
9
 *
 
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.
 
14
 *
 
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/>.
 
17
 */
 
18
 
 
19
#ifndef GRUB_CRYPTODISK_HEADER
 
20
#define GRUB_CRYPTODISK_HEADER  1
 
21
 
 
22
#include <grub/disk.h>
 
23
#include <grub/crypto.h>
 
24
#include <grub/list.h>
 
25
#ifdef GRUB_UTIL
 
26
#include <grub/emu/hostdisk.h>
 
27
#endif
 
28
 
 
29
typedef enum
 
30
  {
 
31
    GRUB_CRYPTODISK_MODE_ECB,
 
32
    GRUB_CRYPTODISK_MODE_CBC,
 
33
    GRUB_CRYPTODISK_MODE_PCBC,
 
34
    GRUB_CRYPTODISK_MODE_XTS,
 
35
    GRUB_CRYPTODISK_MODE_LRW
 
36
  } grub_cryptodisk_mode_t;
 
37
 
 
38
typedef enum
 
39
  {
 
40
    GRUB_CRYPTODISK_MODE_IV_NULL,
 
41
    GRUB_CRYPTODISK_MODE_IV_PLAIN,
 
42
    GRUB_CRYPTODISK_MODE_IV_PLAIN64,
 
43
    GRUB_CRYPTODISK_MODE_IV_ESSIV,
 
44
    GRUB_CRYPTODISK_MODE_IV_BENBI,
 
45
    GRUB_CRYPTODISK_MODE_IV_BYTECOUNT64,
 
46
    GRUB_CRYPTODISK_MODE_IV_BYTECOUNT64_HASH
 
47
  } grub_cryptodisk_mode_iv_t;
 
48
 
 
49
#define GRUB_CRYPTODISK_MAX_UUID_LENGTH 71
 
50
 
 
51
#define GRUB_CRYPTODISK_GF_LOG_SIZE 7
 
52
#define GRUB_CRYPTODISK_GF_SIZE (1U << GRUB_CRYPTODISK_GF_LOG_SIZE)
 
53
#define GRUB_CRYPTODISK_GF_LOG_BYTES (GRUB_CRYPTODISK_GF_LOG_SIZE - 3)
 
54
#define GRUB_CRYPTODISK_GF_BYTES (1U << GRUB_CRYPTODISK_GF_LOG_BYTES)
 
55
#define GRUB_CRYPTODISK_MAX_KEYLEN 128
 
56
 
 
57
struct grub_cryptodisk;
 
58
 
 
59
typedef gcry_err_code_t
 
60
(*grub_cryptodisk_rekey_func_t) (struct grub_cryptodisk *dev,
 
61
                                 grub_uint64_t zoneno);
 
62
 
 
63
struct grub_cryptodisk
 
64
{
 
65
  struct grub_cryptodisk *next;
 
66
  struct grub_cryptodisk **prev;
 
67
 
 
68
  char *source;
 
69
  grub_disk_addr_t offset;
 
70
  grub_disk_addr_t total_length;
 
71
  grub_disk_t source_disk;
 
72
  int ref;
 
73
  grub_crypto_cipher_handle_t cipher;
 
74
  grub_crypto_cipher_handle_t secondary_cipher;
 
75
  grub_crypto_cipher_handle_t essiv_cipher;
 
76
  const gcry_md_spec_t *essiv_hash, *hash, *iv_hash;
 
77
  grub_cryptodisk_mode_t mode;
 
78
  grub_cryptodisk_mode_iv_t mode_iv;
 
79
  int benbi_log;
 
80
  unsigned long id, source_id;
 
81
  enum grub_disk_dev_id source_dev_id;
 
82
  char uuid[GRUB_CRYPTODISK_MAX_UUID_LENGTH + 1];
 
83
  grub_uint8_t lrw_key[GRUB_CRYPTODISK_GF_BYTES];
 
84
  grub_uint8_t *lrw_precalc;
 
85
  grub_uint8_t iv_prefix[64];
 
86
  grub_size_t iv_prefix_len;
 
87
  grub_uint8_t key[GRUB_CRYPTODISK_MAX_KEYLEN];
 
88
  grub_size_t keysize;
 
89
#ifdef GRUB_UTIL
 
90
  char *cheat;
 
91
  grub_util_fd_t cheat_fd;
 
92
#endif
 
93
  const char *modname;
 
94
  int log_sector_size;
 
95
  grub_cryptodisk_rekey_func_t rekey;
 
96
  int rekey_shift;
 
97
  grub_uint8_t rekey_key[64];
 
98
  grub_uint64_t last_rekey;
 
99
  int rekey_derived_size;
 
100
};
 
101
typedef struct grub_cryptodisk *grub_cryptodisk_t;
 
102
 
 
103
struct grub_cryptodisk_dev
 
104
{
 
105
  struct grub_cryptodisk_dev *next;
 
106
  struct grub_cryptodisk_dev **prev;
 
107
 
 
108
  grub_cryptodisk_t (*scan) (grub_disk_t disk, const char *check_uuid,
 
109
                             int boot_only);
 
110
  grub_err_t (*recover_key) (grub_disk_t disk, grub_cryptodisk_t dev);
 
111
};
 
112
typedef struct grub_cryptodisk_dev *grub_cryptodisk_dev_t;
 
113
 
 
114
extern grub_cryptodisk_dev_t EXPORT_VAR (grub_cryptodisk_list);
 
115
 
 
116
#ifndef GRUB_LST_GENERATOR
 
117
static inline void
 
118
grub_cryptodisk_dev_register (grub_cryptodisk_dev_t cr)
 
119
{
 
120
  grub_list_push (GRUB_AS_LIST_P (&grub_cryptodisk_list), GRUB_AS_LIST (cr));
 
121
}
 
122
#endif
 
123
 
 
124
static inline void
 
125
grub_cryptodisk_dev_unregister (grub_cryptodisk_dev_t cr)
 
126
{
 
127
  grub_list_remove (GRUB_AS_LIST (cr));
 
128
}
 
129
 
 
130
#define FOR_CRYPTODISK_DEVS(var) FOR_LIST_ELEMENTS((var), (grub_cryptodisk_list))
 
131
 
 
132
gcry_err_code_t
 
133
grub_cryptodisk_setkey (grub_cryptodisk_t dev,
 
134
                        grub_uint8_t *key, grub_size_t keysize);
 
135
gcry_err_code_t
 
136
grub_cryptodisk_decrypt (struct grub_cryptodisk *dev,
 
137
                         grub_uint8_t * data, grub_size_t len,
 
138
                         grub_disk_addr_t sector);
 
139
grub_err_t
 
140
grub_cryptodisk_insert (grub_cryptodisk_t newdev, const char *name,
 
141
                        grub_disk_t source);
 
142
#ifdef GRUB_UTIL
 
143
grub_err_t
 
144
grub_cryptodisk_cheat_insert (grub_cryptodisk_t newdev, const char *name,
 
145
                              grub_disk_t source, const char *cheat);
 
146
void
 
147
grub_util_cryptodisk_get_abstraction (grub_disk_t disk,
 
148
                                      void (*cb) (const char *val));
 
149
 
 
150
char *
 
151
grub_util_get_geli_uuid (const char *dev);
 
152
#endif
 
153
 
 
154
grub_cryptodisk_t grub_cryptodisk_get_by_uuid (const char *uuid);
 
155
grub_cryptodisk_t grub_cryptodisk_get_by_source_disk (grub_disk_t disk);
 
156
 
 
157
#endif