1
10
13
14
20
21
22
23
24
25
26
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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
...
...
...
#ifndef SRC_NX_SECURE_PKCS1_V1_5_H_
#define SRC_NX_SECURE_PKCS1_V1_5_H_
/* ... */
#ifdef __cplusplus
extern "C" {
#endif
#include "nx_crypto.h"
#include "nx_crypto_rsa.h"
...
typedef struct NX_CRYPTO_PKCS1_STRUCT
{
NX_CRYPTO_METHOD *public_cipher_method;
VOID *public_cipher_metadata;
UINT public_cipher_metadata_size;
NX_CRYPTO_METHOD *hash_method;
VOID *hash_metadata;
UINT hash_metadata_size;
UCHAR *modulus;
UINT modulus_size;
UCHAR scratch_buffer[NX_CRYPTO_MAX_RSA_MODULUS_SIZE >> 2];
...}NX_CRYPTO_PKCS1;
typedef struct NX_CRYPTO_PKCS1_OPTIONS_STRUCT
{
NX_CRYPTO_METHOD *public_cipher_method;
VOID *public_cipher_metadata;
UINT public_cipher_metadata_size;
NX_CRYPTO_METHOD *hash_method;
VOID *hash_metadata;
UINT hash_metadata_size;
...}NX_CRYPTO_PKCS1_OPTIONS;
UINT _nx_crypto_pkcs1_v1_5_sign(UCHAR *input, UINT input_length,
UCHAR *private_key, UINT private_key_size,
UCHAR *metadata_area,
UCHAR *output, UINT output_size);
UINT _nx_crypto_pkcs1_v1_5_verify(UCHAR *message, UINT message_length,
UCHAR *signature, UINT signature_length,
UCHAR *public_key, UINT public_key_size,
UCHAR *metadata_area);
UINT _nx_crypto_pkcs1_v1_5_encode(UCHAR *input, UINT input_length,
NX_CRYPTO_METHOD *hash_method,
UCHAR *metadata_area, UINT metadata_size,
UCHAR *output, UINT expected_output_length);
UINT _nx_crypto_method_pkcs1_v1_5_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_pkcs1_v1_5_cleanup(VOID *crypto_metadata);
UINT _nx_crypto_method_pkcs1_v1_5_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