373ce0a3创建于 4月20日历史提交
/****************************************************************************
 * apps/crypto/openssl_mbedtls_wrapper/include/openssl/sha.h
 *
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.  The
 * ASF licenses this file to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the
 * License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
 * License for the specific language governing permissions and limitations
 * under the License.
 ****************************************************************************/

#ifndef OPENSSL_MBEDTLS_WRAPPER_SHA_H
#define OPENSSL_MBEDTLS_WRAPPER_SHA_H

/****************************************************************************
 * Included Files
 ****************************************************************************/

#include <openssl/base.h>

/****************************************************************************
 * Pre-processor Definitions
 ****************************************************************************/

/* SHA256_DIGEST_LENGTH is the length of a SHA-256 digest */

#define SHA256_DIGEST_LENGTH 32

/* SHA_CBLOCK is the block size of SHA-1. */

#define SHA_CBLOCK 64

/* SHA_DIGEST_LENGTH is the length of a SHA-1 digest. */

#define SHA_DIGEST_LENGTH 20

#define SHA256_CBLOCK 64

#ifdef __cplusplus
extern "C"
{
#endif

/****************************************************************************
 * Public Types
 ****************************************************************************/

struct sha_state_st
{
  /* wpa_supplicant accesses |h0|..|h4| so we must support those names
   * for compatibility with it until it can be updated.
   */

  union
  {
    uint32_t h[5];
    struct
    {
      uint32_t h0;
      uint32_t h1;
      uint32_t h2;
      uint32_t h3;
      uint32_t h4;
    };
  };
  uint32_t Nl;
  uint32_t Nh;
  uint8_t data[SHA_CBLOCK];
  unsigned num;
};

struct sha256_state_st
{
    uint32_t h[8];
    uint32_t Nl;
    uint32_t Nh;
    uint8_t data[SHA256_CBLOCK];
    unsigned num;
    unsigned md_len;
};

/****************************************************************************
 * Public Function Prototypes
 ****************************************************************************/

/* SHA1_Init initialises |sha| and returns one. */

int SHA1_Init(SHA_CTX *sha);

/* SHA1_Update adds |len| bytes from |data| to |sha| and returns one. */

int SHA1_Update(SHA_CTX *sha, const void *data, size_t len);

/* SHA1_Final adds the final padding to |sha| and writes the
 * resulting digest to |out|, which must have at least
 * |SHA_DIGEST_LENGTH| bytes of space. It returns one.
 */

int SHA1_Final(uint8_t out[SHA_DIGEST_LENGTH], SHA_CTX *sha);

/* SHA1 writes the digest of |len| bytes from |data| to |out| and returns
 * |out|. There must be at least |SHA_DIGEST_LENGTH| bytes of space in
 * |out|.
 */

uint8_t *SHA1(const uint8_t *data, size_t len,
              uint8_t out[SHA_DIGEST_LENGTH]);

void SHA1_Transform(SHA_CTX *sha, const uint8_t block[SHA_CBLOCK]);

int SHA256_Init(SHA256_CTX *sha);

int SHA256_Update(SHA256_CTX *sha, const void *data, size_t len);

int SHA256_Final(uint8_t out[SHA256_DIGEST_LENGTH], SHA256_CTX *sha);

#ifdef __cplusplus
}
#endif

#endif /* OPENSSL_MBEDTLS_WRAPPER_SHA_H */