diff options
Diffstat (limited to 'drivers/usb/host/dwc_common_port/dwc_dh.h')
-rw-r--r-- | drivers/usb/host/dwc_common_port/dwc_dh.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/drivers/usb/host/dwc_common_port/dwc_dh.h b/drivers/usb/host/dwc_common_port/dwc_dh.h new file mode 100644 index 000000000000..25c1cc0d588a --- /dev/null +++ b/drivers/usb/host/dwc_common_port/dwc_dh.h @@ -0,0 +1,106 @@ +/* ========================================================================= + * $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_ */ |