API参考
载入中...
搜索中...
未找到
auth_privpass_token.h
1/*
2 * This file is part of the openHiTLS project.
3 *
4 * openHiTLS is licensed under the Mulan PSL v2.
5 * You can use this software according to the terms and conditions of the Mulan PSL v2.
6 * You may obtain a copy of Mulan PSL v2 at:
7 *
8 * http://license.coscl.org.cn/MulanPSL2
9 *
10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13 * See the Mulan PSL v2 for more details.
14 */
15
16#ifndef AUTH_PRIVPASS_TOKEN_H
17#define AUTH_PRIVPASS_TOKEN_H
18
19#include <stdint.h>
20#include "bsl_params.h"
21#include "bsl_obj.h"
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
33
40
41/* Token types for different stages of the Private Pass protocol */
42typedef enum {
43 HITLS_AUTH_PRIVPASS_TOKEN_CHALLENGE_REQUEST = 1, // Initial request for challenge
44 HITLS_AUTH_PRIVPASS_TOKEN_CHALLENGE = 2, // Challenge from server
45 HITLS_AUTH_PRIVPASS_TOKEN_REQUEST = 3, // Token request with blinded message
46 HITLS_AUTH_PRIVPASS_TOKEN_RESPONSE = 4, // Server's response with blind signature
47 HITLS_AUTH_PRIVPASS_TOKEN_INSTANCE = 5, // Final token instance
48} HITLS_AUTH_PrivPassTokenType;
49
50/* Token types for different stages of the Private Pass protocol */
51typedef enum {
52 HITLS_AUTH_PRIVPASS_PRV_VERIFY_TOKENS = 1, // Private key verification tokens
53 HITLS_AUTH_PRIVPASS_PUB_VERIFY_TOKENS = 2, // Public key verification tokens
54} HITLS_AUTH_PrivPassType;
55
56/* Commands for token operations and parameter retrieval */
57typedef enum {
58 HITLS_AUTH_PRIVPASS_GET_TOKENCHALLENGEREQUEST_INFO = 1,
59 HITLS_AUTH_PRIVPASS_GET_TOKENCHALLENGE_TYPE = 2,
60 HITLS_AUTH_PRIVPASS_GET_TOKENCHALLENGE_ISSUERNAME = 3,
61 HITLS_AUTH_PRIVPASS_GET_TOKENCHALLENGE_REDEMPTION = 4,
62 HITLS_AUTH_PRIVPASS_GET_TOKENCHALLENGE_ORIGININFO = 5,
63 HITLS_AUTH_PRIVPASS_GET_TOKENREQUEST_TYPE = 6,
64 HITLS_AUTH_PRIVPASS_GET_TOKENREQUEST_TRUNCATEDTOKENKEYID = 7,
65 HITLS_AUTH_PRIVPASS_GET_TOKENREQUEST_BLINDEDMSG = 8,
66 HITLS_AUTH_PRIVPASS_GET_TOKENRESPONSE_INFO = 9,
67 HITLS_AUTH_PRIVPASS_GET_TOKEN_TYPE = 10,
68 HITLS_AUTH_PRIVPASS_GET_TOKEN_NONCE = 11,
69 HITLS_AUTH_PRIVPASS_GET_TOKEN_CHALLENGEDIGEST = 12,
70 HITLS_AUTH_PRIVPASS_GET_TOKEN_TOKENKEYID = 13,
71 HITLS_AUTH_PRIVPASS_GET_TOKEN_AUTHENTICATOR = 14,
72 HITLS_AUTH_PRIVPASS_GET_CTX_TOKENKEYID = 15,
73 HITLS_AUTH_PRIVPASS_GET_CTX_TRUNCATEDTOKENKEYID = 16,
74 HITLS_AUTH_PRIVPASS_GET_CTX_NONCE = 17,
75} HITLS_AUTH_PrivPassCmd;
76
77typedef enum {
78 HITLS_AUTH_PRIVPASS_CRYPTO_RSA = BSL_CID_RSA,
79 HITLS_AUTH_PRIVPASS_CRYPTO_SHA256 = BSL_CID_SHA256,
80 HITLS_AUTH_PRIVPASS_CRYPTO_SHA384 = BSL_CID_SHA384,
81} HITLS_AUTH_PrivPassCryptAlgId;
82
83typedef enum {
84 HITLS_AUTH_PRIVPASS_NEW_PKEY_CTX_CB = 1,
85 HITLS_AUTH_PRIVPASS_FREE_PKEY_CTX_CB = 2,
86 HITLS_AUTH_PRIVPASS_DIGEST_CB = 3,
87 HITLS_AUTH_PRIVPASS_BLIND_CB = 4,
88 HITLS_AUTH_PRIVPASS_UNBLIND_CB = 5,
89 HITLS_AUTH_PRIVPASS_SIGNDATA_CB = 6,
90 HITLS_AUTH_PRIVPASS_VERIFY_CB = 7,
91 HITLS_AUTH_PRIVPASS_DECODE_PUBKEY_CB = 8,
92 HITLS_AUTH_PRIVPASS_DECODE_PRVKEY_CB = 9,
93 HITLS_AUTH_PRIVPASS_CHECK_KEYPAIR_CB = 10,
94 HITLS_AUTH_PRIVPASS_RANDOM_CB = 11,
95} HITLS_AUTH_PrivPassCryptCbType;
96
108typedef void *(*HITLS_AUTH_PrivPassNewPkeyCtx)(void *libCtx, const char *attrName, int32_t algId);
109
116typedef void (*HITLS_AUTH_PrivPassFreePkeyCtx)(void *pkeyCtx);
117
132typedef int32_t (*HITLS_AUTH_PrivPassDigest)(void *libCtx, const char *attrName, int32_t algId, const uint8_t *input,
133 uint32_t inputLen, uint8_t *digest, uint32_t *digestLen);
134
150typedef int32_t (*HITLS_AUTH_PrivPassBlind)(void *pkeyCtx, int32_t algId, const uint8_t *data,
151 uint32_t dataLen, uint8_t *blindedData, uint32_t *blindedDataLen);
152
167typedef int32_t (*HITLS_AUTH_PrivPassUnblind)(void *pkeyCtx, const uint8_t *blindedData,
168 uint32_t blindedDataLen, uint8_t *data, uint32_t *dataLen);
169
183typedef int32_t (*HITLS_AUTH_PrivPassSignData)(void *pkeyCtx, const uint8_t *data, uint32_t dataLen,
184 uint8_t *sign, uint32_t *signLen);
185
200typedef int32_t (*HITLS_AUTH_PrivPassVerify)(void *pkeyCtx, int32_t algId, const uint8_t *data, uint32_t dataLen,
201 const uint8_t *sign, uint32_t signLen);
202
217typedef int32_t (*HITLS_AUTH_PrivPassDecodePubKey)(void *libCtx, const char *attrName, uint8_t *pubKey,
218 uint32_t pubKeyLen, void **pkeyCtx);
219
235typedef int32_t (*HITLS_AUTH_PrivPassDecodePrvKey)(void *libCtx, const char *attrName, void *param, uint8_t *prvKey,
236 uint32_t prvKeyLen, void **pkeyCtx);
237
248typedef int32_t (*HITLS_AUTH_PrivPassCheckKeyPair)(void *pubKeyCtx, void *prvKeyCtx);
249
260typedef int32_t (*HITLS_AUTH_PrivPassRandom)(uint8_t *buffer, uint32_t bufferLen);
261
271
289
297
310int32_t HITLS_AUTH_PrivPassSetCryptCb(HITLS_AUTH_PrivPassCtx *ctx, int32_t cbType, void *cryptCb);
311
326 uint8_t *buffer, uint32_t *outBuffLen);
327
342int32_t HITLS_AUTH_PrivPassDeserialization(HITLS_AUTH_PrivPassCtx *ctx, int32_t tokenType, const uint8_t *buffer,
343 uint32_t buffLen, HITLS_AUTH_PrivPassToken **object);
344
358int32_t HITLS_AUTH_PrivPassGenTokenChallenge(HITLS_AUTH_PrivPassCtx *ctx, const BSL_Param *param,
359 HITLS_AUTH_PrivPassToken **challenge);
360
373 HITLS_AUTH_PrivPassToken **tokenRequest);
374
387 HITLS_AUTH_PrivPassToken **tokenResponse);
388
402 const HITLS_AUTH_PrivPassToken *tokenResponse, HITLS_AUTH_PrivPassToken **token);
403
416 const HITLS_AUTH_PrivPassToken *token);
417
431int32_t HITLS_AUTH_PrivPassSetPubkey(HITLS_AUTH_PrivPassCtx *ctx, uint8_t *pki, uint32_t pkiLen);
432
446int32_t HITLS_AUTH_PrivPassSetPrvkey(HITLS_AUTH_PrivPassCtx *ctx, void *param, uint8_t *ski, uint32_t skiLen);
447
460int32_t HITLS_AUTH_PrivPassTokenCtrl(HITLS_AUTH_PrivPassToken *object, int32_t cmd, void *param, uint32_t paramLen);
461
474int32_t HITLS_AUTH_PrivPassCtxCtrl(HITLS_AUTH_PrivPassCtx *ctx, int32_t cmd, void *param, uint32_t paramLen);
475
476#ifdef __cplusplus
477}
478#endif
479
480#endif // AUTH_PRIVPASS_TOKEN_H
int32_t(* HITLS_AUTH_PrivPassCheckKeyPair)(void *pubKeyCtx, void *prvKeyCtx)
Verifies that a public/private key pair matches.
定义 auth_privpass_token.h:248
int32_t(* HITLS_AUTH_PrivPassDecodePrvKey)(void *libCtx, const char *attrName, void *param, uint8_t *prvKey, uint32_t prvKeyLen, void **pkeyCtx)
Decodes a private key and gen a key ctx. The default algorithm callback implementation is supported o...
定义 auth_privpass_token.h:235
int32_t HITLS_AUTH_PrivPassVerifyToken(HITLS_AUTH_PrivPassCtx *ctx, const HITLS_AUTH_PrivPassToken *tokenChallenge, const HITLS_AUTH_PrivPassToken *token)
Verify the validity of a token.
定义 privpass_token.c:476
int32_t HITLS_AUTH_PrivPassGenTokenChallenge(HITLS_AUTH_PrivPassCtx *ctx, const BSL_Param *param, HITLS_AUTH_PrivPassToken **challenge)
Generate a token challenge. The challenge token is generated based on the input param....
定义 privpass_token.c:112
void(* HITLS_AUTH_PrivPassFreePkeyCtx)(void *pkeyCtx)
Frees a previously allocated key context.
定义 auth_privpass_token.h:116
int32_t(* HITLS_AUTH_PrivPassBlind)(void *pkeyCtx, int32_t algId, const uint8_t *data, uint32_t dataLen, uint8_t *blindedData, uint32_t *blindedDataLen)
Blinds data using the key context and hash algorithm for blind signature protocol....
定义 auth_privpass_token.h:150
void HITLS_AUTH_PrivPassFreeCtx(HITLS_AUTH_PrivPassCtx *ctx)
Free a PrivPass context object.
定义 privpass_token_util.c:724
int32_t HITLS_AUTH_PrivPassSetCryptCb(HITLS_AUTH_PrivPassCtx *ctx, int32_t cbType, void *cryptCb)
Set cryptographic callback functions for the context. When setting callbacks, the input callbacks wil...
定义 privpass_token_util.c:740
int32_t(* HITLS_AUTH_PrivPassVerify)(void *pkeyCtx, int32_t algId, const uint8_t *data, uint32_t dataLen, const uint8_t *sign, uint32_t signLen)
Verifies a signature using the public key context.
定义 auth_privpass_token.h:200
int32_t(* HITLS_AUTH_PrivPassDecodePubKey)(void *libCtx, const char *attrName, uint8_t *pubKey, uint32_t pubKeyLen, void **pkeyCtx)
Decodes a public key and gen a key ctx. The default algorithm callback implementation is supported on...
定义 auth_privpass_token.h:217
HITLS_AUTH_PrivPassCtx * HITLS_AUTH_PrivPassNewCtx(int32_t protocolType)
Create a new PrivPass context object, all library callbacks by default are setted when created.
定义 privpass_token_util.c:709
int32_t HITLS_AUTH_PrivPassSetPubkey(HITLS_AUTH_PrivPassCtx *ctx, uint8_t *pki, uint32_t pkiLen)
Set the public key for the ctx. We support the repeated setting of the public key....
定义 privpass_token.c:518
int32_t HITLS_AUTH_PrivPassGenTokenResponse(HITLS_AUTH_PrivPassCtx *ctx, const HITLS_AUTH_PrivPassToken *tokenRequest, HITLS_AUTH_PrivPassToken **tokenResponse)
Generate a token response.
定义 privpass_token.c:309
int32_t HITLS_AUTH_PrivPassCtxCtrl(HITLS_AUTH_PrivPassCtx *ctx, int32_t cmd, void *param, uint32_t paramLen)
Control interface for getting/setting various parameters in Priv-Pass Ctx.
定义 privpass_token_util.c:1095
int32_t(* HITLS_AUTH_PrivPassRandom)(uint8_t *buffer, uint32_t bufferLen)
Generates random bytes.
定义 auth_privpass_token.h:260
int32_t(* HITLS_AUTH_PrivPassDigest)(void *libCtx, const char *attrName, int32_t algId, const uint8_t *input, uint32_t inputLen, uint8_t *digest, uint32_t *digestLen)
Computes a cryptographic digest of the input data.
定义 auth_privpass_token.h:132
int32_t HITLS_AUTH_PrivPassSetPrvkey(HITLS_AUTH_PrivPassCtx *ctx, void *param, uint8_t *ski, uint32_t skiLen)
Set the private key for the ctx. We support the repeated setting of the private key....
定义 privpass_token.c:563
int32_t HITLS_AUTH_PrivPassDeserialization(HITLS_AUTH_PrivPassCtx *ctx, int32_t tokenType, const uint8_t *buffer, uint32_t buffLen, HITLS_AUTH_PrivPassToken **object)
Deserialize binary data into a PrivPass token object. The object needs to be freed by the caller usin...
定义 privpass_token_util.c:510
int32_t(* HITLS_AUTH_PrivPassUnblind)(void *pkeyCtx, const uint8_t *blindedData, uint32_t blindedDataLen, uint8_t *data, uint32_t *dataLen)
Unblinds previously blinded data to reveal the actual signature. The default algorithm callback imple...
定义 auth_privpass_token.h:167
int32_t HITLS_AUTH_PrivPassGenTokenReq(HITLS_AUTH_PrivPassCtx *ctx, const HITLS_AUTH_PrivPassToken *tokenChallenge, HITLS_AUTH_PrivPassToken **tokenRequest)
Generate a token request.
定义 privpass_token.c:215
int32_t HITLS_AUTH_PrivPassTokenCtrl(HITLS_AUTH_PrivPassToken *object, int32_t cmd, void *param, uint32_t paramLen)
Control interface for getting/setting various parameters in token object.
定义 privpass_token_util.c:1013
int32_t HITLS_AUTH_PrivPassGenToken(HITLS_AUTH_PrivPassCtx *ctx, const HITLS_AUTH_PrivPassToken *tokenChallenge, const HITLS_AUTH_PrivPassToken *tokenResponse, HITLS_AUTH_PrivPassToken **token)
Generate final token.
定义 privpass_token.c:379
struct PrivPass_Token HITLS_AUTH_PrivPassToken
定义 auth_privpass_token.h:39
int32_t HITLS_AUTH_PrivPassSerialization(HITLS_AUTH_PrivPassCtx *ctx, const HITLS_AUTH_PrivPassToken *object, uint8_t *buffer, uint32_t *outBuffLen)
Serialize a PrivPass token object to binary format, If the object == NULL, outbufferlen returns the l...
定义 privpass_token_util.c:556
int32_t(* HITLS_AUTH_PrivPassSignData)(void *pkeyCtx, const uint8_t *data, uint32_t dataLen, uint8_t *sign, uint32_t *signLen)
Signs data using the private key context.
定义 auth_privpass_token.h:183
struct PrivPass_Ctx HITLS_AUTH_PrivPassCtx
定义 auth_privpass_token.h:32
HITLS_AUTH_PrivPassToken * HITLS_AUTH_PrivPassNewToken(int32_t tokenType)
Create a new PrivPass token object.
定义 privpass_token_util.c:581
void HITLS_AUTH_PrivPassFreeToken(HITLS_AUTH_PrivPassToken *object)
Free a PrivPass token object.
定义 privpass_token_util.c:682
定义 privpass_token.h:111
定义 privpass_token.h:85