forked from Intel-BMC/intel-pfr-signing-utility
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sslhelper.h
139 lines (128 loc) · 3.24 KB
/
sslhelper.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
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
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
/*
// Copyright (c) 2020 Intel Corporation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
*/
#pragma once
#include <openssl/evp.h>
// TODO: Remove this once it gets upstreamed into OpenSSL
#define SM3_DIGEST_LENGTH 32
// Separated out from my SSLHelper library for ease of compiling.
// Make sure to upstream changes.
/*#ifdef _WIN32
#ifdef SSLHELPER_LIB_EXPORTS
#define SSLHELPER_LIB_API __declspec(dllexport)
#else
#define SSLHELPER_LIB_API __declspec(dllimport)
#endif
#endif
#ifdef __cplusplus
extern "C" {
#endif*/
#define HASH_BLOCK_SIZE 1024
// Supported Sig Algorithms - Sm2 is WIP
typedef enum
{
RsaSsa,
RsaPss,
EcDsa,
Sm2
} SigAlg;
// Supported Hash Algorithms - Sm3 is WIP
typedef enum
{
Sha256,
Sha384,
Sha512,
Sm3
} HashAlg;
/*#ifdef _WIN32
SSLHELPER_LIB_API
#endif*/
int ExtractRs(
/* IN */ const unsigned char *sig,
/* IN */ const int sigLen,
/* OUT */ unsigned char **r,
/* OUT */ unsigned char **s,
/* OUT */ int *len);
/*#ifdef _WIN32
SSLHELPER_LIB_API
#endif*/
int DerEncodeRs(
/* IN */ const unsigned char *r,
/* IN */ const unsigned char *s,
/* IN */ const int pointLen,
/* OUT */ unsigned char **sig,
/* OUT */ int *sigLen);
/*#ifdef _WIN32
SSLHELPER_LIB_API
#endif*/
int ExtractQxQyFromPubkey(
/* IN */ const char *file,
/* OUT */ unsigned char **qx,
/* OUT */ unsigned char **qy,
/* OUT */ int *len);
// Hash must be freed via caller
/*#ifdef _WIN32
SSLHELPER_LIB_API
#endif*/
int HashFilePointer(
/* IN */ FILE *file,
/* IN */ const HashAlg hashAlg,
/* OUT */ unsigned char **hash,
/* OUT */ int *size);
// Hash must be freed via caller
/*#ifdef _WIN32
SSLHELPER_LIB_API
#endif*/
int HashFile(
/* IN */ const char *file,
/* IN */ const HashAlg hashAlg,
/* OUT */ unsigned char **hash,
/* OUT */ int *size);
// Hash must be freed via caller
/*#ifdef _WIN32
SSLHELPER_LIB_API
#endif*/
int HashBuffer(
/* IN */ const uint8_t *buffer,
/* IN */ const int bufSize,
/* IN */ const HashAlg hashAlg,
/* OUT */ unsigned char **hash,
/* OUT */ int *size);
// Sig must be freed via caller
/*#ifdef _WIN32
SSLHELPER_LIB_API
#endif*/
int SignData(
/* IN */ const char *certFile,
/* IN */ const SigAlg sigAlg,
/* IN */ const unsigned char *data,
/* IN */ const HashAlg hashAlg,
/* OUT */ unsigned char **sig,
/* OUT */ int *sigSize);
/*#ifdef _WIN32
SSLHELPER_LIB_API
#endif*/
int VerifyData(
/* IN */ const char *certFile,
/* IN */ const SigAlg sigAlg,
/* IN */ const unsigned char *data,
/* IN */ const HashAlg hashAlg,
/* IN */ const unsigned char *sig,
/* IN */ const int sigSize,
/* OUT */ int *verified // 0 - Failure, 1 - Success
);
#ifdef __cplusplus
}
#endif