zatca 0.1.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (207) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +11 -2
  3. data/bin/console +0 -0
  4. data/bin/setup +0 -0
  5. data/einvoicing-sdk/Apps/fatoora +12 -0
  6. data/einvoicing-sdk/Apps/fatoora.bat +16 -0
  7. data/einvoicing-sdk/Apps/global.json +1 -0
  8. data/einvoicing-sdk/Apps/jq.exe +0 -0
  9. data/einvoicing-sdk/Apps/zatca-einvoicing-sdk-238-R3.2.7.jar +0 -0
  10. data/einvoicing-sdk/Configuration/config.json +11 -0
  11. data/einvoicing-sdk/Configuration/defaults.json +11 -0
  12. data/einvoicing-sdk/Configuration/jq.exe +0 -0
  13. data/einvoicing-sdk/Configuration/usage.txt +16 -0
  14. data/einvoicing-sdk/Data/Certificates/cert.pem +1 -0
  15. data/einvoicing-sdk/Data/Certificates/ec-secp256k1-priv-key.pem +1 -0
  16. data/einvoicing-sdk/Data/Input/csr-config-example-AR-VAT-Group.properties +9 -0
  17. data/einvoicing-sdk/Data/Input/csr-config-example-AR.properties +9 -0
  18. data/einvoicing-sdk/Data/Input/csr-config-example-EN-VAT-group.properties +9 -0
  19. data/einvoicing-sdk/Data/Input/csr-config-example-EN.properties +9 -0
  20. data/einvoicing-sdk/Data/Input/csr-config-template.properties +9 -0
  21. data/einvoicing-sdk/Data/PIH/pih.txt +1 -0
  22. data/einvoicing-sdk/Data/Rules/schematrons/20210819_ZATCA_E-invoice_Validation_Rules.xsl +2844 -0
  23. data/einvoicing-sdk/Data/Rules/schematrons/CEN-EN16931-UBL.xsl +1973 -0
  24. data/einvoicing-sdk/Data/Samples/PDF-A3/Simplified Debit Note.pdf +0 -0
  25. data/einvoicing-sdk/Data/Samples/PDF-A3/Standard Credit Note.pdf +0 -0
  26. data/einvoicing-sdk/Data/Samples/PDF-A3/Standard Debit Note.pdf +0 -0
  27. data/einvoicing-sdk/Data/Samples/PDF-A3/Standard Invoice.pdf +0 -0
  28. data/einvoicing-sdk/Data/Samples/PDF-A3/Tax_Invoice_USD.pdf +0 -0
  29. data/einvoicing-sdk/Data/Samples/Simplified/Credit/Simplified_Credit_Note.xml +300 -0
  30. data/einvoicing-sdk/Data/Samples/Simplified/Credit/Simplified_Credit_Note_Error.xml +225 -0
  31. data/einvoicing-sdk/Data/Samples/Simplified/Debit/Simplified_Debit_Note.xml +211 -0
  32. data/einvoicing-sdk/Data/Samples/Simplified/Debit/Simplified_Debit_Note_Error.xml +226 -0
  33. data/einvoicing-sdk/Data/Samples/Simplified/Invoice/Additional_Simplified_Invoices/Out_Of_Scope_Simplified_Invoice.xml +207 -0
  34. data/einvoicing-sdk/Data/Samples/Simplified/Invoice/Additional_Simplified_Invoices/Simplified_Invoice_USD.xml +246 -0
  35. data/einvoicing-sdk/Data/Samples/Simplified/Invoice/Simplified_Invoice.xml +246 -0
  36. data/einvoicing-sdk/Data/Samples/Simplified/Invoice/Simplified_Invoice_Error.xml +228 -0
  37. data/einvoicing-sdk/Data/Samples/Standard/Credit/Standard_Credit_Note.xml +227 -0
  38. data/einvoicing-sdk/Data/Samples/Standard/Credit/Standard_Credit_Note_Error.xml +224 -0
  39. data/einvoicing-sdk/Data/Samples/Standard/Debit/Standard_Debit_Note.xml +227 -0
  40. data/einvoicing-sdk/Data/Samples/Standard/Debit/Standard_Debit_Note_Error.xml +226 -0
  41. data/einvoicing-sdk/Data/Samples/Standard/Invoice/Additional_Standard_Invoices/Exempt_Standard_Invoice.xml +227 -0
  42. data/einvoicing-sdk/Data/Samples/Standard/Invoice/Additional_Standard_Invoices/Standard_Invoice_USD.xml +227 -0
  43. data/einvoicing-sdk/Data/Samples/Standard/Invoice/Additional_Standard_Invoices/Zero_Rate_Standard_Invoice.xml +227 -0
  44. data/einvoicing-sdk/Data/Samples/Standard/Invoice/Sample Invoice[Advance Payements] - 1.xml +294 -0
  45. data/einvoicing-sdk/Data/Samples/Standard/Invoice/Sample Invoice[Advance Payements] - 2.xml +432 -0
  46. data/einvoicing-sdk/Data/Samples/Standard/Invoice/Standard_Invoice.xml +222 -0
  47. data/einvoicing-sdk/Data/Samples/Standard/Invoice/Standard_Invoice_Error.xml +228 -0
  48. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/CCTS_CCT_SchemaModule-2.1.xsd +731 -0
  49. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/UBL-CommonAggregateComponents-2.1.xsd +44365 -0
  50. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/UBL-CommonBasicComponents-2.1.xsd +5389 -0
  51. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/UBL-CommonExtensionComponents-2.1.xsd +223 -0
  52. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/UBL-CommonSignatureComponents-2.1.xsd +101 -0
  53. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/UBL-CoreComponentParameters-2.1.xsd +63 -0
  54. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/UBL-ExtensionContentDataType-2.1.xsd +89 -0
  55. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/UBL-QualifiedDataTypes-2.1.xsd +69 -0
  56. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/UBL-SignatureAggregateComponents-2.1.xsd +138 -0
  57. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/UBL-SignatureBasicComponents-2.1.xsd +78 -0
  58. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/UBL-UnqualifiedDataTypes-2.1.xsd +553 -0
  59. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/UBL-XAdESv132-2.1.xsd +476 -0
  60. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/UBL-XAdESv141-2.1.xsd +25 -0
  61. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/common/UBL-xmldsig-core-schema-2.1.xsd +330 -0
  62. data/einvoicing-sdk/Data/Schemas/xsds/UBL2.1/xsd/maindoc/UBL-Invoice-2.1.xsd +1002 -0
  63. data/einvoicing-sdk/Dockerfile +26 -0
  64. data/einvoicing-sdk/LICENSE.txt +56 -0
  65. data/einvoicing-sdk/Lib/.Net/DLL/BouncyCastle.Crypto.dll +0 -0
  66. data/einvoicing-sdk/Lib/.Net/DLL/IKVM.OpenJDK.Core.dll +0 -0
  67. data/einvoicing-sdk/Lib/.Net/DLL/IKVM.OpenJDK.Text.dll +0 -0
  68. data/einvoicing-sdk/Lib/.Net/DLL/IKVM.OpenJDK.Util.dll +0 -0
  69. data/einvoicing-sdk/Lib/.Net/DLL/IKVM.OpenJDK.XML.API.dll +0 -0
  70. data/einvoicing-sdk/Lib/.Net/DLL/IKVM.Runtime.dll +0 -0
  71. data/einvoicing-sdk/Lib/.Net/DLL/SDKNETFrameWorkLib.dll +0 -0
  72. data/einvoicing-sdk/Lib/.Net/DLL/SDKNETFrameWorkLib.dll.config +43 -0
  73. data/einvoicing-sdk/Lib/.Net/DLL/SDKNETFrameWorkLib.pdb +0 -0
  74. data/einvoicing-sdk/Lib/.Net/DLL/System.Net.Http.dll +0 -0
  75. data/einvoicing-sdk/Lib/.Net/DLL/saxon-he-10.8.dll +0 -0
  76. data/einvoicing-sdk/Lib/.Net/DLL/saxon-he-api-10.8.dll +0 -0
  77. data/einvoicing-sdk/Lib/.Net/DLL/saxon-he-api-10.8.xml +11759 -0
  78. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/.vs/SDKNETFrameworkTest/FileContentIndex/3f204b7a-faba-42d8-8288-8b6fe516555c.vsidx +0 -0
  79. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/.vs/SDKNETFrameworkTest/FileContentIndex/f95b6f91-c110-4b7a-bb49-3fc6bde85b13.vsidx +0 -0
  80. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/.vs/SDKNETFrameworkTest/FileContentIndex/read.lock +0 -0
  81. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/.vs/SDKNETFrameworkTest/v17/.suo +0 -0
  82. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/App.config +14 -0
  83. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/BouncyCastle.Crypto.dll +0 -0
  84. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/CSRGeneratorOpenSSL.cs +58 -0
  85. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/IKVM.OpenJDK.Core.dll +0 -0
  86. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/IKVM.OpenJDK.Text.dll +0 -0
  87. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/IKVM.OpenJDK.Util.dll +0 -0
  88. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/IKVM.OpenJDK.XML.API.dll +0 -0
  89. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/IKVM.Runtime.dll +0 -0
  90. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/Program.cs +194 -0
  91. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/Properties/AssemblyInfo.cs +36 -0
  92. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/Readme.txt +8 -0
  93. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/SDKNETFrameWorkLib.dll +0 -0
  94. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/SDKNETFrameWorkLib.dll.config +43 -0
  95. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/SDKNETFrameWorkLib.pdb +0 -0
  96. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/SDKNETFrameworkTest.csproj +120 -0
  97. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/SDKNETFrameworkTest.exe +0 -0
  98. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/SDKNETFrameworkTest.exe.config +20 -0
  99. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/SDKNETFrameworkTest.pdb +0 -0
  100. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/SDKNETFrameworkTest.sln +25 -0
  101. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/BouncyCastle.Crypto.dll +0 -0
  102. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/Data/certificate.txt +1 -0
  103. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/Data/pih.txt +1 -0
  104. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/Data/privateKey.txt +1 -0
  105. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/IKVM.OpenJDK.Core.dll +0 -0
  106. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/IKVM.OpenJDK.Text.dll +0 -0
  107. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/IKVM.OpenJDK.Util.dll +0 -0
  108. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/IKVM.OpenJDK.XML.API.dll +0 -0
  109. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/IKVM.Runtime.dll +0 -0
  110. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/SDKNETFrameWorkLib.dll +0 -0
  111. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/SDKNETFrameWorkLib.dll.config +43 -0
  112. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/SDKNETFrameWorkLib.pdb +0 -0
  113. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/SDKNETFrameworkTest.exe +0 -0
  114. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/SDKNETFrameworkTest.exe.config +20 -0
  115. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/SDKNETFrameworkTest.pdb +0 -0
  116. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/System.Net.Http.dll +0 -0
  117. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/saxon-he-10.8.dll +0 -0
  118. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/saxon-he-api-10.8.dll +0 -0
  119. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/bin/Debug/saxon-he-api-10.8.xml +11759 -0
  120. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.cs +4 -0
  121. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/obj/Debug/DesignTimeResolveAssemblyReferences.cache +0 -0
  122. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache +0 -0
  123. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/obj/Debug/SDKNETFrameworkTest.csproj.AssemblyReference.cache +0 -0
  124. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/obj/Debug/SDKNETFrameworkTest.csproj.CopyComplete +0 -0
  125. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/obj/Debug/SDKNETFrameworkTest.csproj.CoreCompileInputs.cache +1 -0
  126. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/obj/Debug/SDKNETFrameworkTest.csproj.FileListAbsolute.txt +22 -0
  127. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/obj/Debug/SDKNETFrameworkTest.csproj.SuggestedBindingRedirects.cache +0 -0
  128. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/obj/Debug/SDKNETFrameworkTest.exe +0 -0
  129. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/obj/Debug/SDKNETFrameworkTest.pdb +0 -0
  130. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/saxon-he-10.8.dll +0 -0
  131. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/saxon-he-api-10.8.dll +0 -0
  132. data/einvoicing-sdk/Lib/.Net/SDKNETFrameworkTest/saxon-he-api-10.8.xml +11759 -0
  133. data/einvoicing-sdk/Lib/.Net/Test/BouncyCastle.Crypto.dll +0 -0
  134. data/einvoicing-sdk/Lib/.Net/Test/IKVM.OpenJDK.Core.dll +0 -0
  135. data/einvoicing-sdk/Lib/.Net/Test/IKVM.OpenJDK.Text.dll +0 -0
  136. data/einvoicing-sdk/Lib/.Net/Test/IKVM.OpenJDK.Util.dll +0 -0
  137. data/einvoicing-sdk/Lib/.Net/Test/IKVM.OpenJDK.XML.API.dll +0 -0
  138. data/einvoicing-sdk/Lib/.Net/Test/IKVM.Runtime.dll +0 -0
  139. data/einvoicing-sdk/Lib/.Net/Test/SDKNETFrameWorkLib.dll +0 -0
  140. data/einvoicing-sdk/Lib/.Net/Test/SDKNETFrameWorkLib.dll.config +43 -0
  141. data/einvoicing-sdk/Lib/.Net/Test/SDKNETFrameWorkLib.pdb +0 -0
  142. data/einvoicing-sdk/Lib/.Net/Test/SDKNETFrameworkTest.exe +0 -0
  143. data/einvoicing-sdk/Lib/.Net/Test/SDKNETFrameworkTest.exe.config +20 -0
  144. data/einvoicing-sdk/Lib/.Net/Test/SDKNETFrameworkTest.pdb +0 -0
  145. data/einvoicing-sdk/Lib/.Net/Test/saxon-he-10.8.dll +0 -0
  146. data/einvoicing-sdk/Lib/.Net/Test/saxon-he-api-10.8.dll +0 -0
  147. data/einvoicing-sdk/Lib/.Net/Test/saxon-he-api-10.8.xml +11759 -0
  148. data/einvoicing-sdk/README.md +15 -0
  149. data/einvoicing-sdk/Readme/readme.docx +0 -0
  150. data/einvoicing-sdk/Readme/readme.md +674 -0
  151. data/einvoicing-sdk/Readme/readme.pdf +0 -0
  152. data/einvoicing-sdk/Readme/~$readme.docx +0 -0
  153. data/einvoicing-sdk/docker-compose.yml +12 -0
  154. data/einvoicing-sdk/install.bat +74 -0
  155. data/einvoicing-sdk/install.sh +74 -0
  156. data/lib/zatca/client.rb +173 -0
  157. data/lib/zatca/hacks.rb +45 -0
  158. data/lib/zatca/hashing.rb +18 -0
  159. data/lib/zatca/qr_code_extractor.rb +31 -0
  160. data/lib/zatca/qr_code_generator.rb +9 -2
  161. data/lib/zatca/signing/certificate.rb +78 -0
  162. data/lib/zatca/signing/csr.rb +220 -0
  163. data/lib/zatca/signing/ecdsa.rb +59 -0
  164. data/lib/zatca/tag.rb +18 -8
  165. data/lib/zatca/tags.rb +5 -1
  166. data/lib/zatca/tags_schema.rb +5 -5
  167. data/lib/zatca/types.rb +7 -0
  168. data/lib/zatca/ubl/base_component.rb +142 -0
  169. data/lib/zatca/ubl/builder.rb +166 -0
  170. data/lib/zatca/ubl/common_aggregate_components/allowance_charge.rb +64 -0
  171. data/lib/zatca/ubl/common_aggregate_components/classified_tax_category.rb +25 -0
  172. data/lib/zatca/ubl/common_aggregate_components/delivery.rb +27 -0
  173. data/lib/zatca/ubl/common_aggregate_components/invoice_line.rb +63 -0
  174. data/lib/zatca/ubl/common_aggregate_components/item.rb +21 -0
  175. data/lib/zatca/ubl/common_aggregate_components/legal_monetary_total.rb +59 -0
  176. data/lib/zatca/ubl/common_aggregate_components/party.rb +28 -0
  177. data/lib/zatca/ubl/common_aggregate_components/party_identification.rb +25 -0
  178. data/lib/zatca/ubl/common_aggregate_components/party_legal_entity.rb +19 -0
  179. data/lib/zatca/ubl/common_aggregate_components/party_tax_scheme.rb +30 -0
  180. data/lib/zatca/ubl/common_aggregate_components/postal_address.rb +59 -0
  181. data/lib/zatca/ubl/common_aggregate_components/price.rb +20 -0
  182. data/lib/zatca/ubl/common_aggregate_components/tax_category.rb +56 -0
  183. data/lib/zatca/ubl/common_aggregate_components/tax_total.rb +58 -0
  184. data/lib/zatca/ubl/common_aggregate_components.rb +2 -0
  185. data/lib/zatca/ubl/invoice.rb +481 -0
  186. data/lib/zatca/ubl/invoice_subtype_builder.rb +50 -0
  187. data/lib/zatca/ubl/signing/cert.rb +48 -0
  188. data/lib/zatca/ubl/signing/invoice_signed_data_reference.rb +44 -0
  189. data/lib/zatca/ubl/signing/key_info.rb +25 -0
  190. data/lib/zatca/ubl/signing/object.rb +20 -0
  191. data/lib/zatca/ubl/signing/qualifying_properties.rb +27 -0
  192. data/lib/zatca/ubl/signing/signature.rb +50 -0
  193. data/lib/zatca/ubl/signing/signature_information.rb +19 -0
  194. data/lib/zatca/ubl/signing/signature_properties_reference.rb +26 -0
  195. data/lib/zatca/ubl/signing/signed_info.rb +21 -0
  196. data/lib/zatca/ubl/signing/signed_properties.rb +81 -0
  197. data/lib/zatca/ubl/signing/signed_signature_properties.rb +23 -0
  198. data/lib/zatca/ubl/signing/ubl_document_signatures.rb +25 -0
  199. data/lib/zatca/ubl/signing/ubl_extension.rb +22 -0
  200. data/lib/zatca/ubl/signing/ubl_extensions.rb +17 -0
  201. data/lib/zatca/ubl/signing.rb +2 -0
  202. data/lib/zatca/ubl.rb +2 -0
  203. data/lib/zatca/version.rb +1 -1
  204. data/lib/zatca.rb +27 -3
  205. data/zatca.gemspec +52 -0
  206. metadata +318 -10
  207. data/Gemfile.lock +0 -100
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <configuration>
3
+ <startup>
4
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
5
+ </startup>
6
+ <runtime>
7
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
8
+ <dependentAssembly>
9
+ <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
10
+ <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
11
+ </dependentAssembly>
12
+ </assemblyBinding>
13
+ </runtime>
14
+ </configuration>
@@ -0,0 +1,58 @@
1
+ using Microsoft.VisualBasic;
2
+ using SDKNETFrameWorkLib.GeneralLogic;
3
+ using System;
4
+ using System.Collections.Generic;
5
+ using System.Diagnostics;
6
+ using System.IO;
7
+ using System.Linq;
8
+ using System.Text;
9
+ using System.Threading;
10
+ using System.Threading.Tasks;
11
+
12
+ namespace SDKNETFrameworkTest
13
+ {
14
+ public class CSRGeneratorOpenSSL
15
+ {
16
+ public void ExecuteCommandSync(object command)
17
+ {
18
+ try
19
+ {
20
+ // create the ProcessStartInfo using "cmd" as the program to be run,
21
+ // and "/c " as the parameters.
22
+ // Incidentally, /c tells cmd that we want it to execute the command that follows,
23
+ // and then exit.
24
+ System.Diagnostics.ProcessStartInfo procStartInfo =
25
+ new System.Diagnostics.ProcessStartInfo("cmd", "/c " + command);
26
+
27
+ // The following commands are needed to redirect the standard output.
28
+ // This means that it will be redirected to the Process.StandardOutput StreamReader.
29
+ procStartInfo.RedirectStandardOutput = true;
30
+ procStartInfo.UseShellExecute = false;
31
+ // Do not create the black window.
32
+ procStartInfo.CreateNoWindow = true;
33
+ // Now we create a process, assign its ProcessStartInfo and start it
34
+ System.Diagnostics.Process proc = new System.Diagnostics.Process();
35
+ proc.StartInfo = procStartInfo;
36
+ proc.Start();
37
+ // Get the output into a string
38
+ string result = proc.StandardOutput.ReadToEnd();
39
+ // Display the command output.
40
+ Console.WriteLine(result);
41
+ }
42
+ catch (Exception objException)
43
+ {
44
+ Console.WriteLine(objException.InnerException);
45
+ }
46
+ }
47
+ public void GenerateCSRUsingOpenSSLComand(ref string errorMessage)
48
+ {
49
+ string path = System.Reflection.Assembly.GetExecutingAssembly().Location;
50
+ var directory = System.IO.Path.GetDirectoryName(path);
51
+ ExecuteCommandSync(@"openssl ecparam -name secp256k1 -genkey -noout -out " + directory + @"\generatedPrivateKey.pem");
52
+ Thread.Sleep(1000);
53
+ ExecuteCommandSync(@"openssl ec -in " + directory + @"\generatedPrivateKey.pem -pubout > " + directory + @"\generatedPublicKey.pem");
54
+ Thread.Sleep(1000);
55
+ ExecuteCommandSync(@"openssl req -new -sha256 -key " + directory + @"\generatedPrivateKey.pem -extensions v3_req -config " + directory + @"\config.cnf -out " + directory + @"\generatedCSR.csr");
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,194 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.Diagnostics;
4
+ using System.IO;
5
+ using System.Linq;
6
+ using System.Text;
7
+ using System.Threading.Tasks;
8
+ using SDKNETFrameWorkLib;
9
+ using SDKNETFrameWorkLib.GeneralLogic;
10
+ namespace SDKNETFrameworkTest
11
+ {
12
+ class Program
13
+ {
14
+ static int selectedOption = 0;
15
+ static void Main(string[] args)
16
+ {
17
+ var _IHashingValidator = new SDKNETFrameWorkLib.BLL.HashingValidator();
18
+ var _IQRValidator = new SDKNETFrameWorkLib.BLL.QRValidator();
19
+ var _IEInvoiceValidator = new SDKNETFrameWorkLib.BLL.EInvoiceValidator();
20
+ var _IEInvoiceSigningLogic = new SDKNETFrameWorkLib.BLL.EInvoiceSigningLogic();
21
+
22
+
23
+ string privateKeyContent = "MHQCAQEEIDyLDaWIn/1/g3PGLrwupV4nTiiLKM59UEqUch1vDfhpoAcGBSuBBAAKoUQDQgAEYYMMoOaFYAhMO/steotfZyavr6p11SSlwsK9azmsLY7b1b+FLhqMArhB2dqHKboxqKNfvkKDePhpqjui5hcn0Q==";//
24
+ string certificateContent = "MIID6jCCA5CgAwIBAgITbwAAfsboAdNVNKd+1wABAAB+xjAKBggqhkjOPQQDAjBjMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxEzARBgoJkiaJk/IsZAEZFgNnb3YxFzAVBgoJkiaJk/IsZAEZFgdleHRnYXp0MRwwGgYDVQQDExNUU1pFSU5WT0lDRS1TdWJDQS0xMB4XDTIyMDgxNjE0MjU0OFoXDTI0MDgxNTE0MjU0OFowTjELMAkGA1UEBhMCU0ExEzARBgNVBAoTCjMxMDIzMzM3NDYxDDAKBgNVBAsTA1RTVDEcMBoGA1UEAxMTVFNULTMxMDIzMzM3NDYwMDAwMzBWMBAGByqGSM49AgEGBSuBBAAKA0IABGGDDKDmhWAITDv7LXqLX2cmr6+qddUkpcLCvWs5rC2O29W/hS4ajAK4Qdnahym6MaijX75Cg3j4aao7ouYXJ9GjggI5MIICNTCBmgYDVR0RBIGSMIGPpIGMMIGJMTswOQYDVQQEDDIxLVRTVHwyLVRTVHwzLTBiZTk2ZTI3LWI5MTgtNDliYy05N2RiLTMzOWY1OWMyMzA0ZDEfMB0GCgmSJomT8ixkAQEMDzMxMDIzMzM3NDYwMDAwMzENMAsGA1UEDAwEMTEwMDEMMAoGA1UEGgwDVFNUMQwwCgYDVQQPDANUU1QwHQYDVR0OBBYEFDuWYlOzWpFN3no1WtyNktQdrA8JMB8GA1UdIwQYMBaAFHZgjPsGoKxnVzWdz5qspyuZNbUvME4GA1UdHwRHMEUwQ6BBoD+GPWh0dHA6Ly90c3RjcmwuemF0Y2EuZ292LnNhL0NlcnRFbnJvbGwvVFNaRUlOVk9JQ0UtU3ViQ0EtMS5jcmwwga0GCCsGAQUFBwEBBIGgMIGdMG4GCCsGAQUFBzABhmJodHRwOi8vdHN0Y3JsLnphdGNhLmdvdi5zYS9DZXJ0RW5yb2xsL1RTWkVpbnZvaWNlU0NBMS5leHRnYXp0Lmdvdi5sb2NhbF9UU1pFSU5WT0lDRS1TdWJDQS0xKDEpLmNydDArBggrBgEFBQcwAYYfaHR0cDovL3RzdGNybC56YXRjYS5nb3Yuc2Evb2NzcDAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMDMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwIwCgYIKwYBBQUHAwMwCgYIKoZIzj0EAwIDSAAwRQIhAMWDOI67/kAqLSDMGeUDUettoh+1dRGNHppri9d7y02vAiAtfnOLHuJBlO8QqNxXOdeQZphNYai0DDzQXmESb+6FZA==";
25
+ //string privateKeyContent = "MIGNAgEAMBAGByqGSM49AgEGBSuBBAAKBHYwdAIBAQQgBC/V+e1bYCyQ2RjgkC0VnhGOEn9aYMlUNC+x/Bxqh1ugBwYFK4EEAAqhRANCAASxorBRZSPU9SBYmsWY1ORtSLCEskbVJQuvKp2EThxqnyrZ4d48VAAKIh706QUzUkb/KsGE58vA9AeNVEE/Vn1X";
26
+ //string certificateContent = "TUlJRUxqQ0NBOVNnQXdJQkFnSVRGd0FBQUtCeHozbERXb2dXTlFBQkFBQUFvREFLQmdncWhrak9QUVFEQWpCaU1SVXdFd1lLQ1pJbWlaUHlMR1FCR1JZRmJHOWpZV3d4RXpBUkJnb0praWFKay9Jc1pBRVpGZ05uYjNZeEZ6QVZCZ29Ka2lhSmsvSXNaQUVaRmdkbGVIUm5ZWHAwTVJzd0dRWURWUVFERXhKUVVscEZTVTVXVDBsRFJWTkRRVEV0UTBFd0hoY05Nakl3T0RNd01EZ3hOREl3V2hjTk1qY3dPREk1TURneE5ESXdXakJTTVFzd0NRWURWUVFHRXdKVFFURVdNQlFHQTFVRUNoTU5RMmxuWVd4aGFDQkhjbTkxY0RFV01CUUdBMVVFQ3hNTlNtVmtaR0ZvSUVKeVlXNWphREVUTUJFR0ExVUVBeE1LTVRNd0xqRXVNVEF1TkRCV01CQUdCeXFHU000OUFnRUdCU3VCQkFBS0EwSUFCTEdpc0ZGbEk5VDFJRmlheFpqVTVHMUlzSVN5UnRVbEM2OHFuWVJPSEdxZkt0bmgzanhVQUFvaUh2VHBCVE5TUnY4cXdZVG55OEQwQjQxVVFUOVdmVmVqZ2dKNk1JSUNkakNCb2dZRFZSMFJCSUdhTUlHWHBJR1VNSUdSTVM0d0xBWURWUVFFRENVeExVaDFZWGRsYVh3eUxVVTVNREF3ZkRNdE1qRXdNak13TVRBeU9ERXdUVE13TURJNE1SOHdIUVlLQ1pJbWlaUHlMR1FCQVF3UE16QXdNVFV5TnpneE16QXdNREF6TVEwd0N3WURWUVFNREFReE1UQXdNUmN3RlFZRFZRUWFEQTVCYzJnZ1UyaGhjbUZtYVhsaGFERVdNQlFHQTFVRUR3d05VR2hoY20xaElITmxZM1J2Y2pBZEJnTlZIUTRFRmdRVWdQSXMyT00zbzdROWdmMkUvcVhYWVBra3d5VXdId1lEVlIwakJCZ3dGb0FVY3BQUkRtdjZKRnNUaGVyQkZmTzRGZnNiQlkwd1RnWURWUjBmQkVjd1JUQkRvRUdnUDRZOWFIUjBjRG92TDJOeWJERXVlbUYwWTJFdVoyOTJMbk5oTDBObGNuUkZibkp2Ykd3dlVGSmFSVWxPVms5SlEwVlRRMEV4TFVOQktERXBMbU55YkRDQnFBWUlLd1lCQlFVSEFRRUVnWnN3Z1pnd2F3WUlLd1lCQlFVSE1BS0dYMmgwZEhBNkx5OWhhV0V4TG5waGRHTmhMbWR2ZGk1ellTOURaWEowUlc1eWIyeHNMMUJTV2tWcGJuWnZhV05sVTBOQk1TNWxlSFJuWVhwMExtZHZkaTVzYjJOaGJGOVFVbHBGU1U1V1QwbERSVk5EUVRFdFEwRW9NU2t1WTNKME1Da0dDQ3NHQVFVRkJ6QUJoaDFvZEhSd09pOHZZM0pzTVM1NllYUmpZUzVuYjNZdWMyRXZiMk56Y0RBT0JnTlZIUThCQWY4RUJBTUNCNEF3UEFZSkt3WUJCQUdDTnhVSEJDOHdMUVlsS3dZQkJBR0NOeFVJZ1lhb0hZVFEreEtHN1owa2g4NzdHZFBBVldhSCtxVmxoZG1FUGdJQlpBSUJEakFkQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQXdZSUt3WUJCUVVIQXdJd0p3WUpLd1lCQkFHQ054VUtCQm93R0RBS0JnZ3JCZ0VGQlFjREF6QUtCZ2dyQmdFRkJRY0RBakFLQmdncWhrak9QUVFEQWdOSUFEQkZBaUVBaGdnQTA5aUtzYXB6N0RCSW13RGNrazJMbGpnZHIyZlZsdEIwOTBlbk1GOENJQlRYdnZubEFTNEF5czJkcm5CemlLTWN0Q1RzN3k2U1JNZW5zWmFLM3J6Rg==";
27
+ string pihContent = "NWZlY2ViNjZmZmM4NmYzOGQ5NTI3ODZjNmQ2OTZjNzljMmRiYzIzOWRkNGU5MWI0NjcyOWQ3M2EyN2ZiNTdlOQ==";
28
+ //=============================================================
29
+ Console.WriteLine("********** Welcome to ZATCA E-Invoice .NET SDK 1.0.0 **********");
30
+ Console.WriteLine("Sample for private key : ");
31
+ Console.WriteLine("MHQCAQEEIDyLDaWIn/1/g3PGLrwupV4nTiiLKM59UEqUch1vDfhpoAcGBSuBBAAKoUQDQgAEYYMMoOaFYAhMO/steotfZyavr6p11SSlwsK9azmsLY7b1b+FLhqMArhB2dqHKboxqKNfvkKDePhpqjui5hcn0Q==");
32
+ Console.WriteLine("---------------------------------------------------------------------");
33
+ Console.WriteLine("Sample for certificate : ");
34
+ Console.WriteLine("MIID6jCCA5CgAwIBAgITbwAAfsboAdNVNKd+1wABAAB+xjAKBggqhkjOPQQDAjBjMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxEzARBgoJkiaJk/IsZAEZFgNnb3YxFzAVBgoJkiaJk/IsZAEZFgdleHRnYXp0MRwwGgYDVQQDExNUU1pFSU5WT0lDRS1TdWJDQS0xMB4XDTIyMDgxNjE0MjU0OFoXDTI0MDgxNTE0MjU0OFowTjELMAkGA1UEBhMCU0ExEzARBgNVBAoTCjMxMDIzMzM3NDYxDDAKBgNVBAsTA1RTVDEcMBoGA1UEAxMTVFNULTMxMDIzMzM3NDYwMDAwMzBWMBAGByqGSM49AgEGBSuBBAAKA0IABGGDDKDmhWAITDv7LXqLX2cmr6+qddUkpcLCvWs5rC2O29W/hS4ajAK4Qdnahym6MaijX75Cg3j4aao7ouYXJ9GjggI5MIICNTCBmgYDVR0RBIGSMIGPpIGMMIGJMTswOQYDVQQEDDIxLVRTVHwyLVRTVHwzLTBiZTk2ZTI3LWI5MTgtNDliYy05N2RiLTMzOWY1OWMyMzA0ZDEfMB0GCgmSJomT8ixkAQEMDzMxMDIzMzM3NDYwMDAwMzENMAsGA1UEDAwEMTEwMDEMMAoGA1UEGgwDVFNUMQwwCgYDVQQPDANUU1QwHQYDVR0OBBYEFDuWYlOzWpFN3no1WtyNktQdrA8JMB8GA1UdIwQYMBaAFHZgjPsGoKxnVzWdz5qspyuZNbUvME4GA1UdHwRHMEUwQ6BBoD+GPWh0dHA6Ly90c3RjcmwuemF0Y2EuZ292LnNhL0NlcnRFbnJvbGwvVFNaRUlOVk9JQ0UtU3ViQ0EtMS5jcmwwga0GCCsGAQUFBwEBBIGgMIGdMG4GCCsGAQUFBzABhmJodHRwOi8vdHN0Y3JsLnphdGNhLmdvdi5zYS9DZXJ0RW5yb2xsL1RTWkVpbnZvaWNlU0NBMS5leHRnYXp0Lmdvdi5sb2NhbF9UU1pFSU5WT0lDRS1TdWJDQS0xKDEpLmNydDArBggrBgEFBQcwAYYfaHR0cDovL3RzdGNybC56YXRjYS5nb3Yuc2Evb2NzcDAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMDMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwIwCgYIKwYBBQUHAwMwCgYIKoZIzj0EAwIDSAAwRQIhAMWDOI67/kAqLSDMGeUDUettoh+1dRGNHppri9d7y02vAiAtfnOLHuJBlO8QqNxXOdeQZphNYai0DDzQXmESb+6FZA==");
35
+ Console.WriteLine("---------------------------------------------------------------------");
36
+ Console.WriteLine("Please write the number of the option you want : ");
37
+ Console.WriteLine("1- Generating E-Invoice Hashing (Need E-Invoice XML file path)");
38
+ Console.WriteLine("2- Validating E-Invoice Hashing (Need E-Invoice XML file path)");
39
+ Console.WriteLine("3- Generating E-Invoice QR Code (Need E-Invoice XML file path)");
40
+ Console.WriteLine("4- Validating E-Invoice QR Code (Need E-Invoice XML file path)");
41
+ Console.WriteLine("5- Validating E-Invoice (Need E-Invoice XML file path)");
42
+ Console.WriteLine("6- Signing E-Invoice ");
43
+ Console.WriteLine("7- Generate CSR ");
44
+ Console.WriteLine("8- Exit Application");
45
+ while (true)
46
+ {
47
+ try
48
+ {
49
+ privateKeyContent = File.ReadAllText("privateKey.txt");
50
+ }
51
+ catch(Exception ex)
52
+ {
53
+ Console.WriteLine("In setup location a file privateKey.txt should be exist");
54
+ return;
55
+ }
56
+ try
57
+ {
58
+ certificateContent = File.ReadAllText("certificate.txt");
59
+ }
60
+ catch (Exception ex)
61
+ {
62
+ Console.WriteLine("In setup location a file certificate.txt should be exist");
63
+ return;
64
+ }
65
+ try
66
+ {
67
+ pihContent = File.ReadAllText("pih.txt");
68
+ }
69
+ catch (Exception ex)
70
+ {
71
+ Console.WriteLine("In setup location a file pih.txt should be exist");
72
+ return;
73
+ }
74
+ Console.Write(" Please Enter you choice : ");
75
+ string option = Console.ReadLine();
76
+ if (!string.IsNullOrEmpty(option) && int.TryParse(option.Trim(), out selectedOption) && selectedOption >= 1 && selectedOption <= 7)
77
+ {
78
+ string filePath = "";
79
+ if (selectedOption < 7)
80
+ {
81
+ Console.Write(" Please Enter XML file path : ");
82
+ filePath = Console.ReadLine();
83
+ if (string.IsNullOrEmpty(filePath))
84
+ {
85
+ continue;
86
+ }
87
+ }
88
+ Result objResult = new Result();
89
+ if (selectedOption == 1)
90
+ {
91
+ objResult = _IHashingValidator.GenerateEInvoiceHashing(filePath);
92
+ }
93
+ else if (selectedOption == 2)
94
+ {
95
+ objResult = _IHashingValidator.ValidateEInvoiceHashing(filePath);
96
+ }
97
+ else if (selectedOption == 3)
98
+ {
99
+ objResult = _IQRValidator.GenerateEInvoiceQRCode(filePath);
100
+ }
101
+ else if (selectedOption == 4)
102
+ {
103
+ objResult = _IQRValidator.ValidateEInvoiceQRCode(filePath);
104
+ }
105
+ else if (selectedOption == 5)
106
+ {
107
+ objResult = _IEInvoiceValidator.ValidateEInvoice(filePath, certificateContent, pihContent);
108
+ }
109
+ else if (selectedOption == 6)
110
+ {
111
+ objResult = _IEInvoiceSigningLogic.SignDocument(filePath, certificateContent, privateKeyContent);
112
+ }
113
+ else if (selectedOption == 7)
114
+ {
115
+ string errorMessage = "";
116
+ CSRGeneratorOpenSSL cSRGeneratorOpenSSL = new CSRGeneratorOpenSSL();
117
+ cSRGeneratorOpenSSL.GenerateCSRUsingOpenSSLComand(ref errorMessage);
118
+ Console.WriteLine("CSR Generating Operation has been Finished.");
119
+ }
120
+ if (selectedOption != 7)
121
+ {
122
+ DisplayResult(objResult);
123
+ }
124
+ }
125
+ else if (selectedOption == 8)
126
+ {
127
+ Console.WriteLine("Thanks for using ZATCA SDK.");
128
+ return;
129
+ }
130
+ else
131
+ {
132
+ Console.WriteLine("Please write the number of the option you want : ");
133
+ Console.WriteLine("1- Generating E-Invoice Hashing (Need E-Invoice XML file path)");
134
+ Console.WriteLine("2- Validate E-Invoice Hashing (Need E-Invoice XML file path)");
135
+ Console.WriteLine("3- Generate E-Invoice QR Code (Need E-Invoice XML file path)");
136
+ Console.WriteLine("4- Validate E-Invoice QR Code (Need E-Invoice XML file path)");
137
+ Console.WriteLine("5- Validate E-Invoice (Need E-Invoice XML file path)");
138
+ Console.WriteLine("6- Signing E-Invoice ");
139
+ Console.WriteLine("7- Generate CSR ");
140
+ Console.WriteLine("8- Exit Application");
141
+ }
142
+ Console.WriteLine(" PLEASE ENTER YOUR NEXT OPTION ");
143
+ }
144
+ }
145
+ static void DisplayResult(Result objResult)
146
+ {
147
+ Console.WriteLine(" OPERATION : " + objResult.Operation);
148
+ if (objResult.lstSteps != null && objResult.lstSteps.Count > 0)
149
+ {
150
+ foreach (Result currentStep in objResult.lstSteps)
151
+ {
152
+ Console.WriteLine(" CURRENT STEP : " + currentStep.Operation);
153
+ if (currentStep.IsValid)
154
+ {
155
+ if (!string.IsNullOrEmpty(currentStep.ResultedValue))
156
+ {
157
+ Console.WriteLine(" RESULT : " + currentStep.ResultedValue);
158
+ }
159
+ else
160
+ {
161
+ Console.WriteLine(" RESULT : Successeded");
162
+ }
163
+ }
164
+ else
165
+ {
166
+ Console.WriteLine(" RESULT : Failed");
167
+ if (!string.IsNullOrEmpty(currentStep.ErrorMessage))
168
+ {
169
+ Console.WriteLine(" FAILED REASON : " + currentStep.ErrorMessage);
170
+ }
171
+ }
172
+ }
173
+ }
174
+ //=====================================================
175
+ if (objResult.IsValid)
176
+ {
177
+ Console.WriteLine(" FINAL RESULT : Successeded");
178
+ if (!string.IsNullOrEmpty(objResult.ResultedValue) && selectedOption != 6)
179
+ {
180
+ Console.WriteLine(" Result : " + objResult.ResultedValue);
181
+ }
182
+ }
183
+ else
184
+ {
185
+ Console.WriteLine(" FINAL RESULT : Failed");
186
+ if (!string.IsNullOrEmpty(objResult.ErrorMessage))
187
+ {
188
+ Console.WriteLine("FAILED REASON : " + objResult.ErrorMessage);
189
+ }
190
+ }
191
+ }
192
+
193
+ }
194
+ }
@@ -0,0 +1,36 @@
1
+ using System.Reflection;
2
+ using System.Runtime.CompilerServices;
3
+ using System.Runtime.InteropServices;
4
+
5
+ // General Information about an assembly is controlled through the following
6
+ // set of attributes. Change these attribute values to modify the information
7
+ // associated with an assembly.
8
+ [assembly: AssemblyTitle("SDKNETFrameworkTest")]
9
+ [assembly: AssemblyDescription("")]
10
+ [assembly: AssemblyConfiguration("")]
11
+ [assembly: AssemblyCompany("")]
12
+ [assembly: AssemblyProduct("SDKNETFrameworkTest")]
13
+ [assembly: AssemblyCopyright("Copyright © 2022")]
14
+ [assembly: AssemblyTrademark("")]
15
+ [assembly: AssemblyCulture("")]
16
+
17
+ // Setting ComVisible to false makes the types in this assembly not visible
18
+ // to COM components. If you need to access a type in this assembly from
19
+ // COM, set the ComVisible attribute to true on that type.
20
+ [assembly: ComVisible(false)]
21
+
22
+ // The following GUID is for the ID of the typelib if this project is exposed to COM
23
+ [assembly: Guid("62d3e180-e431-45a0-9b6f-d4ac566c0ccd")]
24
+
25
+ // Version information for an assembly consists of the following four values:
26
+ //
27
+ // Major Version
28
+ // Minor Version
29
+ // Build Number
30
+ // Revision
31
+ //
32
+ // You can specify all the values or you can default the Build and Revision Numbers
33
+ // by using the '*' as shown below:
34
+ // [assembly: AssemblyVersion("1.0.*")]
35
+ [assembly: AssemblyVersion("1.0.0.0")]
36
+ [assembly: AssemblyFileVersion("1.0.0.0")]
@@ -0,0 +1,8 @@
1
+ To use the code you need to
2
+ 1. reference .Net SDK DLL
3
+ 2. fill the correct values in Data folder
4
+ 3. create sample xml invoice and use it in the command line tool
5
+
6
+ Sample data has been added to the certificate/ pih/ privateKey files.
7
+
8
+ To create private key you must use openssl command.
@@ -0,0 +1,43 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <configuration>
3
+ <appSettings>
4
+ <add key="ENSchematronsPath" value="..\..\..\Data\Rules\schematrons\20210819_ZATCA_E-invoice_Validation_Rules.xsl"/>
5
+ <add key="KSASchematronsPath" value="..\..\..\Data\Rules\schematrons\CEN-EN16931-UBL.xsl"/>
6
+
7
+ <add key="Embeded_UBL_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\maindoc\UBL-Invoice-2.1.xsd"/>
8
+ <add key="Embeded_CommonAggregateComponents_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\common\UBL-CommonAggregateComponents-2.1.xsd"/>
9
+ <add key="Embeded_CommonBasicComponents_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\common\UBL-CommonBasicComponents-2.1.xsd"/>
10
+ <add key="Embeded_CommonExtensionComponents_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\common\UBL-CommonExtensionComponents-2.1.xsd"/>
11
+ <add key="Embeded_CommonSignatureComponents_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\common\UBL-CommonSignatureComponents-2.1.xsd"/>
12
+ <add key="Embeded_SignatureAggregateComponents_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\common\UBL-SignatureAggregateComponents-2.1.xsd"/>
13
+ <add key="Embeded_SignatureBasicComponents_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\common\UBL-SignatureBasicComponents-2.1.xsd"/>
14
+ <add key="Embeded_UBL_UnqualifiedDataTypes_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\common\UBL-UnqualifiedDataTypes-2.1.xsd"/>
15
+ <add key="Embeded_CoreComponentTypeSchemaModule_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\common\UBL-CoreComponentParameters-2.1.xsd"/>
16
+ <add key="Embeded_ExtensionContentDataType_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\common\UBL-ExtensionContentDataType-2.1.xsd"/>
17
+ <add key="Embeded_QualifiedDataTypes_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\common\UBL-QualifiedDataTypes-2.1.xsd"/>
18
+ <add key="Embeded_CCTS_CCT_SchemaModule_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\common\CCTS_CCT_SchemaModule-2.1.xsd"/>
19
+ <add key="Embeded_UBL_XAdESv_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\common\UBL-XAdESv141-2.1.xsd"/>
20
+ <add key="Embeded_UBL_Xmldsig_Core_XSD_PATH" value="..\..\..\Data\Schemas\xsds\UBL2.1\xsd\common\UBL-xmldsig-core-schema-2.1.xsd"/>
21
+
22
+ </appSettings>
23
+ <runtime>
24
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
25
+ <dependentAssembly>
26
+ <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
27
+ <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
28
+ </dependentAssembly>
29
+ </assemblyBinding>
30
+ </runtime>
31
+ <system.web>
32
+ <membership defaultProvider="ClientAuthenticationMembershipProvider">
33
+ <providers>
34
+ <add name="ClientAuthenticationMembershipProvider" type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" />
35
+ </providers>
36
+ </membership>
37
+ <roleManager defaultProvider="ClientRoleProvider" enabled="true">
38
+ <providers>
39
+ <add name="ClientRoleProvider" type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" />
40
+ </providers>
41
+ </roleManager>
42
+ </system.web>
43
+ </configuration>
@@ -0,0 +1,120 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+ <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
4
+ <PropertyGroup>
5
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
6
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
7
+ <ProjectGuid>{62D3E180-E431-45A0-9B6F-D4AC566C0CCD}</ProjectGuid>
8
+ <OutputType>Exe</OutputType>
9
+ <RootNamespace>SDKNETFrameworkTest</RootNamespace>
10
+ <AssemblyName>SDKNETFrameworkTest</AssemblyName>
11
+ <TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>
12
+ <FileAlignment>512</FileAlignment>
13
+ <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
14
+ <Deterministic>true</Deterministic>
15
+ <PublishUrl>publish\</PublishUrl>
16
+ <Install>true</Install>
17
+ <InstallFrom>Disk</InstallFrom>
18
+ <UpdateEnabled>false</UpdateEnabled>
19
+ <UpdateMode>Foreground</UpdateMode>
20
+ <UpdateInterval>7</UpdateInterval>
21
+ <UpdateIntervalUnits>Days</UpdateIntervalUnits>
22
+ <UpdatePeriodically>false</UpdatePeriodically>
23
+ <UpdateRequired>false</UpdateRequired>
24
+ <MapFileExtensions>true</MapFileExtensions>
25
+ <ApplicationRevision>0</ApplicationRevision>
26
+ <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
27
+ <IsWebBootstrapper>false</IsWebBootstrapper>
28
+ <UseApplicationTrust>false</UseApplicationTrust>
29
+ <BootstrapperEnabled>true</BootstrapperEnabled>
30
+ </PropertyGroup>
31
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
32
+ <PlatformTarget>AnyCPU</PlatformTarget>
33
+ <DebugSymbols>true</DebugSymbols>
34
+ <DebugType>full</DebugType>
35
+ <Optimize>false</Optimize>
36
+ <OutputPath>bin\Debug\</OutputPath>
37
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
38
+ <ErrorReport>prompt</ErrorReport>
39
+ <WarningLevel>4</WarningLevel>
40
+ </PropertyGroup>
41
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
42
+ <PlatformTarget>AnyCPU</PlatformTarget>
43
+ <DebugType>pdbonly</DebugType>
44
+ <Optimize>true</Optimize>
45
+ <OutputPath>bin\Release\</OutputPath>
46
+ <DefineConstants>TRACE</DefineConstants>
47
+ <ErrorReport>prompt</ErrorReport>
48
+ <WarningLevel>4</WarningLevel>
49
+ </PropertyGroup>
50
+ <ItemGroup>
51
+ <Reference Include="BouncyCastle.Crypto">
52
+ <HintPath>..\..\..\..\..\..\Desktop\zatca-einvoicing-sdk-232-R3.1.8\zatca-einvoicing-sdk-232-R3.1.8\Lib\.Net\DLL\BouncyCastle.Crypto.dll</HintPath>
53
+ </Reference>
54
+ <Reference Include="IKVM.OpenJDK.Core">
55
+ <HintPath>..\..\..\..\..\..\Desktop\zatca-einvoicing-sdk-232-R3.1.8\zatca-einvoicing-sdk-232-R3.1.8\Lib\.Net\DLL\IKVM.OpenJDK.Core.dll</HintPath>
56
+ </Reference>
57
+ <Reference Include="IKVM.OpenJDK.Text">
58
+ <HintPath>..\..\..\..\..\..\Desktop\zatca-einvoicing-sdk-232-R3.1.8\zatca-einvoicing-sdk-232-R3.1.8\Lib\.Net\DLL\IKVM.OpenJDK.Text.dll</HintPath>
59
+ </Reference>
60
+ <Reference Include="IKVM.OpenJDK.Util">
61
+ <HintPath>..\..\..\..\..\..\Desktop\zatca-einvoicing-sdk-232-R3.1.8\zatca-einvoicing-sdk-232-R3.1.8\Lib\.Net\DLL\IKVM.OpenJDK.Util.dll</HintPath>
62
+ </Reference>
63
+ <Reference Include="IKVM.OpenJDK.XML.API">
64
+ <HintPath>..\..\..\..\..\..\Desktop\zatca-einvoicing-sdk-232-R3.1.8\zatca-einvoicing-sdk-232-R3.1.8\Lib\.Net\DLL\IKVM.OpenJDK.XML.API.dll</HintPath>
65
+ </Reference>
66
+ <Reference Include="IKVM.Runtime">
67
+ <HintPath>..\..\..\..\..\..\Desktop\zatca-einvoicing-sdk-232-R3.1.8\zatca-einvoicing-sdk-232-R3.1.8\Lib\.Net\DLL\IKVM.Runtime.dll</HintPath>
68
+ </Reference>
69
+ <Reference Include="saxon-he-10.8">
70
+ <HintPath>..\..\..\..\..\..\Desktop\zatca-einvoicing-sdk-232-R3.1.8\zatca-einvoicing-sdk-232-R3.1.8\Lib\.Net\DLL\saxon-he-10.8.dll</HintPath>
71
+ </Reference>
72
+ <Reference Include="saxon-he-api-10.8">
73
+ <HintPath>..\..\..\..\..\..\Desktop\zatca-einvoicing-sdk-232-R3.1.8\zatca-einvoicing-sdk-232-R3.1.8\Lib\.Net\DLL\saxon-he-api-10.8.dll</HintPath>
74
+ </Reference>
75
+ <Reference Include="SDKNETFrameWorkLib, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
76
+ <SpecificVersion>False</SpecificVersion>
77
+ <HintPath>..\..\..\..\..\..\Desktop\zatca-einvoicing-sdk-232-R3.1.8\zatca-einvoicing-sdk-232-R3.1.8\Lib\.Net\DLL\SDKNETFrameWorkLib.dll</HintPath>
78
+ </Reference>
79
+ <Reference Include="System" />
80
+ <Reference Include="System.Core" />
81
+ <Reference Include="System.Xml.Linq" />
82
+ <Reference Include="System.Data.DataSetExtensions" />
83
+ <Reference Include="Microsoft.CSharp" />
84
+ <Reference Include="System.Data" />
85
+ <Reference Include="System.Net.Http" />
86
+ <Reference Include="System.Xml" />
87
+ </ItemGroup>
88
+ <ItemGroup>
89
+ <Compile Include="Program.cs" />
90
+ <Compile Include="Properties\AssemblyInfo.cs" />
91
+ </ItemGroup>
92
+ <ItemGroup>
93
+ <None Include="App.config" />
94
+ </ItemGroup>
95
+ <ItemGroup>
96
+ <Content Include="Data\certificate.txt">
97
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
98
+ </Content>
99
+ <Content Include="Data\pih.txt">
100
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
101
+ </Content>
102
+ <Content Include="Data\privateKey.txt">
103
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
104
+ </Content>
105
+ <Content Include="Readme.txt" />
106
+ </ItemGroup>
107
+ <ItemGroup>
108
+ <BootstrapperPackage Include=".NETFramework,Version=v4.7.2">
109
+ <Visible>False</Visible>
110
+ <ProductName>Microsoft .NET Framework 4.7.2 %28x86 and x64%29</ProductName>
111
+ <Install>true</Install>
112
+ </BootstrapperPackage>
113
+ <BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
114
+ <Visible>False</Visible>
115
+ <ProductName>.NET Framework 3.5 SP1</ProductName>
116
+ <Install>false</Install>
117
+ </BootstrapperPackage>
118
+ </ItemGroup>
119
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
120
+ </Project>
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <configuration>
3
+ <appSettings>
4
+ <add key="PrivateKeyPath" value="..\..\..\Data\Certificates\ec-secp256k1-priv-key.pem"/>
5
+ <add key="CertificatePath" value="..\..\..\Data\Certificates\cert.pem"/>
6
+ <add key="PIHPath" value="..\..\..\Data\PIH\pih.txt"/>
7
+ </appSettings>
8
+
9
+ <startup>
10
+ <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
11
+ </startup>
12
+ <runtime>
13
+ <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
14
+ <dependentAssembly>
15
+ <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
16
+ <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
17
+ </dependentAssembly>
18
+ </assemblyBinding>
19
+ </runtime>
20
+ </configuration>
@@ -0,0 +1,25 @@
1
+ 
2
+ Microsoft Visual Studio Solution File, Format Version 12.00
3
+ # Visual Studio Version 17
4
+ VisualStudioVersion = 17.3.32929.385
5
+ MinimumVisualStudioVersion = 10.0.40219.1
6
+ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDKNETFrameworkTest", "SDKNETFrameworkTest.csproj", "{62D3E180-E431-45A0-9B6F-D4AC566C0CCD}"
7
+ EndProject
8
+ Global
9
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
10
+ Debug|Any CPU = Debug|Any CPU
11
+ Release|Any CPU = Release|Any CPU
12
+ EndGlobalSection
13
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
14
+ {62D3E180-E431-45A0-9B6F-D4AC566C0CCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15
+ {62D3E180-E431-45A0-9B6F-D4AC566C0CCD}.Debug|Any CPU.Build.0 = Debug|Any CPU
16
+ {62D3E180-E431-45A0-9B6F-D4AC566C0CCD}.Release|Any CPU.ActiveCfg = Release|Any CPU
17
+ {62D3E180-E431-45A0-9B6F-D4AC566C0CCD}.Release|Any CPU.Build.0 = Release|Any CPU
18
+ EndGlobalSection
19
+ GlobalSection(SolutionProperties) = preSolution
20
+ HideSolutionNode = FALSE
21
+ EndGlobalSection
22
+ GlobalSection(ExtensibilityGlobals) = postSolution
23
+ SolutionGuid = {7B1DECB4-2AB4-454B-9255-9A153AD3CE83}
24
+ EndGlobalSection
25
+ EndGlobal
@@ -0,0 +1 @@
1
+ MIID6zCCA5CgAwIBAgITbwAAf18FYT9MDlU3fgABAAB/XzAKBggqhkjOPQQDAjBjMRUwEwYKCZImiZPyLGQBGRYFbG9jYWwxEzARBgoJkiaJk/IsZAEZFgNnb3YxFzAVBgoJkiaJk/IsZAEZFgdleHRnYXp0MRwwGgYDVQQDExNUU1pFSU5WT0lDRS1TdWJDQS0xMB4XDTIyMDkwMTEwNTEzM1oXDTI0MDgzMTEwNTEzM1owTjELMAkGA1UEBhMCU0ExEzARBgNVBAoTCjMxMDIzMzM3NDYxDDAKBgNVBAsTA1RTVDEcMBoGA1UEAxMTVFNULTMxMDIzMzM3NDYwMDAwMzBWMBAGByqGSM49AgEGBSuBBAAKA0IABGGDDKDmhWAITDv7LXqLX2cmr6+qddUkpcLCvWs5rC2O29W/hS4ajAK4Qdnahym6MaijX75Cg3j4aao7ouYXJ9GjggI5MIICNTCBmgYDVR0RBIGSMIGPpIGMMIGJMTswOQYDVQQEDDIxLVRTVHwyLVRTVHwzLTFhZDZiZjAwLTA2ZWQtNGYxZS1iYWY3LTFkNjIxNGY1Njc3NjEfMB0GCgmSJomT8ixkAQEMDzMxMDIzMzM3NDYwMDAwMzENMAsGA1UEDAwEMTAwMDEMMAoGA1UEGgwDVFNUMQwwCgYDVQQPDANUU1QwHQYDVR0OBBYEFDuWYlOzWpFN3no1WtyNktQdrA8JMB8GA1UdIwQYMBaAFHZgjPsGoKxnVzWdz5qspyuZNbUvME4GA1UdHwRHMEUwQ6BBoD+GPWh0dHA6Ly90c3RjcmwuemF0Y2EuZ292LnNhL0NlcnRFbnJvbGwvVFNaRUlOVk9JQ0UtU3ViQ0EtMS5jcmwwga0GCCsGAQUFBwEBBIGgMIGdMG4GCCsGAQUFBzABhmJodHRwOi8vdHN0Y3JsLnphdGNhLmdvdi5zYS9DZXJ0RW5yb2xsL1RTWkVpbnZvaWNlU0NBMS5leHRnYXp0Lmdvdi5sb2NhbF9UU1pFSU5WT0lDRS1TdWJDQS0xKDEpLmNydDArBggrBgEFBQcwAYYfaHR0cDovL3RzdGNybC56YXRjYS5nb3Yuc2Evb2NzcDAOBgNVHQ8BAf8EBAMCB4AwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMDMCcGCSsGAQQBgjcVCgQaMBgwCgYIKwYBBQUHAwIwCgYIKwYBBQUHAwMwCgYIKoZIzj0EAwIDSQAwRgIhAL7U7Mnk0MPG/EBShq5LZxx23ZfLnLSG3ufy5s8OKaTuAiEAtDtWqC3Xn0EeYLO+t7xd6ko/r0qU09N7VMd9Rea55dI=
@@ -0,0 +1 @@
1
+ NWZlY2ViNjZmZmM4NmYzOGQ5NTI3ODZjNmQ2OTZjNzljMmRiYzIzOWRkNGU5MWI0NjcyOWQ3M2EyN2ZiNTdlOQ==
@@ -0,0 +1 @@
1
+ MHQCAQEEIDyLDaWIn/1/g3PGLrwupV4nTiiLKM59UEqUch1vDfhpoAcGBSuBBAAKoUQDQgAEYYMMoOaFYAhMO/steotfZyavr6p11SSlwsK9azmsLY7b1b+FLhqMArhB2dqHKboxqKNfvkKDePhpqjui5hcn0Q==