fksmb_encrypt_pkcs.c revision 1160dcf7283d2485f2b9c32da573db0275558d9b
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 */
35int
36smb3_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 */
43void
44smb3_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 */
55static int
56smb3_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 */
64int
65smb3_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
72int
73smb3_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 */
84int
85smb3_encrypt_update(smb3_enc_ctx_t *ctxp, uint8_t *in, size_t len)
86{
87	return (-1);
88}
89
90/* ARGSUSED */
91int
92smb3_decrypt_update(smb3_enc_ctx_t *ctxp, uint8_t *in, size_t len)
93{
94	return (-1);
95}
96
97/* ARGSUSED */
98int
99smb3_encrypt_final(smb3_enc_ctx_t *ctxp, uint8_t *digest16)
100{
101	return (-1);
102}
103
104/* ARGSUSED */
105int
106smb3_decrypt_final(smb3_enc_ctx_t *ctxp, uint8_t *buf, size_t buflen)
107{
108	return (-1);
109}
110
111/* ARGSUSED */
112void
113smb3_encrypt_cancel(smb3_enc_ctx_t *ctxp)
114{
115}
116