#include #include #include #include #include #include "rsa.h" #include "factotum.h" char testkey[] = "key proto=rsa role=sign hash=sha256 size=4096 ek=5 !dk=A477B444EBE51CE659C501FB3680C6F964D2B635504FAA2F429CC845BBB7F44246C1AC26E22FD8501D82DCE75D113905C28254ADF9933CB2FDDEAADEC413A53E83DABFAD765E5678798855D9A40959D78700BD7B9F65B5BD006D2DA31FA8B4121184495F3B7FABFFD88448F164B61C2AFAB6A9BE40A792D6D36E16DF1DDF52F5C2CBC267FC40BFCA2F46E6001B566C86165970B26942D5EEFB0AB02A3BEBA4DB208A2059968590694B29FB2CF7DE33F662FD3CD4317DC6C8899EA0EACE349D681E6ECF757E3AC22D64D99D815369FE0946E290ACCCF59A5F63D53CD81F005CB45C3A732BD0C552AB9426F6CE56A07A9502D7411B553C505BCFC60C722406AFA32ED8CD1DC35133ECC8BDF998306FE0862EB2C8C1918D402B9DC057063B52867DB7CB0E012A966E45A889E3DA3F586A84D9DC7C970F1726100E3152B327C1CB824BBEEEDD2CA8693827F3800C542ABF8AAED5723089177C2A574527A2168A5BECE7B25B288C2939382FE3D700541EC85C8AA3753A7FC9807A37E8119FFA9837ED1EED44D1A4E8ED20118999B68A6E5B1BF66FC315C699D4A2F2A70789EADE460951699162EC2D9D41385B5674557B56FD5603B4ACDF1D4A26D3C03C3E2DE3CD61F01EF2BAF690A89863ECD37ED66DA6E29996B8F987AE17C64EA4C9667D07F9F41A8EA2A52341F49FE9C5D4CC5B45F9C05FD2A16DBBB6559CB4E564DE98F8894D n=CD95A15626DE641FF036427A0420F8B7BE0763C2A46394BB1343FA572AA5F152D87217309ABBCE6424E39421345587473322E9D977F80BDFBD56559675188E8E24D16F98D3F5EC1697EA6B500D0BB04D68C0ECDA873F232C4088790BE792E11695E55BB70A5F96FFCEA55B2DBDE3A335B964542DD0D1778C88499C96E55727B3337EB301FB50EFBCBB189F80222C07A79BEFCCDF03938B6AB9CD5C34CAE68E11E8ACA86FFC26F4839DF479F835D5C0F3FBBC8C093DDD387AAC06492581C1C4C2260A8352DDC972B8BE1004E1A8447D8B989B34D8003300F73CCA8C0E26C073E173490FF6C4F6A7567930B481EC48993A438D11622A8B6472C3B78F8EAD085B8DCAF9CD50987DD6A0E12E3FF82C25C1F16F0FB2E2312DDDD9EEBA6AB71DFB53E20FFC91E294BEEB9F90AA2D4BFA984F349D200D57092815E3F42E09A3EEBA1C3D826B574795CE3E0B86DF77E97E8F2C041AB62392C774FFBEC33C2102A52B2F04EFEBCD66EB33F4523758F2AF24F5A2CCCBA6B9F069D7708F90D7A92C207EBA9CC1AB2BDDFDE86269AEEB50B9CC088C1EE6E879230331404C167540BE92B1E505C5C7BB8E3BDEA331CBB41B7EC0CADCF82E0ADA06FD50A653D613C3199272DD0922140C76D721962BBCA1C9D6D15065079854CA809F10CEEC7822459E05516CD576FF90711297A60F173367727B7996AE5FFEDA40DE8B3DB4BDE93807979FB37F !p=C4467A78EBB5CC2C23C36C35CDB2EEE7BEAE578D2927392A2F958107909602A3DE5CBF88116F575B2FD8F6A440F67F589475506A04E482DA5EDA045B833FFC6A0209DBE59D635B53E10AB025C1F8FF2373CE83CE7C5B7C48637E8F446669341384B47211426B726142449B5F83055438A864C401E5BA31234D969F12A0CACCB9DC729626ACC8E7A7A4B83AD74A675005777469F5DA37386D52931C269A1D62D40B2079B642871E8AFBE79BC0FF4AC179A624358DC1F40E7C171185A7F0A8954E355C7A563CF7289D29C89D5FDFC0EDDA11C689183DBA93C873215CA87C4DB3E5E6500CF044FB04C8D2506CBB2EA06D00CCC04696AE1EE780A0922B5AFA0BA2B1 !q=10C24527278A2898CC27D5BC421E6FA61F601E0631216147939F47CE7C33E29210BE200D90E138A6D4E24D9D6EA734AB5F85721303166A37583965DE879C7E170A1B2D0CD80985F3173E467B45360BD734C5CD1079FBC284172A72033A295080949986962F994FA6AB9378A8F38C9D42075F5A36564615ED37D5EF4118675A7FA7E8FFFB142FC5259F44715BE54974A367B685B51F0B9BE1314915B2B92FEAAA614E34C1C521E8015495A53AC56A5EEC1DC6202A12477FB273651F223E86D87008090E2B6E5F59AD015F12418658666924691DA3077BC9D6C22B2ED356CB9C07E6F7D3832618A2F7E60ABB0B7DAC1B17D1B7749E105C86B303B384E965E5D652F !kp=4E829763917BEB44DB1AF815857AC5F64C45BC9EDD42E3AA796F00696D08CDDB25BEB3033A2C8957ACBD2F74E6C8FFBD082EECF735283457592401BE347FFE90CD9D8B28A55AF154C06AACDBE730660E2E529B1F64F164E9C165D2E828F6E1A168482DA080F7C75A1A81D7BFCE0221B0435B819A5BE413A7B8A2A607738451E3F1C76F42AB838FDCA849B122EA8FB99BC961C3FBF0E2E35EEDD471A90A722788047363E28102D90464C30B19FFB780970F41AF0580C805CB3C6D68A99376A21F488B64227EC9437210B6A5598CB392573A4F6A09B24AA18361408B76981F14C25C20052CE864685054202B7E12A6920051E682A2AC0C5C99D9D411579737DAAD !kq=A0E297DE486185BADB1803DC14576307939AB9D50ADA0C48BC5F7E24A8587F13D3EE00823BA5530E62161C4DBFDEC66D2E9AAD8350D72EE01BC09EBEAF77EDA9FA9E7D4819F505EA78BC3E38FED3A4DEC76AE3D15FD74B5A77FDE01EFB263805928EA5A1C8F2FCA66F215322BBAC4C1379F9C870090738E54B38F8D750ACFE6318BCCC9D8E97649C5F5DD9D8992792ED7D3E9D312A090BA50C5736B3BE98CCCA0C8860DDCADF19A65F36323433FD28DAB76E0193E2AE637DED645E158B74EA99E6BD54D423935CE3405D7C0EA350A3F15D8AB61D14A45E7414D1C186746F737F0FB1881E3A861C7F06CD6A07E9A76A7E43ADF9209D11D9E9BD21C8C09F04D64F !c2=7C161C72855F80E38405AAB62EBC7B9A7BDE8085F03DCB2F223C1A08A311BE9B78238FD4011A0853043A38C60153337334AC9BFB5C1E3E2ECE465D5F360A77F9B13C2841FD2358E139C1F141127510B2C227EAD83ADA803D327DDF5BD277254922270745511F122C1978C66CD82E5216BC8ABD6F5806E89D988F9739C57D26096AD3B381BC16DD77EEB1DB5A4BF6974A97EDD00426D4E4A8739B6FC5DA2139ABAB21DB8D4F0EFBA633FBAA8B635D13554DEB74BB1C6610D076A8F035967E5A625C7B53873FAA2126BA4EAFFB72244838366DAACD86773787CD2E22DDA76BFB71E1831B6F4FD216CA8D7329F997E05D7F5992806CCEF18045C4CA07F27104143D"; void test_factotum_sign(void) { int rv, slen; char data[] = "test message"; uchar digest[SHA2_256dlen], *sgn; RSApriv *key; key = getrsakey(testkey, 1, nil); assert(key != nil); rv = factotum_write_ctl("key proto=rsa role=sign hash=sha256 size=%d ek=%B !dk=%B n=%B !p=%B !q=%B !kp=%B !kq=%B !c2=%B\n", mpsignif(key->pub.n), key->pub.ek, key->dk, key->pub.n, key->p, key->q, key->kp, key->kq, key->c2); assert(rv == 0); sha2_256((uchar*)data, strlen(data), digest, nil); sgn = factotum_sign(&key->pub, digest, SHA2_256dlen, &slen); assert(sgn != nil); rv = factotum_write_ctl("delkey proto=rsa n=%B\n", key->pub.n); assert(rv == 0); rsaprivfree(key); } void main(int argc, char *argv[]) { fmtinstall('B', mpfmt); ARGBEGIN{ }ARGEND test_factotum_sign(); exits(nil); }