示例#1
0
 public static Signature GenerateSignature(this PublicEntry publicEntry,
                                           ICryptoContext cryptoContext,
                                           IPrivateKey privateKey,
                                           SigningContext context)
 {
     return(GeneratePublicEntrySignature(publicEntry.Clone(), cryptoContext, privateKey, context));
 }
示例#2
0
        public static TransactionBroadcast Sign(this TransactionBroadcast transaction,
                                                ICryptoContext cryptoContext,
                                                IPrivateKey privateKey,
                                                SigningContext context)
        {
            var clone = transaction.Clone();

            if (transaction.Signature?.RawBytes.Length == cryptoContext.SignatureLength)
            {
                Logger.Debug("The transaction was already signed, returning a clone.");
                return(clone);
            }

            clone.Signature = null;
            var signatureBytes = cryptoContext.Sign(privateKey, clone.ToByteArray(),
                                                    context.ToByteArray()).SignatureBytes;

            clone.Signature = new Signature
            {
                RawBytes       = signatureBytes.ToByteString(),
                SigningContext = context
            };

            return(clone);
        }
示例#3
0
        public LedgerTests()
        {
            _testScheduler  = new TestScheduler();
            _fakeRepository = Substitute.For <IAccountRepository>();
            _hashProvider   = new HashProvider(HashingAlgorithm.GetAlgorithmMetadata("keccak-256"));
            _mapperProvider = new TestMapperProvider();

            _logger            = Substitute.For <ILogger>();
            _mempool           = Substitute.For <IMempool <PublicEntryDao> >();
            _deltaHashProvider = Substitute.For <IDeltaHashProvider>();
            _receipts          = Substitute.For <ITransactionRepository>();
            _synchroniser      = Substitute.For <ISynchroniser>();
            _genesisHash       = _hashProvider.ComputeUtf8MultiHash("genesis").ToCid();
            _synchroniser.DeltaCache.GenesisHash.Returns(_genesisHash);
            _executor        = Substitute.For <IDeltaExecutor>();
            _stateProvider   = Substitute.For <IStateProvider>();
            _storageProvider = Substitute.For <IStorageProvider>();
            _cryptoContext   = new FfiWrapper();
            _signingContext  = new SigningContext
            {
                NetworkType   = NetworkType.Devnet,
                SignatureType = SignatureType.TransactionPublic
            };

            _deltaIndexService = new DeltaIndexService(new InMemoryRepository <DeltaIndexDao, string>());
        }
示例#4
0
 public ProfileService(IUnitOfWork unitOfWork, IAuthenticatedUser authUser, IFileHelper fileHelper, ICryptoContext cryptoContext, IAuthTokenProvider authTokenProvider, IFormService formService)
     : base(unitOfWork, authUser)
 {
     _fileHelper        = fileHelper;
     _cryptoContext     = cryptoContext;
     _authTokenProvider = authTokenProvider;
     _formService       = formService;
 }
示例#5
0
 public TokenService(IUnitOfWork unitOfWork, ICryptoContext cryptoContext, DomainTaskStatus taskStatus, IOptions <JwtOptions> options, IAuthTokenProvider authTokenProvider)
 {
     _unitOfWork        = unitOfWork;
     _cryptoContext     = cryptoContext;
     _taskStatus        = taskStatus;
     _options           = options;
     _authTokenProvider = authTokenProvider;
 }
示例#6
0
        public KeySignerTests()
        {
            _keystore      = Substitute.For <IKeyStore>();
            _keyRegistry   = Substitute.For <IKeyRegistry>();
            _signature     = Substitute.For <ISignature>();
            _privateKey    = Substitute.For <IPrivateKey>();
            _cryptoContext = Substitute.For <ICryptoContext>();

            _cryptoContext.Sign(default, default, default).ReturnsForAnyArgs(_signature);
 /// <summary>Initializes a new instance of the <see cref="KeySigner"/> class.</summary>
 /// <param name="keyStore">The key store.</param>
 /// <param name="cryptoContext">The crypto context.</param>
 /// /// <param name="keyRegistry">The key registry.</param>
 public KeySigner(IKeyStore keyStore,
                  ICryptoContext cryptoContext,
                  IKeyRegistry keyRegistry)
 {
     _keyStore      = keyStore;
     _cryptoContext = cryptoContext;
     _keyRegistry   = keyRegistry;
     InitialiseKeyRegistry();
 }
示例#8
0
        public void Init()
        {
            _hashProvider = new HashProvider(HashingAlgorithm.GetAlgorithmMetadata("keccak-256"));

            _random = new Random(1);

            _randomFactory = Substitute.For <IDeterministicRandomFactory>();
            _randomFactory.GetDeterministicRandomFromSeed(Arg.Any <byte[]>())
            .Returns(ci => new IsaacRandom(((byte[])ci[0]).ToHex()));

            _producerId   = PeerIdHelper.GetPeerId("producer");
            _peerSettings = _producerId.ToSubstitutedPeerSettings();

            _previousDeltaHash = _hashProvider.ComputeUtf8MultiHash("previousDelta").ToCid();
            _zeroCoinbaseEntry = new CoinbaseEntry
            {
                Amount            = UInt256.Zero.ToUint256ByteString(),
                ReceiverPublicKey = _producerId.PublicKey.ToByteString()
            };

            _logger = Substitute.For <ILogger>();

            _cache = Substitute.For <IDeltaCache>();

            Delta previousDelta = new Delta();

            previousDelta.StateRoot = ByteString.CopyFrom(Keccak.EmptyTreeHash.Bytes);
            _cache.TryGetOrAddConfirmedDelta(Arg.Any <Cid>(), out Arg.Any <Delta>()).Returns(x =>
            {
                x[1] = previousDelta;
                return(true);
            });

            _dateTimeProvider = new DateTimeProvider();

            IDb             codeDb       = new MemDb();
            ISnapshotableDb stateDb      = new StateDb();
            ISpecProvider   specProvider = new CatalystSpecProvider();

            _cryptoContext = new FfiWrapper();
            _stateProvider = new StateProvider(stateDb, codeDb, LimboLogs.Instance);
            IStorageProvider  storageProvider = new StorageProvider(stateDb, _stateProvider, LimboLogs.Instance);
            KatVirtualMachine virtualMachine  = new KatVirtualMachine(_stateProvider,
                                                                      storageProvider,
                                                                      new StateUpdateHashProvider(),
                                                                      specProvider,
                                                                      new HashProvider(HashingAlgorithm.GetAlgorithmMetadata("keccak-256")),
                                                                      new FfiWrapper(),
                                                                      LimboLogs.Instance);

            _deltaExecutor = new DeltaExecutor(specProvider,
                                               _stateProvider,
                                               storageProvider,
                                               virtualMachine,
                                               _cryptoContext,
                                               _logger);
        }
示例#9
0
        public LocalKeyStoreTests(ITestOutputHelper output) : base(output)
        {
            _fileSystem = Substitute.For <IFileSystem>();
            _context    = new FfiWrapper();

            var logger = Substitute.For <ILogger>();

            _passwordManager = Substitute.For <IPasswordManager>();
            _passwordManager.RetrieveOrPromptPassword(default)
示例#10
0
        public void Init()
        {
            this.Setup(TestContext.CurrentContext);

            _fileSystem = Substitute.For <IFileSystem>();
            _context    = new FfiWrapper();

            var logger = Substitute.For <ILogger>();

            _passwordManager = Substitute.For <IPasswordManager>();
            _passwordManager.RetrieveOrPromptPassword(default)
示例#11
0
        public KeySignerTests()
        {
            _keystore      = Substitute.For <IKeyStore>();
            _keyRegistry   = Substitute.For <IKeyRegistry>();
            _signature     = Substitute.For <ISignature>();
            _privateKey    = Substitute.For <IPrivateKey>();
            _cryptoContext = new CryptoContext(_signature);

            _privateKey.Bytes.Returns(ByteUtil.GenerateRandomByteArray(32));

            _keystore.KeyStoreDecrypt(default).ReturnsForAnyArgs(_privateKey);
示例#12
0
 public LocalKeyStore(IPasswordManager passwordManager,
                      ICryptoContext cryptoContext,
                      IFileSystem fileSystem,
                      IHashProvider hashProvider,
                      ILogger logger)
 {
     _passwordManager = passwordManager;
     _cryptoContext   = cryptoContext;
     _fileSystem      = fileSystem;
     _hashProvider    = hashProvider;
     _logger          = logger;
 }
示例#13
0
 public AccountsService(IUnitOfWork unitOfWork,
                        IFormService formService,
                        IAuthTokenProvider tokenProvider,
                        ICryptoContext cryptoContext,
                        IEmailSender emailSender,
                        IAuthenticatedUser au)
 {
     _unitOfWork    = unitOfWork;
     _cryptoContext = cryptoContext;
     _tokenProvider = tokenProvider;
     _emailSender   = emailSender;
     _au            = au;
     _formService   = formService;
 }
示例#14
0
        public KatVirtualMachine(IStateProvider stateProvider,
                                 IStorageProvider storageProvider,
                                 IStateUpdateHashProvider blockhashProvider,
                                 ISpecProvider specProvider,
                                 IHashProvider hashProvider,
                                 ICryptoContext cryptoContext,
                                 ILogManager logManager)
            : base(stateProvider, storageProvider, blockhashProvider, specProvider, logManager)
        {
            _hashProvider  = hashProvider ?? throw new ArgumentNullException(nameof(hashProvider));
            _cryptoContext = cryptoContext ?? throw new ArgumentNullException(nameof(cryptoContext));

            AddCatalystPrecompiledContracts();
        }
示例#15
0
 /// <summary>
 ///     Note that there is a distinct approach to state and storage even as only together they form the 'state'
 ///     in the business sense. <see cref="IStorageProvider" /> needs to handle storage trees for various accounts
 ///     while <see cref="IStateProvider" /> handles the basic accounts state with storage roots only.
 /// </summary>
 /// <param name="specProvider">The network upgrade spec - defines the virtual machine version.</param>
 /// <param name="stateProvider">Access to accounts.</param>
 /// <param name="storageProvider">Access to accounts' storage.</param>
 /// <param name="virtualMachine">A virtual machine to execute the code on.</param>
 /// <param name="cryptoContext">Support for crypto operations.</param>
 /// <param name="logger">Logger for the execution details.</param>
 public DeltaExecutor(ISpecProvider specProvider,
                      IStateProvider stateProvider,
                      IStorageProvider storageProvider,
                      IKvm virtualMachine,
                      ICryptoContext cryptoContext,
                      ILogger logger)
 {
     _logger          = logger;
     _specProvider    = specProvider;
     _virtualMachine  = virtualMachine;
     _cryptoContext   = cryptoContext;
     _stateProvider   = stateProvider;
     _storageProvider = storageProvider;
 }
示例#16
0
 public ForgotPaswordService(IUnitOfWork unitOfWork,
                             IAuthTokenProvider authTokenProvider,
                             IEmailSender emailSender,
                             IAuthenticatedUser au,
                             IOptions <ResetPasswordOptions> options,
                             ICryptoContext cryptoContext)
 {
     _unitOfWork           = unitOfWork;
     _authTokenProvider    = authTokenProvider;
     _emailSender          = emailSender;
     _cryptoContext        = cryptoContext;
     _resetPasswordOptions = options.Value;
     _au = au;
 }
示例#17
0
        public Ledger(IAccountRepository accounts,
                      IDeltaHashProvider deltaHashProvider,
                      ILedgerSynchroniser synchroniser,
                      IMempool <MempoolDocument> mempool,
                      ILogger logger)
        {
            Accounts      = accounts;
            _synchroniser = synchroniser;
            _mempool      = mempool;
            _logger       = logger;

            _deltaUpdatesSubscription = deltaHashProvider.DeltaHashUpdates.Subscribe(Update);
            LatestKnownDelta          = _synchroniser.DeltaCache.GenesisHash;
            _cryptoContext            = new FfiWrapper();
        }
示例#18
0
        private static Signature GeneratePublicEntrySignature(PublicEntry publicEntry,
                                                              ICryptoContext cryptoContext,
                                                              IPrivateKey privateKey,
                                                              SigningContext context)
        {
            publicEntry.Signature = null;
            var signatureBytes = cryptoContext.Sign(privateKey, publicEntry.ToByteArray(),
                                                    context.ToByteArray()).SignatureBytes;

            return(new Signature
            {
                RawBytes = signatureBytes.ToByteString(),
                SigningContext = context
            });
        }
示例#19
0
        public static PublicEntry Sign(this PublicEntry publicEntry,
                                       ICryptoContext cryptoContext,
                                       IPrivateKey privateKey,
                                       SigningContext context)
        {
            var clone = publicEntry.Clone();

            if (publicEntry.Signature?.RawBytes.Length == cryptoContext.SignatureLength)
            {
                Logger.Debug("The transaction was already signed, returning a clone.");
                return(clone);
            }

            clone.Signature = GeneratePublicEntrySignature(clone, cryptoContext, privateKey, context);
            return(clone);
        }
示例#20
0
        public static bool Verify(this ICryptoContext crypto, ISignature signature, IMessage message, IMessage context)
        {
            ProtoPreconditions.CheckNotNull(message, nameof(message));
            ProtoPreconditions.CheckNotNull(context, nameof(context));

            var messageSize = message.CalculateSize();
            var contextSize = context.CalculateSize();
            var array       = ArrayPool <byte> .Shared.Rent(messageSize + contextSize);

            using (var output = new CodedOutputStream(array))
            {
                message.WriteTo(output);
                context.WriteTo(output);
            }

            var result = crypto.Verify(signature, array.AsSpan(0, messageSize), array.AsSpan(messageSize, contextSize));

            ArrayPool <byte> .Shared.Return(array);

            return(result);
        }
 public Ed25519VerifyPrecompile(ICryptoContext cryptoContext)
 {
     _cryptoContext = cryptoContext ?? throw new ArgumentNullException(nameof(cryptoContext));
 }
示例#22
0
 public PeerIdValidator(ICryptoContext cryptoContext)
 {
     _cryptoContext = cryptoContext;
 }
示例#23
0
 public TokenService(IUnitOfWork _unitOfWork, IOptions <JwtOptions> _options, ICryptoContext _cryptoContext)
 {
     unitOfWork    = _unitOfWork;
     options       = _options.Value;
     cryptoContext = _cryptoContext;
 }
示例#24
0
 public RegistrationService(IUnitOfWork _unitOfWork, ICryptoContext _cryptoContext, ITokenService _tokenService)
 {
     unitOfWork    = _unitOfWork;
     cryptoContext = _cryptoContext;
     tokenService  = _tokenService;
 }
示例#25
0
 public TransactionValidator(ILogger logger,
                             ICryptoContext cryptoContext)
 {
     _cryptoContext = cryptoContext;
     _logger        = logger;
 }