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, }); }
public KasAlgoAttributes(KasScheme kasScheme) { KasScheme = kasScheme; }
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); }