|
Packit |
8681c6 |
/*
|
|
Packit |
8681c6 |
* COPYRIGHT (c) International Business Machines Corp. 2011-2017
|
|
Packit |
8681c6 |
*
|
|
Packit |
8681c6 |
* This program is provided under the terms of the Common Public License,
|
|
Packit |
8681c6 |
* version 1.0 (CPL-1.0). Any use, reproduction or distribution for this
|
|
Packit |
8681c6 |
* software constitutes recipient's acceptance of CPL-1.0 terms which can be
|
|
Packit |
8681c6 |
* found in the file LICENSE file or at
|
|
Packit |
8681c6 |
* https://opensource.org/licenses/cpl1.0.php
|
|
Packit |
8681c6 |
*/
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/*----------------------------------------------------------------------
|
|
Packit |
8681c6 |
* IBM Research & Development
|
|
Packit |
8681c6 |
* Author: Gehrmann, Tobias (tobias.gehrmann@de.ibm.com)
|
|
Packit |
8681c6 |
*----------------------------------------------------------------------*/
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#if !defined(__EP11ADM_H__)
|
|
Packit |
8681c6 |
#define __EP11ADM_H__
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#if !defined(INT64_MIN)
|
|
Packit |
8681c6 |
#error "We need 32/64-bit <stdint.h> types, please include before this file."
|
|
Packit |
8681c6 |
#endif
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
// these numbers apply to current version, subject to change
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
#if !defined(XCP_SERIALNR_CHARS)
|
|
Packit |
8681c6 |
#define XCP_SERIALNR_CHARS 8
|
|
Packit |
8681c6 |
#endif
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#if !defined(XCP_KEYCSUM_BYTES)
|
|
Packit |
8681c6 |
#define XCP_KEYCSUM_BYTES (256/8) /* full size of verific. pattern */
|
|
Packit |
8681c6 |
#endif
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#if !defined(XCP_ADMCTR_BYTES)
|
|
Packit |
8681c6 |
#define XCP_ADMCTR_BYTES (128/8) /* admin transaction ctrs */
|
|
Packit |
8681c6 |
#endif
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#if !defined(XCP_ADM_REENCRYPT)
|
|
Packit |
8681c6 |
#define XCP_ADM_REENCRYPT 25 /* transform blobs to next WK */
|
|
Packit |
8681c6 |
#endif
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#if !defined(CK_IBM_XCPQ_DOMAIN)
|
|
Packit |
8681c6 |
#define CK_IBM_XCPQ_DOMAIN 3 /* list domain's WK hashes */
|
|
Packit |
8681c6 |
#endif
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#if !defined(CK_IBM_DOM_COMMITTED_NWK)
|
|
Packit |
8681c6 |
#define CK_IBM_DOM_COMMITTED_NWK 8 /* next WK is active(committed) */
|
|
Packit |
8681c6 |
#endif
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
typedef struct XCPadmresp {
|
|
Packit |
8681c6 |
uint32_t fn;
|
|
Packit |
8681c6 |
uint32_t domain;
|
|
Packit |
8681c6 |
uint32_t domainInst;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/* module ID || module instance */
|
|
Packit |
8681c6 |
unsigned char module[XCP_SERIALNR_CHARS + XCP_SERIALNR_CHARS];
|
|
Packit |
8681c6 |
unsigned char modNr[XCP_SERIALNR_CHARS];
|
|
Packit |
8681c6 |
unsigned char modInst[XCP_SERIALNR_CHARS];
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
unsigned char tctr[XCP_ADMCTR_BYTES]; /* transaction counter */
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
CK_RV rv;
|
|
Packit |
8681c6 |
uint32_t reason;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
// points to original response; NULL if no payload
|
|
Packit |
8681c6 |
// make sure it's copied if used after releasing response block
|
|
Packit |
8681c6 |
//
|
|
Packit |
8681c6 |
const unsigned char *payload;
|
|
Packit |
8681c6 |
size_t pllen;
|
|
Packit |
8681c6 |
} *XCPadmresp_t;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#if !defined(__XCP_H__)
|
|
Packit |
8681c6 |
typedef struct CK_IBM_DOMAIN_INFO {
|
|
Packit |
8681c6 |
CK_ULONG domain;
|
|
Packit |
8681c6 |
CK_BYTE wk[XCP_KEYCSUM_BYTES];
|
|
Packit |
8681c6 |
CK_BYTE nextwk[XCP_KEYCSUM_BYTES];
|
|
Packit |
8681c6 |
CK_ULONG flags;
|
|
Packit |
8681c6 |
CK_BYTE mode[8];
|
|
Packit |
8681c6 |
} CK_IBM_DOMAIN_INFO;
|
|
Packit |
8681c6 |
#endif
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/*----------------------------------------------------------------------
|
|
Packit |
8681c6 |
* build a query block to (blk,blen), querying 'fn'
|
|
Packit |
8681c6 |
* (payload,plen) copied to query block if non-NULL
|
|
Packit |
8681c6 |
*
|
|
Packit |
8681c6 |
* returns written bytecount; size query if blk is NULL
|
|
Packit |
8681c6 |
*
|
|
Packit |
8681c6 |
* *minf used for module ID and transaction counter
|
|
Packit |
8681c6 |
* ignored for commands where those fields are ignored
|
|
Packit |
8681c6 |
*/
|
|
Packit |
8681c6 |
long xcpa_cmdblock(unsigned char *blk,
|
|
Packit |
8681c6 |
size_t blen,
|
|
Packit |
8681c6 |
unsigned int fn,
|
|
Packit |
8681c6 |
const struct XCPadmresp *minf,
|
|
Packit |
8681c6 |
const unsigned char *tctr, /* XCP_ADMCTR_BYTES */
|
|
Packit |
8681c6 |
const unsigned char *payload, size_t plen) ;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/*----------------------------------------------------------------------
|
|
Packit |
8681c6 |
* returns <0 if response is malformed, or contents invalid
|
|
Packit |
8681c6 |
*
|
|
Packit |
8681c6 |
* parse embedded return value from response, writes to *rv if non-NULL
|
|
Packit |
8681c6 |
* (outside envelope always reports CKR_OK, unless infrastructure failed)
|
|
Packit |
8681c6 |
*/
|
|
Packit |
8681c6 |
long xcpa_internal_rv(const unsigned char *rsp, size_t rlen,
|
|
Packit |
8681c6 |
struct XCPadmresp *rspblk, CK_RV *rv) ;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
/*----------------------------------------------------------------------
|
|
Packit |
8681c6 |
* in: [0] query type
|
|
Packit |
8681c6 |
* out: [0] packed info structure
|
|
Packit |
8681c6 |
*
|
|
Packit |
8681c6 |
* outputs are fixed size, except CK_IBM_XCPQ_DOMAINS, which returns a
|
|
Packit |
8681c6 |
* list therefore, infbytes is ignored by other types (we still check
|
|
Packit |
8681c6 |
* if present)
|
|
Packit |
8681c6 |
*/
|
|
Packit |
8681c6 |
CK_RV m_get_xcp_info (CK_VOID_PTR pinfo, CK_ULONG_PTR infbytes,
|
|
Packit |
8681c6 |
unsigned int query,
|
|
Packit |
8681c6 |
unsigned int subquery, target_t target) ;
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
|
|
Packit |
8681c6 |
#endif /* !defined(__EP11ADM_H__) */
|