gateway2/Tongsuo-8.4.0/include/openssl/nizk.h
2026-07-11 13:40:57 +08:00

125 lines
7.0 KiB
C

/*
* Copyright 2023 The Tongsuo Project Authors. All Rights Reserved.
*
* Licensed under the Apache License 2.0 (the "License"). You may not use
* this file except in compliance with the License. You can obtain a copy
* in the file LICENSE in the source distribution or at
* https://github.com/Tongsuo-Project/Tongsuo/blob/master/LICENSE.txt
*/
#ifndef HEADER_NIZK_H
# define HEADER_NIZK_H
# include <stdlib.h>
# include <openssl/macros.h>
# include <openssl/opensslconf.h>
# include <openssl/types.h>
# include <openssl/pem.h>
# include <openssl/ec.h>
# include <openssl/safestack.h>
# include <openssl/zkp_transcript.h>
# include <openssl/zkpbperr.h>
# ifndef OPENSSL_NO_NIZK
# ifdef __cplusplus
extern "C" {
# endif
STACK_OF(EC_POINT);
typedef struct nizk_pub_param_st NIZK_PUB_PARAM;
typedef struct nizk_witness_st NIZK_WITNESS;
typedef struct nizk_plaintext_knowledge_ctx_st NIZK_PLAINTEXT_KNOWLEDGE_CTX;
typedef struct nizk_plaintext_knowledge_proof_st NIZK_PLAINTEXT_KNOWLEDGE_PROOF;
typedef struct nizk_plaintext_equality_ctx_st NIZK_PLAINTEXT_EQUALITY_CTX;
typedef struct nizk_plaintext_equality_proof_st NIZK_PLAINTEXT_EQUALITY_PROOF;
typedef struct nizk_dlog_knowledge_ctx_st NIZK_DLOG_KNOWLEDGE_CTX;
typedef struct nizk_dlog_knowledge_proof_st NIZK_DLOG_KNOWLEDGE_PROOF;
typedef struct nizk_dlog_equality_ctx_st NIZK_DLOG_EQUALITY_CTX;
typedef struct nizk_dlog_equality_proof_st NIZK_DLOG_EQUALITY_PROOF;
NIZK_PUB_PARAM *NIZK_PUB_PARAM_new(const EC_GROUP *group, const EC_POINT *G,
const EC_POINT *H);
void NIZK_PUB_PARAM_free(NIZK_PUB_PARAM *pp);
int NIZK_PUB_PARAM_up_ref(NIZK_PUB_PARAM *pp);
int NIZK_PUB_PARAM_down_ref(NIZK_PUB_PARAM *pp);
NIZK_WITNESS *NIZK_WITNESS_new(const NIZK_PUB_PARAM *pp, const BIGNUM *r,
const BIGNUM *v);
void NIZK_WITNESS_free(NIZK_WITNESS *witness);
int NIZK_WITNESS_up_ref(NIZK_WITNESS *witness);
int NIZK_WITNESS_down_ref(NIZK_WITNESS *witness);
NIZK_PLAINTEXT_KNOWLEDGE_CTX *NIZK_PLAINTEXT_KNOWLEDGE_CTX_new(ZKP_TRANSCRIPT *transcript,
NIZK_PUB_PARAM *pp,
NIZK_WITNESS *witness,
EC_POINT *pk,
EC_ELGAMAL_CIPHERTEXT *ct);
void NIZK_PLAINTEXT_KNOWLEDGE_CTX_free(NIZK_PLAINTEXT_KNOWLEDGE_CTX *ctx);
NIZK_PLAINTEXT_KNOWLEDGE_PROOF *NIZK_PLAINTEXT_KNOWLEDGE_PROOF_new(NIZK_PLAINTEXT_KNOWLEDGE_CTX *ctx);
void NIZK_PLAINTEXT_KNOWLEDGE_PROOF_free(NIZK_PLAINTEXT_KNOWLEDGE_PROOF *proof);
NIZK_PLAINTEXT_KNOWLEDGE_PROOF *NIZK_PLAINTEXT_KNOWLEDGE_PROOF_prove(NIZK_PLAINTEXT_KNOWLEDGE_CTX *ctx);
int NIZK_PLAINTEXT_KNOWLEDGE_PROOF_verify(NIZK_PLAINTEXT_KNOWLEDGE_CTX *ctx,
NIZK_PLAINTEXT_KNOWLEDGE_PROOF *proof);
NIZK_PLAINTEXT_EQUALITY_CTX *NIZK_PLAINTEXT_EQUALITY_CTX_new(ZKP_TRANSCRIPT *transcript,
NIZK_PUB_PARAM *pp,
NIZK_WITNESS *witness,
STACK_OF(EC_POINT) *pk,
EC_ELGAMAL_MR_CIPHERTEXT *ct);
void NIZK_PLAINTEXT_EQUALITY_CTX_free(NIZK_PLAINTEXT_EQUALITY_CTX *ctx);
NIZK_PLAINTEXT_EQUALITY_PROOF *NIZK_PLAINTEXT_EQUALITY_PROOF_new(NIZK_PLAINTEXT_EQUALITY_CTX *ctx);
void NIZK_PLAINTEXT_EQUALITY_PROOF_free(NIZK_PLAINTEXT_EQUALITY_PROOF *proof);
NIZK_PLAINTEXT_EQUALITY_PROOF *NIZK_PLAINTEXT_EQUALITY_PROOF_prove(NIZK_PLAINTEXT_EQUALITY_CTX *ctx);
int NIZK_PLAINTEXT_EQUALITY_PROOF_verify(NIZK_PLAINTEXT_EQUALITY_CTX *ctx,
NIZK_PLAINTEXT_EQUALITY_PROOF *proof);
NIZK_DLOG_KNOWLEDGE_CTX *NIZK_DLOG_KNOWLEDGE_CTX_new(ZKP_TRANSCRIPT *transcript,
NIZK_PUB_PARAM *pp,
NIZK_WITNESS *witness);
void NIZK_DLOG_KNOWLEDGE_CTX_free(NIZK_DLOG_KNOWLEDGE_CTX *ctx);
NIZK_DLOG_KNOWLEDGE_PROOF *NIZK_DLOG_KNOWLEDGE_PROOF_new(NIZK_DLOG_KNOWLEDGE_CTX *ctx);
void NIZK_DLOG_KNOWLEDGE_PROOF_free(NIZK_DLOG_KNOWLEDGE_PROOF *proof);
NIZK_DLOG_KNOWLEDGE_PROOF *NIZK_DLOG_KNOWLEDGE_PROOF_prove(NIZK_DLOG_KNOWLEDGE_CTX *ctx);
int NIZK_DLOG_KNOWLEDGE_PROOF_verify(NIZK_DLOG_KNOWLEDGE_CTX *ctx,
NIZK_DLOG_KNOWLEDGE_PROOF *proof);
NIZK_DLOG_EQUALITY_CTX *NIZK_DLOG_EQUALITY_CTX_new(ZKP_TRANSCRIPT *transcript,
NIZK_PUB_PARAM *pp,
NIZK_WITNESS *witness,
const EC_POINT *G,
const EC_POINT *H);
void NIZK_DLOG_EQUALITY_CTX_free(NIZK_DLOG_EQUALITY_CTX *ctx);
NIZK_DLOG_EQUALITY_PROOF *NIZK_DLOG_EQUALITY_PROOF_new(NIZK_DLOG_EQUALITY_CTX *ctx);
void NIZK_DLOG_EQUALITY_PROOF_free(NIZK_DLOG_EQUALITY_PROOF *proof);
NIZK_DLOG_EQUALITY_PROOF *NIZK_DLOG_EQUALITY_PROOF_prove(NIZK_DLOG_EQUALITY_CTX *ctx);
int NIZK_DLOG_EQUALITY_PROOF_verify(NIZK_DLOG_EQUALITY_CTX *ctx, NIZK_DLOG_EQUALITY_PROOF *proof);
size_t NIZK_PUB_PARAM_encode(const NIZK_PUB_PARAM *pp, unsigned char *out, size_t size);
NIZK_PUB_PARAM *NIZK_PUB_PARAM_decode(const unsigned char *in, size_t size);
size_t NIZK_WITNESS_encode(const NIZK_WITNESS *witness, unsigned char *out,
size_t size, int flag);
NIZK_WITNESS *NIZK_WITNESS_decode(const unsigned char *in, size_t size, int flag);
size_t NIZK_PLAINTEXT_KNOWLEDGE_PROOF_encode(const NIZK_PLAINTEXT_KNOWLEDGE_PROOF *proof,
unsigned char *out, size_t size);
NIZK_PLAINTEXT_KNOWLEDGE_PROOF *NIZK_PLAINTEXT_KNOWLEDGE_PROOF_decode(const unsigned char *in,
size_t size);
size_t NIZK_PLAINTEXT_EQUALITY_PROOF_encode(const NIZK_PLAINTEXT_EQUALITY_PROOF *proof,
unsigned char *out, size_t size);
NIZK_PLAINTEXT_EQUALITY_PROOF *NIZK_PLAINTEXT_EQUALITY_PROOF_decode(const unsigned char *in,
size_t size);
size_t NIZK_DLOG_KNOWLEDGE_PROOF_encode(const NIZK_DLOG_KNOWLEDGE_PROOF *proof,
unsigned char *out, size_t size);
NIZK_DLOG_KNOWLEDGE_PROOF *NIZK_DLOG_KNOWLEDGE_PROOF_decode(const unsigned char *in,
size_t size);
size_t NIZK_DLOG_EQUALITY_PROOF_encode(const NIZK_DLOG_EQUALITY_PROOF *proof,
unsigned char *out, size_t size);
NIZK_DLOG_EQUALITY_PROOF *NIZK_DLOG_EQUALITY_PROOF_decode(const unsigned char *in,
size_t size);
# ifdef __cplusplus
}
# endif
# endif
#endif