blob: 87b4401023105090e2f74b9f7e5bafad6830297b [file] [log] [blame]
Nan Zhou7a337042021-07-26 21:05:21 -07001/*
2 * Copyright 2021 Google LLC
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16#ifndef PLATFORMS_HAVEN_LIBCR51SIGN_LIBCR51SIGN_SUPPORT_H_
17#define PLATFORMS_HAVEN_LIBCR51SIGN_LIBCR51SIGN_SUPPORT_H_
18
19#include "libcr51sign.h"
20
21#include <openssl/sha.h>
22
23#ifdef __cplusplus
24extern "C"
25{
26#endif
27
28 struct hash_ctx
29 {
30 enum hash_type hash_type;
31 union
32 {
33 SHA256_CTX sha256_ctx;
34 SHA512_CTX sha512_ctx;
35 };
36 };
37
38 // @func hash_init get ready to compute a hash
39 //
40 // @param[in] ctx - context struct
41 // @param[in] hash_type - type of hash function to use
42 //
43 // @return nonzero on error, zero on success
44
45 int hash_init(const void* ctx, enum hash_type type);
46
47 // @func hash_update add data to the hash
48 //
49 // @param[in] ctx - context struct
50 // @param[in] buf - data to add to hash
51 // @param[in] count - number of bytes of data to add
52 //
53 // @return nonzero on error, zero on success
54
55 int hash_update(void* ctx, const uint8_t* data, size_t size);
56
57 // @func hash_final finish hash calculation
58 //
59 // @param[in] ctx - context struct
60 // @param[out] hash - buffer to write hash to (guaranteed to be big enough)
61 //
62 // @return nonzero on error, zero on success
63
64 int hash_final(void* ctx, uint8_t* hash);
65
66 // @func verify check that the signature is valid for given hashed data
67 //
68 // @param[in] ctx - context struct
69 // @param[in] scheme - type of signature, hash, etc.
70 // @param[in] sig - signature blob
71 // @param[in] sig_len - length of signature in bytes
72 // @param[in] data - pre-hashed data to verify
73 // @param[in] data_len - length of hashed data in bytes
74 //
75 // @return nonzero on error, zero on success
76
77 int verify_signature(const void* ctx, enum signature_scheme sig_scheme,
78 const uint8_t* sig, size_t sig_len,
79 const uint8_t* data, size_t data_len);
80
81#ifdef __cplusplus
82} // extern "C"
83#endif
84#endif // PLATFORMS_HAVEN_LIBCR51SIGN_LIBCR51SIGN_SUPPORT_H_