Sample code for 30+ languages & platforms
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

Lua
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)