From da3aa308679e82427c19387fb2fc8ac7cdfc5421 Mon Sep 17 00:00:00 2001 From: number571 Date: Tue, 28 Nov 2023 20:06:03 +0700 Subject: [PATCH] update --- CHANGELOG.md | 1 + pkg/client/client.go | 11 +- pkg/client/message/message.go | 2 +- pkg/client/message/message_test.go | 13 +- pkg/network/network.go | 6 +- test/_data/test_binary.msg | Bin 2048 -> 2048 bytes test/_data/test_string.json | 12 +- test/_data/test_string.msg | 2 +- test/result/coverage.out | 1450 ++++++++++++++-------------- 9 files changed, 754 insertions(+), 743 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b171d885..b5f2bccd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ### IMPROVEMENTS - Update `cmd/hidden_lake`: append HLL service (Hidden Lake Loader) +- Update `pkg/client`: hash of message now encrypted ### CHANGES diff --git a/pkg/client/client.go b/pkg/client/client.go index 44458ae5..fc8840ad 100644 --- a/pkg/client/client.go +++ b/pkg/client/client.go @@ -127,7 +127,7 @@ func (p *sClient) encryptWithParams(pRecv asymmetric.IPubKey, pPld payload.IPayl FPubKey: encoding.HexEncode(cipher.EncryptBytes(p.GetPubKey().ToBytes())), FEncKey: encoding.HexEncode(pRecv.EncryptBytes(session)), FSalt: encoding.HexEncode(cipher.EncryptBytes(salt)), - FHash: encoding.HexEncode(hash), + FHash: encoding.HexEncode(cipher.EncryptBytes(hash)), FSign: encoding.HexEncode(cipher.EncryptBytes(p.fPrivKey.SignBytes(hash))), FPayload: cipher.EncryptBytes(doublePayload.ToBytes()), // JSON field to raw Body (no need HEX encode) } @@ -183,6 +183,11 @@ func (p *sClient) DecryptMessage(pMsg message.IMessage) (asymmetric.IPubKey, pay return nil, nil, errors.New("failed decrypt salt") } + hash := cipher.DecryptBytes(pMsg.GetHash()) + if hash == nil { + return nil, nil, errors.New("failed decrypt hash") + } + // Check received hash and generated hash. check := hashing.NewHMACSHA256Hasher(salt, bytes.Join( [][]byte{ @@ -192,7 +197,7 @@ func (p *sClient) DecryptMessage(pMsg message.IMessage) (asymmetric.IPubKey, pay }, []byte{}, )).ToBytes() - if !bytes.Equal(check, pMsg.GetHash()) { + if !bytes.Equal(check, hash) { return nil, nil, errors.New("invalid msg hash") } @@ -202,7 +207,7 @@ func (p *sClient) DecryptMessage(pMsg message.IMessage) (asymmetric.IPubKey, pay if sign == nil { return nil, nil, errors.New("failed decrypt sign") } - if !pubKey.VerifyBytes(pMsg.GetHash(), sign) { + if !pubKey.VerifyBytes(hash, sign) { return nil, nil, errors.New("invalid msg sign") } diff --git a/pkg/client/message/message.go b/pkg/client/message/message.go index 27c4731b..5799d8b1 100644 --- a/pkg/client/message/message.go +++ b/pkg/client/message/message.go @@ -125,7 +125,7 @@ func (p *SMessage) IsValid(psett ISettings) bool { switch { case uint64(len(p.ToBytes())) != psett.GetMessageSizeBytes(), - len(p.GetHash()) != hashing.CSHA256Size, + len(p.GetHash()) != symmetric.CAESBlockSize+hashing.CSHA256Size, len(p.GetSalt()) != symmetric.CAESBlockSize+symmetric.CAESKeySize, len(p.GetEncKey()) < symmetric.CAESBlockSize, len(p.GetPubKey()) < symmetric.CAESBlockSize, diff --git a/pkg/client/message/message_test.go b/pkg/client/message/message_test.go index 6a46d971..97e240d0 100644 --- a/pkg/client/message/message_test.go +++ b/pkg/client/message/message_test.go @@ -10,15 +10,14 @@ import ( ) const ( - tcSalt = "327d3d5fa3e8df5012ca12a8d65d0644669861797f659ac13adf15c2508bec5bd43538ba6c5c6871992c35ebafdaf019" - tcSession = "58e578980580a793c01765b6d8709784d41dbcb53f3fe87e7e4e4d4b33c4f93295bac351966d6cd70f5e352cae1d290bec3b8234d4048807e5aa4d3bb983ab0d668be1f2843b77aea181ea8b92ffbf641aa5f8e25e12243ade696cbace216c5148cb68d0ae93342da9712561b1ca806dd992ce6d14b1cb0d6211780faae7ca15" - tcSender = "ac2a318e0e0f4548f07b5444d293304b52bde3e22e23da82147d03a4b6721b98dc43a53adbc1ff33a3819f0c3899b3e2dc9b7cb18b0da96ad6c4ff93123764b68ec660314ee13167c7ece3bb73c72258e05c273155b2bb13860820aebf9c9400158f38b3208826e176ef5b90ea209c5fc302e8162f75ae8fa2bf4c50f5c16256d5d413e6bf69592ed90ae9f91af590c06faf71b5e87ba3dc4a4f96b3" - - tcSign = "cd18d99ec9af3dabd548a5e2b8e4f34add2605671c733342968159eb9fc23484ca14b7b6e465fa3527bcc03a50aa6203240077c5118e18f28d48939df5bfab4fa3d59ed3b23a0bc6a8ba08275256a6c3577bcb887ed7657578e7de711eac7af88de9f75f0fce0428134aa24fe5c9655256c7753d54b49a5504c8d1a2a1d242c8d4459431474ebe9f5e4bd005d7a94681" - tcHash = "3d90d389b7454bd3f1a84c4509c0afdc2a92d6acafdd387a541590ed6caf34e0" + tcSalt = "d84fc309a060cf101d040bc76a40e532171cc03fa07c9cbba82f0fcd96d14de37c8ccac1435a95c1826c1df58d7ce1ba" + tcSession = "769692f8587e23cd184e8366487a400321cb5c5ca7561a3cb0f93efdcf8d0564bc6a47679ff2c0bc4ac50dacf92abad7dde6db7980153b2be5dbd5fce90f4e0836e3ffd5540842a4b25538b6f404fa51a38010df87f212c64549e819d5b2610acf0ceaf163018a74468c2bf0f190cbabdaef3dd4edc9175adebc3b69121b0971" + tcSender = "5ce9454a7fb51b47087821b4833bce2984cc730b832461919a0d063a7b66ea587f8c7a3e058a53119a84d2a9653a40285161de843a031ad064330ab942baf7f1a79400dd17f9ad5a77efa969c31704a6990a550cfe2eb0435aa77e3abaf5b2a0006944e2d129e2504e6edf2a17a8ba4376a1d19ed92320976e0b131d992429a32bea8f7f00c7b83acf5a0f3315fef483886efd10d77d1ad46e94d354" + tcHash = "8261038e2fcf3ea2338803d870f1ef7c802b0f52e7309bcf2dcf0d44721ee66f31618aad7cfb3d1669fe9f91b1959d95" + tcSign = "9d1a39e112472d42f0ecaada7e503a43dfcbb4b696388b54ed95d96d76893cd5dbc0236e3e8025ff39aa83a15f6ac91455a81bdedb319037a755afd1c6eb321d87871ee1492dd1363b3643fca2ea26739bc16a94d1fd64bfadff32ffb764117800e17c8d4d651df9339785e8981341408f39cf2af88aee4225a1f1249bf3faaf62c08f106f91298f4ba865d71041a208" // -1 byte from hash - tcInvalidPrefix = `{"pubk":"ac2a318e0e0f4548f07b5444d293304b52bde3e22e23da82147d03a4b6721b98dc43a53adbc1ff33a3819f0c3899b3e2dc9b7cb18b0da96ad6c4ff93123764b68ec660314ee13167c7ece3bb73c72258e05c273155b2bb13860820aebf9c9400158f38b3208826e176ef5b90ea209c5fc302e8162f75ae8fa2bf4c50f5c16256d5d413e6bf69592ed90ae9f91af590c06faf71b5e87ba3dc4a4f96b3","enck":"58e578980580a793c01765b6d8709784d41dbcb53f3fe87e7e4e4d4b33c4f93295bac351966d6cd70f5e352cae1d290bec3b8234d4048807e5aa4d3bb983ab0d668be1f2843b77aea181ea8b92ffbf641aa5f8e25e12243ade696cbace216c5148cb68d0ae93342da9712561b1ca806dd992ce6d14b1cb0d6211780faae7ca15","salt":"327d3d5fa3e8df5012ca12a8d65d0644669861797f659ac13adf15c2508bec5bd43538ba6c5c6871992c35ebafdaf019","hash":"3dd389b7454bd3f1a84c4509c0afdc2a92d6acafdd387a541590ed6caf34e0","sign":"cd18d99ec9af3dabd548a5e2b8e4f34add2605671c733342968159eb9fc23484ca14b7b6e465fa3527bcc03a50aa6203240077c5118e18f28d48939df5bfab4fa3d59ed3b23a0bc6a8ba08275256a6c3577bcb887ed7657578e7de711eac7af88de9f75f0fce0428134aa24fe5c9655256c7753d54b49a5504c8d1a2a1d242c8d4459431474ebe9f5e4bd005d7a94681"}@` + tcInvalidPrefix = `{"pubk":"5ce9454a7fb51b47087821b4833bce2984cc730b832461919a0d063a7b66ea587f8c7a3e058a53119a84d2a9653a40285161de843a031ad064330ab942baf7f1a79400dd17f9ad5a77efa969c31704a6990a550cfe2eb0435aa77e3abaf5b2a0006944e2d129e2504e6edf2a17a8ba4376a1d19ed92320976e0b131d992429a32bea8f7f00c7b83acf5a0f3315fef483886efd10d77d1ad46e94d354","enck":"769692f8587e23cd184e8366487a400321cb5c5ca7561a3cb0f93efdcf8d0564bc6a47679ff2c0bc4ac50dacf92abad7dde6db7980153b2be5dbd5fce90f4e0836e3ffd5540842a4b25538b6f404fa51a38010df87f212c64549e819d5b2610acf0ceaf163018a74468c2bf0f190cbabdaef3dd4edc9175adebc3b69121b0971","salt":"d84fc309a060cf101d040bc76a40e532171cc03fa07c9cbba82f0fcd96d14de37c8ccac1435a95c1826c1df58d7ce1ba","hash":"8261038e2fcfa2338803d870f1ef7c802b0f52e7309bcf2dcf0d44721ee66f31618aad7cfb3d1669fe9f91b1959d95","sign":"9d1a39e112472d42f0ecaada7e503a43dfcbb4b696388b54ed95d96d76893cd5dbc0236e3e8025ff39aa83a15f6ac91455a81bdedb319037a755afd1c6eb321d87871ee1492dd1363b3643fca2ea26739bc16a94d1fd64bfadff32ffb764117800e17c8d4d651df9339785e8981341408f39cf2af88aee4225a1f1249bf3faaf62c08f106f91298f4ba865d71041a208"}@` ) func TestSettings(t *testing.T) { diff --git a/pkg/network/network.go b/pkg/network/network.go index cad9abbb..9e7f6ec8 100644 --- a/pkg/network/network.go +++ b/pkg/network/network.go @@ -13,6 +13,10 @@ import ( "github.com/number571/go-peer/pkg/utils" ) +const ( + cHandleRoutesSize = 128 +) + var ( _ INode = &sNode{} ) @@ -34,7 +38,7 @@ func NewNode(pSett ISettings, pQueuePusher queue_set.IQueuePusher) INode { fSettings: pSett, fQueuePusher: pQueuePusher, fConnections: make(map[string]conn.IConn, pSett.GetMaxConnects()), - fHandleRoutes: make(map[uint64]IHandlerF, 128), + fHandleRoutes: make(map[uint64]IHandlerF, cHandleRoutesSize), } } diff --git a/test/_data/test_binary.msg b/test/_data/test_binary.msg index 95c24cc05fe8af5e36d9bbad84a792aff87d5b05..24a9b4582c4f6e16b5cd2cc82d8d393c52fd566c 100644 GIT binary patch literal 2048 zcmWlZc~nqU9>+r+0g2r8h&l|Uj4jH&@9rv!X{4ly3rQ$C_uWM_w@BQI@ff&mbpPGRfssTR zfeDt(`ULuz0nWJR9ymh2GM?aADTaX0k%uW1P)MKwMUwfH8c8^_Trr6ZAY2jz-8skF zlY$Z?G4MEn6l%jUk^n*JMlnJ_`T~2tw9G=u1O`BB$gGf>NXCqH(?TK00G3n;APE7= z8qfFuBO+T~LDEeV-;)3UDlj&lhMq7U0oYKZttTOq+?N6 z4|_r)&o`1gApj`mOiE>m1QsDktg(&)=hRpYfo4oQ{g^sj8W9}%YNVN?S_m@gbwj8G_%@_`k|-Ki|sfKco!Dlwx>SnDa^D=ZZO+6fV! zbE%ouhH9S)4j@6k(@V6kiFLUFiw$tA46;@ef&s^##J)!e;y$$)U@M7R=_Y};E-DXt zin_Fg;ZSJDk3!%U0cE6x6amO3!#(t&X9`$14A4L29*NHO2Cv*zAw4w)+jBghFBZK6jw?r z*pjj!3UZGss4d}|DFc1!Hl@n+r%NOR^?8|&@?p2JK$ib+YYCCAaEcn=5p$L}bDAL*p8H4;MLu$$kX6!iwkbo-9i-BA5?bxLWTkdHJZpVM zF@%f*V4&lnv8Kea6bK2%iQ$4ngrTd9Q{?za%egcLdmfR{Im+wsQb))A z4J>x4QKA_H7)lTD$c)(4V@90UNBWOlyR72};Z4cWNAkBn4%!ninCAs_?pqW#<(vMG zFMV|)>HM+4kIMd&nBVQEpgU(0j~p2no0K0@vGUi+ODhvgf5;qg`@xjUuS9fQJnqY! zW#2VE()Io0}u(IAa6)r&n58gsEXBp>i=?8m-GLtoWHj5xw)xP?b5P(N5{T(vS{gmE5C2(HF(bE zE_K94OjXmLzW#hC*{t=5%JNB zgM)fBT@!gLM~&#&w)&r){~Vaxr(f9E;Humi^*gTA4Y>c#%YP63upw)A$F|=Oc=LF4 zOyy4V^EbI9V^HbEitzq7e%rsfWYU;X?Hh9%Zk_fTgYIs-wfF0Rb+xxYzW7{u>z+$4 zZ<;zeyYpm!ZPvRp7av&pYUaP=zVn~WKEvXhbCS9j)x>6<9#PF+32l71YR|%UTNgFm zY#X1~$lr*l`J!kWt!(P@)`11{J{@=P?N0`^k7eoG%3$zkX|1ORPDnl&!`3fvS6bM# zd*P_7Njbabp#YrU>zBgtkhG;29+#ISUE2QB*_5dRPx@gk9<~9zKAt#*xZ<2Qu4x)V*zs$>X)2tSlK4;jf`1m2CE|2_hijQc;)zyTaz!m zaJ$?22N_8<=^OvjCjV5})E^6Ke{0_Vd`Q>ylFwUr8WWR!vwdp6>VGW^{A=KV-EI3+ zcAfe3>ki{D4H>`e+vUAw-!mKPw@hnjRd?$47X|mjGs%1RvbyEuF4?~2-t{(gY1*Tl zo@op29w=Ks@|MajT>8?vP2XmA?O3>Ss6Mx|8dq;^|4!@Fr?)Sk{o9Srs`u!kWt)eU z7mV3Gt$fd}-}nA^I{AE7)TxK7Ba`>VC5D70oX#xWmv;2SnN2lwvuo+_sFVmAw=Jq{ z+DSQlf9|+V^Ru3WeiAu4I_31GMavH#*mn1qkrTob<~{8thhB?2+X^4<@T_6Y(`Uzv ze;ECT!lG-7S3h6f1k)>z?id!fqABGjO1*!mqPhE_6C-=~PJdc->d~->;HZRqG26SW sD?Jp!j?$`*jjvA%-qS91U32HdPbNLwn9yrTX!q=pxp$7IOgp&h|1cT>o&W#< literal 2048 zcmWkudsvs%9k)rSD4J}wLLW;g@2+!w&p9?l6K6xkHm^hr&J~p(c*ENSC+a9{ZeG%c z`Y5U7We5#*qDul}qD&`IY9tt`Gc@%H+|}ky6h+EdY!R{u8_5wQ%m6Hj3K)V)aH9#96icHtbPi*QITQ|P z%!N??p3y=vtsqyxND)XAXyTl}5MdU06mE4801Sz>5W|3JX0^piF{~Lv)Dxo`F$^hH zNGXVU05}5DDkroc06@we<_aUgISMRffpt^~U?l=VQ>QUNmcsx!My2IWBISstz)|ft zX<(=!5ZgexKv03K5guGP0i~k?Xb?E*7*y19rX==iC2=B9IA%zU&D8Aj7|=e#NcrKFBqL@h+fhh=Oa z0_|s71OrVW;o8Sw+GS%*kWYz0ZwypWOAZ2Kgh1K`1`@y1J`X|2IB-&0rX{4_iTN^= z<(|r+p@V zsPw)t6<89q3#W)Ft^EU`K*|6CjC@BK^EUf82Dwkk5H7Ir_9!P6@mGw8^Kl|9fzp8w zPWpy3>Lc(*V9Gq8;=VV=w~G0uS!OJQK4Q(JiKgS-ZacQ!UR_W*3Wf1sFE0F~baOMF zu*!}2{l%(<_rA=H?zyGcpT1df=DRiZ=TnB>_|eGR@Rnn#IU;p&?%nc)iDi|MbYaHS z=@+}kovi)(XN7Tl?%0*_iC?sgJC4KZ=I$Dkk~*p%y|y8%dfneTc1x~ME55(G2*y@5 zJewK%u>0OOCWn{h6>Ypn;?171 z=USG$5_#{{X&L_={Ggy9@?6rw!7stiFYI{?&rhp)Yxd2g*!}g>dVhJWDQ?pKabHz* zlY?Q@AFhljI-!zwUXQwVCT`d>`knB-qeC&ne-VGM=<(5yyG5dkL8NW$sw#eS@`C2I zUE;x_iUZ>0xj{Kit=ia)3%NE~SdE#WB z%uWMe-Cnr&R%?F8mYt!uWp#Lg{&f5Ou=T?(*zQ-;z{J{($Bzch{f_m#9laaf+xEk| z>!Ta9(_#~Uy8Fm)t~KqQt+N_(ul8NKtGce&&eQ|7E2184e$*Ios^-|LNuw`ch#X5x z<4Usb9J;hLv;jz+bK={SQ=U7Uoa5o|rvwQOUDa4JU_2TXtmVqH`mLT&3m5_m^&* zF*N1u_`D1K{_{=GkuSED)qi{^J$`mtMPq*Viq)T$uUXrp>1^*)OO~W9J(^xHY1jTu ze{{wAZtBa|zgxWJi*pyl&%E~DrHJFxoBq0{?W=d{w!VI%{M7wh*<%hilmw-Nm#zEX zi=&n=PrNcQVbJ^%J?pv6xo3*{eto!e9iKV{R%G4k6z&=yOdS(3FYe&mU3TaF`{|z) z71w6|efYJ6CE&&f#kI-R$wAe;kBVyEY)FJZT#DJy+Pp7sSW;5X!|36^n#V-~yF5NA zY;xP#P_JH_J~%w@P|Ne{?$