1
10
13
14
20
21
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
75
76
77
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
...
...
...
...
...
#ifndef NX_CRYPTO_ECDH_H
#define NX_CRYPTO_ECDH_H
/* ... */
#ifdef __cplusplus
extern "C" {
#endif
#include "nx_crypto_ec.h"
#define NX_CRYPTO_ECDH_MAX_KEY_SIZE (68)
#ifndef NX_CRYPTO_ECDH_SCRATCH_BUFFER_SIZE
#define NX_CRYPTO_ECDH_SCRATCH_BUFFER_SIZE 2464
#endif
typedef struct NX_CRYPTO_ECDH_STRUCT
{
/* ... */
UINT nx_crypto_ecdh_key_size;
/* ... */
HN_UBASE nx_crypto_ecdh_private_key_buffer[NX_CRYPTO_ECDH_MAX_KEY_SIZE >> HN_SIZE_SHIFT];
NX_CRYPTO_EC *nx_crypto_ecdh_curve;
HN_UBASE nx_crypto_ecdh_scratch_buffer[NX_CRYPTO_ECDH_SCRATCH_BUFFER_SIZE >> HN_SIZE_SHIFT];
...} NX_CRYPTO_ECDH;
UINT _nx_crypto_ecdh_key_pair_import(NX_CRYPTO_ECDH *ecdh_ptr,
NX_CRYPTO_EC *curve,
UCHAR *local_private_key_ptr,
ULONG local_private_key_len,
UCHAR *local_public_key_ptr,
ULONG local_public_key_len);
UINT _nx_crypto_ecdh_private_key_export(NX_CRYPTO_ECDH *ecdh_ptr,
UCHAR *local_private_key_ptr,
ULONG local_private_key_len,
ULONG *actual_local_private_key_len);
UINT _nx_crypto_ecdh_setup(NX_CRYPTO_ECDH *ecdh_ptr,
UCHAR *local_public_key_ptr,
ULONG local_public_key_len_ptr,
ULONG *actual_local_public_key_len,
NX_CRYPTO_EC *curve,
HN_UBASE *scratch_buf_ptr);
UINT _nx_crypto_ecdh_compute_secret(NX_CRYPTO_ECDH *ecdh_ptr,
UCHAR *share_secret_key_ptr,
ULONG share_secret_key_len_ptr,
ULONG *actual_share_secret_key_len,
UCHAR *remote_public_key,
ULONG remote_public_key_len,
HN_UBASE *scratch_buf_ptr);
UINT _nx_crypto_method_ecdh_init(struct NX_CRYPTO_METHOD_STRUCT *method,
UCHAR *key, NX_CRYPTO_KEY_SIZE key_size_in_bits,
VOID **handle,
VOID *crypto_metadata,
ULONG crypto_metadata_size);
UINT _nx_crypto_method_ecdh_cleanup(VOID *crypto_metadata);
UINT _nx_crypto_method_ecdh_operation(UINT op,
VOID *handle,
struct NX_CRYPTO_METHOD_STRUCT *method,
UCHAR *key, NX_CRYPTO_KEY_SIZE key_size_in_bits,
UCHAR *input, ULONG input_length_in_byte,
UCHAR *iv_ptr,
UCHAR *output, ULONG output_length_in_byte,
VOID *crypto_metadata, ULONG crypto_metadata_size,
VOID *packet_ptr,
VOID (*nx_crypto_hw_process_callback)(VOID *, UINT));
#ifdef __cplusplus
}extern "C" { ... }
#endif
/* ... */
#endif ...