/* =============================================================================
 * sha256_backend.h - SHA-256 추상 인터페이스
 *
 * 서명(sig.c)은 이 인터페이스만 사용한다. 기본 구현은 sha256_sw.c (공개 도메인,
 * 자급식)이며, 원하면 mbedTLS 백엔드로 교체할 수 있다(둘 다 동일 다이제스트).
 * 자급식 구현 덕분에 TLS 스택 없이도 호스트/ARM 컴파일 게이트에서 검증 가능.
 * ===========================================================================*/
#ifndef SHA256_BACKEND_H
#define SHA256_BACKEND_H

#include <stdint.h>
#include <stddef.h>

#define SHA256_DIGEST_LEN 32

typedef struct {
    uint32_t state[8];
    uint64_t bitlen;
    uint8_t  buffer[64];
    uint32_t buflen;
} sha256_ctx;

void sha256_init(sha256_ctx *ctx);
void sha256_update(sha256_ctx *ctx, const uint8_t *data, size_t len);
void sha256_final(sha256_ctx *ctx, uint8_t out[SHA256_DIGEST_LEN]);

/* 원샷 헬퍼: out = SHA256(data[0..len)) */
void sha256(const uint8_t *data, size_t len, uint8_t out[SHA256_DIGEST_LEN]);

#endif /* SHA256_BACKEND_H */
