adding security misc from Vx7 to 6.9 (original files from vx7) (#5)

Co-authored-by: neelimap <neelimaps@neominds.in>
Reviewed-on: http://13.234.246.121:3000/Neominds/ossl35vx69/pulls/5
Reviewed-by: Siddhant Singh <siddhant.singh@neominds.in>
Co-authored-by: Neelima P S <neelima.ps@neominds.in>
Co-committed-by: Neelima P S <neelima.ps@neominds.in>
This commit is contained in:
2026-07-30 18:09:00 +05:30
committed by neelimap
co-authored by neelimap
parent 368226261b
commit 122392cfc0
60 changed files with 9586 additions and 0 deletions
+42
View File
@@ -0,0 +1,42 @@
/* banned.h - header file listing banned APIs in VxWorks */
/*
* Copyright (c) 2019-2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef __INCbannedh
#define __INCbannedh
/* includes */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#define _WRS_BANNED_TEXT(bannedFunc, recommendedFunc) \
(bannedFunc " is now banned, consider using " recommendedFunc " instead")
#ifdef __clang__
#define _WRS_BANNED_MSG(msg) __attribute__((diagnose_if(1, msg, "error")));
#else
#define _WRS_BANNED_MSG(msg) __attribute__((error(msg)))
#endif
#define _WRS_BANNED(bannedFunc, recommendedFunc) \
_WRS_BANNED_MSG(_WRS_BANNED_TEXT(bannedFunc, recommendedFunc))
char * strcpy (char * a, const char * b) _WRS_BANNED("strcpy", "strncpy_s");
char * strcat (char * a, const char * b) _WRS_BANNED("strcat", "strncat_s");
char * mktemp (char *tmplate) _WRS_BANNED("mktemp", "mkstemp or mkdtemp");
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCbannedh */
@@ -0,0 +1,445 @@
/* ipcom_key_db.h - Public API of IPCOM key database */
/*
* Copyright (c) 2006-2014, 2018, 2020-2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef IPCOM_KEY_DB_H
#define IPCOM_KEY_DB_H
/*
****************************************************************************
* 1 DESCRIPTION
****************************************************************************
*/
/*
DESCRIPTION
This library contains the API for the IPCOM key database.
*/
/*
****************************************************************************
* 2 CONFIGURATION
****************************************************************************
*/
#include <vsbConfig.h>
/*
****************************************************************************
* 3 INCLUDE FILES
****************************************************************************
*/
#include <ipcom_type.h>
#include <ipcom_cstyle.h>
#ifdef __cplusplus
extern "C" {
#endif
/*
****************************************************************************
* 4 DEFINES
****************************************************************************
*/
#define IPCOM_USE_KEY_DB
#define IPCOM_USE_KEY_DB_CMD
#define IPCOM_USE_KEY_DB_CMD_VERIFY
#define IPCRYPTO
/* Note: Changing IPCOM_KEY_DB_MAX_BUF will affect stack usage. */
#ifndef IPCOM_KEY_DB_MAX_BUF
#define IPCOM_KEY_DB_MAX_BUF 128
#endif
#ifndef IPCOM_KEY_DB_MAX_ID
#define IPCOM_KEY_DB_MAX_ID 32
#endif
/*
****************************************************************************
* 5 TYPES
****************************************************************************
*/
/* Forward declarations */
struct evp_pkey_st;
struct x509_st;
/*
****************************************************************************
* 6 FUNCTIONS
****************************************************************************
*/
/*******************************************************************************
*
* ipcom_key_db_pkey_get - get key with specified key_id
*
* This routine returns the public key with the specified key ID
*
* Parameter:
* \is
* \i <key_id>
* The key ID of the key to get
* \ie
*
* RETURNS: A pointer to a public key or NULL if the key does not exist.
*
* ERRNO:
*/
IP_PUBLIC struct evp_pkey_st* ipcom_key_db_pkey_get
(
const char* key_id
);
/*******************************************************************************
*
* ipcom_key_db_pkey_get2 - get key matching an X509 certificate
*
* This routine searches the key database for a public key pair matching the
* the public key in the specified X509 certificate.
*
* Parameter:
* \is
* \i <x509>
* holds the X509 certificate whose private key should be returned
* \i <key_id> pointer to buffer to put the key id in.
* \i <key_id_len> length of the key_id buffer.
* \ie
*
* RETURNS: A pointer to a public key or NULL if no matching key could be found.
*
* ERRNO:
*/
IP_PUBLIC struct evp_pkey_st* ipcom_key_db_pkey_get2
(
struct x509_st* x509,
char* key_id,
int* key_id_len
);
/*******************************************************************************
*
* ipcom_key_db_pkey_import - store a public key pair in the key database
*
* This routine imports a public key pair into the key key database.
*
* Parameter:
* \is
* \i <key_id>
* key id of the key being imported
* \i <key>
* the actual key to import
* \ie
*
* RETURNS: IPCOM_SUCCESS if successful, IPCOM_ERR_INVALID_ARG if an invalid key
* is given as argument, IPCOM_ERR_ALREADY_INSTALLED if key with the same key ID
* is already stored in the key database.
*
* ERRNO:
*/
IP_PUBLIC Ip_err ipcom_key_db_pkey_import
(
const char* key_id,
struct evp_pkey_st* key
);
/*******************************************************************************
*
* ipcom_key_db_pkey_del - delete public key pair
*
* Delete public key pair with ID key_id from the key db.
*
* Parameter:
* \is
* \i <key_id>
* key ID of the key to delete
* \ie
*
* RETURNS:
* IPCOM_SUCCESS if the key was deleted
* IPCOM_ERR_NOT_FOUND if key ID does not exist
* IPCOM_ERR_FAILED for general errors
*
* ERRNO:
*/
IP_PUBLIC Ip_err ipcom_key_db_pkey_del
(
const char* key_id
);
/*******************************************************************************
*
* ipcom_key_db_pkey_opendb - open the database for reading
*
* This routine returns a handle that can be used to iterate all key IDs in the
* database. Note that public keys and buffers/pre-shared keys have different
* name spaces.
*
* RETURNS: A handle to be used in subsequent calls to ipcom_key_db_pkey_readdb
* and ipcom_key_db_pkey_closedb.
*
* ERRNO:
*/
IP_PUBLIC void* ipcom_key_db_pkey_opendb
(
void
);
/*******************************************************************************
*
* ipcom_key_db_pkey_readdb - return next key ID from the database
*
* This routine returns the next key ID from the database.
*
* Parameter:
* \is
* \i <handle>
* handle returned from ipcom_key_db_pkey_opendb
* \i <name>
* buffer to store the key ID in
* \i <name>
* length of name buffer
* \ie
*
* RETURNS:
* IPCOM_SUCCESS if successful
* IPCOM_ERR_END if no more entries can be read
* IPCOM_ERR_FAILED in case of error
*
* ERRNO:
*/
IP_PUBLIC Ip_err ipcom_key_db_pkey_readdb
(
void* handle,
char* name,
int name_len
);
/*******************************************************************************
*
* ipcom_key_db_pkey_closedb - close handle
*
* This routine closes a handle used to iterate all key IDs in the
* database.
*
* Parameter:
* \is
* \i <handle>
* handle returned from ipcom_key_db_pkey_opendb
* \ie
*
* RETURNS: A handle to be used in subsequent calls to ipcom_key_db_pkey_readdb
* and ipcom_key_db_pkey_closedb.
*
* ERRNO:
*/
IP_PUBLIC Ip_err ipcom_key_db_pkey_closedb
(
void* handle
);
/*******************************************************************************
*
* ipcom_key_db_buf_import - import buffer into the key db and give it ID key_id
*
* Import buffer into the key db and give it ID key_id. The buffer is typically a
* password or a pre-shared key.
*
* Parameter:
* \is
* \i <key_id>
* key ID of the key to import
* \i <key>
* the key/buffer to import
* \i <key_len>
* length of the key
* \ie
*
* RETURNS:
* IPCOM_SUCCESS if the key was successfully imported
* IPCOM_ERR_INVALID_ARG if the key is too long
* IPCOM_ERR_ALREADY_INSTALLED if the key ID already exists
* IPCOM_ERR_FAILED for general errors
*
* ERRNO:
*/
IP_PUBLIC Ip_err ipcom_key_db_buf_import
(
const char* key_id,
const UINT8* key,
int key_len
);
/*******************************************************************************
*
* ipcom_key_db_buf_get - get key
*
* Get buffer with specified key_id
*
* Parameter:
* \is
* \i <key_id>
* key ID of the key to fetch
* \i <key>
* pointer to the buffer to store the key in
* \i <key_len>
* length of the key buffer
* \ie
*
* RETURNS:
* IPCOM_SUCCESS if the key was succesfully retrieved
* IPCOM_ERR_NOT_FOUND if the key ID does not exist
* IPCOM_ERR_NO_MEMORY if not enough memory is available to complete the request
* IPCOM_ERR_FAILED for general errors
*
* ERRNO:
*/
IP_PUBLIC Ip_err ipcom_key_db_buf_get
(
const char* key_id,
UINT8* key,
int* key_len
);
/*******************************************************************************
*
* ipcom_key_db_buf_del - delete buffer from key database
*
* Delete buffer with ID key_id from the key db
*
* Parameter:
* \is
* \i <key_id>
* Key ID of key to delete
* \ie
*
* RETURNS:
* IPCOM_SUCCESS if the key was deleted
* IPCOM_ERR_NOT_FOUND if key ID does not exist
* IPCOM_ERR_FAILED for general errors
*
* ERRNO:
*/
IP_PUBLIC Ip_err ipcom_key_db_buf_del
(
const char* key_id
);
/*******************************************************************************
*
* ipcom_key_db_buf_opendb - open the database for reading
*
* This routine returns a handle that can be used to iterate all key IDs in the
* database. Note that public keys and buffers/pre-shared keys have different
* name spaces.
*
* RETURNS: A handle to be used in subsequent calls to ipcom_key_db_buf_readdb
* and ipcom_key_db_buf_closedb.
* NULL in case of error.
*
* ERRNO:
*/
IP_PUBLIC void* ipcom_key_db_buf_opendb
(
void
);
/*******************************************************************************
*
* ipcom_key_db_buf_readdb - return next key ID from the database
*
* This routine returns the next key ID from the database.
*
* Parameter:
* \is
* \i <handle>
* handle returned from ipcom_key_db_pkey_opendb
* \i <name>
* buffer to store the key ID in
* \i <name>
* length of name buffer
* \ie
*
* RETURNS:
* IPCOM_SUCCESS if successful
* IPCOM_ERR_END if no more entries can be read
* IPCOM_ERR_FAILED in case of error
*
* ERRNO:
*/
IP_PUBLIC Ip_err ipcom_key_db_buf_readdb
(
void* handle,
char* name,
int name_len
);
/*******************************************************************************
*
* ipcom_key_db_buf_closedb - close handle
*
* This routine closes a handle used to iterate all key IDs in the
* database.
*
* Parameter:
* \is
* \i <handle>
* handle returned from ipcom_key_db_buf_opendb
* \ie
*
* RETURNS:
* IPCOM_SUCCESS if the handle was closed
* IPCOM_ERR_FAILED if the handle could not be closed;
*
* ERRNO:
*/
IP_PUBLIC Ip_err ipcom_key_db_buf_closedb
(
void* handle
);
/*******************************************************************************
*
* ipcom_key_db_file_ready - wait for the vault storage device ready
*
* This routine delay check the vault storage device ready
*
* RETURNS: void
*
* ERRNO:
*/
IP_GLOBAL void ipcom_key_db_file_ready
(
void
);
#ifdef __cplusplus
}
#endif
#endif
/*
****************************************************************************
* END OF FILE
****************************************************************************
*/
@@ -0,0 +1,311 @@
/** @file
Platform Key, Key Exchange Key, and Image signature database are defined
for the signed image validation.
Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
@par Revision Reference:
GUIDs defined in UEFI 2.3.1 spec.
**/
/*
* Copyright (c) 2017 Wind River Systems, Inc.
*
* The right to copy, distribute, modify or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River License agreement.
*/
/*
modification history
--------------------
18sep17,lta written (F8920)
*/
#ifndef __IMAGE_AUTHTICATION_H__
#define __IMAGE_AUTHTICATION_H__
#ifdef notused
#include <Guid/GlobalVariable.h>
#endif
#define EFI_IMAGE_SECURITY_DATABASE_GUID \
{ \
0xd719b2cb, 0x3d3a, 0x4596, { 0xa3, 0xbc, 0xda, 0xd0, 0xe, 0x67, 0x65, 0x6f } \
}
///
/// Variable name with guid EFI_IMAGE_SECURITY_DATABASE_GUID
/// for the authorized signature database.
///
#define EFI_IMAGE_SECURITY_DATABASE L"db"
///
/// Variable name with guid EFI_IMAGE_SECURITY_DATABASE_GUID
/// for the forbidden signature database.
///
#define EFI_IMAGE_SECURITY_DATABASE1 L"dbx"
#define SECURE_BOOT_MODE_ENABLE 1
#define SECURE_BOOT_MODE_DISABLE 0
#define SETUP_MODE 1
#define USER_MODE 0
///
/// Globally "SetupMode" variable to specify whether the system is currently operating
/// in setup mode (1) or not (0). All other values are reserved.
///
#define EFI_SETUP_MODE_NAME L"SetupMode"
///
/// Global "PK" variable for the Platform Key Signature Database.
///
#define EFI_PLATFORM_KEY_NAME L"PK"
///
/// Global "KEK" variable for the Key Exchange Key Signature Database.
///
#define EFI_KEY_EXCHANGE_KEY_NAME L"KEK"
///
/// Global "SignatureSupport" variable returns an array of GUIDs,
/// with each GUID representing a type of signature which the platform
/// firmware supports for images and other data.
///
#define EFI_SIGNATURE_SUPPORT_NAME L"SignatureSupport"
///
/// Global "SecureBoot" variable to specify whether the platform firmware
/// is operating in Secure boot mode (1) or not (0). All other values are reserved.
///
#define EFI_SECURE_BOOT_MODE_NAME L"SecureBoot"
//***********************************************************************
// Signature Database
//***********************************************************************
///
/// The format of a signature database.
///
#pragma pack(1)
typedef struct {
///
/// An identifier which identifies the agent which added the signature to the list.
///
EFI_GUID SignatureOwner;
///
/// The format of the signature is defined by the SignatureType.
///
UINT8 SignatureData[1];
} EFI_SIGNATURE_DATA;
typedef struct {
///
/// Type of the signature. GUID signature types are defined in below.
///
EFI_GUID SignatureType;
///
/// Total size of the signature list, including this header.
///
UINT32 SignatureListSize;
///
/// Size of the signature header which precedes the array of signatures.
///
UINT32 SignatureHeaderSize;
///
/// Size of each signature.
///
UINT32 SignatureSize;
///
/// Header before the array of signatures. The format of this header is specified
/// by the SignatureType.
/// UINT8 SignatureHeader[SignatureHeaderSize];
///
/// An array of signatures. Each signature is SignatureSize bytes in length.
/// EFI_SIGNATURE_DATA Signatures[][SignatureSize];
///
} EFI_SIGNATURE_LIST;
#pragma pack()
///
/// This identifies a signature containing a SHA-256 hash. The SignatureHeader size shall
/// always be 0. The SignatureSize shall always be 16 (size of SignatureOwner component) +
/// 32 bytes.
///
#define EFI_CERT_SHA256_GUID \
{ \
0xc1c41626, 0x504c, 0x4092, {0xac, 0xa9, 0x41, 0xf9, 0x36, 0x93, 0x43, 0x28} \
}
///
/// This identifies a signature containing an RSA-2048 key. The key (only the modulus
/// since the public key exponent is known to be 0x10001) shall be stored in big-endian
/// order.
/// The SignatureHeader size shall always be 0. The SignatureSize shall always be 16 (size
/// of SignatureOwner component) + 256 bytes.
///
#define EFI_CERT_RSA2048_GUID \
{ \
0x3c5766e8, 0x269c, 0x4e34, {0xaa, 0x14, 0xed, 0x77, 0x6e, 0x85, 0xb3, 0xb6} \
}
///
/// This identifies a signature containing a RSA-2048 signature of a SHA-256 hash. The
/// SignatureHeader size shall always be 0. The SignatureSize shall always be 16 (size of
/// SignatureOwner component) + 256 bytes.
///
#define EFI_CERT_RSA2048_SHA256_GUID \
{ \
0xe2b36190, 0x879b, 0x4a3d, {0xad, 0x8d, 0xf2, 0xe7, 0xbb, 0xa3, 0x27, 0x84} \
}
///
/// This identifies a signature containing a SHA-1 hash. The SignatureSize shall always
/// be 16 (size of SignatureOwner component) + 20 bytes.
///
#define EFI_CERT_SHA1_GUID \
{ \
0x826ca512, 0xcf10, 0x4ac9, {0xb1, 0x87, 0xbe, 0x1, 0x49, 0x66, 0x31, 0xbd} \
}
///
/// TThis identifies a signature containing a RSA-2048 signature of a SHA-1 hash. The
/// SignatureHeader size shall always be 0. The SignatureSize shall always be 16 (size of
/// SignatureOwner component) + 256 bytes.
///
#define EFI_CERT_RSA2048_SHA1_GUID \
{ \
0x67f8444f, 0x8743, 0x48f1, {0xa3, 0x28, 0x1e, 0xaa, 0xb8, 0x73, 0x60, 0x80} \
}
///
/// This identifies a signature based on an X.509 certificate. If the signature is an X.509
/// certificate then verification of the signature of an image should validate the public
/// key certificate in the image using certificate path verification, up to this X.509
/// certificate as a trusted root. The SignatureHeader size shall always be 0. The
/// SignatureSize may vary but shall always be 16 (size of the SignatureOwner component) +
/// the size of the certificate itself.
/// Note: This means that each certificate will normally be in a separate EFI_SIGNATURE_LIST.
///
#define EFI_CERT_X509_GUID \
{ \
0xa5c059a1, 0x94e4, 0x4aa7, {0x87, 0xb5, 0xab, 0x15, 0x5c, 0x2b, 0xf0, 0x72} \
}
///
/// This identifies a signature containing a SHA-224 hash. The SignatureHeader size shall
/// always be 0. The SignatureSize shall always be 16 (size of SignatureOwner component) +
/// 28 bytes.
///
#define EFI_CERT_SHA224_GUID \
{ \
0xb6e5233, 0xa65c, 0x44c9, {0x94, 0x7, 0xd9, 0xab, 0x83, 0xbf, 0xc8, 0xbd} \
}
///
/// This identifies a signature containing a SHA-384 hash. The SignatureHeader size shall
/// always be 0. The SignatureSize shall always be 16 (size of SignatureOwner component) +
/// 48 bytes.
///
#define EFI_CERT_SHA384_GUID \
{ \
0xff3e5307, 0x9fd0, 0x48c9, {0x85, 0xf1, 0x8a, 0xd5, 0x6c, 0x70, 0x1e, 0x1} \
}
///
/// This identifies a signature containing a SHA-512 hash. The SignatureHeader size shall
/// always be 0. The SignatureSize shall always be 16 (size of SignatureOwner component) +
/// 64 bytes.
///
#define EFI_CERT_SHA512_GUID \
{ \
0x93e0fae, 0xa6c4, 0x4f50, {0x9f, 0x1b, 0xd4, 0x1e, 0x2b, 0x89, 0xc1, 0x9a} \
}
///
/// This identifies a signature containing a DER-encoded PKCS #7 version 1.5 [RFC2315]
/// SignedData value.
///
#define EFI_CERT_TYPE_PKCS7_GUID \
{ \
0x4aafd29d, 0x68df, 0x49ee, {0x8a, 0xa9, 0x34, 0x7d, 0x37, 0x56, 0x65, 0xa7} \
}
//***********************************************************************
// Image Execution Information Table Definition
//***********************************************************************
typedef UINT32 EFI_IMAGE_EXECUTION_ACTION;
#define EFI_IMAGE_EXECUTION_AUTHENTICATION 0x00000007
#define EFI_IMAGE_EXECUTION_AUTH_UNTESTED 0x00000000
#define EFI_IMAGE_EXECUTION_AUTH_SIG_FAILED 0x00000001
#define EFI_IMAGE_EXECUTION_AUTH_SIG_PASSED 0x00000002
#define EFI_IMAGE_EXECUTION_AUTH_SIG_NOT_FOUND 0x00000003
#define EFI_IMAGE_EXECUTION_AUTH_SIG_FOUND 0x00000004
#define EFI_IMAGE_EXECUTION_POLICY_FAILED 0x00000005
#define EFI_IMAGE_EXECUTION_INITIALIZED 0x00000008
//
// EFI_IMAGE_EXECUTION_INFO is added to EFI System Configuration Table
// and assigned the GUID EFI_IMAGE_SECURITY_DATABASE_GUID.
//
typedef struct {
///
/// Describes the action taken by the firmware regarding this image.
///
EFI_IMAGE_EXECUTION_ACTION Action;
///
/// Size of all of the entire structure.
///
UINT32 InfoSize;
///
/// If this image was a UEFI device driver (for option ROM, for example) this is the
/// null-terminated, user-friendly name for the device. If the image was for an application,
/// then this is the name of the application. If this cannot be determined, then a simple
/// NULL character should be put in this position.
/// CHAR16 Name[];
///
///
/// For device drivers, this is the device path of the device for which this device driver
/// was intended. In some cases, the driver itself may be stored as part of the system
/// firmware, but this field should record the device's path, not the firmware path. For
/// applications, this is the device path of the application. If this cannot be determined,
/// a simple end-of-path device node should be put in this position.
/// EFI_DEVICE_PATH_PROTOCOL DevicePath;
///
///
/// Zero or more image signatures. If the image contained no signatures,
/// then this field is empty.
///
EFI_SIGNATURE_LIST Signature;
} EFI_IMAGE_EXECUTION_INFO;
typedef struct {
///
/// Number of EFI_IMAGE_EXECUTION_INFO structures.
///
UINTN NumberOfImages;
///
/// Number of image instances of EFI_IMAGE_EXECUTION_INFO structures.
///
// EFI_IMAGE_EXECUTION_INFO InformationInfo[]
} EFI_IMAGE_EXECUTION_INFO_TABLE;
extern EFI_GUID gEfiImageSecurityDatabaseGuid;
extern EFI_GUID gEfiCertSha256Guid;
extern EFI_GUID gEfiCertRsa2048Guid;
extern EFI_GUID gEfiCertRsa2048Sha256Guid;
extern EFI_GUID gEfiCertSha1Guid;
extern EFI_GUID gEfiCertRsa2048Sha1Guid;
extern EFI_GUID gEfiCertX509Guid;
extern EFI_GUID gEfiCertSha224Guid;
extern EFI_GUID gEfiCertSha384Guid;
extern EFI_GUID gEfiCertSha512Guid;
extern EFI_GUID gEfiCertPkcs7Guid;
#endif
@@ -0,0 +1,33 @@
/* secKeyStoreP.h - #BRIEF# library header file */
/*
* Copyright (c) 2015, 2020-2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef __INCsecKeyStorePh
#define __INCsecKeyStorePh
/* includes */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* defines */
/* typedefs */
/* function declarations */
void* secKeyStoreOpen(void);
int secKeyStoreRead(void* handle, char* name, int len);
STATUS secKeyStoreClose(void* handle);
STATUS secKeyStoreReadyCheck();
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCsecKeyStorePh */
@@ -0,0 +1,122 @@
/* secSecretP.h - secSecret private header file */
/*
* Copyright (c) 2015-2017, 2019, 2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef __INCsecSecretPh
#define __INCsecSecretPh
/* includes */
#include <secSecret.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* defines */
#ifndef SEC_SECRET_PATH_MAX
#define SEC_SECRET_PATH_MAX 128
#endif
#define SEC_SECRET_TYPE_PKEY 1
#define SEC_SECRET_TYPE_TPM2_KEY 2
#define SEC_SECRET_TYPE_OPAQUE 4
#define SEC_SECRET_MODE_READ 1
#define SEC_SECRET_MODE_WRITE 2
/* Variables */
/* typedefs */
/* function declarations */
/*******************************************************************************
*
* secSecretOpen - open the database for reading
*
* This routine returns a handle that can be used to iterate all key IDs in the
* database. Note that public keys and buffers/pre-shared keys have different
* name spaces.
*
* RETURNS: A handle to be used in subsequent calls to secSecretRead
* and secSecretClose.
* NULL in case of error.
*
* ERRNO:
*/
void* secSecretOpen(void);
/*******************************************************************************
*
* secSecretRead - return next key ID from the database
*
* This routine returns the next key ID from the database.
*
* Parameter:
* \is
* \i <handle>
* handle returned from secSecretOpen
* \i <name>
* buffer to store the key ID in
* \i <name>
* length of name buffer
* \ie
*
* RETURNS:
* IPCOM_SUCCESS if successful
* IPCOM_ERR_END if no more entries can be read
* IPCOM_ERR_FAILED in case of error
*
* ERRNO:
*/
int secSecretRead(void* handle, char* name, int name_len);
/*******************************************************************************
*
* secSecretClose - close handle
*
* This routine closes a handle used to iterate all key IDs in the
* database.
*
* Parameter:
* \is
* \i <handle>
* handle returned from secSecretOpen
* \ie
*
* RETURNS:
* OK if the handle was closed
* ERROR if the handle could not be closed;
*
* ERRNO:
*/
int secSecretClose(void* handle);
void* secSecretOpenDir(int type);
void secSecretInit(const char* rootDir);
int secSecretKepGet(char* buf, int* len);
FILE* secSecretFpGet(const char* keyId, int type, int mode);
void secSecretLock(void);
void secSecretUnlock(void);
STATUS secSecretGetDirPath(const int type, char* filePath, size_t pathLen);
STATUS secSecretGetFilePath(const char* keyId, const int type, char* filePath, size_t pathLen);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCsecSecretPh */
@@ -0,0 +1,49 @@
/* secUefiDbP.h - secUefiDb private header file */
/*
* Copyright (c) 2017, 2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef __INCsecUefiDbPh
#define __INCsecUefiDbPh
/* includes */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* defines */
/* Variables */
/* typedefs */
#ifdef _WRS_CONFIG_LP64
typedef uint64_t UINTN;
#else
typedef uint32_t UINTN;
#endif
/* Introduced from header efidef.h from gnu-efi-3.0 */
typedef struct {
UINT32 Data1;
UINT16 Data2;
UINT16 Data3;
UINT8 Data4[8];
} EFI_GUID;
extern const char uefiDatabase[];
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCsecUefiDbPh */
@@ -0,0 +1,44 @@
/* secVaultP.h - wrapper header file for secSecretP.h */
/*
* Copyright (c) 2015-2017, 2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef __INCsecVaultPh
#define __INCsecVaultPh
/* includes */
#include <secSecret.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* defines */
#define SEC_VAULT_PATH_MAX SEC_SECRET_PATH_MAX
#define SEC_VAULT_TYPE_PKEY SEC_SECRET_TYPE_PKEY
#define SEC_VAULT_TYPE_OPAQUE SEC_SECRET_TYPE_OPAQUE
#define SEC_VAULT_MODE_READ SEC_SECRET_MODE_READ
#define SEC_VAULT_MODE_WRITE SEC_SECRET_MODE_WRITE
#define secVaultOpen() secSecretOpen()
#define secVaultRead(handle, name,name_len) secSecretRead(handle, name,name_len)
#define secVaultClose(handle) secSecretClose(handle)
#ifdef __cplusplus
}
#endif /* __cplusplus */
#include <private/secSecretP.h>
#endif /* __INCsecVaultPh */
@@ -0,0 +1,47 @@
/* uefiTrustStoreP.h - private header file for UEFI trust store */
/*
* Copyright (c) 2017, 2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
/*
DESCRIPTION
This header file describes the private definitions and structures
for the UEFI database trust store.
*/
#ifndef __INCuefiTrustStorePh
#define __INCuefiTrustStorePh
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* includes */
/* defines */
#define SECURE_LOADER_DB_SECTION ".uefi_db"
#define UEFI_DATABASE_VERSION 1 /* current version */
/* typedefs */
typedef struct
{
uint32_t version; /* version number */
uint32_t padding; /* add padding for alignment */
uint64_t white_db_size; /* whitelist database size in bytes */
uint64_t black_db_size; /* blacklist database size in bytes */
char efiSignatureList[1]; /* place holder for start of signature list */
} UEFI_DB_INFO;
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* INCuefiTrustStorePh */
+149
View File
@@ -0,0 +1,149 @@
/* secCrypto.h - SEC_CRYPTO library header file */
/*
* Copyright (c) 2014-2015, 2017-2018, 2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef __INCsecCryptoh
#define __INCsecCryptoh
/* includes */
#include <vxWorks.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* defines */
#define SEC_CRYPTO_ID_BASE 1000
#define SEC_CRYPTO_ID_AES_128_CBC 1 + SEC_CRYPTO_ID_BASE
#define SEC_CRYPTO_ID_AES_192_CBC 2 + SEC_CRYPTO_ID_BASE
#define SEC_CRYPTO_ID_AES_256_CBC 3 + SEC_CRYPTO_ID_BASE
#define SEC_CRYPTO_ID_AES_128_CTR 4 + SEC_CRYPTO_ID_BASE
#define SEC_CRYPTO_ID_AES_192_CTR 5 + SEC_CRYPTO_ID_BASE
#define SEC_CRYPTO_ID_AES_256_CTR 6 + SEC_CRYPTO_ID_BASE
#define SEC_CRYPTO_ID_AES_128_ECB 8 + SEC_CRYPTO_ID_BASE
#define SEC_CRYPTO_ID_AES_256_ECB 9 + SEC_CRYPTO_ID_BASE
#define SEC_CRYPTO_ID_CAST_CBC 10 + SEC_CRYPTO_ID_BASE
#define SEC_CRYPTO_ID_DES_CBC 11 + SEC_CRYPTO_ID_BASE
#define SEC_CRYPTO_ID_3DES_CBC 12 + SEC_CRYPTO_ID_BASE
#define SEC_CRYPTO_ID_RC4 13 + SEC_CRYPTO_ID_BASE
#define SEC_CRYPTO_ID_BF_CBC 14 + SEC_CRYPTO_ID_BASE
#define SEC_CIPHER_DECR 0
#define SEC_CIPHER_ENCR 1
#define SEC_CIPHER_FLAG_ENCR 1
#define SEC_CIPHER_FLAG_PKCS_PAD (1 << 1)
#define SEC_CIPHER_CTRL_SET_PADDING 1
#define SEC_CIPHER_CTRL_GET_PADDING 2
#define SEC_CIPHER_CTRL_ENCR 3
#define SEC_CIPHER_CTRL_DECR 4
#define SEC_CIPHER_CTRL_GET_IV 5
#define SEC_CIPHER_CTRL_SET_IV 6
#define SEC_CIPHER_MAX_BLOCK_SIZE 32
#define SEC_CIPHER_AES_BLOCK_SIZE 16
/* typedefs */
struct SEC_CIPHER_CTX_ST;
typedef struct SEC_HASH_TEMPLATE_ST SEC_HASH_TEMPLATE;
typedef struct SEC_CIPHER_TEMPLATE_ST
{
int type;
int blockSize; /* bytes */
int keyLen; /* bytes */
int ivLen; /* bytes */
int (*cipherInit)(struct SEC_CIPHER_CTX_ST* ctx,
const unsigned char *key,
const unsigned char *iv,
const int encr);
int (*cipherUpdate)(struct SEC_CIPHER_CTX_ST* ctx, unsigned char* out, int* outLen, const unsigned char* in,int inLen);
int (*final)(struct SEC_CIPHER_CTX_ST* ctx, unsigned char* out, int* outLen);
int (*ctrl)(struct SEC_CIPHER_CTX_ST* ctx, int type, void* arg, unsigned int* len);
int (*cleanup)(struct SEC_CIPHER_CTX_ST* ctx);
int (*copy)(struct SEC_CIPHER_CTX_ST* copy, struct SEC_CIPHER_CTX_ST* org);
} SEC_CIPHER_TEMPLATE;
typedef struct SEC_CIPHER_CTX_ST
{
const SEC_CIPHER_TEMPLATE* cipher;
unsigned long flags;
void* ctxData;
unsigned char cache[SEC_CIPHER_MAX_BLOCK_SIZE]; /* Place to store temporary bytes when cipherUpdate input is not a full block */
unsigned int cachedBytes; /* Number of bytes currently stored in cache */
unsigned char finalCache[SEC_CIPHER_MAX_BLOCK_SIZE]; /* Place to temporarily store the last decrypted block when padding is used */
unsigned int finalCachedBytes; /* Number of bytes currently stored in cache */
} SEC_CIPHER_CTX ;
/* function declarations */
STATUS secCipherInit(SEC_CIPHER_CTX* ctx, const SEC_CIPHER_TEMPLATE* cipherTemplate, const unsigned char* key, const unsigned char* iv, const int encr);
STATUS secCipherUpdate(SEC_CIPHER_CTX* ctx, unsigned char* out, int* outLen, const unsigned char* in,int inLen);
STATUS secCipherFinal(SEC_CIPHER_CTX* ctx, unsigned char* out, int* outLen);
STATUS secCipherCtrl(SEC_CIPHER_CTX* ctx, int type, void* arg, unsigned int* len);
STATUS secCipherCleanup(SEC_CIPHER_CTX* ctx);
STATUS secCipherCopy(SEC_CIPHER_CTX* copy, SEC_CIPHER_CTX* org);
/*
* Sets the default template functions.
* These APIs are used to register a new provider of an encryption algorithm.
*/
void secCipherAes128CbcTemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
void secCipherAes128CtrTemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
void secCipherAes128EcbTemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
void secCipherAes192CbcTemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
void secCipherAes192CtrTemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
void secCipherAes256CbcTemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
void secCipherAes256CtrTemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
void secCipherAes256EcbTemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
void secCipherAesCtrTemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
void secCipherBlowfishCbcTemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
void secCipherCastCbcTemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
void secCipherDesCbcTemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
void secCipher3DesCbcTemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
void secCipherRc4TemplateSet(const SEC_CIPHER_TEMPLATE* ctx);
/*
* These APIs are used to fetch the default template for
* symmetrical encryption algorithms.
*/
const SEC_CIPHER_TEMPLATE* secCipherAes128CbcTemplateGet(void);
const SEC_CIPHER_TEMPLATE* secCipherAes128CtrTemplateGet(void);
const SEC_CIPHER_TEMPLATE* secCipherAes128EcbTemplateGet(void);
const SEC_CIPHER_TEMPLATE* secCipherAes192CbcTemplateGet(void);
const SEC_CIPHER_TEMPLATE* secCipherAes192CtrTemplateGet(void);
const SEC_CIPHER_TEMPLATE* secCipherAes256CbcTemplateGet(void);
const SEC_CIPHER_TEMPLATE* secCipherAes256CtrTemplateGet(void);
const SEC_CIPHER_TEMPLATE* secCipherAes256EcbTemplateGet(void);
const SEC_CIPHER_TEMPLATE* secCipherBlowfishCbcTemplateGet(void);
const SEC_CIPHER_TEMPLATE* secCipherCastCbcTemplateGet(void);
const SEC_CIPHER_TEMPLATE* secCipherDesCbcTemplateGet(void);
const SEC_CIPHER_TEMPLATE* secCipher3DesCbcTemplateGet(void);
const SEC_CIPHER_TEMPLATE* secCipherRc4TemplateGet(void);
STATUS secKeyIvGen(const char* pw,
const size_t pwLen,
unsigned char* key,
int keyLen,
unsigned char* iv,
int ivLen,
const SEC_HASH_TEMPLATE* hashTemplate);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCsecCryptoh */
@@ -0,0 +1,53 @@
/* secCipherXexAes.h - XEX-AES Private Header File */
/*
* Copyright (c) 2016-2017, 2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef __INCsecCipherXexAesh
#define __INCsecCipherXexAesh
/* includes */
#include <types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <vxWorks.h>
#include <secCrypto.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* typedefs */
typedef struct secXexAesCtx
{
SEC_CIPHER_CTX key1EncrCtx;
SEC_CIPHER_CTX key1DecrCtx;
SEC_CIPHER_CTX key2EncrCtx;
size_t sectorSize;
long long sectorNum;
UINT8 * pSectorTweak;
} SEC_XEX_AES_CTX;
/* function declarations */
STATUS secXexAesInit (SEC_XEX_AES_CTX * pCtx, const SEC_CIPHER_TEMPLATE *
pAesCipher, UINT8* key1, UINT8* key2, size_t sectorSize);
STATUS secXexAesUpdate (SEC_XEX_AES_CTX * pCtx, unsigned char * out, int *
outLen, const unsigned char * in, int inLen, long long
sectorNum, int encr);
STATUS secXexAesCleanup (SEC_XEX_AES_CTX * pCtx);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCsecCipherXexAesh */
+141
View File
@@ -0,0 +1,141 @@
/* secHash.h - SEC_HASH library header file */
/*
* Copyright (c) 2015, 2017, 2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
/* includes */
#ifndef __INCsecHashh
#define __INCsecHashh
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* defines */
/* typedefs */
/* function declarations */
#include <vxWorks.h>
#define SEC_HASH_ID_BASE 0
#define SEC_HASH_ID_MD5 1 + SEC_HASH_ID_BASE
#define SEC_HASH_ID_SHA1 2 + SEC_HASH_ID_BASE
#define SEC_HASH_ID_SHA256 3 + SEC_HASH_ID_BASE
#define SEC_HASH_ID_SHA384 4 + SEC_HASH_ID_BASE
#define SEC_HASH_ID_SHA512 5 + SEC_HASH_ID_BASE
#define SEC_HASH_ID_RMD 6 + SEC_HASH_ID_BASE
#define SEC_HASH_ID_WHIRLPOOL 6 + SEC_HASH_ID_BASE
#define SEC_HASH_DIGEST_LEN_MD5 16
#define SEC_HASH_DIGEST_LEN_RMD 20
#define SEC_HASH_DIGEST_LEN_SHA1 20
#define SEC_HASH_DIGEST_LEN_SHA256 32
#define SEC_HASH_DIGEST_LEN_SHA384 48
#define SEC_HASH_DIGEST_LEN_SHA512 64
#define SEC_HASH_DIGEST_LEN_WHIRLPOOL 64
#define SEC_HASH_DIGEST_LEN_MAX 64
struct SEC_HASH_CTX_ST;
struct SEC_HASH_TEMPLATE_ST;
typedef struct SEC_HASH_TEMPLATE_ST
{
int type;
int md_size;
int blockSize;
STATUS (*init)(struct SEC_HASH_CTX_ST* ctx, const struct SEC_HASH_TEMPLATE_ST* hash_template);
STATUS (*update)(struct SEC_HASH_CTX_ST* ctx,const void* data,size_t count);
STATUS (*final)(struct SEC_HASH_CTX_ST* ctx,unsigned char* digest, unsigned int* digestLen);
STATUS (*ctrl)(struct SEC_HASH_CTX_ST* ctx, int type, void* arg, unsigned int* len);
STATUS (*copy)(struct SEC_HASH_CTX_ST* copy, struct SEC_HASH_CTX_ST* org);
void (*cleanup)(struct SEC_HASH_CTX_ST* ctx);
} SEC_HASH_TEMPLATE;
typedef struct SEC_HASH_CTX_ST
{
const SEC_HASH_TEMPLATE* hash;
unsigned long flags;
char* data;
} SEC_HASH_CTX;
/* Use secHash() if you have one consecutive memory segment to hash */
STATUS secHash(const void* data, size_t len, unsigned char* digest, unsigned int *out_len, const SEC_HASH_TEMPLATE* hash_template);
/* Use secHashInit(), secHashUpdate(), secHashFinal(), and secHashCleanup() if the memory you need to hash
* is divided into two or more segments. Note that each call to secHashInit() must be matched by a
* call to secHashCleanup().
*
* A normal call sequence would be:
* SEC_HASH_CTX ctx;
* secHashInit(&ctx, secHashSha256Templ());
* secHashUpdate(&ctx, data1, len1);
* secHashUpdate(&ctx, data2, len2);
* secHashUpdate(&ctx, data3, len3);
* secHashFinal(&ctx, digest, &dgst_len);
* secHashCleanup(&ctx);
*/
STATUS secHashInit(SEC_HASH_CTX* ctx, const SEC_HASH_TEMPLATE* hash_template);
STATUS secHashUpdate(SEC_HASH_CTX* ctx, const void* data, size_t count);
STATUS secHashFinal(SEC_HASH_CTX* ctx, unsigned char* digest, unsigned int* digestLen);
STATUS secHashCtrl(struct SEC_HASH_CTX_ST* ctx, int type, void* arg, unsigned int* len);
void secHashCleanup(SEC_HASH_CTX* ctx);
/* Use secHashCopy if you need to pre-compute some hashes, and re-use the pre-computed hashes.
* Note that every call to secHashCopy, must be matched by a call to secHashCleanup().
*
* A normal call sequence would be:
* SEC_HASH_CTX ctx, ctx2;
* secHashInit(&ctx, secHashSha256Templ());
* secHashUpdate(&ctx, data1, len1);
* secHashCopy(&ctx2, &ctx);
* secHashUpdate(&ctx, data2, len2);
* secHashFinal(&ctx, digest, &dgst_len);
* secHashCleanup(&ctx);
*
* secHashUpdate(&ctx2, data3, len3);
* secHashFinal(&ctx2, digest2, &dgst_len2);
* secHashCleanup(&ctx2);
*
* The hash result in digest2 is the same as if the following code had been used:
* SEC_HASH_CTX, ctx2;
* secHashInit(&ctx2, secHashSha256Templ());
* secHashUpdate(&ctx2, data1, len1);
* secHashUpdate(&ctx2, data3, len3);
* secHashFinal(&ctx, digest2, &dgst_len2);
* secHashCleanup(&ctx2);
*/
STATUS secHashCopy(SEC_HASH_CTX* copy, SEC_HASH_CTX* org);
/* Sets the default template functions. These APIs are used to register a new provider
* of a hash algorithm */
void secHashMd5TemplateSet(const SEC_HASH_TEMPLATE* ctx);
void secHashRmdTemplateSet(const SEC_HASH_TEMPLATE* ctx);
void secHashSha1TemplateSet(const SEC_HASH_TEMPLATE* ctx);
void secHashSha256TemplateSet(const SEC_HASH_TEMPLATE* ctx);
void secHashSha384TemplateSet(const SEC_HASH_TEMPLATE* ctx);
void secHashSha512TemplateSet(const SEC_HASH_TEMPLATE* ctx);
void secHashWhirlpoolTemplateSet(const SEC_HASH_TEMPLATE* ctx);
/* These APIs are used to fetch the default template for hash algorithms */
const SEC_HASH_TEMPLATE* secHashMd5TemplateGet(void);
const SEC_HASH_TEMPLATE* secHashRmdTemplateGet(void);
const SEC_HASH_TEMPLATE* secHashSha1TemplateGet(void);
const SEC_HASH_TEMPLATE* secHashSha256TemplateGet(void);
const SEC_HASH_TEMPLATE* secHashSha384TemplateGet(void);
const SEC_HASH_TEMPLATE* secHashSha512TemplateGet(void);
const SEC_HASH_TEMPLATE* secHashWhirlpoolTemplateGet(void);
#ifdef __cplusplus
}
#endif
#endif /* __INCsecHashh */
+47
View File
@@ -0,0 +1,47 @@
/* secHmac.h - HMAC library header file */
/*
* Copyright (c) 2015, 2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef __INCsecHmach
#define __INCsecHmach
/* includes */
#include <secHash.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* defines */
#define SEC_HMAC_MAX_BLOCK 128
/* typedefs */
struct SEC_HMAC_CTX_ST
{
SEC_HASH_CTX hashCtx;
unsigned char k_ipad[SEC_HMAC_MAX_BLOCK];
unsigned char k_opad[SEC_HMAC_MAX_BLOCK];
unsigned int keyLen;
};
typedef struct SEC_HMAC_CTX_ST SEC_HMAC_CTX;
/* function declarations */
STATUS secHmacInit(SEC_HMAC_CTX* ctx, const unsigned char* key, int keyLen, const SEC_HASH_TEMPLATE* hashTemplate);
STATUS secHmacUpdate(SEC_HMAC_CTX* ctx, const unsigned char* data, unsigned int dataLen);
STATUS secHmacFinal(SEC_HMAC_CTX* ctx, unsigned char* hmac, unsigned int* hmacLen);
void secHmacCleanup(SEC_HMAC_CTX* ctx);
STATUS secHmac(const unsigned char* key, int keyLen, unsigned char* data, unsigned int dataLen,
unsigned char* hmac, unsigned int* hmacLen, const SEC_HASH_TEMPLATE* hashTemplate);
STATUS secHmacCopy(SEC_HMAC_CTX* copy, SEC_HMAC_CTX* org);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCsecHmach */
@@ -0,0 +1,47 @@
/* secKeyStore.h - VxWorks Key Store library header file */
/*
* Copyright (c) 2015, 2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef __INCsecKeyStoreh
#define __INCsecKeyStoreh
/* includes */
#include <secSecret.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* defines */
/* typedefs */
struct evp_pkey_st;
struct x509_st;
/* function declarations */
struct evp_pkey_st* secKeyStoreGet(const char* key_id);
struct evp_pkey_st* secKeyStoreX509Get(struct x509_st* x509,
char* id,
int* len);
int secKeyStoreImport(const char* key_id,
struct evp_pkey_st* key);
int secKeyStoreDel(const char* key_id);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCsecKeyStoreh */
+42
View File
@@ -0,0 +1,42 @@
/* secPbkdf2.h - PBKDF2 library header file */
/*
* Copyright (c) 2015, 2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef __INCsecPbkdf2h
#define __INCsecPbkdf2h
/* includes */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* defines */
/* typedefs */
/* function declarations */
STATUS secPbkdf2Hmac
(
const char *pw,
int pwLen,
const unsigned char *salt,
int saltLen,
int c,
const SEC_HASH_TEMPLATE *hash,
int keyLen,
unsigned char *key
);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCsecPbkdf2h */
+69
View File
@@ -0,0 +1,69 @@
/* secSecret.h - vault secret library header file */
/*
* Copyright (c) 2015-2017, 2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef __INCsecSecreth
#define __INCsecSecreth
/* includes */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* defines */
#ifndef SEC_SECRET_KEY_ID_MAX
#define SEC_SECRET_KEY_ID_MAX 64
#endif
#ifndef SEC_SECRET_MAX_SECRET
#define SEC_SECRET_MAX_SECRET 256
#endif
/* typedefs */
typedef struct secKepBackend
{
STATUS (*kepGet) /* get KEP from backend */
(
char * buf,
int * len
);
}SEC_VAULT_KEP_BACKEND;
/* deprecated type */
typedef int (*SEC_VAULT_KEP_CB)(char* buf, int* len);
/* function declarations */
/* secure vault */
int secSecretImport (const char * keyId, const char * key, int keyLen);
int secSecretGet (const char * keyId, char * key, int * keyLen);
int secSecretDel (const char * keyId);
BOOL secSecretReadyCheck (const int delaySeconds);
STATUS securePartitionWaitMount (const char * pPartName);
/* KEP backend */
STATUS secVaultKepBackendSet (SEC_VAULT_KEP_BACKEND * pBackend);
STATUS secSecretKepGet (char * buf, int * len);
/* deprecated API */
int secVaultSetKepCb (SEC_VAULT_KEP_CB callback);
SEC_VAULT_KEP_CB secSecretGetKepCb (void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCsecSecreth */
@@ -0,0 +1,49 @@
/* secTrustStore.h - VxWorks trust store library header file */
/*
* Copyright (c) 2017, 2021, 2023 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef __INCsecTrustStoreh
#define __INCsecTrustStoreh
/* includes */
#include <vxWorks.h>
#include <openssl/x509.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* defines */
/* KeyUsage defines */
#define DIGITAL_SIGNATURE (1)
#define CONTENT_COMMITMENT (1<<1) /* previous editions of X.509
called this bit to nonRepudiation */
#define KEY_ENCIPHERMENT (1<<2)
#define DATA_ENCIPHERMENT (1<<3)
#define KEY_AGREEMENT (1<<4)
#define KEY_CERT_SIGN (1<<5)
#define CRL_SIGN (1<<6)
#define ENCIPHER_ONLY (1<<7)
#define DECIPHER_ONLY (1<<8)
/* typedefs */
typedef STATUS (*SEC_TRUST_STORE_PUBKEY_VALIDATE_CB)(const char* trustStoreId, const X509* cert, const unsigned int keyUsage);
/* function declarations */
extern STATUS secTrustStorePubKeyValidate(const char* trustStoreId, const X509* cert, const unsigned int keyUsage);
extern void secTrustStorePubKeyValidateProviderSet(const SEC_TRUST_STORE_PUBKEY_VALIDATE_CB provider);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCsecTrustStoreh */
+89
View File
@@ -0,0 +1,89 @@
/* secVault.h - Secrets repository library header file */
/*
* Copyright (c) 2015-2017, 2021 Wind River Systems, Inc.
*
* The right to copy, distribute, modify, or otherwise make use
* of this software may be licensed only pursuant to the terms
* of an applicable Wind River license agreement.
*/
#ifndef __INCsecVaulth
#define __INCsecVaulth
/* includes */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* defines */
#define SEC_VAULT_KEY_ID_MAX SEC_SECRET_KEY_ID_MAX
#define SEC_VAULT_MAX_SECRET SEC_SECRET_MAX_SECRET
#include <secSecret.h>
LOCAL int secVaultImport (const char * keyId, const char * key, int keyLen) _WRS_DEPRECATED("secVaultImport is deprecated. Use secSecretImport instead");
_WRS_INLINE int secVaultImport
(
const char * keyId,
const char * key,
int keyLen
)
{
return secSecretImport(keyId, key, keyLen);
}
LOCAL int secVaultGet (const char * keyId, char * key, int * keyLen) _WRS_DEPRECATED("secVaultGet is deprecated. Use secSecretGet instead");
_WRS_INLINE int secVaultGet
(
const char * keyId,
char * key,
int * keyLen
)
{
return (secSecretGet (keyId, key, keyLen));
}
LOCAL int secVaultDel (const char * keyId) _WRS_DEPRECATED("secVaultDel is deprecated. Use secSecretDel instead");
_WRS_INLINE int secVaultDel
(
const char * keyId
)
{
return secSecretDel(keyId);
}
/* KEP backend */
LOCAL STATUS secVaultKepGet (char * buf, int * len) _WRS_DEPRECATED("secVaultKepGet is deprecated. Use secSecretKepGet instead");
_WRS_INLINE STATUS secVaultKepGet
(
char * buf, int * len
)
{
return secSecretKepGet(buf, len);
}
LOCAL SEC_VAULT_KEP_CB secVaultGetKepCb (void) _WRS_DEPRECATED("secVaultGetKepCb is deprecated. Use secSecretGetKepCb instead");
_WRS_INLINE SEC_VAULT_KEP_CB secVaultGetKepCb
(
void
)
{
return secSecretGetKepCb();
}
/* typedefs */
/* function declarations */
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __INCsecVaulth */