Research prototype, open source

Prove what your
invoices add up to.
Show none of them.

PRIVA-FISC turns a year of fiscal invoices into one small proof. A bank, a financier or a contracting authority checks it in seconds and never sees an invoice.

Runs on your own computerApache-2.0Montenegro first
Cash register 01
Invoices of the year 2026

NO.DATEBUYEREUR
000103 JANBlue Bay Hotel1,240.00
000203 JANOld Town Cafe386.50
000304 JANHarbour Yachting9,800.00
000407 JANPine Hill Winery2,115.20
000508 JANStone Bridge Build640.00
000608 JANSunny Coast Rentals3,072.00
000709 JANGreen Market154.90
.... and 993 more

Invoices
1,000
Numbered
1 to 1,000, no gap
Authority receipt
on every invoice
Total
at least 500,000.00 EUR

Proof valid10.7 KB

Invented invoices. Switch the view to see what leaves your computer.

Both signatures on every invoiceNumbering without a gapNo receipt used twiceOne year, one cash registerTotal above the thresholdNothing else leaves your computer

01 The problem

To prove one number, a company hands over the whole folder.

Fig. 1

A financier asks whether your invoices are real. A bank asks what you have sold this year, and to whom. Today the answer is a folder of invoices and ledgers.

Fig. 2

The other side does not want the folder either. Every document it collects has to be stored, protected and explained to a regulator. It only needed a yes or a no.

Fig. 3

The evidence already exists. Where invoices are fiscalized, the tax authority signs a receipt for each one and sends it back to the company's invoicing software. Nobody uses it after that.

02 How it works

Two signed files per invoice. One proof per year.

Step 1
request.xmlsigned by you
receipt.xmlsigned by the tax authority

Your files stay with you

Every invoice produces two signed files: your request to the tax authority and the authority's receipt. Where your invoicing software keeps them, PRIVA-FISC reads them on your own computer.

Step 2
PROOF 10.7 KB

One proof for the whole year

It checks both signatures on every invoice, that the numbering has no gap and that no receipt is used twice, adds up the totals and writes one proof of about 11 KB.

Step 3
$ pf.py verify proof/
PROOF VALID
sum of totals >= 500000.00 EUR
starts at ordinal 1 : yes

The other side checks it in seconds

One command. The proof shows that the statement holds. It does not contain the invoices, and it is bound to the verifier who asked for it.

The verifier sees
  • the year, the threshold, the number of invoices
  • which tax authority key signed the receipts
  • which company key signed the invoices
The verifier does not see
  • amounts of single invoices
  • customers
  • invoice codes

03 The audit

And if a company cheats?

The tax authority signs that an invoice was registered, not what was written on it. So a proof is followed by a short audit: the verifier draws points of the claimed total at random, the company must open the invoice at each point, and each opened invoice is compared with the tax authority's own record.

Fig. 4  25 invoices, one of them signed again with 500,000.00 more before tax
0
  1. Press a button. A point of the total lands on an invoice in proportion to its amount, so an invoice that carries most of the total is asked for most of the time.
tools/demo.py  part 2, as it raninvented invoices

    

The strip uses the amounts of that same run. The draws you make on this page are ordinary random numbers; in the tool the points come from a seed the verifier picks after the proof is made. What a proof does not say is written down in the repository.

04 Measured

On a laptop, not a data centre.

2to 3s
one invoice
7min
100 invoices in one proof
67min
1,000 invoices in one proof
10.7KB
the proof, whatever the number of invoices

Apple M3, 16 GB. Measurements in the repository

05 Who it is for

Three places where one number is enough.

Invoice finance

Registered, and offered once

A financier learns that the invoices it is offered are registered with the tax authority and were issued to the debtor it expects, and its own ledger tells it when one of them comes back a second time.

The statement"These ten invoices to this buyer add up to at least 80,000 EUR, and you have not seen them before."
Banks and lenders

This year so far

Annual statements describe last year. A lender checks what a company has invoiced this year, against receipts the tax authority signed, months before the next statements exist.

The statement"Our invoices of 2026 so far add up to at least 500,000 EUR."
Public tenders

Turnover behind a bid

A bidder backs the turnover it declares with a proof instead of a folder. The contracting authority checks it in seconds and files 11 KB.

The statement"We reached the turnover this tender asks for."

06 Where we are

A research prototype, published in the open.

We are looking for pilot partners: financiers, invoicing-software vendors and contracting authorities who want to try it on real records.

  • DoneCircuits, prover and verifier, open source under Apache-2.0
  • DoneAny number of invoices in one proof: built for up to 4,096, run with up to 1,000
  • DoneSpot checks by amount, compared with the tax authority's record
  • DoneStatements about one buyer: number and total of the invoices issued to it
  • DoneA shared ledger that refuses an invoice presented a second time, run on a local test network
  • DoneChecked against a signed invoice and receipt from the test environment of Montenegro's fiscalization system
  • Not yetRecords from the production system
  • Not yetThe shared ledger on a public network
  • Not yetConfirmation from invoicing-software vendors that both signed files are kept
  • Not yetAn independent security review
  • Not yetReady for production use

07 The team

Law, cryptography and software.

Founder

Nazlıcan Hilaloğulları

Lawyer and legal-tech practitioner, law graduate of Çukurova University. Co-founder of RoNa Legal in Montenegro, where she works on technology law, data governance and turning legal procedures into software. Leads PRIVA-FISC.

LinkedIn
Cryptography

Oğuz Yayla

Associate Professor at Middle East Technical University, Institute of Applied Mathematics, Department of Cryptography. Earlier at Hacettepe University and at the Radon Institute (RICAM) in Austria.

LinkedIn
Engineering

Cemal Özçelik

Software engineer in applied AI. Has built deep-learning and computer-vision software for optical instruments and now works on applied AI in insurance, in Istanbul.

LinkedIn
Law and regulation

Rohat Kahraman

Lawyer. Founding partner of RoNa Legal, cross-border counsel between Turkey and Montenegro, and founder of the online marketplace Fijaka.

LinkedIn