Commit | Line | Data |
---|---|---|
a9681bf3 DH |
1 | /* Asymmetric public-key algorithm definitions |
2 | * | |
3 | * See Documentation/crypto/asymmetric-keys.txt | |
4 | * | |
5 | * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved. | |
6 | * Written by David Howells (dhowells@redhat.com) | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or | |
9 | * modify it under the terms of the GNU General Public Licence | |
10 | * as published by the Free Software Foundation; either version | |
11 | * 2 of the Licence, or (at your option) any later version. | |
12 | */ | |
13 | ||
14 | #ifndef _LINUX_PUBLIC_KEY_H | |
15 | #define _LINUX_PUBLIC_KEY_H | |
16 | ||
5a307718 DH |
17 | #include <linux/keyctl.h> |
18 | ||
a9681bf3 DH |
19 | /* |
20 | * Cryptographic data for the public-key subtype of the asymmetric key type. | |
21 | * | |
22 | * Note that this may include private part of the key as well as the public | |
23 | * part. | |
24 | */ | |
25 | struct public_key { | |
db6c43bd TS |
26 | void *key; |
27 | u32 keylen; | |
f7c4e06e | 28 | bool key_is_private; |
4e8ae72a DH |
29 | const char *id_type; |
30 | const char *pkey_algo; | |
a9681bf3 DH |
31 | }; |
32 | ||
3b764563 | 33 | extern void public_key_free(struct public_key *key); |
a9681bf3 DH |
34 | |
35 | /* | |
36 | * Public key cryptography signature data | |
37 | */ | |
38 | struct public_key_signature { | |
a022ec02 | 39 | struct asymmetric_key_id *auth_ids[2]; |
db6c43bd TS |
40 | u8 *s; /* Signature */ |
41 | u32 s_size; /* Number of bytes in signature */ | |
a9681bf3 | 42 | u8 *digest; |
d846e78e | 43 | u8 digest_size; /* Number of bytes in digest */ |
4e8ae72a DH |
44 | const char *pkey_algo; |
45 | const char *hash_algo; | |
5a307718 | 46 | const char *encoding; |
a9681bf3 DH |
47 | }; |
48 | ||
3b764563 DH |
49 | extern void public_key_signature_free(struct public_key_signature *sig); |
50 | ||
db6c43bd | 51 | extern struct asymmetric_key_subtype public_key_subtype; |
3b764563 | 52 | |
4ae71c1d | 53 | struct key; |
a511e1af DH |
54 | struct key_type; |
55 | union key_payload; | |
56 | ||
aaf66c88 | 57 | extern int restrict_link_by_signature(struct key *dest_keyring, |
a511e1af | 58 | const struct key_type *type, |
aaf66c88 MM |
59 | const union key_payload *payload, |
60 | struct key *trust_keyring); | |
a511e1af | 61 | |
7e3c4d22 MM |
62 | extern int restrict_link_by_key_or_keyring(struct key *dest_keyring, |
63 | const struct key_type *type, | |
64 | const union key_payload *payload, | |
65 | struct key *trusted); | |
66 | ||
8e323a02 MM |
67 | extern int restrict_link_by_key_or_keyring_chain(struct key *trust_keyring, |
68 | const struct key_type *type, | |
69 | const union key_payload *payload, | |
70 | struct key *trusted); | |
71 | ||
5a307718 DH |
72 | extern int query_asymmetric_key(const struct kernel_pkey_params *, |
73 | struct kernel_pkey_query *); | |
74 | ||
75 | extern int encrypt_blob(struct kernel_pkey_params *, const void *, void *); | |
76 | extern int decrypt_blob(struct kernel_pkey_params *, const void *, void *); | |
77 | extern int create_signature(struct kernel_pkey_params *, const void *, void *); | |
78 | extern int verify_signature(const struct key *, | |
79 | const struct public_key_signature *); | |
4ae71c1d | 80 | |
db6c43bd TS |
81 | int public_key_verify_signature(const struct public_key *pkey, |
82 | const struct public_key_signature *sig); | |
83 | ||
a9681bf3 | 84 | #endif /* _LINUX_PUBLIC_KEY_H */ |