1717
1818import ch .cyberduck .core .Path ;
1919import ch .cyberduck .core .PathAttributes ;
20- import ch .cyberduck .core .RandomStringService ;
2120import ch .cyberduck .core .Session ;
2221import ch .cyberduck .core .SimplePathPredicate ;
23- import ch .cyberduck .core .UUIDRandomStringService ;
2422import ch .cyberduck .core .cryptomator .AbstractVault ;
2523import ch .cyberduck .core .cryptomator .ContentReader ;
2624import ch .cyberduck .core .cryptomator .CryptoFilename ;
2725import ch .cyberduck .core .cryptomator .CryptorCache ;
26+ import ch .cyberduck .core .cryptomator .random .FastSecureRandomProvider ;
2827import ch .cyberduck .core .exception .BackgroundException ;
2928import ch .cyberduck .core .exception .NotfoundException ;
3029
3433
3534import java .nio .ByteBuffer ;
3635import java .nio .ByteOrder ;
37- import java .nio . charset . StandardCharsets ;
36+ import java .security . SecureRandom ;
3837import java .util .EnumSet ;
3938
4039import com .google .common .io .BaseEncoding ;
@@ -45,8 +44,8 @@ public class CryptoDirectoryUVFProvider extends CryptoDirectoryV7Provider {
4544 private final Path home ;
4645 private final AbstractVault vault ;
4746
48- private final RandomStringService random
49- = new UUIDRandomStringService ();
47+ private final SecureRandom random
48+ = FastSecureRandomProvider . get (). provide ();
5049 private final Path dataRoot ;
5150 private final CryptorCache filenameCryptor ;
5251 private final CryptoFilename filenameProvider ;
@@ -150,7 +149,7 @@ protected byte[] load(final Session<?> session, final Path directory) throws Bac
150149 }
151150 catch (NotfoundException e ) {
152151 log .warn ("Missing directory ID for folder {}" , directory );
153- return random . random (). getBytes ( StandardCharsets . US_ASCII );
152+ return this . getOrCreateDirectoryId ( session , directory );
154153 }
155154 }
156155
@@ -174,4 +173,14 @@ protected int loadRevision(final Session<?> session, final Path directory) throw
174173 headerBuf .position (4 ).limit (headerSize );
175174 return headerBuf .order (ByteOrder .BIG_ENDIAN ).getInt ();
176175 }
176+
177+ @ Override
178+ public byte [] createDirectoryId (final Path directory ) {
179+ final byte [] dirId = new byte [32 ];
180+ random .nextBytes (dirId );
181+ //TODO lock?
182+ cache .put (new SimplePathPredicate (directory ), dirId );
183+ return dirId ;
184+
185+ }
177186}
0 commit comments