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
(Go) 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
// 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". zip := chilkat.NewZip() success := zip.OpenZip("qa_data/xml_dsig/offline_paperless_kyc.zip") if success == false { fmt.Println(zip.LastErrorText()) zip.DisposeZip() return } // The .zip should contain 1 XML file. entry := zip.GetEntryByIndex(0) if zip.LastMethodSuccess() == false { fmt.Println(zip.LastErrorText()) zip.DisposeZip() return } // To get the contents, we need to specify the Share Phrase. sharePhrase := "Lock@487" zip.SetDecryptPassword(sharePhrase) bdXml := chilkat.NewBinData() // The XML file will be unzipped into the bdXml object. success = entry.UnzipToBd(bdXml) if success == false { fmt.Println(entry.LastErrorText()) entry.DisposeZipEntry() zip.DisposeZip() bdXml.DisposeBinData() return } entry.DisposeZipEntry() // First verify the XML digital signature. dsig := chilkat.NewXmlDSig() success = dsig.LoadSignatureBd(bdXml) if success != true { fmt.Println(dsig.LastErrorText()) zip.DisposeZip() bdXml.DisposeBinData() dsig.DisposeXmlDSig() return } // 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. cert := chilkat.NewCert() success = cert.LoadFromFile("qa_data/xml_dsig/uidai_auth_sign_prod_2023.cer") if success != true { fmt.Println(cert.LastErrorText()) zip.DisposeZip() bdXml.DisposeBinData() dsig.DisposeXmlDSig() cert.DisposeCert() return } // Get the certificate's public key. pubKey := cert.ExportPublicKey() success = dsig.SetPublicKey(pubKey) pubKey.DisposePublicKey() // The XML in this example contains only 1 signature. bVerifyReferenceDigests := true bVerified := dsig.VerifySignature(bVerifyReferenceDigests) if bVerified == false { fmt.Println(dsig.LastErrorText()) fmt.Println("The signature was not valid.") zip.DisposeZip() bdXml.DisposeBinData() dsig.DisposeXmlDSig() cert.DisposeCert() return } fmt.Println("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. crypt := chilkat.NewCrypt2() crypt.SetHashAlgorithm("sha256") crypt.SetEncodingMode("hexlower") strToHash := "1234567890Lock@487" bdHash := chilkat.NewBinData() success = bdHash.AppendString(strToHash,"utf-8") // 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" numTimesToHash := 9 var i int for i = 1; i <= numTimesToHash; i++ { tmpStr := crypt.HashBdENC(bdHash) bdHash.Clear() bdHash.AppendString(*tmpStr,"utf-8") } fmt.Println("Computed Mobile hash = ", *bdHash.GetString("utf-8")) // Let's get the mobile hash stored in the XML and compare it with our computed hash. xml := chilkat.NewXml() success = xml.LoadBd(bdXml,true) m_hash := xml.ChilkatPath("UidData|Poi|(m)") fmt.Println("Stored Mobile hash = ", *m_hash) // Now do the same thing for the email hash: strToHash = "abc@gm.comLock@487" bdHash.Clear() success = bdHash.AppendString(strToHash,"utf-8") for i = 1; i <= numTimesToHash; i++ { tmpStr := crypt.HashBdENC(bdHash) bdHash.Clear() bdHash.AppendString(*tmpStr,"utf-8") } fmt.Println("Computed Email hash = ", *bdHash.GetString("utf-8")) e_hash := xml.ChilkatPath("UidData|Poi|(e)") fmt.Println("Stored Email hash = ", *e_hash) zip.DisposeZip() bdXml.DisposeBinData() dsig.DisposeXmlDSig() cert.DisposeCert() crypt.DisposeCrypt2() bdHash.DisposeBinData() xml.DisposeXml() |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.