Blame SOURCES/0012-EP11-Update-EP11-host-library-header-files.patch

971d89
From 1197829d87732e1cae18ee64eefe44f0a6cb391f Mon Sep 17 00:00:00 2001
971d89
From: Ingo Franzki <ifranzki@linux.ibm.com>
971d89
Date: Wed, 16 Feb 2022 10:09:10 +0100
971d89
Subject: [PATCH 12/34] EP11: Update EP11 host library header files
971d89
971d89
Signed-off-by: Ingo Franzki <ifranzki@linux.ibm.com>
971d89
---
971d89
 usr/lib/ep11_stdll/ep11.h    | 1345 +++++++++++++++++++++++++-----------------
971d89
 usr/lib/ep11_stdll/ep11adm.h |  305 +++-------
971d89
 2 files changed, 911 insertions(+), 739 deletions(-)
971d89
971d89
diff --git a/usr/lib/ep11_stdll/ep11.h b/usr/lib/ep11_stdll/ep11.h
971d89
index cd4f11e5..c68dd045 100644
971d89
--- a/usr/lib/ep11_stdll/ep11.h
971d89
+++ b/usr/lib/ep11_stdll/ep11.h
971d89
@@ -16,7 +16,6 @@
971d89
 
971d89
 #if !defined(XCP_H__)
971d89
 #define XCP_H__
971d89
-
971d89
 #if !defined(CKR_OK)
971d89
 #include "pkcs11.h"
971d89
 #endif
971d89
@@ -25,195 +24,10 @@
971d89
 #error "We need 64-bit <stdint.h> types, please include before this file."
971d89
 #endif
971d89
 
971d89
-// SHA224 etc. are additions to PKCS#11 2.20
971d89
-// remove these if host migrates beyond 2.20 as base minimum [unlikely]
971d89
-//
971d89
-#if !defined(CKM_SHA224)
971d89
-#define  CKM_SHA224                 0x00000255
971d89
-#define  CKM_SHA224_HMAC            0x00000256
971d89
-#define  CKM_SHA224_HMAC_GENERAL    0x00000257
971d89
-#define  CKM_SHA224_RSA_PKCS        0x00000046
971d89
-#define  CKM_SHA224_RSA_PKCS_PSS    0x00000047
971d89
-#define  CKM_SHA224_KEY_DERIVATION  0x00000396
971d89
-#define  CKM_AES_CTR                0x00001086
971d89
-#define  CKG_MGF1_SHA224            0x00000005
971d89
-#endif
971d89
-
971d89
-#if !defined(CKM_AES_CMAC)
971d89
-#define  CKM_AES_CMAC               0x0000108a
971d89
-#endif
971d89
-
971d89
-#if !defined(CKM_DES3_CMAC)
971d89
-#define  CKM_DES3_CMAC              0x00000138
971d89
-#endif
971d89
-
971d89
-
971d89
-
971d89
-// max value for target groups
971d89
-#define XCP_MAX_GRPIDX 1024u
971d89
-//
971d89
-// current version of XCP_Module structure; host code SHOULD interact with
971d89
-// future/past versions, MUST be set by caller before using m_add_module()
971d89
-// valid versions are all >0
971d89
-#define  XCP_MOD_VERSION  2
971d89
 //
971d89
 // used for internal and external paths/addresses
971d89
 #define  MAX_FNAME_CHARS  256
971d89
 
971d89
-// macros for setting/checking and removing domains from (tgt.mgmt) domain mask
971d89
-#define XCPTGTMASK_SET_DOM(mask, domain)      \
971d89
-                           mask[((domain)/8)] |=   (1 << (7-(domain)%8))
971d89
-#define XCPTGTMASK_DOM_IS_SET(mask, domain)   \
971d89
-                           (mask[((domain)/8)] &   (1 << (7-(domain)%8)))
971d89
-#define XCPTGTMASK_CLR_DOM(mask, domain)      \
971d89
-                           mask[((domain)/8)] &=  ~(1 << (7-(domain)%8))
971d89
-//
971d89
-
971d89
-
971d89
-/* flags that can be set for the target tokens
971d89
- *
971d89
- * This flags are domain specific and are therefore called domain flags
971d89
- *
971d89
- * start of flags is >16 Bit. Max value for domains is 0xFF. Should be enough
971d89
- * room for extensions
971d89
- */
971d89
-#define XCP_TGTFL_WCAP     0x10000000  /* Capture wire request in output buffer
971d89
-                                        * without sending it to the module
971d89
-                                        */
971d89
-#define XCP_TGTFL_WCAP_SQ  0x20000000  /* Size query: Return size of request in
971d89
-                                        * output buffer length field
971d89
-                                        */
971d89
-#define XCP_TGTFL_SET_SCMD 0x40000000  /* Protected key special command: Set the
971d89
-                                        * special command flag in the CPRB
971d89
-                                        * header
971d89
-                                        */
971d89
-#define XCP_TGTFL_API_CHKD 0x80000000  /* supported API version of modules in
971d89
-                                        * target (group) has been checked
971d89
-                                        */
971d89
-
971d89
-#define XCP_TGTFL_NO_LOCK 0x01000000   /* target token ignores sequential locks
971d89
-                                        * for target probing
971d89
-                                        */
971d89
-#define XCP_TGTFL_SET_ACMD 0x04000000  /* add CPRB admin flag to CPRB header */
971d89
-
971d89
-//--------------------------------------
971d89
-// socket use only
971d89
-#define  XCP_MAXCONNECTIONS 64       /* max value for active connections */
971d89
-#define  XCP_MAX_PORT     0xffff
971d89
-
971d89
-// hostname and port value fore one module
971d89
-typedef struct XCP_ModuleSocket {
971d89
-	char host[ MAX_FNAME_CHARS +1 ];
971d89
-	uint32_t port;
971d89
-} *XCP_ModuleSocket_t ;
971d89
-
971d89
-
971d89
-//--------------------------------------
971d89
-// diagnostics use only
971d89
-typedef struct XCP_DomainPerf {
971d89
-	/* perf value of last request per domain
971d89
-	 *
971d89
-	 * At the moment unused
971d89
-	 * */
971d89
-	unsigned int lastperf[ 256 ];
971d89
-} *XCP_DomainPerf_t;
971d89
-
971d89
-
971d89
-//--------------------------------------
971d89
-// subsequent communications with a module MAY skip infrastructure-specific
971d89
-// fields, such as a query not reporting device handles etc., even if they
971d89
-// have been supplied originally when the module has been registered.
971d89
-//
971d89
-typedef struct XCP_Module {
971d89
-	uint32_t version;     /* >0 for supported API versions */
971d89
-
971d89
-	uint64_t flags;       /* see XCP_Module_Flags */
971d89
-
971d89
-	uint32_t domains;     /* max# addressable under this module;
971d89
-	                       * cached from OS
971d89
-	                       *
971d89
-	                       * when callers set domains  to 0, the library
971d89
-	                       * returns the module-claimed domain count.
971d89
-	                       */
971d89
-
971d89
-	unsigned char domainmask[ 256 /8 ];
971d89
-	                      /* higher domain# through future flags (none
971d89
-	                       * currently defined) which would add things
971d89
-	                       * like 'FLAG_256_1023' etc. at the same time,
971d89
-	                       * we would add domainmask2[] etc.
971d89
-	                       * corresponding new fields.
971d89
-	                       *
971d89
-	                       * new fields would then store mask for
971d89
-	                       * domains 256+ etc.
971d89
-	                       *
971d89
-	                       * domain #0 is bit x80 of 1st byte,
971d89
-	                       * #255 is bit 0x01 of last byte.
971d89
-	                       */
971d89
-
971d89
-		// when a domainmask is supplied, with bits set beyond
971d89
-		// what the module supports, the bitmask is trimmed to
971d89
-		// the supported range, but this is NOT reported as an
971d89
-		// error, unless XCP_MFL_STRICT is also supplied.
971d89
-		//
971d89
-		// without XCP_MFL_STRICT, callers are expected to check
971d89
-		// at least the returned domain count.
971d89
-
971d89
-			/* used only when flags includes XCP_MFL_SOCKET */
971d89
-	struct XCP_ModuleSocket socket;
971d89
-
971d89
-			/* used when system exposes modules through an
971d89
-			 * array of transparent pipes, or similar abstraction
971d89
-			 * (such as mainframe AP Queues, or other Linux
971d89
-			 * 'device-minor' numbers etc.). Interpretation
971d89
-			 * is platform-dependent.
971d89
-			 *
971d89
-			 * used only when flags includes XCP_MFL_MODULE
971d89
-			 */
971d89
-	uint32_t module_nr;
971d89
-
971d89
-			/* used by systems which associate devices with
971d89
-			 * device handles/structs/etc. persistent state.
971d89
-			 * opaque pointer, usually a const pointer to
971d89
-			 * such aux structs, MAY be stored here.
971d89
-			 *
971d89
-			 * interpretation is platform-dependent.
971d89
-			 * used only when flags includes XCP_MFL_MHANDLE
971d89
-			 */
971d89
-	void *mhandle;
971d89
-			/* diagnostics use only, when XCP_MFL_PERF is set */
971d89
-	struct XCP_DomainPerf perf;
971d89
-	//-----  end of v1 fields  -------------------------------------------
971d89
-
971d89
-	uint32_t api; /* module api version*/
971d89
-	//-----  end of v2 fields  -------------------------------------------
971d89
-} *XCP_Module_t ;
971d89
-
971d89
-typedef enum {
971d89
-	XCP_MFL_SOCKET       =    1,  /* backend is socket-attached */
971d89
-	XCP_MFL_MODULE       =    2,  /* backends identified in
971d89
-	                                 array-of-modules */
971d89
-	XCP_MFL_MHANDLE      =    4,  /* backends uses 'module handle' field */
971d89
-	XCP_MFL_PERF         =    8,  /* performance statistics collected
971d89
-	                               * for this module, see .perf
971d89
-	                               */
971d89
-	XCP_MFL_VIRTUAL      = 0x10,  /* queried 'target' is a load-balancer,
971d89
-	                               * other other group.
971d89
-	                               */
971d89
-	XCP_MFL_STRICT       = 0x20,  /* enable aggressive error checking,
971d89
-	                               * see field descriptions for effect
971d89
-	                               */
971d89
-	XCP_MFL_PROBE        = 0x40,  /* send api query to module, to check if
971d89
-	                               * target(s) can be used
971d89
-	                               */
971d89
-	XCP_MFL_ALW_TGT_ADD  = 0x80,  /* Allows it to use a target in any
971d89
-	                               * functional and admin call without
971d89
-	                               * adding it beforehand with
971d89
-	                               * m_add_module()
971d89
-	                               */
971d89
-	XCP_MFL_MAX          = 0xff
971d89
-} XCP_Module_Flags;
971d89
-
971d89
-
971d89
 // Error Values for functions that do not return CK_RV
971d89
 // general errors
971d89
 #define XCP_OK                   0  /* function successful
971d89
@@ -282,17 +96,15 @@ typedef enum {
971d89
                                       * flag is not active
971d89
                                       */
971d89
 
971d89
-
971d89
 /*--------------------------------------------------------------------------*/
971d89
 #define XCP_COMMON_PUBLIC_H__
971d89
 
971d89
 
971d89
-#define  XCP_API_VERSION  0x071d     /* major[8] minor[8] */
971d89
+#define  XCP_API_VERSION  0x0810     /* major[8] minor[8] */
971d89
 #define  XCP_API_ORDINAL  0x0004
971d89
                        /* increment this with every major/minor change */
971d89
 
971d89
-#define  XCP_HOST_API_VER  0x030100   /* major[8] minor[8] fixpack[8] */
971d89
-#define  XCP_RPM_VERSION   XCP_HOST_API_VER   /* deprecated */
971d89
+#define  XCP_HOST_API_VER  0x040000   /* major[8] minor[8] fixpack[8] */
971d89
 
971d89
 /* HSM connection information; not for PKCS11 user consumption */
971d89
 #define  XCP_HSM_AGENT_ID   0x5843           /* ASCII "XC" */
971d89
@@ -375,6 +187,8 @@ typedef enum {
971d89
 #define  CKR_IBM_TARGET_INVALID     (CKR_VENDOR_DEFINED +0x10030)
971d89
 
971d89
 
971d89
+#define  CKR_IBM_PQC_PARAMS_NOT_SUPPORTED  (CKR_VENDOR_DEFINED +0x10031)
971d89
+
971d89
 
971d89
 // Error returned if internal verification of crypto engines fail
971d89
 #define CKR_IBM_ERROR_STATE       (CKR_VENDOR_DEFINED +0x10101)
971d89
@@ -445,12 +259,18 @@ typedef enum {
971d89
 #define  CKM_IBM_ED448_SHA3                 (CKM_VENDOR_DEFINED +0x1001f)
971d89
 
971d89
 
971d89
+// round counts are passed as mechanism parameters
971d89
+#define  CKM_IBM_SIPHASH                    (CKM_VENDOR_DEFINED +0x10021)
971d89
+
971d89
+
971d89
 // these need a strength definition
971d89
 // XCP_U32_VALUE_BITS/CKA_VALUE_BITS would be sufficient; strength->K/L mapping
971d89
 //
971d89
 // umbrella mech for PQC/Crystals variants
971d89
 #define  CKM_IBM_DILITHIUM                  (CKM_VENDOR_DEFINED +0x10023)
971d89
          // ^^^ sign/verify plus keygen only
971d89
+#define  CKM_IBM_KYBER                      (CKM_VENDOR_DEFINED +0x10024)
971d89
+         // ^^^ en/decrypt, keygen, key transport, and (hybrid) key derivation
971d89
 
971d89
 // SHA-3 HMAC variants
971d89
 #define  CKM_IBM_SHA3_224_HMAC              (CKM_VENDOR_DEFINED +0x10025)
971d89
@@ -481,6 +301,10 @@ typedef enum {
971d89
 	ECSG_IBM_MAX                = ECSG_IBM_ECSDSA_COMPR_MULTI,
971d89
 } ECSG_Var_t;
971d89
 
971d89
+#define  CK_IBM_ECSG_IBM_ECSDSA_S256             ECSG_IBM_ECSDSA_S256
971d89
+#define  CK_IBM_ECSG_IBM_ECDSA_COMPR_MULTI_S256  ECSG_IBM_ECDSA_COMPR_MULTI_S256
971d89
+#define  CK_IBM_ECSG_IBM_MAX                     ECSG_IBM_MAX
971d89
+
971d89
 
971d89
 //---  transport additions  --------------------------------------------------
971d89
 #define  CKM_IBM_CLEARKEY_TRANSPORT    (CKM_VENDOR_DEFINED +0x20001)
971d89
@@ -565,6 +389,12 @@ typedef enum {
971d89
 
971d89
 #define CKA_IBM_PQC_PARAMS (CKA_VENDOR_DEFINED +0x1000e)
971d89
 
971d89
+// query or modify login session an object is bound to
971d89
+#define  CKA_IBM_LOGIN_SESSION     (CKA_VENDOR_DEFINED +0x1000f)
971d89
+
971d89
+// query MAC'd spki from a private key
971d89
+#define  CKA_IBM_MACED_PUBLIC_KEY_INFO (CKA_VENDOR_DEFINED +0x20002)
971d89
+
971d89
 // direct access to attributes' wire form
971d89
 // parameters of this attribute, if it's the only one present,
971d89
 // inserted verbatim into request package
971d89
@@ -574,6 +404,9 @@ typedef enum {
971d89
 // matches the key type constant for clear key Dilithium with ICSF
971d89
 #define CKK_IBM_PQC_DILITHIUM      (CKK_VENDOR_DEFINED +0x10023)
971d89
 
971d89
+#define CKK_IBM_PQC_KYBER          (CKK_VENDOR_DEFINED +0x10024)
971d89
+
971d89
+
971d89
 
971d89
 
971d89
 
971d89
@@ -583,6 +416,7 @@ typedef enum {
971d89
 #define XCP_MOD_ERROR_STATE_SYSTEST_CMD       0x00000003
971d89
 #define XCP_MOD_ERROR_STATE_TRNG_HEALTH       0x00000004
971d89
 
971d89
+
971d89
 /*----------------------------------------------------------------------------
971d89
  * sizes related to blobs and host-visible entities
971d89
  *
971d89
@@ -599,10 +433,10 @@ typedef enum {
971d89
 #define  XCP_BLOBCLRATTR_BYTES           8  /* clear blob attr's bytecount    */
971d89
                                             /* keep in sync with objattr_t    */
971d89
 #define  XCP_BLOBCLRMODE_BYTES           8  /* clear blob modefield bytecount */
971d89
-#define  MOD_WRAP_BLOCKSIZE ((size_t) (128 /8)) /* blob crypt block bytecount */
971d89
+#define  XCP_WRAP_BLOCKSIZE ((size_t) (128 /8)) /* blob crypt block bytecount */
971d89
 #define  XCP_MACKEY_BYTES       (256 /8)   /* derived from controlling WK     */
971d89
 //
971d89
-#define  XCP_PIN_SALT_BYTES  MOD_WRAP_BLOCKSIZE
971d89
+#define  XCP_PIN_SALT_BYTES  XCP_WRAP_BLOCKSIZE
971d89
 #define  XCP_PINBLOB_BYTES  \
971d89
         (XCP_WK_BYTES +XCP_PIN_SALT_BYTES +XCP_HMAC_BYTES)
971d89
 
971d89
@@ -664,6 +498,18 @@ typedef enum {
971d89
 
971d89
 #define  XCP_BTC_VERSION  1
971d89
 
971d89
+#define  XCP_KYBER_KEM_VERSION  0
971d89
+
971d89
+#define  XCP_KYBER_KEM_MIN_WIRE_BYTES (4 + 4 + 4 + 4 + 4 + 4) /* version[32] ||
971d89
+                                                                 kdf[32]     ||
971d89
+                                                                 mode[32]    ||
971d89
+                                                                 cphr[32]    ||
971d89
+                                                                 shrd[32]    ||
971d89
+                                                                 blob  [32] */
971d89
+
971d89
+#define  XCP_KYBER_RAW_BYTES  32
971d89
+
971d89
+
971d89
 #define  XCP_ECDH1_DERIVE_MAX_PUBLIC_BYTES 1024 /* limit public data length to
971d89
                                                    reasonable number of bytes */
971d89
 //
971d89
@@ -698,6 +544,8 @@ typedef enum {
971d89
 	                             // related to the protected-key capability
971d89
 	                             // see also CKA_IBM_PROTKEY_* description
971d89
 
971d89
+	CKF_IBM_HW_DUAL_OA = 0x1000, // module supports dual OA certs/signatures
971d89
+	                             // see CK_IBM_XCPXQ_OA_CAP for more details
971d89
 } XCP_CK_EXTFLAGS_t;
971d89
 
971d89
 // these numbers apply to current version, subject to change
971d89
@@ -720,7 +568,7 @@ typedef enum {
971d89
 
971d89
 // ~arbitrary limit on acceptable admin. certificates
971d89
 // additional limits, such as transport-bytecount, may restrict further
971d89
-#define  XCP_CERT_MAX_BYTES   ((size_t) 4096)
971d89
+#define  XCP_CERT_MAX_BYTES   ((size_t) 12288) /* fits dil certs (8k + meta) */
971d89
 #define  XCP_CERTHASH_BYTES   (256/8)
971d89
       /* hash or SKI of public key, or other hash-identified things; SHA-256 */
971d89
 
971d89
@@ -734,6 +582,9 @@ typedef enum {
971d89
 		/* ^^^ increase this when policy moves beyond shorter curves */
971d89
 #define  XCP_MAX_EC_CURVE_BITS   521
971d89
 
971d89
+#define  XCP_MAX_DIL_SIGNATURE_BYTES 4668 /* max. length of dil. 8-7 sigs    */
971d89
+#define  XCP_MAX_SINFO_META_BYTES     100 /* signer info framework bytes     */
971d89
+
971d89
 /* bytecount of raw (generic) keys, not key schedules */
971d89
 #define  MOD_MAX_SYMMKEY_BYTES   256
971d89
 
971d89
@@ -754,8 +605,20 @@ typedef enum {
971d89
 	/* trailing big-endian bitcount field after UnwrapKey() checksum */
971d89
 
971d89
 /* card(OA) signature bytecount: SKI-identified SignerInfo,
971d89
-   4096-bit RSA signature, with SHA-256 hash */
971d89
-#define  XCP_RSPSIG_MAX_BYTES    (75 +4096/8)
971d89
+ * Non quantum safe: Must contain space for either:
971d89
+ *  - 4096-bit RSA signature, hash OID, encr. OID and SKI
971d89
+ *  - EC-P521 signature, hash OID, encr. OID and SKI
971d89
+ */
971d89
+#define  XCP_RSPSIG_RSA          (4096 / 8)
971d89
+#define  XCP_RSPSIG_MAX_BYTES    (XCP_MAX_SINFO_META_BYTES + \
971d89
+                                  XCP_RSPSIG_RSA)
971d89
+
971d89
+/* card(OA) signature bytecount: SKI-identified SignerInfo,
971d89
+ * Quantum safe: Must contain space for:
971d89
+ *  - DIL signature, hash OID, encr. OID and SKI
971d89
+ */
971d89
+#define  XCP_RSPSIG_QS_MAX_BYTES (XCP_MAX_SINFO_META_BYTES + \
971d89
+                                  XCP_MAX_DIL_SIGNATURE_BYTES)
971d89
 
971d89
 /* minimal padding for raw RSA enc/dec/sign/ver/wr/unwr
971d89
  * Used for example in CKM_RSA_PKCS. See RFC 2313 chapter 8 for a complete
971d89
@@ -772,84 +635,85 @@ typedef enum {
971d89
       /* indicates particular events, not generic event types/categories, */
971d89
       /* if bits in this region are non-zero                              */
971d89
 
971d89
-typedef enum {       /* functionality categories: keep within uint16_t range */
971d89
-	XCP_LOGEV_QUERY        =  0,
971d89
-	XCP_LOGEV_FUNCTION     =  1,
971d89
-	XCP_LOGEV_ADMFUNCTION  =  2,
971d89
-	XCP_LOGEV_STARTUP      =  3,
971d89
-	XCP_LOGEV_SHUTDOWN     =  4,
971d89
-	XCP_LOGEV_SELFTEST     =  5,
971d89
-	XCP_LOGEV_DOM_IMPORT   =  6, /* import sec-relevant data to domain */
971d89
-	XCP_LOGEV_DOM_EXPORT   =  7, /* export sec-relevant data from domain */
971d89
-	XCP_LOGEV_FAILURE      =  8,
971d89
-	XCP_LOGEV_GENERATE     =  9,
971d89
-	XCP_LOGEV_REMOVE       = 10,
971d89
-	XCP_LOGEV_SPECIFIC     = 11, /* obtain meaning elsewhere */
971d89
-	XCP_LOGEV_STATE_IMPORT = 12, /* import to card/multiple domains */
971d89
-	XCP_LOGEV_STATE_EXPORT = 13, /* export from card/multiple domains */
971d89
-	                             /* [after successful export] */
971d89
-	XCP_LOGEV_IMPORT       = 14, /* key/state import (UnwrapKey) */
971d89
-	                             /* fields provide more context */
971d89
-	XCP_LOGEV_EXPORT       = 15, /* key/state import (WrapKey) */
971d89
-	                             /* fields provide more context */
971d89
-
971d89
-	    /*---  specific events (any including XCP_LOGEV_SPEC)  ---------*/
971d89
-
971d89
-	XCP_LOGSPEV_TRANSACT_ZEROIZE  = XCP_LOGEV_SPEC +1,
971d89
-	                               /* zeroize card by transaction */
971d89
-
971d89
-	XCP_LOGSPEV_KAT_FAILED        = XCP_LOGEV_SPEC +2,
971d89
-	                               /* algorithm selftest failed */
971d89
-
971d89
-	XCP_LOGSPEV_KAT_COMPLETED     = XCP_LOGEV_SPEC +3,
971d89
-	                               /* algorithm selftests completed */
971d89
-	                               /* redundant; logged only to     */
971d89
-	                               /* provide specific event        */
971d89
-
971d89
-	XCP_LOGSPEV_EARLY_Q_START     = XCP_LOGEV_SPEC +4,
971d89
-	                               /* subsequent events were found  */
971d89
-	                               /* in the early-event queue.     */
971d89
-	                               /* their timestamps are only     */
971d89
-	                               /* approximate; order is correct */
971d89
-
971d89
-	XCP_LOGSPEV_EARLY_Q_END       = XCP_LOGEV_SPEC +5,
971d89
-				       /* early-even queue processing ends. */
971d89
-	                               /* subsequent events are through     */
971d89
-	                               /* regular auditing, with valid      */
971d89
-	                               /* timestamps and ordering.          */
971d89
-
971d89
-	XCP_LOGSPEV_AUDIT_NEWCHAIN    = XCP_LOGEV_SPEC +6,
971d89
-				       /* audit state is corrupted; removed. */
971d89
-				       /* generating new instance and start  */
971d89
-				       /* new chain as a replacement         */
971d89
-
971d89
-	XCP_LOGSPEV_TIMECHG_BEFORE    = XCP_LOGEV_SPEC +7,
971d89
-				       /* time change: original time */
971d89
-
971d89
-	XCP_LOGSPEV_TIMECHG_AFTER     = XCP_LOGEV_SPEC +8,
971d89
-				       /* time change: updated time  */
971d89
-
971d89
-	XCP_LOGSPEV_MODSTIMPORT_START = XCP_LOGEV_SPEC +9,
971d89
-	                               /* accepted full-state import */
971d89
-	                               /* data structure             */
971d89
-	                               /* starting update procedure  */
971d89
-
971d89
-	XCP_LOGSPEV_MODSTIMPORT_FAIL  = XCP_LOGEV_SPEC +10,
971d89
-	                               /* rejected import structure    */
971d89
-	                               /* issued after initial verify; */
971d89
-	                               /* indicates some inconsistency */
971d89
-	                               /* of import data structures    */
971d89
-
971d89
-	XCP_LOGSPEV_MODSTIMPORT_END   = XCP_LOGEV_SPEC +11,
971d89
-	                               /* completed full-state import */
971d89
-
971d89
-	XCP_LOGSPEV_MODSTEXPORT_START = XCP_LOGEV_SPEC +12,
971d89
-	                               /* started full-state export */
971d89
-	                               /* see also: XCP_LOGEV_STATE_EXPORT */
971d89
-
971d89
-	XCP_LOGSPEV_MODSTEXPORT_FAIL  = XCP_LOGEV_SPEC +13
971d89
-	                               /* full-state export did not complete */
971d89
-} XCP_LogEvent_t;
971d89
+                     /* functionality categories: keep within uint16_t range */
971d89
+#define  XCP_LOGEV_QUERY                0
971d89
+#define  XCP_LOGEV_FUNCTION             1
971d89
+#define  XCP_LOGEV_ADMFUNCTION          2
971d89
+#define  XCP_LOGEV_STARTUP              3
971d89
+#define  XCP_LOGEV_SHUTDOWN             4
971d89
+#define  XCP_LOGEV_SELFTEST             5
971d89
+#define  XCP_LOGEV_DOM_IMPORT           6 /* import sec-relevant data to */
971d89
+                                          /* domain */
971d89
+#define  XCP_LOGEV_DOM_EXPORT           7 /* export sec-relevant data from */
971d89
+                                          /* domain */
971d89
+#define  XCP_LOGEV_FAILURE              8
971d89
+#define  XCP_LOGEV_GENERATE             9
971d89
+#define  XCP_LOGEV_REMOVE              10
971d89
+#define  XCP_LOGEV_SPECIFIC            11 /* obtain meaning elsewhere */
971d89
+#define  XCP_LOGEV_STATE_IMPORT        12 /* import to card/multiple domains */
971d89
+#define  XCP_LOGEV_STATE_EXPORT        13 /* export from card/multiple */
971d89
+                                          /* domains */
971d89
+                                          /* [after successful export] */
971d89
+#define  XCP_LOGEV_IMPORT              14 /* key/state import (UnwrapKey) */
971d89
+                                          /* fields provide more context */
971d89
+#define  XCP_LOGEV_EXPORT              15 /* key/state import (WrapKey) */
971d89
+                                          /* fields provide more context */
971d89
+
971d89
+            /*---  specific events (any including XCP_LOGEV_SPEC)  ---------*/
971d89
+
971d89
+#define  XCP_LOGSPEV_TRANSACT_ZEROIZE  (XCP_LOGEV_SPEC +1)
971d89
+                                       /* zeroize card by transaction */
971d89
+
971d89
+#define  XCP_LOGSPEV_KAT_FAILED        (XCP_LOGEV_SPEC +2)
971d89
+                                       /* algorithm selftest failed */
971d89
+
971d89
+#define  XCP_LOGSPEV_KAT_COMPLETED     (XCP_LOGEV_SPEC +3)
971d89
+                                       /* algorithm selftests completed */
971d89
+                                       /* redundant; logged only to     */
971d89
+                                       /* provide specific event        */
971d89
+
971d89
+#define  XCP_LOGSPEV_EARLY_Q_START     (XCP_LOGEV_SPEC +4)
971d89
+                                       /* subsequent events were found  */
971d89
+                                       /* in the early-event queue.     */
971d89
+                                       /* their timestamps are only     */
971d89
+                                       /* approximate; order is correct */
971d89
+
971d89
+#define  XCP_LOGSPEV_EARLY_Q_END       (XCP_LOGEV_SPEC +5)
971d89
+                                       /* early-even queue processing ends. */
971d89
+                                       /* subsequent events are through     */
971d89
+                                       /* regular auditing, with valid      */
971d89
+                                       /* timestamps and ordering.          */
971d89
+
971d89
+#define  XCP_LOGSPEV_AUDIT_NEWCHAIN    (XCP_LOGEV_SPEC +6)
971d89
+                                       /* audit state is corrupted; removed. */
971d89
+                                       /* generating new instance and start  */
971d89
+                                       /* new chain as a replacement         */
971d89
+
971d89
+#define  XCP_LOGSPEV_TIMECHG_BEFORE    (XCP_LOGEV_SPEC +7)
971d89
+                                       /* time change: original time */
971d89
+
971d89
+#define  XCP_LOGSPEV_TIMECHG_AFTER     (XCP_LOGEV_SPEC +8)
971d89
+                                       /* time change: updated time  */
971d89
+
971d89
+#define  XCP_LOGSPEV_MODSTIMPORT_START (XCP_LOGEV_SPEC +9)
971d89
+                                       /* accepted full-state import */
971d89
+                                       /* data structure             */
971d89
+                                       /* starting update procedure  */
971d89
+
971d89
+#define  XCP_LOGSPEV_MODSTIMPORT_FAIL  (XCP_LOGEV_SPEC +10)
971d89
+                                       /* rejected import structure    */
971d89
+                                       /* issued after initial verify; */
971d89
+                                       /* indicates some inconsistency */
971d89
+                                       /* of import data structures    */
971d89
+
971d89
+#define  XCP_LOGSPEV_MODSTIMPORT_END   (XCP_LOGEV_SPEC +11)
971d89
+                                       /* completed full-state import */
971d89
+
971d89
+#define  XCP_LOGSPEV_MODSTEXPORT_START (XCP_LOGEV_SPEC +12)
971d89
+                                       /* started full-state export */
971d89
+                                       /* see also: XCP_LOGEV_STATE_EXPORT */
971d89
+
971d89
+#define  XCP_LOGSPEV_MODSTEXPORT_FAIL  (XCP_LOGEV_SPEC +13)
971d89
 
971d89
 
971d89
 typedef enum {
971d89
@@ -863,21 +727,19 @@ typedef enum {
971d89
 } XCP_LogSystem_t;
971d89
 
971d89
 /* bitmask of audit-event flags (mainly optional fields) */
971d89
-typedef enum {
971d89
-	XCP_LOGFL_WK_PRESENT         = 0x80000000,
971d89
-	XCP_LOGFL_COMPLIANCE_PRESENT = 0x40000000,  /* ...of hosting domain */
971d89
-	XCP_LOGFL_FINALWK_PRESENT    = 0x20000000,
971d89
-	XCP_LOGFL_KEYREC0_PRESENT    = 0x10000000,
971d89
-	XCP_LOGFL_KEYREC0_COMPL      = 0x08000000,  /* key0 compliance */
971d89
-	XCP_LOGFL_KEYREC1_PRESENT    = 0x04000000,
971d89
-	XCP_LOGFL_KEYREC2_PRESENT    = 0x02000000,
971d89
-	XCP_LOGFL_FINTIME_PRESENT    = 0x01000000,
971d89
-	XCP_LOGFL_SALT0_PRESENT      = 0x00800000,
971d89
-	XCP_LOGFL_SALT1_PRESENT      = 0x00400000,
971d89
-	XCP_LOGFL_SALT2_PRESENT      = 0x00200000,
971d89
-	XCP_LOGFL_REASON_PRESENT     = 0x00100000,
971d89
-	XCP_LOGFL_SEQPRF_PRESENT     = 0x00080000
971d89
-} XCP_LogFlags_t;
971d89
+#define  XCP_LOGFL_WK_PRESENT          0x80000000
971d89
+#define  XCP_LOGFL_COMPLIANCE_PRESENT  0x40000000  /* ...of hosting domain */
971d89
+#define  XCP_LOGFL_FINALWK_PRESENT     0x20000000
971d89
+#define  XCP_LOGFL_KEYREC0_PRESENT     0x10000000
971d89
+#define  XCP_LOGFL_KEYREC0_COMPL       0x08000000  /* key0 compliance */
971d89
+#define  XCP_LOGFL_KEYREC1_PRESENT     0x04000000
971d89
+#define  XCP_LOGFL_KEYREC2_PRESENT     0x02000000
971d89
+#define  XCP_LOGFL_FINTIME_PRESENT     0x01000000
971d89
+#define  XCP_LOGFL_SALT0_PRESENT       0x00800000
971d89
+#define  XCP_LOGFL_SALT1_PRESENT       0x00400000
971d89
+#define  XCP_LOGFL_SALT2_PRESENT       0x00200000
971d89
+#define  XCP_LOGFL_REASON_PRESENT      0x00100000
971d89
+#define  XCP_LOGFL_SEQPRF_PRESENT      0x00080000
971d89
 
971d89
 
971d89
 
971d89
@@ -885,16 +747,26 @@ typedef enum {
971d89
 typedef enum {
971d89
 	XCP_IMPRKEY_RSA_2048    = 0,
971d89
 	XCP_IMPRKEY_RSA_4096    = 1,
971d89
-	XCP_IMPRKEY_EC_P256     = 2,    /* EC, NIST P-256        */
971d89
-	XCP_IMPRKEY_EC_P521     = 3,    /* EC, NIST P-521        */
971d89
-	XCP_IMPRKEY_EC_BP256r   = 4,    /* EC, Brainpool BP-256r */
971d89
-	XCP_IMPRKEY_EC_BP320r   = 5,    /* EC, Brainpool BP-320r */
971d89
-	XCP_IMPRKEY_EC_BP512r   = 6,    /* EC, Brainpool BP-512r */
971d89
+	XCP_IMPRKEY_EC_P256     = 2,    /* EC, NIST P-256                     */
971d89
+	XCP_IMPRKEY_EC_P521     = 3,    /* EC, NIST P-521                     */
971d89
+	XCP_IMPRKEY_EC_BP256r   = 4,    /* EC, Brainpool BP-256r              */
971d89
+	XCP_IMPRKEY_EC_BP320r   = 5,    /* EC, Brainpool BP-320r              */
971d89
+	XCP_IMPRKEY_EC_BP512r   = 6,    /* EC, Brainpool BP-512r              */
971d89
 	XCP_IMPRKEY_RSA_3072    = 7,
971d89
-	XCP_IMPRKEY_MAX         = XCP_IMPRKEY_RSA_3072
971d89
+	XCP_IMPRKEY_EC_P521_TKE = 8,    /* EC, NIST P-521 (TKE propr. sign.)  */
971d89
+	XCP_IMPRKEY_MAX         = XCP_IMPRKEY_EC_P521_TKE
971d89
 } XCP_IMPRKEY_t;
971d89
 
971d89
 
971d89
+//---  OA key types  ----------------------------------------------------
971d89
+typedef enum {
971d89
+	XCP_OAKEY_RSA_4096      = 1,    /* RSA 4096 bit          */
971d89
+	XCP_OAKEY_ECC_P521      = 2,    /* ECC NIST P-521        */
971d89
+	XCP_OAKEY_DIL_87R2      = 3,    /* DIL 8-7 R2            */
971d89
+	XCP_OAKEY_MAX           = XCP_OAKEY_DIL_87R2
971d89
+} XCP_OAKEY_t;
971d89
+
971d89
+
971d89
 
971d89
 //---  retained key structures  ---------------------------
971d89
 // initial loading:
971d89
@@ -914,6 +786,7 @@ typedef struct CK_RETAINEDKEY_PARAMS {
971d89
 
971d89
 
971d89
 
971d89
+
971d89
 //---  operation categories (perf. measurement)  -----------------------------
971d89
 typedef enum {
971d89
 	XCP_OPCAT_ASYMM_SLOW   = 1,
971d89
@@ -951,7 +824,12 @@ typedef enum {
971d89
 	                               /* never be enabled due to      */
971d89
 	                               /* policy-minimum restrictions. */
971d89
 
971d89
-	CK_IBM_XCPQ_MAX         = CK_IBM_XCPQ_CP_BLACKLIST
971d89
+        CK_IBM_XCPQ_PQC_STRENGTHS
971d89
+                                = 14,  /* supported quantum safe levels*/
971d89
+                                       /* of strength                  */
971d89
+                                       /* see: XCP_PQCStrength_t       */
971d89
+
971d89
+	CK_IBM_XCPQ_MAX         = CK_IBM_XCPQ_PQC_STRENGTHS
971d89
 } CK_IBM_XCPQUERY_t;
971d89
 
971d89
 //---  module sub-query sub-types  --------------------------------------------
971d89
@@ -966,6 +844,9 @@ typedef enum {
971d89
 	                                 /* attributes bitmask           */
971d89
 	CK_IBM_XCPMSQ_ATTRS       =  6,  /* number of supported          */
971d89
 	                                 /* administrative attributes    */
971d89
+	CK_IBM_XCPMSQ_MOD_V2      =  7,  /* add version two fields to    */
971d89
+	                                 /* module query                 */
971d89
+	CK_IBM_XCPMSQ_MAX         =  CK_IBM_XCPMSQ_MOD_V2
971d89
 } CK_IBM_XCPMSUBQUERY_t;
971d89
 
971d89
 // byte sizes of queries which are not represented as structures
971d89
@@ -976,48 +857,34 @@ typedef enum {
971d89
 
971d89
 #define CK_IBM_XCP_HOSTQ_IDX  0xff000000  /* host-only queries index, min. */
971d89
 
971d89
-typedef enum {
971d89
-	CK_IBM_XCPHQ_COUNT    = 0xff000000, /* number of host-query indexes   */
971d89
-	                                    /* including this type itself     */
971d89
-	CK_IBM_XCPHQ_VERSION  = 0xff000001, /* host-specific package version  */
971d89
-	                                    /* such as packaging library ID   */
971d89
-	CK_IBM_XCPHQ_VERSION_HASH = 0xff000002,
971d89
-	                                    /* assumed-unique identifier of   */
971d89
-	                                    /* host code, such as version-    */
971d89
-	                                    /* identifying cryptographic hash */
971d89
-	                                    /* (library signature field...)   */
971d89
-	CK_IBM_XCPHQ_DIAGS    = 0xff000003, /* host code diagnostic level     */
971d89
-	                                    /* 0 if non-diagnostics host code */
971d89
-	CK_IBM_XCPHQ_HVERSION = 0xff000004, /* human-readable host version    */
971d89
-	                                    /* identification (recommended:   */
971d89
-	                                    /* UTF-8 string)                  */
971d89
-	CK_IBM_XCPHQ_TGT_MODE = 0xff000005, /* host targeting modes           */
971d89
-	                                    /* returns supported target modes */
971d89
-	                                    /* as bitmask                     */
971d89
-	                                    /* if not available only compat   */
971d89
-	                                    /* target mode is in use          */
971d89
-	                                    /* See CK_IBM_XCPHQ_TGT_MODES_t   */
971d89
-	CK_IBM_XCPHQ_ECDH_DERPRM = 0xff000006,
971d89
-	                                    /* ECDH DeriveKey parameter usage */
971d89
-	                                    /* is being enforced with hostlib */
971d89
-	                                    /* version                        */
971d89
-	                                    /**/
971d89
-	CK_IBM_XCPHQ_TOL_MODES = 0xff000007,/* check if toleration mode for   */
971d89
-	                                    /* key attribute checking is      */
971d89
-	                                    /* enabled                        */
971d89
-	                                    /* If it is, some attribute values*/
971d89
-	                                    /* are always set to correct      */
971d89
-	                                    /* values automatically -         */
971d89
-	CK__IBM_XCPHQ_MAX = CK_IBM_XCPHQ_TGT_MODE
971d89
-} CK_IBM_XCPHQUERY_t;
971d89
-
971d89
-#define CK_IBM_XCPHQ_ATTR_TOL_ENABLED  0x00000001
971d89
-                                         /* flag to indicate that toleration  */
971d89
-                                         /* mode for key attribute checking   */
971d89
-                                         /* is enabled i.e. all attributes    */
971d89
-                                         /* that may no longer be set CK_TRUE */
971d89
-                                         /* using a CEX8S HSM will be reset   */
971d89
-                                         /* to CK_FALSE automatically         */
971d89
+#define CK_IBM_XCPHQ_COUNT        0xff000000 /* number of host-query indexes  */
971d89
+                                             /* including this type itself    */
971d89
+#define CK_IBM_XCPHQ_VERSION      0xff000001 /* host-specific package version */
971d89
+                                             /* such as packaging library ID  */
971d89
+#define CK_IBM_XCPHQ_VERSION_HASH 0xff000002
971d89
+                                             /* assumed-unique identifier of  */
971d89
+                                             /* host code, such as version-   */
971d89
+                                             /* identifying cryptographic hash*/
971d89
+                                             /* (library signature field...)  */
971d89
+#define CK_IBM_XCPHQ_DIAGS        0xff000003 /* host code diagnostic level    */
971d89
+                                             /* 0 if non-diagnostics host code*/
971d89
+#define CK_IBM_XCPHQ_HVERSION     0xff000004 /* human-readable host version   */
971d89
+                                             /* identification (recommended:  */
971d89
+                                             /* UTF-8 string)                 */
971d89
+#define CK_IBM_XCPHQ_TGT_MODE     0xff000005 /* host targeting modes          */
971d89
+                                             /* returns supported target modes*/
971d89
+                                             /* as bitmask                    */
971d89
+                                             /* if not available only compat  */
971d89
+                                             /* target mode is in use         */
971d89
+                                             /* See CK_IBM_XCPHQ_TGT_MODES_t  */
971d89
+#define CK_IBM_XCPHQ_ECDH_DERPRM  0xff000006
971d89
+                                             /* ECDH DeriveKey parameter usage*/
971d89
+                                             /* is being enforced with hostlib*/
971d89
+                                             /* version                       */
971d89
+                                             /**/
971d89
+
971d89
+#define CK__IBM_XCPHQ_MAX CK_IBM_XCPHQ_TGT_MODE
971d89
+
971d89
 
971d89
 typedef enum {
971d89
 	CK_IBM_XCPHQ_TGT_MODES_TGTGRP = 1,  /* target groups are supported    */
971d89
@@ -1040,7 +907,6 @@ typedef enum {
971d89
 	CK_IBM_XCPXQ_IMPEXP_CAPS    =  7, /* capability for WK and state     */
971d89
 	                                  /* export / import. See 8.7.1.1.1  */
971d89
 	                                  /* for more info                   */
971d89
-	CK_IBM_XCPXQ_DOMIMPORT_VER  =  7, /* DEPRECATED                      */
971d89
 	CK_IBM_XCPXQ_CERT_MAXBYTES  =  8, /* bytecount of largest accepted   */
971d89
 	                                  /* administrative certificate, if  */
971d89
 	                                  /* there is an upper limit.  0 if  */
971d89
@@ -1058,20 +924,20 @@ typedef enum {
971d89
 
971d89
 	CK_IBM_XCPXQ_ECDSA_OTHER    = 15, /* bitmask of supported, other EC
971d89
 	                                     signing mechanisms */
971d89
+	CK_IBM_XCPXQ_OA_CAP         = 16, /* bitmask of supported outbound
971d89
+	                                     authority signing mechanisms */
971d89
 
971d89
-	CK_IBM_XCPXQ_MAXIDX         = CK_IBM_XCPXQ_ECDSA_OTHER,
971d89
+	CK_IBM_XCPXQ_MAXIDX         = CK_IBM_XCPXQ_OA_CAP,
971d89
 } CK_IBM_XCPEXTCAP_t;
971d89
 
971d89
 
971d89
-typedef enum {
971d89
-	CK_IBM_DOM_ADMIND         =    1,  /* administrators present     */
971d89
-	CK_IBM_DOM_CURR_WK        =    2,  /* domain has current WK      */
971d89
-	CK_IBM_DOM_NEXT_WK        =    4,  /* domain has pending/next WK */
971d89
-	CK_IBM_DOM_COMMITTED_NWK  =    8,  /* next WK is active(committed) */
971d89
-	CK_IBM_DOM_IMPRINTED      = 0x10,  /* has left imprint mode */
971d89
-	CK_IBM_DOM_IMPRINTS = 0x80000000,  /* enforces imprint mode */
971d89
-	CK_IBM_DOM_PROTKEY_ALLOW  = 0x20   /* policies allow protected key */
971d89
-} CK_IBM_DOMAINQ_t;
971d89
+#define CK_IBM_DOM_ADMIND              1   /* administrators present     */
971d89
+#define CK_IBM_DOM_CURR_WK             2   /* domain has current WK      */
971d89
+#define CK_IBM_DOM_NEXT_WK             4   /* domain has pending/next WK */
971d89
+#define CK_IBM_DOM_COMMITTED_NWK       8   /* next WK is active(committed) */
971d89
+#define CK_IBM_DOM_IMPRINTED        0x10   /* has left imprint mode */
971d89
+#define CK_IBM_DOM_IMPRINTS   0x80000000   /* enforces imprint mode */
971d89
+#define CK_IBM_DOM_PROTKEY_ALLOW    0x20   /* policies allow protected key */
971d89
 //
971d89
 // note: CK_IBM_DOM_IMPRINTS will go away
971d89
 
971d89
@@ -1142,34 +1008,54 @@ typedef CK_IBM_XCPAPI_INFO    CK_PTR   CK_IBM_XCPAPI_INFO_PTR;
971d89
 	CK_BYTE infra_count;                                                   \
971d89
 	CK_BYTE  comp_count;
971d89
 
971d89
+#define CK_IBM_XCP_ADMATTRLIST_MEMBER_V2                                       \
971d89
+	CK_BYTE perm_ext01_modes[ 8 ];
971d89
+
971d89
+#define CK_IBM_XCP_ADMATTRCOUNT_MEMBER_V2                                      \
971d89
+	CK_BYTE perm_ext01_count;
971d89
+
971d89
 // see chapter 5.1.1. in the wire spec
971d89
 typedef struct CK_IBM_XCP_INFO {
971d89
-	CK_IBM_XCP_INFO_MEMBERS_V0;
971d89
+	CK_IBM_XCP_INFO_MEMBERS_V0
971d89
 } CK_IBM_XCP_INFO;
971d89
 //
971d89
 // see chapter 5.1.1. in the wire spec
971d89
 typedef struct CK_IBM_XCP_INFO_V1 {
971d89
-	CK_IBM_XCP_INFO_MEMBERS_V0;
971d89
-	CK_IBM_XCP_DESCINFO_MEMBER;
971d89
+	CK_IBM_XCP_INFO_MEMBERS_V0
971d89
+	CK_IBM_XCP_DESCINFO_MEMBER
971d89
 	CK_BYTE      fnid_mask[ 16 ];
971d89
 	CK_BYTE fnid_count;
971d89
-	CK_IBM_XCP_ADMATTRLIST_MEMBER;
971d89
-	CK_IBM_XCP_ADMATTRCOUNT_MEMBER;
971d89
+	CK_IBM_XCP_ADMATTRLIST_MEMBER
971d89
+	CK_IBM_XCP_ADMATTRCOUNT_MEMBER
971d89
 } CK_IBM_XCP_INFO_V1;
971d89
 //
971d89
+// see chapter 5.1.1. in the wire spec
971d89
+typedef struct CK_IBM_XCP_INFO_V2 {
971d89
+	CK_IBM_XCP_INFO_MEMBERS_V0
971d89
+	CK_IBM_XCP_DESCINFO_MEMBER
971d89
+	CK_BYTE      fnid_mask[ 16 ];
971d89
+	CK_BYTE fnid_count;
971d89
+	CK_IBM_XCP_ADMATTRLIST_MEMBER
971d89
+	CK_IBM_XCP_ADMATTRCOUNT_MEMBER
971d89
+	CK_IBM_XCP_ADMATTRLIST_MEMBER_V2
971d89
+	CK_IBM_XCP_ADMATTRCOUNT_MEMBER_V2
971d89
+} CK_IBM_XCP_INFO_V2;
971d89
+//
971d89
 // see chapter 5.1.1.1. in the wire spec
971d89
 typedef struct CK_IBM_XCP_DESCINFO {
971d89
-	CK_IBM_XCP_DESCINFO_MEMBER;
971d89
+	CK_IBM_XCP_DESCINFO_MEMBER
971d89
 } CK_IBM_XCP_DESCINFO;
971d89
 //
971d89
 // see chapter 5.1.1.3. in the wire spec
971d89
 typedef struct CK_IBM_XCP_ATTRLIST {
971d89
 	CK_IBM_XCP_ADMATTRLIST_MEMBER
971d89
+	CK_IBM_XCP_ADMATTRLIST_MEMBER_V2
971d89
 } CK_IBM_XCP_ATTRLIST;
971d89
 //
971d89
 // see chapter 5.1.1.3. in the wire spec
971d89
 typedef struct CK_IBM_XCP_ATTRCOUNT {
971d89
 	CK_IBM_XCP_ADMATTRCOUNT_MEMBER
971d89
+	CK_IBM_XCP_ADMATTRCOUNT_MEMBER_V2
971d89
 } CK_IBM_XCP_ATTRCOUNT;
971d89
 
971d89
 /**/
971d89
@@ -1177,14 +1063,18 @@ typedef struct CK_IBM_XCP_ATTRCOUNT {
971d89
         { 0,0, {0,0,},{0,0,},  {0,},{0,},{0,}, {0,},{0,}, \
971d89
           0,0, 0,0, 0,0,0,0,0,0,0, 0,0,0, }
971d89
 
971d89
-typedef CK_IBM_XCP_INFO      CK_PTR   CK_IBM_XCP_INFO_PTR;
971d89
-typedef CK_IBM_XCP_INFO_V1   CK_PTR   CK_IBM_XCP_INFO_V1_PTR;
971d89
-typedef CK_IBM_XCP_DESCINFO  CK_PTR   CK_IBM_XCP_DESCINFO_PTR;
971d89
-typedef CK_IBM_XCP_ATTRLIST  CK_PTR   CK_IBM_XCP_ATTRLIST_PTR;
971d89
-typedef CK_IBM_XCP_ATTRCOUNT CK_PTR   CK_IBM_XCP_ATTRCOUNT_PTR;
971d89
+#define CK_IBM_XCP_INFO_V2_INIT0  \
971d89
+        { 0,0, {0,0,},{0,0,},  {0,},{0,},{0,}, {0,},{0,}, \
971d89
+          0,0, 0,0, 0,0,0,0,0,0,0, 0,0,0,                 \
971d89
+          {0}, {0}, {0}, 0, {0}, {0}, {0}, 0, 0, 0,       \
971d89
+          {0}, 0}
971d89
 
971d89
-// DEPRECATED - use CK_IBM_XCP_INFO
971d89
-typedef CK_IBM_XCP_INFO CK_IBM_EP11_INFO;
971d89
+typedef CK_IBM_XCP_INFO         CK_PTR CK_IBM_XCP_INFO_PTR;
971d89
+typedef CK_IBM_XCP_INFO_V1      CK_PTR CK_IBM_XCP_INFO_V1_PTR;
971d89
+typedef CK_IBM_XCP_INFO_V2      CK_PTR CK_IBM_XCP_INFO_V2_PTR;
971d89
+typedef CK_IBM_XCP_DESCINFO     CK_PTR CK_IBM_XCP_DESCINFO_PTR;
971d89
+typedef CK_IBM_XCP_ATTRLIST     CK_PTR CK_IBM_XCP_ATTRLIST_PTR;
971d89
+typedef CK_IBM_XCP_ATTRCOUNT    CK_PTR CK_IBM_XCP_ATTRCOUNT_PTR;
971d89
 
971d89
 typedef struct CK_IBM_DOMAIN_INFO {
971d89
 	CK_ULONG    domain;
971d89
@@ -1227,9 +1117,31 @@ typedef enum {
971d89
 } CK_IBM_BTC_t;
971d89
 
971d89
 
971d89
+typedef enum {
971d89
+	XCP_KEM_ENCAPSULATE = 1,
971d89
+	XCP_KEM_DECAPSULATE = 2,
971d89
+} XCP_KEM_t;
971d89
+
971d89
+typedef CK_ULONG CK_IBM_KEM_MODE;
971d89
+
971d89
+#define  CK_IBM_KEM_ENCAPSULATE  XCP_KEM_ENCAPSULATE
971d89
+#define  CK_IBM_KEM_DECAPSULATE  XCP_KEM_DECAPSULATE
971d89
+
971d89
+typedef struct XCP_KYBER_KEM_PARAMS {
971d89
+	CK_ULONG         version;
971d89
+	CK_IBM_KEM_MODE  mode;
971d89
+	CK_ULONG         kdf;
971d89
+	CK_BBOOL         prepend;
971d89
+	CK_BYTE          *pCipher;
971d89
+	CK_ULONG         ulCipherLen;
971d89
+	CK_BYTE          *pSharedData;
971d89
+	CK_ULONG         ulSharedDataLen;
971d89
+	CK_BYTE          *pBlob;
971d89
+	CK_ULONG         ulBlobLen;
971d89
+} XCP_KYBER_KEM_PARAMS_t;
971d89
+
971d89
+
971d89
 //---  attribute constants  --------------------------------------------------
971d89
-// keep in sync with unprivileged object (XCP_BLOB_NO_RIGHTS)
971d89
-// table is parsed by automated tools; please do not change layout
971d89
 //
971d89
 typedef enum {
971d89
 	XCP_BLOB_EXTRACTABLE       =        1,
971d89
@@ -1309,8 +1221,8 @@ typedef enum {
971d89
                                        /*  CP sets get padded to multiple  */
971d89
 
971d89
 typedef enum {
971d89
-    XCP_CPB_ADD_CPBS        =  0, // allow addition (activation) of CP bits
971d89
-    XCP_CPB_DELETE_CPBS     =  1, // disable activating further control points
971d89
+    XCP_CPB_ADD_CPBS        =  0, // allow activation of CP bits
971d89
+    XCP_CPB_DELETE_CPBS     =  1, // allow deactivation of CP bits
971d89
                                   // (remove both ADD_CPBs and DELETE_CPBs
971d89
                                   // to make unit read-only)
971d89
 
971d89
@@ -1424,8 +1336,12 @@ typedef enum {
971d89
 
971d89
     XCP_CPB_COMPAT_LEGACY_SHA3 = 70, // allow fall-back to non-standard
971d89
                                      // SHA3 defaults
971d89
-
971d89
-    XCP_CPBITS_MAX             = XCP_CPB_COMPAT_LEGACY_SHA3 // marks last used CPB
971d89
+    XCP_CPB_DSA_PARAMETER_GEN  = 71, // allow DSA/PQG parameter generation
971d89
+    XCP_CPB_DERIVE_NON_AB_KEYS = 72,  // allow the derivation of a non-AB or raw
971d89
+                                     // from an AB key. Only relevant if
971d89
+                                     // XCP_CPB_NON_ATTRBOUND
971d89
+    XCP_CPBITS_MAX             = XCP_CPB_DERIVE_NON_AB_KEYS
971d89
+                                     // marks last used CPB
971d89
 } XCP_CPbit_t;
971d89
 
971d89
 
971d89
@@ -1623,7 +1539,7 @@ typedef enum {
971d89
 	                                  // blob/SPKI
971d89
 	XCP_ADM_DOMAINS_ZEROIZE    = 36,  // multi-domain zeroize
971d89
 //	XCP_ADM_EXPORT_NEXT_WK     = 38,  // placeholder, find real entry above
971d89
-	XCP_ADM_SESSIONS_DROP      = 39,  // drop all open sessions
971d89
+	XCP_ADM_SESSION_REMOVE     = 39,  // remove all or selected sessions
971d89
 
971d89
 	XCP_ADMQ_ADMIN             = 1  | XCP_ADM_QUERY, // admin SKI/cert
971d89
 	XCP_ADMQ_DOMADMIN          = 2  | XCP_ADM_QUERY, // domain adm. SKI/cert
971d89
@@ -1648,10 +1564,11 @@ typedef enum {
971d89
 	                                  // current migration importer
971d89
 	XCP_ADMQ_AUDIT_STATE       = 16  | XCP_ADM_QUERY,
971d89
 	                                  // audit state entry or event count
971d89
-	XCP_ADMQ_LASTCMD_DOM_MASK  = 17 | XCP_ADM_QUERY
971d89
+	XCP_ADMQ_LASTCMD_DOM_MASK  = 17 | XCP_ADM_QUERY,
971d89
 	                                  // domain-bitmask affected by last
971d89
 	                                  // state-related administrative
971d89
 	                                  // command (export, import)
971d89
+	XCP_ADMQ_SVCADMIN          = 18 | XCP_ADM_QUERY, // svc admin SKI/cert
971d89
 } XCP_Admcmd_t;
971d89
 
971d89
 typedef enum {
971d89
@@ -1660,7 +1577,8 @@ typedef enum {
971d89
 	XCP_ADMINT_PERMS           = 3,   // permissions
971d89
 	XCP_ADMINT_MODE            = 4,   // operating mode
971d89
 	XCP_ADMINT_STD             = 5,   // standards' compliance
971d89
-	XCP_ADMINT_IDX_MAX         = XCP_ADMINT_STD
971d89
+	XCP_ADMINT_PERMS_EXT01     = 6,   // permissions (extension #1)
971d89
+	XCP_ADMINT_IDX_MAX         = XCP_ADMINT_PERMS_EXT01
971d89
 } XCP_AdmAttr_t;
971d89
 
971d89
 #define XCP_ADMIN_ATTRIBUTE_COUNT  XCP_ADMINT_IDX_MAX
971d89
@@ -1719,6 +1637,29 @@ typedef enum {
971d89
 #define XCP_ADMP_CHG_DO_NOT_DISTURB    \
971d89
                               0x80000000  // allow changing the corresponding
971d89
                                           // Do Not Disturb bit
971d89
+
971d89
+//
971d89
+// permissions (extension 01)
971d89
+//
971d89
+#define XCP_ADMP_NQS_OA_SIGNATURES     1  // enable non-quantum-safe OA signat.
971d89
+#define XCP_ADMP_QS_OA_SIGNATURES      2  // enable quantum-safe OA signatures
971d89
+#define XCP_ADMP_NQS_ADM_SIGNATURES    4  // enable non-quantum-safe adm signat.
971d89
+#define XCP_ADMP_QS_ADM_SIGNATURES     8  // enable quantum-safe adm signatures
971d89
+
971d89
+#define XCP_ADMP_CHG_NQS_OA_SIGNATURES \
971d89
+                                 0x10000  // allow changing the corresponding
971d89
+                                          // non-quantum-safe OA signature bit
971d89
+#define XCP_ADMP_CHG_QS_OA_SIGNATURES  \
971d89
+                                 0x20000  // allow changing the corresponding
971d89
+                                          // quantum-safe OA signature bit
971d89
+#define XCP_ADMP_CHG_NQS_ADM_SIGNATURES \
971d89
+                                 0x40000  // allow changing the corresponding
971d89
+                                          // non-quantum-safe adm signature bit
971d89
+#define XCP_ADMP_CHG_QS_ADM_SIGNATURES  \
971d89
+                                 0x80000  // allow changing the corresponding
971d89
+                                          // quantum-safe adm signature bit
971d89
+
971d89
+
971d89
 //
971d89
 // if adding other change-control bits, also update:
971d89
 //      prevented_perm_changes()
971d89
@@ -1754,15 +1695,49 @@ typedef enum {
971d89
         XCP_ADMP_STATE_1PART       | \
971d89
         XCP_ADMP_DO_NOT_DISTURB)
971d89
 //
971d89
+// CHGBITS / PERMS (extension 01)
971d89
+#define XCP_ADMP__CHGBITS_EXT01           \
971d89
+       (XCP_ADMP_CHG_NQS_OA_SIGNATURES  | \
971d89
+        XCP_ADMP_CHG_QS_OA_SIGNATURES   | \
971d89
+        XCP_ADMP_CHG_NQS_ADM_SIGNATURES | \
971d89
+        XCP_ADMP_CHG_QS_ADM_SIGNATURES)
971d89
+//
971d89
+#define XCP_ADMP__PERMS_EXT01         \
971d89
+       (XCP_ADMP_NQS_OA_SIGNATURES  | \
971d89
+        XCP_ADMP_QS_OA_SIGNATURES   | \
971d89
+        XCP_ADMP_NQS_ADM_SIGNATURES | \
971d89
+        XCP_ADMP_QS_ADM_SIGNATURES)
971d89
+//
971d89
+#define XCP__ADMP_SUP_EXT01 (XCP_ADMP__PERMS_EXT01 | \
971d89
+                             XCP_ADMP__CHGBITS_EXT01)
971d89
+//
971d89
+//
971d89
 #define XCP_ADMP__DEFAULT         \
971d89
        (XCP_ADMP_WK_IMPORT      | \
971d89
         XCP_ADMP_1SIGN          | \
971d89
         XCP_ADMP__CHGBITS)
971d89
 //
971d89
+#define XCP_ADMP__DEFAULT_EXT01       \
971d89
+       (XCP_ADMP__CHGBITS_EXT01     | \
971d89
+        XCP_ADMP_NQS_OA_SIGNATURES  | \
971d89
+        XCP_ADMP_QS_OA_SIGNATURES   | \
971d89
+        XCP_ADMP_NQS_ADM_SIGNATURES | \
971d89
+        XCP_ADMP_QS_ADM_SIGNATURES)
971d89
+//
971d89
 #define XCPM_ADMP__MODULE_DEFAULTS_MASK   \
971d89
        (XCP_ADMP_DO_NOT_DISTURB         | \
971d89
         XCP_ADMP_CHG_DO_NOT_DISTURB)
971d89
 //
971d89
+#define XCPM_ADMP__MODULE_DEFAULTS_MASK_EXT01  \
971d89
+       (XCP_ADMP_NQS_OA_SIGNATURES           | \
971d89
+        XCP_ADMP_CHG_NQS_OA_SIGNATURES       | \
971d89
+        XCP_ADMP_QS_OA_SIGNATURES            | \
971d89
+        XCP_ADMP_CHG_QS_OA_SIGNATURES        | \
971d89
+        XCP_ADMP_NQS_ADM_SIGNATURES          | \
971d89
+        XCP_ADMP_CHG_NQS_ADM_SIGNATURES      | \
971d89
+        XCP_ADMP_QS_ADM_SIGNATURES           | \
971d89
+        XCP_ADMP_CHG_QS_ADM_SIGNATURES)
971d89
+//
971d89
 #define XCP_ADMP__CARD_MASK       \
971d89
       ~(XCP_ADMP_WK_IMPORT      | \
971d89
         XCP_ADMP_WK_EXPORT      | \
971d89
@@ -1775,6 +1750,9 @@ typedef enum {
971d89
         XCP_ADMP_CHG_WK_RANDOM  | \
971d89
         XCP_ADMP_CHG_CP_1SIGN)
971d89
 //
971d89
+#define XCP_ADMP__CARD_MASK_EXT01 \
971d89
+       ~(0U)
971d89
+//
971d89
 #define XCP_ADMP__DOM_MASK           \
971d89
       ~(XCP_ADMP_NO_DOMAIN_IMPRINT | \
971d89
         XCP_ADMP_STATE_IMPORT      | \
971d89
@@ -1784,6 +1762,12 @@ typedef enum {
971d89
         XCP_ADMP_CHG_ST_EXPORT     | \
971d89
         XCP_ADMP_CHG_ST_1PART)
971d89
 //
971d89
+#define XCP_ADMP__DOM_MASK_EXT01     \
971d89
+      ~(0U)
971d89
+//
971d89
+
971d89
+#define XCP__ADMP_SUP ((XCP_ADMP__PERMS | XCP_ADMP__CHGBITS) &\
971d89
+                       ~XCP_ADMP_NOT_SUP)
971d89
 
971d89
 // card modes
971d89
 #define XCP_ADMM_AUTHENTICATED         1U  // no longer in imprint mode
971d89
@@ -1838,6 +1822,8 @@ typedef enum {
971d89
         XCP_ADMM_STR_192BIT | \
971d89
         XCP_ADMM_STR_256BIT)
971d89
 
971d89
+#define XCP__ADMM_SUP XCP_ADMM__MASK
971d89
+
971d89
 // specific standards' compliance suites
971d89
 #define XCP_ADMS_FIPS2009              1  // NIST, 80+ bits,  -2011.01.01.
971d89
 #define XCP_ADMS_BSI2009               2  // BSI , 80+ bits,  -2011.01.01.
971d89
@@ -1850,18 +1836,74 @@ typedef enum {
971d89
 //
971d89
 #define XCP_ADMS_BSICC2017          0x40  // BSI, EP11 Common Criteria EAL4 2017
971d89
 //
971d89
+#define XCP_ADMS_FIPS2021           0x80  // NIST SP800-131A REV.2, 2021.01.01
971d89
+#define XCP_ADMS_FIPS2024          0x100  // NIST SP800-131A REV.2, 2024.01.01
971d89
+#define XCP_ADMS_ADM_FIPS2021      0x200  // NIST SP800-131A REV.2, 2021.01.01
971d89
 
971d89
 #define XCP_ADMS__ALL  \
971d89
        (XCP_ADMS_FIPS2009  | \
971d89
         XCP_ADMS_BSI2009   | \
971d89
         XCP_ADMS_FIPS2011  | \
971d89
         XCP_ADMS_BSI2011   | \
971d89
+        XCP_ADMS_BSICC2017 | \
971d89
+        XCP_ADMS_FIPS2021  | \
971d89
+        XCP_ADMS_FIPS2024  | \
971d89
+        XCP_ADMS_ADM_FIPS2021)
971d89
+
971d89
+#define XCP_ADMS__SUPP  (XCP_ADMS__ALL &           \
971d89
+                         ~(XCP_ADMS_FIPS2021     | \
971d89
+                           XCP_ADMS_ADM_FIPS2021 | \
971d89
+                           XCP_ADMS_FIPS2024))
971d89
+
971d89
+// The following 'legacy' defines are used as default 'supported bit masks'
971d89
+// for older devices that do not have native bit masks for that purpose.
971d89
+// Note: If supported bits are not present, the import of these bits are
971d89
+//       skipped and the default values will be kept.
971d89
+#define XCP__ADMP_SUP_LEGACY          \
971d89
+       (XCP_ADMP_WK_IMPORT          | \
971d89
+        XCP_ADMP_WK_EXPORT          | \
971d89
+        XCP_ADMP_WK_1PART           | \
971d89
+        XCP_ADMP_WK_RANDOM          | \
971d89
+        XCP_ADMP_1SIGN              | \
971d89
+        XCP_ADMP_CP_1SIGN           | \
971d89
+        XCP_ADMP_ZERO_1SIGN         | \
971d89
+        XCP_ADMP_NO_DOMAIN_IMPRINT  | \
971d89
+        XCP_ADMP_STATE_IMPORT       | \
971d89
+        XCP_ADMP_STATE_EXPORT       | \
971d89
+        XCP_ADMP_STATE_1PART        | \
971d89
+        XCP_ADMP_CHG_WK_IMPORT      | \
971d89
+        XCP_ADMP_CHG_WK_EXPORT      | \
971d89
+        XCP_ADMP_CHG_WK_1PART       | \
971d89
+        XCP_ADMP_CHG_WK_RANDOM      | \
971d89
+        XCP_ADMP_CHG_SIGN_THR       | \
971d89
+        XCP_ADMP_CHG_REVOKE_THR     | \
971d89
+        XCP_ADMP_CHG_1SIGN          | \
971d89
+        XCP_ADMP_CHG_CP_1SIGN       | \
971d89
+        XCP_ADMP_CHG_ZERO_1SIGN     | \
971d89
+        XCP_ADMP_CHG_ST_IMPORT      | \
971d89
+        XCP_ADMP_CHG_ST_EXPORT      | \
971d89
+        XCP_ADMP_CHG_ST_1PART)
971d89
+
971d89
+#define XCP__ADMM_SUP_LEGACY          \
971d89
+       (XCP_ADMM_AUTHENTICATED      | \
971d89
+        XCP_ADMM_EXTWNG             | \
971d89
+        XCP_ADMM_WKCLEAN_EXTWNG     | \
971d89
+        XCP_ADMM_BATT_LOW           | \
971d89
+        XCP_ADMM_API_ACTIVE)
971d89
+
971d89
+#define XCP_ADMS__ALL_LEGACY          \
971d89
+       (XCP_ADMS_FIPS2009           | \
971d89
+        XCP_ADMS_BSI2009            | \
971d89
+        XCP_ADMS_FIPS2011           | \
971d89
+        XCP_ADMS_BSI2011            | \
971d89
         XCP_ADMS_BSICC2017)
971d89
 
971d89
+#define XCP__ADMP_SUP_EXT01_LEGACY (0)
971d89
+
971d89
 // has compliance any BSI mode
971d89
-#define XCP_ADMS_IS_BSI(mode)  (!!(mode & (XCP_ADMS_BSI2009   | \
971d89
-                                           XCP_ADMS_BSI2011   | \
971d89
-                                           XCP_ADMS_BSICC2017    )) )
971d89
+#define XCP_ADMS_IS_BSI(mode)  (!!((mode) & (XCP_ADMS_BSI2009   | \
971d89
+                                             XCP_ADMS_BSI2011   | \
971d89
+                                             XCP_ADMS_BSICC2017    )) )
971d89
 // mask of supported import keys
971d89
 // 3k and 4k RSA are not supported
971d89
 #define  XCP_ADM_IMPEXP_KEYS__MASK       \
971d89
@@ -1870,7 +1912,8 @@ typedef enum {
971d89
           (1 << XCP_IMPRKEY_EC_P521)   | \
971d89
           (1 << XCP_IMPRKEY_EC_BP256r) | \
971d89
           (1 << XCP_IMPRKEY_EC_BP320r) | \
971d89
-          (1 << XCP_IMPRKEY_EC_BP512r))
971d89
+          (1 << XCP_IMPRKEY_EC_BP512r) | \
971d89
+          (1 << XCP_IMPRKEY_EC_P521_TKE))
971d89
 
971d89
 
971d89
 /*---  audit chains  -------------------------------------------------------*/
971d89
@@ -1922,50 +1965,55 @@ typedef enum {
971d89
 
971d89
 /*---  state serialization  ------------------------------------------------*/
971d89
 typedef enum {
971d89
-	XCP_STSTYPE_SECTIONCOUNT   =  1,  // section count +file hash
971d89
-	XCP_STSTYPE_DOMAINIDX_MAX  =  2,  // largest index +total nr of domains
971d89
-	XCP_STSTYPE_DOMAINS_MASK   =  3,  // bitmask of included domains
971d89
-	XCP_STSTYPE_SERIALNR       =  4,
971d89
-	XCP_STSTYPE_CREATE_TIME    =  5,  // file date/time (UTC)
971d89
-	XCP_STSTYPE_FCV            =  6,  // public parts of originating FCV
971d89
-	XCP_STSTYPE_CARD_QUERY     =  7,  // card state structure (xcp_info)
971d89
-	XCP_STSTYPE_CARD_ADM_SKIS  =  8,  // card admin SKIs, packed
971d89
-	XCP_STSTYPE_CARD_ADM_CERTS =  9,  // card admin certificates, packed
971d89
-	XCP_STSTYPE_DOM_ADM_SKIS   = 10,  // domain admin SKIs, packed
971d89
-	XCP_STSTYPE_DOM_ADM_CERTS  = 11,  // domain admin certificates, packed
971d89
-	XCP_STSTYPE_DOM_QUERY      = 12,  // domain state structure (xcp_info)
971d89
-	XCP_STSTYPE_KPH_SKIS       = 13,  // count and SKIs of targeted KPHs
971d89
-	XCP_STSTYPE_CARD_ATTRS     = 14,  // card attributes
971d89
-	XCP_STSTYPE_DOM_ATTRS      = 15,  // domain attributes
971d89
-	XCP_STSTYPE_CARD_TRANSCTR  = 16,  // card transaction counter
971d89
-	XCP_STSTYPE_DOM_TRANSCTR   = 17,  // domain transaction counter
971d89
-	XCP_STSTYPE_WK_ENCR_ALG    = 18,
971d89
-	XCP_STSTYPE_WK_ENCR_DATA   = 19,
971d89
-	XCP_STSTYPE_SIG_CERT_COUNT = 20,
971d89
-	XCP_STSTYPE_SIG_CERTS      = 21,
971d89
-	XCP_STSTYPE_FILE_SIG       = 22,
971d89
-	XCP_STSTYPE_DOM_CPS        = 23,  // full set of control points
971d89
-	XCP_STSTYPE_STATE_SALT     = 24,
971d89
-	XCP_STSTYPE_KEYPART        = 25,  // encrypted keypart (RecipientInfo)
971d89
-	XCP_STSTYPE_KEYPART_SIG    = 26,  // signature on encrypted keypart
971d89
-	XCP_STSTYPE_KEYPART_COUNT  = 27,  // total number of keyparts
971d89
-	XCP_STSTYPE_KEYPART_LIMIT  = 28,  // number of keyparts needed to
971d89
-	                                  // restore
971d89
-	XCP_STSTYPE_KEYPART_CERT   = 29,  // certificate of keypart holder
971d89
-	XCP_STSTYPE_CERT_AUTH      = 30,  // certificate authority issuing
971d89
-	                                  // some of the certificates.  This
971d89
-	                                  // field contains host-supplied data
971d89
-	                                  // and it is ignored by EP11 itself.
971d89
-	XCP_STSTYPE_STATE_SCOPE    = 31,  // restriction on contents of full
971d89
-	                                  // state structure
971d89
-	XCP_STSTYPE_MULTIIMPORT_MASK
971d89
-	                           = 32,  // import only: designate import
971d89
-	                                  // request to be replicated into
971d89
-	                                  // multiple recipient domains
971d89
-	XCP_STSTYPE_CPS_MASK       = 33,  // bitmask of all CPs supported
971d89
-	                                  // by the exporting module
971d89
-
971d89
-	XCP_STSTYPE_MAX            = XCP_STSTYPE_CPS_MASK
971d89
+	XCP_STSTYPE_SECTIONCOUNT      =  1, // section count +file hash
971d89
+	XCP_STSTYPE_DOMAINIDX_MAX     =  2, // largest index +total nr of doms
971d89
+	XCP_STSTYPE_DOMAINS_MASK      =  3, // bitmask of included domains
971d89
+	XCP_STSTYPE_SERIALNR          =  4,
971d89
+	XCP_STSTYPE_CREATE_TIME       =  5, // file date/time (UTC)
971d89
+	XCP_STSTYPE_FCV               =  6, // public parts of originating FCV
971d89
+	XCP_STSTYPE_CARD_QUERY        =  7, // V0 card state struct (xcp_info)
971d89
+	XCP_STSTYPE_CARD_ADM_SKIS     =  8, // card admin SKIs, packed
971d89
+	XCP_STSTYPE_CARD_ADM_CERTS    =  9, // card admin certificates, packed
971d89
+	XCP_STSTYPE_DOM_ADM_SKIS      = 10, // domain admin SKIs, packed
971d89
+	XCP_STSTYPE_DOM_ADM_CERTS     = 11, // domain admin certs, packed
971d89
+	XCP_STSTYPE_DOM_QUERY         = 12, // domain state struct (xcp_info)
971d89
+	XCP_STSTYPE_KPH_SKIS          = 13, // count and SKIs of targeted KPHs
971d89
+	XCP_STSTYPE_CARD_ATTRS        = 14, // card attributes
971d89
+	XCP_STSTYPE_DOM_ATTRS         = 15, // domain attributes
971d89
+	XCP_STSTYPE_CARD_TRANSCTR     = 16, // card transaction counter
971d89
+	XCP_STSTYPE_DOM_TRANSCTR      = 17, // domain transaction counter
971d89
+	XCP_STSTYPE_WK_ENCR_ALG       = 18,
971d89
+	XCP_STSTYPE_WK_ENCR_DATA      = 19,
971d89
+	XCP_STSTYPE_SIG_CERT_COUNT    = 20,
971d89
+	XCP_STSTYPE_SIG_CERTS         = 21,
971d89
+	XCP_STSTYPE_FILE_SIG          = 22,
971d89
+	XCP_STSTYPE_DOM_CPS           = 23, // full set of control points
971d89
+	XCP_STSTYPE_STATE_SALT        = 24,
971d89
+	XCP_STSTYPE_KEYPART           = 25, // encrypted keypart (RecipientInfo)
971d89
+	XCP_STSTYPE_KEYPART_SIG       = 26, // signature on encrypted keypart
971d89
+	XCP_STSTYPE_KEYPART_COUNT     = 27, // total number of keyparts
971d89
+	XCP_STSTYPE_KEYPART_LIMIT     = 28, // number of keyparts needed to
971d89
+	                                    // restore
971d89
+	XCP_STSTYPE_KEYPART_CERT      = 29, // certificate of keypart holder
971d89
+	XCP_STSTYPE_CERT_AUTH         = 30, // certificate authority issuing
971d89
+	                                    // some of the certificates.  This
971d89
+	                                    // field contains host-supplied data
971d89
+	                                    // and it is ignored by EP11 itself.
971d89
+	XCP_STSTYPE_STATE_SCOPE       = 31, // restriction on contents of full
971d89
+	                                    // state structure
971d89
+	XCP_STSTYPE_MULTIIMPORT_MASK  = 32, // import only: designate import
971d89
+	                                    // request to be replicated into
971d89
+	                                    // multiple recipient domains
971d89
+	XCP_STSTYPE_CPS_MASK          = 33, // bitmask of all CPs supported
971d89
+	                                    // by the exporting module
971d89
+	XCP_STSTYPE_CARD_QUERY_V1     = 34, // V1 card state struct (xcp_info)
971d89
+	XCP_STSTYPE_CARD_QUERY_V2     = 35, // V2 card state struct (xcp_info)
971d89
+	XCP_STSTYPE_CARD_EXTADM_SKIS  = 36, // ext. card admin SKIs, packed
971d89
+	XCP_STSTYPE_CARD_EXTADM_CERTS = 37, // ext. card admin certs, packed
971d89
+	XCP_STSTYPE_DOM_EXTADM_SKIS   = 38, // ext. dom admin SKIs, packed
971d89
+	XCP_STSTYPE_DOM_EXTADM_CERTS  = 39, // ext. dom admin certs, packed
971d89
+
971d89
+	XCP_STSTYPE_MAX               = XCP_STSTYPE_DOM_EXTADM_CERTS
971d89
 } XCP_StateSection_t;
971d89
 
971d89
 typedef enum {
971d89
@@ -1991,7 +2039,11 @@ typedef enum {
971d89
 	                                  // not return KPH certificates
971d89
 	XCP_STWK_KP_NO_OA_CHAIN    = 8,   // keypart section restricted to
971d89
 	                                  // not return OA certificate chain
971d89
-	XCP_STDATA_MAX             = ((XCP_STWK_KP_NO_OA_CHAIN *2) -1)
971d89
+	XCP_STDATA_NQS             = 0x20,// allow use of non-quantum-safe
971d89
+	                                  // algorithms in KP export/signature
971d89
+	XCP_STDATA_QS              = 0x40,// allow use of quantum-safe
971d89
+	                                  // algorithms in KP export/signature
971d89
+	XCP_STDATA_MAX             = ((XCP_STDATA_QS *2) -1)
971d89
 } XCP_StateType_t;
971d89
 
971d89
 // type || identifier prefixes
971d89
@@ -2124,10 +2176,6 @@ typedef enum {
971d89
 #define  XCP_EC_MAX_ID_BYTES    11   /* fits all EC names/OIDs */
971d89
 
971d89
 
971d89
-// Dilithium related OIDs
971d89
-#define XCP_PQC_DILITHIUM_65_NAME       "\x6\xB\x2B\x6\x1\x4\x1\x2\x82\xB\x1\x6\x5"
971d89
-#define XCP_PQC_DILITHIUM_65_NAME_BYTES 13
971d89
-
971d89
 /*------------------------------------*/
971d89
 typedef enum {
971d89
 	XCP_EC_C_NIST_P192 = 1,      /* NIST, FP curves */
971d89
@@ -2158,6 +2206,7 @@ typedef enum {
971d89
 	XCP_EC_C_ED25519   = 26,     /* ed25519, EDDSA */
971d89
 
971d89
 
971d89
+	XCP_EC_C_MAX       = 27      /* last possible value */
971d89
 
971d89
 } XCP_ECcurve_t;
971d89
 
971d89
@@ -2175,6 +2224,56 @@ typedef enum {
971d89
 } XCP_ECCurveGrp_t;
971d89
 
971d89
 
971d89
+/*---  PQC algorithms  ------------------------------------------------------*/
971d89
+
971d89
+// Dilithium related OIDs
971d89
+// Round 2 Dilithium-3 (5-4)
971d89
+#define XCP_PQC_DILITHIUM_R2_54  "\x6\xb\x2b\x6\x1\x4\x1\x2\x82\xb\x1\x5\x4"
971d89
+#define XCP_PQC_DILITHIUM_R2_54_BYTES 13
971d89
+// Round 2 Dilithium-4 (6-5)
971d89
+#define XCP_PQC_DILITHIUM_R2_65  "\x6\xb\x2b\x6\x1\x4\x1\x2\x82\xb\x1\x6\x5"
971d89
+#define XCP_PQC_DILITHIUM_R2_65_BYTES 13
971d89
+// Round 2 Dilithium-5 (8-7)
971d89
+#define XCP_PQC_DILITHIUM_R2_87  "\x6\xb\x2b\x6\x1\x4\x1\x2\x82\xb\x1\x8\x7"
971d89
+#define XCP_PQC_DILITHIUM_R2_87_BYTES 13
971d89
+// Round 3 Dilithium-2 (4-4)
971d89
+#define XCP_PQC_DILITHIUM_R3_44      "\x6\xb\x2b\x6\x1\x4\x1\x2\x82\xb\x7\x4\x4"
971d89
+#define XCP_PQC_DILITHIUM_R3_44_BYTES     13
971d89
+// Round 3 Dilithium-3 (6-5)
971d89
+#define XCP_PQC_DILITHIUM_R3_65      "\x6\xb\x2b\x6\x1\x4\x1\x2\x82\xb\x7\x6\x5"
971d89
+#define XCP_PQC_DILITHIUM_R3_65_BYTES     13
971d89
+// Round 3 Dilithium-5 (8-7)
971d89
+#define XCP_PQC_DILITHIUM_R3_87      "\x6\xb\x2b\x6\x1\x4\x1\x2\x82\xb\x7\x8\x7"
971d89
+#define XCP_PQC_DILITHIUM_R3_87_BYTES     13
971d89
+
971d89
+// Round 2 Kyber 512
971d89
+#define XCP_PQC_KYBER_R2_512 "\x6\x9\x2B\x6\x1\x4\x1\x2\x82\xB\x5"
971d89
+#define XCP_PQC_KYBER_R2_512_BYTES 11
971d89
+
971d89
+// Round 2 Kyber 768
971d89
+#define XCP_PQC_KYBER_R2_768 "\x6\xB\x2B\x6\x1\x4\x1\x2\x82\xB\x5\x3\x3"
971d89
+#define XCP_PQC_KYBER_R2_768_BYTES 13
971d89
+
971d89
+// Round 2 Kyber 1024
971d89
+#define XCP_PQC_KYBER_R2_1024 "\x6\xB\x2B\x6\x1\x4\x1\x2\x82\xB\x5\x4\x4"
971d89
+#define XCP_PQC_KYBER_R2_1024_BYTES 13
971d89
+
971d89
+/*------------------------------------*/
971d89
+typedef enum {
971d89
+	XCP_PQC_S_DILITHIUM_R2_54      =  1,      /* Round-2 Dilithium */
971d89
+	XCP_PQC_S_DILITHIUM_R2_65      =  2,
971d89
+	XCP_PQC_S_DILITHIUM_R2_87      =  3,
971d89
+	XCP_PQC_S_DILITHIUM_R3_44      =  4,      /* Round-3 Dilithium */
971d89
+	XCP_PQC_S_DILITHIUM_R3_65      =  5,
971d89
+	XCP_PQC_S_DILITHIUM_R3_87      =  6,
971d89
+	XCP_PQC_S_KYBER_R2_512     =  7,      /* Round-2 Kyber */
971d89
+	XCP_PQC_S_KYBER_R2_768     =  8,
971d89
+	XCP_PQC_S_KYBER_R2_1024    =  9,
971d89
+
971d89
+	XCP_PQC_MAX               = XCP_PQC_S_KYBER_R2_1024,
971d89
+} XCP_PQCStrength_t;
971d89
+
971d89
+
971d89
 // binary encoding of function/version query
971d89
 // SEQUENCE { OCTET STRING (0) }
971d89
 // module responds with API version and build ID
971d89
@@ -2343,12 +2442,15 @@ typedef enum {
971d89
 	XCP_DEV_FLIP_ERRORSTATE  = 68,  // explicitly flip the setting of the
971d89
 	                                // error state of the module
971d89
 	XCP_DEV_AESKW            = 69,
971d89
-	XCP_DEV_MAX_INDEX        = XCP_DEV_AESKW
971d89
+	XCP_DEV_UNIT_TEST        = 72,  // run unit tests on module
971d89
+
971d89
+
971d89
+	XCP_DEV_MAX_INDEX        = XCP_DEV_UNIT_TEST
971d89
 } XCP_DEVcmd_t;
971d89
 //
971d89
 // upper limit on additional data bytes, for SYS-TEST commands with aux. data
971d89
 // (arbitrary limit, commands may restict further)
971d89
-#define  XCP_DEV_MAX_DATABYTES   ((size_t) 4096)
971d89
+#define  XCP_DEV_MAX_DATABYTES   ((size_t) 64000)
971d89
 //
971d89
 // iteration-count limit applies to any iterative call
971d89
 // driver[timeout] may interfere; dev-only feature is not otherwise restricted
971d89
@@ -2412,23 +2514,207 @@ typedef enum {
971d89
 #define  CKG_IBM_MGF1_SHA3_384         (CKG_VENDOR_DEFINED +3)
971d89
 #define  CKG_IBM_MGF1_SHA3_512         (CKG_VENDOR_DEFINED +4)
971d89
 
971d89
+#if !defined(CKD_VENDOR_DEFINED)
971d89
+#define  CKD_VENDOR_DEFINED            0x80000000UL
971d89
+#endif
971d89
 
971d89
+#define  CKD_IBM_HYBRID_NULL           (CKD_VENDOR_DEFINED + 0x00000001UL)
971d89
+#define  CKD_IBM_HYBRID_SHA1_KDF       (CKD_VENDOR_DEFINED + 0x00000002UL)
971d89
+#define  CKD_IBM_HYBRID_SHA224_KDF     (CKD_VENDOR_DEFINED + 0x00000003UL)
971d89
+#define  CKD_IBM_HYBRID_SHA256_KDF     (CKD_VENDOR_DEFINED + 0x00000004UL)
971d89
+#define  CKD_IBM_HYBRID_SHA384_KDF     (CKD_VENDOR_DEFINED + 0x00000005UL)
971d89
+#define  CKD_IBM_HYBRID_SHA512_KDF     (CKD_VENDOR_DEFINED + 0x00000006UL)
971d89
 
971d89
-typedef uint64_t target_t;
971d89
-
971d89
-#define XCP_TGT_INIT ~0UL
971d89
+#define  XCP_MODEL_CEX4P               4
971d89
+#define  XCP_MODEL_CEX5P               5
971d89
+#define  XCP_MODEL_CEX6P               6
971d89
+#define  XCP_MODEL_CEX7P               7
971d89
+#define  XCP_MODEL_CEX8P               8
971d89
 
971d89
-#define XCP_TGT_FMT "x%016" PRIx64
971d89
+/*--------------------------------------------------------------------------*/
971d89
+// max value for target groups
971d89
+#define XCP_MAX_GRPIDX 1024u
971d89
 
971d89
-// initializes the library
971d89
-int m_init(void);
971d89
-// shutting down the library
971d89
-int m_shutdown(void);
971d89
+//
971d89
+// macros for setting/checking and removing domains from (tgt.mgmt) domain mask
971d89
+#define XCPTGTMASK_SET_DOM(mask, domain)      \
971d89
+                           ((mask)[((domain)/8)] |=   (1 << (7-(domain)%8)))
971d89
+#define XCPTGTMASK_DOM_IS_SET(mask, domain)   \
971d89
+                           ((mask)[((domain)/8)] &   (1 << (7-(domain)%8)))
971d89
+#define XCPTGTMASK_CLR_DOM(mask, domain)      \
971d89
+                           ((mask)[((domain)/8)] &=  ~(1 << (7-(domain)%8)))
971d89
+
971d89
+
971d89
+/* flags that can be set for the target tokens
971d89
+ *
971d89
+ * This flags are domain specific and are therefore called domain flags
971d89
+ *
971d89
+ * start of flags is >16 Bit. Max value for domains is 0xFF. Should be enough
971d89
+ * room for extensions
971d89
+ */
971d89
+#define XCP_TGTFL_WCAP     0x10000000  /* Capture wire request in output buffer
971d89
+                                        * without sending it to the module
971d89
+                                        */
971d89
+#define XCP_TGTFL_WCAP_SQ  0x20000000  /* Size query: Return size of request in
971d89
+                                        * output buffer length field
971d89
+                                        */
971d89
+#define XCP_TGTFL_SET_SCMD 0x40000000  /* Protected key special command: Set the
971d89
+                                        * special command flag in the CPRB
971d89
+                                        * header
971d89
+                                        */
971d89
+#define XCP_TGTFL_API_CHKD 0x80000000  /* supported API version of modules in
971d89
+                                        * target (group) has been checked
971d89
+                                        */
971d89
+
971d89
+#define XCP_TGTFL_NO_LOCK  0x01000000  /* target token ignores sequential locks
971d89
+                                        * for target probing
971d89
+                                        */
971d89
+#define XCP_TGTFL_CHK_ATTR 0x02000000  /* reject unknown attribute in attribute
971d89
+                                        * templates with
971d89
+                                        * CKR_TEMPLATE_INCONSISTENT. Default is
971d89
+                                        * to ignore unknown attributes.
971d89
+                                        */
971d89
+#define XCP_TGTFL_SET_ACMD 0x04000000  /* add CPRB admin flag to CPRB header */
971d89
+
971d89
+#define XCP_TGTFL_NO_SPLIT 0x08000000  /* enforce single-shot requests */
971d89
+
971d89
+//--------------------------------------
971d89
+// socket use only
971d89
+#define  XCP_MAXCONNECTIONS 64       /* max value for active connections */
971d89
+#define  XCP_MAX_PORT     0xffff
971d89
+
971d89
+// hostname and port value fore one module
971d89
+typedef struct XCP_ModuleSocket {
971d89
+	char host[ MAX_FNAME_CHARS +1 ];
971d89
+	uint32_t port;
971d89
+} *XCP_ModuleSocket_t ;
971d89
+
971d89
+
971d89
+//--------------------------------------
971d89
+// diagnostics use only
971d89
+typedef struct XCP_DomainPerf {
971d89
+	/* perf value of last request per domain
971d89
+	 *
971d89
+	 * At the moment unused
971d89
+	 * */
971d89
+	unsigned int lastperf[ 256 ];
971d89
+} *XCP_DomainPerf_t;
971d89
+
971d89
+
971d89
+// current version of XCP_Module structure; host code SHOULD interact with
971d89
+// future/past versions, MUST be set by caller before using m_add_module()
971d89
+// valid versions are all >0
971d89
+#define  XCP_MOD_VERSION  2
971d89
+//--------------------------------------
971d89
+// subsequent communications with a module MAY skip infrastructure-specific
971d89
+// fields, such as a query not reporting device handles etc., even if they
971d89
+// have been supplied originally when the module has been registered.
971d89
+//
971d89
+typedef struct XCP_Module {
971d89
+	uint32_t version;     /* >0 for supported API versions */
971d89
+
971d89
+	uint64_t flags;       /* see XCP_Module_Flags */
971d89
+
971d89
+	uint32_t domains;     /* max# addressable under this module;
971d89
+	                       * cached from OS
971d89
+	                       *
971d89
+	                       * when callers set domains  to 0, the library
971d89
+	                       * returns the module-claimed domain count.
971d89
+	                       */
971d89
+
971d89
+	unsigned char domainmask[ 256 /8 ];
971d89
+	                      /* higher domain# through future flags (none
971d89
+	                       * currently defined) which would add things
971d89
+	                       * like 'FLAG_256_1023' etc. at the same time,
971d89
+	                       * we would add domainmask2[] etc.
971d89
+	                       * corresponding new fields.
971d89
+	                       *
971d89
+	                       * new fields would then store mask for
971d89
+	                       * domains 256+ etc.
971d89
+	                       *
971d89
+	                       * domain #0 is bit x80 of 1st byte,
971d89
+	                       * #255 is bit 0x01 of last byte.
971d89
+	                       */
971d89
+
971d89
+		// when a domainmask is supplied, with bits set beyond
971d89
+		// what the module supports, the bitmask is trimmed to
971d89
+		// the supported range, but this is NOT reported as an
971d89
+		// error, unless XCP_MFL_STRICT is also supplied.
971d89
+		//
971d89
+		// without XCP_MFL_STRICT, callers are expected to check
971d89
+		// at least the returned domain count.
971d89
+
971d89
+			/* used only when flags includes XCP_MFL_SOCKET */
971d89
+	struct XCP_ModuleSocket socket;
971d89
+
971d89
+			/* used when system exposes modules through an
971d89
+			 * array of transparent pipes, or similar abstraction
971d89
+			 * (such as mainframe AP Queues, or other Linux
971d89
+			 * 'device-minor' numbers etc.). Interpretation
971d89
+			 * is platform-dependent.
971d89
+			 *
971d89
+			 * used only when flags includes XCP_MFL_MODULE
971d89
+			 */
971d89
+	uint32_t module_nr;
971d89
+
971d89
+			/* used by systems which associate devices with
971d89
+			 * device handles/structs/etc. persistent state.
971d89
+			 * opaque pointer, usually a const pointer to
971d89
+			 * such aux structs, MAY be stored here.
971d89
+			 *
971d89
+			 * interpretation is platform-dependent.
971d89
+			 * used only when flags includes XCP_MFL_MHANDLE
971d89
+			 */
971d89
+	void *mhandle;
971d89
+			/* diagnostics use only, when XCP_MFL_PERF is set */
971d89
+	struct XCP_DomainPerf perf;
971d89
+	//-----  end of v1 fields  -------------------------------------------
971d89
+
971d89
+	uint32_t api; /* module api version*/
971d89
+	//-----  end of v2 fields  -------------------------------------------
971d89
+} *XCP_Module_t ;
971d89
+
971d89
+typedef enum {
971d89
+	XCP_MFL_SOCKET       =    1,  /* backend is socket-attached */
971d89
+	XCP_MFL_MODULE       =    2,  /* backends identified in
971d89
+	                                 array-of-modules */
971d89
+	XCP_MFL_MHANDLE      =    4,  /* backends uses 'module handle' field */
971d89
+	XCP_MFL_PERF         =    8,  /* performance statistics collected
971d89
+	                               * for this module, see .perf
971d89
+	                               */
971d89
+	XCP_MFL_VIRTUAL      = 0x10,  /* queried 'target' is a load-balancer,
971d89
+	                               * other other group.
971d89
+	                               */
971d89
+	XCP_MFL_STRICT       = 0x20,  /* enable aggressive error checking,
971d89
+	                               * see field descriptions for effect
971d89
+	                               */
971d89
+	XCP_MFL_PROBE        = 0x40,  /* send api query to module, to check if
971d89
+	                               * target(s) can be used
971d89
+	                               */
971d89
+	XCP_MFL_ALW_TGT_ADD  = 0x80,  /* Allows it to use a target in any
971d89
+	                               * functional and admin call without
971d89
+	                               * adding it beforehand with
971d89
+	                               * m_add_module()
971d89
+	                               */
971d89
+	XCP_MFL_MAX          = 0xff
971d89
+} XCP_Module_Flags;
971d89
+
971d89
+typedef uint64_t target_t;
971d89
+
971d89
+#define XCP_TGT_INIT ~0UL
971d89
+
971d89
+#define XCP_TGT_FMT "x%016" PRIx64
971d89
 
971d89
 int m_add_module(XCP_Module_t module, target_t *target) ;
971d89
 
971d89
 int m_rm_module(XCP_Module_t module, target_t target) ;
971d89
 
971d89
+CK_RV m_admin (unsigned char *response1, size_t *r1len,
971d89
+               unsigned char *response2, size_t *r2len,
971d89
+         const unsigned char *cmd,       size_t clen,
971d89
+         const unsigned char *sigs,      size_t slen,
971d89
+                         target_t target) ;
971d89
+
971d89
 /*----------------------------------------------------------------------
971d89
  *  CK_... type arguments correspond to the original PKCS#11 call's
971d89
  *  arguments.  Standard types mean PKCS#11 objects (session, token etc.)
971d89
@@ -2442,11 +2728,31 @@ int m_rm_module(XCP_Module_t module, target_t target) ;
971d89
  *  For certain operations, such as _GenerateKey, there are no real
971d89
  *  PKCS#11 type parameters at this level.
971d89
  */
971d89
+
971d89
+
971d89
+CK_RV m_Login ( CK_UTF8CHAR_PTR pin,      CK_ULONG pinlen,
971d89
+            const unsigned char *nonce,     size_t nlen,
971d89
+                  unsigned char *pinblob,   size_t *pinbloblen,
971d89
+                       target_t target) ;
971d89
+CK_RV m_Logout ( const unsigned char *pin, size_t len,     target_t target) ;
971d89
+
971d89
+CK_RV m_LoginExtended( CK_UTF8CHAR_PTR pin,    CK_ULONG pinlen,
971d89
+                   const unsigned char *nonce,   size_t nlen,
971d89
+                   const unsigned char *xstruct, size_t xslen,
971d89
+                         unsigned char *pinblob, size_t *pinbloblen,
971d89
+                              target_t target) ;
971d89
+
971d89
+CK_RV m_LogoutExtended( CK_UTF8CHAR_PTR pin,    CK_ULONG pinlen,
971d89
+                    const unsigned char *nonce,   size_t nlen,
971d89
+                    const unsigned char *xstruct, size_t xslen,
971d89
+                               target_t target) ;
971d89
+
971d89
 CK_RV m_GenerateRandom   (CK_BYTE_PTR rnd, CK_ULONG len,     target_t target) ;
971d89
 /**/
971d89
 /* note: external seeding not supported */
971d89
 CK_RV m_SeedRandom (CK_BYTE_PTR pSeed,   CK_ULONG ulSeedLen,
971d89
                        target_t target) ;
971d89
+
971d89
 CK_RV m_DigestInit     (unsigned char *state,     size_t *len,
971d89
                const CK_MECHANISM_PTR pmech,
971d89
                              target_t target) ;
971d89
@@ -2469,6 +2775,73 @@ CK_RV m_DigestSingle (CK_MECHANISM_PTR pmech,
971d89
                            CK_BYTE_PTR digest, CK_ULONG_PTR dlen,
971d89
                               target_t target) ;
971d89
 
971d89
+CK_RV m_GenerateKey (CK_MECHANISM_PTR pmech,
971d89
+                     CK_ATTRIBUTE_PTR ptempl, CK_ULONG templcount,
971d89
+                  const unsigned char *pin,     size_t pinlen,
971d89
+                        unsigned char *key,     size_t *klen,
971d89
+                        unsigned char *csum,    size_t *clen,
971d89
+                             target_t target) ;
971d89
+/**/
971d89
+CK_RV m_GenerateKeyPair (CK_MECHANISM_PTR pmech,
971d89
+                         CK_ATTRIBUTE_PTR ppublic,  CK_ULONG pubattrs,
971d89
+                         CK_ATTRIBUTE_PTR pprivate, CK_ULONG prvattrs,
971d89
+                      const unsigned char *pin,       size_t pinlen,
971d89
+                            unsigned char *key,       size_t *klen,
971d89
+                            unsigned char *pubkey,    size_t *pklen,
971d89
+                                 target_t target) ;
971d89
+
971d89
+/* mackey is NULL for PKCS#11 formats, not for authenticated ones */
971d89
+CK_RV m_WrapKey (const unsigned char *key,          size_t keylen,
971d89
+                 const unsigned char *kek,          size_t keklen,
971d89
+                 const unsigned char *mackey,       size_t mklen,
971d89
+              const CK_MECHANISM_PTR pmech,
971d89
+                         CK_BYTE_PTR wrapped, CK_ULONG_PTR wlen,
971d89
+                            target_t target) ;
971d89
+/**/
971d89
+/* mackey is NULL for PKCS#11 formats, not for authenticated ones */
971d89
+CK_RV m_UnwrapKey (const   CK_BYTE_PTR wrapped,  CK_ULONG wlen,
971d89
+                   const unsigned char *kek,       size_t keklen,
971d89
+                   const unsigned char *mackey,    size_t mklen,
971d89
+                   const unsigned char *pin,       size_t pinlen,
971d89
+                const CK_MECHANISM_PTR uwmech,
971d89
+                const CK_ATTRIBUTE_PTR ptempl,   CK_ULONG pcount,
971d89
+                         unsigned char *unwrapped, size_t *uwlen,
971d89
+                           CK_BYTE_PTR csum,     CK_ULONG *cslen,
971d89
+                              target_t target) ;
971d89
+
971d89
+CK_RV m_DeriveKey ( CK_MECHANISM_PTR pderivemech,
971d89
+                    CK_ATTRIBUTE_PTR ptempl, CK_ULONG templcount,
971d89
+                 const unsigned char *basekey, size_t bklen,
971d89
+                 const unsigned char *data,    size_t dlen,
971d89
+                 const unsigned char *pin,     size_t pinlen,
971d89
+                       unsigned char *newkey,  size_t *nklen,
971d89
+                       unsigned char *csum,    size_t *cslen,
971d89
+                       target_t target) ;
971d89
+
971d89
+CK_RV m_GetAttributeValue (const unsigned char *obj,        size_t olen,
971d89
+                              CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
971d89
+                                      target_t target) ;
971d89
+CK_RV m_SetAttributeValue       (unsigned char *obj,        size_t olen,
971d89
+                              CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
971d89
+                                      target_t target) ;
971d89
+
971d89
+/**/
971d89
+CK_RV m_GetMechanismList (CK_SLOT_ID slot,
971d89
+               CK_MECHANISM_TYPE_PTR mechs,
971d89
+                        CK_ULONG_PTR count,
971d89
+                            target_t target) ;
971d89
+CK_RV m_GetMechanismInfo (CK_SLOT_ID slot,
971d89
+                   CK_MECHANISM_TYPE mech,
971d89
+               CK_MECHANISM_INFO_PTR pmechinfo,
971d89
+                            target_t target) ;
971d89
+
971d89
+CK_RV m_get_xcp_info (CK_VOID_PTR pinfo, CK_ULONG_PTR infbytes,
971d89
+                     unsigned int query,
971d89
+                     unsigned int subquery,
971d89
+                         target_t target) ;
971d89
+
971d89
+// see also: CK_IBM_XCPQUERY_t
971d89
+
971d89
 CK_RV m_EncryptInit        (unsigned char *state, size_t *slen,
971d89
                          CK_MECHANISM_PTR pmech,
971d89
                       const unsigned char *key,   size_t klen,
971d89
@@ -2516,21 +2889,6 @@ CK_RV m_DecryptSingle (const unsigned char *key,         size_t klen,
971d89
                                CK_BYTE_PTR plain,  CK_ULONG_PTR plen,
971d89
                                   target_t target) ;
971d89
 
971d89
-CK_RV m_GenerateKey (CK_MECHANISM_PTR pmech,
971d89
-                     CK_ATTRIBUTE_PTR ptempl, CK_ULONG templcount,
971d89
-                  const unsigned char *pin,     size_t pinlen,
971d89
-                        unsigned char *key,     size_t *klen,
971d89
-                        unsigned char *csum,    size_t *clen,
971d89
-                             target_t target) ;
971d89
-/**/
971d89
-CK_RV m_GenerateKeyPair (CK_MECHANISM_PTR pmech,
971d89
-                         CK_ATTRIBUTE_PTR ppublic,  CK_ULONG pubattrs,
971d89
-                         CK_ATTRIBUTE_PTR pprivate, CK_ULONG prvattrs,
971d89
-                      const unsigned char *pin,       size_t pinlen,
971d89
-                            unsigned char *key,       size_t *klen,
971d89
-                            unsigned char *pubkey,    size_t *pklen,
971d89
-                                 target_t target) ;
971d89
-
971d89
 CK_RV m_SignInit     (unsigned char *state,     size_t *slen,
971d89
                    CK_MECHANISM_PTR alg,
971d89
                 const unsigned char *key,       size_t klen,
971d89
@@ -2574,72 +2932,6 @@ CK_RV m_VerifySingle (const unsigned char *key,      size_t klen,
971d89
                               CK_BYTE_PTR sig,     CK_ULONG slen,
971d89
                                  target_t target) ;
971d89
 
971d89
-/* mackey is NULL for PKCS#11 formats, not for authenticated ones */
971d89
-CK_RV m_WrapKey (const unsigned char *key,          size_t keylen,
971d89
-                 const unsigned char *kek,          size_t keklen,
971d89
-                 const unsigned char *mackey,       size_t mklen,
971d89
-              const CK_MECHANISM_PTR pmech,
971d89
-                         CK_BYTE_PTR wrapped, CK_ULONG_PTR wlen,
971d89
-                            target_t target) ;
971d89
-/**/
971d89
-/* mackey is NULL for PKCS#11 formats, not for authenticated ones */
971d89
-CK_RV m_UnwrapKey (const   CK_BYTE_PTR wrapped,  CK_ULONG wlen,
971d89
-                   const unsigned char *kek,       size_t keklen,
971d89
-                   const unsigned char *mackey,    size_t mklen,
971d89
-                   const unsigned char *pin,       size_t pinlen,
971d89
-                const CK_MECHANISM_PTR uwmech,
971d89
-                const CK_ATTRIBUTE_PTR ptempl,   CK_ULONG pcount,
971d89
-                         unsigned char *unwrapped, size_t *uwlen,
971d89
-                           CK_BYTE_PTR csum,     CK_ULONG *cslen,
971d89
-                              target_t target) ;
971d89
-
971d89
-CK_RV m_DeriveKey ( CK_MECHANISM_PTR pderivemech,
971d89
-                    CK_ATTRIBUTE_PTR ptempl, CK_ULONG templcount,
971d89
-                 const unsigned char *basekey, size_t bklen,
971d89
-                 const unsigned char *data,    size_t dlen,
971d89
-                 const unsigned char *pin,     size_t pinlen,
971d89
-                       unsigned char *newkey,  size_t *nklen,
971d89
-                       unsigned char *csum,    size_t *cslen,
971d89
-                       target_t target) ;
971d89
-
971d89
-/**/
971d89
-CK_RV m_GetMechanismList (CK_SLOT_ID slot,
971d89
-               CK_MECHANISM_TYPE_PTR mechs,
971d89
-                        CK_ULONG_PTR count,
971d89
-                            target_t target) ;
971d89
-CK_RV m_GetMechanismInfo (CK_SLOT_ID slot,
971d89
-                   CK_MECHANISM_TYPE mech,
971d89
-               CK_MECHANISM_INFO_PTR pmechinfo,
971d89
-                            target_t target) ;
971d89
-
971d89
-CK_RV m_GetAttributeValue (const unsigned char *obj,        size_t olen,
971d89
-                              CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
971d89
-                                      target_t target) ;
971d89
-CK_RV m_SetAttributeValue       (unsigned char *obj,        size_t olen,
971d89
-                              CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulCount,
971d89
-                                      target_t target) ;
971d89
-
971d89
-
971d89
-CK_RV m_Login ( CK_UTF8CHAR_PTR pin,      CK_ULONG pinlen,
971d89
-            const unsigned char *nonce,     size_t nlen,
971d89
-                  unsigned char *pinblob,   size_t *pinbloblen,
971d89
-                       target_t target) ;
971d89
-CK_RV m_Logout ( const unsigned char *pin, size_t len,     target_t target) ;
971d89
-
971d89
-CK_RV m_admin (unsigned char *response1, size_t *r1len,
971d89
-               unsigned char *response2, size_t *r2len,
971d89
-         const unsigned char *cmd,       size_t clen,
971d89
-         const unsigned char *sigs,      size_t slen,
971d89
-                         target_t target) ;
971d89
-
971d89
-CK_RV m_get_xcp_info (CK_VOID_PTR pinfo, CK_ULONG_PTR infbytes,
971d89
-                     unsigned int query,
971d89
-                     unsigned int subquery,
971d89
-                         target_t target) ;
971d89
-
971d89
-// see also: CK_IBM_XCPQUERY_t
971d89
-
971d89
-
971d89
 // m_wire() by default removes transport headers of responses (CPRB header etc.)
971d89
 // setting to prevent stripping:
971d89
 //
971d89
@@ -2661,17 +2953,20 @@ CK_RV m_wire (unsigned char *rsp, size_t *rsplen, CK_RV *irv,
971d89
 #define  XCP_W_NO_SEND_CPRB  1      /* data already includes request header */
971d89
 #define  XCP_W_NO_RECV_CPRB  2      /* leave transport header in response   */
971d89
 
971d89
+// initializes the library
971d89
+int m_init(void);
971d89
+// shutting down the library
971d89
+int m_shutdown(void);
971d89
 
971d89
-/*--  build identification  ------------------------------------------------*/
971d89
 
971d89
-#define  XCP_BUILD_ID    0x9c14a5e6
971d89
-#define  XCP_BUILD_DATE  0x20220610       /* UTC */
971d89
-#define  XCP_BUILD_TIME  0x123354       /* UTC */
971d89
 
971d89
-/*--------------------------------------------------------------------------*/
971d89
-/*--------------------------------------------------------------------------*/
971d89
+/*--  build identification  ------------------------------------------------*/
971d89
 
971d89
+#define  XCP_BUILD_ID    0xf1d34cc2
971d89
+#define  XCP_BUILD_DATE  0x20221214       /* UTC */
971d89
+#define  XCP_BUILD_TIME  0x094523         /* UTC */
971d89
 
971d89
+/*--------------------------------------------------------------------------*/
971d89
 #define __XCP_REASONCODES_H__ 1
971d89
 
971d89
 
971d89
@@ -2823,14 +3118,10 @@ typedef enum {
971d89
 } XCP_ReasonCode_t ;
971d89
 
971d89
 
971d89
-
971d89
-
971d89
-#if ! defined(__transport_fns_h__)
971d89
-#define __transport_fns_h__
971d89
-
971d89
 /* function identifiers must be consecutive, between: */
971d89
 #define  __MIN_MOD_FNID  1
971d89
-#define  __MAX_MOD_FNID  43
971d89
+#define  __MAX_MOD_FNID  42
971d89
+/* selectively disabled functions within that range reported separately */
971d89
 
971d89
 #define  __FNID_Login              1
971d89
 #define  __FNID_Logout             2
971d89
@@ -2938,8 +3229,6 @@ typedef enum {
971d89
 #define  __HOST2MOD_DATAPRM  9
971d89
 #define  __MOD2HOST_DATAPRM  2
971d89
 
971d89
-#endif  /* n defined(__transport_fns_h__) */
971d89
-
971d89
 
971d89
 #endif /* n defined(XCP_H__) */
971d89
 
971d89
diff --git a/usr/lib/ep11_stdll/ep11adm.h b/usr/lib/ep11_stdll/ep11adm.h
971d89
index ecb524d5..0cd50a65 100644
971d89
--- a/usr/lib/ep11_stdll/ep11adm.h
971d89
+++ b/usr/lib/ep11_stdll/ep11adm.h
971d89
@@ -25,34 +25,6 @@
971d89
 #error "We need <ep11.h> types, please include before this file."
971d89
 #endif
971d89
 
971d89
-// these numbers apply to current version, subject to change
971d89
-// Please note that this defines are DEPRECATED. Please use their XCP_*
971d89
-// counterpart in ep11.h
971d89
-//
971d89
-#if !defined(EP11_SERIALNR_CHARS)
971d89
-#define  EP11_SERIALNR_CHARS        XCP_SERIALNR_CHARS
971d89
-#endif
971d89
-
971d89
-#if !defined(EP11_KEYCSUM_BYTES)
971d89
-/* full size of verific. pattern */
971d89
-#define  EP11_KEYCSUM_BYTES         XCP_KEYCSUM_BYTES
971d89
-#endif
971d89
-
971d89
-#if !defined(EP11_ADMCTR_BYTES)
971d89
-/* admin transaction ctrs */
971d89
-#define  EP11_ADMCTR_BYTES          XCP_ADMCTR_BYTES
971d89
-#endif
971d89
-
971d89
-#if !defined(EP11_ADM_REENCRYPT)
971d89
-/* transform blobs to next WK */
971d89
-#define  EP11_ADM_REENCRYPT         XCP_ADM_REENCRYPT
971d89
-#endif
971d89
-
971d89
-#if !defined(CK_IBM_EP11Q_DOMAIN)
971d89
-/* list domain's WK hashes */
971d89
-#define  CK_IBM_EP11Q_DOMAIN        CK_IBM_XCPQ_DOMAIN
971d89
-#endif
971d89
-// end of DEPRECATED defines
971d89
 
971d89
 //-------------------------------------
971d89
 // flags common to all functions that have a flag parameter
971d89
@@ -100,13 +72,22 @@
971d89
 
971d89
 #define  DOMAIN_MASK_LENGTH XCP_DOMAINS/8 // space for 256 domains
971d89
 
971d89
-
971d89
+//-------------------------------------
971d89
+// Key-Part-Holder template
971d89
+// contain credentials of a key-part holder. Those credentials
971d89
+// can be file based and/or smart card based references.
971d89
 struct KPH {
971d89
-	const unsigned char *cert;
971d89
-	size_t              clen;
971d89
-	const char          *id;
971d89
-	const char          *pw;
971d89
-	const char          *kpfname;
971d89
+	const unsigned char *cert;        // certificate
971d89
+	size_t              clen;         // certificate length
971d89
+	const char          *id;          // private key
971d89
+	const char          *pw;          // private key passphrase
971d89
+	const char          *kpfname;     // filename of the key-part
971d89
+	char                scard;        // indicates a smart card user
971d89
+	char                ski_id;       // subject key identifier ID
971d89
+	int                 rdr_id;       // smart card reader number
971d89
+	char                kp_id;        // key-part ID
971d89
+	uint64_t            sigmech;      // signature mechenism
971d89
+	const char          *padmode;     // padding mode
971d89
 } ;
971d89
 
971d89
 
971d89
@@ -159,30 +140,6 @@ typedef struct XCPadmresp {
971d89
 #define  XCP_ADMRESP_INIT0  { 0,0,0, {0},{0},{0}, {0}, CKR_OK, 0, NULL,0, }
971d89
 
971d89
 
971d89
-// ep11_admresp_t is DEPRECATED. Please use XCPadmresp_t directly
971d89
-typedef struct ep11_admresp {
971d89
-	uint32_t fn;
971d89
-	uint32_t domain;
971d89
-	uint32_t domainInst;
971d89
-
971d89
-	/* module ID || module instance */
971d89
-	unsigned char  module[ EP11_SERIALNR_CHARS + EP11_SERIALNR_CHARS ];
971d89
-	unsigned char   modNr[ EP11_SERIALNR_CHARS ];
971d89
-	unsigned char modInst[ EP11_SERIALNR_CHARS ];
971d89
-
971d89
-	unsigned char    tctr[ EP11_ADMCTR_BYTES ];    /* transaction counter */
971d89
-
971d89
-	CK_RV rv;
971d89
-	uint32_t reason;
971d89
-
971d89
-	// points to original response; NULL if no payload
971d89
-	// make sure it's copied if used after releasing response block
971d89
-	//
971d89
-	const unsigned char *payload;
971d89
-	size_t pllen;
971d89
-} *ep11_admresp_t;
971d89
-
971d89
-
971d89
 //-------------------------------------
971d89
 // listing of CP modes with their respective sets of control points that are
971d89
 // either required or prohibited
971d89
@@ -249,9 +206,39 @@ static const struct {
971d89
 		  XCP_CPB_ALG_NBSI2011,       XCP_CPB_ALG_DH,
971d89
 		  XCP_CPB_DERIVE                                          },
971d89
 	},
971d89
+	{ XCP_ADMS_FIPS2021, "fips2021",
971d89
+		15,
971d89
+		{ XCP_CPB_ALG_NFIPS2011,      XCP_CPB_KEYSZ_80BIT,
971d89
+		  XCP_CPB_KEYSZ_RSA65536,
971d89
+		  XCP_CPB_ALG_NFIPS2021,      XCP_CPB_ALG_EC_25519,
971d89
+		  XCP_CPB_ALG_PQC,            XCP_CPB_BTC,
971d89
+		  XCP_CPB_ECDSA_OTHER,        XCP_CPB_ALLOW_NONSESSION,
971d89
+		  XCP_CPB_ALG_EC_SECGCRV,     XCP_CPB_ALG_EC_BPOOLCRV,
971d89
+		  XCP_CPB_COMPAT_LEGACY_SHA3, XCP_CPB_DSA_PARAMETER_GEN,
971d89
+		  XCP_CPB_WRAP_ASYMM,         XCP_CPB_UNWRAP_ASYMM
971d89
+		},
971d89
+		0,
971d89
+		{                                                         },
971d89
+	},
971d89
+	{ XCP_ADMS_FIPS2024, "fips2024",
971d89
+		16,
971d89
+		{ XCP_CPB_ALG_NFIPS2011,      XCP_CPB_KEYSZ_80BIT,
971d89
+		  XCP_CPB_KEYSZ_RSA65536,
971d89
+		  XCP_CPB_ALG_NFIPS2021,      XCP_CPB_ALG_EC_25519,
971d89
+		  XCP_CPB_ALG_PQC,            XCP_CPB_BTC,
971d89
+		  XCP_CPB_ECDSA_OTHER,        XCP_CPB_ALLOW_NONSESSION,
971d89
+		  XCP_CPB_ALG_EC_SECGCRV,     XCP_CPB_ALG_EC_BPOOLCRV,
971d89
+		  XCP_CPB_ALG_NFIPS2024,      XCP_CPB_COMPAT_LEGACY_SHA3,
971d89
+		  XCP_CPB_DSA_PARAMETER_GEN,  XCP_CPB_WRAP_ASYMM,
971d89
+		  XCP_CPB_UNWRAP_ASYMM
971d89
+		},
971d89
+		0,
971d89
+		{                                                         },
971d89
+	// XCP_ADMS_ADM_FIPS2021 is not reported here as it is not set with
971d89
+	// control points
971d89
+	}
971d89
 } ;
971d89
 
971d89
-
971d89
 //-------------------------------------
971d89
 // Structure to collect all relevant data for state export/import
971d89
 //
971d89
@@ -351,21 +338,12 @@ long xcpa_certreplace(unsigned char *blk, size_t blen,
971d89
 
971d89
 
971d89
 //-------------------------------------
971d89
-// xcpa_query_wk queries the hash of the current/next WK for the given target
971d89
-// xcpa_query_wk without the feature define EP11ADM_V2 can only query the hash
971d89
-// of the current WK. Latter version is deprecated and will be removed with the
971d89
-// next major release
971d89
+// Queries the current/next WK for the given target
971d89
 //
971d89
-// Parameter description:
971d89
-// wk         pointer to the output buffer, contains current/next WK hash after
971d89
-//            call
971d89
-// wlen       needs to be set to the size of the output buffer
971d89
-// type       CK_IBM_DOM_CURR_WK or CK_IBM_DOM_NEXT_WK (only available with
971d89
-//            EP11ADM_V2 defined)
971d89
-// target     a single target set up with m_add_module
971d89
+// WK Hash is returned in (*wk, wlen) on success if wk is not NULL
971d89
 //
971d89
 // returns >0 (bytecount) if present
971d89
-//          0 if valid but no current/next WK
971d89
+//          0 if valid but no current WK
971d89
 //         <0 if anything failed
971d89
 //
971d89
 // Possible error return codes:
971d89
@@ -375,14 +353,7 @@ long xcpa_certreplace(unsigned char *blk, size_t blen,
971d89
 //
971d89
 // Uses xcpa_queryblock() - See function header for possible return codes
971d89
 //
971d89
-#if defined(EP11ADM_V2)
971d89
-__asm__(".symver xcpa_query_wk, xcpa_query_wk@EP11ADM_V2");
971d89
-long xcpa_query_wk(unsigned char *wk, size_t wlen, int type,
971d89
-                   target_t target) ;
971d89
-#else
971d89
-long xcpa_query_wk(unsigned char *wk, size_t wlen, target_t target)
971d89
-                                       __attribute__ ((deprecated));
971d89
-#endif
971d89
+long xcpa_query_wk(unsigned char *wk, size_t wlen, int type, target_t target) ;
971d89
 
971d89
 
971d89
 //-------------------------------------
971d89
@@ -681,12 +652,13 @@ long xcpa_set_cps(target_t target,
971d89
 //-------------------------------------
971d89
 // get compliance mode from CP set (see ep11_cpt_modes[] for possible compliance
971d89
 // modes)
971d89
+// can not check for administrative compliance modes
971d89
 //
971d89
 // cps         CP set of XCP_CP_BYTES length, see xcpa_query_cps
971d89
 //
971d89
 // returns >0  compliance mode (see XCP_ADMS_...)
971d89
 //
971d89
-// does not verify CP set!
971d89
+// does not verify CP set
971d89
 //
971d89
 uint32_t xcpa_cps2compliance(const unsigned char *cps /* XCP_CP_BYTES */) ;
971d89
 
971d89
@@ -823,7 +795,10 @@ typedef struct Encrdkey {
971d89
 		// EC only: RSA recipients must keep these lengths 0
971d89
 		//
971d89
 		// largest supported curve: P-521
971d89
-
971d89
+	unsigned char srcprivate[ 66 ];      /* private key (PKCS#8)    */
971d89
+	size_t sprivlen;                     /* priv. key byte count    */
971d89
+	unsigned char *oid;                  /* EC curve OID            */
971d89
+	size_t olen;                         /* EC curve OID length     */
971d89
 	unsigned char srcpublic[ 1+66+66 ];  /* originator public point */
971d89
 	size_t splen;                        /* pub. point bytecount    */
971d89
 
971d89
@@ -840,18 +815,10 @@ typedef struct Encrdkey {
971d89
 	int ktype;      /* one of the wire-specified types */
971d89
 
971d89
 	CK_MECHANISM *alg;  /* currently, ignored */
971d89
+	unsigned char wrap_alg[25];          /* AES Key Wrap algorithm OID */
971d89
 			// largest supported importer type: 4096-bit RSA
971d89
 	unsigned char raw[ 4096/8 ];               /* actual encrypted bytes */
971d89
 	size_t rlen;
971d89
-
971d89
-#if defined(EP11ADM_V2)
971d89
-	unsigned char srcprivate[ 66 ];      /* private key (PKCS#8)    */
971d89
-	size_t sprivlen;                     /* priv. key byte count    */
971d89
-	unsigned char *oid;                  /* EC curve OID            */
971d89
-	size_t olen;                         /* EC curve OID length     */
971d89
-
971d89
-	unsigned char wrap_alg[25];          /* AES Key Wrap algorithm OID */
971d89
-#endif
971d89
 } *Encrdkey_t;
971d89
 
971d89
 
971d89
@@ -893,9 +860,6 @@ long xcp_rcptinfo_sharedinfo(unsigned char *sinfo, size_t slen,
971d89
 // creates RecipientInfo ASN.1 sequence (asn) from encr structure following RFC
971d89
 // 3852 for RSA and RFC 5753 for EC
971d89
 //
971d89
-// uses encr->wrap_alg if EP11ADM_V2 defined. Otherwise assumes aes256-wrap is
971d89
-// used for EC
971d89
-//
971d89
 // verifies if a known importer key is used and if the SPKI does match
971d89
 // the importer key type
971d89
 //
971d89
@@ -907,9 +871,10 @@ long xcp_rcptinfo_sharedinfo(unsigned char *sinfo, size_t slen,
971d89
 //  XCP_ADMERR_RI_IMPR_INVALID: if the importer type or the key import structure
971d89
 //                              encr is not supported / invalid
971d89
 //
971d89
-long xcp_rcptinfo(unsigned char *asn, size_t alen,
971d89
-          const struct Encrdkey *encr,
971d89
-             const CK_MECHANISM *encrmech) ;
971d89
+long xcp_rcptinfo (unsigned char *asn, size_t alen,
971d89
+           const struct Encrdkey *encr,
971d89
+              const CK_MECHANISM *encrmech) ;
971d89
+
971d89
 
971d89
 //-------------------------------------
971d89
 // reads ASN.1 formatted RecipientInfo (asn) and turns it into rinfo structure
971d89
@@ -990,12 +955,8 @@ long xcpa_import_keypart (unsigned char *out,    size_t olen,
971d89
 //  XCP_ADMERR_RI_IMPR_INVALID: importer key type invalid / unsupported or does
971d89
 //                              not match SPKI
971d89
 //
971d89
-// uses xcp_rcptinfo and xcpa_cmdblock() - see function header for more return
971d89
-// codes and EP11AMD_V2 specific changes
971d89
+// uses xcpa_cmdblock() - see function header for more return codes
971d89
 //
971d89
-#if defined(EP11ADM_V2)
971d89
-__asm__(".symver xcpa_import_cmdblock, xcpa_import_cmdblock@EP11ADM_V2");
971d89
-#endif
971d89
 long xcpa_import_cmdblock (unsigned char *out, size_t olen,
971d89
                    const struct Encrdkey *key,
971d89
                  const struct XCPadmresp *minf,
971d89
@@ -1164,19 +1125,10 @@ long xcpa_fill_export_req(unsigned char *asn,         size_t alen,
971d89
 // Constructs key part file with ASN.1 envelope
971d89
 // writes output to (*reqprep, reqpreplen)
971d89
 //
971d89
-// default version:
971d89
-// statesave  contains the target domain mask
971d89
-// kphs       keypart holder certificates
971d89
-// ekps       contains re-encrypted keyparts
971d89
-// kcnt       number of kphs
971d89
-// reqprep    output buffer
971d89
-// reqpreplen output length
971d89
-//
971d89
-// with EP11ADM_V2 feature define active:
971d89
 // domainmask target domain mask
971d89
 // kphs       keypart holder certificates
971d89
-// ekps       contains re-encrypted keyparts
971d89
 // kcnt       number of kphs
971d89
+// ekps       contains re-encrypted keyparts
971d89
 // reqprep    output buffer
971d89
 // reqpreplen output length
971d89
 // headerinfo set to 0 if no header info requested
971d89
@@ -1184,9 +1136,6 @@ long xcpa_fill_export_req(unsigned char *asn,         size_t alen,
971d89
 //
971d89
 // returns  0 if successful
971d89
 //         <0 if something fails
971d89
-#if defined(EP11ADM_V2)
971d89
-__asm__(".symver xcpa_construct_keypart_file, "
971d89
-        "xcpa_construct_keypart_file@EP11ADM_V2");
971d89
 long xcpa_construct_keypart_file(unsigned char *domainmask,
971d89
                               const struct KPH *kphs,
971d89
                          const struct Encrdkey *ekps,
971d89
@@ -1194,15 +1143,7 @@ long xcpa_construct_keypart_file(unsigned char *domainmask,
971d89
                                  unsigned char *reqprep,
971d89
                                         size_t *reqpreplen,
971d89
                                   unsigned int headerinfo);
971d89
-#else
971d89
-long xcpa_construct_keypart_file(struct STATESAVE *statesave,
971d89
-                                 const struct KPH *kphs,
971d89
-                            const struct Encrdkey *ekps,
971d89
-                                     unsigned int kcnt,
971d89
-                                    unsigned char *reqprep,
971d89
-                                           size_t *reqpreplen)
971d89
-                                   __attribute__((deprecated));
971d89
-#endif
971d89
+
971d89
 
971d89
 //-------------------------------------
971d89
 // Enable export WK permission
971d89
@@ -1254,17 +1195,6 @@ long xcpa_enable_import_state(target_t target,
971d89
 // Export the domain WK of the given target
971d89
 // writes output to (*resp, resplen)
971d89
 //
971d89
-// default version:
971d89
-// target      addresses target module/domain
971d89
-// keyparts    pointer to the encrypted keyparts
971d89
-// keypartlen  length of encrypted keyparts
971d89
-// request     pointer to the export request data
971d89
-// requestlen  length of request data
971d89
-// sign_cb     provide the callback for generating signatures
971d89
-//             may be NULL if no signatures required
971d89
-// signopts    number of signatures requested
971d89
-//
971d89
-// with EP11ADM_V2 feature define active:
971d89
 // target      addresses target module/domain
971d89
 // wktype      indicates either current or next WK
971d89
 // keyparts    pointer to the encrypted keyparts
971d89
@@ -1274,20 +1204,11 @@ long xcpa_enable_import_state(target_t target,
971d89
 // sign_cb     provide the callback for generating signatures
971d89
 //             may be NULL if no signatures required
971d89
 // signopts    number of signatures requested
971d89
-//
971d89
-#if defined(EP11ADM_V2)
971d89
-__asm__(".symver xcpa_export_wk, xcpa_export_wk@EP11ADM_V2");
971d89
 long xcpa_export_wk(target_t target,         int wktype,
971d89
                unsigned char *keyparts,   size_t *keypartlen,
971d89
          const unsigned char *request,    size_t requestlen,
971d89
        xcpa_admin_signs_cb_t sign_cb, const void *signopts);
971d89
-#else
971d89
-long xcpa_export_wk(target_t target,
971d89
-                       unsigned char *keyparts,   size_t *keypartlen,
971d89
-                       const unsigned char *request,    size_t requestlen,
971d89
-                       xcpa_admin_signs_cb_t sign_cb, const void *signopts)
971d89
-                                                __attribute__((deprecated));
971d89
-#endif
971d89
+
971d89
 
971d89
 //-------------------------------------
971d89
 // Export the state of the given target
971d89
@@ -1337,11 +1258,6 @@ long xcpa_import_wk_rcptinfo(target_t target,
971d89
 // sign_cb     provide the callback for generating signatures
971d89
 //             may be NULL if no signatures required
971d89
 // signopts    number of signatures requested
971d89
-//
971d89
-// uses xcp_rcptinfo and is therefore dependent on EP11ADM_V2
971d89
-#if defined(EP11ADM_V2)
971d89
-__asm__(".symver xcpa_import_wk, xcpa_import_wk@EP11ADM_V2");
971d89
-#endif
971d89
 long xcpa_import_wk(target_t target, const struct Encrdkey *ekps,
971d89
                 unsigned int kcnt,     const unsigned char *wkvp,
971d89
        xcpa_admin_signs_cb_t sign_cb,           const void *signopts);
971d89
@@ -1436,11 +1352,11 @@ long xcpa_gen_random_wk(target_t target, unsigned char *wkvp,
971d89
 //  XCP_ADMERR_SI_OID_MECH_MISMATCH:    mismatch between signature and hash
971d89
 //                                      mechanism
971d89
 //
971d89
-long xcp_signerinfo(unsigned char *asn, size_t alen,
971d89
-              const unsigned char *ski, size_t skilen,  /* signer */
971d89
-              const unsigned char *sig, size_t siglen,
971d89
-              const  CK_MECHANISM *sigmech,
971d89
-              const  CK_MECHANISM *hashmech) ;
971d89
+long xcp_signerinfo (unsigned char *asn, size_t alen,
971d89
+               const unsigned char *ski, size_t skilen,  /* signer */
971d89
+               const unsigned char *sig, size_t siglen,
971d89
+               const  CK_MECHANISM *sigmech,
971d89
+               const  CK_MECHANISM *hashmech) ;
971d89
 
971d89
 
971d89
 //-------------------------------------
971d89
@@ -1461,13 +1377,13 @@ long xcp_signerinfo(unsigned char *asn, size_t alen,
971d89
 //
971d89
 // no length checks on signature or SKI, other than checking both for non-empty
971d89
 //
971d89
-long xcp_signerinfo_read(const unsigned char *sinfo, size_t silen,
971d89
-                         const unsigned char **ski,  size_t *skilen,
971d89
-                         const unsigned char **sig,  size_t *siglen,
971d89
-                         const unsigned char **hoid, size_t *hoidlen,
971d89
-                         const unsigned char **soid, size_t *soidlen,
971d89
-                                CK_MECHANISM *signmech,
971d89
-                                CK_MECHANISM *hashmech) ;
971d89
+long xcp_signerinfo_read (const unsigned char *sinfo, size_t silen,
971d89
+                          const unsigned char **ski,  size_t *skilen,
971d89
+                          const unsigned char **sig,  size_t *siglen,
971d89
+                          const unsigned char **hoid, size_t *hoidlen,
971d89
+                          const unsigned char **soid, size_t *soidlen,
971d89
+                                 CK_MECHANISM *signmech,
971d89
+                                 CK_MECHANISM *hashmech) ;
971d89
 
971d89
 
971d89
 //-------------------------------------
971d89
@@ -1488,57 +1404,10 @@ long xcp_signerinfo_read(const unsigned char *sinfo, size_t silen,
971d89
 //
971d89
 // note: we do not verify other details of SPKI; caller must do so
971d89
 //
971d89
-long xcp_spki2pubkey(const unsigned char **bitstr,
971d89
-                     const unsigned char *spki, size_t slen) ;
971d89
-
971d89
-
971d89
-
971d89
-//----------------------------------------------------------------------
971d89
-// The following functions are DEPRECTATED!
971d89
-// for return values see their xcpa_* counterpart
971d89
+long xcp_spki2pubkey (const unsigned char **bitstr,
971d89
+                  const unsigned char *spki, size_t slen) ;
971d89
 
971d89
 
971d89
-/*----------------------------------------------------------------------
971d89
- *  build a command block to (blk,blen), querying 'fn'
971d89
- *  (payload,plen) copied to query block if non-NULL
971d89
- *
971d89
- *  returns written bytecount; size query if blk is NULL
971d89
- *   *minf used for module ID and transaction counter
971d89
- *  ignored for commands where those fields are ignored
971d89
- */
971d89
-long ep11a_cmdblock(unsigned char *blk, size_t blen,
971d89
-                     unsigned int fn,
971d89
-        const struct ep11_admresp *minf,
971d89
-              const unsigned char *tctr,    /* EP11_ADMCTR_BYTES */
971d89
-              const unsigned char *payload, size_t plen)
971d89
-              __attribute__ ((deprecated)) ;
971d89
-
971d89
-
971d89
-/*----------------------------------------------------------------------
971d89
- *  returns <0 if response is malformed, or contents invalid
971d89
- *
971d89
- *  parse embedded return value from response, writes to *rv if non-NULL
971d89
- *  (outside envelope always reports CKR_OK, unless infrastructure
971d89
- *  failed)
971d89
- */
971d89
-long ep11a_internal_rv(const unsigned char *rsp,   size_t rlen,
971d89
-                       struct ep11_admresp *rspblk, CK_RV *rv)
971d89
-                       __attribute__ ((deprecated)) ;
971d89
-
971d89
-
971d89
-/*----------------------------------------------------------------------
971d89
- *  in:  [0] query type
971d89
- *  out: [0] packed info structure
971d89
- *
971d89
- *  outputs are fixed size, except CK_IBM_XCPQ_DOMAINS, which returns a
971d89
- *  list therefore, infbytes is ignored by other types (we still check
971d89
- *  if present)
971d89
- */
971d89
-CK_RV m_get_ep11_info(CK_VOID_PTR pinfo, CK_ULONG_PTR infbytes,
971d89
-                      unsigned int query,
971d89
-                      unsigned int subquery,
971d89
-                      target_t target)
971d89
-                      __attribute__ ((deprecated)) ;
971d89
 
971d89
 
971d89
 /*
971d89
@@ -1548,7 +1417,7 @@ CK_RV m_get_ep11_info(CK_VOID_PTR pinfo, CK_ULONG_PTR infbytes,
971d89
  * mask        pointer to an 32 byte array that represents our domain mask
971d89
  * masksize    bit-length of the mask
971d89
  */
971d89
-int xcp_args2mask(char *args, unsigned char *mask, int masksize) ;
971d89
+int xcp_args2mask(char *args, unsigned char *mask, int masksize);
971d89
 
971d89
 
971d89
 /*
971d89
@@ -1602,6 +1471,10 @@ long xcpa_write_full_file(target_t target,
971d89
                       unsigned int fileid, unsigned int block);
971d89
 
971d89
 
971d89
+long xcpa_remove_file(target_t target, unsigned int fileid,
971d89
+         xcpa_admin_signs_cb_t sign_cb,  const void *signopts);
971d89
+
971d89
+
971d89
 /* brute-force section parser: enumerate all encrypted-KP sections
971d89
  *
971d89
  * returns >0 offset of full OCTET STRING T+L+V section
971d89
@@ -1627,5 +1500,15 @@ long xcpa_kps_retrieve_rcptinfo(struct Recipient_info *rcpti,
971d89
                                   const unsigned char *kpexport,
971d89
                                                size_t kplen);
971d89
 
971d89
+
971d89
+/*
971d89
+ * report domain compliance
971d89
+ *
971d89
+ * returns compliance bitmask if successful and 0 if anything failed
971d89
+ * (as zero is invalid as we always have a default compliance active)
971d89
+ *
971d89
+ */
971d89
+uint64_t get_dom_compl(target_t target);
971d89
+
971d89
 #endif /* !defined(__xcpadm_h__) */
971d89
 
971d89
-- 
971d89
2.16.2.windows.1
971d89