162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2018 Samsung Electronics Co., Ltd. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef __AUTH_H__ 762306a36Sopenharmony_ci#define __AUTH_H__ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include "ntlmssp.h" 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#ifdef CONFIG_SMB_SERVER_KERBEROS5 1262306a36Sopenharmony_ci#define AUTH_GSS_LENGTH 96 1362306a36Sopenharmony_ci#define AUTH_GSS_PADDING 0 1462306a36Sopenharmony_ci#else 1562306a36Sopenharmony_ci#define AUTH_GSS_LENGTH 74 1662306a36Sopenharmony_ci#define AUTH_GSS_PADDING 6 1762306a36Sopenharmony_ci#endif 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define CIFS_HMAC_MD5_HASH_SIZE (16) 2062306a36Sopenharmony_ci#define CIFS_NTHASH_SIZE (16) 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci/* 2362306a36Sopenharmony_ci * Size of the ntlm client response 2462306a36Sopenharmony_ci */ 2562306a36Sopenharmony_ci#define CIFS_AUTH_RESP_SIZE 24 2662306a36Sopenharmony_ci#define CIFS_SMB1_SIGNATURE_SIZE 8 2762306a36Sopenharmony_ci#define CIFS_SMB1_SESSKEY_SIZE 16 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci#define KSMBD_AUTH_NTLMSSP 0x0001 3062306a36Sopenharmony_ci#define KSMBD_AUTH_KRB5 0x0002 3162306a36Sopenharmony_ci#define KSMBD_AUTH_MSKRB5 0x0004 3262306a36Sopenharmony_ci#define KSMBD_AUTH_KRB5U2U 0x0008 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistruct ksmbd_session; 3562306a36Sopenharmony_cistruct ksmbd_conn; 3662306a36Sopenharmony_cistruct ksmbd_work; 3762306a36Sopenharmony_cistruct kvec; 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ciint ksmbd_crypt_message(struct ksmbd_work *work, struct kvec *iov, 4062306a36Sopenharmony_ci unsigned int nvec, int enc); 4162306a36Sopenharmony_civoid ksmbd_copy_gss_neg_header(void *buf); 4262306a36Sopenharmony_ciint ksmbd_auth_ntlmv2(struct ksmbd_conn *conn, struct ksmbd_session *sess, 4362306a36Sopenharmony_ci struct ntlmv2_resp *ntlmv2, int blen, char *domain_name, 4462306a36Sopenharmony_ci char *cryptkey); 4562306a36Sopenharmony_ciint ksmbd_decode_ntlmssp_auth_blob(struct authenticate_message *authblob, 4662306a36Sopenharmony_ci int blob_len, struct ksmbd_conn *conn, 4762306a36Sopenharmony_ci struct ksmbd_session *sess); 4862306a36Sopenharmony_ciint ksmbd_decode_ntlmssp_neg_blob(struct negotiate_message *negblob, 4962306a36Sopenharmony_ci int blob_len, struct ksmbd_conn *conn); 5062306a36Sopenharmony_ciunsigned int 5162306a36Sopenharmony_ciksmbd_build_ntlmssp_challenge_blob(struct challenge_message *chgblob, 5262306a36Sopenharmony_ci struct ksmbd_conn *conn); 5362306a36Sopenharmony_ciint ksmbd_krb5_authenticate(struct ksmbd_session *sess, char *in_blob, 5462306a36Sopenharmony_ci int in_len, char *out_blob, int *out_len); 5562306a36Sopenharmony_ciint ksmbd_sign_smb2_pdu(struct ksmbd_conn *conn, char *key, struct kvec *iov, 5662306a36Sopenharmony_ci int n_vec, char *sig); 5762306a36Sopenharmony_ciint ksmbd_sign_smb3_pdu(struct ksmbd_conn *conn, char *key, struct kvec *iov, 5862306a36Sopenharmony_ci int n_vec, char *sig); 5962306a36Sopenharmony_ciint ksmbd_gen_smb30_signingkey(struct ksmbd_session *sess, 6062306a36Sopenharmony_ci struct ksmbd_conn *conn); 6162306a36Sopenharmony_ciint ksmbd_gen_smb311_signingkey(struct ksmbd_session *sess, 6262306a36Sopenharmony_ci struct ksmbd_conn *conn); 6362306a36Sopenharmony_ciint ksmbd_gen_smb30_encryptionkey(struct ksmbd_conn *conn, 6462306a36Sopenharmony_ci struct ksmbd_session *sess); 6562306a36Sopenharmony_ciint ksmbd_gen_smb311_encryptionkey(struct ksmbd_conn *conn, 6662306a36Sopenharmony_ci struct ksmbd_session *sess); 6762306a36Sopenharmony_ciint ksmbd_gen_preauth_integrity_hash(struct ksmbd_conn *conn, char *buf, 6862306a36Sopenharmony_ci __u8 *pi_hash); 6962306a36Sopenharmony_ciint ksmbd_gen_sd_hash(struct ksmbd_conn *conn, char *sd_buf, int len, 7062306a36Sopenharmony_ci __u8 *pi_hash); 7162306a36Sopenharmony_ci#endif 72