YACA: yaca_key_derive_dh/_kdf output tests 84/82784/7
authorDariusz Michaluk <d.michaluk@samsung.com>
Fri, 5 Aug 2016 15:11:08 +0000 (17:11 +0200)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Thu, 11 Aug 2016 09:10:51 +0000 (02:10 -0700)
Change-Id: I3902d2bb53b2d49fee05d32cec4a434a457805ac

src/yaca/test-vectors/key_derive_dh.txt [new file with mode: 0644]
src/yaca/test-vectors/key_derive_kdf.txt [new file with mode: 0644]
src/yaca/yaca-test-common.cpp
src/yaca/yaca-test-common.h
src/yaca/yaca-test-key.cpp
src/yaca/yaca-test-vector.cpp
src/yaca/yaca-test-vector.h

diff --git a/src/yaca/test-vectors/key_derive_dh.txt b/src/yaca/test-vectors/key_derive_dh.txt
new file mode 100644 (file)
index 0000000..83035c7
--- /dev/null
@@ -0,0 +1,42 @@
+prv_key_type=EC_PRIV
+prv_key=3077020101042054416922f17990cac5dc1fa3addeceb499986218b17305b514f68a341c592052a00a06082a8648ce3d030107a14403420004d9b80c99e26a0400f9d59128658723ac9e8bc5521a739bd2291045f080f16ae5075a467531aeae3e09dc789e77e16738fa74a7eedfb99bfec62300665d24ac9c
+pub_key_type=EC_PUB
+pub_key=2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d466b77457759484b6f5a497a6a3043415159494b6f5a497a6a30444151634451674145616e39553970742f3249783643716f4b77714b49664c6941646c33680a5935495a4b627478766235327435422f6e58776c344358795a61517243575762366c616d6d4f485634446a327865712b6f5a6c3047334d424f513d3d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a
+secret=31f51c5456ce1ceb8c7e5cb9b7a9cd9e5f1d9330775f010843464bbbf05a5f06
+
+prv_key_type=EC_PRIV
+prv_key=307402010104201301254092b3d581a88729fa2c642017059869b6c09c381564d731300bd4d3d9a00706052b8104000aa144034200041eb1f657d03dc01360c3b93e912c8db3ac8ddaa26bbe0b06782ba39c94f445704aacbf37b1a2c315ddf0c078a51984106218b38a391e6d819e4b6c4be5f5adb7
+pub_key_type=EC_PUB
+pub_key=2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d465977454159484b6f5a497a6a3043415159464b34454541416f44516741455368355874535865356b4761736d49694a4e3969534d38755a746168594a65480a76572b4e5162623132686b784e4d435244346e7059625a524e6f6a786454774234563473757175565232454a35376b5043634a4d30673d3d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a
+secret=80fe279345aef9ce96ec8656751ac6fafcf72e1670923d29855355360aa54a36
+
+prv_key_type=EC_PRIV
+prv_key=3081a4020101043064b0194fa4868d61bc8f2594458799c4bada257d101971ff9f98ac3dfca73492f6a475afbcc68d43d439bf4fa36af4dca00706052b81040022a16403620004bad07cb6e419285aca783117ec62422a16d440fbdfd04b632139d2c895c5bcae7b94cb15a9e9b802dc2a985252eebdd1764a92f5ec5d60c2e08194455c6eefed6b8d5fea1c9d33253846e998672aa848a7976918ee33793985a7de74dfe10d4d
+pub_key_type=EC_PUB
+pub_key=2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d485977454159484b6f5a497a6a3043415159464b34454541434944596741454c533468346d4b67422b374b6e726f7768413236705a4b6d6958534e504258760a52724a6a772b4d7154655244777436624f466163376b6d6b57627655775436514773636130697a48696e494c617a4a4f3731744c644c6e5a43743572657363470a45384c78484c523841473651626c4d316a49364b506e79354274524332504d320a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a
+secret=7983baa7270e2941b0fa138296ee595be28e4cc2967230fe9b28902cbcb390f01121362cc005b58026c80361e33dbf48
+
+prv_key_type=EC_PRIV
+prv_key=3081dc020101044200e62cf1d6d24844010d4efa483d6252b890de0338974894d2d27810f9b7d17c36f7d5a05682bbe0b3bd056a0f935cb7182f7af8ebefe2b19dc4f872ef00d149d19da00706052b81040023a18189038186000401a222fcc388de7f8c6eb6a6dba8b4ce2c305417068e3efc62d0e0f093d58d86e292bfb79d65ed74a336af8eee04aca058bc8bad20f29ba8e0b2a6c58b8987c2bc0901868051171bb334da4729376aab6d163e0ae02ec0fe3d89f1341d113ff65760fecb49f04e9cfa2fec7571b0ae3380964c90181a8df629c221a29a34722416379608
+pub_key_type=EC_PUB
+pub_key=2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d4947624d42414742797147534d343941674547425375424241416a41344747414151424949556245474f4f516c7631716d41676c72797a53556f6d685a74570a4a353439316a5658324f74614e756f4b4e476572636f34686744332f38417536584970686f54524a4e64764f5a2b7a4567536d675432384878574d416d474a550a3365753255336558686c634f68556b5666705a7276577653395a30767a764f797131385966494663486148483138646d437131764845506e2b4c7a34544c2b710a30337a344c705a7a7543326b5a744f6767396b3d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a
+secret=003fd7740ffa65986a59d9623918f2946bfad7c234f30fdf6d0db8cc21bd3a48aca01df27b9f58ffc9da0d86984f4d251759ec9ebcb626dcf16bcd50ad5ff4abbe47
+
+prv_key_type=DH_PRIV
+prv_key=3082014b0201003082012c06072a8648ce3e02013082011f02818100b10b8f96a080e01dde92de5eae5d54ec52c99fbcfb06a3c69a6a9dca52d23b616073e28675a23d189838ef1e2ee652c013ecb4aea906112324975c3cd49b83bfaccbdd7d90c4bd7098488e9c219a73724effd6fae5644738faa31a4ff55bccc0a151af5f0dc8b4bd45bf37df365c1a65e68cfda76d4da708df1fb2bc2e4a437102818100a4d1cbd5c3fd34126765a442efb99905f8104dd258ac507fd6406cff14266d31266fea1e5c41564b777e690f5504f213160217b4b01b886a5e91547f9e2749f4d7fbd7d3b9a92ee1909d0d2263f80a76a6a24c087a091f531dbf0a0169b6a28ad662a4d18e73afa32d779d5918d08bc8858f4dcef97c2a24855e6eeb22b3b2e5021500f518aa8781a8df278aba4e7d64b7cb9d494623530416021474451e912e31a153923bb508c1ed934cc1abc673
+pub_key_type=DH_PUB
+pub_key=2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d494942747a43434153774742797147534d342b4167457767674566416f4742414c454c6a356167674f416433704c6558713564564f7853795a2b382b77616a0a787070716e637053306a746859485069686e5769505269594f4f38654c755a5377425073744b36704268456a4a4a6463504e536267372b73793931396b4d53390a634a68496a7077686d6e4e7954762f572b75566b527a6a366f7870503956764d774b46527231384e794c533952623833337a5a63476d586d6a50326e6255326e0a434e386673727775536b4e78416f4742414b5452793958442f5451535a32576b51752b356d51583445453353574b785166395a41625038554a6d30784a6d2f710a486c7842566b7433666d6b5056515479457859434637537747346871587046556635346e536654582b39665475616b75345a436444534a6a2b41703270714a4d0a43486f4a48314d6476776f426162616969745a69704e474f63362b6a4c58656457526a51693869466a30334f2b5877714a4956656275736973374c6c416855410a395269716834476f3379654b756b35395a4c664c6e556c4749314d4467595141416f474152626365524f4471555762373855665137485849617038727362536f0a46495a56353770664c6b375763477663474965706b694554746a6362305578627934445571435a41443735757078484c43676e5a5841542b714f394736374f330a5a755068374564386a3651705950365461525036704b426d5852536e522b4736427268464e3233744e4655337570663238496b53424a3250713668416f6f77320a514472355231444e79544963674d343d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a
+secret=639400312876b08c4e4e4663dc1d5182b0880240ce8a4b17f1b083793e96a3931df22209acdeb9df2503b1c8c4764c1ba187aa029e164315fdc25c987e4fec4be2750a591218892ac7c72d6e7756aedc1f753c3dc692e5b6f9bf46c4e6362269a4036db2108ca76270abb2ebde35b331901efc84b9d46af0bf984db80c0daf30
+
+prv_key_type=DH_PRIV
+prv_key=3082025d0201003082023606072a8648ce3e0201308202290282010100ad107e1e9123a9d0d660faa79559c51fa20d64e5683b9fd1b54b1597b61d0a75e6fa141df95a56dbaf9a3c407ba1df15eb3d688a309c180e1de6b85a1274a0a66d3f8152ad6ac2129037c9edefda4df8d91e8fef55b7394b7ad5b7d0b6c12207c9f98d11ed34dbf6c6ba0b2c8bbc27be6a00e0a0b9c49708b3bf8a317091883681286130bc8985db1602e714415d9330278273c7de31efdc7310f7121fd5a07415987d9adc0a486dcdf93acc44328387315d75e198c641a480cd86a1b9e587e8be60e69cc928b2b9c52172e413042e9b23f10b0e16e79763c9b53dcf4ba80a29e3fb73c16b8e75b97ef363e2ffa31f71cf9de5384e71b81c0ac4dffe0c10e64f0282010100ac4032ef4f2d9ae39df30b5c8ffdac506cdebe7b89998caf74866a08cfe4ffe3a6824a4e10b9a6f0dd921f01a70c4afaab739d7700c29f52c57db17c620a8652be5e9001a8d66ad7c17669101999024af4d027275ac1348bb8a762d0521bc98ae247150422ea1ed409939d54da7460cdb5f6c6b250717cbef180eb34118e98d119529a45d6f834566e3025e316a330efbb77a86f0c1ab15b051ae3d428c8f8acb70a8137150b8eeb10e183edd19963ddd9e263e4770589ef6aa21e7f5f2ff381b539cce3409d13cd566afbb48d6c019181e1bcfe94b30269edfe72fe9b6aa4bd7b5a0f1c71cfff4c19c418e1f6ec017981bc087f2a7065b384b890d3191f2bfa021d00801c0d34c58d93fe997177101f80535a4738cebcbf389a99b36371eb041e021c7b0394e5069fb96a8714f1f97d8de99245b5bdef5d33ba9d0b8b9f25
+pub_key_type=DH_PUB
+pub_key=2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d494944517a4343416a594742797147534d342b4167457767674970416f494241514374454834656b534f70304e5a672b716556576355666f67316b355767370a6e394731537857587468304b6465623646423335576c626272356f3851487568337858725057694b4d4a77594468336d75466f53644b436d62542b42557131710a77684b514e386e743739704e2b4e6b656a2b3956747a6c4c65745733304c62424967664a2b59305237545462397361364379794c7643652b616744676f4c6e450a6c77697a76346f78634a47494e6f456f595443386959586246674c6e464546646b7a416e676e5048336a487633484d513978496631614230465a68396d74774b0a5347334e2b54724d52444b44687a466464654759786b476b674d32476f626e6c682b692b594f616379536979756355686375515442433662492f454c4468626e0a6c32504a745433505336674b4b655037633846726a6e573566764e6a34762b6a483348506e655534546e473448417245332f344d454f5a50416f4942415143730a51444c76547932613435337a433179502f617851624e362b65346d5a6a4b3930686d6f497a2b542f34366143536b345175616277335a49664161634d537671720a63353133414d4b665573563973587869436f5a53766c365141616a5761746642646d6b51475a6b43537654514a7964617754534c754b646930464962795972690a5278554549756f6531416d546e5654616447444e74666247736c4278664c3778674f73304559365930526c536d6b58572b445257626a416c3478616a4d4f2b370a6436687644427178577755613439516f79506973747771424e78554c6a75735134595074305a6c6a33646e69592b523342596e766171496566313876383447310a4f637a6a514a30547a565a712b37534e62414752676547382f70537a416d6e742f6e4c2b6d32716b76587461447878787a2f394d476351593466627341586d420a7641682f4b6e426c733453346b4e4d5a48797636416830416742774e4e4d574e6b2f365a6358635148344254576b63347a72792f4f4a715a73324e7836774f430a41515541416f49424141326e6d646c6274526f6168772f795a616e6a51695948386a587a5a445249765655596b5775694b6f59373472784e342b7934543573610a35317a706d4e4f705166514f744c6d6a686236723377577859315555577651345532467736436b4f3275506e334b434d38517a36726d672b6e414b6c4a3071500a345258706552524e7a583049435a472b56504f534e796d72304631796b56346e526772787143624c59546a4b4e784f5a35757a37594843586a694d68576673760a48304a4357454833593675334e772b63396b734f44747a38643966317a4b36446e5365302b75747250324b6d62356b66563378535930713635616544504a32500a6d7869306668577955496b474b686b4149683531576c32773132686b615556724272614b7a32754d745a52767559615568674d624f68534241394d355a5168780a67666d4f4c4e444339316c445371786d562f5964766e6d4d6e697a59316c413d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a
+secret=52e3237faabe0c482d034521a33144e0913fd80fae435963abd7bb2726397183b64bcc73ebbd3472d3180f2e70033b7a37cbeffd3edc1bce370bd41b450118b2c25db551bdd521520fea7330907f6cce487bbbc8bb363ade0f21c2911a66dc2c1b9ac40e384a753b29d5669e9ae886f64373f86afc34b82454672318063b9411053e3d0cdbcc0504684a704d729ed7ef54b903d6d4f0b713d692d74448efef9ac90b424008c5b5e224463323cdcf21fafe0dc293d3ec6d780c25539d98d537b984ac3e86b106d59926cae2f5c87066d6d4f73486d98f39659c6922efe0aa56ed09333ee32eb81f256d765f5bd73ab6a4df833f7f1077d84e8012ddfecd7ac2a8
+
+prv_key_type=DH_PRIV
+prv_key=308202640201003082023906072a8648ce3e02013082022c028201010087a8e61db4b6663cffbbd19c651959998ceef608660dd0f25d2ceed4435e3b00e00df8f1d61957d4faf7df4561b2aa3016c3d91134096faa3bf4296d830e9a7c209e0c6497517abd5a8a9d306bcf67ed91f9e6725b4758c022e0b1ef4275bf7b6c5bfc11d45f9088b941f54eb1e59bb8bc39a0bf12307f5c4fdb70c581b23f76b63acae1caa6b7902d52526735488a0ef13c6d9a51bfa4ab3ad8347796524d8ef6a167b5a41825d967e144e5140564251ccacb83e6b486f6b3ca3f7971506026c0b857f689962856ded4010abd0be621c3a3960a54e710c375f26375d7014103a4b54330c198af126116d2276e11715f693877fad7ef09cadb094ae91e1a1597028201003fb32c9b73134d0b2e77506660edbd484ca7b18f21ef205407f4793a1a0ba12510dbc15077be463fff4fed4aac0bb555be3a6c1b0c6b47b1bc3773bf7e8c6f62901228f8c28cbb18a55ae31341000a650196f931c77a57f2ddf463e5e9ec144b777de62aaab8a8628ac376d282d6ed3864e67982428ebc831d14348f6f2f9193b5045af2767164e1dfc967c1fb3f2e55a4bd1bffe83b9c80d052b985d182ea0adb2a3b7313d3fe14c8484b1e052588b9b7d2bbd2df016199ecd06e1557cd0915b3353bbb64e0ec377fd028370df92b52c7891428cdc67eb6184b523d1db246c32f63078490f00ef8d647d148d47954515e2327cfef98c582664b4c0f6cc416590221008cf83642a709a097b447997640129da299b1a47d1eb3750ba308b0fe64f5fbd3042202202aaf96ac7710c515c4be2a4a291cd32ab8fd821520349b4b005c7d01f0291306
+pub_key_type=DH_PUB
+pub_key=2d2d2d2d2d424547494e205055424c4943204b45592d2d2d2d2d0a4d494944526a4343416a6b4742797147534d342b4167457767674973416f494241514348714f5964744c5a6d50502b37305a786c47566d5a6a4f37324347594e0a30504a644c4f375551313437414f414e2b504857475666552b76666652574779716a415777396b524e416c76716a76304b57324444707038494a344d5a4a64520a65723161697030776138396e375a4835356e4a6252316a414975437837304a3176337473572f775231462b51694c6c4239553678355a753476446d67767849770a66317850323344466762492f647259367975484b707265514c564a535a7a5649696737785047326155622b6b717a72594e486557556b324f3971466e746151590a4a646c6e3455546c4641566b4a527a4b7934506d7449623273386f2f655846515943624175466632695a596f5674375541517139432b596877364f57436c546e0a454d4e31386d4e313177464241365331517a44426d4b3853595262534a323452635639704f486636312b384a7974734a53756b6547685758416f494241442b7a0a4c4a747a4530304c4c6e64515a6d44747655684d70374750496538675641663065546f614336456c454e76425548652b526a2f2f542b314b72417531566234360a6242734d613065787644647a7633364d62324b5145696a34776f7937474b566134784e424141706c415a62354d636436562f4c643947506c36657755533364390a35697171754b686969734e32306f4c573754686b356e6d43516f3638677830554e4939764c35475474515261386e5a785a4f4866795766422b7a3875566153390a472f2f6f4f35794130464b3568644743366772624b6a747a4539502b464d6849537834464a59693574394b3730743842595a6e73304734565638304a46624d310a4f37746b344f77336639416f4e7733354b314c486952516f7a635a2b7468684c556a3064736b62444c324d48684a447744766a575239464931486c555556346a0a4a382f766d4d57435a6b744d44327a45466c6b434951434d2b445a4370776d676c3752486d585a41457032696d62476b6652367a6451756a434c442b5a5058370a30774f4341515541416f49424144633754717837716f41423876354a62515a614f70703735537352676d556462444c6667524264434d53457142616c6b5749710a544f6e666f716c4152786344754f477068504b49564a57356b57334e4a647a6e453862694f47595145366d68376b64387441384737444573346e695055446c370a7562306b726b324362642b2b62775a67775055652f7432466a3859774268576859335069426c5a4b32667158377855447063587169625a313679534a76516a420a677353614c306b48725665325674595a714e4e3535576c6671597543714171763832385a735143456d3930595a517966357055355174764566624c38636434590a6757354969537550453764722b65454c373053394c2b50544731574649563056674f49447a32464f474668354d674b4c6867664665764f3464424b34556a4f540a795a6844514974726b2f34314c434b4c756e4c2f3361305330554c46374f2f486965303d0a2d2d2d2d2d454e44205055424c4943204b45592d2d2d2d2d0a
+secret=168e1ede814b3c27e6aba6e83f00ec7a95501f0f2460eae47ef540e0ae4cf97086d08b3740d4c2984dda61632a19029c211db463392b1047620c21fdafad56639962cbd31c8da86bec1cf6f6e6503029bd170842c2b9e77930fb675f909ca80c6d1385d9c5c38c53a052ed9ee9bef570dabbac9826a1303685f5cde67e879fbdeba478477c08d7cb26ace1338e7fdc1b7a5073ed4ca4bd8e722c61348a74f2508718ad3d5de3332f43007ead772a4f2e373b2d4fa29f43bcd1f68f1a465b4b2e3fe6ea3a0405c98465ef460a6539bdacb6d42f5abf31bae8cb36f992e269bcb4a599c20c3a8455650a2eaab36dbde83368ef00037054d89325c6f633a2cfebfd
+
diff --git a/src/yaca/test-vectors/key_derive_kdf.txt b/src/yaca/test-vectors/key_derive_kdf.txt
new file mode 100644 (file)
index 0000000..8ff86ca
--- /dev/null
@@ -0,0 +1,35 @@
+kdf=X962
+algo=SHA256
+secret=96c05619d56c328ab95fe84b18264b08725b85e33fd34f08
+info=
+key_material=443024c3dae66b95e6f5670601558f71
+
+kdf=X962
+algo=SHA256
+secret=96f600b73ad6ac5629577eced51743dd2c24c21b1ac83ee4
+info=
+key_material=b6295162a7804f5667ba9070f82fa522
+
+kdf=X962
+algo=SHA256
+secret=22518b10e70f2a3f243810ae3254139efbee04aa57c7af7d
+info=75eef81aa3041e33b80971203d2c0c52
+key_material=c498af77161cc59f2962b9a713e2b215152d139766ce34a776df11866a69bf2e52a13d9c7c6fc878c50c5ea0bc7b00e0da2447cfd874f6cf92f30d0097111485500c90c3af8b487872d04685d14c8d1dc8d7fa08beb0ce0ababc11f0bd496269142d43525a78e5bc79a17f59676a5706dc54d54d4d1f0bd7e386128ec26afc21
+
+kdf=X962
+algo=SHA256
+secret=7e335afa4b31d772c0635c7b0e06f26fcd781df947d2990a
+info=d65a4812733f8cdbcdfb4b2f4c191d87
+key_material=c0bd9e38a8f9de14c2acd35b2f3410c6988cf02400543631e0d6a4c1d030365acbf398115e51aaddebdc9590664210f9aa9fed770d4c57edeafa0b8c14f93300865251218c262d63dadc47dfa0e0284826793985137e0a544ec80abf2fdf5ab90bdaea66204012efe34971dc431d625cd9a329b8217cc8fd0d9f02b13f2f6b0b
+
+kdf=X942
+algo=SHA224
+secret=16343907ebcdcee93c918e3b364dd9534071f20e92397e4e19d2a7fc26314ffd8dabe72fa0d9182438c5dc9004a0aae26bb6badee78df51c8e2e909e2556785b8a5d7c0e92e1b4ae67683ed533ef98fdd2f65896e3ec1c34a0e9964f0ff7705575879b016570b560af1362aec74a8ecf4c09033d587207d596cc144f80eaf320af3e53cdfa193c3e131b9e0ccfd0de5deb80c8949a83af7061ed7f365a6bb8dc47be52ebd29944de0a047898a2a412102368bfddabd20d4a0c0aa80c6b7f8f32f130f2543bb845bcf80a12fe70439e41b8652cf50124f20970f18801fcaa1f07067ac465a568fe201f9bc757e96135b13496b5b1835bbc1870bc88e06e41e23e
+info=
+key_material=f825b2790307c673c228dcfcf949e28fc741355ba6d90fa5
+
+kdf=X942
+algo=SHA384
+secret=1987755a21b47cb209d2c5b3084204766099142569ae6545f507527ccbdcbda5736c4bcbc5ccf54fab8f88684c2db5f7fda94716a34ab323f89c06fc6615eb4258df2c7ba8c1903fdd1d27f336f7533e12533902d5b94dfd708fdd57cd32563324f4610e0208d000e94e98a2b7a8e37fe0cbf6f8d138cf34916ade7b91a3874763204ffba66beffe36b9d32edfd27bb30836f0c5b6afda6b9627eb09106049564f78def2ef084c18e7de104771c0b1a95ecb20d02a1ba9d98cb71aceef6bea2f92cfba7a9418e0f1f070d7682aa43cf214be1bf150c615817be2beb28a64f1662c200374a0f6f1a0c6a104b49a85c5d40f0bb4f473f65c9983ec73d4ad36de22
+info=
+key_material=43f07538d7c41ac095dd0a3ec8702c1681722c57dd12a643
index cb10e3c..bb36c02 100644 (file)
@@ -144,6 +144,33 @@ KeyPtr import_key(yaca_key_type_e key_type,
     return wrap_ptr(key);
 }
 
+ChrPtr key_derive_dh(const KeyPtr &prv_key,
+                     const KeyPtr &pub_key,
+                     size_t *secret_len)
+{
+    char *secret;
+
+    YACA_SUCCESS(yaca_key_derive_dh(prv_key.get(), pub_key.get(), &secret, secret_len));
+
+    return wrap_ptr(secret);
+}
+
+ChrPtr key_derive_kdf(yaca_kdf_e kdf,
+                      yaca_digest_algorithm_e algo,
+                      const char *secret,
+                      size_t secret_len,
+                      const char *info,
+                      size_t info_len,
+                      size_t key_material_len)
+{
+    char *key_material;
+
+    YACA_SUCCESS(yaca_key_derive_kdf(kdf, algo, secret, secret_len, info, info_len,
+                                     key_material_len, &key_material));
+
+    return wrap_ptr(key_material);
+}
+
 KeyPtr key_derive_pbkdf2(const char *password,
                          const char *salt,
                          size_t salt_len,
index 447a03b..2f538d9 100644 (file)
@@ -141,6 +141,18 @@ KeyPtr import_key(yaca_key_type_e key_type,
                   const char *data,
                   size_t data_len);
 
+ChrPtr key_derive_dh(const KeyPtr &prv_key,
+                     const KeyPtr &pub_key,
+                     size_t *secret_len);
+
+ChrPtr key_derive_kdf(yaca_kdf_e kdf,
+                      yaca_digest_algorithm_e algo,
+                      const char *secret,
+                      size_t secret_len,
+                      const char *info,
+                      size_t info_len,
+                      size_t key_material_len);
+
 KeyPtr key_derive_pbkdf2(const char *password,
                          const char *salt,
                          size_t salt_len,
index fa32287..30c88a8 100644 (file)
@@ -834,6 +834,58 @@ RUNNER_TEST(T4260_yaca_key_import_x509, YacaTest)
     }
 }
 
+RUNNER_TEST(T4263_yaca_key_derive_dh, YacaTest)
+{
+    auto tvv = loadTestVector("key_derive_dh.txt");
+
+    for (const auto& tv : tvv) {
+        yaca_key_type_e prv_key_type;
+        Buffer prv_key_data;
+        yaca_key_type_e pub_key_type;
+        Buffer pub_key_data;
+        Buffer secret_data;
+
+        tv.get("prv_key_type", prv_key_type);
+        tv.get("prv_key", prv_key_data);
+        tv.get("pub_key_type", pub_key_type);
+        tv.get("pub_key", pub_key_data);
+        tv.get("secret", secret_data);
+
+        KeyPtr prv_key = import_key(prv_key_type, nullptr, prv_key_data.data(), prv_key_data.size());
+        KeyPtr pub_key = import_key(pub_key_type, nullptr, pub_key_data.data(), pub_key_data.size());
+
+        size_t secret_len;
+        ChrPtr derived_secret = key_derive_dh(prv_key, pub_key, &secret_len);
+
+        YACA_ASSERT_MSG(secret_data.size() == secret_len, "Compared secrets are not of equal length");
+        YACA_SUCCESS(yaca_memcmp(secret_data.data(), derived_secret.get(), secret_data.size()));
+    }
+}
+
+RUNNER_TEST(T4266_yaca_key_derive_kdf, YacaTest)
+{
+    auto tvv = loadTestVector("key_derive_kdf.txt");
+
+    for (const auto& tv : tvv) {
+        yaca_kdf_e kdf;
+        yaca_digest_algorithm_e algo;
+        Buffer secret;
+        Buffer info;
+        Buffer key_material;
+
+        tv.get("kdf", kdf);
+        tv.get("algo", algo);
+        tv.get("secret", secret);
+        tv.get("info", info);
+        tv.get("key_material", key_material);
+
+        ChrPtr derived_key_material = key_derive_kdf(kdf, algo, secret.data(), secret.size(),
+                                                     info.data(), info.size(), key_material.size());
+
+        YACA_SUCCESS(yaca_memcmp(key_material.data(), derived_key_material.get(), key_material.size()));
+    }
+}
+
 RUNNER_TEST(T4270_yaca_key_derive_pbkdf2, YacaTest)
 {
     auto tvv = loadTestVector("key_pbkdf2.txt");
index ae518e1..6c99dc4 100644 (file)
@@ -114,6 +114,11 @@ std::unordered_map<std::string, yaca_block_cipher_mode_e> str2bcm = {
     std::make_pair("CCM",  YACA_BCM_CCM)
 };
 
+std::unordered_map<std::string, yaca_kdf_e> str2kdf = {
+    std::make_pair("X942", YACA_KDF_X942),
+    std::make_pair("X962", YACA_KDF_X962)
+};
+
 } // anonymous namespace
 
 void TestVector::add(const std::string &key, const std::string &val)
@@ -163,6 +168,11 @@ void TestVector::get(const std::string &key, yaca_block_cipher_mode_e &val) cons
     val = str2bcm.at(value(key));
 }
 
+void TestVector::get(const std::string &key, yaca_kdf_e &val) const
+{
+    val = str2kdf.at(value(key));
+}
+
 void TestVector::reset()
 {
     m_data.clear();
index bf23477..1e34481 100644 (file)
@@ -55,6 +55,8 @@ public:
     void get(const std::string &key, yaca_encrypt_algorithm_e &val) const;
     /* special case for bcm */
     void get(const std::string &key, yaca_block_cipher_mode_e &val) const;
+    /* special case for kdf */
+    void get(const std::string &key, yaca_kdf_e &val) const;
 
     void reset();