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