public void InitializeThisPartyKeyingMaterial(IIfcSecretKeyingMaterial otherPartyKeyingMaterial) { _isThisPartyKeyingMaterialInitialized = true; BuildKeyingMaterialThisParty(_thisPartyKeyingMaterialBuilder, otherPartyKeyingMaterial); _thisPartyKeyingMaterial = _thisPartyKeyingMaterialBuilder.Build( SchemeParameters.KasAlgoAttributes.Scheme, SchemeParameters.KasMode, SchemeParameters.KeyAgreementRole, SchemeParameters.KeyConfirmationRole, SchemeParameters.KeyConfirmationDirection ); }
public void Sample() { var l = 512; var modulo = 2048; var scheme = IfcScheme.Kts_oaep_partyV_keyConfirmation; var kasMode = KasMode.NoKdfKc; var idPartyU = new BitString("434156536964"); var idPartyV = new BitString("123456ABCD"); // Set the key and party id for party u's builder _secretKeyingMaterialBuilderPartyU .WithKey(null) .WithC(new BitString("61489C8AE69AA4B55AE296C98656751883F1F27C6D861019E9AAE9198EEFE4B6105DB0C7009A320DA52AFF699B816124CF986F8426AFFB48397054176A22EC46E81145ADEAB0B2D9C12725281115578D6A6FD8F8E605EDCC4DB6DC4068CB77E504C8529D248422E91ECF70A5F7CEDBB16EE3C503FF6E58C026228CAFB4F0A55B4C358665EA60A95522BEC50FA1538FAAC758EF7DB72A20B1E38C87C009D9C8A7D1D3F9999F465FD32C8A486C72D9407A9D136A6E68615F4EB3C6D463596DB867FC05EAED52B700EF4B7BF7D0005DBB9D30F57AA6CFBAC46E134E5E31BF106F0B38752A443C73CEF7D7C6C0C0B6A52F5E837A028196460068A0967E53E02FDE69")) .WithPartyId(idPartyU); // Partial party v secret keying material is needed for party U to initialize var secretKeyingMaterialPartyV = _secretKeyingMaterialBuilderPartyV .WithKey(new KeyPair() { PrivKey = new PrivateKey() { P = new BitString("DD03D104A0691B7CD884FE341A62283961814F082DA1725E76B08FF15530C110E42FD8CA4A663507F01DE2BEBCB321750C7E78C6CAE6C6B6CE1B6AD5710B9ABA43BAE73BD834B7DA4719EFF357417AE08601FDF0EB05CBCC6AB0FF01407C20DF113A003693A776096E64CB95B33166CE1DAB5292EBABF543F07BE34E3E253E13").ToPositiveBigInteger(), Q = new BitString("C45280305C0A92347463D05A94CA75BA5145EF0417855E5574319ACC80C135FE5E86C16FA172039502689BBC568315C737A59C7FD46D2886C221A35FA0959C102026DDAA92AC5FEEC5C372400C207718903A611DD155253C31541C0061C85975A8A7DCCD9BA60298C26ED5FAA959DADE210427F90A45B7FCF479509544215C9B").ToPositiveBigInteger(), D = new BitString("0720E1FD614A1A00B649FCC0147E3A88F0AE7AA3F5D7FD71A8A220DD83EBE88AB490CACB2F6BD071532D4F8C87C8C4C72A3B3298B7B6377344CCD14D32BC973434E4B63ED6F8690E9316B5CB73BBFB74143B85D66FA31A65EB913F8E2931AB173DA04F79EE5E97401D3C98BCACBA35CB2BE9EEBCD6A6DCD8B3C5322807F96D0AEA3C04AA3CD123735C1AF0E08F86D435912CF7188E435A7C224AE954329DEB4B77BE2A5C529EA8D20E059BD891F8732AA4AC279C555EF7F5709A7CD36CABEFB5B99E13D00B1A18CC2ED056E1BB6FB71B6AAEAD4CBE453EF04A412D92A6850EAC6765D091A3F9EF5844EB695E754512077D6C5D4ECDDEF80C4EC5A32CF8379541").ToPositiveBigInteger(), }, PubKey = new PublicKey() { E = new BitString("3BDEA4775FE1").ToPositiveBigInteger(), N = new BitString("A97E25EC26FBDB464F81CA5E1BBE412485961ECE7C0003E8EDFC63B6946F6B3E42B13235F7FC4EF52AD5719C67B8BF5F492CF3D7721AEAD0DEE44B867BF55C388BE3B2D4FD04737846032DA940B8596D423CE2D965A6FC724600411BCF2C5BA4931EE7E8943718366EC33D7079F58487161F9951CFD38CC7E3E29264677F744BD09C7D0CD1FC1B9B417D3C1CFF53A0B32354CEC86719379632BB1A4E9F3834159BF39FED2A7A2A16F8AA45524712AE6FCF31B87BCDB8C77434FCBEB061006D38F5C7FCB62CB44669A28EFAD975D31E30C64083168AC0F97922AA3C0FA214C2F1F492A16F6002A3CE003C64DBF1525C5EEFEEBE411E6721567858B70E0F4E6981").ToPositiveBigInteger() } }) .WithPartyId(idPartyV) .Build( scheme, kasMode, KeyAgreementRole.ResponderPartyV, KeyConfirmationRole.None, KeyConfirmationDirection.None, false); var fixedInfoParameter = new FixedInfoParameter() { L = l, }; // KTS KtsParameter ktsParam = null; var ktsConfiguration = new KtsConfiguration() { Encoding = FixedInfoEncoding.None, AssociatedDataPattern = "", HashAlg = KasHashAlg.SHA2_D224 }; if (KeyGenerationRequirementsHelper.IfcKtsSchemes.Contains(scheme)) { fixedInfoParameter.Encoding = ktsConfiguration.Encoding; fixedInfoParameter.FixedInfoPattern = ktsConfiguration.AssociatedDataPattern; ktsParam = new KtsParameter() { Encoding = ktsConfiguration.Encoding, AssociatedDataPattern = ktsConfiguration.AssociatedDataPattern, KtsHashAlg = ktsConfiguration.HashAlg }; } // MAC MacParameters macParam = null; MacConfiguration macConfiguration = new MacConfiguration() { KeyLen = 128, MacLen = 224, MacType = KeyAgreementMacType.Kmac_128 }; IKeyConfirmationFactory kcFactory = null; if (KeyGenerationRequirementsHelper.IfcKcSchemes.Contains(scheme)) { macParam = new MacParameters( macConfiguration.MacType, macConfiguration.KeyLen, macConfiguration.MacLen); kcFactory = _keyConfirmationFactory; } // Build keying material from party u var initializedKeyingMaterialPartyU = _secretKeyingMaterialBuilderPartyU.Build( scheme, KasMode.NoKdfKc, KeyAgreementRole.InitiatorPartyU, KeyConfirmationRole.Recipient, KeyConfirmationDirection.Unilateral); // Initialize Party V KAS _schemeBuilderPartyV .WithSchemeParameters(new SchemeParametersIfc( new KasAlgoAttributesIfc(scheme, modulo, l), KeyAgreementRole.ResponderPartyV, kasMode, KeyConfirmationRole.Provider, KeyConfirmationDirection.Unilateral, KasAssurance.None, idPartyV )) .WithFixedInfo(_fixedInfoFactory, fixedInfoParameter) .WithKts(_ktsFactory, ktsParam) .WithKeyConfirmation(kcFactory, macParam) .WithEntropyProvider(_entropyProvider) .WithRsaSve(_rsaSve) .WithThisPartyKeyingMaterialBuilder(_secretKeyingMaterialBuilderPartyV); var kasPartyV = _kasBuilderPartyV .WithSchemeBuilder(_schemeBuilderPartyV) .Build(); kasPartyV.InitializeThisPartyKeyingMaterial(initializedKeyingMaterialPartyU); kasPartyV.Scheme.ThisPartyKeyingMaterial = secretKeyingMaterialPartyV; var expectedDkm = new BitString("ACEC7886E4FD2CDC5763ACCBDAA5CBEBC1704CDD05B2606256535777CF1C8E6AD335559AB2CBC63551650CA8E0C7CE2895D53E36927B7C02862B52AA327E4164"); var resultPartyV = kasPartyV.ComputeResult(initializedKeyingMaterialPartyU); Console.WriteLine(resultPartyV.Dkm.ToHex()); Assert.AreEqual(expectedDkm.ToHex(), resultPartyV.Dkm.ToHex()); }