go-peer/pkg/crypto/asymmetric/key_test.go
2026-05-24 07:43:11 +07:00

156 lines
16 KiB
Go

package asymmetric
import (
"bytes"
"testing"
"github.com/number571/go-peer/pkg/crypto/hashing"
)
func TestNew(t *testing.T) {
seed := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32}
privKey := NewPrivKeyFromSeed(seed)
if privKey.ToString() != tcPrivKey {
t.Fatal("get another key from seed")
}
}
func TestPanicNewPrivKey(t *testing.T) {
t.Parallel()
defer func() {
if r := recover(); r == nil {
t.Fatal("nothing panics")
}
}()
_ = NewPrivKeyFromSeed([]byte{1, 2, 3})
}
func TestPanicLoadPrivKey(t *testing.T) {
t.Parallel()
defer func() {
if r := recover(); r == nil {
t.Fatal("nothing panics")
}
}()
_ = LoadPrivKey(struct{}{})
}
func TestPanicLoadPubKey(t *testing.T) {
t.Parallel()
defer func() {
if r := recover(); r == nil {
t.Fatal("nothing panics")
}
}()
_ = LoadPubKey(struct{}{})
}
func TestInvalidPrivKey(t *testing.T) {
t.Parallel()
if pk := LoadPrivKey("123"); pk != nil {
t.Fatal("load priv key (1)")
}
if pk := LoadPrivKey(cPrivKeyPrefix); pk != nil {
t.Fatal("load priv key (2)")
}
if pk := LoadPrivKey(cPrivKeyPrefix + "x" + cKeySuffix); pk != nil {
t.Fatal("load priv key (3)")
}
}
func TestInvalidPubKey(t *testing.T) {
t.Parallel()
if pk := LoadPubKey("123"); pk != nil {
t.Fatal("load pub key (1)")
}
if pk := LoadPubKey(cPubKeyPrefix); pk != nil {
t.Fatal("load pub key (2)")
}
if pk := LoadPubKey(cPubKeyPrefix + "x" + cKeySuffix); pk != nil {
t.Fatal("load pub key (3)")
}
}
func TestPrivKey(t *testing.T) {
t.Parallel()
kemPrivKey := NewKEMPrivKey()
signerPrivKey := NewDSAPrivKey()
keychain := newPrivKey(kemPrivKey, signerPrivKey)
if !bytes.Equal(kemPrivKey.ToBytes(), keychain.GetKEMPrivKey().ToBytes()) {
t.Fatal("invalid kem priv key (1)")
}
if !bytes.Equal(signerPrivKey.ToBytes(), keychain.GetDSAPrivKey().ToBytes()) {
t.Fatal("invalid signer priv key (1)")
}
keychain = LoadPrivKey(keychain.ToString())
if !bytes.Equal(kemPrivKey.ToBytes(), keychain.GetKEMPrivKey().ToBytes()) {
t.Fatal("invalid kem priv key (2)")
}
if !bytes.Equal(signerPrivKey.ToBytes(), keychain.GetDSAPrivKey().ToBytes()) {
t.Fatal("invalid signer priv key (2)")
}
keychain = LoadPrivKey(keychain.ToBytes())
if !bytes.Equal(kemPrivKey.ToBytes(), keychain.GetKEMPrivKey().ToBytes()) {
t.Fatal("invalid kem priv key (3)")
}
if !bytes.Equal(signerPrivKey.ToBytes(), keychain.GetDSAPrivKey().ToBytes()) {
t.Fatal("invalid signer priv key (3)")
}
// fmt.Println("priv.key", len(keychain.ToString()))
}
func TestPubKey(t *testing.T) {
t.Parallel()
kemPubKey := NewKEMPrivKey().GetPubKey()
signerPubKey := NewDSAPrivKey().GetPubKey()
keychain := NewPubKey(kemPubKey, signerPubKey)
if !bytes.Equal(kemPubKey.ToBytes(), keychain.GetKEMPubKey().ToBytes()) {
t.Fatal("invalid kem pub key (1)")
}
if !bytes.Equal(signerPubKey.ToBytes(), keychain.GetDSAPubKey().ToBytes()) {
t.Fatal("invalid signer pub key (1)")
}
keychain = LoadPubKey(keychain.ToString())
if !bytes.Equal(kemPubKey.ToBytes(), keychain.GetKEMPubKey().ToBytes()) {
t.Fatal("invalid kem pub key (2)")
}
if !bytes.Equal(signerPubKey.ToBytes(), keychain.GetDSAPubKey().ToBytes()) {
t.Fatal("invalid signer pub key (2)")
}
keychain = LoadPubKey(keychain.ToBytes())
if !bytes.Equal(kemPubKey.ToBytes(), keychain.GetKEMPubKey().ToBytes()) {
t.Fatal("invalid kem pub key (3)")
}
if !bytes.Equal(signerPubKey.ToBytes(), keychain.GetDSAPubKey().ToBytes()) {
t.Fatal("invalid signer pub key (3)")
}
if keychain.GetHasher().ToString() != hashing.NewHasher(keychain.ToString()).ToString() {
t.Fatal("got invalid keychain hasher")
}
// fmt.Println("pub.key", len(keychain.ToString()))
}
const (
tcPrivKey = "PrivKey{F06B9AB7B3C08A5657C203569C2C6BD6C0C1BAC3CB3B48480E9A8900BCCFBD84013811C6CA11A824231E48692BF544BB7B298E2CA0CB2611665D15030DF55A8E767E7CB406243309803233C8313B0AE4623F183E4CCB5537D67FA7495D75F97B2BCA349708A4A0619119B380A195C0BC405133AA5B4AA2BE39E392E8146E6E2C390D66C1AE151EF73B4D01430F74C14A611B979DF8B0FCBC0123D8AAB5355ACFA11DD9D8B64E3931034387E2836878878CB7F9C51B437A0F7153CBD46543827F05543834160768F55648407C18CB5014DBA40F767D4888465596650770824E15028BA07778442A54E39D4CE948F2F323BA80ACFAF1A7BAD778B33CC6B80630624989DD287545F76576FC3893DCCAF453A966710C671AA4D725BB8003B108615370C69D357B2196678FB7A6050E47926A492245803FF7C5B3EEC5CB875B48208ACFDDD54E5FE062B39A95F6F870EBE18342759847C609CFD03F7342B99E3A0CB848C223903405A3137A92295F1425CE26B43506A89611354793505686C56A43679CDC9B75950FF8A65C8E5A2CAA1CA246FC8227E571A3D542CFB49D3FBB8FA8E3912FD5905336C985C66FD68C24F660C8642590602C413FAC17B0228B0CD737ED633E348A7D18B7C955C687161C4F7BAA5FD0C97966860D2A711BAC81C6910C2ABBE02252383FFAF70919BC349B54BD2573B10BF1853758CB1790C12D6C377C3882C0C42CB491948AE7B8B550CB4DC0C3D4E76CB49C270DFC6A71F553BB66051CC518B6D0831B5A402A79699C2A806576AB2CE66B6482741C5C96EC33C79BB1670717899FCBADC894BC8A36CB879AA50B1C1BE2BAAA9C84168703B2334228A3EB2259B961E5C100568CB9CAB05CF341A6B5D79162112DA7AC18AF6C47209362A7F2C30496885F24B95AD40FE312629A5129638719521819E513751A215A664859195C63F553403C31BE5FC323E6C135A6A752E8E5503EBAC55860C33D025F14C0C945AB8E93308C57C074A9408359015F52859D4C23BA5742CF71F29246977978E02D702C4AB11BA69769CFF93570A8F8304CC3526984AF757C314677361B27B842F646BCD4B327EBA94203874B76B380FAA005CCCA5531197DA5726E9399A51A97C3175DD2E0B318ECC2C0C2CF4CB378F7F20308B36399E6B9BA91527CCA959D78035BB27199D6C8C98A2B149CB206C977DB5245521C0334D37E03B4864E6C92A22B5C5B5C182BA22089F6AC22B0B4F6CC16A6C10F7701B19C951B47E93ACFDB7B41785E683B8AA237C49B1C91EB54110BFC625F2A1C8FB664FBF67EC2E4AC2F7B61FC4016E94A716804C8E5E67B7C163BBC2BC1AC7924533B020D62C7D6C7BAF292A52E90859DF1B0C0C82A165ABD654B59D285B51DB0310F9675110B2DB75AB11775714FA966CD76CEF27284D1EB62EAB4131E1B9FD1782490D16050C5AEDDC815D58472E4294DA1079BC1228F6FEB116D8B103FB09A6DA75474927CCF3923F02A9A18AC51F6A33B3B7827EB0051655579B71066FD9C8B5C5989E3B0282A4CA2BE1B65663201A8B4B505F3AC12E53447D09D1CC0163EB585F2AC4930AA6487146C6FFB0EC27A4773CA8B72C4BF9503144BEB5CCA298EC29A10FB6A9CE2F784659717DEB2B867FC2397DC212CF0AB35E57477F79502573F6CF6B41B58904ABC7CD5577C61D8A2A7117514B99050C2ABC6FA15BF06A34B98B0C42A40446B1434803078337F0B972215BCB23305ADA598CED873A60A602C4F5B753DC52A1951749E364C2CE7B1B5973FAE218857291E76C6B0BF490C96B921C321B93F687A6D5CC0483A3AC0713B2E0CA81277B3A14804C3019EDC318CF237B329D5A660A508FD4666FBE52C81CB846D99C76F8C5529546F0C2421C0351737B78F620704F21034B29449A4EB97E8E2CCDD68B40D71AE6DC050C74BBA32CC0A6470034CDA2DF7569AF9C38FB554538984555D4C55D3930754C1A03A075E76F654D6C9CD0E217E0A1755ED8954B71BC30921926B0AA44D17BBD5C891848724DDEC65ED8584BD45686DBA7434E5C59689053BA75D296465D4D89C99757A631BA70859675F9ACF19998E72010E596A6939C657A55939D6EBBFB6F8C3155425F42B9F34E42E851467F7903F8AF23D37971F0A17C02DE68D502114F2E85A30885BAF90B01E99AC66C96908902573102A30B7953B001F471A0ECECC27DFF70122845655AC28AE4C9D3B4AB1DF42C6E8287B7A160C710743C32692AED852C212C88FF837EB24307907A585C36B74002317117C35D610A6789137969900CA2223B948539A7467F32F1CBA2087C44C5F4CB52A0BBFCF998EDC96422AE7191A5A34641759C641C1841B5862F87C924B25D3172590803594C2B428D143151489844A49390660FC02BD35FC07FC2B17F61C70371B9698E8BEBEF37FA0229CE6E539C20118E1A58F0779A9C47C8EAD417FA0BA972A08239393692C804EF3C9799C5B2852881284134FAC031C2620C73CC66F9DBACBB3A99C68E6BB23A25FC266C7AFF1080324220D97614CF913002A9151C0641CD9A6EA61905253183A6986A1548EAA13663C22C766CC2CB8B1749A81848276BEDCF87D099111F560CC52E90B091704D5D50A2F495498F4692DC0272820A45D68946A7B9F39730D1E08B3B7938B310747EED2C116C005641C51CFBB43AFC799C1B5AF8A251AFAC28F45209E53844082055C511625FBA3C2D7D4ACB27A5F584168B878610E7084A46265FBC89933545F0266A83CDC25021320621703EC4C72B9EB8EDC6649C868BD88342CF4E03DFBE01C2A3372219A7280F7C6F19ABBC0F044C3D52DF52656A2512AD70775FA2B6A790620C495157BF854D1A3BC241B60954C1564C3B44DA91EBBE1CD44B2673B7C23BAB78C84F741DAAA1768067959A70F683B66962149786940E1B439D7B48F6D1A49ECD5766A6095146BB2A2490EC2874643D9AEC798195135C1A253301F9C900034C2F054123AA6C65698B36DEC6B03B20E9218B36F6A29A1A29823F5C343925E10CB153B118365182CBCDCCE6029BB86E93379C076914BC0F8EC302D30461AF70BD41A0AF42B8B02495D3CA307857CC1EB8C586C023A8A9301B7CBBD11134A68C26B79E50817A195D026802EE31F9806A0F0522BC69B0779C360E2D91FD72773F76C364443AA69C24640FBA9BDF25BFD996F1B2051FD8B427E9A158A8688A6C37027B8690575A9A8C829B518CB05B55F8363B7445671B8519F771447EB25BCA0337451644C87B003A86B666AB115E8EF8F841655AEA8D52C5640B73C636ABBEB1CFCF3A18C128194EA649ED0856BF2BC25822831EF54264BEE3F9774934802FFCEB9E8B4FD82E6B01CC26E0102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20B0EAD780AF27B7F974532CD85BF3F86010B571826C9FABA88183AE27B97463099A6CC979D59AE1AA23D359B44A03983CAD23965FD424EAA938492D7FC3BDCB76C6EBC350335E2EF5EE74F8069451943DFF81D9147EDEFAB47B94C795AB65FC4811E2D2DA9848610248ED1D59798DA10018C74763C77B146F572DB21C9A23DF9068761552228811351464076461410682558320615467404116280511121112821428323645586538733575828588501045848480725377005162408555448800625247238881122227046453620676806723022822431570874683427333037127383215153441717847782854238813145233525443372546437833870503722760613053450667701244072771202530886325348626827015482471247224344416516465756676388386325344321726626405726252850718100146266250843362153875615487785578585442885048543650601331846147516855176673632076511167224682274825700167038501124172043472816866646257737488778322611838275112441533867614031330116870443280027312582757170548284158854581644733214237851027230088833238613853138323226004646100506414656054885443117340552071366664425201833855154434166101163361167357624057855357827841562016605327886362848186533533464748577478171045811701067524802380450757476033566154723381035424012550470446366312888762314347823211603507844631740828780651330085566820122788704364653784576405174018350616324530217278672071648641248182750422010480750025843708245134306121005076857125654067787322410604314033777176666058601682802577657768506316202304415070642535284575617484217361333177280570547544135473026282071604144557676800841633012045443062403852765714210502706442022157070048577777142052424206171338037020623780518215573862384051867322421318755227548325742183442388630767338003081530624665176122162624866215848147706580045080484674181762778030582245624705584605672143624784336431768238651471251866083332507584566256255207870760846185345220536565861405068261008266113826872073118148206142074110862716568815877752750151776864465385725380787700263602025638358734670837116183870072234126801244461276662732114447542547210187381737885740052506711771878560222456552811064064001474754703378336576537033042815771385827650131806368687318354055803434637754176084078746656418073254754141445585576045433778167045688163761463088868766033580544821476245253687751747382705001768210647882267123284355777718176875335014005762830024761087014318867880316165372843065833181732507236237318516706671385524606001304787638774757754516078880133485241013210350728245035311886204626328121541804314164832437062315582172431346808670846535058644422271266501814342374453728701048085841005778484300320065865156481328170870354453285803585184876103868667534662832202186466176648435830564722232645537506656275064828204314177053843252843778154777388057607665631834438784278641336807555873512887446112475682078884488122355511615544555034755776807806170654177851874722444352615201775542373055344474818745226502003637257125736313805046827616412870023721864222207050252644666816165750254633221236145552270710120017023863312730273412511033251040476405142846820057710325366788751380841052352086350342703151835707088440272316314713270825075052074878588146374772710544678535752476067002370672478643824458077772653140703E88E6DD9B2E9F3CEB9DD7B71DD8B0177E86F1CC44972B4E028C48923B2C2BDCEA63784DFF2B84EFFDF8B9C95804734404AA9D5CF43FEAB05C91B1FE91BFBCD70F893B7E05BAFF9B31013B740A0659384A931BC9696216768A792A28B92AFE514E2DFD16F672524C59BDCE666DD74AD725E33E337E5169CEB457219DFB017AF0A38862AB0AFAFE0512B19982786111DBC970E81B52B9B5AB984207419B311F8FAB99BE2C904493AC6CC5F87F7E4CD55AD9E2DDF38606A8335AE2510F2D0C50938BEFB7B3F07EA7C88142A81F6AC2B8B59B3C343BF496724EA1D03BFC24676AA095F0DA11C91C0AA22806BC5B3C115567F731B121F4D8319541935E9794B23C962284AFE0CEB697E0BF7A230887BBA4BAD295AA0711ED815A5B896FE1F7F5C42C6CA45537B0CEA519615375580417A33DCAFBD7F7A2A43EF9617C0FBB5E9EF154C14102F6D29809BEF785F3F6A404103E8F1643B3C9178EFEE8316633F66E8B27714ED9B9800EA89AB65448AC84674C21F7B0178BC33E51F3D8CA50B2CAB584D99ECF8188B96142E31708C9EB94D41C562A3A26811153B6C503535A97AFCECBA2C4EFB9508C53C1FA9C45E5480BF06DBFC7293AF0E17AD3A0860A685C639A8736BE95E4EA4687AC1FDAF7D1FEA94DBE04922E14115BE684BEBF955A4F4E033B4B545FD6205C7D6335D68BB6402AA7509AB7F2662A0B00D39FC58BD66660C6B65A0BBF4CDE67FCE7D0552DE0CB9F34572F2F7B7C81424AAF37150208568F327F2A4C73D6FF890A45E7C6DE33521F4D722D8FFE70B63C4084F95CD1331CCA90B2D506C6AFBACACB4ADC4107226810B9DC2AF77FF1D4ACADD38D75C09768D97088EACD1157023249E8EAEF26F861CBAE7ED8551E861E6A8CACE62A0FCDFB1B395A5988D5361D94A26806A02E6E36799E0929656B5941CDCB8C69EBB78F825448C6A19CD1526FE372E033484EF3C389DB8AE4B95C85D69D3DCC91FAD8C3AE72C6E514A8E35ECF2EEAE2F82AE3014E27E490F3592987635B19C12CB9BC8491D11045CECA71332763BE230801011DA2379095B611643508832C9234922E7E694C531821BE0086992B06D15DEB78E23D7EA57CD248DC897D39C1483FB6DE2FA333280E30A42258BEDB16AF5E9983B1BB4B634C1BEA0CD4CB941C684928CC0F7256C400505AB2A0AE5E123A6FDF91C08E5E1127E2F03BA57FD190032E9F61D1CD101A3E5BC535F8C3750A497075E57B128E3B5D084FD2A80190F888B8D7ED798DE3A0C8278DA827A5FBA3F83B17BBAFA2049F5E23E4627FF372997D9F146FADC4427DC6EF0C324223013A07F6C9D02EB36FFE8BE80F9603929838BB6FC7D04ED423BE685227A396190363C678341081F0BF54FAF78E990F43B26377F62AD618AF6167EC11CC6CF6A18DE28B5D723D7AD7BCE673D9707BFBFED1E7C8BE1B4F0761919016E58AFEFA0209AAA560D53A37BCE6FD535A0A06792216C7D18D949063205B63F03D0732A67BA248D6210486D6852AD20575190F10A1618AC4CCBC722485BF19CB511442DDF4108663308191BC28EA30DB0D4103510D6D2DF207D62A6EE8E74916888C807F7F760A5D65C926A2E299E4646CFFB412862B19E33389CCCD3A86008C522E97902CC7640606B5AFB6F9B298D205C0A48F80A50221C201CB204AB661CD58F5EFDED446FCC38954E79FDE957B56D997F87A182688EFAAC97D48E8AB1E20173DC9934A54127C1137AFC5FBF7C330EC9E66D7E3F9ADC014E498EE28A4005E19C38158D9F82D77103CECB7128752B5B5B5253FCFEBDF62BF790693038F3C74BDA2B6E0851F94EFA20469E36BFCADD97F60795DCEEB63F5FC9351736D4DD260B777D4248FE14EC7628E2B10E098AC97CEA30633922E09F39F1828297541CB8644E4A8674F20957D86621E39BAEA2B9A94588AD0CE48720FD678FE7B600F53FA673AA5995766C859396C96A46A4D55C34E2F783AB80CCD0DBD3484A609627B719CCE7154DF300D84AE7E128D96EDB4B6881235797FB4C16E37632724BD0510A4B210C4E3CFFCCB019D889E3542BEFA0E1F5A23AD0075F586C3E9336A8A3DF2C7297766E85BE0B917BB00B8400F17D3C02E2E856356ACAFC1F3E0E1FC6773A607E5BF590C250730D08FC2C0C76B989DFDF88CB9ABB7353CDFE1F8048B36BE69ECA971A4FBD96BECDEC1AD954228529535AFC34F21F4C24E00C14470EFEA2DA9A17D3051B946C5DD7C32BD8183DCC4C5E80F2875E95C16E2C00E34E674D6579BFFCB521B9E87F6C2C13D6BB39132CCDA42E9205A4E8F96F1DCD315C735725BB4A9CF4B391A962F5E060F4C91A008AC80F2B69A36DB26EAA3EF132569D220A8A9368713A66FF0C26406512F49B498ED57026578F1A7267ADB441FC9063E72D5372955AC5951203B1133CFC135434A97759668A3AE9134879C9630AB3AEB73D2FA2DB5B4472F4BD405C909600D7A1081F6B1E1D8DA8DD278192AB025F7F4AC31A6A19EE95C45E4707DC150800625E5B9D5DD4A6813860EF5377536B1AC29E298B48749D4B82644E1504C4B76256DD953A3418E254089D5735413FDCB6C3BEA34D08B1DAC1C0FA580CC34047EC71BA0E9EEFAF633A773B01FF7F72D22F72DDF72A90573D484749F2045AED5984C8F76DFC555C36A5DCBFE6A93F160BD3F0CC443C0B7D74F560414816BA9BEF39FDB083399C2CA7B1E66FA4F2C091951A8ADF94205918E7FDADD43F201F8FE0391DB4B0AC0350A67D39F9947FC3D99A370C74BB60DE66B1DE94327698C925463CC010D54060C4C48D911F7CA871D00724FD4D3388A86378E93C6FB168347C0F0A51EB22E4D74D69C079FFA724694A75C27A5CCF5D859C8FF231AB17E8D495961D59185ACCB3BA554444E7DF738C8408832F427973544C00240AF78286BB72430EDBE72E0335D00F812409D93890C0F19D36A4EAC9BC75275F653FD5B02F5AE471F421E0523694C4A4EE9640AE0762AE42265197E268135B71C7C748E27F785B25BCC991B945E8EDF6695A98C9829A0017087F6D0D6D13E153A8582C7A56192C5D2BEB7A18FD323CBCD74EE0BFC2D7D038A69D761D4F20C8E4BB249C2697D60A2FB8AC59431B0DB8BD3153C34BEEA436117A5FD57CD6527BB41778177ACEAF200CA83A92B10A9A1B98879C42396C827D580288069A4C87D8933E6C416F9541495492D4CB40E78402188A4070C49EA0EDE5593E22C1D5BF59AEF0F59920239033A1A9E6210F842F25F789EA055A23DE9A29FACFB12B9D8F0DF5CD86338CF0D11A66121CFDA743B0AAFABDAA42A287A15DF28705F5588D7F837A45CBFDEC543AE219DA63596816603ADB6B9EA376773AD18E424F31AD76BF8908C591C1D7C36B01278854E2A10000F6BD52199C2EDDB5C00E2762A354A9F2E7416103AD25F9A793116B4599D3558CAB299D7E9AEEB85C89C41E9DC15A7BBE48EE491B5F454A6924DBF4CDE153078733DAFA290E0DACFF995E72E8A43CA545E7592FB6B7728365CF7B9A1167C491C3268AEE80257293FFA29D7A52B4F4CE3}"
)