private EncryptedTurnover EncryptTurnover()
        {
            var sum            = TaxData.Sum();
            var counter        = (Turnover.Value + sum) * 100;
            var valueBytes     = GetValueBytes((long)counter);
            var encryptedValue = AesCtr(valueBytes, encrypt: true);

            return(new EncryptedTurnover(encryptedValue));
        }
 private Receipt(ReceiptNumber number,
                 RegisterIdentifier registerIdentifier,
                 TaxData taxData,
                 CertificateSerialNumber certificateSerialNumber,
                 byte[] key,
                 LocalDateTime created = null)
 {
     Number                  = number ?? throw new ArgumentException("The receipt number has to be specified.");
     RegisterIdentifier      = registerIdentifier ?? throw new ArgumentException("The register identifier has to be specified.");
     TaxData                 = taxData ?? throw new ArgumentException("The tax data have to be specified.");
     CertificateSerialNumber = certificateSerialNumber ?? throw new ArgumentException("The certificate serial number has to be specified.");
     Created                 = created ?? LocalDateTime.Now;
     Suite = "R1-AT1";
     Key   = key;
 }
 public Receipt(
     ReceiptNumber number,
     RegisterIdentifier registerIdentifier,
     TaxData taxData,
     EncryptedTurnover encryptedTurnover,
     CertificateSerialNumber certificateSerialNumber,
     ChainValue chainValue,
     byte[] key,
     LocalDateTime created = null)
     : this(number, registerIdentifier, taxData, certificateSerialNumber, key, created)
 {
     EncryptedTurnover = encryptedTurnover;
     Turnover          = DecryptTurnover();
     ChainValue        = chainValue;
 }
 public Receipt(
     ReceiptNumber number,
     RegisterIdentifier registerIdentifier,
     TaxData taxData,
     CurrencyValue turnover,
     CertificateSerialNumber certificateSerialNumber,
     JwsRepresentation previousJwsRepresentation,
     byte[] key,
     LocalDateTime created = null)
     : this(number, registerIdentifier, taxData, certificateSerialNumber, key, created)
 {
     PreviousJwsRepresentation = previousJwsRepresentation;
     ChainValue        = ComputeChainValue();
     Turnover          = turnover ?? throw new ArgumentException("The turnover has to be specified.");
     EncryptedTurnover = EncryptTurnover();
 }