TotpAuthSharp 1.0.3

dotnet add package TotpAuthSharp --version 1.0.3                
NuGet\Install-Package TotpAuthSharp -Version 1.0.3                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="TotpAuthSharp" Version="1.0.3" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add TotpAuthSharp --version 1.0.3                
#r "nuget: TotpAuthSharp, 1.0.3"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install TotpAuthSharp as a Cake Addin
#addin nuget:?package=TotpAuthSharp&version=1.0.3

// Install TotpAuthSharp as a Cake Tool
#tool nuget:?package=TotpAuthSharp&version=1.0.3                

TotpAuthSharp

.net8.0 library for generating and validating timed based one time password authentication.

Based On Library

https://github.com/damirkusar/AspNetCore.Totp AspNetCore.Totp

Getting Started

Installing the package

Open up an existing project, or create a new one. Add a reference to the TotpAuthSharp library.

.NET Core CLI

dotnet add package TotpAuthSharp

PowerShell (Nuget Package Manager)

Install-Package TotpAuthSharp

Manual entry (.csproj)

<Project Sdk="Microsoft.NET.Sdk.Web">
    ...
    <ItemGroup>
        <PackageReference Include="TotpAuthSharp" Version="x.x.x" />
    </ItemGroup>
</Project>

Public Namespace Structure

TotpAuthSharp

  • CLASS TotpGenerator

  • CLASS TotpValidator

  • CLASS TotpSetupGenerator

  • TotpAuthSharp.Helper

  • CLASS Base32

  • CLASS Guard

  • CLASS QrCodeGenerator

  • CLASS TotpHasher

  • CLASS UrlEncoder

TotpAuthSharp.Models

  • CLASS TotpSetup
  • CLASS QrCodeImage

TotpAuthSharp.Interface

  • INTERFACE IQrCodeImage
  • INTERFACE ITotpGenerator
  • INTERFACE ITotpSetup
  • INTERFACE ITotpSetupGenerator
  • INTERFACE ITotpValidator

Using the package

Class: TotpGenerator

Constructor Parameters: None

Description: Used for generating the TOTP code, using a super secret code for your app.

Example

var generator = new TotpGenerator();
var code = generator.Generate(_userIdentity.AccountSecretKey);

TotpValidator

Constructor Parameters: TotpGenerator

Description: Generates a new token and compares against a given TOTP code to check validity.

Example

var generator = new TotpGenerator();
var validator = new TotpValidator(generator);
var code = validator.Validate(_userIdentity.AccountSecretKey, code);

TotpSetupGenerator

Constructor Parameters: None

Description: Used to fetch a QR code image with SkiaSharp and return it as a TotpSetup class containing the image.

Example

var qrGenerator = new TotpSetupGenerator();
var qrCode = qrGenerator.Generate(
	issuer: "TestCo",
	accountIdentity: _userIdentity.Id.ToString(),
	accountSecretKey: _userIdentity.AccountSecretKey
);

Example Implementation

using System;
using TotpAuthSharp;
using TotpAuthSharp.Interface;
using Microsoft.AspNetCore.Mvc;

namespace AuthApi.Controllers
{
    internal struct UserIdentity
    {
        public int Id { get; set; }
        public string AccountSecretKey { get; set; }
    }
    
    internal static class AuthProvider
    {
        public static UserIdentity GetUserIdentity()
        {
            return new UserIdentity()
            {
                Id = new Random().Next(0, 999),
                AccountSecretKey = Guid.NewGuid().ToString()
            };
        }
    }
    
    [ApiController]
    [Route("[controller]")]
    public class TotpController : ControllerBase
    {
        private readonly ITotpGenerator _totpGenerator;
        private readonly ITotpSetupGenerator _totpQrGenerator;
        private readonly ITotpValidator _totpValidator;
        private readonly UserIdentity _userIdentity;

        public TotpController()
        {
            _totpGenerator = new TotpGenerator();
            _totpValidator = new TotpValidator(_totpGenerator);
            _totpQrGenerator = new TotpSetupGenerator();
            _userIdentity = AuthProvider.GetUserIdentity();
        }

        [HttpGet("code")]
        public int GetCode()
        {
            return _totpGenerator.Generate(_userIdentity.AccountSecretKey);
        }

        [HttpGet("qr-code")]
        public IActionResult GetQr()
        {
            var qrCode = _totpQrGenerator.Generate(
                "TestCo",
                _userIdentity.Id.ToString(),
                _userIdentity.AccountSecretKey
            );
            return File(qrCode.QrCodeImageBytes, "image/png");
        }

        [HttpPost("validate")]
        public bool Validate([FromBody] int code)
        {
            return _totpValidator.Validate(_userIdentity.AccountSecretKey, code);
        }
    }
}

License

MIT License

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.3 214 6/12/2024
1.0.2 100 6/11/2024
1.0.1 100 6/11/2024
1.0.0 106 6/11/2024