linux/include/crypto/public_key.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/* Asymmetric public-key algorithm definitions
   3 *
   4 * See Documentation/crypto/asymmetric-keys.txt
   5 *
   6 * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.
   7 * Written by David Howells (dhowells@redhat.com)
   8 */
   9
  10#ifndef _LINUX_PUBLIC_KEY_H
  11#define _LINUX_PUBLIC_KEY_H
  12
  13#include <linux/keyctl.h>
  14#include <linux/oid_registry.h>
  15
  16/*
  17 * Cryptographic data for the public-key subtype of the asymmetric key type.
  18 *
  19 * Note that this may include private part of the key as well as the public
  20 * part.
  21 */
  22struct public_key {
  23        void *key;
  24        u32 keylen;
  25        enum OID algo;
  26        void *params;
  27        u32 paramlen;
  28        bool key_is_private;
  29        const char *id_type;
  30        const char *pkey_algo;
  31};
  32
  33extern void public_key_free(struct public_key *key);
  34
  35/*
  36 * Public key cryptography signature data
  37 */
  38struct public_key_signature {
  39        struct asymmetric_key_id *auth_ids[2];
  40        u8 *s;                  /* Signature */
  41        u32 s_size;             /* Number of bytes in signature */
  42        u8 *digest;
  43        u8 digest_size;         /* Number of bytes in digest */
  44        const char *pkey_algo;
  45        const char *hash_algo;
  46        const char *encoding;
  47};
  48
  49extern void public_key_signature_free(struct public_key_signature *sig);
  50
  51extern struct asymmetric_key_subtype public_key_subtype;
  52
  53struct key;
  54struct key_type;
  55union key_payload;
  56
  57extern int restrict_link_by_signature(struct key *dest_keyring,
  58                                      const struct key_type *type,
  59                                      const union key_payload *payload,
  60                                      struct key *trust_keyring);
  61
  62extern 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
  67extern 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
  72extern int query_asymmetric_key(const struct kernel_pkey_params *,
  73                                struct kernel_pkey_query *);
  74
  75extern int encrypt_blob(struct kernel_pkey_params *, const void *, void *);
  76extern int decrypt_blob(struct kernel_pkey_params *, const void *, void *);
  77extern int create_signature(struct kernel_pkey_params *, const void *, void *);
  78extern int verify_signature(const struct key *,
  79                            const struct public_key_signature *);
  80
  81int public_key_verify_signature(const struct public_key *pkey,
  82                                const struct public_key_signature *sig);
  83
  84#endif /* _LINUX_PUBLIC_KEY_H */
  85