» »

Davčne blagajne

Davčne blagajne

««
6 / 27
»»

StratoFlier ::

Številčenje računov?
Kako se lotit številčenja računov, če imaš ločene module za račune, dobropise in račune za predplačila?
Vsak modul ločeno generira zaporedno številko dokumenta, ker tudi stranke tako zahtevajo zaradi internih evidenc in fakturnih mest.
Tudi mešanje računov in računov za predplačila (avansnih računov) nima logike.
Dobropisi še nekako gredo skupaj z računi saj jih lahko izdano z negativno vrednostjo.
Po predlogu potrjevanja pa to ni več dopustno, saj mora biti številka zaporedna ne glede na vrsto dokumenta?
Poleg tega skoraj vsa podjetja v številko "porinejo" tudi letnico.
Večja podjetja imajo strogo ločene dokumente.
Na seminarju je bilo govora, da v številko lahko damo dodatne oznake na primer:

Račun: POSPR-EN1-16100001, POSPR-EN1-16100002, ...
Avansni: POSPR-EN1-16200001, POSPR-EN1-16200002, ...

Seveda se to zapiše v interni akt

Številke so zaporedne vendar ne po dokumentu.
Če pa gledam odgovore na vprašanja (vprašanje 197) pa tudi to ni možno.
Kako boste reševali takšne primere?

anarho ::

ne mesaj internega ostevilcevanja z ostevilcevanjem ki ga zahteva furs. se vedno lahko ohranis logiko ostevilcevanja racunov kot do sedaj ... pri posiljanju na furs pa moras paziti da se drzis njihovih pravil ostevilcevanja. ta ne vplivajo na interna pravila ...

ze kje objavljena aplikacija za preverjanje berljivosti kode?

Zgodovina sprememb…

  • spremenil: anarho ()

perci ::

Ne, baje da bo nekje do konca naslednjega tedna...

DusanU ::

Se bojim, da ne gre samo za upoštevanje številčenja pri pošiljanju na FURS, številke v predpisanem formatu morajo biti tudi izpisane na računu. Boste imeli potem dve številki računa na izpisu računa?

Sam čakam na odgovor ali bodo pustili v istem prostoru hkrati številčenje po blagajni za en tip računa in številčenje po prostoru za druge tipe računov.

perci ::

A gre za dve različni vrsti dejavnosti? Povej primer, da bomo razumeli.

DusanU ::

1. Številčenje
Varianta a.:
Ali lahko znotraj istega poslovnega prostora uporabimo hkrati zaporedje po blagajni za eno vrsto računov, ter drugačno zaporedje po prostoru za druge vrste računov. Npr.:

Firma1-PC1-1510001, Firma1-PC1-1510002,…. Firma1-PC2-1520001, Firma1-PC2-1520002 (pc1,pc2 sta blagajni vsaka blagajna ima svoj števec)
Firma1-PC1-159001,Firma1-PC2-1590002, Firma1-PC3-1590003… (na istih računalnikih izdamo drugo vrsto računa (Za storitve, Avansni računi, Grosistični računi za te račune je števec po prostoru)

Varianta b:
Ali lahko za isto stavbo prijavimo dva poslovna prostora:

TRGOVINA-PC1-1510001, TRGOVINA-PC1-1510002,…. TRGOVINA-PC2-1520001, Firma1-PC2-1520002 (pc1,pc2 sta blagajni vsaka blagajna ima svoj števec)
PISARNA-PC1-159001,PISARNA-PC2-1590002, PISARNA-PC3-1590003 … (na istih računalnikih izdamo drugo vrsto računa (Za storitve, Avansni računi, Grosistični računi za te račune je števec po prostoru)

Problem je v tem, da se za račune izdane na blagajni zahteva avtonomnost blagajne tudi pri izpadu strežnika in zato potrebujemo za vsako blagajno svoj števec, Ti blagajniški računi (in števci) se tudi fizično v podatkovnih bazah shranjujejo drugače kot ostali računi in so prikazovani v ločenih seznamih. Če za račune, ki se sedaj številčijo znotraj poslovnega prostora uporabimo lokalne števce, potem bodo številke »razmetane«, in bodo luknje v pregledu blagajniških računov kot tudi v pregledu ostalih računov. Seznamov ni možno združiti, ker so kreirani z različnimi programih (so vsebinsko in oblikovno povsem različni) vendar na istem PC po potrebi. Sedaj je možno, da v podjetju izdajo račun na večih računalnikih, Blagajniški prejemek pa le na enem, ki je namenjen sprejemu gotovine

Skratka če za blagajne naredimo številčenje po prostoru ogrozimo avtonomnost, pri večih blagajnah lahko to pomeni tudi problem hkratnih zahtev po števlčenju novega računa,… Če pa za ostale gotovinske račune, ki ne sodijo v POS blagajno vpeljemo lokalno številčenje bomo imeli tako v seznamu blagajniških računov, kot tudi v seznamu ostalih računov luknje v prikazanem zaporedju. Nobena od teh variant ni dobra!

pix ::

če kdo rabi esc sekvence za qr za star:
http://www.stareu.net/files/stariodemo/

StratoFlier ::

Kot je @anarho napisal in po današnjem razgovoru s FURS-om jaz razumem, da lahko tudi takole:
Imamo lahko dve ločeni številčenji istih dokumentov:
1. interno številčenje
2. številčenje za potrebe davčnega potrjevanja računov

1. Interno številčenje: lahko ostane tako kot je sedaj z vsemi predponami, dodatki, letnice, vezaji, pomišljaji, ... ločeno številčimo račune, ločeno dobropise, ločemo račune za predplačila, itd

2. Številčenje ne glede na vrsto dokumenta: ko se odpre nov dokument (račun ali dobropis ali račun za predplačilo ) se številka "računa" poveča za 1 ter opremi s oznako poslovnega prostora ter oznako elektronske naprave.

Fizično na dokument (račun ali dobropis ali ... ) potem zapišete obe številki.
Kupcu ponudite, kot sklicno številko plačila, eno ali drugo kar vam bolj odgovarja.
Tudi v knjige izdanih računov potem zapišete obe številki pa v glavno knjigo tudi.

Sicer bo noro: naši računi bodo sestavljeni iz gore hexa in dec številk: ZOI, EOR, številka računa, številka davčnega potrjevanja računov, ... + QR ali PDF417 ali ...
Se ne bomo smešili pred tujino?

Kaj mislite o tem?

PrimozHisof ::

kam se vnaša v XML znesek računa, če ga izda nezavezanec?
a) v polje OPROSCENIH DOBAV
b) v polje NEOBDAVCLJIVIH DOBAV
c) normalno s stopnjo DDV 0% (tudi to gre skozi)

lp

perci ::

Oprosti, ampak a si si ti sploh prebral pravilnik? Pa priloge?

felix1 ::

Pozdravljeni.
Program razvijam v razvojnem orodju Delphi

Težavo imam s podpisom XML datotek. Ima kdo kakšno rešitev, namig, kako v razvojnem okolje delphi izvedeš podpisovanje. Sam sem uporabil nekatere komponente, vendar deluje samo algoritem SHA1. Strežnjik FURS-a neprestano vrača odgovor, digitalni podpis ni veljaven.

Hvala in Lp

Zupkoo ::

Mene pa zanima če je imel kdo podobn primer.

Pošiljanje računov/prijava prostora dela brez problema v androidu preko rest/json.

Ko pa kličem echo pa vedno dobim nazaj isti odgovor kot poslano.

Recimo:
- če pošljem "a" dobim nazaj "a".
- če pošljem {"EchoRequest":"furs"} dobim nazaj {"EchoRequest":"furs"}

Po dokumentaciji naj bi nazaj dobil iz poslanega {"EchoRequest":"furs"} -> {"EchoResponse":"furs"}
Čudno se mi zdi ker mi ostalo deluje.

Če pa poizkusim pošiljati echo iz javascripta preko ajax klica pa dobim odgovor kot je napisan v specifikaciji.

Any hints?

MH0 ::

Ma to si v kodi nekaj zašuštral in še enkrat request gledaš namesto response-a? :-)

Zupkoo ::

Žal ne ker sem preizkusil s funkcijo za pošiljanje računa v kateri sem Samo popravil naslov in poslane podatke..

mobster ::

Še ima kdo takšen problem, da če ima naložen Nexus Personal, da ne more pravilno podpisat računa? To imajo ponavadi naloženo tisti, ki imajo digitalna potrdila na pametni kartici/ključu...

Chuck Borris ::

@mobster: imam Nexus Personal inštaliran in nimam problemov z njim.
Imel sem probleme, ker se mi je po defaultu digitalni podpis naložil v Nexus namesto v Windows Certifikatni sistem.
Ko sem zbrisal digitalni podpis iz Nexusa in ga naložil v Windowsow sistem, je blo vse brez problemov.

Zgodovina sprememb…

mobster ::

@Chuck Borris: najlepša hvala! Dela.

felix1 ::

Ker mi v Delphijo ni uspelo, sem sel program pisat v Javi. Pri prijavi prostora mi sedaj neprestano javlja napako "003 -Digitalni podpis ni ustrezen". Poleg tega pa mi ni čisto jasno kaj je dejansko potrebno podpisati pri prijavi prostora.

Je imel kdo podoben problem. Vnaprej hvala. Spodaj sem spisal kodo.

package Podpisovanje;

import java.io.*;
import java.lang.reflect.*;
import java.security.*;
import java.security.cert.*;
import java.util.*;
import javax.xml.transform.TransformerException;
import org.apache.xpath.XPathAPI;
import org.w3c.dom.*;
import org.apache.xml.security.algorithms.MessageDigestAlgorithm;
import org.apache.xml.security.c14n.*;
import org.apache.xml.security.exceptions.XMLSecurityException;
import org.apache.xml.security.signature.*;
import org.apache.xml.security.keys.*;
import org.apache.xml.security.keys.content.*;
import org.apache.xml.security.keys.content.x509.*;
import org.apache.xml.security.keys.keyresolver.*;
import org.apache.xml.security.keys.storage.*;
import org.apache.xml.security.keys.storage.implementations.*;
import org.apache.xml.security.utils.*;
import org.apache.xml.security.transforms.*;
import org.apache.xml.security.Init;
import  org.apache.xml.serialize.*;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.Signature;
import java.security.cert.X509Certificate;
import java.util.Enumeration;

import sun.security.pkcs.ContentInfo;
import sun.security.pkcs.PKCS7;
import sun.security.pkcs.SignerInfo;
import sun.security.util.DerOutputStream;
import sun.security.util.DerValue;
import sun.security.x509.AlgorithmId;
import sun.security.x509.X500Name;


public class SignExample
{
   public static void main(String unused[]) throws Exception 
   {
      // Initialize the library
      org.apache.xml.security.Init.init();
      // The file from which we will load the request SOAP message
      String fileName = "e:/Request.xml";
      // Store the signed request here
      String signatureFileName = "e:/SignedRequest.xml";
      // Keystore parameters
      String keystoreType = "PKCS12";
      String keystoreFile = "E:/10141XXXX.p12";
      String keystorePass = "Geslo123#";
      String privateKeyAlias = "TESTNO PODJETJE XXX";
      String privateKeyPass = "Geslo123#";
      String certificateAlias = "TESTNO PODJETJE XXX";      
    
      // Load the keystore
      KeyStore ks = KeyStore.getInstance(keystoreType);
      
      FileInputStream fis = new FileInputStream(keystoreFile);
      ks.load(fis, keystorePass.toCharArray());
      
      Enumeration<String> aliases = ks.aliases();
      String aliaz = "TESTNO PODJETJE XXX";
      while(aliases.hasMoreElements()){
         System.out.println(aliaz + " podpis veljaven do " + ((X509Certificate) ks.getCertificate(aliaz)).getNotAfter());
         System.out.println(aliaz + " serijska številka " + ((X509Certificate) ks.getCertificate(aliaz)).getSerialNumber());
         System.out.println(aliaz + " Podatki o certifikatu " + ((X509Certificate) ks.getCertificate(aliaz)).getSubjectDN());
         System.out.println(aliaz + " Izdajatelj " + ((X509Certificate) ks.getCertificate(aliaz)).getIssuerDN());

          aliaz = aliases.nextElement();
          if(ks.isKeyEntry(aliaz)){
              break;
          }
      }
      
      PrivateKey privateKey = (PrivateKey) ks.getKey(aliaz, 
        privateKeyPass.toCharArray());
      
      
      // Load the SOAP request
      javax.xml.parsers.DocumentBuilderFactory dbf =
         javax.xml.parsers.DocumentBuilderFactory.newInstance();
      dbf.setNamespaceAware(true);
      dbf.setAttribute("http://xml.org/sax/features/namespaces", Boolean.TRUE);
      javax.xml.parsers.DocumentBuilder db = dbf.newDocumentBuilder();
      db.setErrorHandler(new org.apache.xml.security.utils.IgnoreAllErrorHandler());
      org.w3c.dom.Document doc = db.parse(new java.io.FileInputStream(new 
        File(fileName)));
      
// Look for the SOAP header
      Element headerElement = null;
      NodeList nodes = doc.getElementsByTagNameNS("http://schemas.xmlsoap.org/soap/envelope/","#data");
      if(nodes.getLength() == 0)
      {
         System.out.println("Adding a SOAP Header Element");
         headerElement = doc.createElementNS
           ("http://schemas.xmlsoap.org/soap/envelope/","Body");
         nodes = doc.getElementsByTagNameNS
          ("http://schemas.xmlsoap.org/soap/envelope/","Envelope");
         if(nodes != null)
         {
            Element envelopeElement = (Element)nodes.item(0);
            headerElement.setPrefix(envelopeElement.getPrefix());
            envelopeElement.appendChild(headerElement);
         }
      }
      else
      {
         System.out.println("Found " + nodes.getLength() + " SOAP Header elements.");
         headerElement = (Element)nodes.item(0);
      }
   
      // Create an XMLSignature instance       
      XMLSignature sig = new XMLSignature(doc,"",XMLSignature.ALGO_ID_SIGNATURE_RSA_SHA256);
      headerElement.appendChild(sig.getElement());
      // Specify the transforms
      Transforms transforms = new Transforms(doc);
      transforms.addTransform(Transforms.TRANSFORM_ENVELOPED_SIGNATURE);
      //transforms.addTransform(Transforms.TRANSFORM_C14N_WITH_COMMENTS);
      sig.addDocument("", transforms,   org.apache.xml.security.algorithms.MessageDigestAlgorithm.ALGO_ID_DIGEST_SHA256);
      // Add the certificate and public key information from the keystore;
      // this will be needed by the verifier
    
      X509Certificate cert = (X509Certificate)ks.getCertificate
       (certificateAlias);
      sig.addKeyInfo(cert);
      sig.addKeyInfo(cert.getPublicKey());
      System.out.println("Starting to sign SOAP Request");
      sig.sign(privateKey);
      
      System.out.println("Finished signing");
 
     FileOutputStream f = new FileOutputStream(new File(signatureFileName));
      XMLUtils.outputDOMc14nWithComments(doc, f);
      f.close();
      System.out.println("Wrote signature to " + signatureFileName);
   }
}

Zgodovina sprememb…

  • spremenilo: felix1 ()

DamijanD ::

felix1 si pogledal njihov c# primer? mislim, da boš tam iz kode lahko razbral kaj in kako je potrebno podpisat

MesecB ::

beno95 je izjavil:

Po moje si pozabil dodti "Content-Type", "text/xml; charset=utf-8"


Imam podobno? vprašanje:
Wamp ali Ubuntu server php 5.5.12, metoda echo enaka napaka:
naredil enka test:

Fatal error: Uncaught exception 'Exception' with message 'CODECURL: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

hvala za pomoč.

zipposi ::

@felix1: Jaz sem naredil hibridno Delphi + C#. Če želiš, mi pošlji mail, pa ti pošljem ZIP celote.

Visual Studio community edition je itak zastonj, tak da ga lahko namestiš.

PrimozHisof ::

PrimozHisof je izjavil:

kam se vnaša v XML znesek računa, če ga izda NEZAVEZANEC ZA DDV?
a) v polje OPROSCENIH DOBAV
b) v polje NEOBDAVCLJIVIH DOBAV
c) normalno s stopnjo DDV 0% (tudi to gre skozi)

lp


odgovor je a)
elemente, ki se tičejo DDV se izpusti

Kar se tiče sprememb, še ni konec. Popraviti bo treba tudi "virtualne datoteke", popravki bojo objavljeni v novembru ali decembru.
Poleg tega je med vprašanji in odgovori (št.193) še ena fora CHSEQ (Special_notes) pri naknadnih spremembah istega računa

Zgodovina sprememb…

grandibal ::

@Felix: Jaz uporabljam LibXml iz https://www.zlatkovic.com/libxml.en.html, če rabiš primer povej, pa ti pošljem.

Kako vam gre kaj preverjanje strežnikovega certifikata, jaz imam malo problemov s tem, pa me zanima, če je to prav predpisano da je treba naredit?

grandibal ::

MesecB je izjavil:


Fatal error: Uncaught exception 'Exception' with message 'CODECURL: error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure

Zgleda kot problem pri predstavitvi klienta serverju, zato ne vzpostavi povezave, verjetno ni vredu certifikat.

Zgodovina sprememb…

MesecB ::

hvala, se mi je zdelo.
vprašal strica googla, posodobil cacert.pem ...
ne gre
potem sem pa enostavno izklopil:
CURLOPT_SSL_VERIFYPEER => false
in echo mi deluje.
prijava prostora pa "napačni parametri vnosa" se bom še pomatral...

krho ::

CURLOPT_SSL_VERIFYPEER => false don't

Tvoj php ne najde datoteke s certifikati ponudnikov.
si.Mail odprto-kodni odjemalec elektronske pošte. - http://www.simail.si
Uredite si svojo zbirko filmov, serij in iger - http://xcollect.sf.net

Zupkoo ::

Je kdo delal z JSON, v JAVI in lahko prilepi primer za echo.. še vedno mi ne deluje samo echo pa obračam kodo gor in dol.

MesecB ::

Hvala, to sem že vse živo probaval, pa ne gre
npr:
CURLOPT_CAINFO => ime_ce.pem
CURLOPT_CAPATH => imemenik_ce

appendal certifikate v pem pa ne špila
hvala za nasvet, lp

trstenjak ::

Se je komu uspelo povezati v Javi s SSLSocketom in izvesti Echo?

Stepox ::

Vprašanje glede izračuna kontrolne številke za QR kodo in ostale kode.
V navodilih piše, da se izračuna kontrolno številko po modulu 10. Kot jaz to razumem gre za Luhn-ov algoritem (Mod10). Ampak po tem algoritmu za primer, ki je v navodilih kontrolna številka ni 1 ampak 7.
Ima še kdo podobne težave? Ali jaz to narobe razumem. Kako ste to rešili?

MH0 ::

To narobe razume nekdo, ki je za furs programiral ali tisti, ki je doumentacijo skup spacal.

        private string Mod10AlaFurs(string s) {
            int n = 0;
            for(int i = 0; i < s.Length; i++) n += Convert.ToInt32(s[i]);
            return (n % 10).ToString();
        }

Stepox ::

MHO, hvala.
Ja preveč kompliciram. To pa vsekakor ni noben checkdigit, saj tak algoritem ne prestane niti menjave številk.

mihelacko ::

Kaj je uspelo komu izračunati ZOI v Compact Framework .NET 3.5?
Najbolj me mantra to da SHA_256 ni podprt v "coredll.dll" in me zanima, če obstaja kakšna druga alternativa.

DamijanD ::

Za ZOI ne vem, ampak meni s full 3.5 ni uspelo nič kar se tiče sha256, tako da sem uporabil 4.0

zipposi ::

Pazi - Compact Framework, ne "navaden". Priporočal bi, sa se dobro pozanimaš glede TLS 1.2, ker mislim, da ni podprt v compact framwork-u. Kot alternativa lahko nekje narediš web servis (v framework-u 4.x), ki sprejme podpisan XML in ga pošlje k parazitom.. ops.. FURS-u.

Ni mi jasno zakaj so toliko so zakomplicirali to stvar, mamu jim.

mihelacko ::

zipposi je izjavil:

Pazi - Compact Framework, ne "navaden". Priporočal bi, sa se dobro pozanimaš glede TLS 1.2, ker mislim, da ni podprt v compact framwork-u. Kot alternativa lahko nekje narediš web servis (v framework-u 4.x), ki sprejme podpisan XML in ga pošlje k parazitom.. ops.. FURS-u.

Ni mi jasno zakaj so toliko so zakomplicirali to stvar, mamu jim.


ja vem da TLS 1.2 ni podprt. Tak da smo iskali druge alternative.

Zdaj me muči toti ZOI na NETCF, keri more biti obvezno na računu (tudi če nimaš interneta) in ga ne morem izračunati ...

grandibal ::

Še komu od včeraj zvečer javlja "Connection reset by peer"? Prej je delalo brez problema.

Zupkoo ::

grandibal je izjavil:

Še komu od včeraj zvečer javlja "Connection reset by peer"? Prej je delalo brez problema.


Jap.. Zgleda so spet zašuštral neki.. Saj bi pisov mail ma kaj ko rabjo 14 dni da odpišejo...

Edit: Že dela sam da se jih nakruli :)

Zgodovina sprememb…

  • spremenilo: Zupkoo ()

MH0 ::

Imamo tukaj kakšnega insiderja, da pojasni kaj se trenutno dogaja?

zipposi ::

A mi lahko kdo zaupa, kako validira xML-je glede na XSD? Ker FURS-ov servis samo javlja, ad "Sporočilo ni v skladu z XML shemo", si z njim ne morem pomagat, kar pa poskusim na internetu (google "XML validation XSD") ne deluje..

MesecB ::

XML sem validiral s tem:
http://www.corefiling.com/opensource/sc...
javlja pa napako tudi s primerom od fursa??
cvc-elt.1.a: Cannot find the declaration of element 'soapenv:Envelope'.

51M3K ::

http://www.freeformatter.com/xml-valida... oz. XML tools v Notepad++.
Loading...

prtenjam ::

Pozdravljen,

Kodo za preverjanje XML-a glede na shemo (validacijo) imaš spisano za .NET (https://github.com/MPrtenjak/SLOTax/blo...)
Matjaž Prtenjak
https://mnet.si

zhigatsey ::

Na naših pos blagajnah .NET odpade, zato se mučim z generiranjem ZOI-ja v C++ in OpenSSL knjižjico. Ne vem kaj delam narobe, da končni hash ni enak tistemu, ki ga sproducira .NET koda?

#include <iostream>
#include <string>
#include <vector>
#include <fstream>
#include <memory>

#include <openssl/err.h>
#include <openssl/pkcs12.h>
#include <openssl/md5.h>

#pragma comment( lib, "libeay32MTd.lib" )

void load_binary(const std::string filename, std::vector<unsigned char>& bytes)
{
	std::ifstream in(filename.c_str(), std::ios::ate | std::ios::binary);
	if (in.good())
	{
		size_t size = static_cast<size_t>(in.tellg());
		in.seekg(0, std::ios::beg);
		bytes.clear();
		bytes.resize(size);
		in.read((char*)&bytes[0], size);
	}
	else
	{
		throw std::runtime_error(std::string("Cannot load binary data from " + filename).c_str());
	}
	in.close();
}

std::string openssl_err()
{
	char *cstr = NULL;
	std::shared_ptr<BIO> err_bio(BIO_new(BIO_s_mem()), BIO_free);
	if (!err_bio.get())
	{		
		return "";
	}
	ERR_print_errors(err_bio.get());
	int len = BIO_get_mem_data(err_bio.get(), &cstr);
	if (len == 0 || cstr == NULL)
	{		
		return "";
	}
	std::string err(cstr);
	return err;
}

int main(int argc, char** argv)
{
	try
	{
		OpenSSL_add_all_algorithms();
		ERR_load_crypto_strings();

		// Digitalno potrdilo kot byte array in geslo
		std::string password("Geslo123#");
		std::vector<unsigned char> p12file;
		load_binary("10151095-1.p12", p12file);

		std::vector<unsigned char> zoifile;

		// ZOI za podpis		
		//10151095 // davčna
		//2015 - 08-07T13:05 : 24 // Datum in čas izdaje
		//145 // Invoice number
		//TRGOVINA1 // Business premise id
		//BLAG2 // Electronic device id
		//66.71 // Invoice amount
                // zoi.txt vsebina = "101510952015-08-07T13:05:24145TRGOVINA1BLAG266.71"
		load_binary("zoi.txt", zoifile); 
		
		const unsigned char* zoi = zoifile.data();
		long zoilen = zoifile.size();

		const unsigned char* data = p12file.data();
		unsigned int len = p12file.size();

		// Get the PKCS12 format data	
		PKCS12* p12 = d2i_PKCS12(NULL, &data, len);

		if (p12)
		{
			// parse the PKCS12 buffer, into private key, public cert and trusted certs
			X509* cert = NULL;
			EVP_PKEY* key = NULL;
			STACK_OF(X509)* ca = NULL;

			if (!PKCS12_parse(p12, password.c_str(), &key, &cert, &ca))
				throw std::runtime_error(openssl_err().c_str());

			PKCS12_free(p12);			
			
			unsigned char* signature = new unsigned char[RSA_size(key->pkey.rsa)];
			unsigned int siglen = 0;			

			if (RSA_sign(NID_sha256, zoi, zoilen, signature, &siglen, key->pkey.rsa) != 1)
				throw std::runtime_error(openssl_err().c_str());

			unsigned char md5digest[16];
			MD5(signature, siglen, (unsigned char*)&md5digest);

			char mdstr[33];
			for (int i = 0; i < 16; i++)
				sprintf(&mdstr[i * 2], "%02x", (unsigned int)md5digest[i]);

			std::cout << mdstr << std::endl;

			delete[] signature;		

			if (key)
				EVP_PKEY_free(key);

			if (cert)
				X509_free(cert);
		}
		else
		{
			throw std::runtime_error(openssl_err().c_str());
		}
	}
	catch (std::exception& ex)
	{
		std::cout << "Napaka: " << ex.what() << std::endl;
	}

	return 0;
}

vuego ::

Namesto sha_sign uporabi evp_signfinal
Je neka razlika v headerjih pred podpisom.

zhigatsey ::

vuego je izjavil:

Namesto sha_sign uporabi evp_signfinal
Je neka razlika v headerjih pred podpisom.


Aleluja! dela! Hvala za pravilno usmeritev!

zipposi ::

A ima kdo kak kos kode za Delphi 2010, ki (preverjeno) naredi pretvorbo ZOI iz HEX v string (ali int) za izračun QR kode?

ZOI: a7e5f55e1dbb48b799268e1a6d8618a3 -> desetiško: 223175087923687075112234402528973166755

V bistvu sem mislil, da je to enostavno, a ne najdem načina, da to pretvorim.

anarho ::

zipposi je izjavil:

A ima kdo kak kos kode za Delphi 2010, ki (preverjeno) naredi pretvorbo ZOI iz HEX v string (ali int) za izračun QR kode?

ZOI: a7e5f55e1dbb48b799268e1a6d8618a3 -> desetiško: 223175087923687075112234402528973166755

V bistvu sem mislil, da je to enostavno, a ne najdem načina, da to pretvorim.


ne vem za Delphi ampak v Javi je pretvorba trivialna:
BigInteger decimalZOI = new BigInteger(hexZOI, 16);


mogoc ti kej pomaga ...
lp

zipposi ::

Žal ne, a upam, da bo kak Delphijaš skočil na pomoč :)

Imam pa še nekaj vprašanj glede formiranja XML datoteke:

1. Če se račun izda znanemu kupcu (t.i. račun na firmo) - ta podatek se dejansko nikamor ne vpiše v XML, drži? Podatki o kupcu niso redmet XMLja?
2. Če je izdajatelj ni DDV zavezanec (npr. majhen s.p.), se XML kakorkoli razlikuje od XML-ja, ki ga izda podjetje? Vprašam, ker nimam pojma, čemu služijo polja " Pavšalno nadomestilo" in "Vrednost oproščenih dobav".

pix ::

zipposi je izjavil:

A ima kdo kak kos kode za Delphi 2010, ki (preverjeno) naredi pretvorbo ZOI iz HEX v string (ali int) za izračun QR kode?

ZOI: a7e5f55e1dbb48b799268e1a6d8618a3 -> desetiško: 223175087923687075112234402528973166755

V bistvu sem mislil, da je to enostavno, a ne najdem načina, da to pretvorim.


jaz sem si pomagal z unitom UBigIntsV4
http://www.delphiforfun.org/programs/li...

potem pa samo tako:

       i1:=TInteger.create(0);
       if i1.assignHex(ZOI) then CrtnaKoda:=i1.ConvertToDecimalString(false);  
      i1.free;
««
6 / 27
»»


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Davčne blagajne - PHP

Oddelek: Programiranje
116240 (1286) vsepocenv
»

C# davčno potrjevanje

Oddelek: Programiranje
164485 (3954) windigo
»

E-račun

Oddelek: Programiranje
217581 (4344) ivanhoe5x
»

PHP davčna blagajna

Oddelek: Programiranje
188186 (6210) brble
»

[JAVA] HTTPS client

Oddelek: Programiranje
173197 (1927) peterv6i

Več podobnih tem