Exemple #1
0
        ValueTask <ISender> ILocalParty.CreateSenderAsync(IActivityMonitor monitor, ITrustedParty audience, TimeSpan validity, bool encrypt)
        {
            TrustedParty?p;

            Throw.CheckArgument((p = audience as TrustedParty) != null);
            return(CreateSenderAsync(monitor, p, validity, encrypt));
        }
 public KeyExchangeFailedEventArgs(IActivityMonitor monitor,
                                   ITrustedParty targetParty,
                                   KeyExchangeResultCode resultCode)
     : base(monitor)
 {
     Throw.CheckNotNullArgument(targetParty);
     Throw.CheckArgument(resultCode != KeyExchangeResultCode.Success);
     TargetParty = targetParty;
     ResultCode  = resultCode;
 }
Exemple #3
0
 public KeyExchangeRequiredEventArgs(IActivityMonitor monitor,
                                     ITrustedParty targetParty,
                                     ReadOnlyMemory <byte> exchangeData,
                                     OneTimePassword?oneTimePassword)
     : base(monitor)
 {
     Throw.CheckNotNullArgument(targetParty);
     TargetParty         = targetParty;
     ExchangeRequestData = exchangeData;
     OneTimePassword     = oneTimePassword;
 }
        /// <summary>
        /// Creates a key based on the configuration and the provided properties.
        /// </summary>
        /// <param name="monitor">The monitor to use.</param>
        /// <param name="kid">The <see cref="KeyBase.Kid"/>.</param>
        /// <param name="party">The target audience. Creation behavior may differ per party or it's key realm.</param>
        /// <param name="keyRequirement">The key requirement.</param>
        /// <param name="bestBefore">The <see cref="KeyBase.BestBefore"/>.</param>
        /// <param name="maxUseCount">The <see cref="KeyBase.MaxUseCount"/>. When 0, <see cref="KeyConfiguration.DefaultUseCount"/> is used.</param>
        /// <returns>The new key.</returns>
        public KeyBase CreateKey(IActivityMonitor monitor,
                                 string kid,
                                 ITrustedParty party,
                                 KeyRequirement keyRequirement,
                                 DateTime bestBefore,
                                 uint maxUseCount)
        {
            KeyBase?result = TryCreateKey(monitor, kid, party, keyRequirement, bestBefore, maxUseCount);

            if (result == null)
            {
                throw new CKException($"Unable to create key for '{keyRequirement}'.");
            }
            monitor.Info($"Key created: {result.GetType().Name} '{result.Kid}', best before '{result.BestBefore:O}'.");
            return(result);
        }
        KeyBase?TryCreateKey(IActivityMonitor monitor,
                             string kid,
                             ITrustedParty party,
                             KeyRequirement keyRequirement,
                             DateTime bestBefore,
                             uint maxUseCount)
        {
            if (bestBefore.Kind != DateTimeKind.Utc)
            {
                throw new ArgumentException("Must be UTC kind.", nameof(bestBefore));
            }
            var now   = Clock.UtcNow;
            var delta = bestBefore - now;

            if (delta <= TimeSpan.Zero)
            {
                throw new ArgumentOutOfRangeException($"Best before is {bestBefore:O} in the past (now is {now:O}).", nameof(bestBefore));
            }

            KeyBase?result;

            if (keyRequirement.KeyType == KeyType.Ec)
            {
                KeyConfig.ECKeys.Apply(now, delta, ref bestBefore, ref maxUseCount);
                result = ECKey.Create(monitor, Clock, kid, keyRequirement, bestBefore, maxUseCount);
            }
            else if (keyRequirement.KeyType == KeyType.Rsa)
            {
                Debug.Assert(keyRequirement.KeySizeInBits != null);
                KeyConfig.RSAKeys.Apply(now, delta, ref bestBefore, ref maxUseCount);
                result = RSAKey.Create(monitor, Clock, kid, keyRequirement.Operations, keyRequirement.KeySizeInBits.Value, bestBefore, maxUseCount);
            }
            else
            {
                Debug.Assert(keyRequirement.KeySizeInBits != null);
                KeyConfig.SecretKeys.Apply(now, delta, ref bestBefore, ref maxUseCount);
                result = new SymmetricKey(Clock, kid, keyRequirement.Operations, keyRequirement.KeySizeInBits.Value, bestBefore, maxUseCount);
            }
            return(result);
        }
 internal VerifyResult(ITrustedParty issuer, ReadOnlyMemory <byte> payload, in KeyUsageInfo keyUsage, bool enc)