<p>The standardness check will verify a multisig output for valid EC points. If these points do not pass this verification, the output script will be considered non-standard and not propagated by the implementations which I know of.</p>

<p>This can be verified by checking the implementation source.</p>

CC BY-SA 4.0
2018-12-27T14:55:01.543Z
2018-12-27T14:55:01.543Z
James C.
<p>On transaction verification: <a href="https://en.bitcoin.it/wiki/Protocol_documentation#Transaction_Verification" rel="nofollow noreferrer">maybe this</a> and <a href="https://en.bitcoin.it/wiki/Protocol_rules#.22tx.22_messages" rel="nofollow noreferrer">this</a>. The funding transaction might find its way into the system, cause a script in a (P2SH) multisig is the hash of a redeemscript. A verification of the redeemscript cannot be done, unless the spending tx will be sent. 
If then incorrect keys are used in a script, then the checksig script will fail, and as such the whole transaction will be rejected.
I haven't made a test with a non-redeem script. 
A non-P2SH (also called "raw") multisig would have  in the funding transaction this lock script:</p>

<pre><code>2 &lt;Public Key A&gt; &lt;Public Key B&gt; &lt;Public Key C&gt; 3 CHECKMULTISIG
</code></pre>

<p>I haven't seen that isStandard() checks the details of the public keys. Anyhow, the script has to have proper length parameters around the "invalid" keys, so script validation thinks, its just an array of hexadecimal data that shall be pushed onto the stack. And then again, data inside must not use OpCodes, which might be misinterpreted. So it's tricky, but not impossible. Need to have a proper understanding of bitcoin script though :-)</p>

CC BY-SA 4.0
2018-12-30T12:57:38.287Z
2018-12-30T13:26:10.957Z
2018-12-30T13:26:10.957Z
pebwindkraft
<p>Let's say I build a P2MS output script using uncompressed public keys, and let's say too that these public keys are not valid, i.e. they do not represent a valid EC Point and they don't start with 0x04. 
Will this transaction be broadcasted and included in a block or, among all the validity and standardness checks, a peer also controls that public keys are valid and rejects the transaction if they aren't ?
Thank you very much ! </p>

<transactions><script>
Valid public key check in transaction output
Daniele
# Valid public key check in transaction output

(Asked by: username_0 on 2018-12-27)

Let's say I build a P2MS output script using uncompressed public keys, and let's say too that these public keys are not valid, i.e. they do not represent a valid EC Point and they don't start with 0x04.
Will this transaction be broadcasted and included in a block or, among all the validity and standardness checks, a peer also controls that public keys are valid and rejects the transaction if they aren't ?
Thank you very much !

**Tags:** transactions, script


---

## 2 answers

### Answer by username_1 on 2018-12-27. Score: 0 | Accepted answer

The standardness check will verify a multisig output for valid EC points. If these points do not pass this verification, the output script will be considered non-standard and not propagated by the implementations which I know of.

This can be verified by checking the implementation source.


---

### Answer by username_2 on 2018-12-30. Score: 0

On transaction verification: [maybe this](https://en.bitcoin.it/wiki/Protocol_documentation#Transaction_Verification) and [this](https://en.bitcoin.it/wiki/Protocol_rules#.22tx.22_messages). The funding transaction might find its way into the system, cause a script in a (P2SH) multisig is the hash of a redeemscript. A verification of the redeemscript cannot be done, unless the spending tx will be sent.
If then incorrect keys are used in a script, then the checksig script will fail, and as such the whole transaction will be rejected.
I haven't made a test with a non-redeem script.
A non-P2SH (also called "raw") multisig would have in the funding transaction this lock script:

```
2 <Public Key A> <Public Key B> <Public Key C> 3 CHECKMULTISIG

```

I haven't seen that isStandard() checks the details of the public keys. Anyhow, the script has to have proper length parameters around the "invalid" keys, so script validation thinks, its just an array of hexadecimal data that shall be pushed onto the stack. And then again, data inside must not use OpCodes, which might be misinterpreted. So it's tricky, but not impossible. Need to have a proper understanding of bitcoin script though :-)


---

