blob: c2dcf4715c3440625a42c84992c832abf4eb72a5
1 | /* |
2 | * Copyright (C) 2016 The Android Open Source Project |
3 | * |
4 | * Permission is hereby granted, free of charge, to any person |
5 | * obtaining a copy of this software and associated documentation |
6 | * files (the "Software"), to deal in the Software without |
7 | * restriction, including without limitation the rights to use, copy, |
8 | * modify, merge, publish, distribute, sublicense, and/or sell copies |
9 | * of the Software, and to permit persons to whom the Software is |
10 | * furnished to do so, subject to the following conditions: |
11 | * |
12 | * The above copyright notice and this permission notice shall be |
13 | * included in all copies or substantial portions of the Software. |
14 | * |
15 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
16 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
17 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
18 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
19 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
20 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
21 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
22 | * SOFTWARE. |
23 | */ |
24 | |
25 | /* Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
26 | * Use of this source code is governed by a BSD-style license that can be |
27 | * found in the LICENSE file. |
28 | */ |
29 | |
30 | #ifdef AVB_INSIDE_LIBAVB_H |
31 | #error "You can't include avb_rsa.h in the public header libavb.h." |
32 | #endif |
33 | |
34 | #ifndef AVB_COMPILATION |
35 | #error "Never include this file, it may only be used from internal avb code." |
36 | #endif |
37 | |
38 | #ifndef AVB_RSA_H_ |
39 | #define AVB_RSA_H_ |
40 | |
41 | #ifdef __cplusplus |
42 | extern "C" { |
43 | #endif |
44 | |
45 | #include "avb_crypto.h" |
46 | #include "avb_sysdeps.h" |
47 | |
48 | /* Using the key given by |key|, verify a RSA signature |sig| of |
49 | * length |sig_num_bytes| against an expected |hash| of length |
50 | * |hash_num_bytes|. The padding to expect must be passed in using |
51 | * |padding| of length |padding_num_bytes|. |
52 | * |
53 | * The data in |key| must match the format defined in |
54 | * |AvbRSAPublicKeyHeader|, including the two large numbers |
55 | * following. The |key_num_bytes| must be the size of the entire |
56 | * serialized key. |
57 | * |
58 | * Returns false if verification fails, true otherwise. |
59 | */ |
60 | bool avb_rsa_verify(const uint8_t* key, |
61 | size_t key_num_bytes, |
62 | const uint8_t* sig, |
63 | size_t sig_num_bytes, |
64 | const uint8_t* hash, |
65 | size_t hash_num_bytes, |
66 | const uint8_t* padding, |
67 | size_t padding_num_bytes) AVB_ATTR_WARN_UNUSED_RESULT; |
68 | |
69 | #ifdef __cplusplus |
70 | } |
71 | #endif |
72 | |
73 | #endif /* AVB_RSA_H_ */ |
74 |