diff --git a/app/src/main/java/dev/msfjarvis/aps/injection/pwgen/DicewareModule.kt b/app/src/main/java/dev/msfjarvis/aps/injection/pwgen/DicewareModule.kt new file mode 100644 index 00000000..8aed12de --- /dev/null +++ b/app/src/main/java/dev/msfjarvis/aps/injection/pwgen/DicewareModule.kt @@ -0,0 +1,55 @@ +/* + * Copyright © 2014-2021 The Android Password Store Authors. All Rights Reserved. + * SPDX-License-Identifier: GPL-3.0-only + */ + +package dev.msfjarvis.aps.injection.pwgen + +import android.content.Context +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.components.FragmentComponent +import dagger.hilt.android.qualifiers.ApplicationContext +import dev.msfjarvis.aps.passgen.diceware.DicewarePassphraseGenerator +import dev.msfjarvis.aps.passgen.diceware.Die +import dev.msfjarvis.aps.passgen.diceware.RandomIntGenerator +import java.io.InputStream +import java.security.SecureRandom +import javax.inject.Qualifier + +@Module +@InstallIn(FragmentComponent::class) +object DicewareModule { + + @Provides + fun provideDicewareGenerator( + die: Die, + @WordlistQualifier wordList: InputStream, + ): DicewarePassphraseGenerator { + return DicewarePassphraseGenerator(die, wordList) + } + + @Provides + fun provideDie( + intGenerator: RandomIntGenerator, + ): Die { + return Die(6, intGenerator) + } + + @Provides + fun provideRandomIntGenerator(): RandomIntGenerator { + return RandomIntGenerator { range -> + SecureRandom().nextInt(range.last).coerceAtLeast(range.first) + } + } + + @[Provides WordlistQualifier] + fun provideDefaultWordList(@ApplicationContext context: Context): InputStream { + return context.resources.openRawResource( + dev.msfjarvis.aps.passgen.diceware.R.raw.diceware_wordlist + ) + } +} + +@Qualifier annotation class WordlistQualifier