dotnet --version
# => 6.0.101
dotnet add package NSec.Cryptographydotnet run
# => Dataset: {"test":1}
# Valid: True| using System; | |
| using System.Text; | |
| using NSec.Cryptography; | |
| public class Program | |
| { | |
| private const string licenseKey = "key/eyJ0ZXN0IjoxfQ==._f34UAAtNKM8TXGLlnblBGCLSy22Oa_gjp4jn0CpvEuwQ2gAcH0IntFKwtbyV5iWnH9_x8l0R144oHp2_GviAw=="; | |
| private const string publicKeyHex = "e8601e48b69383ba520245fd07971e983d06d22c4257cfd82304601479cee788"; | |
| public static void Main() | |
| { | |
| var algorithm = SignatureAlgorithm.Ed25519; | |
| // Read signature | |
| var licenseStringTokens = licenseKey.Split('.'); | |
| var encodedSignature = convertBase64UrlString(licenseStringTokens[1]); | |
| var signatureBytes = Convert.FromBase64String(encodedSignature); | |
| // Read data | |
| var signingData = licenseStringTokens[0].Split('/'); | |
| var signingDataBytes = Encoding.UTF8.GetBytes($"key/{signingData[1]}"); | |
| // Read public key | |
| var publicKeyBytes = Convert.FromHexString(publicKeyHex); | |
| var publicKey = PublicKey.Import(algorithm, publicKeyBytes, KeyBlobFormat.RawPublicKey); | |
| // Verify | |
| var valid = algorithm.Verify(publicKey, signingDataBytes, signatureBytes); | |
| if (valid) | |
| { | |
| var encodedDataset = convertBase64UrlString(signingData[1]); | |
| var decodedDataset = Convert.FromBase64String(encodedDataset); | |
| var dataset = Encoding.UTF8.GetString(decodedDataset); | |
| Console.WriteLine($"Dataset: {dataset}"); | |
| } | |
| Console.WriteLine($"Valid: {valid}"); | |
| } | |
| private static string convertBase64UrlString(string s) | |
| { | |
| return s.Replace("-", "+").Replace("_", "/"); | |
| } | |
| } |
Thank you!. This gist helped me solve a problem that I had been banging my head on for a day :)