Example #1
0
current_sample += j
delta2, j = dpa.dpa_addition(T[:, current_sample:], 0, message_0, 1, delta1,
                             threshold)
current_sample += j
delta3, j = dpa.dpa_addition(T[:, current_sample:], 0, message_0, 0, delta2,
                             threshold)
current_sample += j
delta = helper.byte_to_int(delta3, delta2, delta1, delta0)
if (silent != 1): print "delta=", hex(delta)
'''
 * DPA 2
 * E_1 = D_0 + T1_1
'''
if (silent != 1): print 'DPA2: Recovering D_0 from E_1 = D_0 + T1_1...'
# calculate known T1's
T1 = helper.int_to_byte_vec(helper.byte_array_to_int_vec(message_0) + delta)
d_0_0, j = dpa.dpa_addition(T[:, current_sample:], 0, T1, 3, -1, threshold)
current_sample += j
d_0_1, j = dpa.dpa_addition(T[:, current_sample:], 0, T1, 2, d_0_0, threshold)
current_sample += j
d_0_2, j = dpa.dpa_addition(T[:, current_sample:], 0, T1, 1, d_0_1, threshold)
current_sample += j
d_0_3, j = dpa.dpa_addition(T[:, current_sample:], 0, T1, 0, d_0_2, threshold)
current_sample += j

D_0 = helper.byte_to_int(d_0_3, d_0_2, d_0_1, d_0_0)
if (silent != 1): print "D_0=", hex(D_0)
'''
 * DPA 3
 * A_1 = T1_1 + T2_1
'''
def Sigma1_vec(w):
    w = np.array(w)
    value = helper.byte_array_to_int_vec(w)
    result = __Sigma1(value)
    return helper.int_to_byte_vec(result)