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 }