DataFlex
DataFlex
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 DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoDt
String sTimeCreated
Handle hoSbToken
Variant vCert
Handle hoCert
Handle hoRsa
String sSignature
String sToken
String sTemp1
Boolean bTemp1
Move False To iSuccess
// 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("=", "");
// }
Get Create (RefClass(cComCkDateTime)) To hoDt
If (Not(IsComObjectCreated(hoDt))) Begin
Send CreateComObject of hoDt
End
Get ComSetFromCurrentSystemTime Of hoDt To iSuccess
Get ComGetAsTimestamp Of hoDt True To sTimeCreated
// Such as 2019-04-01T19:35:44-05:00
Showln sTimeCreated
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbToken
If (Not(IsComObjectCreated(hoSbToken))) Begin
Send CreateComObject of hoSbToken
End
Get ComAppend Of hoSbToken "validityTimeMinutes:=10.0;timeCreated:=" To iSuccess
Get ComAppend Of hoSbToken sTimeCreated To iSuccess
Get Create (RefClass(cComChilkatCert)) To hoCert
If (Not(IsComObjectCreated(hoCert))) Begin
Send CreateComObject of hoCert
End
Get ComLoadPfxFile Of hoCert "Some path to p12/p12file_name.p12" "Password_for_p12" To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoCert To sTemp1
Showln sTemp1
Procedure_Return
End
Get Create (RefClass(cComChilkatRsa)) To hoRsa
If (Not(IsComObjectCreated(hoRsa))) Begin
Send CreateComObject of hoRsa
End
Get pvComObject of hoCert to vCert
Get ComSetX509Cert Of hoRsa vCert True To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoRsa To sTemp1
Showln sTemp1
Procedure_Return
End
Set ComEncodingMode Of hoRsa To "base64url"
Get ComGetAsString Of hoSbToken To sTemp1
Get ComSignStringENC Of hoRsa sTemp1 "sha256" To sSignature
Get ComLastMethodSuccess Of hoRsa To bTemp1
If (bTemp1 = False) Begin
Get ComLastErrorText Of hoRsa To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComAppend Of hoSbToken ";signature:=" To iSuccess
Get ComAppend Of hoSbToken sSignature To iSuccess
// Base64URL encode the result
Get ComEncode Of hoSbToken "base64url" "utf-8" To iSuccess
Get ComGetAsString Of hoSbToken To sToken
Showln sToken
End_Procedure