nuttx/drivers/crypto/pnt/pnt_se05x_api.h
2023-09-09 15:54:08 +08:00

300 lines
10 KiB
C

/****************************************************************************
* drivers/crypto/pnt/pnt_se05x_api.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
/* Copyright 2023 NXP */
#ifndef __INCLUDE_NUTTX_CRYPTO_PNT_PNT_API_H_
#define __INCLUDE_NUTTX_CRYPTO_PNT_PNT_API_H_
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/crypto/se05x.h>
#include <stdbool.h>
/****************************************************************************
* Public Types
****************************************************************************/
struct se05x_dev_s;
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
int pnt_se05x_open(FAR struct se05x_dev_s *se05x);
void pnt_se05x_close(FAR struct se05x_dev_s *se05x);
/****************************************************************************
* Name: pnt_se05x_get_info
*
* Description:
* Get information on the variant of the SE05x
*
* Input Parameters:
* se05x - Ptr to se05x device struct
* se05x_info - Ptr to storage of retrieved SE050 info.
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
int pnt_se05x_get_info(FAR struct se05x_dev_s *se05x,
FAR struct se05x_info_s *se05x_info);
/****************************************************************************
* Name: pnt_se05x_get_uid
*
* Description:
* Get the unique id of the SE05x
*
* Input Parameters:
* se05x - Ptr to se05x device struct
* se05x_uid - Ptr to storage for the unique id
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
int pnt_se05x_get_uid(FAR struct se05x_dev_s *se05x,
FAR struct se05x_uid_s *uid);
/****************************************************************************
* Name: pnt_se05x_generate_keypair
*
* Description:
* Generate a private/public keypair.
*
* Input Parameters:
* se05x - Ptr to se05x device struct
* generate_keypair_args - Ptr to arguments needed to generate keypair
* (input)
* ->id id where to store key
* ->cipher cipher type
* (defaults to se05x_asym_cipher_EC_NIST_P_256)
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
int pnt_se05x_generate_keypair(
FAR struct se05x_dev_s *se05x,
FAR struct se05x_generate_keypair_s *generate_keypair_args);
/****************************************************************************
* Name: pnt_se05x_set_public_key
*
* Description:
* Store key into keystore. Key must be in raw format
*
* Input Parameters:
* se05x - Ptr to se05x device struct
* set_publickey_args - Ptr to arguments needed to set public key
* (input)
* ->entry.id id where to store key
* ->entry.cipher cipher type
* (defaults to se05x_asym_cipher_EC_NIST_P_256)
* ->content assign with public key
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
int pnt_se05x_set_public_key(
FAR struct se05x_dev_s *se05x,
FAR struct se05x_key_transmission_s *set_publickey_args);
/****************************************************************************
* Name: pnt_se05x_set_data
*
* Description:
* Store data into keystore.
*
* Input Parameters:
* se05x - Ptr to se05x device struct
* set_publickey_args - Ptr to arguments needed to set data
* (input)
* ->entry.id id where to store key
* ->entry.cipher (not used)
* ->content assign with data
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
int pnt_se05x_set_data(
FAR struct se05x_dev_s *se05x,
FAR struct se05x_key_transmission_s *set_publickey_args);
/****************************************************************************
* Name: pnt_se05x_get_key
*
* Description:
* Get the key from keystore. Key is returned in raw format
*
* Input Parameters:
* se05x - Ptr to se05x device struct
* get_publickey_args - Ptr to arguments needed to get public key
* (input)
* ->entry.id id where to get key
* (output)
* ->entry.type key type
* ->content public key will be copied into
* buffer. Must be allocated!
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
int pnt_se05x_get_key(
FAR struct se05x_dev_s *se05x,
FAR struct se05x_key_transmission_s *get_publickey_args);
/****************************************************************************
* Name: pnt_se05x_get_data
*
* Description:
* Get data from keystore. The returned data is raw data
*
* Input Parameters:
* se05x - Ptr to se05x device struct
* get_data_args - Ptr to arguments needed to get public key
* (input)
* ->entry.id id where to get key
* (output)
* ->entry.type key type
* ->content data will be copied into
* buffer. Must be allocated!
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
int pnt_se05x_get_data(FAR struct se05x_dev_s *se05x,
FAR struct se05x_key_transmission_s *get_data_args);
/****************************************************************************
* Name: pnt_se05x_delete_key
*
* Description:
* Delete key from keystore
*
* Input Parameters:
* se05x - Ptr to se05x device struct
* key_id - key ID
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
int pnt_se05x_delete_key(FAR struct se05x_dev_s *se05x, uint32_t key_id);
/****************************************************************************
* Name: pnt_se05x_derive_key
*
* Description:
* Derive a symmetric key using a private key of an owned keypair and
* a public key that is received from the peer.
* Currently only keys derived from ecdsa keys are supported
*
* Input Parameters:
* se05x - Ptr to se05x device struct
* derive_key_args - Ptr to arguments needed to derive symmetric key
* (input)
* ->private_key_id id of entry in keystore to get private key
* This entry may be a keypair
* ->public_key_id id of entry in keystore to get public key
* (output)
* ->content symmetric key will be copied into
* buffer. Must be allocated! (>= 32 bytes)
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
int pnt_se05x_derive_key(FAR struct se05x_dev_s *se05x,
FAR struct se05x_derive_key_s *derive_key_args);
/****************************************************************************
* Name: pnt_se05x_create_signature
*
* Description:
* Create a signature, using a hash value and a private key.
* To create the signature the hash value is encrypted using the private
*key.
*
* Input Parameters:
* se05x - Ptr to se05x device struct
* create_signature_args - Ptr to arguments needed to create signature
* (input)
* ->key_id id where to get private key
* ->algorithm hash algorithm
* ->tbs digest
* (output)
* ->signature the generated signature. Must be allocated!
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
int pnt_se05x_create_signature(
FAR struct se05x_dev_s *se05x,
FAR struct se05x_signature_s *create_signature_args);
/****************************************************************************
* Name: pnt_se05x_verify_signature
*
* Description:
* Verify a signature, using a hash value, a signature and a public key.
* To verify the signature, the provided signature is decrypted using the
* public key. The results in the original hash value which should be the
* same as the provided hash value.
*
* Input Parameters:
* se05x - Ptr to se05x device struct
* verify_signature_args - Ptr to arguments needed to create signature
* (input)
* ->key_id id where to get public key
* ->algorithm hash algorithm
* ->tbs digest
* ->signature the signature
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
int pnt_se05x_verify_signature(
FAR struct se05x_dev_s *se05x,
FAR struct se05x_signature_s *verify_signature_args);
#endif /* __INCLUDE_NUTTX_CRYPTO_PNT_PNT_API_H_ */