예제 #1
0
        public ISecretKeyingMaterial Build(KasScheme scheme, KasMode kasMode, KeyAgreementRole thisPartyKeyAgreementRole,
                                           KeyConfirmationRole keyConfirmationRole, KeyConfirmationDirection keyConfirmationDirection)
        {
            var schemeRequirements = KasEnumMapping.GetSchemeRequirements(
                scheme,
                kasMode,
                thisPartyKeyAgreementRole,
                keyConfirmationRole,
                keyConfirmationDirection);

            ValidateDomainParameters(schemeRequirements.requirments, _domainParameters);
            ValidateEphemeralKey(schemeRequirements.requirments, _ephemeralKey);
            ValidateStaticKey(schemeRequirements.requirments, _staticKey);
            ValidateEphemeralNonce(schemeRequirements.requirments, _ephemeralNonce);
            ValidateDkmNonce(schemeRequirements.requirments, _dkmNonce);
            ValidatePartyId(schemeRequirements.requirments, _partyId);
            ValidateConsistentAlgorithm(schemeRequirements.kasAlgo, schemeRequirements.requirments, _domainParameters, _ephemeralKey, _staticKey);

            return(new SecretKeyingMaterial()
            {
                KasAlgorithm = schemeRequirements.kasAlgo,
                DkmNonce = _dkmNonce,
                DomainParameters = _domainParameters,
                EphemeralNonce = _ephemeralNonce,
                EphemeralKeyPair = _ephemeralKey,
                StaticKeyPair = _staticKey,
                PartyId = _partyId,
            });
        }
예제 #2
0
 public KasAlgoAttributes(KasScheme kasScheme)
 {
     KasScheme = kasScheme;
 }
예제 #3
0
        public static (SchemeKeyNonceGenRequirement requirments, KasAlgorithm kasAlgo) GetSchemeRequirements(KasScheme scheme, KasMode kasMode, KeyAgreementRole thisPartyKeyAgreementRole, KeyConfirmationRole keyConfirmationRole, KeyConfirmationDirection keyConfirmationDirection)
        {
            FfcMap.TryFirst(f => f.Value == scheme, out var ffcResult);
            EccMap.TryFirst(f => f.Value == scheme, out var eccResult);

            if (ffcResult.Key == FfcScheme.None && eccResult.Key == EccScheme.None)
            {
                throw new ArgumentException($"Unable to map {nameof(scheme)} to {nameof(ffcResult)} or {nameof(eccResult)}");
            }

            if (ffcResult.Key != FfcScheme.None)
            {
                return(
                    KeyGenerationRequirementsHelper.GetKeyGenerationOptionsForSchemeAndRole(
                        ffcResult.Key, kasMode, thisPartyKeyAgreementRole, keyConfirmationRole, keyConfirmationDirection),
                    KasAlgorithm.Ffc);
            }

            return(
                KeyGenerationRequirementsHelper.GetKeyGenerationOptionsForSchemeAndRole(
                    eccResult.Key, kasMode, thisPartyKeyAgreementRole, keyConfirmationRole, keyConfirmationDirection),
                KasAlgorithm.Ecc);
        }