Implement nwssl NICI compatibility layer
All checks were successful
Source release / source-package (push) Successful in 1m13s

This commit is contained in:
OpenAI Build Bot
2026-06-05 18:49:21 +00:00
committed by Mario Fetka
parent a3def812f5
commit 1f4c03e2f6
4 changed files with 820 additions and 37 deletions

View File

@@ -3,13 +3,17 @@
#include <stdint.h>
#ifndef N_EXTERN_LIBRARY
#define N_EXTERN_LIBRARY(type) type
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef uint8_t NICI_BYTE;
typedef uint32_t NICI_ULONG;
typedef uint32_t NICI_BBOOL;
typedef uint8_t NICI_BBOOL;
typedef uint32_t NICI_CC_HANDLE;
typedef uint32_t NICI_OBJECT_HANDLE;
typedef NICI_OBJECT_HANDLE *NICI_OBJECT_HANDLE_PTR;
@@ -18,20 +22,25 @@ typedef uint32_t nuint32;
typedef uint8_t nuint8;
typedef uint8_t nbool8;
#define NICI_H_INVALID 0
#define NICI_KM_UNSPECIFIED 0
typedef uint8_t *pnuint8;
#define NICI_A_KEY_TYPE 1
#define NICI_A_KEY_USAGE 2
#define NICI_A_KEY_SIZE 3
#define NICI_A_GLOBAL 4
#define NICI_A_CLASS 5
#define NICI_A_KEY_FORMAT 6
#define NICI_A_FEATURE 7
#define NICI_H_INVALID 0u
#define NICI_KM_UNSPECIFIED 0u
#define N_TRUE 1u
#define N_FALSE 0u
#define NICI_K_AES 1
#define NICI_K_DES3X 2
#define NICI_K_DES 3
#define NICI_A_KEY_TYPE 1u
#define NICI_A_KEY_USAGE 2u
#define NICI_A_KEY_SIZE 3u
#define NICI_A_GLOBAL 4u
#define NICI_A_CLASS 5u
#define NICI_A_KEY_FORMAT 6u
#define NICI_A_FEATURE 7u
#define NICI_A_KEY_VALUE 8u
#define NICI_K_AES 1u
#define NICI_K_DES3X 2u
#define NICI_K_DES 3u
#define NICI_F_DATA_ENCRYPT 0x0001u
#define NICI_F_DATA_DECRYPT 0x0002u
@@ -41,37 +50,61 @@ typedef uint8_t nbool8;
#define NICI_F_KM_ENCRYPT 0x0020u
#define NICI_F_KM_DECRYPT 0x0040u
#define NICI_O_SECRET_KEY 1
#define NICI_AV_STORAGE 1
#define NICI_P_IV 1
#define NICI_O_SECRET_KEY 1u
#define NICI_AV_STORAGE 1u
#define NICI_P_IV 1u
#define NICI_P_SALT 2u
#define NICI_P_COUNT 3u
#define NICI_E_FUNCTION_NOT_SUPPORTED (-1)
#define NICI_AlgorithmPrefix(x) (x)
#define IDV_NOV_AES128CBCPad NICI_AlgorithmPrefix(1), 97
#define IDV_NOV_DES3CBCPad NICI_AlgorithmPrefix(1), 98
#define IDV_NOV_DESCBCPad NICI_AlgorithmPrefix(1), 99
#define IDV_AES128CBC NICI_AlgorithmPrefix(1), 1
#define IDV_DES_EDE3_CBC_IV8 NICI_AlgorithmPrefix(1), 2
#define IDV_DES_CBC_IV8 NICI_AlgorithmPrefix(1), 3
#define IDV_DES_EDE3_CBCPadIV8 NICI_AlgorithmPrefix(1), 4
#define IDV_DES_CBCPadIV8 NICI_AlgorithmPrefix(1), 5
#define IDV_NOV_AES128CBCPad NICI_AlgorithmPrefix(1), 6
#define IDV_NOV_DES3CBCPad NICI_AlgorithmPrefix(1), 7
#define IDV_NOV_DESCBCPad NICI_AlgorithmPrefix(1), 8
#define IDV_SHA1 NICI_AlgorithmPrefix(1), 9
#define IDV_pbeWithSHA1And3Key3xDES_CBC NICI_AlgorithmPrefix(1), 10
typedef struct NICI_PARAMETER_DATA_st {
uint32_t parmType;
union {
struct {
uint32_t len;
void *ptr;
} b;
uint32_t value;
} u;
} NICI_PARAMETER_DATA;
typedef struct NICI_PARAMETER_INFO_st {
uint32_t parmType;
void *parm;
uint32_t parmLen;
uint32_t count;
NICI_PARAMETER_DATA parms[4];
} NICI_PARAMETER_INFO;
typedef struct NICI_PARAMETER_st {
NICI_PARAMETER_INFO *parms;
uint32_t parmCount;
} NICI_PARAMETER;
typedef struct NICI_ALGORITHM_st {
const uint8_t *algorithm;
uint32_t algorithmLen;
NICI_PARAMETER *parameter;
uint32_t parameterLen;
NICI_PARAMETER_INFO *parameter;
} NICI_ALGORITHM;
typedef struct NICI_ATTRIBUTE_st {
uint32_t type;
union {
struct { uint32_t value; } f;
struct { void *data; uint32_t len; } b;
struct {
uint32_t hasValue;
uint32_t value;
uint32_t valueInfo;
} f;
struct {
void *valuePtr;
uint32_t valueLen;
uint32_t valueInfo;
} v;
} u;
} NICI_ATTRIBUTE;
@@ -86,14 +119,16 @@ int CCS_UnwrapKey(NICI_CC_HANDLE context, NICI_OBJECT_HANDLE wrapping_key, const
int CCS_GenerateKey(NICI_CC_HANDLE context, NICI_ALGORITHM *algorithm, NICI_ATTRIBUTE_PTR attrs, uint32_t attr_count, NICI_BBOOL *key_size_changed, NICI_OBJECT_HANDLE_PTR key, NICI_OBJECT_HANDLE template_key);
int CCS_GetRandom(NICI_CC_HANDLE context, void *buf, uint32_t len);
int CCS_DataEncryptInit(NICI_CC_HANDLE context, NICI_ALGORITHM *algorithm, NICI_OBJECT_HANDLE key);
int CCS_Encrypt(NICI_CC_HANDLE context, const void *in, uint32_t in_len, void *out, uint32_t *out_len);
int CCS_Encrypt(NICI_CC_HANDLE context, const void *in, uint32_t in_len, void *out, void *out_len);
int CCS_DataDecryptInit(NICI_CC_HANDLE context, NICI_ALGORITHM *algorithm, NICI_OBJECT_HANDLE key);
int CCS_Decrypt(NICI_CC_HANDLE context, const void *in, uint32_t in_len, void *out, uint32_t *out_len);
int CCS_Decrypt(NICI_CC_HANDLE context, const void *in, uint32_t in_len, void *out, void *out_len);
int CCS_FindObjectsInit(NICI_CC_HANDLE context, NICI_ATTRIBUTE_PTR attrs, uint32_t attr_count);
int CCS_FindObjects(NICI_CC_HANDLE context, NICI_OBJECT_HANDLE_PTR objects, uint32_t *object_count);
int CCS_FindObjects(NICI_CC_HANDLE context, NICI_OBJECT_HANDLE_PTR objects, void *object_count);
int CCS_FindObjectsFinal(NICI_CC_HANDLE context);
int CCS_pbeEncrypt(NICI_CC_HANDLE context, const void *password, uint32_t password_len, const void *salt, uint32_t salt_len, uint32_t iterations, const void *in, uint32_t in_len, void *out, uint32_t *out_len);
int CCS_pbeDecrypt(NICI_CC_HANDLE context, const void *password, uint32_t password_len, const void *salt, uint32_t salt_len, uint32_t iterations, const void *in, uint32_t in_len, void *out, uint32_t *out_len);
int CCS_DigestInit(NICI_CC_HANDLE context, NICI_ALGORITHM *algorithm);
int CCS_Digest(NICI_CC_HANDLE context, const void *in, uint32_t in_len, void *out, void *out_len);
int CCS_pbeEncrypt(NICI_CC_HANDLE context, NICI_ALGORITHM *algorithm, const void *password, const void *in, uint32_t in_len, void *out, void *out_len);
int CCS_pbeDecrypt(NICI_CC_HANDLE context, NICI_ALGORITHM *algorithm, const void *password, const void *in, uint32_t in_len, void *out, void *out_len);
int CCS_InjectKey(NICI_CC_HANDLE context, NICI_ATTRIBUTE_PTR attrs, nuint32 attr_count, NICI_OBJECT_HANDLE_PTR key);
int CCS_ExtractKey(NICI_CC_HANDLE context, NICI_OBJECT_HANDLE key, NICI_ATTRIBUTE_PTR attrs, nuint32 attr_count);