sha1.h revision 25b3c049e70834cf33790a28643ab058b507b35c
19f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Declaration of functions and data types used for SHA1 sum computing
29f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   library functions.
39f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   Copyright (C) 2008 Red Hat, Inc.
49f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   This file is part of Red Hat elfutils.
59f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   Written by Ulrich Drepper <drepper@redhat.com>, 2008.
69f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
79f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   Red Hat elfutils is free software; you can redistribute it and/or modify
89f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   it under the terms of the GNU General Public License as published by the
99f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   Free Software Foundation; version 2 of the License.
109f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
119f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   Red Hat elfutils is distributed in the hope that it will be useful, but
129f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   WITHOUT ANY WARRANTY; without even the implied warranty of
139f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
149f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   General Public License for more details.
159f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
169f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   You should have received a copy of the GNU General Public License along
179f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   with Red Hat elfutils; if not, write to the Free Software Foundation,
189f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA.
199f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
209f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   Red Hat elfutils is an included package of the Open Invention Network.
219f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   An included package of the Open Invention Network is a package for which
229f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   Open Invention Network licensees cross-license their patents.  No patent
239f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   license is granted, either expressly or impliedly, by designation as an
249f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   included package.  Should you wish to participate in the Open Invention
259f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   Network licensing program, please visit www.openinventionnetwork.com
269f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   <http://www.openinventionnetwork.com>.  */
279f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
289f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#ifndef _SHA1_H
299f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define _SHA1_H 1
309f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
319f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include <limits.h>
329f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include <stdint.h>
339f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#include <stdio.h>
349f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
359f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define SHA1_DIGEST_SIZE 20
369f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#define SHA1_BLOCK_SIZE 64
379f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
389f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projecttypedef uint32_t sha1_uint32;
399f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projecttypedef uintptr_t sha1_uintptr;
409f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
419f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Structure to save state of computation between the single steps.  */
429f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectstruct sha1_ctx
439f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project{
449f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  sha1_uint32 A;
459f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  sha1_uint32 B;
469f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  sha1_uint32 C;
479f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  sha1_uint32 D;
489f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  sha1_uint32 E;
499f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
509f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  sha1_uint32 total[2];
519f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  sha1_uint32 buflen;
529f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project  char buffer[128] __attribute__ ((__aligned__ (__alignof__ (sha1_uint32))));
539f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project};
549f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
559f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Initialize structure containing state of computation.  */
569f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectextern void sha1_init_ctx (struct sha1_ctx *ctx);
579f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
589f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Starting with the result of former calls of this function (or the
599f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   initialization function update the context for the next LEN bytes
609f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   starting at BUFFER.
619f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   It is necessary that LEN is a multiple of 64!!! */
629f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectextern void sha1_process_block (const void *buffer, size_t len,
639f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				struct sha1_ctx *ctx);
649f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
659f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Starting with the result of former calls of this function (or the
669f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   initialization function update the context for the next LEN bytes
679f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   starting at BUFFER.
689f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   It is NOT required that LEN is a multiple of 64.  */
699f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectextern void sha1_process_bytes (const void *buffer, size_t len,
709f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project				struct sha1_ctx *ctx);
719f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
729f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Process the remaining bytes in the buffer and put result from CTX
739f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   in first 20 bytes following RESBUF.  The result is always in little
749f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   endian byte order, so that a byte-wise output yields to the wanted
759f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   ASCII representation of the message digest.
769f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
779f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   IMPORTANT: On some systems it is required that RESBUF is correctly
789f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   aligned for a 32 bits value.  */
799f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectextern void *sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf);
809f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
819f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
829f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project/* Put result from CTX in first 20 bytes following RESBUF.  The result is
839f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   always in little endian byte order, so that a byte-wise output yields
849f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   to the wanted ASCII representation of the message digest.
859f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
869f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   IMPORTANT: On some systems it is required that RESBUF is correctly
879f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project   aligned for a 32 bits value.  */
889f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Projectextern void *sha1_read_ctx (const struct sha1_ctx *ctx, void *resbuf);
899f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project
909f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project#endif /* sha1.h */
919f5d49a1588e438ae7ceabd0c94172117e3303aaThe Android Open Source Project