Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Work with certificate

227 views
Skip to first unread message

fernando moreno

unread,
May 31, 2021, 7:02:39 AM5/31/21
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 PM6/3/21
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 AM6/9/21
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 AM6/10/21
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 AM6/17/21
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 AM6/17/21
to
Privately?

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

Jamal
0 new messages