92 lines
2.3 KiB
C
92 lines
2.3 KiB
C
|
/*******************************************************************************
|
||
|
* Copyright (c) 2018, 2019 Wind River Systems, Inc. All Rights Reserved.
|
||
|
*
|
||
|
* All rights reserved. This program and the accompanying materials
|
||
|
* are made available under the terms of the Eclipse Public License v2.0
|
||
|
* and Eclipse Distribution License v1.0 which accompany this distribution.
|
||
|
*
|
||
|
* The Eclipse Public License is available at
|
||
|
* https://www.eclipse.org/legal/epl-2.0/
|
||
|
* and the Eclipse Distribution License is available at
|
||
|
* http://www.eclipse.org/org/documents/edl-v10.php.
|
||
|
*
|
||
|
* Contributors:
|
||
|
* Keith Holman - initial implementation and documentation
|
||
|
*******************************************************************************/
|
||
|
|
||
|
#if !defined(SHA1_H)
|
||
|
#define SHA1_H
|
||
|
|
||
|
#if defined(OPENSSL)
|
||
|
#include <openssl/sha.h>
|
||
|
|
||
|
/** SHA-1 Digest Length */
|
||
|
#define SHA1_DIGEST_LENGTH SHA_DIGEST_LENGTH
|
||
|
|
||
|
#else /* if defined(OPENSSL) */
|
||
|
|
||
|
#if defined(_WIN32) || defined(_WIN64)
|
||
|
#include <windows.h>
|
||
|
#include <wincrypt.h>
|
||
|
typedef struct SHA_CTX_S
|
||
|
{
|
||
|
HCRYPTPROV hProv;
|
||
|
HCRYPTHASH hHash;
|
||
|
} SHA_CTX;
|
||
|
#else /* if defined(_WIN32) || defined(_WIN64) */
|
||
|
|
||
|
#include <stdint.h>
|
||
|
typedef struct SHA_CTX_S {
|
||
|
uint32_t h[5];
|
||
|
union {
|
||
|
uint32_t w[16];
|
||
|
uint8_t buffer[64];
|
||
|
};
|
||
|
unsigned int size;
|
||
|
unsigned int total;
|
||
|
} SHA_CTX;
|
||
|
#endif /* else if defined(_WIN32) || defined(_WIN64) */
|
||
|
|
||
|
#include <stddef.h>
|
||
|
|
||
|
/** SHA-1 Digest Length (number of bytes in SHA1) */
|
||
|
#define SHA1_DIGEST_LENGTH (160/8)
|
||
|
|
||
|
/**
|
||
|
* Initializes the SHA1 hashing algorithm
|
||
|
*
|
||
|
* @param[in,out] ctx hashing context structure
|
||
|
*
|
||
|
* @see SHA1_Update
|
||
|
* @see SHA1_Final
|
||
|
*/
|
||
|
int SHA1_Init(SHA_CTX *ctx);
|
||
|
|
||
|
/**
|
||
|
* Updates a block to the SHA1 hash
|
||
|
*
|
||
|
* @param[in,out] ctx hashing context structure
|
||
|
* @param[in] data block of data to hash
|
||
|
* @param[in] len length of block to hash
|
||
|
*
|
||
|
* @see SHA1_Init
|
||
|
* @see SHA1_Final
|
||
|
*/
|
||
|
int SHA1_Update(SHA_CTX *ctx, const void *data, size_t len);
|
||
|
|
||
|
/**
|
||
|
* Produce final SHA1 hash
|
||
|
*
|
||
|
* @param[out] md SHA1 hash produced (must be atleast
|
||
|
* @p SHA1_DIGEST_LENGTH in length)
|
||
|
* @param[in,out] ctx hashing context structure
|
||
|
*
|
||
|
* @see SHA1_Init
|
||
|
* @see SHA1_Final
|
||
|
*/
|
||
|
int SHA1_Final(unsigned char *md, SHA_CTX *ctx);
|
||
|
|
||
|
#endif /* if defined(OPENSSL) */
|
||
|
#endif /* SHA1_H */
|
||
|
|