1 /* 2 * This file and its contents are supplied under the terms of the 3 * Common Development and Distribution License ("CDDL"), version 1.0. 4 * You may only use this file in accordance with the terms of version 5 * 1.0 of the CDDL. 6 * 7 * A full copy of the text of the CDDL should have accompanied this 8 * source. A copy of the CDDL is also available via the Internet at 9 * http://www.illumos.org/license/CDDL. 10 */ 11 12 /* 13 * Copyright 2018 Nexenta Systems, Inc. All rights reserved. 14 */ 15 16 /* 17 * Helper functions for SMB3 encryption using PKCS#11 18 * 19 * There are two implementations of these functions: 20 * This one (for user space) and another for kernel. 21 * See: uts/common/fs/smbsrv/smb3_encrypt_kcf.c 22 * 23 * NOTE: CCM is not implemented in PKCS yet, so these are just stubs. 24 */ 25 26 #include <smbsrv/smb_kcrypt.h> 27 #include <smbsrv/smb2_kproto.h> 28 29 /* 30 * SMB3 encryption helpers: 31 * (getmech, init, update, final) 32 */ 33 34 /* ARGSUSED */ 35 int 36 smb3_encrypt_getmech(smb_crypto_mech_t *mech) 37 { 38 cmn_err(CE_NOTE, "fksmbsrv does not support SMB3 Encryption"); 39 return (-1); 40 } 41 42 /* ARGSUSED */ 43 void 44 smb3_crypto_init_param(smb3_crypto_param_t *param, 45 uint8_t *nonce, size_t noncesize, uint8_t *auth, size_t authsize, 46 size_t datasize) 47 { 48 } 49 50 /* 51 * Start the KCF session, load the key 52 */ 53 54 /* ARGSUSED */ 55 static int 56 smb3_crypto_init(smb3_enc_ctx_t *ctxp, smb_crypto_mech_t *mech, 57 uint8_t *key, size_t key_len, smb3_crypto_param_t *param, 58 boolean_t is_encrypt) 59 { 60 return (-1); 61 } 62 63 /* ARGSUSED */ 64 int 65 smb3_encrypt_init(smb3_enc_ctx_t *ctxp, smb_crypto_mech_t *mech, 66 smb3_crypto_param_t *param, uint8_t *key, size_t keylen, 67 uint8_t *buf, size_t buflen) 68 { 69 return (smb3_crypto_init(ctxp, mech, key, keylen, param, B_TRUE)); 70 } 71 72 int 73 smb3_decrypt_init(smb3_enc_ctx_t *ctxp, smb_crypto_mech_t *mech, 74 smb3_crypto_param_t *param, uint8_t *key, size_t keylen) 75 { 76 return (smb3_crypto_init(ctxp, mech, key, keylen, param, B_FALSE)); 77 } 78 79 /* 80 * Digest one segment 81 */ 82 83 /* ARGSUSED */ 84 int 85 smb3_encrypt_update(smb3_enc_ctx_t *ctxp, uint8_t *in, size_t len) 86 { 87 return (-1); 88 } 89 90 /* ARGSUSED */ 91 int 92 smb3_decrypt_update(smb3_enc_ctx_t *ctxp, uint8_t *in, size_t len) 93 { 94 return (-1); 95 } 96 97 /* ARGSUSED */ 98 int 99 smb3_encrypt_final(smb3_enc_ctx_t *ctxp, uint8_t *digest16) 100 { 101 return (-1); 102 } 103 104 /* ARGSUSED */ 105 int 106 smb3_decrypt_final(smb3_enc_ctx_t *ctxp, uint8_t *buf, size_t buflen) 107 { 108 return (-1); 109 } 110 111 /* ARGSUSED */ 112 void 113 smb3_encrypt_cancel(smb3_enc_ctx_t *ctxp) 114 { 115 }