@Nullable
	@Override
	public String generate() {
		@Nullable final String currentKey;
		try {
			currentKey = this.queue.poll( 1, TimeUnit.SECONDS );
		} catch ( InterruptedException e ) {
			throw new RuntimeException( e );
		}
		if ( currentKey != null ) {
			final GnuPG gnuPG;
			try {
				gnuPG = GnuPG.decrypt( text );
			} catch ( IOException e ) {
				throw new RuntimeException( "While creating the GNUPG process, an error occurred.", e );
			}

			GnuPGResult gnuPGResult = null;
			try {
				LOG.info( "[{}]: Trying key '{}'", name, currentKey );
				gnuPGResult = gnuPG.withPassPhrase( currentKey ).execute();
				if ( gnuPGResult.isSuccessful() && gnuPGResult.getValue() != null && !gnuPGResult.getValue().isEmpty() ) {
					this.eventManager.notifyListener( createInfoEvent( currentKey ) );
					mainEventManager.notifyListener( createCloseEvent( currentKey ) );
					return currentKey;
				}
			} catch ( IOException ex ) {
				this.handleError( gnuPGResult, ex );
			} catch ( ExecutionException ex ) {
				this.handleError( gnuPGResult, ex );
			}
		}
		return null;
	}