iPXE
Data Structures | Functions | Variables
digest_cmd.c File Reference

Digest commands. More...

#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <getopt.h>
#include <ipxe/command.h>
#include <ipxe/parseopt.h>
#include <ipxe/image.h>
#include <ipxe/crypto.h>
#include <ipxe/md5.h>
#include <ipxe/sha1.h>
#include <usr/imgmgmt.h>

Go to the source code of this file.

Data Structures

struct  digest_options
 "digest" options More...

Functions

 FILE_LICENCE (GPL2_OR_LATER)
static int digest_exec (int argc, char **argv, struct digest_algorithm *digest)
 The "digest" command.
static int md5sum_exec (int argc, char **argv)
static int sha1sum_exec (int argc, char **argv)

Variables

static struct option_descriptor digest_opts [] = {}
 "digest" option list
static struct command_descriptor digest_cmd
 "digest" command descriptor
struct command md5sum_command __command

Detailed Description

Digest commands.

Definition in file digest_cmd.c.


Function Documentation

FILE_LICENCE ( GPL2_OR_LATER  )
static int digest_exec ( int  argc,
char **  argv,
struct digest_algorithm digest 
) [static]

The "digest" command.

Parameters:
argcArgument count
argvArgument list
digestDigest algorithm
Return values:
rcReturn status code

Definition at line 59 of file digest_cmd.c.

References copy_from_user(), digest_algorithm::ctxsize, image::data, digest_final(), digest_init(), digest_update(), digest_algorithm::digestsize, imgacquire(), image::len, len, image::name, offset, optind, parse_options(), printf(), and rc.

Referenced by md5sum_exec(), and sha1sum_exec().

                                                           {
        struct digest_options opts;
        struct image *image;
        uint8_t digest_ctx[digest->ctxsize];
        uint8_t digest_out[digest->digestsize];
        uint8_t buf[128];
        size_t offset;
        size_t len;
        size_t frag_len;
        int i;
        unsigned j;
        int rc;

        /* Parse options */
        if ( ( rc = parse_options ( argc, argv, &digest_cmd, &opts ) ) != 0 )
                return rc;

        for ( i = optind ; i < argc ; i++ ) {

                /* Acquire image */
                if ( ( rc = imgacquire ( argv[i], 0, &image ) ) != 0 )
                        continue;
                offset = 0;
                len = image->len;

                /* calculate digest */
                digest_init ( digest, digest_ctx );
                while ( len ) {
                        frag_len = len;
                        if ( frag_len > sizeof ( buf ) )
                                frag_len = sizeof ( buf );
                        copy_from_user ( buf, image->data, offset, frag_len );
                        digest_update ( digest, digest_ctx, buf, frag_len );
                        len -= frag_len;
                        offset += frag_len;
                }
                digest_final ( digest, digest_ctx, digest_out );

                for ( j = 0 ; j < sizeof ( digest_out ) ; j++ )
                        printf ( "%02x", digest_out[j] );

                printf ( "  %s\n", image->name );
        }

        return 0;
}
static int md5sum_exec ( int  argc,
char **  argv 
) [static]

Definition at line 107 of file digest_cmd.c.

References digest_exec(), and md5_algorithm.

                                                 {
        return digest_exec ( argc, argv, &md5_algorithm );
}
static int sha1sum_exec ( int  argc,
char **  argv 
) [static]

Definition at line 111 of file digest_cmd.c.

References digest_exec(), and sha1_algorithm.

                                                  {
        return digest_exec ( argc, argv, &sha1_algorithm );
}

Variable Documentation

struct option_descriptor digest_opts[] = {} [static]

"digest" option list

Definition at line 44 of file digest_cmd.c.

struct command_descriptor digest_cmd [static]
Initial value:
        COMMAND_DESC ( struct digest_options, digest_opts, 1, MAX_ARGUMENTS,
                       "<image> [<image>...]" )

"digest" command descriptor

Definition at line 47 of file digest_cmd.c.

struct command sha1sum_command __command
Initial value:
 {
        .name = "md5sum",
        .exec = md5sum_exec,
}

Definition at line 115 of file digest_cmd.c.