0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef _KEYS_ASYMMETRIC_TYPE_H
0011 #define _KEYS_ASYMMETRIC_TYPE_H
0012
0013 #include <linux/key-type.h>
0014 #include <linux/verification.h>
0015
0016 extern struct key_type key_type_asymmetric;
0017
0018
0019
0020
0021
0022 enum asymmetric_payload_bits {
0023 asym_crypto,
0024 asym_subtype,
0025 asym_key_ids,
0026 asym_auth
0027 };
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050 struct asymmetric_key_id {
0051 unsigned short len;
0052 unsigned char data[];
0053 };
0054
0055 struct asymmetric_key_ids {
0056 void *id[3];
0057 };
0058
0059 extern bool asymmetric_key_id_same(const struct asymmetric_key_id *kid1,
0060 const struct asymmetric_key_id *kid2);
0061
0062 extern bool asymmetric_key_id_partial(const struct asymmetric_key_id *kid1,
0063 const struct asymmetric_key_id *kid2);
0064
0065 extern struct asymmetric_key_id *asymmetric_key_generate_id(const void *val_1,
0066 size_t len_1,
0067 const void *val_2,
0068 size_t len_2);
0069 static inline
0070 const struct asymmetric_key_ids *asymmetric_key_ids(const struct key *key)
0071 {
0072 return key->payload.data[asym_key_ids];
0073 }
0074
0075 static inline
0076 const struct public_key *asymmetric_key_public_key(const struct key *key)
0077 {
0078 return key->payload.data[asym_crypto];
0079 }
0080
0081 extern struct key *find_asymmetric_key(struct key *keyring,
0082 const struct asymmetric_key_id *id_0,
0083 const struct asymmetric_key_id *id_1,
0084 const struct asymmetric_key_id *id_2,
0085 bool partial);
0086
0087 int x509_load_certificate_list(const u8 cert_list[], const unsigned long list_size,
0088 const struct key *keyring);
0089
0090
0091
0092
0093
0094 #endif