libcamera: Add PubKey class

Add a new PubKey class to handle public key signature verification. The
implementation is based on the gnutls library, which is added as an
optional dependency. If gnutls is not found, signature verification will
unconditionally fail.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
Laurent Pinchart
2020-03-29 06:38:08 +03:00
parent bf4049fd90
commit 462d6508a2
4 changed files with 143 additions and 0 deletions
+1
View File
@@ -21,6 +21,7 @@ libcamera_headers = files([
'message.h',
'pipeline_handler.h',
'process.h',
'pub_key.h',
'semaphore.h',
'thread.h',
'utils.h',
+38
View File
@@ -0,0 +1,38 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
* Copyright (C) 2020, Google Inc.
*
* pub_key.h - Public key signature verification
*/
#ifndef __LIBCAMERA_PUB_KEY_H__
#define __LIBCAMERA_PUB_KEY_H__
#include <stdint.h>
#include <libcamera/span.h>
#if HAVE_GNUTLS
struct gnutls_pubkey_st;
#endif
namespace libcamera {
class PubKey
{
public:
PubKey(Span<const uint8_t> key);
~PubKey();
bool isValid() const { return valid_; }
bool verify(Span<const uint8_t> data, Span<const uint8_t> sig) const;
private:
bool valid_;
#if HAVE_GNUTLS
struct gnutls_pubkey_st *pubkey_;
#endif
};
} /* namespace libcamera */
#endif /* __LIBCAMERA_PUB_KEY_H__ */