Print this page
12513 SMB 3.1.1 support for server
@@ -9,10 +9,11 @@
* http://www.illumos.org/license/CDDL.
*/
/*
* Copyright 2017 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2020 RackTop Systems, Inc.
*/
#ifndef _SMB_KCRYPT_H_
#define _SMB_KCRYPT_H_
@@ -34,10 +35,11 @@
extern "C" {
#endif
#define MD5_DIGEST_LENGTH 16 /* MD5 digest length in bytes */
#define SHA256_DIGEST_LENGTH 32 /* SHA256 digest length in bytes */
+#define SHA512_DIGEST_LENGTH 64 /* SHA512 digest length in bytes */
#define SMB2_SIG_SIZE 16
#define SMB2_KEYLEN 16
#define SMB3_KEYLEN 16 /* AES-128 keys */
#ifdef _KERNEL
@@ -47,11 +49,16 @@
typedef struct smb3_enc_ctx {
crypto_context_t ctx;
crypto_data_t output;
size_t len;
} smb3_enc_ctx_t;
-typedef CK_AES_CCM_PARAMS smb3_crypto_param_t;
+
+typedef union {
+ CK_AES_CCM_PARAMS ccm;
+ CK_AES_GCM_PARAMS gcm;
+} smb3_crypto_param_t;
+
#else /* _KERNEL */
/* PKCS11 variant */
typedef CK_MECHANISM smb_crypto_mech_t;
typedef CK_SESSION_HANDLE smb_sign_ctx_t;
typedef struct smb_enc_ctx {
@@ -91,15 +98,20 @@
int smb3_cmac_getmech(smb_crypto_mech_t *);
int smb3_cmac_init(smb_sign_ctx_t *, smb_crypto_mech_t *, uint8_t *, size_t);
int smb3_cmac_update(smb_sign_ctx_t, uint8_t *, size_t);
int smb3_cmac_final(smb_sign_ctx_t, uint8_t *);
-int smb3_do_kdf(void *, void *, size_t, uint8_t *, uint32_t);
-
-int smb3_encrypt_getmech(smb_crypto_mech_t *);
-void smb3_crypto_init_param(smb3_crypto_param_t *, uint8_t *, size_t,
+int smb3_kdf(uint8_t *outbuf, uint8_t *key, size_t key_len,
+ uint8_t *label, size_t label_len,
+ uint8_t *context, size_t context_len);
+
+int smb3_aes_ccm_getmech(smb_crypto_mech_t *);
+int smb3_aes_gcm_getmech(smb_crypto_mech_t *);
+void smb3_crypto_init_ccm_param(smb3_crypto_param_t *, uint8_t *, size_t,
uint8_t *, size_t, size_t);
+void smb3_crypto_init_gcm_param(smb3_crypto_param_t *, uint8_t *, size_t,
+ uint8_t *, size_t);
int smb3_encrypt_init(smb3_enc_ctx_t *, smb_crypto_mech_t *,
smb3_crypto_param_t *, uint8_t *, size_t, uint8_t *, size_t);
int smb3_encrypt_update(smb3_enc_ctx_t *, uint8_t *, size_t);
int smb3_encrypt_final(smb3_enc_ctx_t *, uint8_t *);