| /**************************************************************************** |
| * arch/risc-v/src/esp32c3-legacy/esp32c3_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. |
| * |
| ****************************************************************************/ |
| |
| /**************************************************************************** |
| * Included Files |
| ****************************************************************************/ |
| |
| #ifndef __ARCH_RISCV_SRC_ESP32C3_LEGACY_ESP32C3_SHA_H |
| #define __ARCH_RISCV_SRC_ESP32C3_LEGACY_ESP32C3_SHA_H |
| |
| #include <nuttx/config.h> |
| #include <stdint.h> |
| |
| #ifndef __ASSEMBLY__ |
| |
| #undef EXTERN |
| #if defined(__cplusplus) |
| #define EXTERN extern "C" |
| extern "C" |
| { |
| #else |
| #define EXTERN extern |
| #endif |
| |
| /**************************************************************************** |
| * Public Types |
| ****************************************************************************/ |
| |
| enum esp32c3_sha_type_e |
| { |
| ESP32C3_SHA1_1 = 0, |
| ESP32C3_SHA2_224, |
| ESP32C3_SHA2_256, |
| ESP32C3_SHA3_384, |
| ESP32C3_SHA3_512, |
| ESP32C3_SHA_TYPE_MAX |
| }; |
| |
| enum esp32c3_sha_state_e |
| { |
| ESP32C3_SHA_STATE_INIT, |
| ESP32C3_SHA_STATE_IN_PROCESS |
| }; |
| |
| /* SHA-1 context structure */ |
| |
| struct esp32c3_sha1_context_s |
| { |
| uint32_t total[2]; /* number of bytes processed */ |
| uint32_t state[5]; /* intermediate digest state */ |
| unsigned char buffer[64]; /* data block being processed */ |
| bool first_block; /* if first then true else false */ |
| enum esp32c3_sha_type_e mode; |
| enum esp32c3_sha_state_e sha_state; |
| }; |
| |
| /* SHA-256 context structure */ |
| |
| struct esp32c3_sha256_context_s |
| { |
| uint32_t total[2]; /* number of bytes processed */ |
| uint32_t state[8]; /* intermediate digest state */ |
| unsigned char buffer[64]; /* data block being processed */ |
| bool first_block; /* if first then true, else false */ |
| enum esp32c3_sha_type_e mode; |
| enum esp32c3_sha_state_e sha_state; |
| }; |
| |
| /* SHA-512 context structure */ |
| |
| struct esp32c3_sha512_context_s |
| { |
| uint64_t total[2]; /* number of bytes processed */ |
| uint64_t state[8]; /* intermediate digest state */ |
| uint8_t buffer[128]; /* data block being processed */ |
| |
| bool first_block; /* if first then true, else false */ |
| enum esp32c3_sha_type_e mode; |
| enum esp32c3_sha_state_e sha_state; |
| }; |
| |
| /**************************************************************************** |
| * Name: esp32c3_sha_init |
| * |
| * Description: |
| * Initialize ESP32-C3 SHA hardware. |
| * |
| * Input Parameters: |
| * None |
| * |
| * Returned Value: |
| * OK is returned on success. Otherwise, a negated errno value is returned. |
| * |
| ****************************************************************************/ |
| |
| int esp32c3_sha_init(void); |
| |
| /**************************************************************************** |
| * Name: esp32c3_sha1_init |
| * |
| * Description: |
| * Initializes a SHA-1 context. |
| * |
| * Input Parameters: |
| * ctx - The SHA-1 context to initialize |
| * |
| * Returned Value: |
| * None. |
| * |
| ****************************************************************************/ |
| |
| void esp32c3_sha1_init(struct esp32c3_sha1_context_s *ctx); |
| |
| /**************************************************************************** |
| * Name: esp32c3_sha1_starts |
| * |
| * Description: |
| * Starts a SHA-1 checksum calculation. |
| * |
| * Input Parameters: |
| * ctx - The SHA-1 context to initialize |
| * |
| * Returned Value: |
| * OK is returned on success. |
| * |
| ****************************************************************************/ |
| |
| int esp32c3_sha1_starts(struct esp32c3_sha1_context_s *ctx); |
| |
| /**************************************************************************** |
| * Name: esp32c3_sha1_update |
| * |
| * Description: |
| * Feeds an input buffer into an ongoing SHA-1 checksum calculation. |
| * |
| * Input Parameters: |
| * ctx - The SHA-1 context to use |
| * input - The buffer holding the input data |
| * ilen - The length of the input data in Bytes |
| * |
| * Returned Value: |
| * OK is returned on success. |
| * Otherwise, a negated errno value is returned. |
| * |
| ****************************************************************************/ |
| |
| int esp32c3_sha1_update(struct esp32c3_sha1_context_s *ctx, |
| const unsigned char *input, |
| size_t ilen); |
| |
| /**************************************************************************** |
| * Name: esp32c3_sha1_finish |
| * |
| * Description: |
| * Finishes the SHA-1 operation, |
| * and writes the result to the output buffer. |
| * |
| * Input Parameters: |
| * ctx - The SHA-1 context to use |
| * output - The SHA-1 checksum result |
| * |
| * Returned Value: |
| * OK is returned on success. |
| * Otherwise, a negated errno value is returned. |
| * |
| ****************************************************************************/ |
| |
| int esp32c3_sha1_finish(struct esp32c3_sha1_context_s *ctx, |
| unsigned char output[20]); |
| |
| /**************************************************************************** |
| * Name: esp32c3_sha256_init |
| * |
| * Description: |
| * Initializes a SHA-256 context. |
| * |
| * Input Parameters: |
| * ctx - The SHA-256 context to initialize |
| * |
| * Returned Value: |
| * None. |
| * |
| ****************************************************************************/ |
| |
| void esp32c3_sha256_init(struct esp32c3_sha256_context_s *ctx); |
| |
| /**************************************************************************** |
| * Name: esp32c3_sha256_starts |
| * |
| * Description: |
| * Starts a SHA-224 or SHA-256 checksum calculation. |
| * |
| * Input Parameters: |
| * ctx - The SHA-256 context to initialize |
| * is224 - Determines which function to use |
| * |
| * Returned Value: |
| * OK is returned on success. |
| * |
| ****************************************************************************/ |
| |
| int esp32c3_sha256_starts(struct esp32c3_sha256_context_s *ctx, bool is224); |
| |
| /**************************************************************************** |
| * Name: esp32c3_sha256_update |
| * |
| * Description: |
| * Feeds an input buffer into an ongoing SHA-224 or SHA-256 |
| * checksum calculation. |
| * |
| * Input Parameters: |
| * ctx - The SHA-256 context to use |
| * input - The buffer holding the input data |
| * ilen - The length of the input data in Bytes |
| * |
| * Returned Value: |
| * OK is returned on success. |
| * Otherwise, a negated errno value is returned. |
| * |
| ****************************************************************************/ |
| |
| int esp32c3_sha256_update(struct esp32c3_sha256_context_s *ctx, |
| const unsigned char *input, |
| size_t ilen); |
| |
| /**************************************************************************** |
| * Name: esp32c3_sha256_finish |
| * |
| * Description: |
| * Finishes the SHA-224 or SHA-256 operation, and writes the result to |
| * the output buffer. |
| * |
| * Input Parameters: |
| * ctx - The SHA-256 context to use |
| * output - The SHA-256 checksum result |
| * |
| * Returned Value: |
| * OK is returned on success. |
| * Otherwise, a negated errno value is returned. |
| * |
| ****************************************************************************/ |
| |
| int esp32c3_sha256_finish(struct esp32c3_sha256_context_s *ctx, |
| unsigned char output[32]); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| #undef EXTERN |
| |
| #endif /* __ASSEMBLY__ */ |
| #endif /* __ARCH_RISCV_SRC_ESP32C3_LEGACY_ESP32C3_SHA_H */ |