|
18 | 18 | using Neo.Network.P2P; |
19 | 19 | using Neo.Network.P2P.Payloads; |
20 | 20 | using Neo.SmartContract; |
| 21 | +using Neo.Persistence; |
21 | 22 | using Neo.SmartContract.Native; |
22 | 23 | using Neo.VM; |
23 | 24 | using Org.BouncyCastle.Utilities.Encoders; |
@@ -263,6 +264,33 @@ public void TestBls12381Pairing() |
263 | 264 | Assert.AreEqual(expected.ToLower(), result.GetInterface<Gt>().ToArray().ToHexString()); |
264 | 265 | } |
265 | 266 |
|
| 267 | + [TestMethod] |
| 268 | + public void TestBls12AddAliases() |
| 269 | + { |
| 270 | + var expected = InvokeBlsAddMethod("bls12381Add"); |
| 271 | + foreach (var alias in new[] { "bls12_g1add", "bls12_g2add" }) |
| 272 | + { |
| 273 | + CollectionAssert.AreEqual(expected, InvokeBlsAddMethod(alias)); |
| 274 | + } |
| 275 | + } |
| 276 | + |
| 277 | + [TestMethod] |
| 278 | + public void TestBls12MulAliases() |
| 279 | + { |
| 280 | + var expected = InvokeBlsMulMethod("bls12381Mul", false); |
| 281 | + foreach (var alias in new[] { "bls12_g1mul", "bls12_g2mul" }) |
| 282 | + { |
| 283 | + CollectionAssert.AreEqual(expected, InvokeBlsMulMethod(alias, false)); |
| 284 | + } |
| 285 | + } |
| 286 | + |
| 287 | + [TestMethod] |
| 288 | + public void TestBls12PairingAlias() |
| 289 | + { |
| 290 | + var expected = InvokeBlsPairingMethod("bls12381Pairing"); |
| 291 | + CollectionAssert.AreEqual(expected, InvokeBlsPairingMethod("bls12_pairing")); |
| 292 | + } |
| 293 | + |
266 | 294 | [TestMethod] |
267 | 295 | public void Bls12381Equal() |
268 | 296 | { |
@@ -1174,5 +1202,62 @@ private bool CallVerifyWithEd25519(byte[] message, byte[] publicKey, byte[] sign |
1174 | 1202 | return engine.ResultStack.Pop().GetBoolean(); |
1175 | 1203 | } |
1176 | 1204 | } |
| 1205 | + |
| 1206 | + private byte[] InvokeBlsAddMethod(string methodName) |
| 1207 | + { |
| 1208 | + var snapshotCache = TestBlockchain.GetTestSnapshotCache(); |
| 1209 | + using ScriptBuilder script = new(); |
| 1210 | + script.EmitDynamicCall(NativeContract.CryptoLib.Hash, "bls12381Deserialize", gt); |
| 1211 | + script.EmitDynamicCall(NativeContract.CryptoLib.Hash, "bls12381Deserialize", gt); |
| 1212 | + script.EmitPush(2); |
| 1213 | + script.Emit(OpCode.PACK); |
| 1214 | + script.EmitPush(CallFlags.All); |
| 1215 | + script.EmitPush(methodName); |
| 1216 | + script.EmitPush(NativeContract.CryptoLib.Hash); |
| 1217 | + script.EmitSysCall(ApplicationEngine.System_Contract_Call); |
| 1218 | + return ExecuteBlsScript(script, snapshotCache); |
| 1219 | + } |
| 1220 | + |
| 1221 | + private byte[] InvokeBlsMulMethod(string methodName, bool neg) |
| 1222 | + { |
| 1223 | + var snapshotCache = TestBlockchain.GetTestSnapshotCache(); |
| 1224 | + using ScriptBuilder script = new(); |
| 1225 | + byte[] data = new byte[32]; |
| 1226 | + data[0] = 0x03; |
| 1227 | + script.EmitPush(neg); |
| 1228 | + script.EmitPush(data); |
| 1229 | + script.EmitDynamicCall(NativeContract.CryptoLib.Hash, "bls12381Deserialize", gt); |
| 1230 | + script.EmitPush(3); |
| 1231 | + script.Emit(OpCode.PACK); |
| 1232 | + script.EmitPush(CallFlags.All); |
| 1233 | + script.EmitPush(methodName); |
| 1234 | + script.EmitPush(NativeContract.CryptoLib.Hash); |
| 1235 | + script.EmitSysCall(ApplicationEngine.System_Contract_Call); |
| 1236 | + return ExecuteBlsScript(script, snapshotCache); |
| 1237 | + } |
| 1238 | + |
| 1239 | + private byte[] InvokeBlsPairingMethod(string methodName) |
| 1240 | + { |
| 1241 | + var snapshotCache = TestBlockchain.GetTestSnapshotCache(); |
| 1242 | + using ScriptBuilder script = new(); |
| 1243 | + script.EmitDynamicCall(NativeContract.CryptoLib.Hash, "bls12381Deserialize", g2); |
| 1244 | + script.EmitDynamicCall(NativeContract.CryptoLib.Hash, "bls12381Deserialize", g1); |
| 1245 | + script.EmitPush(2); |
| 1246 | + script.Emit(OpCode.PACK); |
| 1247 | + script.EmitPush(CallFlags.All); |
| 1248 | + script.EmitPush(methodName); |
| 1249 | + script.EmitPush(NativeContract.CryptoLib.Hash); |
| 1250 | + script.EmitSysCall(ApplicationEngine.System_Contract_Call); |
| 1251 | + return ExecuteBlsScript(script, snapshotCache); |
| 1252 | + } |
| 1253 | + |
| 1254 | + private byte[] ExecuteBlsScript(ScriptBuilder script, StoreCache snapshotCache) |
| 1255 | + { |
| 1256 | + using var engine = ApplicationEngine.Create(TriggerType.Application, null, snapshotCache, |
| 1257 | + settings: TestProtocolSettings.Default); |
| 1258 | + engine.LoadScript(script.ToArray()); |
| 1259 | + Assert.AreEqual(VMState.HALT, engine.Execute()); |
| 1260 | + return engine.ResultStack.Pop().GetInterface<Gt>().ToArray(); |
| 1261 | + } |
1177 | 1262 | } |
1178 | 1263 | } |
0 commit comments