mirror of
				https://github.com/bitcoin/bips.git
				synced 2025-11-03 14:19:40 +00:00 
			
		
		
		
	Fail if any point is infinity when verifying
This commit is contained in:
		
							parent
							
								
									1f875a3706
								
							
						
					
					
						commit
						687198d72b
					
				@ -74,6 +74,7 @@ Input:
 | 
			
		||||
* An optional message ''m'': a 32-byte array<ref name="why_include_a_message"> ''' Why include a message as an input?''' This could be useful for protocols that want to authorize on a compound statement, not just knowledge of a scalar. This allows the protocol to combine knowledge of the scalar and the statement.</ref>
 | 
			
		||||
 | 
			
		||||
The algorithm ''VerifyProof(A, B, C, proof, G, m)'' is defined as:
 | 
			
		||||
* Fail if any of ''is_infinite(A)'', ''is_infinite(B)'', ''is_infinite(C)'', ''is_infinite(G)''
 | 
			
		||||
* Let ''e = int(proof[0:32])''.
 | 
			
		||||
* Let ''s = int(proof[32:64])''; fail if ''s ≥ n''.
 | 
			
		||||
* Let ''R<sub>1</sub> = s⋅G - e⋅A''.
 | 
			
		||||
 | 
			
		||||
@ -75,6 +75,8 @@ def dleq_generate_proof(
 | 
			
		||||
def dleq_verify_proof(
 | 
			
		||||
    A: GE, B: GE, C: GE, proof: bytes, G: GE = G, m: bytes | None = None
 | 
			
		||||
) -> bool:
 | 
			
		||||
    if A.infinity or B.infinity or C.infinity or G.infinity:
 | 
			
		||||
        return False
 | 
			
		||||
    assert len(proof) == 64
 | 
			
		||||
    e = int.from_bytes(proof[:32], "big")
 | 
			
		||||
    s = int.from_bytes(proof[32:], "big")
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user