2023-07-02 17:14:50 +02:00
# Constantine
# Copyright (c) 2018-2019 Status Research & Development GmbH
# Copyright (c) 2020-Present Mamy André-Ratsimbazafy
# Licensed and distributed under either of
# * MIT license (license terms in the root directory or at http://opensource.org/licenses/MIT).
# * Apache v2 license (license terms in the root directory or at http://www.apache.org/licenses/LICENSE-2.0).
# at your option. This file may not be copied, modified, or distributed except according to those terms.
import
.. / constantine / ethereum_evm_precompiles ,
std / unittest
suite " EVM ModExp precompile (EIP-198) " :
test " Audit #5 - Fuzz failure with even modulus " :
let input = [
# Length of base (1)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of exponent (1)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of modulus (1)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Base
0x06 ,
# Exponent
0x02 ,
# Modulus
0x04
]
var r = newSeq [ byte ] ( 1 )
let status = r . eth_evm_modexp ( input )
doAssert status = = cttEVM_Success
doAssert r [ 0 ] = = 0 , " . Result was " & $ r [ 0 ]
2023-07-11 09:06:46 +02:00
2023-09-06 20:01:35 +02:00
test " Audit #5-2 - Fuzz failure with even modulus strikes back " :
let input = [
# Length of base (1)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of exponent (5)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x05 ,
# Length of modulus (1)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Base
0x3a ,
# Exponent
0x01 , 0x00 , 0x00 , 0x00 , 0x00 ,
# Modulus
0x08
]
var r = newSeq [ byte ] ( 1 )
let status = r . eth_evm_modexp ( input )
doAssert status = = cttEVM_Success
doAssert r [ 0 ] = = 0 , " . Result was " & $ r [ 0 ]
2023-10-10 05:57:03 +00:00
test " Audit #5-3 - temp buffer extra uninitialized word " :
2023-09-09 09:20:01 +02:00
let input = [
# Length of base (1)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of exponent (2)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x02 ,
# Length of modulus (9)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x09 ,
# Base
0x02 ,
# Exponent
0x02 , 0x65 ,
# Modulus
0x05 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x98
]
var r = newSeq [ byte ] ( 9 )
let status = r . eth_evm_modexp ( input )
doAssert status = = cttEVM_Success
doAssert r = = @ [ byte 0 , 0 , 1 , 45 , 106 , 227 , 225 , 162 , 136 ] , " . Result was " & $ r
2023-10-10 05:57:03 +00:00
test " Audit #5-4 - temp buffer extra uninitialized word (2) " :
var input = [
# Length of base
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0c ,
# Length of exponent
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x08 ,
# Length of modulus
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x2b ,
# Base
0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ,
# Exponent
0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xe0 ,
# Modulus
0x17 , 0xc6 , 0xab , 0xaa , 0x3f , 0x00 , 0xe5 , 0xc0 , 0x5b , 0x75 , 0x74 , 0xcb ,
0xcf , 0x2a , 0x44 , 0xd4 , 0x3a , 0xca , 0x4a , 0xc0 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
]
var r = newSeq [ byte ] ( 0x2b )
let status = eth_evm_modexp ( r , input )
doAssert status = = cttEVM_Success
doAssert r = = @ [ byte 10 , 141 , 74 , 46 , 2 , 18 , 2 , 37 , 247 , 220 , 246 , 65 , 109 , 246 , 7 , 144 , 85 , 202 , 194 , 191 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ] , " . Result was " & $ r
2023-07-11 09:06:46 +02:00
test " Audit #8 - off-by-1 buffer overflow - ptr + length exclusive vs openArray(lo, hi) inclusive " :
let input = [
# Length of base (24)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x18 ,
# Length of exponent (36)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x24 ,
# Length of modulus (56)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x38 ,
# Base
0x07 , 0x19 , 0x2b , 0x95 , 0xff , 0xc8 , 0xda , 0x78 , 0x63 , 0x10 , 0x11 , 0xed , 0x6b , 0x24 , 0xcd , 0xd5 ,
0x73 , 0xf9 , 0x77 , 0xa1 , 0x1e , 0x79 , 0x48 , 0x11 ,
# Exponent
0x03 , 0x67 , 0x68 , 0x54 , 0xfe , 0x24 , 0x14 , 0x1c , 0xb9 , 0x8f , 0xe6 , 0xd4 , 0xb2 , 0x0d , 0x02 , 0xb4 ,
0x51 , 0x6f , 0xf7 , 0x02 , 0x35 , 0x0e , 0xdd , 0xb0 , 0x82 , 0x67 , 0x79 , 0xc8 , 0x13 , 0xf0 , 0xdf , 0x45 ,
0xbe , 0x81 , 0x12 , 0xf4 ,
# Modulus
0x1a , 0xbf , 0x81 , 0x1f , 0x86 , 0xe1 , 0x02 , 0x78 , 0x66 , 0xe4 , 0x23 , 0x65 , 0x49 , 0x0f , 0x8d , 0x6e ,
0xc2 , 0x23 , 0x94 , 0x18 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
]
var r = newSeq [ byte ] ( 56 )
let status = r . eth_evm_modexp ( input )
2023-09-06 15:00:29 +02:00
doAssert status = = cttEVM_Success
test " Audit #18 - Handling of inputs infinitely right-padded with zeros (read past buffers or stack overflow for temporaries) " :
let input = [
# Base length
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x08 ,
# Exponent length
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xab , 0xa8 , 0xfd ,
# Modulus length
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
0xc1 , 0x00 , 0x00 , 0x00 , 0x51 , 0x00 , 0x9b , 0x9b ,
0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b ,
0x9b , 0x9b , 0x9b , 0x9b , 0x00 , 0x50 , 0x50 , 0x50 ,
0x50 , 0x50 , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b ,
0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b ,
0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b ,
0x9b , 0x9b , 0xbc , 0x9b , 0xa0 , 0x9b , 0x9b , 0x9b ,
0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b ,
0x9b , 0x9b , 0x9b , 0x9b , 0x00 , 0x50 , 0x50 , 0x50 ,
0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 ,
0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 ,
0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x00 , 0x00 , 0x00 ,
0xa0 ]
var r = newSeq [ byte ] ( 1 )
let status = r . eth_evm_modexp ( input )
2023-10-22 03:54:09 +02:00
doAssert status = = cttEVM_Success , " Failure status: " & $ status
2023-10-19 01:20:52 +02:00
test " Audit #6 - DOS Vector 1 " :
let input = [
# Length of base (32)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 ,
# Length of exponent (32)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 ,
# Length of modulus (32)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x20 ,
# Base (96064778440517843452771003943013638877275214272712651271554889917016327417616)
0xd4 , 0x62 , 0xbc , 0xde , 0x8f , 0x57 , 0xb0 , 0x4a , 0x3f , 0xe1 , 0x16 , 0xc8 , 0x12 , 0x8c , 0x44 , 0x34 ,
0xcf , 0x10 , 0x25 , 0x2e , 0x48 , 0xa3 , 0xcc , 0x0d , 0x28 , 0xdf , 0x2b , 0xac , 0x4a , 0x8d , 0x6f , 0x10 ,
# Exponent (96064778440517843452771003943013638877275214272712651271554889917016327417616)
0xd4 , 0x62 , 0xbc , 0xde , 0x8f , 0x57 , 0xb0 , 0x4a , 0x3f , 0xe1 , 0x16 , 0xc8 , 0x12 , 0x8c , 0x44 , 0x34 ,
0xcf , 0x10 , 0x25 , 0x2e , 0x48 , 0xa3 , 0xcc , 0x0d , 0x28 , 0xdf , 0x2b , 0xac , 0x4a , 0x8d , 0x6f , 0x10 ,
# Modulus (57896044618658097711785492504343953926634992332820282019728792003956564819968)
0x80 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
]
var r = newSeq [ byte ] ( 32 )
let status = r . eth_evm_modexp ( input )
doAssert status = = cttEVM_Success
doAssert r = = @ [ byte 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ]
test " Audit #6 - DOS Vector 2 " :
let input = [
# Length of base (1)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of exponent (1)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of modulus (121)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x79 ,
# Base
0x33 ,
# Exponent
0x01 ,
# Modulus
0x04 , 0xea , 0xbb , 0x12 , 0x55 , 0x88 , 0xd7 , 0x3c , 0xad , 0x22 , 0xea , 0x2b , 0x4a , 0x77 , 0x6e , 0x9d ,
0x4d , 0xfc , 0x13 , 0xa8 , 0x1b , 0xf9 , 0x0c , 0x0d , 0x37 , 0xe8 , 0x4e , 0x8b , 0xeb , 0xb2 , 0xa5 , 0x48 ,
0x8b , 0x2c , 0x87 , 0x6d , 0x13 , 0x51 , 0x75 , 0xeb , 0x97 , 0xc6 , 0x13 , 0xd9 , 0x06 , 0xce , 0x8b , 0x53 ,
0xd0 , 0x02 , 0x68 , 0xb8 , 0xd6 , 0x12 , 0xab , 0x8b , 0x15 , 0x0c , 0xef , 0x0a , 0xd0 , 0x3b , 0x73 , 0xd2 ,
0xdb , 0x9d , 0x2a , 0xa5 , 0x23 , 0x70 , 0xdc , 0x26 , 0x55 , 0x80 , 0xca , 0xf2 , 0xc0 , 0x18 , 0xe3 , 0xe3 ,
0x1b , 0xad , 0xd5 , 0x22 , 0xdd , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x1c , 0x05 , 0x71 , 0x52 , 0x7c , 0x3a , 0xb0 , 0x77 ,
]
var r = newSeq [ byte ] ( 121 )
let status = r . eth_evm_modexp ( input )
doAssert status = = cttEVM_Success
doAssert r = = @ [ byte 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 51 ]
test " Audit #6 - DOS Vector 2.a - shortcuttable with even modulus " :
let input = [
# Length of base (1)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of exponent (1)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of modulus (121)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x79 ,
# Base
0x33 ,
# Exponent
0x01 ,
# Modulus
0x04 , 0xea , 0xbb , 0x12 , 0x55 , 0x88 , 0xd7 , 0x3c , 0xad , 0x22 , 0xea , 0x2b , 0x4a , 0x77 , 0x6e , 0x9d ,
0x4d , 0xfc , 0x13 , 0xa8 , 0x1b , 0xf9 , 0x0c , 0x0d , 0x37 , 0xe8 , 0x4e , 0x8b , 0xeb , 0xb2 , 0xa5 , 0x48 ,
0x8b , 0x2c , 0x87 , 0x6d , 0x13 , 0x51 , 0x75 , 0xeb , 0x97 , 0xc6 , 0x13 , 0xd9 , 0x06 , 0xce , 0x8b , 0x53 ,
0xd0 , 0x02 , 0x68 , 0xb8 , 0xd6 , 0x12 , 0xab , 0x8b , 0x15 , 0x0c , 0xef , 0x0a , 0xd0 , 0x3b , 0x73 , 0xd2 ,
0xdb , 0x9d , 0x2a , 0xa5 , 0x23 , 0x70 , 0xdc , 0x26 , 0x55 , 0x80 , 0xca , 0xf2 , 0xc0 , 0x18 , 0xe3 , 0xe3 ,
0x1b , 0xad , 0xd5 , 0x22 , 0xdd , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x1c , 0x05 , 0x71 , 0x52 , 0x7c , 0x3a , 0xb0 , 0x76 ,
]
var r = newSeq [ byte ] ( 121 )
let status = r . eth_evm_modexp ( input )
doAssert status = = cttEVM_Success
doAssert r = = @ [ byte 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 51 ]
test " Audit #6 - DOS Vector 2.b - odd modulus with no shortcut " :
let input = [
# Length of base (1)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of exponent (1)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of modulus (121)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x79 ,
# Base
0x33 ,
# Exponent
0x10 ,
# Modulus
0x04 , 0xea , 0xbb , 0x12 , 0x55 , 0x88 , 0xd7 , 0x3c , 0xad , 0x22 , 0xea , 0x2b , 0x4a , 0x77 , 0x6e , 0x9d ,
0x4d , 0xfc , 0x13 , 0xa8 , 0x1b , 0xf9 , 0x0c , 0x0d , 0x37 , 0xe8 , 0x4e , 0x8b , 0xeb , 0xb2 , 0xa5 , 0x48 ,
0x8b , 0x2c , 0x87 , 0x6d , 0x13 , 0x51 , 0x75 , 0xeb , 0x97 , 0xc6 , 0x13 , 0xd9 , 0x06 , 0xce , 0x8b , 0x53 ,
0xd0 , 0x02 , 0x68 , 0xb8 , 0xd6 , 0x12 , 0xab , 0x8b , 0x15 , 0x0c , 0xef , 0x0a , 0xd0 , 0x3b , 0x73 , 0xd2 ,
0xdb , 0x9d , 0x2a , 0xa5 , 0x23 , 0x70 , 0xdc , 0x26 , 0x55 , 0x80 , 0xca , 0xf2 , 0xc0 , 0x18 , 0xe3 , 0xe3 ,
0x1b , 0xad , 0xd5 , 0x22 , 0xdd , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x1c , 0x05 , 0x71 , 0x52 , 0x7c , 0x3a , 0xb0 , 0x77 ,
]
var r = newSeq [ byte ] ( 121 )
let status = r . eth_evm_modexp ( input )
doAssert status = = cttEVM_Success
doAssert r = = @ [ byte 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 6 , 196 , 178 , 252 , 11 , 73 , 111 , 4 , 209 , 77 , 144 , 65 ]
test " Audit #6 - DOS Vector 2.c - odd modulus with no shortcut " :
let input = [
# Length of base (1)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of exponent (1)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of modulus (121)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x79 ,
# Base
0x33 ,
# Exponent
0x07 ,
# Modulus
0x04 , 0xea , 0xbb , 0x12 , 0x55 , 0x88 , 0xd7 , 0x3c , 0xad , 0x22 , 0xea , 0x2b , 0x4a , 0x77 , 0x6e , 0x9d ,
0x4d , 0xfc , 0x13 , 0xa8 , 0x1b , 0xf9 , 0x0c , 0x0d , 0x37 , 0xe8 , 0x4e , 0x8b , 0xeb , 0xb2 , 0xa5 , 0x48 ,
0x8b , 0x2c , 0x87 , 0x6d , 0x13 , 0x51 , 0x75 , 0xeb , 0x97 , 0xc6 , 0x13 , 0xd9 , 0x06 , 0xce , 0x8b , 0x53 ,
0xd0 , 0x02 , 0x68 , 0xb8 , 0xd6 , 0x12 , 0xab , 0x8b , 0x15 , 0x0c , 0xef , 0x0a , 0xd0 , 0x3b , 0x73 , 0xd2 ,
0xdb , 0x9d , 0x2a , 0xa5 , 0x23 , 0x70 , 0xdc , 0x26 , 0x55 , 0x80 , 0xca , 0xf2 , 0xc0 , 0x18 , 0xe3 , 0xe3 ,
0x1b , 0xad , 0xd5 , 0x22 , 0xdd , 0x10 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x1c , 0x05 , 0x71 , 0x52 , 0x7c , 0x3a , 0xb0 , 0x77 ,
]
var r = newSeq [ byte ] ( 121 )
let status = r . eth_evm_modexp ( input )
doAssert status = = cttEVM_Success
doAssert r = = @ [ byte 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 208 , 241 , 216 , 60 , 91 ]
test " Audit #6 - DOS Vector 2.d - power-of-2 modulus with no shortcut " :
let input = [
# Length of base (1)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of exponent (1)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of modulus (121)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x79 ,
# Base
0x33 ,
# Exponent
0x07 ,
# Modulus
0x04 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
]
var r = newSeq [ byte ] ( 121 )
let status = r . eth_evm_modexp ( input )
doAssert status = = cttEVM_Success
doAssert r = = @ [ byte 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 208 , 241 , 216 , 60 , 91 ]
test " Audit #5 - Modified padded exponent " :
let input = [
# Length of base (1)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of exponent (1)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 ,
# Length of modulus (1)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Base
0x06 ,
# Exponent
0x00 , 0x00 , 0x02 ,
# Modulus
0x04
]
var r = newSeq [ byte ] ( 1 )
let status = r . eth_evm_modexp ( input )
doAssert status = = cttEVM_Success
doAssert r [ 0 ] = = 0 , " . Result was " & $ r [ 0 ]
test " Audit #5-2 - Modified padded exponent " :
let input = [
# Length of base (1)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of exponent (5)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0A ,
# Length of modulus (1)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Base
0x3a ,
# Exponent
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 ,
# Modulus
0x08
]
var r = newSeq [ byte ] ( 1 )
let status = r . eth_evm_modexp ( input )
doAssert status = = cttEVM_Success
doAssert r [ 0 ] = = 0 , " . Result was " & $ r [ 0 ]
test " Audit #5-3 - Modified padded exponent " :
let input = [
# Length of base (1)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
# Length of exponent (2)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 ,
# Length of modulus (9)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x09 ,
# Base
0x02 ,
# Exponent
0x00 , 0x02 , 0x65 ,
# Modulus
0x05 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x03 , 0x98
]
var r = newSeq [ byte ] ( 9 )
let status = r . eth_evm_modexp ( input )
doAssert status = = cttEVM_Success
doAssert r = = @ [ byte 0 , 0 , 1 , 45 , 106 , 227 , 225 , 162 , 136 ] , " . Result was " & $ r
test " Audit #5-4 - Modified padded exponent " :
var input = [
# Length of base
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x0c ,
# Length of exponent
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x09 ,
# Length of modulus
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x2b ,
# Base
0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff ,
# Exponent
0x00 , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xe0 ,
# Modulus
0x17 , 0xc6 , 0xab , 0xaa , 0x3f , 0x00 , 0xe5 , 0xc0 , 0x5b , 0x75 , 0x74 , 0xcb ,
0xcf , 0x2a , 0x44 , 0xd4 , 0x3a , 0xca , 0x4a , 0xc0 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
]
var r = newSeq [ byte ] ( 0x2b )
let status = eth_evm_modexp ( r , input )
doAssert status = = cttEVM_Success
doAssert r = = @ [ byte 10 , 141 , 74 , 46 , 2 , 18 , 2 , 37 , 247 , 220 , 246 , 65 , 109 , 246 , 7 , 144 , 85 , 202 , 194 , 191 , 255 , 255 , 255 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 32 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 ] , " . Result was " & $ r
test " Audit #8 - Modified padded exponent " :
let input = [
# Length of base (24)
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x18 ,
# Length of exponent (36)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x25 ,
# Length of modulus (56)
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x38 ,
# Base
0x07 , 0x19 , 0x2b , 0x95 , 0xff , 0xc8 , 0xda , 0x78 , 0x63 , 0x10 , 0x11 , 0xed , 0x6b , 0x24 , 0xcd , 0xd5 ,
0x73 , 0xf9 , 0x77 , 0xa1 , 0x1e , 0x79 , 0x48 , 0x11 ,
# Exponent
0x00 ,
0x03 , 0x67 , 0x68 , 0x54 , 0xfe , 0x24 , 0x14 , 0x1c , 0xb9 , 0x8f , 0xe6 , 0xd4 , 0xb2 , 0x0d , 0x02 , 0xb4 ,
0x51 , 0x6f , 0xf7 , 0x02 , 0x35 , 0x0e , 0xdd , 0xb0 , 0x82 , 0x67 , 0x79 , 0xc8 , 0x13 , 0xf0 , 0xdf , 0x45 ,
0xbe , 0x81 , 0x12 , 0xf4 ,
# Modulus
0x1a , 0xbf , 0x81 , 0x1f , 0x86 , 0xe1 , 0x02 , 0x78 , 0x66 , 0xe4 , 0x23 , 0x65 , 0x49 , 0x0f , 0x8d , 0x6e ,
0xc2 , 0x23 , 0x94 , 0x18 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
]
var r = newSeq [ byte ] ( 56 )
let status = r . eth_evm_modexp ( input )
doAssert status = = cttEVM_Success
test " Audit #18 - Modified padded exponent " :
let input = [
# Base length
uint8 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x08 ,
# Exponent length
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0xab , 0xa8 , 0xff ,
# Modulus length
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 ,
0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x01 ,
0xc1 , 0x00 , 0x00 , 0x00 , 0x51 , 0x00 , 0x9b , 0x9b ,
0x00 , 0x00 ,
0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b ,
0x9b , 0x9b , 0x9b , 0x9b , 0x00 , 0x50 , 0x50 , 0x50 ,
0x50 , 0x50 , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b ,
0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b ,
0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b ,
0x9b , 0x9b , 0xbc , 0x9b , 0xa0 , 0x9b , 0x9b , 0x9b ,
0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b , 0x9b ,
0x9b , 0x9b , 0x9b , 0x9b , 0x00 , 0x50 , 0x50 , 0x50 ,
0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 ,
0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x50 ,
0x50 , 0x50 , 0x50 , 0x50 , 0x50 , 0x00 , 0x00 , 0x00 ,
0xa0 ]
var r = newSeq [ byte ] ( 1 )
let status = r . eth_evm_modexp ( input )
2023-07-11 09:06:46 +02:00
doAssert status = = cttEVM_Success