mcu_hi3321_watch/middleware/utils/algorithm/srp/public/srp.h
2025-05-26 20:15:20 +08:00

64 lines
1.9 KiB
C

/*
* Copyright (c) CompanyNameMagicTag 2022-2023. All rights reserved.
* Description: srp lib head.
* This file should be changed only infrequently and with great care.
*/
#ifndef __SRP_H__
#define __SRP_H__
#include "mbedtls/bignum.h"
#include "errcode.h"
#include "dfx_adapt_layer.h"
#define SRP_SUCC 1
#define SRP_FAIL 0
#define SHA256_DIGEST_LENGTH 32
#define SRP_RANDOM_SALT_LEN 20
#define SRP_HASH_LEN 32
#define srp_err_printf(fmt...) dfx_log_err(fmt)
typedef mbedtls_mpi bignum;
typedef enum {
SRP_GN_1024,
SRP_GN_3072,
SRP_GN_MAX
} srp_gntype;
typedef struct {
bignum *g;
bignum *n;
} srp_gn;
static inline uint32_t bn_num_bytes(const mbedtls_mpi *x)
{
return mbedtls_mpi_size(x);
}
static inline int32_t bn_ucmp(const mbedtls_mpi *x, const mbedtls_mpi *y)
{
return mbedtls_mpi_cmp_abs(x, y);
}
static inline int32_t bn_cmp(const mbedtls_mpi *x, const mbedtls_mpi *y)
{
return mbedtls_mpi_cmp_mpi(x, y);
}
uint32_t uapi_hash_start(uint32_t *handle);
uint32_t uapi_hash_update(uint32_t handle, const uint8_t *input_data, uint32_t input_data_len);
uint32_t uapi_hash_final(uint32_t handle, uint8_t *output_hash, uint32_t output_hash_len);
uint32_t uapi_hash_sha256(uint8_t *input_data, uint32_t input_data_len, uint8_t *output_hash);
bignum *bn_new(void);
void bn_free(bignum *a);
bignum *bn_bin2bn(const uint8_t *s, uint32_t len, bignum *ret);
int bn_bn2bin(const bignum *a, unsigned char *to);
uint32_t srp_get_random_data(uint8_t *random_data, uint16_t length);
srp_gn *srp_get_default_gn(srp_gntype type);
bignum *srp_calc_b(bignum *b, bignum *n, bignum *g, bignum *v);
int srp_verify_b_mod_n(bignum *b, bignum *n);
bignum *srp_calc_u(bignum *a, bignum *b, bignum *n);
bignum *srp_calc_server_key(bignum *a, bignum *v, bignum *u, bignum *b, bignum *n);
int srp_create_verifier_bn(const char *user, const char *pass,
bignum **salt, bignum **verifier, srp_gn *gn);
#endif