Exemple #1
0
        /// <summary>
        ///     Create new KSI instance.
        /// </summary>
        /// <param name="ksiService">KSI service</param>
        /// <param name="ksiSignatureFactoryForExtending">Signature factory to be used for creating an extended signature</param>
        public Ksi(IKsiService ksiService, IKsiSignatureFactory ksiSignatureFactoryForExtending = null)
        {
            if (ksiService == null)
            {
                throw new ArgumentNullException(nameof(ksiService));
            }

            _ksiService = ksiService;
            _ksiSignatureFactoryForExtending = ksiSignatureFactoryForExtending ?? new KsiSignatureFactory();
        }
        /// <summary>
        /// Create new block signer instance
        /// </summary>
        /// <param name="ksiService">KSI service</param>
        /// <param name="hashAlgorithm">Hash algorithm to be used when creating aggregation hash chains. If null then defult is used.</param>
        /// <param name="signatureFactory">Signature factory for creating uni-signatures.</param>
        /// <param name="maxTreeHeight">Max allowed aggregation tree height</param>
        public BlockSigner(IKsiService ksiService, HashAlgorithm hashAlgorithm = null, IKsiSignatureFactory signatureFactory = null,
                           uint?maxTreeHeight = null)
        {
            if (ksiService == null)
            {
                throw new ArgumentNullException(nameof(ksiService));
            }

            _hashAlgorithm = hashAlgorithm ?? HashAlgorithm.Default;

            if (_hashAlgorithm.HasDeprecatedSinceDate)
            {
                throw new HashingException(string.Format("Hash algorithm {0} is deprecated since {1} and can not be used.", _hashAlgorithm.Name,
                                                         _hashAlgorithm.DeprecatedSinceDate?.ToString(Constants.DateFormat)));
            }

            _ksiService       = ksiService;
            _signatureFactory = signatureFactory ?? new KsiSignatureFactory();
            _treeBuilder      = new TreeBuilder(_hashAlgorithm, maxTreeHeight);
        }
        /// <summary>
        ///     Create KSI service with service protocol and service settings.
        /// </summary>
        /// <param name="signingServiceProtocol">signing service protocol</param>
        /// <param name="signingServiceCredentials">signing service credentials</param>
        /// <param name="extendingServiceProtocol">extending service protocol</param>
        /// <param name="extendingServiceCredentials">extending service credentials</param>
        /// <param name="publicationsFileServiceProtocol">publications file protocol</param>
        /// <param name="publicationsFileFactory">publications file factory</param>
        /// <param name="ksiSignatureFactory">KSI signature factory used when creating a KSI signature</param>
        /// <param name="pduVersion">PDU version to be used</param>
        public KsiService(IKsiSigningServiceProtocol signingServiceProtocol,
                          IServiceCredentials signingServiceCredentials,
                          IKsiExtendingServiceProtocol extendingServiceProtocol,
                          IServiceCredentials extendingServiceCredentials,
                          IKsiPublicationsFileServiceProtocol publicationsFileServiceProtocol,
                          IPublicationsFileFactory publicationsFileFactory,
                          IKsiSignatureFactory ksiSignatureFactory = null,
                          PduVersion?pduVersion = null)
        {
            _signingServiceProtocol          = signingServiceProtocol;
            _signingServiceCredentials       = signingServiceCredentials;
            _extendingServiceProtocol        = extendingServiceProtocol;
            _extendingServiceCredentials     = extendingServiceCredentials;
            _publicationsFileServiceProtocol = publicationsFileServiceProtocol;
            _publicationsFileFactory         = publicationsFileFactory;
            _ksiSignatureFactory             = ksiSignatureFactory ?? new KsiSignatureFactory();
            PduVersion = pduVersion ?? DefaultPduVersion;

            _signingMacAlgorithm   = _signingServiceCredentials?.MacAlgorithm ?? DefaultMacAlgorithm;
            _extendingMacAlgorithm = _extendingServiceCredentials?.MacAlgorithm ?? DefaultMacAlgorithm;
        }
 /// <summary>
 ///  Create new block signer instance
 /// </summary>
 /// <param name="ksiService">KSI service</param>
 /// <param name="useBlindingMasks">If true then blinding masks are used when aggregating</param>
 /// <param name="randomSeed">Random seed for for blinding masks</param>
 /// <param name="hashAlgorithm">Hash algorithm to be used when creating aggregation hash chains. If null then defult is used.</param>
 /// <param name="signatureFactory">KSI signature factory for creating uni-signatures.</param>
 /// <param name="maxTreeHeight">Max allowed aggregation tree height</param>
 public BlockSigner(IKsiService ksiService, bool useBlindingMasks, byte[] randomSeed, HashAlgorithm hashAlgorithm = null, IKsiSignatureFactory signatureFactory = null,
                    uint?maxTreeHeight = null)
     : this(ksiService, hashAlgorithm, signatureFactory, maxTreeHeight)
 {
     if (useBlindingMasks)
     {
         if (randomSeed == null)
         {
             throw new BlockSigningException("Random seed cannot be null when using blinding masks.");
         }
         _previousHash     = new byte[_hashAlgorithm.Length + 1];
         _useBlindingMasks = true;
         _randomSeed       = randomSeed;
     }
 }
Exemple #5
0
 public IKsiSignature Extend(CalendarHashChain calendarHashChain, PublicationRecordInPublicationFile publicationRecord, IKsiSignatureFactory signatureFactory)
 {
     return(ExtendedKsiSignature);
 }
Exemple #6
0
 public IKsiSignature Extend(CalendarHashChain calendarHashChain, IKsiSignatureFactory signatureFactory)
 {
     return(ExtendedKsiSignature);
 }
Exemple #7
0
        /// <summary>
        ///     Extend signature to publication.
        /// </summary>
        /// <param name="calendarHashChain">extended calendar hash chain</param>
        /// <param name="publicationRecord">extended publication record</param>
        /// <param name="signatureFactory">signature factory to be used when creating extended signature</param>
        /// <returns>extended KSI signature</returns>
        public IKsiSignature Extend(CalendarHashChain calendarHashChain, PublicationRecordInSignature publicationRecord, IKsiSignatureFactory signatureFactory = null)
        {
            Logger.Debug("Extending KSI signature.");

            if (calendarHashChain == null)
            {
                throw new ArgumentNullException(nameof(calendarHashChain));
            }

            if (CalendarHashChain != null && !CalendarHashChain.AreRightLinksEqual(calendarHashChain))
            {
                throw new KsiException("Right links of signature calendar hash chain and extended calendar hash chain do not match");
            }

            if (publicationRecord == null)
            {
                publicationRecord = new PublicationRecordInSignature(false, false, calendarHashChain.PublicationData);
            }

            if (signatureFactory == null)
            {
                signatureFactory = new KsiSignatureFactory();
            }

            using (TlvWriter writer = new TlvWriter(new MemoryStream()))
            {
                foreach (ITlvTag childTag in this)
                {
                    switch (childTag.Type)
                    {
                    case Constants.CalendarHashChain.TagType:
                    case Constants.CalendarAuthenticationRecord.TagType:
                    case Constants.PublicationRecord.TagTypeInSignature:
                        break;

                    default:
                        writer.WriteTag(childTag);
                        break;
                    }
                }

                writer.WriteTag(calendarHashChain);
                writer.WriteTag(publicationRecord);

                try
                {
                    IKsiSignature signature = signatureFactory.CreateByContent(((MemoryStream)writer.BaseStream).ToArray(), InputHash);
                    Logger.Debug("Extending KSI signature successful.");

                    return(signature);
                }
                catch (TlvException e)
                {
                    Logger.Warn("Extending KSI signature failed: {0}", e);
                    throw;
                }
            }
        }
Exemple #8
0
 /// <summary>
 ///     Extend signature to publication.
 /// </summary>
 /// <param name="calendarHashChain">extended calendar hash chain</param>
 /// <param name="publicationRecord">extended publication record</param>
 /// <param name="signatureFactory">signature factory to be used when creating extended signature</param>
 /// <returns>extended KSI signature</returns>
 public IKsiSignature Extend(CalendarHashChain calendarHashChain, PublicationRecordInPublicationFile publicationRecord, IKsiSignatureFactory signatureFactory = null)
 {
     return(Extend(calendarHashChain, publicationRecord?.ConvertToPublicationRecordInSignature(), signatureFactory));
 }
Exemple #9
0
 /// <summary>
 ///     Extend KSI signature with given calendar hash chain.
 /// </summary>
 /// <param name="calendarHashChain">calendar hash chain</param>
 /// <param name="signatureFactory">signature factory to be used when creating extended signature</param>
 /// <returns>extended KSI signature</returns>
 public IKsiSignature Extend(CalendarHashChain calendarHashChain, IKsiSignatureFactory signatureFactory = null)
 {
     return(Extend(calendarHashChain, (PublicationRecordInSignature)null, signatureFactory));
 }
Exemple #10
0
 protected static Ksi GetStaticKsi(byte[] requestResult, ulong requestId = 0, IKsiSignatureFactory ksiSignatureFactory = null, PduVersion pduVersion = PduVersion.v2,
                                   HashAlgorithm signingMacAlgorithm     = null, HashAlgorithm extendingMacAlgorithm   = null)
 {
     return(new Ksi(GetStaticKsiService(requestResult, requestId, pduVersion, signingMacAlgorithm, extendingMacAlgorithm), ksiSignatureFactory));
 }
Exemple #11
0
 protected static Ksi GetStaticKsi(string requestResultFile, ulong requestId = 0, IKsiSignatureFactory ksiSignatureFactory = null, PduVersion pduVersion = PduVersion.v2,
                                   HashAlgorithm signingMacAlgorithm         = null, HashAlgorithm extendingMacAlgorithm   = null)
 {
     return(GetStaticKsi(File.ReadAllBytes(Path.Combine(TestSetup.LocalPath, requestResultFile)), requestId, ksiSignatureFactory, pduVersion, signingMacAlgorithm,
                         extendingMacAlgorithm));
 }