Lua
Lua
Duplicate Java Secure Token Creation
See more RSA Examples
Demonstrates how to duplicate some Java code that creates an RSA signature to create a base64 token.Chilkat Lua Downloads
local chilkat = require("chilkat")
-- This requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
-- This example duplicates the following Java code:
-- public X509Certificate2 cert = new X509Certificate2(@"Some path to p12/p12file_name.p12","Password_for_p12");
--
-- public string GenerateSignToken(double timeValidityMin){
-- string equalsSign = ":=";
-- string timeCreated = DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz");
-- string tokenTimeInfo = "validityTimeMinutes" + equalsSign + timeValidityMin + ";"+"timeCreated" + equalsSign + timeCreated;
-- string signature = SignData(tokenTimeInfo);
-- string secureToken = tokenTimeInfo + ";" + "signature" + equalsSign + signature;
-- return Base64UrlEncode(secureToken);
-- }
--
-- public string SignData(string stringToSign){
-- byte[] dataToSign = Encoding.UTF8.GetBytes(stringToSign);
-- RSACryptoServiceProvider privKey = (RSACryptoServiceProvider)cert.PrivateKey;
-- CspKeyContainerInfo containerInfo = new RSACryptoServiceProvider().CspKeyContainerInfo;
-- CspParameters cspparams = new CspParameters(containerInfo.ProviderType, containerInfo.ProviderName, privKey.CspKeyContainerInfo.KeyContainerName);
-- privKey = new RSACryptoServiceProvider(cspparams);
-- string id = CryptoConfig.MapNameToOID("SHA256");
-- byte[] sign = privKey.SignData(dataToSign, id);
-- bool res = privKey.VerifyData(dataToSign, id, sign);
-- return Convert.ToBase64String(sign).Replace('+', '-').Replace('/', '_').Replace("=", "");
-- }
--
-- private static string Base64UrlEncode(string input){
-- var inputBytes = Encoding.UTF8.GetBytes(input);
-- return Convert.ToBase64String(inputBytes).Replace('+', '-').Replace('/', '_').Replace("=", "");
-- }
local dt = chilkat.DateTime.new()
dt:set_from_current_system_time()
local timeCreated = dt:get_as_timestamp(true)
-- Such as 2019-04-01T19:35:44-05:00
print(timeCreated)
local sbToken = chilkat.StringBuilder.new()
sbToken:append("validityTimeMinutes:=10.0;timeCreated:=")
sbToken:append(timeCreated)
local cert = chilkat.Cert.new()
local success = cert:load_pfx_file("Some path to p12/p12file_name.p12", "Password_for_p12")
if not success then
print(cert.last_error_text)
return
end
local rsa = chilkat.Rsa.new()
success = rsa:set_x509_cert(cert, true)
if not success then
print(rsa.last_error_text)
return
end
rsa.encoding_mode = "base64url"
local signature = rsa:sign_string_enc(sbToken:get_as_string(), "sha256")
if not rsa.last_method_success then
print(rsa.last_error_text)
return
end
sbToken:append(";signature:=")
sbToken:append(signature)
-- Base64URL encode the result
sbToken:encode("base64url", "utf-8")
local token = sbToken:get_as_string()
print(token)