public void TestNewSig() { var b = new GoSlice(); var err = SKY_cipher_RandByte(64, b); var s = new cipher_Sig(); err = SKY_cipher_NewSig(b, s); Assert.AreEqual(err, SKY_ErrInvalidLengthSig); err = SKY_cipher_RandByte(66, b); err = SKY_cipher_NewSig(b, s); Assert.AreEqual(err, SKY_ErrInvalidLengthSig); err = SKY_cipher_RandByte(67, b); err = SKY_cipher_NewSig(b, s); Assert.AreEqual(err, SKY_ErrInvalidLengthSig); err = SKY_cipher_RandByte(0, b); err = SKY_cipher_NewSig(b, s); Assert.AreEqual(err, SKY_ErrInvalidLengthSig); err = SKY_cipher_RandByte(100, b); err = SKY_cipher_NewSig(b, s); Assert.AreEqual(err, SKY_ErrInvalidLengthSig); s = new cipher_Sig(); b = new GoSlice(); err = SKY_cipher_RandByte(65, b); err = SKY_cipher_NewSig(b, s); Assert.AreEqual(err, SKY_OK); var b1 = new GoSlice(); err = SKY_cipher_RandByte(65, b1); var s1 = new cipher_Sig(); err = SKY_cipher_NewSig(b1, s1); Assert.AreEqual(err, SKY_OK); }
public void TestSignHash() { var p = new cipher_PubKey(); var s = new cipher_SecKey(); var a = new cipher__Address(); SKY_cipher_GenerateKeyPair(p, s); var err = SKY_cipher_AddressFromPubKey(p, a); Assert.AreEqual(err, SKY_OK); var b_temp = new GoSlice(); SKY_cipher_RandByte(256, b_temp); var h = new cipher_SHA256(); SKY_cipher_SumSHA256(b_temp, h); var sig = new cipher_Sig(); SKY_cipher_SignHash(h, s, sig); Assert.AreEqual(sig.isEqual(new cipher_Sig()), 0); }
public void TestPubKeyFromSig() { var p = new cipher_PubKey(); var s = new cipher_SecKey(); var b = new GoSlice(); var h = new cipher_SHA256(); var err = SKY_cipher_GenerateKeyPair(p, s); err = SKY_cipher_RandByte(256, b); err = SKY_cipher_SumSHA256(b, h); var sig = new cipher_Sig(); err = SKY_cipher_SignHash(h, s, sig); var p2 = new cipher_PubKey(); err = SKY_cipher_PubKeyFromSig(sig, h, p2); Assert.AreEqual(err, SKY_OK); Assert.AreEqual(p2.isEqual(p), 1); p2 = new cipher_PubKey(); err = SKY_cipher_PubKeyFromSig(new cipher_Sig(), h, p2); Assert.AreEqual(err, SKY_ErrInvalidSigPubKeyRecovery); }
public void TestTransactionHashInner() { var handle = new_Transaction__Handlep(); makeTransaction(handle); var h = new cipher_SHA256(); var err = SKY_coin_Transaction_HashInner(handle, h); Assert.AreEqual(err, SKY_OK); Assert.AreEqual(h.isEqual(new cipher_SHA256()), 0); // If tx.In is changed, hash should change var handle2 = transutils.copyTransaction(handle); Assert.AreEqual(err, SKY_OK); var ux = new coin__UxOut(); makeUxOut(ux); h = new cipher_SHA256(); var h1 = new cipher_SHA256(); err = SKY_coin_UxOut_Hash(ux, h); Assert.AreEqual(err, SKY_OK); err = SKY_coin_Transaction_SetInputAt(handle2, 0, h); Assert.AreEqual(err, SKY_OK); err = SKY_coin_UxOut_Hash(ux, h1); Assert.AreEqual(err, SKY_OK); Assert.AreEqual(h.isEqual(h1), 1); err = SKY_coin_Transaction_HashInner(handle, h); Assert.AreEqual(err, SKY_OK); err = SKY_coin_Transaction_HashInner(handle2, h1); Assert.AreEqual(err, SKY_OK); Assert.AreEqual(h.isEqual(h1), 0); // If tx.Out is changed, hash should change handle2 = transutils.copyTransaction(handle); var a = transutils.makeAddress(); var pOut = new coin__TransactionOutput(); err = SKY_coin_Transaction_GetOutputAt(handle2, 0, pOut); Assert.AreEqual(err, SKY_OK); pOut.Address = a; err = SKY_coin_Transaction_SetOutputAt(handle2, 0, pOut); Assert.AreEqual(err, SKY_OK); var sha1 = new cipher_SHA256(); var sha2 = new cipher_SHA256(); err = SKY_coin_Transaction_HashInner(handle, sha1); Assert.AreEqual(err, SKY_OK); err = SKY_coin_Transaction_HashInner(handle2, sha2); Assert.AreEqual(err, SKY_OK); Assert.AreEqual(sha1.isEqual(sha2), 0); // If tx.Head is changed, hash should not change handle2 = transutils.copyTransaction(handle); var sig = new cipher_Sig(); err = SKY_coin_Transaction_PushSignature(handle, sig); Assert.AreEqual(err, SKY_OK); sha1 = new cipher_SHA256(); sha2 = new cipher_SHA256(); err = SKY_coin_Transaction_HashInner(handle, sha1); Assert.AreEqual(err, SKY_OK); err = SKY_coin_Transaction_HashInner(handle2, sha2); Assert.AreEqual(err, SKY_OK); Assert.AreEqual(sha1.isEqual(sha2), 1); }
public void TestTransactionSignInputs() { var handle = transutils.makeEmptyTransaction(); // Panics if txns already signed var sig = new cipher_Sig(); var err = SKY_coin_Transaction_PushSignature(handle, sig); Assert.AreEqual(err, SKY_OK); var seckeys = new cipher_SecKeys(); seckeys.allocate(1); seckeys.setAt(0, new cipher_SecKey()); // Panics if not enough keys handle = transutils.makeEmptyTransaction(); var s = new cipher_SecKey(); var s2 = new cipher_SecKey(); var ux = new coin__UxOut(); var ux2 = new coin__UxOut(); makeUxOutWithSecret(ux, s); var h = new cipher_SHA256(); err = SKY_coin_UxOut_Hash(ux, h); Assert.AreEqual(err, SKY_OK); var r = new uint(); r = SKY_coin_Transaction_PushInput(handle, h); Assert.AreEqual(r, SKY_OK); makeUxOutWithSecret(ux2, s2); err = SKY_coin_UxOut_Hash(ux2, h); Assert.AreEqual(err, SKY_OK); r = SKY_coin_Transaction_PushInput(handle, h); Assert.AreEqual(r, SKY_OK); err = SKY_coin_Transaction_PushOutput(handle, transutils.makeAddress(), 40, 80); Assert.AreEqual(err, SKY_OK); var count = new_Gointp(); err = SKY_coin_Transaction_GetSignaturesCount(handle, count); Assert.AreEqual(err, SKY_OK); Assert.AreEqual(Gointp_value(count), 0); // Valid signing h = new cipher_SHA256(); SKY_coin_Transaction_HashInner(handle, h); seckeys = new cipher_SecKeys(); seckeys.allocate(2); seckeys.setAt(0, s); seckeys.setAt(1, s2); err = SKY_coin_Transaction_SignInputs(handle, seckeys); Assert.AreEqual(err, SKY_OK); err = SKY_coin_Transaction_GetSignaturesCount(handle, count); Assert.AreEqual(err, SKY_OK); Assert.AreEqual(Gointp_value(count), 2); var h2 = new cipher_SHA256(); err = SKY_coin_Transaction_HashInner(handle, h2); Assert.AreEqual(err, SKY_OK); Assert.AreEqual(h.isEqual(h2), 1); var p = new cipher_PubKey(); err = SKY_cipher_PubKeyFromSecKey(s, p); Assert.AreEqual(err, SKY_OK); var a = new cipher__Address(); var a2 = new cipher__Address(); err = SKY_cipher_AddressFromPubKey(p, a); Assert.AreEqual(err, SKY_OK); err = SKY_cipher_PubKeyFromSecKey(s2, p); Assert.AreEqual(err, SKY_OK); err = SKY_cipher_AddressFromPubKey(p, a2); Assert.AreEqual(err, SKY_OK); var sha1 = new cipher_SHA256(); var sha2 = new cipher_SHA256(); var txin0 = new cipher_SHA256(); var txin1 = new cipher_SHA256(); err = SKY_coin_Transaction_GetInputAt(handle, 0, txin0); Assert.AreEqual(err, SKY_OK); err = SKY_coin_Transaction_GetInputAt(handle, 1, txin1); Assert.AreEqual(err, SKY_OK); err = SKY_cipher_AddSHA256(h, txin0, sha1); Assert.AreEqual(err, SKY_OK); err = SKY_cipher_AddSHA256(h, txin1, sha2); Assert.AreEqual(err, SKY_OK); var txsig0 = new cipher_Sig(); var txsig1 = new cipher_Sig(); err = SKY_coin_Transaction_GetSignatureAt(handle, 0, txsig0); Assert.AreEqual(err, SKY_OK); err = SKY_coin_Transaction_GetSignatureAt(handle, 1, txsig1); Assert.AreEqual(err, SKY_OK); }