/// <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; } }
public IKsiSignature Extend(CalendarHashChain calendarHashChain, PublicationRecordInPublicationFile publicationRecord, IKsiSignatureFactory signatureFactory) { return(ExtendedKsiSignature); }
public IKsiSignature Extend(CalendarHashChain calendarHashChain, IKsiSignatureFactory signatureFactory) { return(ExtendedKsiSignature); }
/// <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; } } }
/// <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)); }
/// <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)); }
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)); }
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)); }