mirror of
https://github.com/XFox111/SimpleOTP.git
synced 2026-04-22 08:00:45 +03:00
66eab0a589
* Expanded support to .NET Standard 2.1 and .NET Core 3.1 * Fixed documentation typos #14 (#15) Co-authored-by: Akshay Kumar <72260914+AXE02@users.noreply.github.com>
107 lines
6.1 KiB
Markdown
107 lines
6.1 KiB
Markdown
# SimpleOTP
|
|
[](https://github.com/xfox111/SimpleOTP/commits/master)
|
|
[](https://opensource.org/licenses/MIT)
|
|
|
|
[](https://twitter.com/xfox111)
|
|
[](https://github.com/xfox111)
|
|
[](https://buymeacoffee.com/xfox111)
|
|
|
|
.NET library for TOTP/HOTP implementation on server (ASP.NET) or client (Xamarin) side
|
|
|
|
## Features
|
|
- Generate and validate OTP codes
|
|
- Support of [TOTP](https://en.wikipedia.org/wiki/Time-based_One-time_password) (RFC 6238) and [HOTP](https://en.wikipedia.org/wiki/HMAC-based_one-time_password) (RFC 4226) algorithms
|
|
- Support of HMAC-SHA1, HMAC-SHA256 and HMAC-SHA512 hashing algorithms
|
|
- Setup URI parser
|
|
- Database-ready configuration models
|
|
- Configuration generator for server-side implementation
|
|
- QR code generator
|
|
- No dependencies
|
|
|
|

|
|
##### By Mateusz Adamowski, taken with Canon EOS. - Own work, CC BY-SA 1.0, https://commons.wikimedia.org/w/index.php?curid=142232
|
|
|
|
## Usage
|
|
See more documentation at [project's wiki](https://github.com/xfox111/SimpleOTP/wiki)
|
|
### Generate code
|
|
```csharp
|
|
string sample_config_uri = "otpauth://totp/FoxDev%20Studio:eugene@xfox111.net?secret=ESQVTYRM2CWZC3NX24GRRWIAUUWVHWQH&issuer=FoxDev%20Studio";
|
|
OTPConfiguration config = OTPConfiguration.GetConfiguration(sample_config_uri);
|
|
// OTPConfiguration { Id = af2358b0-3f69-4dd7-9537-32c07d6663aa, Type = TOTP, IssuerLabel = FoxDev Studio, AccountName = eugene@xfox111.net, Secret = ESQVTYRM2CWZC3NX24GRRWIAUUWVHWQH, Issuer = FoxDev Studio, Algorithm = SHA1, Digits = 6, Counter = 0, Period = 00:00:30 }
|
|
|
|
|
|
OTPCode code = OTPService.GenerateCode(ref config);
|
|
// OTPasswordModel { Code = 350386, Expiring = 23-May-21 06:08:30 PM }
|
|
```
|
|
|
|
### Validate code
|
|
```csharp
|
|
int codeToValidate = 350386;
|
|
bool isValid = OTPService.ValidateTotp(codeToValidate, config, TimeSpan.FromSeconds(30)); // True
|
|
```
|
|
|
|
### Generate setup config
|
|
```csharp
|
|
OTPConfiguration config = OTPConfiguration.GenerateConfiguration("FoxDev Studio", "eugene@xfox111.net");
|
|
// OTPModel { Id = af2358b0-3f69-4dd7-9537-32c07d6663aa, Type = TOTP, IssuerLabel = FoxDev Studio, AccountName = eugene@xfox111.net, Secret = ESQVTYRM2CWZC3NX24GRRWIAUUWVHWQH, Issuer = FoxDev Studio, Algorithm = SHA1, Digits = 6, Counter = 0, Period = 00:00:30 }
|
|
|
|
Uri uri = config.GetUri(); // otpauth://totp/FoxDev%20Studio:eugene@xfox111.net?secret=ESQVTYRM2CWZC3NX24GRRWIAUUWVHWQH&issuer=FoxDev%20Studio
|
|
string qrCode = config.GetQrImage(300); // data:image/png;base64,...
|
|
```
|
|
|
|
### Streamline code generation for client
|
|
```csharp
|
|
OTPFactory factory = new (config);
|
|
|
|
factory.CodeUpdated += (newCode) => Console.WriteLine(newCode);
|
|
// OTPCode { Code = 350386, Expiring = 23-May-21 06:08:30 PM }
|
|
factory.PropertyChanged += (sender, args) =>
|
|
{
|
|
if (args.PropertyName == nameof(factory.TimeLeft))
|
|
Console.WriteLine(factory.TimeLeft);
|
|
else
|
|
Console.WriteLine(factory.Code);
|
|
}
|
|
...
|
|
factory.Dispose();
|
|
|
|
```
|
|
|
|
## Download
|
|

|
|

|
|
- [NuGet Gallery](https://www.nuget.org/packages/SimpleOTP)
|
|
- [GitHub Releases](https://github.com/xfox111/SimpleOTP/releases/latest)
|
|
|
|
## CI/DC status
|
|
[](https://dev.azure.com/xfox111/GitHub%20CI/_build/latest?definitionId=13)
|
|

|
|
|
|

|
|

|
|
|
|
## Contributing
|
|
[](https://github.com/xfox111/SimpleOTP/issues)
|
|
[](https://github.com/xfox111/SimpleOTP)
|
|
|
|
There are many ways in which you can participate in the project, for example:
|
|
- [Submit bugs and feature requests](https://github.com/xfox111/SimpleOTP/issues), and help us verify as they are checked in
|
|
- Review [source code changes](https://github.com/xfox111/SimpleOTP/pulls)
|
|
- Review documentation and make pull requests for anything from typos to new content
|
|
|
|
If you are interested in fixing issues and contributing directly to the code base, please see the [Contribution Guidelines](https://github.com/XFox111/SimpleOTP/blob/master/CONTRIBUTING.md), which covers the following:
|
|
- [How to deploy the extension on your browser](https://github.com/XFox111/SimpleOTP/blob/master/CONTRIBUTING.md#deploy-test-version-on-your-browser)
|
|
- [The development workflow](https://github.com/XFox111/SimpleOTP/blob/master/CONTRIBUTING.md#development-workflow), including debugging and running tests
|
|
- [Coding guidelines](https://github.com/XFox111/SimpleOTP/blob/master/CONTRIBUTING.md#coding-guidelines)
|
|
- [Submitting pull requests](https://github.com/XFox111/SimpleOTP/blob/master/CONTRIBUTING.md#submitting-pull-requests)
|
|
- [Finding an issue to work on](https://github.com/XFox111/SimpleOTP/blob/master/CONTRIBUTING.md#finding-an-issue-to-work-on)
|
|
- [Contributing to translations](https://github.com/XFox111/SimpleOTP/blob/master/CONTRIBUTING.md#contributing-to-translations)
|
|
|
|
## Code of Conduct
|
|
This project has adopted the Contributor Covenant. For more information see the [Code of Conduct](https://github.com/XFox111/SimpleOTP/blob/master/CODE_OF_CONDUCT.md)
|
|
|
|
## Copyrights
|
|
> ©2021 Eugene Fox
|
|
|
|
Licensed under [MIT License](https://opensource.org/licenses/MIT)
|