@@ -31,12 +31,21 @@ class Security
3131 */
3232 private string $ workbookPassword = '' ;
3333
34- /**
35- * Create a new Document Security instance.
36- */
37- public function __construct ()
38- {
39- }
34+ private string $ workbookAlgorithmName = '' ;
35+
36+ private string $ workbookHashValue = '' ;
37+
38+ private string $ workbookSaltValue = '' ;
39+
40+ private int $ workbookSpinCount = 0 ;
41+
42+ private string $ revisionsAlgorithmName = '' ;
43+
44+ private string $ revisionsHashValue = '' ;
45+
46+ private string $ revisionsSaltValue = '' ;
47+
48+ private int $ revisionsSpinCount = 0 ;
4049
4150 /**
4251 * Is some sort of document security enabled?
@@ -105,10 +114,18 @@ public function getRevisionsPassword(): string
105114 public function setRevisionsPassword (?string $ password , bool $ alreadyHashed = false ): static
106115 {
107116 if ($ password !== null ) {
108- if (!$ alreadyHashed ) {
109- $ password = PasswordHasher::hashPassword ($ password );
117+ if ($ this ->advancedRevisionsPassword ()) {
118+ if (!$ alreadyHashed ) {
119+ $ password = PasswordHasher::hashPassword ($ password , $ this ->revisionsAlgorithmName , $ this ->revisionsSaltValue , $ this ->revisionsSpinCount );
120+ }
121+ $ this ->revisionsHashValue = $ password ;
122+ $ this ->revisionsPassword = '' ;
123+ } else {
124+ if (!$ alreadyHashed ) {
125+ $ password = PasswordHasher::hashPassword ($ password );
126+ }
127+ $ this ->revisionsPassword = $ password ;
110128 }
111- $ this ->revisionsPassword = $ password ;
112129 }
113130
114131 return $ this ;
@@ -129,12 +146,112 @@ public function getWorkbookPassword(): string
129146 public function setWorkbookPassword (?string $ password , bool $ alreadyHashed = false ): static
130147 {
131148 if ($ password !== null ) {
132- if (!$ alreadyHashed ) {
133- $ password = PasswordHasher::hashPassword ($ password );
149+ if ($ this ->advancedPassword ()) {
150+ if (!$ alreadyHashed ) {
151+ $ password = PasswordHasher::hashPassword ($ password , $ this ->workbookAlgorithmName , $ this ->workbookSaltValue , $ this ->workbookSpinCount );
152+ }
153+ $ this ->workbookHashValue = $ password ;
154+ $ this ->workbookPassword = '' ;
155+ } else {
156+ if (!$ alreadyHashed ) {
157+ $ password = PasswordHasher::hashPassword ($ password );
158+ }
159+ $ this ->workbookPassword = $ password ;
134160 }
135- $ this ->workbookPassword = $ password ;
136161 }
137162
138163 return $ this ;
139164 }
165+
166+ public function getWorkbookHashValue (): string
167+ {
168+ return $ this ->advancedPassword () ? $ this ->workbookHashValue : '' ;
169+ }
170+
171+ public function advancedPassword (): bool
172+ {
173+ return $ this ->workbookAlgorithmName !== '' && $ this ->workbookSaltValue !== '' && $ this ->workbookSpinCount > 0 ;
174+ }
175+
176+ public function getWorkbookAlgorithmName (): string
177+ {
178+ return $ this ->workbookAlgorithmName ;
179+ }
180+
181+ public function setWorkbookAlgorithmName (string $ workbookAlgorithmName ): static
182+ {
183+ $ this ->workbookAlgorithmName = $ workbookAlgorithmName ;
184+
185+ return $ this ;
186+ }
187+
188+ public function getWorkbookSpinCount (): int
189+ {
190+ return $ this ->workbookSpinCount ;
191+ }
192+
193+ public function setWorkbookSpinCount (int $ workbookSpinCount ): static
194+ {
195+ $ this ->workbookSpinCount = $ workbookSpinCount ;
196+
197+ return $ this ;
198+ }
199+
200+ public function getWorkbookSaltValue (): string
201+ {
202+ return $ this ->workbookSaltValue ;
203+ }
204+
205+ public function setWorkbookSaltValue (string $ workbookSaltValue , bool $ base64Required ): static
206+ {
207+ $ this ->workbookSaltValue = $ base64Required ? base64_encode ($ workbookSaltValue ) : $ workbookSaltValue ;
208+
209+ return $ this ;
210+ }
211+
212+ public function getRevisionsHashValue (): string
213+ {
214+ return $ this ->advancedRevisionsPassword () ? $ this ->revisionsHashValue : '' ;
215+ }
216+
217+ public function advancedRevisionsPassword (): bool
218+ {
219+ return $ this ->revisionsAlgorithmName !== '' && $ this ->revisionsSaltValue !== '' && $ this ->revisionsSpinCount > 0 ;
220+ }
221+
222+ public function getRevisionsAlgorithmName (): string
223+ {
224+ return $ this ->revisionsAlgorithmName ;
225+ }
226+
227+ public function setRevisionsAlgorithmName (string $ revisionsAlgorithmName ): static
228+ {
229+ $ this ->revisionsAlgorithmName = $ revisionsAlgorithmName ;
230+
231+ return $ this ;
232+ }
233+
234+ public function getRevisionsSpinCount (): int
235+ {
236+ return $ this ->revisionsSpinCount ;
237+ }
238+
239+ public function setRevisionsSpinCount (int $ revisionsSpinCount ): static
240+ {
241+ $ this ->revisionsSpinCount = $ revisionsSpinCount ;
242+
243+ return $ this ;
244+ }
245+
246+ public function getRevisionsSaltValue (): string
247+ {
248+ return $ this ->revisionsSaltValue ;
249+ }
250+
251+ public function setRevisionsSaltValue (string $ revisionsSaltValue , bool $ base64Required ): static
252+ {
253+ $ this ->revisionsSaltValue = $ base64Required ? base64_encode ($ revisionsSaltValue ) : $ revisionsSaltValue ;
254+
255+ return $ this ;
256+ }
140257}
0 commit comments