Work with certificate

175 views
Skip to first unread message

fernando moreno

unread,
May 31, 2021, 7:02:39 AMMay 31
to
Good evening:

Does anyone know any library or sample to work with certificates? For example: extract signature, date of expiration and provide.

Thanks for your atention

Jamal

unread,
Jun 3, 2021, 1:53:16 PMJun 3
to
Hello Fernando!

Chilkatsoft has free (no licene required) ActiveX and .NET versions of
their components: Cert, CertChain and CertStore which have methods and
properties to handle certificates.

https://www.chilkatsoft.com/downloads.asp

Jamal


Check the docs at:

fernando moreno

unread,
Jun 9, 2021, 7:24:37 AMJun 9
to
Thanks you for your help.

Have you worked with these classes?

I have problems with the Init.

METHOD bGenerar2( ) CLASS Certificados
local cTexto as string
local nElemento :=1 as int
local numCerts :=0 as int
local cert :='' as string
local osCert as Chilkat_9_5_0_CertStore_1
local lReadOnly :=true as logic
local success :=true as logic

oscert:=Chilkat_9_5_0_CertStore_1{}
success := oscert:OpenCurrentUserStore(lReadOnly)
If !success
AVISOS(self,"error",oscert:LastErrorText,true)
return
EndIf
cTexto:=''
numCerts:= oscert:NumCertificates_
for nElemento:=i to numCerts
cert := oscert:GetCertificate(i)
cTexto :=oscert:subjetDN+" - "+oscert:SubjectE+crlf
next

self:oDCmCert:Value :=cTexto
return true

Jamal

unread,
Jun 10, 2021, 4:04:38 AMJun 10
to
I did not work with them (until just now), but you have quite a few
errors that you must clear in your declarations and loop. I suggest your
read the ActiveX documentation carefully.

For example:
1. OpenCurrentUserStore() returns a long not a logic.
2. The the loop must start at 0 to numCerts - 1.
3. GetCertificate() returns a ChilkatCert not a string!

I created automation server classes for: IChilkatCertStore and IChilkatCert

Here is a working sample in VO 2.8 - 2838:

METHOD GetCertificates( ) CLASS TestDlg

local cTexto := "" as string
local i as int
local numCerts := 0 as int

local lReadOnly := true as logic
local ok as long

local oCertStore as IChilkatCertStore
local oChilkatCert as IChilkatCert

oChilkatCert := IChilkatCert{}

oCertStore := IChilkatCertStore{}

ok := oCertStore:OpenCurrentUserStore(lReadOnly)

If ok == 0 // error
InfoBox{self,"error", oCertStore:LastErrorText}:show()
oCertStore := null_object
return self
else

numCerts := oCertStore:NumCertificates

for i := 0 to numCerts - 1

oChilkatCert := oCertStore:GetCertificate(i)

if oChilkatCert != null_object

cTexto += AsString(oChilkatCert:SubjectDN) +" - "+
AsString(oChilkatCert:SubjectE) + crlf
else
? "oChilkatCert Error: " + oChilkatCert:LastErrorText
endif
next

self:oDCmCert:Value :=cTexto



endif

oChilkatCert := null_object
oCertStore := null_object


RETURN self

Note: if you get a class mismatch on oCertStore:GetCertificate(i),
either make sure you uncheck Class Checking option in Compiler options
or change the GetCertificate() method to return IChilkatCert class object:

METHOD GetCertificate(;
index; // AS LONG
) CLASS IChilkatCertStore

LOCAL oMethod AS cOleMethod
LOCAL uRetValue AS USUAL

oMethod := cOleMethod{}
oMethod:symName := String2Symbol("GetCertificate")
oMethod:iMemberid := 116
oMethod:wInvokeKind := INVOKE_METHOD
oMethod:nParams := 1
oMethod:lNamedArgs := TRUE
oMethod:cParamTypes := VTS_I4
oMethod:bRetType := VT_DISPATCH

uRetValue := SELF:__Invoke(oMethod, DWORD(_BP+16),PCount())
// To use a pre-defined class here,
// change OLEAutoObject to desired class name
uRetValue := iif( uRetValue:pInterface != null_ptr ,
IChilkatCert{uRetValue}, null_object)


RETURN (uRetValue)





Jamal

fernando moreno

unread,
Jun 17, 2021, 7:04:12 AMJun 17
to
Thank you, but it doesn't work well.

It shows an error in the init:

***********************ERROR********************************
Visual Objects (Version 2.8. Build 0.2816), Version 2.8
07/08/2020 19:30:09
Application: C:\QR\Application.DBG

Error message:
--------------
Error Code: Invalid argument type.
Subsystem: GUI Classes
Function: CONTROL:INIT
Argument: NIL
Argument Number: 1
Description: Invalid argument type.
CallStack:
APP:START (Line:6)
START (Line:6)

Error Object created:
--------------------
SubSystem :GUI Classes
SubCode :0
GenCode :Waiting...
OsCode :0
ArgType :NIL
FuncPtr :0x00000000
ArgNum :1
FuncSym :CONTROL:INIT
Severity :0
CanDefault :.T.
CanRetry :.F.
CanSubstitute :.F.
Operation :
Description :Invalid argument type.
FileName :
Tries :1
FileHandle :0
SubCodeText :
Arg :NIL
ArgTypeReq :NIL
MaxSize :0
SubstituteType :NIL
CallFuncSym :
--------------------

Could we please talk in private?

Jamal

unread,
Jun 17, 2021, 11:42:14 AMJun 17
to
Privately?

I offer VO consulting services if you are interested. You may contact me
at vodotnet AT gmail.com for details.

Jamal
Reply all
Reply to author
Forward
0 new messages