This repository has been archived on 2024-04-07. You can view files and clone it, but cannot push or open issues or pull requests.
moneroutil/ringct_test.go

59 lines
78 KiB
Go
Raw Permalink Normal View History

2017-05-20 10:04:57 +00:00
package moneroutil
import (
"bytes"
"encoding/hex"
"testing"
)
func TestVerifyRctSimple(t *testing.T) {
tests := []struct {
name string
inputOutpoints [][]string
txHex string
}{
{
name: "be9d2cf9b473dbbb2c59ffb07b5d812516f94d64121d87ad61956386a4bc3843",
inputOutpoints: [][]string{
{
"edfd415247d3e5e6eb4a7d65d4b25026cdea1b5595f0ea42ed56b8e640310169",
"8d073256bbfcd190b56c7e2d69302bfef0f2dcfe58c04349f95f3ed8310e9ffe",
"38ea121a03ab1bae88357a88cdaa5727f6f5cf1d9e287efe33571ba9e2bc9ea6",
},
{
"c9afb7de7bfb5d9bb5a593c969b4b93dab59db4ca05e20966b023fbb2cac4f88",
"12c5128ecde3c358528236ccb62bffc04a83471802eba04d94ec01d150c4ebf1",
"aa5b77ea8c2d23bf282fd20e70c234af618769f22afbbb100f084bd25ec8f1a4",
},
},
txHex: "020002020003eeb724ffb209dd81013006bd371b1f0896e8288565a6ee338cc1bf8d49377c4ee6fb4edec941b469ff020003deec249bf008df50c4d6e57d433bea03e84602181ec725b2a5e26b39f690f34fa4344cfe5e0af6e6030002e8043835f159904ba847435bb264b268bccb72182103e36fe107c667c978c5c200029c9fe087f1c89be13f2b350678054326f83732e0c0ee3d1f679f6007b5d7d84f00026276a1056f82a31f15c8f417b47c7227e89f6084644f21dc84a6935eeecf19a5210111a67c084c7c71d2ee4458d2d7f213ae6b79a00147e3d3637adc084b098b5fb60280aef0815ce1848e3c587524f501f927d7dfa329782ed9b12447bd6c5435e6d4380c61394eeb91361a6c60f8a1414a3f001a3855c1e881348588ba5c4c0d8c5ffb387f9ff6646682c579ca9bcd82dcc79238bd3ac9cd1d7d95cae4f7e51e3a959e9cb8390974283a0bcd7022fb79d56c48456b7173f511d801116ac823d551ed740f866a06d07a4f86404a55f359659acfad67614d5b8c3adaf29cf07e0198faee3683100e0806eaa766dbaf09c93d577503e9eac4e7d1850dc9c6e8f7221be13f1c36670bdc96e7e6b973d409d5ea3f81972b844f083db6352c51def090cf3e0c2082100d30d5bf7f0602ae45eeb8361c0fc61d159e2b8581871d936a8d70e623f1bec102f63090f4b6e620fff2749a79c9556ee03cc02dcdd7200379e667941ef691d490f615c8405ab8b8024eb7f3b8a1f5eae543b0122db8321785556063e36a892f21e4ec30fd051afad9691d759f12aa5411c14257f8fd3caecb0e859dba3516d0a3ea16669bee122c55182a8673566c6afc38c93ace2650ce06b41a14b62eabea08a99c3b8b09f334b9bda5906f1e481b3fdc41cebfd7c45a139e8c156b68bddb04a7f7c617fd88e2bb066abfb91cb9c708c39ef6005b37a7f3472357dcdc500f039b15c7a871ea9c975ae1993345d9a7536bb3d8f1fb9d764643b354eb11f788021d295e331a5c60cd5ea56b85fc18840037e9cf6d25b5f09a9d99718a260ce908464ff548f0e8a247072aebd17e7b614949794f46f38b79c1a506ca6d567f0d002f9c9649eab343ad7da5755118623f8ee5dc628ee50f1a5d02ee13bccedb080aab365eadd3125fc8297355bce4c32d7eaef730961e958fbb6bbfc4022b59f909bbe7b7fde33c9f3eb0fb87531f8b24f6c5fddf12848b7539d4cb4a4ed68a2c093cc73a3c71e0992873f66030737a3d10d276678c28144e81fb40832d52693c07c96c24f680a627a8ea8f8d76f61f9403dacefc07fd3187102b32d4ecbe5bae035fd85b6ddad623ff9e081890e15d47398cab231cd40b2a94da28f65a6c36e20861c5a7af0cce66128eab0c2d8461c47d3a30698110be15895174b72e0fbe9e09ddbb9325806e682a6bab52608c37b292bd02836c8188751b13e09a21c0bcf607595009f6d1d5b8940f94a506ec58fd1b79c353855e0db2ecf3048c2f7224520e72cf02272cc7dc999f7675fa3269606f6be3119147914c73b1c0cb779fa3a60f144856042cf8a7d930d5d74052042a2590b2232383ee8fd44e63453f37549f0c50a6358f077cc7cc1af7e1515f9efda750f7887d04ffe728b1f1cfaa63da0f0aea5848a5871a9617edd9d414c0b249fbe9f1103a17fbc08d794f1c7660078100c54f3700d8df0a3c5ec1447694179039287ac8c392e884542a0e12413f4bd60c85aeac6b7bc0b51a419b3291a4f1234db9648b301e966b723aafd2381c45f80e3ba5ea209db729330091e03eda426bb08c6d0d15d8a31b2aa1470b1ec2aa9b0f4890bce254b5ffa8c07128d0450a8533695d774398985ddc7399db3472592605a58b9700066a060dfe2ae6681eb2ea195ae87c3859d1db28a12e99f166d2f508303395a4145f85a5c6e21b4809d4e95af7e2569ee835af71675486581e443e01073a7ab3ed80c083cb628447450fde4ab33e19c35d406b46dc2d6c04d24f610be25e852ff7be104369072715eb3098cfa4182a1292576f97eb8eb996d0f9800c1eb35876e019ef8b1f3f4f0cc46b7f25f50d0df7f53451fe17a8d245e0cca0022449bd26846074a351ea000fc9393f56022869498f2dc9627fb710b50ed1a5006e235da7eb3d8e930e7f9be82d16e9bf99d5e51b5067342f104832b262e6b8046519e6d914c33ba037fd94d1e37a251597e14be3a4a50743fcc56726a1229c030bb3bfd3015fc95ff5a128d586d783e68bfd958e63d83a9daf700ec22492cf06acf546097351b35ad68ba245abf4169f99d253f616c42819218987fffe192c0e9c7f2bb74b31e00ad302fb9cdd8ee3ce2bdf38bcf2bd76921c780a9180825e0e40caa0854b19ed6f007a248517d244ce34ab8e0dcd7ebf18a61ad2d0e2b7330fd35df106d1cc436c318a6cd88c0aed3a7aec4307cb7e6bfb99923ef09a71af07536f39db13e261f61221d3302f6757214b0c33aca327b658d659c5d00d8e5902bf773d09c204c941789a4168200fe897a465e8c30020f98cb66864f98f9a46064520a4ac94ffaa29477b6cfc5ada48b4d422e64f7768fb0aeacc15b5c0038c070ffc28941673707c3bc49d3979364a0d50027a836a910390ce80b651c2fb47041ad40c202a3f982db0502cb834ba3b8642c2e3395354fdd443227f954063390cd229b6e84d0c579ace647f83d0883fd77628c1329f7942f91c0ca1a7916a720c3491f23a7c9f0ab21ff2ee74729d38469804894f46fb6cd217af31618eb1b002ba4483a786b9241325c84ec7c37e9ed4748d2f802a176d156f293f05e3cca10ab6ab08b5ca156da77f5010c78d6c237984ff550a7ebb9943b3f698bb8d61e80ea5b1135aad3d386a6fdbfc0163517e5eb7
},
{
name: "3 more inputs from 1302238",
txHex: "020002020003dd8b1cb8d307e1870b101168bda2047709a950de3473adc8775883e9442beb6dfa0cca023d82ea8958020003c4f91ee836deba0f41b669d5f9c1d6211dcd816be9ac2c4b9df4711aaae9f1b762b5ea45b59e771203000264d3ed9b6ca4a0ddb4f1eca8360d37dbbb9da7c807caa327037799538c9d6cc50002eeab751583cfff1b387d4422f3466a0350fa22da8abc1d025b9502713e1094070002369cc87c270e3a7be9aaaf611f28bba88983450786524370ce655da8c301ac2b2101f0a05b68101fddb37f87ded0b89ded89918b2ae750e87db3b0f84614e531898e0280aef0815ca07f3bb05444b33096dcfdd08cdd88c2a8e20f358fb1b350d34d6ea2b034c8d6b2c966f5b68528349eac7914cad1d063f2b35c143ebcc8c60edeeb37a070ce44dab824435e5188996505b0af5c55a7d81ea069dbf4a238499b454dd2c457980ca561025c89aeb1d2bfc14b7a163cde9faa777de9e61a77c65d5e3005fdfc3a0500baff5c45858c1f94b8f78d3ba7fb3371a7c18010bae796732cb2133795880260b2372f3ce5db8c35f536d5329651fc0b6417ef2c7b2e440a21bbeaf4628f04946494dcfb900b1f675b57d3cc085819a1080096b67854526366e3071284070378225b0bef1f1336e84d1fb649674d00817ebdb4ca24ddcc94a2e4ca9b242b063e49928375b585459bd7b5ae3f70b8019287898deb384abe5f2ff11bb98ceb4633fbe66b9f592ae59cbcf8e9a0874eab49988179a53fdd01088bd885adad4c0a8b041ebc08e7dbe566697630da9e3b25d5360ff5c05c9a65f782e271bcc2eb1a5478fa4a556ef6fcb18d45a120d985ee8232eae49fbe9605367e7f86d833ab033eaa7ef596ecfea6cf0aa74b0e702c4ebcff3093fd6b6b50efb126e8b1845500522fb5e53f277099df162f9195b40d1bf52e99d1127dcac7db5067caa427f80ea13abfcbcaf550fa3c694905de1bbef0b1ba4eb5e0c91ceb86c53897a8de6307cae488f6031c44f693040cb2da6497270c51648b17fac48d9d081df400ef0809907f2b40f1430f7a536d6a74aa0a1cf19e6b08ea793f22931357737882a7e009573db2abb4f57fa455dab91018111081b3dc301658f7ef8b870c4b27e9a79307b5e8df7f19337fd57332b50515bd1cc56314bf290f05576d661398e0adc39007416457ebf428b954d643b19badf2bdd95dc27fb3c388db0bb80dd1f03507cf01876435e4118034b055c003960590b305bd606edfd3baf74b0045f779797e95092e4e6f1f462767c1f3fb7db455827b79ecfe6f5d35e95b245b794d6344339b0c8ee626ae4844705cf413d7585fa8ed4dd1a99746f95babf929f36679893dbe0f014fd7a8269f8a2ac69dec0f12847708ec570c4704ade002a119f2938631190da71d19dfd0f62157cebf8311bd0ab75917c9a39ffa8f414d2c662cb6587f5705cc77f299f8b7a9e40fd319c8555958a85262df1cc683d5d7f4549f188a509b02ceddee25522091cb723843fb518e1d3a437903f287bb41dbf1254e781522e20d48590ae99f88e28bd950dd36a1c42fcd147772a2214530487bccf2d2cf019d078244f874684a990f8df577fac9643084a7215a791990f809f75c3efd061c3d086dd695a23e91cba52a2201b562da546861e330df6c331fba46eabdf60a1a5005ce6a99490b87742ffac169f269db8b7b33e2fd0240c54b42799e1bfb8473e30424d0cd328e848bbc94d4fbbea542d5796376dfbbb866018f6ad5e0139e8659019e04c61c964a1eaedb94d4c90f2e0f4207bf1ae83042124a83ede75a8f67f40e3ac4dedab5c6d5dfa78e359436df0ab50c5d258b7af45ac151fd632782e02a078ebced1a088e7ab8cb955cf4083a595464db34b36e6f5d18572b2ba9f514c50e6265424d8e30712c0cf80e188163c1949799a62591cb82e4f2b6e7cc37aa3b01bf614c57fc2b512dba2dcf8bdc1869e62bcaab41058b301b8197ab0b4f99fd007ef4adb9721509ea2d4e9aa49a705501c6109a51300c3acda80d699ef8963506c985aba70207fd7cdcc01d5de3a14a5d9287e1277418594aa7da4ca28e07d20d09e283d87c687f2e9da46ffdb40da2e7a77644cda90bfcb4bf6381988255d202a05b062951c1eb417af4e55a1bdccb7e5f166e900eb1d6123d11e5645799a60facc8c6cd32ad30b9604cffd2b47152a813e534fb963d12ae6c835df35b84cf0da6f25d3fe5edb29ad7340c42b39687cee805aac01e419e37f795af1c5cc7b30bd3a729258d6a37dec95a6cae96dfcf9c6ffa53c3a1e96be5c1cf9454afb8270330d6b86dc98555c8ccbd77141ea54cfe14eaed9ea1437b00205432d74f2dbf0adb1a34839f03f1da2472750ab836fae40e257ec8970c90aa1a833a48d5da510e642b5370cdd49bb9274a56fb107c9f11f1657b4bee58777a6075a1c96abee807fb92f8cfb5498fffb1d4ec4fa2e4f78788f11c4ca1bb573687b9160b2b0cba015a3a30e363c2638b27aeaae44971cc5c045c7238cb3f608e02fce412168b7803533e324b2237cd7211a3cba52bd18533ece205c653665111b6f6b8a862eca104513c8221443803b4a2d4f30326ad724c77363681ffd05b794a3403ea3d886b0348fc019051ac715d1ce6981d51c4fd52d56f4675b6bb97c19bfdb16a45182303775073aa18c45bf5d643f9813514960a05c8bd61d09424372b80a9a42a29730def7c31253ee9a67b16ef798cd8037dd471e9820b821eb536f2ab7dcde42e8e0838726bac36dfd4a91bdf0b11a138cac29eaab7e199d0ffc16d11d83ab48ae609eee186f7ac4e7d5bb76f40f3467925e01a3ed7bfe4af13bae77745342e7bda087779adf1e9dae19d7c36716318130ca0d6
},
}
for _, test := range tests {
serializedTx, _ := hex.DecodeString(test.txHex)
buffer := new(bytes.Buffer)
buffer.Write(serializedTx)
transaction, err := ParseTransaction(buffer)
if err != nil {
t.Errorf("%s: error parsing tx: %s", test.name, err)
}
if !transaction.rctSignature.VerifyRctSimple() {
t.Errorf("%s: not verified", test.name)
}
pubkeys := make([][]CtKey, len(test.inputOutpoints))
for i, outPoint := range test.inputOutpoints {
pubkeys[i] = make([]CtKey, len(outPoint))
for j, point := range outPoint {
pubkeys[i][j] = CtKey{
destination: HexToKey(point),
}
}
}
transaction.ExpandTransaction(pubkeys)
}
}