Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) Aadhaar Paperless Offline e-kycOpens an encrypted .zip containing Aadhaar Paperless Offline e-KYC XML. Gets the XML and validates the digital signature. Then computes the hash for the mobile number and Email ID. For more information, see https://uidai.gov.in/ecosystem/authentication-devices-documents/about-aadhaar-paperless-offline-e-kyc.html
Use ChilkatAx-win32.pkg Procedure Test Handle hoZip Boolean iSuccess Variant vEntry Handle hoEntry String sSharePhrase Variant vBdXml Handle hoBdXml Handle hoDsig Handle hoCert Variant vPubKey Handle hoPubKey Boolean iBVerifyReferenceDigests Boolean iBVerified Handle hoCrypt String sStrToHash Variant vBdHash Handle hoBdHash Integer iNumTimesToHash Integer i String sTmpStr Handle hoXml String sM_hash String sTmpStr String sE_hash String sTemp1 Boolean bTemp1 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // Open the .zip containing the Aadhaar Paperless Offline e-KYC XML. // The .zip is encrypted using the "Share Phrase". Get Create (RefClass(cComChilkatZip)) To hoZip If (Not(IsComObjectCreated(hoZip))) Begin Send CreateComObject of hoZip End Get ComOpenZip Of hoZip "qa_data/xml_dsig/offline_paperless_kyc.zip" To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoZip To sTemp1 Showln sTemp1 Procedure_Return End // The .zip should contain 1 XML file. Get ComGetEntryByIndex Of hoZip 0 To vEntry If (IsComObject(vEntry)) Begin Get Create (RefClass(cComChilkatZipEntry)) To hoEntry Set pvComObject Of hoEntry To vEntry End Get ComLastMethodSuccess Of hoZip To bTemp1 If (bTemp1 = False) Begin Get ComLastErrorText Of hoZip To sTemp1 Showln sTemp1 Procedure_Return End // To get the contents, we need to specify the Share Phrase. Move "Lock@487" To sSharePhrase Set ComDecryptPassword Of hoZip To sSharePhrase Get Create (RefClass(cComChilkatBinData)) To hoBdXml If (Not(IsComObjectCreated(hoBdXml))) Begin Send CreateComObject of hoBdXml End // The XML file will be unzipped into the bdXml object. Get pvComObject of hoBdXml to vBdXml Get ComUnzipToBd Of hoEntry vBdXml To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoEntry To sTemp1 Showln sTemp1 Send Destroy of hoEntry Procedure_Return End Send Destroy of hoEntry // First verify the XML digital signature. Get Create (RefClass(cComChilkatXmlDSig)) To hoDsig If (Not(IsComObjectCreated(hoDsig))) Begin Send CreateComObject of hoDsig End Get pvComObject of hoBdXml to vBdXml Get ComLoadSignatureBd Of hoDsig vBdXml To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoDsig To sTemp1 Showln sTemp1 Procedure_Return End // The UIDAI XML signature does not contain the KeyInfo, so we must load the uidai certificate // and indicate that its public key is to be used for verifying the signature. Get Create (RefClass(cComChilkatCert)) To hoCert If (Not(IsComObjectCreated(hoCert))) Begin Send CreateComObject of hoCert End Get ComLoadFromFile Of hoCert "qa_data/xml_dsig/uidai_auth_sign_prod_2023.cer" To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoCert To sTemp1 Showln sTemp1 Procedure_Return End // Get the certificate's public key. Get ComExportPublicKey Of hoCert To vPubKey If (IsComObject(vPubKey)) Begin Get Create (RefClass(cComChilkatPublicKey)) To hoPubKey Set pvComObject Of hoPubKey To vPubKey End Get ComSetPublicKey Of hoDsig vPubKey To iSuccess Send Destroy of hoPubKey // The XML in this example contains only 1 signature. Move True To iBVerifyReferenceDigests Get ComVerifySignature Of hoDsig iBVerifyReferenceDigests To iBVerified If (iBVerified = False) Begin Get ComLastErrorText Of hoDsig To sTemp1 Showln sTemp1 Showln "The signature was not valid." Procedure_Return End Showln "The XML digital signature is valid." // Let's compute the hash for the Mobile Number. // Hashing logic for Mobile Number : // Sha256(Sha256(Mobile+SharePhrase))*number of times last digit of Aadhaar number // (Ref ID field contains last 4 digits). // // Example : // Mobile: 1234567890 // Aadhaar Number:XXXX XXXX 3632 // Passcode : Lock@487 // Hash: Sha256(Sha256(1234567890Lock@487))*2 // In case of Aadhaar number ends with Zero we will hashed one time. Get Create (RefClass(cComChilkatCrypt2)) To hoCrypt If (Not(IsComObjectCreated(hoCrypt))) Begin Send CreateComObject of hoCrypt End Set ComHashAlgorithm Of hoCrypt To "sha256" Set ComEncodingMode Of hoCrypt To "hexlower" Move "1234567890Lock@487" To sStrToHash Get Create (RefClass(cComChilkatBinData)) To hoBdHash If (Not(IsComObjectCreated(hoBdHash))) Begin Send CreateComObject of hoBdHash End Get ComAppendString Of hoBdHash sStrToHash "utf-8" To iSuccess // Hash a number of times equal to the last digit of your Aadhaar number. // If the Aadhaar number ends with 0, then hash one time. // For this example, we'll just set the number of times to hash // for the case where an Aadhaar number ends in "9" Move 9 To iNumTimesToHash For i From 1 To iNumTimesToHash Get pvComObject of hoBdHash to vBdHash Get ComHashBdENC Of hoCrypt vBdHash To sTmpStr Get ComClear Of hoBdHash To iSuccess Get ComAppendString Of hoBdHash sTmpStr "utf-8" To iSuccess Loop Get ComGetString Of hoBdHash "utf-8" To sTemp1 Showln "Computed Mobile hash = " sTemp1 // Let's get the mobile hash stored in the XML and compare it with our computed hash. Get Create (RefClass(cComChilkatXml)) To hoXml If (Not(IsComObjectCreated(hoXml))) Begin Send CreateComObject of hoXml End Get pvComObject of hoBdXml to vBdXml Get ComLoadBd Of hoXml vBdXml True To iSuccess Get ComChilkatPath Of hoXml "UidData|Poi|(m)" To sM_hash Showln "Stored Mobile hash = " sM_hash // Now do the same thing for the email hash: Move "abc@gm.comLock@487" To sStrToHash Get ComClear Of hoBdHash To iSuccess Get ComAppendString Of hoBdHash sStrToHash "utf-8" To iSuccess For i From 1 To iNumTimesToHash Get pvComObject of hoBdHash to vBdHash Get ComHashBdENC Of hoCrypt vBdHash To sTmpStr Get ComClear Of hoBdHash To iSuccess Get ComAppendString Of hoBdHash sTmpStr "utf-8" To iSuccess Loop Get ComGetString Of hoBdHash "utf-8" To sTemp1 Showln "Computed Email hash = " sTemp1 Get ComChilkatPath Of hoXml "UidData|Poi|(e)" To sE_hash Showln "Stored Email hash = " sE_hash End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.