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

92 lines
10 KiB
Go

package asymmetric
import (
"crypto"
"io"
"testing"
"github.com/cloudflare/circl/sign"
"github.com/number571/go-peer/pkg/encoding"
)
func TestNewDSA(t *testing.T) {
t.Parallel()
if pk := newDSAPrivKey(&tsPrivateKeyDSA{}); pk != nil {
t.Fatal("success get another dsa privkey (not mldsa65)")
}
if pk := newDSAPubKey(&tsPublicKeyDSA{}); pk != nil {
t.Fatal("success get another dsa pubkey (not mldsa65)")
}
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}
privKey := NewDSAPrivKeyFromSeed(seed)
if encoding.HexEncode(privKey.ToBytes()) != tcDSAPrivKey {
t.Fatal("get another dsa key from seed")
}
}
func TestPanicNewDSAPrivKey(t *testing.T) {
t.Parallel()
defer func() {
if r := recover(); r == nil {
t.Fatal("nothing panics")
}
}()
_ = NewDSAPrivKeyFromSeed([]byte{1, 2, 3})
}
func TestSigner(t *testing.T) {
t.Parallel()
privKey := NewDSAPrivKey()
privKey = LoadDSAPrivKey(privKey.ToBytes())
if pk := LoadDSAPrivKey([]byte{123}); pk != nil {
t.Fatal("success load dsa priv key")
}
pubKey := privKey.GetPubKey()
pubKey = LoadDSAPubKey(pubKey.ToBytes())
if pk := LoadDSAPubKey([]byte{123}); pk != nil {
t.Fatal("success load dsa pub key")
}
msg := []byte("hello, world!")
sign := privKey.SignBytes(msg)
if !pubKey.VerifyBytes(msg, sign) {
t.Fatal("invalid verify")
}
// fmt.Println(len(privKey.ToBytes()))
// fmt.Println(len(pubKey.ToBytes()), len(sign))
}
var (
_ sign.PrivateKey = &tsPrivateKeyDSA{}
_ sign.PublicKey = &tsPublicKeyDSA{}
)
type tsPrivateKeyDSA struct{}
type tsPublicKeyDSA struct{}
func (p *tsPrivateKeyDSA) Scheme() sign.Scheme { return nil }
func (p *tsPrivateKeyDSA) MarshalBinary() ([]byte, error) { return nil, nil }
func (p *tsPrivateKeyDSA) Equal(crypto.PrivateKey) bool { return false }
func (p *tsPrivateKeyDSA) Public() crypto.PublicKey { return nil }
func (p *tsPrivateKeyDSA) Sign(io.Reader, []byte, crypto.SignerOpts) ([]byte, error) {
return nil, nil
}
func (p *tsPublicKeyDSA) Scheme() sign.Scheme { return nil }
func (p *tsPublicKeyDSA) MarshalBinary() ([]byte, error) { return nil, nil }
func (p *tsPublicKeyDSA) Equal(crypto.PublicKey) bool { return false }
const (
tcDSAPrivKey = "b0ead780af27b7f974532cd85bf3f86010b571826c9faba88183ae27b97463099a6cc979d59ae1aa23d359b44a03983cad23965fd424eaa938492d7fc3bdcb76c6ebc350335e2ef5ee74f8069451943dff81d9147edefab47b94c795ab65fc4811e2d2da9848610248ed1d59798da10018c74763c77b146f572db21c9a23df9068761552228811351464076461410682558320615467404116280511121112821428323645586538733575828588501045848480725377005162408555448800625247238881122227046453620676806723022822431570874683427333037127383215153441717847782854238813145233525443372546437833870503722760613053450667701244072771202530886325348626827015482471247224344416516465756676388386325344321726626405726252850718100146266250843362153875615487785578585442885048543650601331846147516855176673632076511167224682274825700167038501124172043472816866646257737488778322611838275112441533867614031330116870443280027312582757170548284158854581644733214237851027230088833238613853138323226004646100506414656054885443117340552071366664425201833855154434166101163361167357624057855357827841562016605327886362848186533533464748577478171045811701067524802380450757476033566154723381035424012550470446366312888762314347823211603507844631740828780651330085566820122788704364653784576405174018350616324530217278672071648641248182750422010480750025843708245134306121005076857125654067787322410604314033777176666058601682802577657768506316202304415070642535284575617484217361333177280570547544135473026282071604144557676800841633012045443062403852765714210502706442022157070048577777142052424206171338037020623780518215573862384051867322421318755227548325742183442388630767338003081530624665176122162624866215848147706580045080484674181762778030582245624705584605672143624784336431768238651471251866083332507584566256255207870760846185345220536565861405068261008266113826872073118148206142074110862716568815877752750151776864465385725380787700263602025638358734670837116183870072234126801244461276662732114447542547210187381737885740052506711771878560222456552811064064001474754703378336576537033042815771385827650131806368687318354055803434637754176084078746656418073254754141445585576045433778167045688163761463088868766033580544821476245253687751747382705001768210647882267123284355777718176875335014005762830024761087014318867880316165372843065833181732507236237318516706671385524606001304787638774757754516078880133485241013210350728245035311886204626328121541804314164832437062315582172431346808670846535058644422271266501814342374453728701048085841005778484300320065865156481328170870354453285803585184876103868667534662832202186466176648435830564722232645537506656275064828204314177053843252843778154777388057607665631834438784278641336807555873512887446112475682078884488122355511615544555034755776807806170654177851874722444352615201775542373055344474818745226502003637257125736313805046827616412870023721864222207050252644666816165750254633221236145552270710120017023863312730273412511033251040476405142846820057710325366788751380841052352086350342703151835707088440272316314713270825075052074878588146374772710544678535752476067002370672478643824458077772653140703e88e6dd9b2e9f3ceb9dd7b71dd8b0177e86f1cc44972b4e028c48923b2c2bdcea63784dff2b84effdf8b9c95804734404aa9d5cf43feab05c91b1fe91bfbcd70f893b7e05baff9b31013b740a0659384a931bc9696216768a792a28b92afe514e2dfd16f672524c59bdce666dd74ad725e33e337e5169ceb457219dfb017af0a38862ab0afafe0512b19982786111dbc970e81b52b9b5ab984207419b311f8fab99be2c904493ac6cc5f87f7e4cd55ad9e2ddf38606a8335ae2510f2d0c50938befb7b3f07ea7c88142a81f6ac2b8b59b3c343bf496724ea1d03bfc24676aa095f0da11c91c0aa22806bc5b3c115567f731b121f4d8319541935e9794b23c962284afe0ceb697e0bf7a230887bba4bad295aa0711ed815a5b896fe1f7f5c42c6ca45537b0cea519615375580417a33dcafbd7f7a2a43ef9617c0fbb5e9ef154c14102f6d29809bef785f3f6a404103e8f1643b3c9178efee8316633f66e8b27714ed9b9800ea89ab65448ac84674c21f7b0178bc33e51f3d8ca50b2cab584d99ecf8188b96142e31708c9eb94d41c562a3a26811153b6c503535a97afcecba2c4efb9508c53c1fa9c45e5480bf06dbfc7293af0e17ad3a0860a685c639a8736be95e4ea4687ac1fdaf7d1fea94dbe04922e14115be684bebf955a4f4e033b4b545fd6205c7d6335d68bb6402aa7509ab7f2662a0b00d39fc58bd66660c6b65a0bbf4cde67fce7d0552de0cb9f34572f2f7b7c81424aaf37150208568f327f2a4c73d6ff890a45e7c6de33521f4d722d8ffe70b63c4084f95cd1331cca90b2d506c6afbacacb4adc4107226810b9dc2af77ff1d4acadd38d75c09768d97088eacd1157023249e8eaef26f861cbae7ed8551e861e6a8cace62a0fcdfb1b395a5988d5361d94a26806a02e6e36799e0929656b5941cdcb8c69ebb78f825448c6a19cd1526fe372e033484ef3c389db8ae4b95c85d69d3dcc91fad8c3ae72c6e514a8e35ecf2eeae2f82ae3014e27e490f3592987635b19c12cb9bc8491d11045ceca71332763be230801011da2379095b611643508832c9234922e7e694c531821be0086992b06d15deb78e23d7ea57cd248dc897d39c1483fb6de2fa333280e30a42258bedb16af5e9983b1bb4b634c1bea0cd4cb941c684928cc0f7256c400505ab2a0ae5e123a6fdf91c08e5e1127e2f03ba57fd190032e9f61d1cd101a3e5bc535f8c3750a497075e57b128e3b5d084fd2a80190f888b8d7ed798de3a0c8278da827a5fba3f83b17bbafa2049f5e23e4627ff372997d9f146fadc4427dc6ef0c324223013a07f6c9d02eb36ffe8be80f9603929838bb6fc7d04ed423be685227a396190363c678341081f0bf54faf78e990f43b26377f62ad618af6167ec11cc6cf6a18de28b5d723d7ad7bce673d9707bfbfed1e7c8be1b4f0761919016e58afefa0209aaa560d53a37bce6fd535a0a06792216c7d18d949063205b63f03d0732a67ba248d6210486d6852ad20575190f10a1618ac4ccbc722485bf19cb511442ddf4108663308191bc28ea30db0d4103510d6d2df207d62a6ee8e74916888c807f7f760a5d65c926a2e299e4646cffb412862b19e33389cccd3a86008c522e97902cc7640606b5afb6f9b298d205c0a48f80a50221c201cb204ab661cd58f5efded446fcc38954e79fde957b56d997f87a182688efaac97d48e8ab1e20173dc9934a54127c1137afc5fbf7c330ec9e66d7e3f9adc014e498ee28a4005e19c38158d9f82d77103cecb7128752b5b5b5253fcfebdf62bf790693038f3c74bda2b6e0851f94efa20469e36bfcadd97f60795dceeb63f5fc9351736d4dd260b777d4248fe14ec7628e2b10e098ac97cea30633922e09f39f1828297541cb8644e4a8674f20957d86621e39baea2b9a94588ad0ce48720fd678fe7b600f53fa673aa5995766c859396c96a46a4d55c34e2f783ab80ccd0dbd3484a609627b719cce7154df300d84ae7e128d96edb4b6881235797fb4c16e37632724bd0510a4b210c4e3cffccb019d889e3542befa0e1f5a23ad0075f586c3e9336a8a3df2c7297766e85be0b917bb00b8400f17d3c02e2e856356acafc1f3e0e1fc6773a607e5bf590c250730d08fc2c0c76b989dfdf88cb9abb7353cdfe1f8048b36be69eca971a4fbd96becdec1ad954228529535afc34f21f4c24e00c14470efea2da9a17d3051b946c5dd7c32bd8183dcc4c5e80f2875e95c16e2c00e34e674d6579bffcb521b9e87f6c2c13d6bb39132ccda42e9205a4e8f96f1dcd315c735725bb4a9cf4b391a962f5e060f4c91a008ac80f2b69a36db26eaa3ef132569d220a8a9368713a66ff0c26406512f49b498ed57026578f1a7267adb441fc9063e72d5372955ac5951203b1133cfc135434a97759668a3ae9134879c9630ab3aeb73d2fa2db5b4472f4bd405c909600d7a1081f6b1e1d8da8dd278192ab025f7f4ac31a6a19ee95c45e4707dc150800625e5b9d5dd4a6813860ef5377536b1ac29e298b48749d4b82644e1504c4b76256dd953a3418e254089d5735413fdcb6c3bea34d08b1dac1c0fa580cc34047ec71ba0e9eefaf633a773b01ff7f72d22f72ddf72a90573d484749f2045aed5984c8f76dfc555c36a5dcbfe6a93f160bd3f0cc443c0b7d74f560414816ba9bef39fdb083399c2ca7b1e66fa4f2c091951a8adf94205918e7fdadd43f201f8fe0391db4b0ac0350a67d39f9947fc3d99a370c74bb60de66b1de94327698c925463cc010d54060c4c48d911f7ca871d00724fd4d3388a86378e93c6fb168347c0f0a51eb22e4d74d69c079ffa724694a75c27a5ccf5d859c8ff231ab17e8d495961d59185accb3ba554444e7df738c8408832f427973544c00240af78286bb72430edbe72e0335d00f812409d93890c0f19d36a4eac9bc75275f653fd5b02f5ae471f421e0523694c4a4ee9640ae0762ae42265197e268135b71c7c748e27f785b25bcc991b945e8edf6695a98c9829a0017087f6d0d6d13e153a8582c7a56192c5d2beb7a18fd323cbcd74ee0bfc2d7d038a69d761d4f20c8e4bb249c2697d60a2fb8ac59431b0db8bd3153c34beea436117a5fd57cd6527bb41778177aceaf200ca83a92b10a9a1b98879c42396c827d580288069a4c87d8933e6c416f9541495492d4cb40e78402188a4070c49ea0ede5593e22c1d5bf59aef0f59920239033a1a9e6210f842f25f789ea055a23de9a29facfb12b9d8f0df5cd86338cf0d11a66121cfda743b0aafabdaa42a287a15df28705f5588d7f837a45cbfdec543ae219da63596816603adb6b9ea376773ad18e424f31ad76bf8908c591c1d7c36b01278854e2a10000f6bd52199c2eddb5c00e2762a354a9f2e7416103ad25f9a793116b4599d3558cab299d7e9aeeb85c89c41e9dc15a7bbe48ee491b5f454a6924dbf4cde153078733dafa290e0dacff995e72e8a43ca545e7592fb6b7728365cf7b9a1167c491c3268aee80257293ffa29d7a52b4f4ce3"
)