base for ciphers and digests
This commit is contained in:
parent
58806db847
commit
39f7c91b50
4 changed files with 126 additions and 27 deletions
|
@ -123,6 +123,7 @@ typedef struct gcry_cipher_spec
|
|||
gcry_cipher_decrypt_t decrypt;
|
||||
gcry_cipher_stencrypt_t stencrypt;
|
||||
gcry_cipher_stdecrypt_t stdecrypt;
|
||||
struct gcry_cipher_spec *next;
|
||||
} gcry_cipher_spec_t;
|
||||
|
||||
/* Definition of a function used to report selftest failures.
|
||||
|
@ -154,33 +155,75 @@ typedef struct cipher_extra_spec
|
|||
cipher_set_extra_info_t set_extra_info;
|
||||
} cipher_extra_spec_t;
|
||||
|
||||
/* (Forward declaration.) */
|
||||
struct gcry_md_context;
|
||||
/* Type for the md_init function. */
|
||||
typedef void (*gcry_md_init_t) (void *c);
|
||||
|
||||
/* This object is used to hold a handle to a message digest object.
|
||||
This structure is private - only to be used by the public gcry_md_*
|
||||
macros. */
|
||||
typedef struct gcry_md_handle
|
||||
/* Type for the md_write function. */
|
||||
typedef void (*gcry_md_write_t) (void *c, const void *buf, grub_size_t nbytes);
|
||||
|
||||
/* Type for the md_final function. */
|
||||
typedef void (*gcry_md_final_t) (void *c);
|
||||
|
||||
/* Type for the md_read function. */
|
||||
typedef unsigned char *(*gcry_md_read_t) (void *c);
|
||||
|
||||
typedef struct gcry_md_oid_spec
|
||||
{
|
||||
/* Actual context. */
|
||||
struct gcry_md_context *ctx;
|
||||
|
||||
/* Buffer management. */
|
||||
int bufpos;
|
||||
int bufsize;
|
||||
unsigned char buf[1];
|
||||
} *gcry_md_hd_t;
|
||||
const char *oidstring;
|
||||
} gcry_md_oid_spec_t;
|
||||
|
||||
|
||||
struct grub_cipher
|
||||
/* Module specification structure for message digests. */
|
||||
typedef struct gcry_md_spec
|
||||
{
|
||||
struct grub_cipher *next;
|
||||
const char *name;
|
||||
};
|
||||
typedef struct grub_cipher *grub_cipher_t;
|
||||
unsigned char *asnoid;
|
||||
int asnlen;
|
||||
gcry_md_oid_spec_t *oids;
|
||||
int mdlen;
|
||||
gcry_md_init_t init;
|
||||
gcry_md_write_t write;
|
||||
gcry_md_final_t final;
|
||||
gcry_md_read_t read;
|
||||
grub_size_t contextsize; /* allocate this amount of context */
|
||||
struct gcry_md_spec *next;
|
||||
} gcry_md_spec_t;
|
||||
|
||||
extern gcry_cipher_spec_t *EXPORT_VAR (grub_ciphers);
|
||||
extern gcry_md_spec_t *EXPORT_VAR (grub_digests);
|
||||
|
||||
static inline void
|
||||
grub_cipher_register (gcry_cipher_spec_t *cipher)
|
||||
{
|
||||
cipher->next = grub_ciphers;
|
||||
grub_ciphers = cipher;
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_cipher_unregister (gcry_cipher_spec_t *cipher)
|
||||
{
|
||||
gcry_cipher_spec_t **ciph;
|
||||
for (ciph = &grub_ciphers; *ciph; ciph = &((*ciph)->next))
|
||||
if (*ciph == cipher)
|
||||
*ciph = (*ciph)->next;
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_md_register (gcry_md_spec_t *digest)
|
||||
{
|
||||
digest->next = grub_digests;
|
||||
grub_digests = digest;
|
||||
}
|
||||
|
||||
static inline void
|
||||
grub_md_unregister (gcry_md_spec_t *cipher)
|
||||
{
|
||||
gcry_md_spec_t **ciph;
|
||||
for (ciph = &grub_digests; *ciph; ciph = &((*ciph)->next))
|
||||
if (*ciph == cipher)
|
||||
*ciph = (*ciph)->next;
|
||||
}
|
||||
|
||||
|
||||
extern grub_cipher_t EXPORT_VAR (grub_ciphers);
|
||||
void EXPORT_FUNC(grub_burn_stack) (grub_size_t size);
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -27,12 +27,45 @@
|
|||
|
||||
#define __GNU_LIBRARY__
|
||||
|
||||
#define DIM ARRAY_SIZE
|
||||
|
||||
typedef grub_uint64_t u64;
|
||||
typedef grub_uint32_t u32;
|
||||
typedef grub_uint16_t u16;
|
||||
typedef grub_uint8_t byte;
|
||||
typedef grub_size_t size_t;
|
||||
|
||||
#define U64_C(c) (c ## ULL)
|
||||
|
||||
#define _gcry_burn_stack grub_burn_stack
|
||||
#define log_error(fmt, args...) grub_dprintf ("crypto", fmt, ## args)
|
||||
|
||||
|
||||
#define PUBKEY_FLAG_NO_BLINDING (1 << 0)
|
||||
|
||||
#define CIPHER_INFO_NO_WEAK_KEY 1
|
||||
|
||||
#define HAVE_U64_TYPEDEF 1
|
||||
|
||||
typedef union {
|
||||
int a;
|
||||
short b;
|
||||
char c[1];
|
||||
long d;
|
||||
#ifdef HAVE_U64_TYPEDEF
|
||||
u64 e;
|
||||
#endif
|
||||
float f;
|
||||
double g;
|
||||
} PROPERLY_ALIGNED_TYPE;
|
||||
|
||||
#define gcry_assert(x) grub_assert_real(__FILE__, __LINE__, x)
|
||||
|
||||
static inline void
|
||||
grub_assert_real (const char *file, int line, int cond)
|
||||
{
|
||||
if (cond)
|
||||
grub_fatal ("Assertion failed at %s:%d\n", file, line);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue