iPXE
md5_sha1.c File Reference

Hybrid MD5+SHA1 hash as used by TLSv1.1 and earlier. More...

#include <ipxe/crypto.h>
#include <ipxe/rsa.h>
#include <ipxe/md5_sha1.h>

Go to the source code of this file.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
static void md5_sha1_init (struct digest_algorithm *digest __unused, void *ctx)
 Initialise MD5+SHA1 algorithm.
static void md5_sha1_update (struct digest_algorithm *digest __unused, void *ctx, const void *data, size_t len)
 Accumulate data with MD5+SHA1 algorithm.
static void md5_sha1_final (struct digest_algorithm *digest __unused, void *ctx, void *out)
 Generate MD5+SHA1 digest.

Variables

char md5_sha1_sentinel [1]
 Sentinel used to avoid explicit symbol references.
struct digest_algorithm md5_sha1_algorithm
 Hybrid MD5+SHA1 digest algorithm.

Detailed Description

Hybrid MD5+SHA1 hash as used by TLSv1.1 and earlier.

Definition in file md5_sha1.c.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

◆ md5_sha1_init()

void md5_sha1_init ( struct digest_algorithm *digest __unused,
void * ctx )
static

Initialise MD5+SHA1 algorithm.

Parameters
digestDigest algorithm
ctxMD5+SHA1 context

Definition at line 46 of file md5_sha1.c.

47 {
48 struct md5_sha1_context *context = ctx;
49
50 digest_init ( &md5_algorithm, context->md5 );
51 digest_init ( &sha1_algorithm, context->sha1 );
52}
struct golan_eq_context ctx
Definition CIB_PRM.h:0
static void digest_init(struct digest_algorithm *digest, void *ctx)
Definition crypto.h:294
struct digest_algorithm md5_algorithm
struct digest_algorithm sha1_algorithm
An MD5+SHA1 context.
Definition md5_sha1.h:19
uint8_t sha1[SHA1_CTX_SIZE]
SHA-1 context.
Definition md5_sha1.h:23
uint8_t md5[MD5_CTX_SIZE]
MD5 context.
Definition md5_sha1.h:21

References __unused, ctx, digest_init(), md5_sha1_context::md5, md5_algorithm, md5_sha1_context::sha1, and sha1_algorithm.

◆ md5_sha1_update()

void md5_sha1_update ( struct digest_algorithm *digest __unused,
void * ctx,
const void * data,
size_t len )
static

Accumulate data with MD5+SHA1 algorithm.

Parameters
digestDigest algorithm
ctxMD5+SHA1 context
dataData
lenLength of data

Definition at line 62 of file md5_sha1.c.

63 {
64 struct md5_sha1_context *context = ctx;
65
66 digest_update ( &md5_algorithm, context->md5, data, len );
67 digest_update ( &sha1_algorithm, context->sha1, data, len );
68}
ring len
Length.
Definition dwmac.h:226
uint8_t data[48]
Additional event data.
Definition ena.h:11
static void digest_update(struct digest_algorithm *digest, void *ctx, const void *data, size_t len)
Definition crypto.h:299

References __unused, ctx, data, digest_update(), len, md5_sha1_context::md5, md5_algorithm, md5_sha1_context::sha1, and sha1_algorithm.

◆ md5_sha1_final()

void md5_sha1_final ( struct digest_algorithm *digest __unused,
void * ctx,
void * out )
static

Generate MD5+SHA1 digest.

Parameters
digestDigest algorithm
ctxMD5+SHA1 context
outOutput buffer

Definition at line 77 of file md5_sha1.c.

78 {
79 struct md5_sha1_context *context = ctx;
80 struct md5_sha1_digest *output = out;
81
82 digest_final ( &md5_algorithm, context->md5, output->md5 );
83 digest_final ( &sha1_algorithm, context->sha1, output->sha1 );
84}
__be32 out[4]
Definition CIB_PRM.h:8
static void digest_final(struct digest_algorithm *digest, void *ctx, void *out)
Definition crypto.h:305
An MD5+SHA1 digest.
Definition md5_sha1.h:30

References __unused, ctx, digest_final(), md5_sha1_context::md5, md5_algorithm, out, md5_sha1_context::sha1, and sha1_algorithm.

Variable Documentation

◆ md5_sha1_sentinel

char md5_sha1_sentinel[1]

Sentinel used to avoid explicit symbol references.

Definition at line 38 of file md5_sha1.c.

Referenced by is_md5_sha1().

◆ md5_sha1_algorithm

struct digest_algorithm md5_sha1_algorithm
Initial value:
= {
.name = "md5+sha1",
.ctxsize = sizeof ( struct md5_sha1_context ),
.blocksize = sizeof ( union md5_sha1_block ),
.digestsize = sizeof ( struct md5_sha1_digest ),
.init = md5_sha1_init,
.update = md5_sha1_update,
.final = md5_sha1_final,
}
static void md5_sha1_init(struct digest_algorithm *digest __unused, void *ctx)
Initialise MD5+SHA1 algorithm.
Definition md5_sha1.c:46
static void md5_sha1_update(struct digest_algorithm *digest __unused, void *ctx, const void *data, size_t len)
Accumulate data with MD5+SHA1 algorithm.
Definition md5_sha1.c:62
static void md5_sha1_final(struct digest_algorithm *digest __unused, void *ctx, void *out)
Generate MD5+SHA1 digest.
Definition md5_sha1.c:77
char md5_sha1_sentinel[1]
Sentinel used to avoid explicit symbol references.
Definition md5_sha1.c:38
uint32_t digestsize
Digest size (i.e.
Definition pccrr.h:1
An MD5+SHA1 data block.
Definition md5_sha1.h:41

Hybrid MD5+SHA1 digest algorithm.

Definition at line 87 of file md5_sha1.c.

87 {
88 .name = "md5+sha1",
89 .ctxsize = sizeof ( struct md5_sha1_context ),
90 .blocksize = sizeof ( union md5_sha1_block ),
91 .digestsize = sizeof ( struct md5_sha1_digest ),
92 .init = md5_sha1_init,
93 .update = md5_sha1_update,
94 .final = md5_sha1_final,
95 .priv = md5_sha1_sentinel,
96};

Referenced by dummy_md5_sha1(), tls_select_cipher(), tls_send_certificate_verify(), tls_verify_signature(), tlskey_md5_sha1_apply(), tlskey_md5_sha1_expand(), tlskey_md5_sha1_save(), and tlskey_md5_sha1_secretsize().