Blame usr/sbin/pkcsep11_migrate/ep11adm.h

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__) */