To expand on this:
The above mentioned
enhanced version of Tray TOTP
slightly extends the plugin to allow the creation of TOTP hashes according to Steam's goofy non-standard variant of TOTP.
In normal use (with 6 or 8 character hashes), the plugin operates identically to the original Tray TOTP plugin. When the user wants the plugin to generate Steam codes, it populates the "TOTP Settings" custom string field with the value "30;S"
-- thus giving the output hash length a value of "S".
Note: this causes Keepass2Android to throw an exception the instant one opens an account entry with that modified field value, resulting in the database being closed and the user having to re-enter their master key to get back in -- very annoying.
When validating the textfield, the plugin interprets "S" to mean "use a hash length of '5', and use the Steam hash encoding function instead of the normal one."
https://github.com/victor-rds/KeeTrayTOTP/blob/master/Libraries/TOTPProvider.cs ) -- lines 117-126
It then replaces the original Generate(byte) function with a modified Generate(string) one
https://github.com/victor-rds/KeeTrayTOTP/blob/master/Libraries/TOTPProvider.cs ) -- lines 229-265
which calls the appropriate hash encoding function to return the desired output.
At the very least, if you could fix the error handling so that the program doesn't crash out when it sees "TOTP Settings" == "30:S", that'd be a good thing.