forked from Qortal/Brooklyn
107 lines
4.0 KiB
C
107 lines
4.0 KiB
C
/* =========================================================================
|
|
* $File: //dwh/usb_iip/dev/software/dwc_common_port_2/dwc_dh.h $
|
|
* $Revision: #4 $
|
|
* $Date: 2010/09/28 $
|
|
* $Change: 1596182 $
|
|
*
|
|
* Synopsys Portability Library Software and documentation
|
|
* (hereinafter, "Software") is an Unsupported proprietary work of
|
|
* Synopsys, Inc. unless otherwise expressly agreed to in writing
|
|
* between Synopsys and you.
|
|
*
|
|
* The Software IS NOT an item of Licensed Software or Licensed Product
|
|
* under any End User Software License Agreement or Agreement for
|
|
* Licensed Product with Synopsys or any supplement thereto. You are
|
|
* permitted to use and redistribute this Software in source and binary
|
|
* forms, with or without modification, provided that redistributions
|
|
* of source code must retain this notice. You may not view, use,
|
|
* disclose, copy or distribute this file or any information contained
|
|
* herein except pursuant to this license grant from Synopsys. If you
|
|
* do not agree with this notice, including the disclaimer below, then
|
|
* you are not authorized to use the Software.
|
|
*
|
|
* THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS"
|
|
* BASIS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
* FOR A PARTICULAR PURPOSE ARE HEREBY DISCLAIMED. IN NO EVENT SHALL
|
|
* SYNOPSYS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
|
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
|
|
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
|
* DAMAGE.
|
|
* ========================================================================= */
|
|
#ifndef _DWC_DH_H_
|
|
#define _DWC_DH_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "dwc_os.h"
|
|
|
|
/** @file
|
|
*
|
|
* This file defines the common functions on device and host for performing
|
|
* numeric association as defined in the WUSB spec. They are only to be
|
|
* used internally by the DWC UWB modules. */
|
|
|
|
extern int dwc_dh_sha256(uint8_t *message, uint32_t len, uint8_t *out);
|
|
extern int dwc_dh_hmac_sha256(uint8_t *message, uint32_t messagelen,
|
|
uint8_t *key, uint32_t keylen,
|
|
uint8_t *out);
|
|
extern int dwc_dh_modpow(void *mem_ctx, void *num, uint32_t num_len,
|
|
void *exp, uint32_t exp_len,
|
|
void *mod, uint32_t mod_len,
|
|
void *out);
|
|
|
|
/** Computes PKD or PKH, and SHA-256(PKd || Nd)
|
|
*
|
|
* PK = g^exp mod p.
|
|
*
|
|
* Input:
|
|
* Nd = Number of digits on the device.
|
|
*
|
|
* Output:
|
|
* exp = A 32-byte buffer to be filled with a randomly generated number.
|
|
* used as either A or B.
|
|
* pk = A 384-byte buffer to be filled with the PKH or PKD.
|
|
* hash = A 32-byte buffer to be filled with SHA-256(PK || ND).
|
|
*/
|
|
extern int dwc_dh_pk(void *mem_ctx, uint8_t nd, uint8_t *exp, uint8_t *pkd, uint8_t *hash);
|
|
|
|
/** Computes the DHKEY, and VD.
|
|
*
|
|
* If called from host, then it will comput DHKEY=PKD^exp % p.
|
|
* If called from device, then it will comput DHKEY=PKH^exp % p.
|
|
*
|
|
* Input:
|
|
* pkd = The PKD value.
|
|
* pkh = The PKH value.
|
|
* exp = The A value (if device) or B value (if host) generated in dwc_wudev_dh_pk.
|
|
* is_host = Set to non zero if a WUSB host is calling this function.
|
|
*
|
|
* Output:
|
|
|
|
* dd = A pointer to an buffer to be set to the displayed digits string to be shown
|
|
* to the user. This buffer should be at 5 bytes long to hold 4 digits plus a
|
|
* null termination character. This buffer can be used directly for display.
|
|
* ck = A 16-byte buffer to be filled with the CK.
|
|
* kdk = A 32-byte buffer to be filled with the KDK.
|
|
*/
|
|
extern int dwc_dh_derive_keys(void *mem_ctx, uint8_t nd, uint8_t *pkh, uint8_t *pkd,
|
|
uint8_t *exp, int is_host,
|
|
char *dd, uint8_t *ck, uint8_t *kdk);
|
|
|
|
#ifdef DH_TEST_VECTORS
|
|
extern void dwc_run_dh_test_vectors(void);
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* _DWC_DH_H_ */
|